zmp-cli 3.15.5 → 3.15.6-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/build/index.js +1 -184
- package/config/index.js +1 -44
- package/create/index.js +1 -230
- package/create/init-zmp-ui.js +1 -216
- package/create/templates/app-parameters.js +9 -25
- package/create/templates/common/webpack/build.js +2 -40
- package/create/templates/copy-assets.js +1 -158
- package/create/templates/core/copy-assets.js +14 -82
- package/create/templates/core/generate-home-page.js +16 -38
- package/create/templates/core/generate-root.js +28 -63
- package/create/templates/core/generate-routes.js +12 -38
- package/create/templates/core/generate-scripts.js +16 -65
- package/create/templates/create-folders.js +1 -30
- package/create/templates/generate-config-xml.js +2 -9
- package/create/templates/generate-index.js +10 -35
- package/create/templates/generate-manifest.js +1 -49
- package/create/templates/generate-recoil.js +4 -16
- package/create/templates/generate-routes.js +1 -16
- package/create/templates/generate-scripts.js +1 -16
- package/create/templates/generate-service-worker.js +4 -10
- package/create/templates/generate-store.js +4 -15
- package/create/templates/generate-styles.js +10 -64
- package/create/templates/generate-webpack-config.js +43 -125
- package/create/templates/generate-zmp-custom.js +14 -72
- package/create/templates/react/copy-assets.js +1 -85
- package/create/templates/react/generate-home-page.js +20 -50
- package/create/templates/react/generate-root.js +15 -44
- package/create/templates/react/generate-routes.js +1 -16
- package/create/templates/react/generate-scripts.js +12 -38
- package/create/templates/react/pages/404.js +2 -10
- package/create/templates/react/pages/about.js +2 -10
- package/create/templates/react/pages/catalog.js +3 -17
- package/create/templates/react/pages/dynamic-route.js +2 -10
- package/create/templates/react/pages/form.js +6 -26
- package/create/templates/react/pages/index copy.js +1 -17
- package/create/templates/react/pages/index.js +1 -17
- package/create/templates/react/pages/settings.js +3 -17
- package/create/templates/react/pages/user.js +8 -27
- package/create/templates/react-typescript/components/app-items.js +2 -9
- package/create/templates/react-typescript/components/index.js +1 -9
- package/create/templates/react-typescript/components/navbar-back.js +2 -9
- package/create/templates/react-typescript/components/user-card.js +2 -9
- package/create/templates/react-typescript/copy-assets.js +1 -94
- package/create/templates/react-typescript/generate-home-page.js +20 -52
- package/create/templates/react-typescript/generate-root.js +14 -45
- package/create/templates/react-typescript/generate-routes.js +1 -12
- package/create/templates/react-typescript/generate-scripts.js +12 -37
- package/create/templates/react-typescript/pages/404.js +2 -10
- package/create/templates/react-typescript/pages/about.js +2 -10
- package/create/templates/react-typescript/pages/catalog.js +3 -17
- package/create/templates/react-typescript/pages/dynamic-route.js +2 -10
- package/create/templates/react-typescript/pages/form.js +6 -26
- package/create/templates/react-typescript/pages/index.js +1 -17
- package/create/templates/react-typescript/pages/settings.js +3 -17
- package/create/templates/react-typescript/pages/user.js +8 -27
- package/create/templates/svelte/copy-assets.js +1 -47
- package/create/templates/svelte/generate-home-page.js +20 -56
- package/create/templates/svelte/generate-root.js +22 -80
- package/create/templates/svelte/generate-routes.js +7 -22
- package/create/templates/svelte/generate-scripts.js +7 -23
- package/create/templates/vue/copy-assets.js +1 -67
- package/create/templates/vue/generate-home-page.js +2 -8
- package/create/templates/vue/generate-root.js +3 -13
- package/create/templates/vue/generate-routes.js +1 -7
- package/create/templates/vue/generate-scripts.js +9 -26
- package/create/templates/vue/global-components.d.js +1 -0
- package/create/templates/zaui/copy-assets.js +1 -90
- package/create/templates/zaui/generate-home-page.js +27 -53
- package/create/templates/zaui/generate-root.js +14 -34
- package/create/templates/zaui/generate-routes.js +1 -10
- package/create/templates/zaui/generate-scripts.js +6 -20
- package/create/templates/zaui/generate-user-card.js +3 -18
- package/create/templates/zaui/pages/about.js +3 -20
- package/create/templates/zaui/pages/form.js +3 -20
- package/create/templates/zaui/pages/index.js +1 -9
- package/create/templates/zaui/pages/user.js +3 -20
- package/create/utils/colors.js +1 -94
- package/create/utils/generate-app-config.js +1 -34
- package/create/utils/generate-gitignore.js +1 -43
- package/create/utils/generate-npm-scripts.js +1 -26
- package/create/utils/generate-package-json.js +1 -132
- package/create/utils/generate-readme.js +1 -28
- package/create/utils/get-options.js +1 -204
- package/create/utils/indent.js +1 -31
- package/create/utils/npm-scripts.js +1 -62
- package/create/utils/string.js +1 -13
- package/create/utils/styles-extension.js +1 -9
- package/create/utils/template-if.js +1 -9
- package/deploy/index.js +1 -148
- package/deploy/utils/get-options.js +1 -69
- package/deploy/utils/request-upload.js +1 -34
- package/deploy/utils/upload-app.js +1 -82
- package/index.js +1 -319
- package/login/index.js +1 -169
- package/login/utils/get-options.js +1 -58
- package/login/utils/zalo-login.js +1 -32
- package/migrate/icons/update-icon-v3.js +1 -19
- package/migrate/index.js +1 -60
- package/migrate/utils/get-options.js +1 -46
- package/migrate/utils/migrate-react.js +1 -33
- package/package.json +11 -39
- package/start/generate-hr-config.js +1 -59
- package/start/index.js +1 -382
- package/sync/index-to-app-config.js +1 -146
- package/sync/index.js +1 -55
- package/utils/axios.js +1 -15
- package/utils/check-update.js +1 -53
- package/utils/constants.js +1 -20
- package/utils/env.js +1 -39
- package/utils/error.js +1 -16
- package/utils/find-files-by-ext.js +1 -27
- package/utils/find-free-port.js +1 -11
- package/utils/fs-extra.js +1 -90
- package/utils/generate-pages-map.js +1 -17
- package/utils/get-app-info.js +1 -22
- package/utils/get-current-project.js +1 -25
- package/utils/get-ip.js +1 -19
- package/utils/log.js +1 -19
- package/utils/node-blob.js +1 -106
- package/utils/resumable.d.js +1 -0
- package/utils/resumable.js +1 -1204
- package/utils/spinner.js +1 -25
- package/utils/tunnel.js +1 -36
- package/.editorconfig +0 -15
- package/.eslintignore +0 -8
- package/.eslintrc.js +0 -10
- package/.vscode/launch.json +0 -23
- package/LICENSE +0 -21
- package/README.git.md +0 -37
- package/assets/index.js +0 -147
- package/build/dist/index.dev.js +0 -217
- package/config/dist/index.dev.js +0 -48
- package/create/templates/dist/generate-styles.dev.js +0 -46
- package/create/utils/dist/get-options.dev.js +0 -277
- package/deploy/dist/index.dev.js +0 -227
- package/dist/index.dev.js +0 -352
- package/jsconfig.json +0 -8
- package/login/dist/index.dev.js +0 -223
- package/screenshots/wellcome.jpg +0 -0
- package/show-qr-app/assets/css/style.css +0 -87
- package/show-qr-app/assets/js/qrcode.min.js +0 -1
- package/show-qr-app/index.html +0 -57
- package/show-qr-app/package.json +0 -14
- package/start/dist/index.dev.js +0 -312
- package/ui/server.js +0 -194
- package/ui/www/css/app.css +0 -1
- package/ui/www/css/app.css.map +0 -1
- package/ui/www/fonts/ZMPIcons-Regular.eot +0 -0
- package/ui/www/fonts/ZMPIcons-Regular.ttf +0 -0
- package/ui/www/fonts/ZMPIcons-Regular.woff +0 -0
- package/ui/www/fonts/ZMPIcons-Regular.woff2 +0 -0
- package/ui/www/images/logo.png +0 -0
- package/ui/www/index.html +0 -1
- package/ui/www/js/app.js +0 -3
- package/ui/www/js/app.js.LICENSE.txt +0 -20
- package/ui/www/js/app.js.map +0 -1
- package/ui/www/static/icons/apple-touch-icon.png +0 -0
- package/ui/www/static/icons/favicon.png +0 -0
- package/utils/dist/get-app-info.dev.js +0 -54
package/utils/resumable.js
CHANGED
|
@@ -1,1204 +1 @@
|
|
|
1
|
-
const FileAPI = require('file-api');
|
|
2
|
-
const Blob = require('./node-blob');
|
|
3
|
-
const XMLHttpRequest = require('xhr2');
|
|
4
|
-
const { agent } = require('./axios');
|
|
5
|
-
|
|
6
|
-
XMLHttpRequest.nodejsSet({
|
|
7
|
-
httpAgent: agent,
|
|
8
|
-
httpsAgent: agent,
|
|
9
|
-
});
|
|
10
|
-
|
|
11
|
-
const File = FileAPI.File;
|
|
12
|
-
const FileList = FileAPI.FileList;
|
|
13
|
-
const FileReader = FileAPI.FileReader;
|
|
14
|
-
|
|
15
|
-
const Resumable = function (opts) {
|
|
16
|
-
if (!(this instanceof Resumable)) {
|
|
17
|
-
return new Resumable(opts);
|
|
18
|
-
}
|
|
19
|
-
this.version = 1.0;
|
|
20
|
-
// SUPPORTED BY BROWSER?
|
|
21
|
-
// Check if these features are support by the browser:
|
|
22
|
-
// - File object type
|
|
23
|
-
// - Blob object type
|
|
24
|
-
// - FileList object type
|
|
25
|
-
// - slicing files
|
|
26
|
-
this.support =
|
|
27
|
-
typeof File !== 'undefined' &&
|
|
28
|
-
typeof Blob !== 'undefined' &&
|
|
29
|
-
typeof FileList !== 'undefined' &&
|
|
30
|
-
(!!Blob.prototype.webkitSlice ||
|
|
31
|
-
!!Blob.prototype.mozSlice ||
|
|
32
|
-
!!Blob.prototype.slice ||
|
|
33
|
-
false);
|
|
34
|
-
if (!this.support) return false;
|
|
35
|
-
|
|
36
|
-
// PROPERTIES
|
|
37
|
-
var $ = this;
|
|
38
|
-
$.files = [];
|
|
39
|
-
$.defaults = {
|
|
40
|
-
chunkSize: 1 * 1024 * 1024,
|
|
41
|
-
forceChunkSize: false,
|
|
42
|
-
simultaneousUploads: 3,
|
|
43
|
-
fileParameterName: 'file',
|
|
44
|
-
chunkNumberParameterName: 'resumableChunkNumber',
|
|
45
|
-
chunkSizeParameterName: 'resumableChunkSize',
|
|
46
|
-
currentChunkSizeParameterName: 'resumableCurrentChunkSize',
|
|
47
|
-
totalSizeParameterName: 'resumableTotalSize',
|
|
48
|
-
typeParameterName: 'resumableType',
|
|
49
|
-
identifierParameterName: 'resumableIdentifier',
|
|
50
|
-
fileNameParameterName: 'resumableFilename',
|
|
51
|
-
relativePathParameterName: 'resumableRelativePath',
|
|
52
|
-
totalChunksParameterName: 'resumableTotalChunks',
|
|
53
|
-
throttleProgressCallbacks: 0.5,
|
|
54
|
-
query: {},
|
|
55
|
-
headers: {},
|
|
56
|
-
preprocess: null,
|
|
57
|
-
method: 'multipart',
|
|
58
|
-
uploadMethod: 'POST',
|
|
59
|
-
testMethod: 'GET',
|
|
60
|
-
prioritizeFirstAndLastChunk: false,
|
|
61
|
-
target: '/',
|
|
62
|
-
testTarget: null,
|
|
63
|
-
parameterNamespace: '',
|
|
64
|
-
testChunks: true,
|
|
65
|
-
generateUniqueIdentifier: null,
|
|
66
|
-
getTarget: null,
|
|
67
|
-
maxChunkRetries: 100,
|
|
68
|
-
chunkRetryInterval: undefined,
|
|
69
|
-
permanentErrors: [400, 404, 415, 500, 501],
|
|
70
|
-
maxFiles: undefined,
|
|
71
|
-
withCredentials: false,
|
|
72
|
-
xhrTimeout: 0,
|
|
73
|
-
clearInput: true,
|
|
74
|
-
chunkFormat: 'blob',
|
|
75
|
-
setChunkTypeFromFile: false,
|
|
76
|
-
maxFilesErrorCallback: function (files, errorCount) {
|
|
77
|
-
var maxFiles = $.getOpt('maxFiles');
|
|
78
|
-
alert(
|
|
79
|
-
'Please upload no more than ' +
|
|
80
|
-
maxFiles +
|
|
81
|
-
' file' +
|
|
82
|
-
(maxFiles === 1 ? '' : 's') +
|
|
83
|
-
' at a time.'
|
|
84
|
-
);
|
|
85
|
-
},
|
|
86
|
-
minFileSize: 1,
|
|
87
|
-
minFileSizeErrorCallback: function (file, errorCount) {
|
|
88
|
-
alert(
|
|
89
|
-
file.fileName ||
|
|
90
|
-
file.name +
|
|
91
|
-
' is too small, please upload files larger than ' +
|
|
92
|
-
$h.formatSize($.getOpt('minFileSize')) +
|
|
93
|
-
'.'
|
|
94
|
-
);
|
|
95
|
-
},
|
|
96
|
-
maxFileSize: undefined,
|
|
97
|
-
maxFileSizeErrorCallback: function (file, errorCount) {
|
|
98
|
-
alert(
|
|
99
|
-
file.fileName ||
|
|
100
|
-
file.name +
|
|
101
|
-
' is too large, please upload files less than ' +
|
|
102
|
-
$h.formatSize($.getOpt('maxFileSize')) +
|
|
103
|
-
'.'
|
|
104
|
-
);
|
|
105
|
-
},
|
|
106
|
-
fileType: [],
|
|
107
|
-
fileTypeErrorCallback: function (file, errorCount) {
|
|
108
|
-
alert(
|
|
109
|
-
file.fileName ||
|
|
110
|
-
file.name +
|
|
111
|
-
' has type not allowed, please upload files of type ' +
|
|
112
|
-
$.getOpt('fileType') +
|
|
113
|
-
'.'
|
|
114
|
-
);
|
|
115
|
-
},
|
|
116
|
-
};
|
|
117
|
-
$.opts = opts || {};
|
|
118
|
-
$.getOpt = function (o) {
|
|
119
|
-
var $opt = this;
|
|
120
|
-
// Get multiple option if passed an array
|
|
121
|
-
if (o instanceof Array) {
|
|
122
|
-
var options = {};
|
|
123
|
-
$h.each(o, function (option) {
|
|
124
|
-
options[option] = $opt.getOpt(option);
|
|
125
|
-
});
|
|
126
|
-
return options;
|
|
127
|
-
}
|
|
128
|
-
// Otherwise, just return a simple option
|
|
129
|
-
if ($opt instanceof ResumableChunk) {
|
|
130
|
-
if (typeof $opt.opts[o] !== 'undefined') {
|
|
131
|
-
return $opt.opts[o];
|
|
132
|
-
} else {
|
|
133
|
-
$opt = $opt.fileObj;
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
if ($opt instanceof ResumableFile) {
|
|
137
|
-
if (typeof $opt.opts[o] !== 'undefined') {
|
|
138
|
-
return $opt.opts[o];
|
|
139
|
-
} else {
|
|
140
|
-
$opt = $opt.resumableObj;
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
if ($opt instanceof Resumable) {
|
|
144
|
-
if (typeof $opt.opts[o] !== 'undefined') {
|
|
145
|
-
return $opt.opts[o];
|
|
146
|
-
} else {
|
|
147
|
-
return $opt.defaults[o];
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
};
|
|
151
|
-
|
|
152
|
-
// EVENTS
|
|
153
|
-
// catchAll(event, ...)
|
|
154
|
-
// fileSuccess(file), fileProgress(file), fileAdded(file, event), filesAdded(files, filesSkipped), fileRetry(file),
|
|
155
|
-
// fileError(file, message), complete(), progress(), error(message, file), pause()
|
|
156
|
-
$.events = [];
|
|
157
|
-
$.on = function (event, callback) {
|
|
158
|
-
$.events.push(event.toLowerCase(), callback);
|
|
159
|
-
};
|
|
160
|
-
$.fire = function () {
|
|
161
|
-
// `arguments` is an object, not array, in FF, so:
|
|
162
|
-
var args = [];
|
|
163
|
-
for (var i = 0; i < arguments.length; i++) args.push(arguments[i]);
|
|
164
|
-
// Find event listeners, and support pseudo-event `catchAll`
|
|
165
|
-
var event = args[0].toLowerCase();
|
|
166
|
-
for (var i = 0; i <= $.events.length; i += 2) {
|
|
167
|
-
if ($.events[i] == event) $.events[i + 1].apply($, args.slice(1));
|
|
168
|
-
if ($.events[i] == 'catchall') $.events[i + 1].apply(null, args);
|
|
169
|
-
}
|
|
170
|
-
if (event == 'fileerror') $.fire('error', args[2], args[1]);
|
|
171
|
-
if (event == 'fileprogress') $.fire('progress');
|
|
172
|
-
};
|
|
173
|
-
|
|
174
|
-
// INTERNAL HELPER METHODS (handy, but ultimately not part of uploading)
|
|
175
|
-
var $h = {
|
|
176
|
-
stopEvent: function (e) {
|
|
177
|
-
e.stopPropagation();
|
|
178
|
-
e.preventDefault();
|
|
179
|
-
},
|
|
180
|
-
each: function (o, callback) {
|
|
181
|
-
if (typeof o.length !== 'undefined') {
|
|
182
|
-
for (var i = 0; i < o.length; i++) {
|
|
183
|
-
// Array or FileList
|
|
184
|
-
if (callback(o[i]) === false) return;
|
|
185
|
-
}
|
|
186
|
-
} else {
|
|
187
|
-
for (i in o) {
|
|
188
|
-
// Object
|
|
189
|
-
if (callback(i, o[i]) === false) return;
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
},
|
|
193
|
-
generateUniqueIdentifier: function (file, event) {
|
|
194
|
-
var custom = $.getOpt('generateUniqueIdentifier');
|
|
195
|
-
if (typeof custom === 'function') {
|
|
196
|
-
return custom(file, event);
|
|
197
|
-
}
|
|
198
|
-
var relativePath = file.webkitRelativePath || file.fileName || file.name; // Some confusion in different versions of Firefox
|
|
199
|
-
var size = file.size;
|
|
200
|
-
return size + '-' + relativePath.replace(/[^0-9a-zA-Z_-]/gim, '');
|
|
201
|
-
},
|
|
202
|
-
contains: function (array, test) {
|
|
203
|
-
var result = false;
|
|
204
|
-
|
|
205
|
-
$h.each(array, function (value) {
|
|
206
|
-
if (value == test) {
|
|
207
|
-
result = true;
|
|
208
|
-
return false;
|
|
209
|
-
}
|
|
210
|
-
return true;
|
|
211
|
-
});
|
|
212
|
-
|
|
213
|
-
return result;
|
|
214
|
-
},
|
|
215
|
-
formatSize: function (size) {
|
|
216
|
-
if (size < 1024) {
|
|
217
|
-
return size + ' bytes';
|
|
218
|
-
} else if (size < 1024 * 1024) {
|
|
219
|
-
return (size / 1024.0).toFixed(0) + ' KB';
|
|
220
|
-
} else if (size < 1024 * 1024 * 1024) {
|
|
221
|
-
return (size / 1024.0 / 1024.0).toFixed(1) + ' MB';
|
|
222
|
-
} else {
|
|
223
|
-
return (size / 1024.0 / 1024.0 / 1024.0).toFixed(1) + ' GB';
|
|
224
|
-
}
|
|
225
|
-
},
|
|
226
|
-
getTarget: function (request, params) {
|
|
227
|
-
var target = $.getOpt('target');
|
|
228
|
-
|
|
229
|
-
if (request === 'test' && $.getOpt('testTarget')) {
|
|
230
|
-
target =
|
|
231
|
-
$.getOpt('testTarget') === '/'
|
|
232
|
-
? $.getOpt('target')
|
|
233
|
-
: $.getOpt('testTarget');
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
if (typeof target === 'function') {
|
|
237
|
-
return target(params);
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
var separator = target.indexOf('?') < 0 ? '?' : '&';
|
|
241
|
-
var joinedParams = params.join('&');
|
|
242
|
-
|
|
243
|
-
return target + separator + joinedParams;
|
|
244
|
-
},
|
|
245
|
-
};
|
|
246
|
-
|
|
247
|
-
var onDrop = function (event) {
|
|
248
|
-
$h.stopEvent(event);
|
|
249
|
-
|
|
250
|
-
//handle dropped things as items if we can (this lets us deal with folders nicer in some cases)
|
|
251
|
-
if (event.dataTransfer && event.dataTransfer.items) {
|
|
252
|
-
loadFiles(event.dataTransfer.items, event);
|
|
253
|
-
}
|
|
254
|
-
//else handle them as files
|
|
255
|
-
else if (event.dataTransfer && event.dataTransfer.files) {
|
|
256
|
-
loadFiles(event.dataTransfer.files, event);
|
|
257
|
-
}
|
|
258
|
-
};
|
|
259
|
-
var preventDefault = function (e) {
|
|
260
|
-
e.preventDefault();
|
|
261
|
-
};
|
|
262
|
-
|
|
263
|
-
/**
|
|
264
|
-
* processes a single upload item (file or directory)
|
|
265
|
-
* @param {Object} item item to upload, may be file or directory entry
|
|
266
|
-
* @param {string} path current file path
|
|
267
|
-
* @param {File[]} items list of files to append new items to
|
|
268
|
-
* @param {Function} cb callback invoked when item is processed
|
|
269
|
-
*/
|
|
270
|
-
function processItem(item, path, items, cb) {
|
|
271
|
-
var entry;
|
|
272
|
-
if (item.isFile) {
|
|
273
|
-
// file provided
|
|
274
|
-
return item.file(function (file) {
|
|
275
|
-
file.relativePath = path + file.name;
|
|
276
|
-
items.push(file);
|
|
277
|
-
cb();
|
|
278
|
-
});
|
|
279
|
-
} else if (item.isDirectory) {
|
|
280
|
-
// item is already a directory entry, just assign
|
|
281
|
-
entry = item;
|
|
282
|
-
} else if (item instanceof File) {
|
|
283
|
-
items.push(item);
|
|
284
|
-
}
|
|
285
|
-
if ('function' === typeof item.webkitGetAsEntry) {
|
|
286
|
-
// get entry from file object
|
|
287
|
-
entry = item.webkitGetAsEntry();
|
|
288
|
-
}
|
|
289
|
-
if (entry && entry.isDirectory) {
|
|
290
|
-
// directory provided, process it
|
|
291
|
-
return processDirectory(entry, path + entry.name + '/', items, cb);
|
|
292
|
-
}
|
|
293
|
-
if ('function' === typeof item.getAsFile) {
|
|
294
|
-
// item represents a File object, convert it
|
|
295
|
-
item = item.getAsFile();
|
|
296
|
-
if (item instanceof File) {
|
|
297
|
-
item.relativePath = path + item.name;
|
|
298
|
-
items.push(item);
|
|
299
|
-
}
|
|
300
|
-
}
|
|
301
|
-
cb(); // indicate processing is done
|
|
302
|
-
}
|
|
303
|
-
|
|
304
|
-
/**
|
|
305
|
-
* cps-style list iteration.
|
|
306
|
-
* invokes all functions in list and waits for their callback to be
|
|
307
|
-
* triggered.
|
|
308
|
-
* @param {Function[]} items list of functions expecting callback parameter
|
|
309
|
-
* @param {Function} cb callback to trigger after the last callback has been invoked
|
|
310
|
-
*/
|
|
311
|
-
function processCallbacks(items, cb) {
|
|
312
|
-
if (!items || items.length === 0) {
|
|
313
|
-
// empty or no list, invoke callback
|
|
314
|
-
return cb();
|
|
315
|
-
}
|
|
316
|
-
// invoke current function, pass the next part as continuation
|
|
317
|
-
items[0](function () {
|
|
318
|
-
processCallbacks(items.slice(1), cb);
|
|
319
|
-
});
|
|
320
|
-
}
|
|
321
|
-
|
|
322
|
-
/**
|
|
323
|
-
* recursively traverse directory and collect files to upload
|
|
324
|
-
* @param {Object} directory directory to process
|
|
325
|
-
* @param {string} path current path
|
|
326
|
-
* @param {File[]} items target list of items
|
|
327
|
-
* @param {Function} cb callback invoked after traversing directory
|
|
328
|
-
*/
|
|
329
|
-
function processDirectory(directory, path, items, cb) {
|
|
330
|
-
var dirReader = directory.createReader();
|
|
331
|
-
dirReader.readEntries(function (entries) {
|
|
332
|
-
if (!entries.length) {
|
|
333
|
-
// empty directory, skip
|
|
334
|
-
return cb();
|
|
335
|
-
}
|
|
336
|
-
// process all conversion callbacks, finally invoke own one
|
|
337
|
-
processCallbacks(
|
|
338
|
-
entries.map(function (entry) {
|
|
339
|
-
// bind all properties except for callback
|
|
340
|
-
return processItem.bind(null, entry, path, items);
|
|
341
|
-
}),
|
|
342
|
-
cb
|
|
343
|
-
);
|
|
344
|
-
});
|
|
345
|
-
}
|
|
346
|
-
|
|
347
|
-
/**
|
|
348
|
-
* process items to extract files to be uploaded
|
|
349
|
-
* @param {File[]} items items to process
|
|
350
|
-
* @param {Event} event event that led to upload
|
|
351
|
-
*/
|
|
352
|
-
function loadFiles(items, event) {
|
|
353
|
-
if (!items.length) {
|
|
354
|
-
return; // nothing to do
|
|
355
|
-
}
|
|
356
|
-
$.fire('beforeAdd');
|
|
357
|
-
var files = [];
|
|
358
|
-
processCallbacks(
|
|
359
|
-
Array.prototype.map.call(items, function (item) {
|
|
360
|
-
// bind all properties except for callback
|
|
361
|
-
return processItem.bind(null, item, '', files);
|
|
362
|
-
}),
|
|
363
|
-
function () {
|
|
364
|
-
if (files.length) {
|
|
365
|
-
// at least one file found
|
|
366
|
-
appendFilesFromFileList(files, event);
|
|
367
|
-
}
|
|
368
|
-
}
|
|
369
|
-
);
|
|
370
|
-
}
|
|
371
|
-
|
|
372
|
-
var appendFilesFromFileList = function (fileList, event) {
|
|
373
|
-
// check for uploading too many files
|
|
374
|
-
var errorCount = 0;
|
|
375
|
-
var o = $.getOpt([
|
|
376
|
-
'maxFiles',
|
|
377
|
-
'minFileSize',
|
|
378
|
-
'maxFileSize',
|
|
379
|
-
'maxFilesErrorCallback',
|
|
380
|
-
'minFileSizeErrorCallback',
|
|
381
|
-
'maxFileSizeErrorCallback',
|
|
382
|
-
'fileType',
|
|
383
|
-
'fileTypeErrorCallback',
|
|
384
|
-
]);
|
|
385
|
-
if (
|
|
386
|
-
typeof o.maxFiles !== 'undefined' &&
|
|
387
|
-
o.maxFiles < fileList.length + $.files.length
|
|
388
|
-
) {
|
|
389
|
-
// if single-file upload, file is already added, and trying to add 1 new file, simply replace the already-added file
|
|
390
|
-
if (o.maxFiles === 1 && $.files.length === 1 && fileList.length === 1) {
|
|
391
|
-
$.removeFile($.files[0]);
|
|
392
|
-
} else {
|
|
393
|
-
o.maxFilesErrorCallback(fileList, errorCount++);
|
|
394
|
-
return false;
|
|
395
|
-
}
|
|
396
|
-
}
|
|
397
|
-
var files = [],
|
|
398
|
-
filesSkipped = [],
|
|
399
|
-
remaining = fileList.length;
|
|
400
|
-
var decreaseReamining = function () {
|
|
401
|
-
if (!--remaining) {
|
|
402
|
-
// all files processed, trigger event
|
|
403
|
-
if (!files.length && !filesSkipped.length) {
|
|
404
|
-
// no succeeded files, just skip
|
|
405
|
-
return;
|
|
406
|
-
}
|
|
407
|
-
setTimeout(function () {
|
|
408
|
-
$.fire('filesAdded', files, filesSkipped);
|
|
409
|
-
}, 0);
|
|
410
|
-
}
|
|
411
|
-
};
|
|
412
|
-
$h.each(fileList, function (file) {
|
|
413
|
-
var fileName = file.name;
|
|
414
|
-
if (o.fileType.length > 0) {
|
|
415
|
-
var fileTypeFound = false;
|
|
416
|
-
for (var index in o.fileType) {
|
|
417
|
-
var extension = '.' + o.fileType[index];
|
|
418
|
-
if (
|
|
419
|
-
fileName
|
|
420
|
-
.toLowerCase()
|
|
421
|
-
.indexOf(
|
|
422
|
-
extension.toLowerCase(),
|
|
423
|
-
fileName.length - extension.length
|
|
424
|
-
) !== -1
|
|
425
|
-
) {
|
|
426
|
-
fileTypeFound = true;
|
|
427
|
-
break;
|
|
428
|
-
}
|
|
429
|
-
}
|
|
430
|
-
if (!fileTypeFound) {
|
|
431
|
-
o.fileTypeErrorCallback(file, errorCount++);
|
|
432
|
-
return false;
|
|
433
|
-
}
|
|
434
|
-
}
|
|
435
|
-
|
|
436
|
-
if (typeof o.minFileSize !== 'undefined' && file.size < o.minFileSize) {
|
|
437
|
-
o.minFileSizeErrorCallback(file, errorCount++);
|
|
438
|
-
return false;
|
|
439
|
-
}
|
|
440
|
-
if (typeof o.maxFileSize !== 'undefined' && file.size > o.maxFileSize) {
|
|
441
|
-
o.maxFileSizeErrorCallback(file, errorCount++);
|
|
442
|
-
return false;
|
|
443
|
-
}
|
|
444
|
-
|
|
445
|
-
function addFile(uniqueIdentifier) {
|
|
446
|
-
if (!$.getFromUniqueIdentifier(uniqueIdentifier)) {
|
|
447
|
-
(function () {
|
|
448
|
-
file.uniqueIdentifier = uniqueIdentifier;
|
|
449
|
-
var f = new ResumableFile($, file, uniqueIdentifier);
|
|
450
|
-
$.files.push(f);
|
|
451
|
-
files.push(f);
|
|
452
|
-
f.container = typeof event != 'undefined' ? event.srcElement : null;
|
|
453
|
-
setTimeout(function () {
|
|
454
|
-
$.fire('fileAdded', f, event);
|
|
455
|
-
}, 0);
|
|
456
|
-
})();
|
|
457
|
-
} else {
|
|
458
|
-
filesSkipped.push(file);
|
|
459
|
-
}
|
|
460
|
-
decreaseReamining();
|
|
461
|
-
}
|
|
462
|
-
// directories have size == 0
|
|
463
|
-
var uniqueIdentifier = $h.generateUniqueIdentifier(file, event);
|
|
464
|
-
if (uniqueIdentifier && typeof uniqueIdentifier.then === 'function') {
|
|
465
|
-
// Promise or Promise-like object provided as unique identifier
|
|
466
|
-
uniqueIdentifier.then(
|
|
467
|
-
function (uniqueIdentifier) {
|
|
468
|
-
// unique identifier generation succeeded
|
|
469
|
-
addFile(uniqueIdentifier);
|
|
470
|
-
},
|
|
471
|
-
function () {
|
|
472
|
-
// unique identifier generation failed
|
|
473
|
-
// skip further processing, only decrease file count
|
|
474
|
-
decreaseReamining();
|
|
475
|
-
}
|
|
476
|
-
);
|
|
477
|
-
} else {
|
|
478
|
-
// non-Promise provided as unique identifier, process synchronously
|
|
479
|
-
addFile(uniqueIdentifier);
|
|
480
|
-
}
|
|
481
|
-
});
|
|
482
|
-
};
|
|
483
|
-
|
|
484
|
-
// INTERNAL OBJECT TYPES
|
|
485
|
-
function ResumableFile(resumableObj, file, uniqueIdentifier) {
|
|
486
|
-
var $ = this;
|
|
487
|
-
$.opts = {};
|
|
488
|
-
$.getOpt = resumableObj.getOpt;
|
|
489
|
-
$._prevProgress = 0;
|
|
490
|
-
$.resumableObj = resumableObj;
|
|
491
|
-
$.file = file;
|
|
492
|
-
$.fileName = file.fileName || file.name; // Some confusion in different versions of Firefox
|
|
493
|
-
$.size = file.size;
|
|
494
|
-
$.relativePath = file.relativePath || file.webkitRelativePath || $.fileName;
|
|
495
|
-
$.uniqueIdentifier = uniqueIdentifier;
|
|
496
|
-
$._pause = false;
|
|
497
|
-
$.container = '';
|
|
498
|
-
var _error = uniqueIdentifier !== undefined;
|
|
499
|
-
|
|
500
|
-
// Callback when something happens within the chunk
|
|
501
|
-
var chunkEvent = function (event, message) {
|
|
502
|
-
// event can be 'progress', 'success', 'error' or 'retry'
|
|
503
|
-
switch (event) {
|
|
504
|
-
case 'progress':
|
|
505
|
-
$.resumableObj.fire('fileProgress', $, message);
|
|
506
|
-
break;
|
|
507
|
-
case 'error':
|
|
508
|
-
$.abort();
|
|
509
|
-
_error = true;
|
|
510
|
-
$.chunks = [];
|
|
511
|
-
$.resumableObj.fire('fileError', $, message);
|
|
512
|
-
break;
|
|
513
|
-
case 'success':
|
|
514
|
-
if (_error) return;
|
|
515
|
-
$.resumableObj.fire('fileProgress', $); // it's at least progress
|
|
516
|
-
if ($.isComplete()) {
|
|
517
|
-
$.resumableObj.fire('fileSuccess', $, message);
|
|
518
|
-
}
|
|
519
|
-
break;
|
|
520
|
-
case 'retry':
|
|
521
|
-
$.resumableObj.fire('fileRetry', $);
|
|
522
|
-
break;
|
|
523
|
-
}
|
|
524
|
-
};
|
|
525
|
-
|
|
526
|
-
// Main code to set up a file object with chunks,
|
|
527
|
-
// packaged to be able to handle retries if needed.
|
|
528
|
-
$.chunks = [];
|
|
529
|
-
$.abort = function () {
|
|
530
|
-
// Stop current uploads
|
|
531
|
-
var abortCount = 0;
|
|
532
|
-
$h.each($.chunks, function (c) {
|
|
533
|
-
if (c.status() == 'uploading') {
|
|
534
|
-
c.abort();
|
|
535
|
-
abortCount++;
|
|
536
|
-
}
|
|
537
|
-
});
|
|
538
|
-
if (abortCount > 0) $.resumableObj.fire('fileProgress', $);
|
|
539
|
-
};
|
|
540
|
-
$.cancel = function () {
|
|
541
|
-
// Reset this file to be void
|
|
542
|
-
var _chunks = $.chunks;
|
|
543
|
-
$.chunks = [];
|
|
544
|
-
// Stop current uploads
|
|
545
|
-
$h.each(_chunks, function (c) {
|
|
546
|
-
if (c.status() == 'uploading') {
|
|
547
|
-
c.abort();
|
|
548
|
-
$.resumableObj.uploadNextChunk();
|
|
549
|
-
}
|
|
550
|
-
});
|
|
551
|
-
$.resumableObj.removeFile($);
|
|
552
|
-
$.resumableObj.fire('fileProgress', $);
|
|
553
|
-
};
|
|
554
|
-
$.retry = function () {
|
|
555
|
-
$.bootstrap();
|
|
556
|
-
var firedRetry = false;
|
|
557
|
-
$.resumableObj.on('chunkingComplete', function () {
|
|
558
|
-
if (!firedRetry) $.resumableObj.upload();
|
|
559
|
-
firedRetry = true;
|
|
560
|
-
});
|
|
561
|
-
};
|
|
562
|
-
$.bootstrap = function () {
|
|
563
|
-
$.abort();
|
|
564
|
-
_error = false;
|
|
565
|
-
// Rebuild stack of chunks from file
|
|
566
|
-
$.chunks = [];
|
|
567
|
-
$._prevProgress = 0;
|
|
568
|
-
var round = $.getOpt('forceChunkSize') ? Math.ceil : Math.floor;
|
|
569
|
-
var maxOffset = Math.max(round($.file.size / $.getOpt('chunkSize')), 1);
|
|
570
|
-
for (var offset = 0; offset < maxOffset; offset++) {
|
|
571
|
-
(function (offset) {
|
|
572
|
-
setTimeout(function () {
|
|
573
|
-
$.chunks.push(
|
|
574
|
-
new ResumableChunk($.resumableObj, $, offset, chunkEvent)
|
|
575
|
-
);
|
|
576
|
-
$.resumableObj.fire('chunkingProgress', $, offset / maxOffset);
|
|
577
|
-
}, 0);
|
|
578
|
-
})(offset);
|
|
579
|
-
}
|
|
580
|
-
setTimeout(function () {
|
|
581
|
-
$.resumableObj.fire('chunkingComplete', $);
|
|
582
|
-
}, 0);
|
|
583
|
-
};
|
|
584
|
-
$.progress = function () {
|
|
585
|
-
if (_error) return 1;
|
|
586
|
-
// Sum up progress across everything
|
|
587
|
-
var ret = 0;
|
|
588
|
-
var error = false;
|
|
589
|
-
$h.each($.chunks, function (c) {
|
|
590
|
-
if (c.status() == 'error') error = true;
|
|
591
|
-
ret += c.progress(true); // get chunk progress relative to entire file
|
|
592
|
-
});
|
|
593
|
-
ret = error ? 1 : ret > 0.99999 ? 1 : ret;
|
|
594
|
-
ret = Math.max($._prevProgress, ret); // We don't want to lose percentages when an upload is paused
|
|
595
|
-
$._prevProgress = ret;
|
|
596
|
-
return ret;
|
|
597
|
-
};
|
|
598
|
-
$.isUploading = function () {
|
|
599
|
-
var uploading = false;
|
|
600
|
-
$h.each($.chunks, function (chunk) {
|
|
601
|
-
if (chunk.status() == 'uploading') {
|
|
602
|
-
uploading = true;
|
|
603
|
-
return false;
|
|
604
|
-
}
|
|
605
|
-
});
|
|
606
|
-
return uploading;
|
|
607
|
-
};
|
|
608
|
-
$.isComplete = function () {
|
|
609
|
-
var outstanding = false;
|
|
610
|
-
$h.each($.chunks, function (chunk) {
|
|
611
|
-
var status = chunk.status();
|
|
612
|
-
if (
|
|
613
|
-
status == 'pending' ||
|
|
614
|
-
status == 'uploading' ||
|
|
615
|
-
chunk.preprocessState === 1
|
|
616
|
-
) {
|
|
617
|
-
outstanding = true;
|
|
618
|
-
return false;
|
|
619
|
-
}
|
|
620
|
-
});
|
|
621
|
-
return !outstanding;
|
|
622
|
-
};
|
|
623
|
-
$.pause = function (pause) {
|
|
624
|
-
if (typeof pause === 'undefined') {
|
|
625
|
-
$._pause = $._pause ? false : true;
|
|
626
|
-
} else {
|
|
627
|
-
$._pause = pause;
|
|
628
|
-
}
|
|
629
|
-
};
|
|
630
|
-
$.isPaused = function () {
|
|
631
|
-
return $._pause;
|
|
632
|
-
};
|
|
633
|
-
|
|
634
|
-
// Bootstrap and return
|
|
635
|
-
$.resumableObj.fire('chunkingStart', $);
|
|
636
|
-
$.bootstrap();
|
|
637
|
-
return this;
|
|
638
|
-
}
|
|
639
|
-
|
|
640
|
-
function ResumableChunk(resumableObj, fileObj, offset, callback) {
|
|
641
|
-
var $ = this;
|
|
642
|
-
$.opts = {};
|
|
643
|
-
$.getOpt = resumableObj.getOpt;
|
|
644
|
-
$.resumableObj = resumableObj;
|
|
645
|
-
$.fileObj = fileObj;
|
|
646
|
-
$.fileObjSize = fileObj.size;
|
|
647
|
-
$.fileObjType = fileObj.file.type;
|
|
648
|
-
$.offset = offset;
|
|
649
|
-
$.callback = callback;
|
|
650
|
-
$.lastProgressCallback = new Date();
|
|
651
|
-
$.tested = false;
|
|
652
|
-
$.retries = 0;
|
|
653
|
-
$.pendingRetry = false;
|
|
654
|
-
$.preprocessState = 0; // 0 = unprocessed, 1 = processing, 2 = finished
|
|
655
|
-
|
|
656
|
-
// Computed properties
|
|
657
|
-
var chunkSize = $.getOpt('chunkSize');
|
|
658
|
-
$.loaded = 0;
|
|
659
|
-
$.startByte = $.offset * chunkSize;
|
|
660
|
-
$.endByte = Math.min($.fileObjSize, ($.offset + 1) * chunkSize);
|
|
661
|
-
if ($.fileObjSize - $.endByte < chunkSize && !$.getOpt('forceChunkSize')) {
|
|
662
|
-
// The last chunk will be bigger than the chunk size, but less than 2*chunkSize
|
|
663
|
-
$.endByte = $.fileObjSize;
|
|
664
|
-
}
|
|
665
|
-
$.xhr = null;
|
|
666
|
-
|
|
667
|
-
// test() makes a GET request without any data to see if the chunk has already been uploaded in a previous session
|
|
668
|
-
$.test = function () {
|
|
669
|
-
// Set up request and listen for event
|
|
670
|
-
$.xhr = new XMLHttpRequest();
|
|
671
|
-
|
|
672
|
-
var testHandler = function (e) {
|
|
673
|
-
$.tested = true;
|
|
674
|
-
var status = $.status();
|
|
675
|
-
if (status == 'success') {
|
|
676
|
-
$.callback(status, $.message());
|
|
677
|
-
$.resumableObj.uploadNextChunk();
|
|
678
|
-
} else {
|
|
679
|
-
$.send();
|
|
680
|
-
}
|
|
681
|
-
};
|
|
682
|
-
$.xhr.addEventListener('load', testHandler, false);
|
|
683
|
-
$.xhr.addEventListener('error', testHandler, false);
|
|
684
|
-
$.xhr.addEventListener('timeout', testHandler, false);
|
|
685
|
-
|
|
686
|
-
// Add data from the query options
|
|
687
|
-
var params = [];
|
|
688
|
-
var parameterNamespace = $.getOpt('parameterNamespace');
|
|
689
|
-
var customQuery = $.getOpt('query');
|
|
690
|
-
if (typeof customQuery == 'function')
|
|
691
|
-
customQuery = customQuery($.fileObj, $);
|
|
692
|
-
$h.each(customQuery, function (k, v) {
|
|
693
|
-
params.push(
|
|
694
|
-
[
|
|
695
|
-
encodeURIComponent(parameterNamespace + k),
|
|
696
|
-
encodeURIComponent(v),
|
|
697
|
-
].join('=')
|
|
698
|
-
);
|
|
699
|
-
});
|
|
700
|
-
// Add extra data to identify chunk
|
|
701
|
-
params = params.concat(
|
|
702
|
-
[
|
|
703
|
-
// define key/value pairs for additional parameters
|
|
704
|
-
['chunkNumberParameterName', $.offset + 1],
|
|
705
|
-
['chunkSizeParameterName', $.getOpt('chunkSize')],
|
|
706
|
-
['currentChunkSizeParameterName', $.endByte - $.startByte],
|
|
707
|
-
['totalSizeParameterName', $.fileObjSize],
|
|
708
|
-
['typeParameterName', $.fileObjType],
|
|
709
|
-
['identifierParameterName', $.fileObj.uniqueIdentifier],
|
|
710
|
-
['fileNameParameterName', $.fileObj.fileName],
|
|
711
|
-
['relativePathParameterName', $.fileObj.relativePath],
|
|
712
|
-
['totalChunksParameterName', $.fileObj.chunks.length],
|
|
713
|
-
]
|
|
714
|
-
.filter(function (pair) {
|
|
715
|
-
// include items that resolve to truthy values
|
|
716
|
-
// i.e. exclude false, null, undefined and empty strings
|
|
717
|
-
return $.getOpt(pair[0]);
|
|
718
|
-
})
|
|
719
|
-
.map(function (pair) {
|
|
720
|
-
// map each key/value pair to its final form
|
|
721
|
-
return [
|
|
722
|
-
parameterNamespace + $.getOpt(pair[0]),
|
|
723
|
-
encodeURIComponent(pair[1]),
|
|
724
|
-
].join('=');
|
|
725
|
-
})
|
|
726
|
-
);
|
|
727
|
-
// Append the relevant chunk and send it
|
|
728
|
-
$.xhr.open($.getOpt('testMethod'), $h.getTarget('test', params));
|
|
729
|
-
$.xhr.timeout = $.getOpt('xhrTimeout');
|
|
730
|
-
$.xhr.withCredentials = $.getOpt('withCredentials');
|
|
731
|
-
// Add data from header options
|
|
732
|
-
var customHeaders = $.getOpt('headers');
|
|
733
|
-
if (typeof customHeaders === 'function') {
|
|
734
|
-
customHeaders = customHeaders($.fileObj, $);
|
|
735
|
-
}
|
|
736
|
-
$h.each(customHeaders, function (k, v) {
|
|
737
|
-
$.xhr.setRequestHeader(k, v);
|
|
738
|
-
});
|
|
739
|
-
$.xhr.send(null);
|
|
740
|
-
};
|
|
741
|
-
|
|
742
|
-
$.preprocessFinished = function () {
|
|
743
|
-
$.preprocessState = 2;
|
|
744
|
-
$.send();
|
|
745
|
-
};
|
|
746
|
-
|
|
747
|
-
// send() uploads the actual data in a POST call
|
|
748
|
-
$.send = function () {
|
|
749
|
-
var preprocess = $.getOpt('preprocess');
|
|
750
|
-
if (typeof preprocess === 'function') {
|
|
751
|
-
switch ($.preprocessState) {
|
|
752
|
-
case 0:
|
|
753
|
-
$.preprocessState = 1;
|
|
754
|
-
preprocess($);
|
|
755
|
-
return;
|
|
756
|
-
case 1:
|
|
757
|
-
return;
|
|
758
|
-
case 2:
|
|
759
|
-
break;
|
|
760
|
-
}
|
|
761
|
-
}
|
|
762
|
-
if ($.getOpt('testChunks') && !$.tested) {
|
|
763
|
-
$.test();
|
|
764
|
-
return;
|
|
765
|
-
}
|
|
766
|
-
|
|
767
|
-
// Set up request and listen for event
|
|
768
|
-
$.xhr = new XMLHttpRequest();
|
|
769
|
-
// Progress
|
|
770
|
-
$.xhr.upload.addEventListener(
|
|
771
|
-
'progress',
|
|
772
|
-
function (e) {
|
|
773
|
-
if (
|
|
774
|
-
new Date() - $.lastProgressCallback >
|
|
775
|
-
$.getOpt('throttleProgressCallbacks') * 1000
|
|
776
|
-
) {
|
|
777
|
-
$.callback('progress');
|
|
778
|
-
$.lastProgressCallback = new Date();
|
|
779
|
-
}
|
|
780
|
-
$.loaded = e.loaded || 0;
|
|
781
|
-
},
|
|
782
|
-
false
|
|
783
|
-
);
|
|
784
|
-
$.loaded = 0;
|
|
785
|
-
$.pendingRetry = false;
|
|
786
|
-
$.callback('progress');
|
|
787
|
-
|
|
788
|
-
// Done (either done, failed or retry)
|
|
789
|
-
var doneHandler = function (e) {
|
|
790
|
-
var status = $.status();
|
|
791
|
-
if (status == 'success' || status == 'error') {
|
|
792
|
-
$.callback(status, $.message());
|
|
793
|
-
$.resumableObj.uploadNextChunk();
|
|
794
|
-
} else {
|
|
795
|
-
$.callback('retry', $.message());
|
|
796
|
-
$.abort();
|
|
797
|
-
$.retries++;
|
|
798
|
-
var retryInterval = $.getOpt('chunkRetryInterval');
|
|
799
|
-
if (retryInterval !== undefined) {
|
|
800
|
-
$.pendingRetry = true;
|
|
801
|
-
setTimeout($.send, retryInterval);
|
|
802
|
-
} else {
|
|
803
|
-
$.send();
|
|
804
|
-
}
|
|
805
|
-
}
|
|
806
|
-
};
|
|
807
|
-
$.xhr.addEventListener('load', doneHandler, false);
|
|
808
|
-
$.xhr.addEventListener('error', doneHandler, false);
|
|
809
|
-
$.xhr.addEventListener('timeout', doneHandler, false);
|
|
810
|
-
|
|
811
|
-
// Set up the basic query data from Resumable
|
|
812
|
-
var query = [
|
|
813
|
-
['chunkNumberParameterName', $.offset + 1],
|
|
814
|
-
['chunkSizeParameterName', $.getOpt('chunkSize')],
|
|
815
|
-
['currentChunkSizeParameterName', $.endByte - $.startByte],
|
|
816
|
-
['totalSizeParameterName', $.fileObjSize],
|
|
817
|
-
['typeParameterName', $.fileObjType],
|
|
818
|
-
['identifierParameterName', $.fileObj.uniqueIdentifier],
|
|
819
|
-
['fileNameParameterName', $.fileObj.fileName],
|
|
820
|
-
['relativePathParameterName', $.fileObj.relativePath],
|
|
821
|
-
['totalChunksParameterName', $.fileObj.chunks.length],
|
|
822
|
-
]
|
|
823
|
-
.filter(function (pair) {
|
|
824
|
-
// include items that resolve to truthy values
|
|
825
|
-
// i.e. exclude false, null, undefined and empty strings
|
|
826
|
-
return $.getOpt(pair[0]);
|
|
827
|
-
})
|
|
828
|
-
.reduce(function (query, pair) {
|
|
829
|
-
// assign query key/value
|
|
830
|
-
query[$.getOpt(pair[0])] = pair[1];
|
|
831
|
-
return query;
|
|
832
|
-
}, {});
|
|
833
|
-
// Mix in custom data
|
|
834
|
-
var customQuery = $.getOpt('query');
|
|
835
|
-
if (typeof customQuery == 'function')
|
|
836
|
-
customQuery = customQuery($.fileObj, $);
|
|
837
|
-
$h.each(customQuery, function (k, v) {
|
|
838
|
-
query[k] = v;
|
|
839
|
-
});
|
|
840
|
-
|
|
841
|
-
var func = $.fileObj.file.buffer.slice
|
|
842
|
-
? 'slice'
|
|
843
|
-
: $.fileObj.file.buffer.mozSlice
|
|
844
|
-
? 'mozSlice'
|
|
845
|
-
: $.fileObj.file.buffer.webkitSlice
|
|
846
|
-
? 'webkitSlice'
|
|
847
|
-
: 'slice';
|
|
848
|
-
var bytes = $.fileObj.file.buffer[func](
|
|
849
|
-
$.startByte,
|
|
850
|
-
$.endByte,
|
|
851
|
-
$.getOpt('setChunkTypeFromFile') ? $.fileObj.file.type : ''
|
|
852
|
-
);
|
|
853
|
-
var data = null;
|
|
854
|
-
var params = [];
|
|
855
|
-
|
|
856
|
-
var parameterNamespace = $.getOpt('parameterNamespace');
|
|
857
|
-
if ($.getOpt('method') === 'octet') {
|
|
858
|
-
// Add data from the query options
|
|
859
|
-
data = bytes;
|
|
860
|
-
$h.each(query, function (k, v) {
|
|
861
|
-
params.push(
|
|
862
|
-
[
|
|
863
|
-
encodeURIComponent(parameterNamespace + k),
|
|
864
|
-
encodeURIComponent(v),
|
|
865
|
-
].join('=')
|
|
866
|
-
);
|
|
867
|
-
});
|
|
868
|
-
} else {
|
|
869
|
-
// Add data from the query options
|
|
870
|
-
data = new FormData();
|
|
871
|
-
$h.each(query, function (k, v) {
|
|
872
|
-
data.append(parameterNamespace + k, v);
|
|
873
|
-
params.push(
|
|
874
|
-
[
|
|
875
|
-
encodeURIComponent(parameterNamespace + k),
|
|
876
|
-
encodeURIComponent(v),
|
|
877
|
-
].join('=')
|
|
878
|
-
);
|
|
879
|
-
});
|
|
880
|
-
if ($.getOpt('chunkFormat') == 'blob') {
|
|
881
|
-
data.append(
|
|
882
|
-
parameterNamespace + $.getOpt('fileParameterName'),
|
|
883
|
-
bytes,
|
|
884
|
-
$.fileObj.fileName
|
|
885
|
-
);
|
|
886
|
-
} else if ($.getOpt('chunkFormat') == 'base64') {
|
|
887
|
-
var fr = new FileReader();
|
|
888
|
-
fr.onload = function (e) {
|
|
889
|
-
data.append(
|
|
890
|
-
parameterNamespace + $.getOpt('fileParameterName'),
|
|
891
|
-
fr.result
|
|
892
|
-
);
|
|
893
|
-
$.xhr.send(data);
|
|
894
|
-
};
|
|
895
|
-
fr.readAsDataURL(bytes);
|
|
896
|
-
}
|
|
897
|
-
}
|
|
898
|
-
|
|
899
|
-
var target = $h.getTarget('upload', params);
|
|
900
|
-
var method = $.getOpt('uploadMethod');
|
|
901
|
-
|
|
902
|
-
$.xhr.open(method, target);
|
|
903
|
-
if ($.getOpt('method') === 'octet') {
|
|
904
|
-
$.xhr.setRequestHeader('Content-Type', 'application/octet-stream');
|
|
905
|
-
}
|
|
906
|
-
$.xhr.timeout = $.getOpt('xhrTimeout');
|
|
907
|
-
$.xhr.withCredentials = $.getOpt('withCredentials');
|
|
908
|
-
// Add data from header options
|
|
909
|
-
var customHeaders = $.getOpt('headers');
|
|
910
|
-
if (typeof customHeaders === 'function') {
|
|
911
|
-
customHeaders = customHeaders($.fileObj, $);
|
|
912
|
-
}
|
|
913
|
-
|
|
914
|
-
$h.each(customHeaders, function (k, v) {
|
|
915
|
-
$.xhr.setRequestHeader(k, v);
|
|
916
|
-
});
|
|
917
|
-
|
|
918
|
-
if ($.getOpt('chunkFormat') == 'blob') {
|
|
919
|
-
$.xhr.send(data);
|
|
920
|
-
}
|
|
921
|
-
};
|
|
922
|
-
$.abort = function () {
|
|
923
|
-
// Abort and reset
|
|
924
|
-
if ($.xhr) $.xhr.abort();
|
|
925
|
-
$.xhr = null;
|
|
926
|
-
};
|
|
927
|
-
$.status = function () {
|
|
928
|
-
// Returns: 'pending', 'uploading', 'success', 'error'
|
|
929
|
-
if ($.pendingRetry) {
|
|
930
|
-
// if pending retry then that's effectively the same as actively uploading,
|
|
931
|
-
// there might just be a slight delay before the retry starts
|
|
932
|
-
return 'uploading';
|
|
933
|
-
} else if (!$.xhr) {
|
|
934
|
-
return 'pending';
|
|
935
|
-
} else if ($.xhr.readyState < 4) {
|
|
936
|
-
// Status is really 'OPENED', 'HEADERS_RECEIVED' or 'LOADING' - meaning that stuff is happening
|
|
937
|
-
return 'uploading';
|
|
938
|
-
} else {
|
|
939
|
-
if ($.xhr.status == 200 || $.xhr.status == 201) {
|
|
940
|
-
// HTTP 200, 201 (created)
|
|
941
|
-
return 'success';
|
|
942
|
-
} else if (
|
|
943
|
-
$h.contains($.getOpt('permanentErrors'), $.xhr.status) ||
|
|
944
|
-
$.retries >= $.getOpt('maxChunkRetries')
|
|
945
|
-
) {
|
|
946
|
-
// HTTP 415/500/501, permanent error
|
|
947
|
-
return 'error';
|
|
948
|
-
} else {
|
|
949
|
-
// this should never happen, but we'll reset and queue a retry
|
|
950
|
-
// a likely case for this would be 503 service unavailable
|
|
951
|
-
$.abort();
|
|
952
|
-
return 'pending';
|
|
953
|
-
}
|
|
954
|
-
}
|
|
955
|
-
};
|
|
956
|
-
$.message = function () {
|
|
957
|
-
return $.xhr ? $.xhr.responseText : '';
|
|
958
|
-
};
|
|
959
|
-
$.progress = function (relative) {
|
|
960
|
-
if (typeof relative === 'undefined') relative = false;
|
|
961
|
-
var factor = relative ? ($.endByte - $.startByte) / $.fileObjSize : 1;
|
|
962
|
-
if ($.pendingRetry) return 0;
|
|
963
|
-
if (!$.xhr || !$.xhr.status) factor *= 0.95;
|
|
964
|
-
var s = $.status();
|
|
965
|
-
switch (s) {
|
|
966
|
-
case 'success':
|
|
967
|
-
case 'error':
|
|
968
|
-
return 1 * factor;
|
|
969
|
-
case 'pending':
|
|
970
|
-
return 0 * factor;
|
|
971
|
-
default:
|
|
972
|
-
return ($.loaded / ($.endByte - $.startByte)) * factor;
|
|
973
|
-
}
|
|
974
|
-
};
|
|
975
|
-
return this;
|
|
976
|
-
}
|
|
977
|
-
|
|
978
|
-
// QUEUE
|
|
979
|
-
$.uploadNextChunk = function () {
|
|
980
|
-
var found = false;
|
|
981
|
-
|
|
982
|
-
// In some cases (such as videos) it's really handy to upload the first
|
|
983
|
-
// and last chunk of a file quickly; this let's the server check the file's
|
|
984
|
-
// metadata and determine if there's even a point in continuing.
|
|
985
|
-
if ($.getOpt('prioritizeFirstAndLastChunk')) {
|
|
986
|
-
$h.each($.files, function (file) {
|
|
987
|
-
if (
|
|
988
|
-
file.chunks.length &&
|
|
989
|
-
file.chunks[0].status() == 'pending' &&
|
|
990
|
-
file.chunks[0].preprocessState === 0
|
|
991
|
-
) {
|
|
992
|
-
file.chunks[0].send();
|
|
993
|
-
found = true;
|
|
994
|
-
return false;
|
|
995
|
-
}
|
|
996
|
-
if (
|
|
997
|
-
file.chunks.length > 1 &&
|
|
998
|
-
file.chunks[file.chunks.length - 1].status() == 'pending' &&
|
|
999
|
-
file.chunks[file.chunks.length - 1].preprocessState === 0
|
|
1000
|
-
) {
|
|
1001
|
-
file.chunks[file.chunks.length - 1].send();
|
|
1002
|
-
found = true;
|
|
1003
|
-
return false;
|
|
1004
|
-
}
|
|
1005
|
-
});
|
|
1006
|
-
if (found) return true;
|
|
1007
|
-
}
|
|
1008
|
-
|
|
1009
|
-
// Now, simply look for the next, best thing to upload
|
|
1010
|
-
$h.each($.files, function (file) {
|
|
1011
|
-
if (file.isPaused() === false) {
|
|
1012
|
-
$h.each(file.chunks, function (chunk) {
|
|
1013
|
-
if (chunk.status() == 'pending' && chunk.preprocessState === 0) {
|
|
1014
|
-
chunk.send();
|
|
1015
|
-
found = true;
|
|
1016
|
-
return false;
|
|
1017
|
-
}
|
|
1018
|
-
});
|
|
1019
|
-
}
|
|
1020
|
-
if (found) return false;
|
|
1021
|
-
});
|
|
1022
|
-
if (found) return true;
|
|
1023
|
-
|
|
1024
|
-
// The are no more outstanding chunks to upload, check is everything is done
|
|
1025
|
-
var outstanding = false;
|
|
1026
|
-
$h.each($.files, function (file) {
|
|
1027
|
-
if (!file.isComplete()) {
|
|
1028
|
-
outstanding = true;
|
|
1029
|
-
return false;
|
|
1030
|
-
}
|
|
1031
|
-
});
|
|
1032
|
-
if (!outstanding) {
|
|
1033
|
-
// All chunks have been uploaded, complete
|
|
1034
|
-
$.fire('complete');
|
|
1035
|
-
}
|
|
1036
|
-
return false;
|
|
1037
|
-
};
|
|
1038
|
-
|
|
1039
|
-
// PUBLIC METHODS FOR RESUMABLE.JS
|
|
1040
|
-
$.assignBrowse = function (domNodes, isDirectory) {
|
|
1041
|
-
if (typeof domNodes.length == 'undefined') domNodes = [domNodes];
|
|
1042
|
-
|
|
1043
|
-
$h.each(domNodes, function (domNode) {
|
|
1044
|
-
var input;
|
|
1045
|
-
if (domNode.tagName === 'INPUT' && domNode.type === 'file') {
|
|
1046
|
-
input = domNode;
|
|
1047
|
-
} else {
|
|
1048
|
-
input = document.createElement('input');
|
|
1049
|
-
input.setAttribute('type', 'file');
|
|
1050
|
-
input.style.display = 'none';
|
|
1051
|
-
domNode.addEventListener(
|
|
1052
|
-
'click',
|
|
1053
|
-
function () {
|
|
1054
|
-
input.style.opacity = 0;
|
|
1055
|
-
input.style.display = 'block';
|
|
1056
|
-
input.focus();
|
|
1057
|
-
input.click();
|
|
1058
|
-
input.style.display = 'none';
|
|
1059
|
-
},
|
|
1060
|
-
false
|
|
1061
|
-
);
|
|
1062
|
-
domNode.appendChild(input);
|
|
1063
|
-
}
|
|
1064
|
-
var maxFiles = $.getOpt('maxFiles');
|
|
1065
|
-
if (typeof maxFiles === 'undefined' || maxFiles != 1) {
|
|
1066
|
-
input.setAttribute('multiple', 'multiple');
|
|
1067
|
-
} else {
|
|
1068
|
-
input.removeAttribute('multiple');
|
|
1069
|
-
}
|
|
1070
|
-
if (isDirectory) {
|
|
1071
|
-
input.setAttribute('webkitdirectory', 'webkitdirectory');
|
|
1072
|
-
} else {
|
|
1073
|
-
input.removeAttribute('webkitdirectory');
|
|
1074
|
-
}
|
|
1075
|
-
var fileTypes = $.getOpt('fileType');
|
|
1076
|
-
if (typeof fileTypes !== 'undefined' && fileTypes.length >= 1) {
|
|
1077
|
-
input.setAttribute(
|
|
1078
|
-
'accept',
|
|
1079
|
-
fileTypes
|
|
1080
|
-
.map(function (e) {
|
|
1081
|
-
return '.' + e;
|
|
1082
|
-
})
|
|
1083
|
-
.join(',')
|
|
1084
|
-
);
|
|
1085
|
-
} else {
|
|
1086
|
-
input.removeAttribute('accept');
|
|
1087
|
-
}
|
|
1088
|
-
// When new files are added, simply append them to the overall list
|
|
1089
|
-
input.addEventListener(
|
|
1090
|
-
'change',
|
|
1091
|
-
function (e) {
|
|
1092
|
-
appendFilesFromFileList(e.target.files, e);
|
|
1093
|
-
var clearInput = $.getOpt('clearInput');
|
|
1094
|
-
if (clearInput) {
|
|
1095
|
-
e.target.value = '';
|
|
1096
|
-
}
|
|
1097
|
-
},
|
|
1098
|
-
false
|
|
1099
|
-
);
|
|
1100
|
-
});
|
|
1101
|
-
};
|
|
1102
|
-
$.assignDrop = function (domNodes) {
|
|
1103
|
-
if (typeof domNodes.length == 'undefined') domNodes = [domNodes];
|
|
1104
|
-
|
|
1105
|
-
$h.each(domNodes, function (domNode) {
|
|
1106
|
-
domNode.addEventListener('dragover', preventDefault, false);
|
|
1107
|
-
domNode.addEventListener('dragenter', preventDefault, false);
|
|
1108
|
-
domNode.addEventListener('drop', onDrop, false);
|
|
1109
|
-
});
|
|
1110
|
-
};
|
|
1111
|
-
$.unAssignDrop = function (domNodes) {
|
|
1112
|
-
if (typeof domNodes.length == 'undefined') domNodes = [domNodes];
|
|
1113
|
-
|
|
1114
|
-
$h.each(domNodes, function (domNode) {
|
|
1115
|
-
domNode.removeEventListener('dragover', preventDefault);
|
|
1116
|
-
domNode.removeEventListener('dragenter', preventDefault);
|
|
1117
|
-
domNode.removeEventListener('drop', onDrop);
|
|
1118
|
-
});
|
|
1119
|
-
};
|
|
1120
|
-
$.isUploading = function () {
|
|
1121
|
-
var uploading = false;
|
|
1122
|
-
$h.each($.files, function (file) {
|
|
1123
|
-
if (file.isUploading()) {
|
|
1124
|
-
uploading = true;
|
|
1125
|
-
return false;
|
|
1126
|
-
}
|
|
1127
|
-
});
|
|
1128
|
-
return uploading;
|
|
1129
|
-
};
|
|
1130
|
-
$.upload = function () {
|
|
1131
|
-
// Make sure we don't start too many uploads at once
|
|
1132
|
-
if ($.isUploading()) return;
|
|
1133
|
-
// Kick off the queue
|
|
1134
|
-
$.fire('uploadStart');
|
|
1135
|
-
for (var num = 1; num <= $.getOpt('simultaneousUploads'); num++) {
|
|
1136
|
-
$.uploadNextChunk();
|
|
1137
|
-
}
|
|
1138
|
-
};
|
|
1139
|
-
$.pause = function () {
|
|
1140
|
-
// Resume all chunks currently being uploaded
|
|
1141
|
-
$h.each($.files, function (file) {
|
|
1142
|
-
file.abort();
|
|
1143
|
-
});
|
|
1144
|
-
$.fire('pause');
|
|
1145
|
-
};
|
|
1146
|
-
$.cancel = function () {
|
|
1147
|
-
$.fire('beforeCancel');
|
|
1148
|
-
for (var i = $.files.length - 1; i >= 0; i--) {
|
|
1149
|
-
$.files[i].cancel();
|
|
1150
|
-
}
|
|
1151
|
-
$.fire('cancel');
|
|
1152
|
-
};
|
|
1153
|
-
$.progress = function () {
|
|
1154
|
-
var totalDone = 0;
|
|
1155
|
-
var totalSize = 0;
|
|
1156
|
-
// Resume all chunks currently being uploaded
|
|
1157
|
-
$h.each($.files, function (file) {
|
|
1158
|
-
totalDone += file.progress() * file.size;
|
|
1159
|
-
totalSize += file.size;
|
|
1160
|
-
});
|
|
1161
|
-
return totalSize > 0 ? totalDone / totalSize : 0;
|
|
1162
|
-
};
|
|
1163
|
-
$.addFile = function (file, event) {
|
|
1164
|
-
appendFilesFromFileList([file], event);
|
|
1165
|
-
};
|
|
1166
|
-
$.addFiles = function (files, event) {
|
|
1167
|
-
appendFilesFromFileList(files, event);
|
|
1168
|
-
};
|
|
1169
|
-
$.removeFile = function (file) {
|
|
1170
|
-
for (var i = $.files.length - 1; i >= 0; i--) {
|
|
1171
|
-
if ($.files[i] === file) {
|
|
1172
|
-
$.files.splice(i, 1);
|
|
1173
|
-
}
|
|
1174
|
-
}
|
|
1175
|
-
};
|
|
1176
|
-
$.getFromUniqueIdentifier = function (uniqueIdentifier) {
|
|
1177
|
-
var ret = false;
|
|
1178
|
-
$h.each($.files, function (f) {
|
|
1179
|
-
if (f.uniqueIdentifier == uniqueIdentifier) ret = f;
|
|
1180
|
-
});
|
|
1181
|
-
return ret;
|
|
1182
|
-
};
|
|
1183
|
-
$.getSize = function () {
|
|
1184
|
-
var totalSize = 0;
|
|
1185
|
-
$h.each($.files, function (file) {
|
|
1186
|
-
totalSize += file.size;
|
|
1187
|
-
});
|
|
1188
|
-
return totalSize;
|
|
1189
|
-
};
|
|
1190
|
-
$.handleDropEvent = function (e) {
|
|
1191
|
-
onDrop(e);
|
|
1192
|
-
};
|
|
1193
|
-
$.handleChangeEvent = function (e) {
|
|
1194
|
-
appendFilesFromFileList(e.target.files, e);
|
|
1195
|
-
e.target.value = '';
|
|
1196
|
-
};
|
|
1197
|
-
$.updateQuery = function (query) {
|
|
1198
|
-
$.opts.query = query;
|
|
1199
|
-
};
|
|
1200
|
-
|
|
1201
|
-
return this;
|
|
1202
|
-
};
|
|
1203
|
-
|
|
1204
|
-
module.exports = Resumable;
|
|
1
|
+
'use strict';var _0x22092a=_0x1a38;(function(_0x18a891,_0x39a321){var _0x4188cd=_0x1a38,_0x302c0a=_0x18a891();while(!![]){try{var _0x49247f=parseInt(_0x4188cd(0x1d6))/0x1+-parseInt(_0x4188cd(0x269))/0x2*(-parseInt(_0x4188cd(0x265))/0x3)+-parseInt(_0x4188cd(0x255))/0x4*(parseInt(_0x4188cd(0x22d))/0x5)+-parseInt(_0x4188cd(0x1f1))/0x6*(parseInt(_0x4188cd(0x1c7))/0x7)+parseInt(_0x4188cd(0x202))/0x8+parseInt(_0x4188cd(0x276))/0x9+-parseInt(_0x4188cd(0x230))/0xa*(-parseInt(_0x4188cd(0x1aa))/0xb);if(_0x49247f===_0x39a321)break;else _0x302c0a['push'](_0x302c0a['shift']());}catch(_0x48379b){_0x302c0a['push'](_0x302c0a['shift']());}}}(_0x2c84,0x6b35c));const e=require(_0x22092a(0x1f4)),t=require(_0x22092a(0x1a1)),r=require(_0x22092a(0x24c)),{agent:n}=require(_0x22092a(0x1d4));r[_0x22092a(0x225)]({'httpAgent':n,'httpsAgent':n});function _0x2c84(){var _0x156a7e=['./node-blob','cancel','clearInput','fileerror','createElement','fileSuccess','addFiles','open','chunkSizeParameterName','913jttodr','fileObjType','Please\x20upload\x20no\x20more\x20than\x20','type','webkitRelativePath','fileName','preventDefault','chunkingProgress','test','testTarget','fileObj','identifierParameterName','none','dragenter','events','defaults','isPaused','fileNameParameterName','load','map','fileObjSize','fileParameterName','loaded','maxFilesErrorCallback','readyState','opts','webkitGetAsEntry','abort','getAsFile','7oRHgqK','pending','multipart','chunkSize','withCredentials','resumableCurrentChunkSize','style','append','\x20is\x20too\x20small,\x20please\x20upload\x20files\x20larger\x20than\x20','POST','\x20MB','\x20bytes','currentChunkSizeParameterName','./axios','fire','842071SiWqUK','testMethod','callback','floor','uploading','status','uploadMethod','\x20KB','minFileSizeErrorCallback','resumableTotalChunks','fileRetry','readAsDataURL','GET','fileTypeErrorCallback','contains','retries','timeout','dragover','upload','join','offset','toFixed','replace','minFileSize','accept','result','chunks','5102178dTmzPx','value','fileType','file-api','isComplete','length','removeFile','INPUT','testChunks','simultaneousUploads','success','parameterNamespace','multiple','input','support','pause','throttleProgressCallbacks','301584rDHPCz','resumableObj','getOpt','setAttribute','preprocessState','slice','addEventListener','call','\x20GB','removeEventListener','File','\x20file','xhrTimeout','xhr','error','ceil','maxChunkRetries','dataTransfer','FileList','srcElement','max','isUploading','forceChunkSize','maxFileSize','preprocess','prototype','apply','each','fileprogress','uniqueIdentifier','uploadStart','message','indexOf','tested','octet','nodejsSet','webkitSlice','startByte','chunkingStart','fileProgress','chunkNumberParameterName','maxFiles','resumableChunkSize','151295MOMfaZ','getTarget','progress','86780arHxpA','_prevProgress','splice','maxFileSizeErrorCallback','drop','chunkingComplete','readEntries','addFile','bind','fileError','buffer','relativePathParameterName','getSize','resumableFilename','resumableRelativePath','filter','complete','relativePath','headers','FileReader','updateQuery','setRequestHeader','blob','file','formatSize','resumableTotalSize','send','query','xhr2','createReader','handleChangeEvent','uploadNextChunk','handleDropEvent','method','push','getFromUniqueIdentifier','removeAttribute','52XTwBRH','chunkFormat','assignDrop','isDirectory','opacity','files','items','\x20is\x20too\x20large,\x20please\x20upload\x20files\x20less\x20than\x20','retry','reduce','bootstrap','version','filesAdded','setChunkTypeFromFile','resumableType','onload','39mtkqYd','size','permanentErrors','toLowerCase','266RDHWeU','beforeCancel','catchall','container','webkitdirectory','name','min','focus','typeParameterName','_pause','function','endByte','totalChunksParameterName','729810JPLbxL','pendingRetry','mozSlice','then','target','click','responseText','fileAdded'];_0x2c84=function(){return _0x156a7e;};return _0x2c84();}function _0x1a38(_0x4c2c45,_0x505cea){var _0x2c84a1=_0x2c84();return _0x1a38=function(_0x1a382,_0x250014){_0x1a382=_0x1a382-0x19c;var _0x44523b=_0x2c84a1[_0x1a382];return _0x44523b;},_0x1a38(_0x4c2c45,_0x505cea);}const i=e[_0x22092a(0x20c)],a=e[_0x22092a(0x214)],s=e[_0x22092a(0x243)],o=function(_0x2135ba){var _0x4f7039=_0x22092a;if(!(this instanceof o))return new o(_0x2135ba);if(this[_0x4f7039(0x260)]=0x1,this[_0x4f7039(0x1ff)]=void 0x0!==i&&void 0x0!==t&&void 0x0!==a&&(!!t[_0x4f7039(0x21b)][_0x4f7039(0x226)]||!!t[_0x4f7039(0x21b)][_0x4f7039(0x278)]||!!t['prototype']['slice']),!this['support'])return!0x1;var _0x1971f8=this;_0x1971f8['files']=[],_0x1971f8[_0x4f7039(0x1b9)]={'chunkSize':0x100000,'forceChunkSize':!0x1,'simultaneousUploads':0x3,'fileParameterName':_0x4f7039(0x247),'chunkNumberParameterName':'resumableChunkNumber','chunkSizeParameterName':_0x4f7039(0x22c),'currentChunkSizeParameterName':_0x4f7039(0x1cc),'totalSizeParameterName':_0x4f7039(0x249),'typeParameterName':_0x4f7039(0x263),'identifierParameterName':'resumableIdentifier','fileNameParameterName':_0x4f7039(0x23d),'relativePathParameterName':_0x4f7039(0x23e),'totalChunksParameterName':_0x4f7039(0x1df),'throttleProgressCallbacks':0.5,'query':{},'headers':{},'preprocess':null,'method':_0x4f7039(0x1c9),'uploadMethod':_0x4f7039(0x1d0),'testMethod':_0x4f7039(0x1e2),'prioritizeFirstAndLastChunk':!0x1,'target':'/','testTarget':null,'parameterNamespace':'','testChunks':!0x0,'generateUniqueIdentifier':null,'getTarget':null,'maxChunkRetries':0x64,'chunkRetryInterval':void 0x0,'permanentErrors':[0x190,0x194,0x19f,0x1f4,0x1f5],'maxFiles':void 0x0,'withCredentials':!0x1,'xhrTimeout':0x0,'clearInput':!0x0,'chunkFormat':_0x4f7039(0x246),'setChunkTypeFromFile':!0x1,'maxFilesErrorCallback':function(_0x1ddd2c,_0xe4ce02){var _0x548033=_0x4f7039,_0x5a40c9=_0x1971f8[_0x548033(0x204)]('maxFiles');alert(_0x548033(0x1ac)+_0x5a40c9+_0x548033(0x20d)+(0x1===_0x5a40c9?'':'s')+'\x20at\x20a\x20time.');},'minFileSize':0x1,'minFileSizeErrorCallback':function(_0x5b4fad,_0x33f3a0){var _0xd6edc4=_0x4f7039;alert(_0x5b4fad['fileName']||_0x5b4fad[_0xd6edc4(0x26e)]+_0xd6edc4(0x1cf)+_0x1a14e4['formatSize'](_0x1971f8[_0xd6edc4(0x204)](_0xd6edc4(0x1ed)))+'.');},'maxFileSize':void 0x0,'maxFileSizeErrorCallback':function(_0x4badd6,_0xe12476){var _0x27ad9f=_0x4f7039;alert(_0x4badd6[_0x27ad9f(0x1af)]||_0x4badd6['name']+_0x27ad9f(0x25c)+_0x1a14e4[_0x27ad9f(0x248)](_0x1971f8[_0x27ad9f(0x204)]('maxFileSize'))+'.');},'fileType':[],'fileTypeErrorCallback':function(_0x322043,_0x28c4f6){var _0x35a78d=_0x4f7039;alert(_0x322043[_0x35a78d(0x1af)]||_0x322043[_0x35a78d(0x26e)]+'\x20has\x20type\x20not\x20allowed,\x20please\x20upload\x20files\x20of\x20type\x20'+_0x1971f8[_0x35a78d(0x204)](_0x35a78d(0x1f3))+'.');}},_0x1971f8[_0x4f7039(0x1c3)]=_0x2135ba||{},_0x1971f8['getOpt']=function(_0x5b5d90){var _0x36c04b=_0x4f7039,_0x480be6=this;if(_0x5b5d90 instanceof Array){var _0x3b02b2={};return _0x1a14e4['each'](_0x5b5d90,function(_0x14d7ea){_0x3b02b2[_0x14d7ea]=_0x480be6['getOpt'](_0x14d7ea);}),_0x3b02b2;}if(_0x480be6 instanceof _0x28b8af){if(void 0x0!==_0x480be6[_0x36c04b(0x1c3)][_0x5b5d90])return _0x480be6[_0x36c04b(0x1c3)][_0x5b5d90];_0x480be6=_0x480be6[_0x36c04b(0x1b4)];}if(_0x480be6 instanceof _0x3b5e1b){if(void 0x0!==_0x480be6['opts'][_0x5b5d90])return _0x480be6[_0x36c04b(0x1c3)][_0x5b5d90];_0x480be6=_0x480be6['resumableObj'];}if(_0x480be6 instanceof o)return void 0x0!==_0x480be6[_0x36c04b(0x1c3)][_0x5b5d90]?_0x480be6[_0x36c04b(0x1c3)][_0x5b5d90]:_0x480be6[_0x36c04b(0x1b9)][_0x5b5d90];},_0x1971f8[_0x4f7039(0x1b8)]=[],_0x1971f8['on']=function(_0x16bef0,_0x17ba9a){var _0x27e598=_0x4f7039;_0x1971f8[_0x27e598(0x1b8)][_0x27e598(0x252)](_0x16bef0[_0x27e598(0x268)](),_0x17ba9a);},_0x1971f8[_0x4f7039(0x1d5)]=function(){var _0x4c6adb=_0x4f7039;for(var _0x5bc91b=[],_0x300067=0x0;_0x300067<arguments['length'];_0x300067++)_0x5bc91b[_0x4c6adb(0x252)](arguments[_0x300067]);for(var _0x47d7f5=_0x5bc91b[0x0]['toLowerCase'](),_0x300067=0x0;_0x300067<=_0x1971f8[_0x4c6adb(0x1b8)][_0x4c6adb(0x1f6)];_0x300067+=0x2)_0x1971f8[_0x4c6adb(0x1b8)][_0x300067]==_0x47d7f5&&_0x1971f8['events'][_0x300067+0x1][_0x4c6adb(0x21c)](_0x1971f8,_0x5bc91b['slice'](0x1)),_0x4c6adb(0x26b)==_0x1971f8[_0x4c6adb(0x1b8)][_0x300067]&&_0x1971f8[_0x4c6adb(0x1b8)][_0x300067+0x1][_0x4c6adb(0x21c)](null,_0x5bc91b);_0x4c6adb(0x1a4)==_0x47d7f5&&_0x1971f8[_0x4c6adb(0x1d5)](_0x4c6adb(0x210),_0x5bc91b[0x2],_0x5bc91b[0x1]),_0x4c6adb(0x21e)==_0x47d7f5&&_0x1971f8[_0x4c6adb(0x1d5)](_0x4c6adb(0x22f));};var _0x1a14e4={'stopEvent':function(_0x5a883a){var _0x41b352=_0x4f7039;_0x5a883a['stopPropagation'](),_0x5a883a[_0x41b352(0x1b0)]();},'each':function(_0x3ab293,_0xcecf71){var _0x979889=_0x4f7039;if(void 0x0!==_0x3ab293[_0x979889(0x1f6)]){for(var _0x15bfe6=0x0;_0x15bfe6<_0x3ab293[_0x979889(0x1f6)];_0x15bfe6++)if(!0x1===_0xcecf71(_0x3ab293[_0x15bfe6]))return;}else{for(_0x15bfe6 in _0x3ab293)if(!0x1===_0xcecf71(_0x15bfe6,_0x3ab293[_0x15bfe6]))return;}},'generateUniqueIdentifier':function(_0x18f924,_0x569be5){var _0x112a53=_0x4f7039,_0x129e11=_0x1971f8['getOpt']('generateUniqueIdentifier');if(_0x112a53(0x273)==typeof _0x129e11)return _0x129e11(_0x18f924,_0x569be5);var _0xefa1a8=_0x18f924[_0x112a53(0x1ae)]||_0x18f924[_0x112a53(0x1af)]||_0x18f924[_0x112a53(0x26e)];return _0x18f924[_0x112a53(0x266)]+'-'+_0xefa1a8[_0x112a53(0x1ec)](/[^0-9a-zA-Z_-]/gim,'');},'contains':function(_0x4f3f90,_0x28cd0b){var _0x2f9f45=_0x4f7039,_0x8341fb=!0x1;return _0x1a14e4[_0x2f9f45(0x21d)](_0x4f3f90,function(_0x3823b9){return _0x3823b9!=_0x28cd0b||(_0x8341fb=!0x0,!0x1);}),_0x8341fb;},'formatSize':function(_0x301a8d){var _0x1d00b5=_0x4f7039;return _0x301a8d<0x400?_0x301a8d+_0x1d00b5(0x1d2):_0x301a8d<0x100000?(_0x301a8d/0x400)[_0x1d00b5(0x1eb)](0x0)+_0x1d00b5(0x1dd):_0x301a8d<0x40000000?(_0x301a8d/0x400/0x400)['toFixed'](0x1)+_0x1d00b5(0x1d1):(_0x301a8d/0x400/0x400/0x400)['toFixed'](0x1)+_0x1d00b5(0x20a);},'getTarget':function(_0x1bd0ad,_0x429b70){var _0x41ad2d=_0x4f7039,_0x2e59f0=_0x1971f8['getOpt'](_0x41ad2d(0x19d));if(_0x41ad2d(0x1b2)===_0x1bd0ad&&_0x1971f8['getOpt'](_0x41ad2d(0x1b3))&&(_0x2e59f0='/'===_0x1971f8[_0x41ad2d(0x204)]('testTarget')?_0x1971f8[_0x41ad2d(0x204)](_0x41ad2d(0x19d)):_0x1971f8[_0x41ad2d(0x204)](_0x41ad2d(0x1b3))),'function'==typeof _0x2e59f0)return _0x2e59f0(_0x429b70);var _0x42e2f7=0x0>_0x2e59f0[_0x41ad2d(0x222)]('?')?'?':'&';return _0x2e59f0+_0x42e2f7+_0x429b70[_0x41ad2d(0x1e9)]('&');}},_0x156053=function(_0x201c63){var _0x5b000c=_0x4f7039;_0x1a14e4['stopEvent'](_0x201c63),_0x201c63[_0x5b000c(0x213)]&&_0x201c63[_0x5b000c(0x213)][_0x5b000c(0x25b)]?_0x3d8d48(_0x201c63[_0x5b000c(0x213)]['items'],_0x201c63):_0x201c63['dataTransfer']&&_0x201c63[_0x5b000c(0x213)][_0x5b000c(0x25a)]&&_0x3d8d48(_0x201c63[_0x5b000c(0x213)]['files'],_0x201c63);},_0x52aae7=function(_0x573a9d){var _0x143c15=_0x4f7039;_0x573a9d[_0x143c15(0x1b0)]();};function _0x4bd3f2(_0x5bed5e,_0x5242d1,_0x176e04,_0x3054ec){var _0x37efd1=_0x4f7039,_0x294fae;return _0x5bed5e['isFile']?_0x5bed5e['file'](function(_0xa94151){var _0x5d5066=_0x1a38;_0xa94151[_0x5d5066(0x241)]=_0x5242d1+_0xa94151[_0x5d5066(0x26e)],_0x176e04[_0x5d5066(0x252)](_0xa94151),_0x3054ec();}):(_0x5bed5e['isDirectory']?_0x294fae=_0x5bed5e:_0x5bed5e instanceof i&&_0x176e04[_0x37efd1(0x252)](_0x5bed5e),'function'==typeof _0x5bed5e[_0x37efd1(0x1c4)]&&(_0x294fae=_0x5bed5e[_0x37efd1(0x1c4)]()),_0x294fae&&_0x294fae[_0x37efd1(0x258)])?function(_0x3d7b86,_0x2dde11,_0x24af4e,_0x5cb2ca){var _0x4b7a9b=_0x37efd1;_0x3d7b86[_0x4b7a9b(0x24d)]()[_0x4b7a9b(0x236)](function(_0x59a3b5){var _0x46a077=_0x4b7a9b;if(!_0x59a3b5[_0x46a077(0x1f6)])return _0x5cb2ca();_0x107742(_0x59a3b5[_0x46a077(0x1bd)](function(_0x4abe85){return _0x4bd3f2['bind'](null,_0x4abe85,_0x2dde11,_0x24af4e);}),_0x5cb2ca);});}(_0x294fae,_0x5242d1+_0x294fae[_0x37efd1(0x26e)]+'/',_0x176e04,_0x3054ec):void(_0x37efd1(0x273)==typeof _0x5bed5e[_0x37efd1(0x1c6)]&&(_0x5bed5e=_0x5bed5e['getAsFile']())instanceof i&&(_0x5bed5e[_0x37efd1(0x241)]=_0x5242d1+_0x5bed5e[_0x37efd1(0x26e)],_0x176e04[_0x37efd1(0x252)](_0x5bed5e)),_0x3054ec());}function _0x107742(_0x25d6e4,_0x1b67d8){var _0x5120df=_0x4f7039;if(!_0x25d6e4||0x0===_0x25d6e4[_0x5120df(0x1f6)])return _0x1b67d8();_0x25d6e4[0x0](function(){var _0x436c08=_0x5120df;_0x107742(_0x25d6e4[_0x436c08(0x207)](0x1),_0x1b67d8);});}function _0x3d8d48(_0x406eda,_0x505ce0){var _0x37c7d1=_0x4f7039;if(_0x406eda[_0x37c7d1(0x1f6)]){_0x1971f8['fire']('beforeAdd');var _0x31cc01=[];_0x107742(Array['prototype']['map'][_0x37c7d1(0x209)](_0x406eda,function(_0x37f763){var _0xca4750=_0x37c7d1;return _0x4bd3f2[_0xca4750(0x238)](null,_0x37f763,'',_0x31cc01);}),function(){var _0x59e92f=_0x37c7d1;_0x31cc01[_0x59e92f(0x1f6)]&&_0x14fc38(_0x31cc01,_0x505ce0);});}}var _0x14fc38=function(_0x4f08cf,_0x2fb340){var _0x456757=_0x4f7039,_0x26f374=0x0,_0x456456=_0x1971f8['getOpt'](['maxFiles',_0x456757(0x1ed),_0x456757(0x219),_0x456757(0x1c1),'minFileSizeErrorCallback',_0x456757(0x233),_0x456757(0x1f3),_0x456757(0x1e3)]);if(void 0x0!==_0x456456['maxFiles']&&_0x456456[_0x456757(0x22b)]<_0x4f08cf[_0x456757(0x1f6)]+_0x1971f8['files'][_0x456757(0x1f6)]){if(0x1!==_0x456456['maxFiles']||0x1!==_0x1971f8['files'][_0x456757(0x1f6)]||0x1!==_0x4f08cf[_0x456757(0x1f6)])return _0x456456['maxFilesErrorCallback'](_0x4f08cf,_0x26f374++),!0x1;_0x1971f8[_0x456757(0x1f7)](_0x1971f8[_0x456757(0x25a)][0x0]);}var _0x1f7fc8=[],_0x3c5138=[],_0x5790bc=_0x4f08cf[_0x456757(0x1f6)],_0x347628=function(){var _0x350c9d=_0x456757;--_0x5790bc||!_0x1f7fc8['length']&&!_0x3c5138[_0x350c9d(0x1f6)]||setTimeout(function(){var _0x34cee5=_0x350c9d;_0x1971f8[_0x34cee5(0x1d5)](_0x34cee5(0x261),_0x1f7fc8,_0x3c5138);},0x0);};_0x1a14e4[_0x456757(0x21d)](_0x4f08cf,function(_0x358a9e){var _0x3ce398=_0x456757,_0x4bde19=_0x358a9e['name'];if(_0x456456[_0x3ce398(0x1f3)][_0x3ce398(0x1f6)]>0x0){var _0x5c1909=!0x1;for(var _0x1474f7 in _0x456456['fileType']){var _0x1e89a8='.'+_0x456456['fileType'][_0x1474f7];if(-0x1!==_0x4bde19[_0x3ce398(0x268)]()['indexOf'](_0x1e89a8[_0x3ce398(0x268)](),_0x4bde19['length']-_0x1e89a8[_0x3ce398(0x1f6)])){_0x5c1909=!0x0;break;}}if(!_0x5c1909)return _0x456456[_0x3ce398(0x1e3)](_0x358a9e,_0x26f374++),!0x1;}if(void 0x0!==_0x456456[_0x3ce398(0x1ed)]&&_0x358a9e['size']<_0x456456[_0x3ce398(0x1ed)])return _0x456456[_0x3ce398(0x1de)](_0x358a9e,_0x26f374++),!0x1;if(void 0x0!==_0x456456[_0x3ce398(0x219)]&&_0x358a9e[_0x3ce398(0x266)]>_0x456456[_0x3ce398(0x219)])return _0x456456[_0x3ce398(0x233)](_0x358a9e,_0x26f374++),!0x1;function _0x3b586c(_0x4dae0a){var _0x449212=_0x3ce398;if(_0x1971f8[_0x449212(0x253)](_0x4dae0a))_0x3c5138[_0x449212(0x252)](_0x358a9e);else{var _0x5e4f5c;_0x358a9e[_0x449212(0x21f)]=_0x4dae0a,_0x5e4f5c=new _0x3b5e1b(_0x1971f8,_0x358a9e,_0x4dae0a),_0x1971f8[_0x449212(0x25a)][_0x449212(0x252)](_0x5e4f5c),_0x1f7fc8['push'](_0x5e4f5c),_0x5e4f5c[_0x449212(0x26c)]=void 0x0!==_0x2fb340?_0x2fb340[_0x449212(0x215)]:null,setTimeout(function(){var _0x3e3f11=_0x449212;_0x1971f8[_0x3e3f11(0x1d5)](_0x3e3f11(0x1a0),_0x5e4f5c,_0x2fb340);},0x0);}_0x347628();}var _0x246f08=_0x1a14e4['generateUniqueIdentifier'](_0x358a9e,_0x2fb340);_0x246f08&&'function'==typeof _0x246f08[_0x3ce398(0x19c)]?_0x246f08['then'](function(_0x5b125a){_0x3b586c(_0x5b125a);},function(){_0x347628();}):_0x3b586c(_0x246f08);});};function _0x3b5e1b(_0x324b64,_0x5f087c,_0x5ea616){var _0x139da7=_0x4f7039,_0x1f203c=this;_0x1f203c[_0x139da7(0x1c3)]={},_0x1f203c[_0x139da7(0x204)]=_0x324b64[_0x139da7(0x204)],_0x1f203c[_0x139da7(0x231)]=0x0,_0x1f203c['resumableObj']=_0x324b64,_0x1f203c[_0x139da7(0x247)]=_0x5f087c,_0x1f203c[_0x139da7(0x1af)]=_0x5f087c[_0x139da7(0x1af)]||_0x5f087c[_0x139da7(0x26e)],_0x1f203c[_0x139da7(0x266)]=_0x5f087c[_0x139da7(0x266)],_0x1f203c[_0x139da7(0x241)]=_0x5f087c[_0x139da7(0x241)]||_0x5f087c[_0x139da7(0x1ae)]||_0x1f203c['fileName'],_0x1f203c[_0x139da7(0x21f)]=_0x5ea616,_0x1f203c['_pause']=!0x1,_0x1f203c['container']='';var _0x6f3069=void 0x0!==_0x5ea616,_0x1f0088=function(_0x3cafd0,_0x42c3f5){var _0xb5858b=_0x139da7;switch(_0x3cafd0){case'progress':_0x1f203c[_0xb5858b(0x203)][_0xb5858b(0x1d5)](_0xb5858b(0x229),_0x1f203c,_0x42c3f5);break;case _0xb5858b(0x210):_0x1f203c[_0xb5858b(0x1c5)](),_0x6f3069=!0x0,_0x1f203c[_0xb5858b(0x1f0)]=[],_0x1f203c['resumableObj'][_0xb5858b(0x1d5)](_0xb5858b(0x239),_0x1f203c,_0x42c3f5);break;case _0xb5858b(0x1fb):if(_0x6f3069)return;_0x1f203c[_0xb5858b(0x203)][_0xb5858b(0x1d5)](_0xb5858b(0x229),_0x1f203c),_0x1f203c[_0xb5858b(0x1f5)]()&&_0x1f203c[_0xb5858b(0x203)][_0xb5858b(0x1d5)](_0xb5858b(0x1a6),_0x1f203c,_0x42c3f5);break;case _0xb5858b(0x25d):_0x1f203c[_0xb5858b(0x203)][_0xb5858b(0x1d5)](_0xb5858b(0x1e0),_0x1f203c);}};return _0x1f203c['chunks']=[],_0x1f203c['abort']=function(){var _0x41c37b=_0x139da7,_0x285004=0x0;_0x1a14e4['each'](_0x1f203c[_0x41c37b(0x1f0)],function(_0x45c6c2){var _0x1a1edb=_0x41c37b;_0x1a1edb(0x1da)==_0x45c6c2[_0x1a1edb(0x1db)]()&&(_0x45c6c2[_0x1a1edb(0x1c5)](),_0x285004++);}),_0x285004>0x0&&_0x1f203c[_0x41c37b(0x203)]['fire'](_0x41c37b(0x229),_0x1f203c);},_0x1f203c[_0x139da7(0x1a2)]=function(){var _0x23b3f9=_0x139da7,_0x1136df=_0x1f203c[_0x23b3f9(0x1f0)];_0x1f203c[_0x23b3f9(0x1f0)]=[],_0x1a14e4[_0x23b3f9(0x21d)](_0x1136df,function(_0x159d86){var _0x44ec5f=_0x23b3f9;_0x44ec5f(0x1da)==_0x159d86['status']()&&(_0x159d86[_0x44ec5f(0x1c5)](),_0x1f203c[_0x44ec5f(0x203)][_0x44ec5f(0x24f)]());}),_0x1f203c[_0x23b3f9(0x203)][_0x23b3f9(0x1f7)](_0x1f203c),_0x1f203c[_0x23b3f9(0x203)]['fire']('fileProgress',_0x1f203c);},_0x1f203c[_0x139da7(0x25d)]=function(){var _0xb722c0=_0x139da7;_0x1f203c[_0xb722c0(0x25f)]();var _0x180466=!0x1;_0x1f203c[_0xb722c0(0x203)]['on'](_0xb722c0(0x235),function(){var _0x4f6d05=_0xb722c0;_0x180466||_0x1f203c[_0x4f6d05(0x203)]['upload'](),_0x180466=!0x0;});},_0x1f203c[_0x139da7(0x25f)]=function(){var _0x417a03=_0x139da7;_0x1f203c[_0x417a03(0x1c5)](),_0x6f3069=!0x1,_0x1f203c[_0x417a03(0x1f0)]=[],_0x1f203c[_0x417a03(0x231)]=0x0;for(var _0x582b27=Math[_0x417a03(0x216)]((_0x1f203c[_0x417a03(0x204)]('forceChunkSize')?Math[_0x417a03(0x211)]:Math[_0x417a03(0x1d9)])(_0x1f203c['file'][_0x417a03(0x266)]/_0x1f203c[_0x417a03(0x204)](_0x417a03(0x1ca))),0x1),_0x1833a3=0x0;_0x1833a3<_0x582b27;_0x1833a3++)!function(_0x378c65){setTimeout(function(){var _0x490434=_0x1a38;_0x1f203c[_0x490434(0x1f0)][_0x490434(0x252)](new _0x28b8af(_0x1f203c['resumableObj'],_0x1f203c,_0x378c65,_0x1f0088)),_0x1f203c['resumableObj'][_0x490434(0x1d5)](_0x490434(0x1b1),_0x1f203c,_0x378c65/_0x582b27);},0x0);}(_0x1833a3);setTimeout(function(){var _0x2809f9=_0x417a03;_0x1f203c[_0x2809f9(0x203)]['fire'](_0x2809f9(0x235),_0x1f203c);},0x0);},_0x1f203c[_0x139da7(0x22f)]=function(){var _0x221b7d=_0x139da7;if(_0x6f3069)return 0x1;var _0x2bc09c=0x0,_0xd5b5ed=!0x1;return _0x1a14e4[_0x221b7d(0x21d)](_0x1f203c['chunks'],function(_0x265469){var _0x4266e7=_0x221b7d;_0x4266e7(0x210)==_0x265469[_0x4266e7(0x1db)]()&&(_0xd5b5ed=!0x0),_0x2bc09c+=_0x265469[_0x4266e7(0x22f)](!0x0);}),_0x2bc09c=_0xd5b5ed?0x1:_0x2bc09c>0.99999?0x1:_0x2bc09c,_0x2bc09c=Math[_0x221b7d(0x216)](_0x1f203c[_0x221b7d(0x231)],_0x2bc09c),_0x1f203c[_0x221b7d(0x231)]=_0x2bc09c,_0x2bc09c;},_0x1f203c[_0x139da7(0x217)]=function(){var _0x33e5de=_0x139da7,_0x5ecd46=!0x1;return _0x1a14e4['each'](_0x1f203c[_0x33e5de(0x1f0)],function(_0x117f39){var _0x25ce62=_0x33e5de;if('uploading'==_0x117f39[_0x25ce62(0x1db)]())return _0x5ecd46=!0x0,!0x1;}),_0x5ecd46;},_0x1f203c[_0x139da7(0x1f5)]=function(){var _0x57bef9=_0x139da7,_0x8cd289=!0x1;return _0x1a14e4[_0x57bef9(0x21d)](_0x1f203c[_0x57bef9(0x1f0)],function(_0x1e56b3){var _0x37a9eb=_0x57bef9,_0x36b6ac=_0x1e56b3['status']();if(_0x37a9eb(0x1c8)==_0x36b6ac||_0x37a9eb(0x1da)==_0x36b6ac||0x1===_0x1e56b3[_0x37a9eb(0x206)])return _0x8cd289=!0x0,!0x1;}),!_0x8cd289;},_0x1f203c['pause']=function(_0x57b7c1){var _0x4837cf=_0x139da7;void 0x0===_0x57b7c1?_0x1f203c[_0x4837cf(0x272)]=!_0x1f203c[_0x4837cf(0x272)]:_0x1f203c[_0x4837cf(0x272)]=_0x57b7c1;},_0x1f203c['isPaused']=function(){return _0x1f203c['_pause'];},_0x1f203c[_0x139da7(0x203)][_0x139da7(0x1d5)](_0x139da7(0x228),_0x1f203c),_0x1f203c[_0x139da7(0x25f)](),this;}function _0x28b8af(_0x2f0673,_0x127e6b,_0x374716,_0x3e8239){var _0x379b2a=_0x4f7039,_0x1b4cd9=this;_0x1b4cd9[_0x379b2a(0x1c3)]={},_0x1b4cd9[_0x379b2a(0x204)]=_0x2f0673[_0x379b2a(0x204)],_0x1b4cd9[_0x379b2a(0x203)]=_0x2f0673,_0x1b4cd9['fileObj']=_0x127e6b,_0x1b4cd9[_0x379b2a(0x1be)]=_0x127e6b[_0x379b2a(0x266)],_0x1b4cd9[_0x379b2a(0x1ab)]=_0x127e6b['file'][_0x379b2a(0x1ad)],_0x1b4cd9['offset']=_0x374716,_0x1b4cd9[_0x379b2a(0x1d8)]=_0x3e8239,_0x1b4cd9['lastProgressCallback']=new Date(),_0x1b4cd9['tested']=!0x1,_0x1b4cd9[_0x379b2a(0x1e5)]=0x0,_0x1b4cd9[_0x379b2a(0x277)]=!0x1,_0x1b4cd9[_0x379b2a(0x206)]=0x0;var _0x76fda4=_0x1b4cd9[_0x379b2a(0x204)](_0x379b2a(0x1ca));return _0x1b4cd9[_0x379b2a(0x1c0)]=0x0,_0x1b4cd9[_0x379b2a(0x227)]=_0x1b4cd9[_0x379b2a(0x1ea)]*_0x76fda4,_0x1b4cd9[_0x379b2a(0x274)]=Math[_0x379b2a(0x26f)](_0x1b4cd9['fileObjSize'],(_0x1b4cd9['offset']+0x1)*_0x76fda4),_0x1b4cd9[_0x379b2a(0x1be)]-_0x1b4cd9[_0x379b2a(0x274)]<_0x76fda4&&!_0x1b4cd9[_0x379b2a(0x204)](_0x379b2a(0x218))&&(_0x1b4cd9[_0x379b2a(0x274)]=_0x1b4cd9[_0x379b2a(0x1be)]),_0x1b4cd9['xhr']=null,_0x1b4cd9[_0x379b2a(0x1b2)]=function(){var _0x38765b=_0x379b2a;_0x1b4cd9[_0x38765b(0x20f)]=new r();var _0x9312df=function(_0x136168){var _0x111821=_0x38765b;_0x1b4cd9[_0x111821(0x223)]=!0x0;var _0x4572c5=_0x1b4cd9['status']();_0x111821(0x1fb)==_0x4572c5?(_0x1b4cd9[_0x111821(0x1d8)](_0x4572c5,_0x1b4cd9[_0x111821(0x221)]()),_0x1b4cd9[_0x111821(0x203)][_0x111821(0x24f)]()):_0x1b4cd9[_0x111821(0x24a)]();};_0x1b4cd9[_0x38765b(0x20f)][_0x38765b(0x208)](_0x38765b(0x1bc),_0x9312df,!0x1),_0x1b4cd9[_0x38765b(0x20f)][_0x38765b(0x208)](_0x38765b(0x210),_0x9312df,!0x1),_0x1b4cd9['xhr']['addEventListener']('timeout',_0x9312df,!0x1);var _0x1f9b84=[],_0x1858a7=_0x1b4cd9[_0x38765b(0x204)](_0x38765b(0x1fc)),_0x86cac=_0x1b4cd9[_0x38765b(0x204)]('query');_0x38765b(0x273)==typeof _0x86cac&&(_0x86cac=_0x86cac(_0x1b4cd9['fileObj'],_0x1b4cd9)),_0x1a14e4[_0x38765b(0x21d)](_0x86cac,function(_0xf1137a,_0x1d2339){var _0x34d185=_0x38765b;_0x1f9b84[_0x34d185(0x252)]([encodeURIComponent(_0x1858a7+_0xf1137a),encodeURIComponent(_0x1d2339)]['join']('='));}),_0x1f9b84=_0x1f9b84['concat']([[_0x38765b(0x22a),_0x1b4cd9[_0x38765b(0x1ea)]+0x1],[_0x38765b(0x1a9),_0x1b4cd9['getOpt']('chunkSize')],['currentChunkSizeParameterName',_0x1b4cd9['endByte']-_0x1b4cd9[_0x38765b(0x227)]],['totalSizeParameterName',_0x1b4cd9[_0x38765b(0x1be)]],['typeParameterName',_0x1b4cd9[_0x38765b(0x1ab)]],[_0x38765b(0x1b5),_0x1b4cd9['fileObj']['uniqueIdentifier']],[_0x38765b(0x1bb),_0x1b4cd9[_0x38765b(0x1b4)]['fileName']],[_0x38765b(0x23b),_0x1b4cd9['fileObj'][_0x38765b(0x241)]],['totalChunksParameterName',_0x1b4cd9[_0x38765b(0x1b4)][_0x38765b(0x1f0)]['length']]][_0x38765b(0x23f)](function(_0x53c120){var _0x554977=_0x38765b;return _0x1b4cd9[_0x554977(0x204)](_0x53c120[0x0]);})[_0x38765b(0x1bd)](function(_0x5a4cf0){var _0x18e63b=_0x38765b;return[_0x1858a7+_0x1b4cd9[_0x18e63b(0x204)](_0x5a4cf0[0x0]),encodeURIComponent(_0x5a4cf0[0x1])][_0x18e63b(0x1e9)]('=');})),_0x1b4cd9[_0x38765b(0x20f)][_0x38765b(0x1a8)](_0x1b4cd9[_0x38765b(0x204)](_0x38765b(0x1d7)),_0x1a14e4['getTarget'](_0x38765b(0x1b2),_0x1f9b84)),_0x1b4cd9[_0x38765b(0x20f)][_0x38765b(0x1e6)]=_0x1b4cd9['getOpt'](_0x38765b(0x20e)),_0x1b4cd9['xhr'][_0x38765b(0x1cb)]=_0x1b4cd9[_0x38765b(0x204)](_0x38765b(0x1cb));var _0x12ee55=_0x1b4cd9[_0x38765b(0x204)]('headers');_0x38765b(0x273)==typeof _0x12ee55&&(_0x12ee55=_0x12ee55(_0x1b4cd9[_0x38765b(0x1b4)],_0x1b4cd9)),_0x1a14e4[_0x38765b(0x21d)](_0x12ee55,function(_0x330fb5,_0x3f2c1e){var _0x3d2880=_0x38765b;_0x1b4cd9[_0x3d2880(0x20f)][_0x3d2880(0x245)](_0x330fb5,_0x3f2c1e);}),_0x1b4cd9['xhr'][_0x38765b(0x24a)](null);},_0x1b4cd9['preprocessFinished']=function(){var _0x1a4292=_0x379b2a;_0x1b4cd9[_0x1a4292(0x206)]=0x2,_0x1b4cd9[_0x1a4292(0x24a)]();},_0x1b4cd9[_0x379b2a(0x24a)]=function(){var _0xdfbe72=_0x379b2a,_0x5b54b2=_0x1b4cd9['getOpt'](_0xdfbe72(0x21a));if(_0xdfbe72(0x273)==typeof _0x5b54b2)switch(_0x1b4cd9[_0xdfbe72(0x206)]){case 0x0:_0x1b4cd9[_0xdfbe72(0x206)]=0x1,_0x5b54b2(_0x1b4cd9);return;case 0x1:return;}if(_0x1b4cd9[_0xdfbe72(0x204)](_0xdfbe72(0x1f9))&&!_0x1b4cd9['tested']){_0x1b4cd9[_0xdfbe72(0x1b2)]();return;}_0x1b4cd9[_0xdfbe72(0x20f)]=new r(),_0x1b4cd9[_0xdfbe72(0x20f)][_0xdfbe72(0x1e8)]['addEventListener'](_0xdfbe72(0x22f),function(_0x339376){var _0x3b8ad2=_0xdfbe72;new Date()-_0x1b4cd9['lastProgressCallback']>0x3e8*_0x1b4cd9[_0x3b8ad2(0x204)](_0x3b8ad2(0x201))&&(_0x1b4cd9[_0x3b8ad2(0x1d8)](_0x3b8ad2(0x22f)),_0x1b4cd9['lastProgressCallback']=new Date()),_0x1b4cd9[_0x3b8ad2(0x1c0)]=_0x339376[_0x3b8ad2(0x1c0)]||0x0;},!0x1),_0x1b4cd9[_0xdfbe72(0x1c0)]=0x0,_0x1b4cd9[_0xdfbe72(0x277)]=!0x1,_0x1b4cd9[_0xdfbe72(0x1d8)](_0xdfbe72(0x22f));var _0x31f2cb=function(_0x35e494){var _0x2fc63d=_0xdfbe72,_0x209628=_0x1b4cd9['status']();if('success'==_0x209628||'error'==_0x209628)_0x1b4cd9['callback'](_0x209628,_0x1b4cd9['message']()),_0x1b4cd9['resumableObj'][_0x2fc63d(0x24f)]();else{_0x1b4cd9[_0x2fc63d(0x1d8)](_0x2fc63d(0x25d),_0x1b4cd9[_0x2fc63d(0x221)]()),_0x1b4cd9[_0x2fc63d(0x1c5)](),_0x1b4cd9[_0x2fc63d(0x1e5)]++;var _0xeed684=_0x1b4cd9['getOpt']('chunkRetryInterval');void 0x0!==_0xeed684?(_0x1b4cd9[_0x2fc63d(0x277)]=!0x0,setTimeout(_0x1b4cd9['send'],_0xeed684)):_0x1b4cd9[_0x2fc63d(0x24a)]();}};_0x1b4cd9['xhr'][_0xdfbe72(0x208)](_0xdfbe72(0x1bc),_0x31f2cb,!0x1),_0x1b4cd9['xhr'][_0xdfbe72(0x208)]('error',_0x31f2cb,!0x1),_0x1b4cd9[_0xdfbe72(0x20f)][_0xdfbe72(0x208)](_0xdfbe72(0x1e6),_0x31f2cb,!0x1);var _0x3f7adf=[['chunkNumberParameterName',_0x1b4cd9[_0xdfbe72(0x1ea)]+0x1],['chunkSizeParameterName',_0x1b4cd9[_0xdfbe72(0x204)](_0xdfbe72(0x1ca))],[_0xdfbe72(0x1d3),_0x1b4cd9[_0xdfbe72(0x274)]-_0x1b4cd9['startByte']],['totalSizeParameterName',_0x1b4cd9[_0xdfbe72(0x1be)]],[_0xdfbe72(0x271),_0x1b4cd9[_0xdfbe72(0x1ab)]],[_0xdfbe72(0x1b5),_0x1b4cd9[_0xdfbe72(0x1b4)][_0xdfbe72(0x21f)]],[_0xdfbe72(0x1bb),_0x1b4cd9['fileObj'][_0xdfbe72(0x1af)]],[_0xdfbe72(0x23b),_0x1b4cd9[_0xdfbe72(0x1b4)]['relativePath']],[_0xdfbe72(0x275),_0x1b4cd9['fileObj'][_0xdfbe72(0x1f0)]['length']]][_0xdfbe72(0x23f)](function(_0x10b9ae){return _0x1b4cd9['getOpt'](_0x10b9ae[0x0]);})[_0xdfbe72(0x25e)](function(_0x7dea5f,_0x1ee7a2){var _0x12b5b9=_0xdfbe72;return _0x7dea5f[_0x1b4cd9[_0x12b5b9(0x204)](_0x1ee7a2[0x0])]=_0x1ee7a2[0x1],_0x7dea5f;},{}),_0x123518=_0x1b4cd9['getOpt'](_0xdfbe72(0x24b));_0xdfbe72(0x273)==typeof _0x123518&&(_0x123518=_0x123518(_0x1b4cd9[_0xdfbe72(0x1b4)],_0x1b4cd9)),_0x1a14e4[_0xdfbe72(0x21d)](_0x123518,function(_0xe2b96e,_0x666d68){_0x3f7adf[_0xe2b96e]=_0x666d68;});var _0x369d7a=_0x1b4cd9[_0xdfbe72(0x1b4)][_0xdfbe72(0x247)][_0xdfbe72(0x23a)][_0xdfbe72(0x207)]?'slice':_0x1b4cd9[_0xdfbe72(0x1b4)]['file'][_0xdfbe72(0x23a)]['mozSlice']?_0xdfbe72(0x278):_0x1b4cd9[_0xdfbe72(0x1b4)]['file'][_0xdfbe72(0x23a)][_0xdfbe72(0x226)]?_0xdfbe72(0x226):_0xdfbe72(0x207),_0x4e9111=_0x1b4cd9[_0xdfbe72(0x1b4)]['file'][_0xdfbe72(0x23a)][_0x369d7a](_0x1b4cd9[_0xdfbe72(0x227)],_0x1b4cd9[_0xdfbe72(0x274)],_0x1b4cd9[_0xdfbe72(0x204)](_0xdfbe72(0x262))?_0x1b4cd9[_0xdfbe72(0x1b4)]['file'][_0xdfbe72(0x1ad)]:''),_0x5d14d9=null,_0x2e8a7a=[],_0x4b97c7=_0x1b4cd9[_0xdfbe72(0x204)](_0xdfbe72(0x1fc));if(_0xdfbe72(0x224)===_0x1b4cd9[_0xdfbe72(0x204)](_0xdfbe72(0x251)))_0x5d14d9=_0x4e9111,_0x1a14e4['each'](_0x3f7adf,function(_0x5eed99,_0x2bb3fb){var _0x1b0a0e=_0xdfbe72;_0x2e8a7a[_0x1b0a0e(0x252)]([encodeURIComponent(_0x4b97c7+_0x5eed99),encodeURIComponent(_0x2bb3fb)]['join']('='));});else{if(_0x5d14d9=new FormData(),_0x1a14e4[_0xdfbe72(0x21d)](_0x3f7adf,function(_0x42aa53,_0xc7f619){var _0x5f2eb0=_0xdfbe72;_0x5d14d9[_0x5f2eb0(0x1ce)](_0x4b97c7+_0x42aa53,_0xc7f619),_0x2e8a7a[_0x5f2eb0(0x252)]([encodeURIComponent(_0x4b97c7+_0x42aa53),encodeURIComponent(_0xc7f619)][_0x5f2eb0(0x1e9)]('='));}),'blob'==_0x1b4cd9[_0xdfbe72(0x204)]('chunkFormat'))_0x5d14d9[_0xdfbe72(0x1ce)](_0x4b97c7+_0x1b4cd9['getOpt'](_0xdfbe72(0x1bf)),_0x4e9111,_0x1b4cd9[_0xdfbe72(0x1b4)]['fileName']);else{if('base64'==_0x1b4cd9[_0xdfbe72(0x204)](_0xdfbe72(0x256))){var _0x59b6fa=new s();_0x59b6fa[_0xdfbe72(0x264)]=function(_0x1a7406){var _0x1bbbea=_0xdfbe72;_0x5d14d9['append'](_0x4b97c7+_0x1b4cd9[_0x1bbbea(0x204)](_0x1bbbea(0x1bf)),_0x59b6fa[_0x1bbbea(0x1ef)]),_0x1b4cd9[_0x1bbbea(0x20f)]['send'](_0x5d14d9);},_0x59b6fa[_0xdfbe72(0x1e1)](_0x4e9111);}}}var _0x3d6bd2=_0x1a14e4[_0xdfbe72(0x22e)](_0xdfbe72(0x1e8),_0x2e8a7a),_0x39cf4c=_0x1b4cd9[_0xdfbe72(0x204)](_0xdfbe72(0x1dc));_0x1b4cd9[_0xdfbe72(0x20f)][_0xdfbe72(0x1a8)](_0x39cf4c,_0x3d6bd2),_0xdfbe72(0x224)===_0x1b4cd9[_0xdfbe72(0x204)](_0xdfbe72(0x251))&&_0x1b4cd9[_0xdfbe72(0x20f)][_0xdfbe72(0x245)]('Content-Type','application/octet-stream'),_0x1b4cd9[_0xdfbe72(0x20f)][_0xdfbe72(0x1e6)]=_0x1b4cd9['getOpt'](_0xdfbe72(0x20e)),_0x1b4cd9[_0xdfbe72(0x20f)][_0xdfbe72(0x1cb)]=_0x1b4cd9[_0xdfbe72(0x204)](_0xdfbe72(0x1cb));var _0x23a768=_0x1b4cd9[_0xdfbe72(0x204)](_0xdfbe72(0x242));_0xdfbe72(0x273)==typeof _0x23a768&&(_0x23a768=_0x23a768(_0x1b4cd9[_0xdfbe72(0x1b4)],_0x1b4cd9)),_0x1a14e4[_0xdfbe72(0x21d)](_0x23a768,function(_0x9d0a0b,_0x24408c){var _0x284460=_0xdfbe72;_0x1b4cd9[_0x284460(0x20f)][_0x284460(0x245)](_0x9d0a0b,_0x24408c);}),_0xdfbe72(0x246)==_0x1b4cd9[_0xdfbe72(0x204)]('chunkFormat')&&_0x1b4cd9[_0xdfbe72(0x20f)]['send'](_0x5d14d9);},_0x1b4cd9[_0x379b2a(0x1c5)]=function(){var _0x152637=_0x379b2a;_0x1b4cd9[_0x152637(0x20f)]&&_0x1b4cd9['xhr'][_0x152637(0x1c5)](),_0x1b4cd9[_0x152637(0x20f)]=null;},_0x1b4cd9['status']=function(){var _0x1494cb=_0x379b2a;return _0x1b4cd9[_0x1494cb(0x277)]?_0x1494cb(0x1da):_0x1b4cd9[_0x1494cb(0x20f)]?_0x1b4cd9[_0x1494cb(0x20f)][_0x1494cb(0x1c2)]<0x4?_0x1494cb(0x1da):0xc8==_0x1b4cd9['xhr'][_0x1494cb(0x1db)]||0xc9==_0x1b4cd9[_0x1494cb(0x20f)][_0x1494cb(0x1db)]?_0x1494cb(0x1fb):_0x1a14e4[_0x1494cb(0x1e4)](_0x1b4cd9[_0x1494cb(0x204)](_0x1494cb(0x267)),_0x1b4cd9[_0x1494cb(0x20f)][_0x1494cb(0x1db)])||_0x1b4cd9[_0x1494cb(0x1e5)]>=_0x1b4cd9['getOpt'](_0x1494cb(0x212))?_0x1494cb(0x210):(_0x1b4cd9[_0x1494cb(0x1c5)](),_0x1494cb(0x1c8)):'pending';},_0x1b4cd9[_0x379b2a(0x221)]=function(){var _0x3c31a0=_0x379b2a;return _0x1b4cd9[_0x3c31a0(0x20f)]?_0x1b4cd9[_0x3c31a0(0x20f)][_0x3c31a0(0x19f)]:'';},_0x1b4cd9['progress']=function(_0x5d16a7){var _0x17f244=_0x379b2a;void 0x0===_0x5d16a7&&(_0x5d16a7=!0x1);var _0x5bf904=_0x5d16a7?(_0x1b4cd9[_0x17f244(0x274)]-_0x1b4cd9[_0x17f244(0x227)])/_0x1b4cd9['fileObjSize']:0x1;if(_0x1b4cd9[_0x17f244(0x277)])return 0x0;switch(_0x1b4cd9['xhr']&&_0x1b4cd9['xhr'][_0x17f244(0x1db)]||(_0x5bf904*=0.95),_0x1b4cd9[_0x17f244(0x1db)]()){case'success':case _0x17f244(0x210):return 0x1*_0x5bf904;case _0x17f244(0x1c8):return 0x0*_0x5bf904;default:return _0x1b4cd9['loaded']/(_0x1b4cd9[_0x17f244(0x274)]-_0x1b4cd9[_0x17f244(0x227)])*_0x5bf904;}},this;}return _0x1971f8[_0x4f7039(0x24f)]=function(){var _0x39de30=_0x4f7039,_0x42e136=!0x1;if(_0x1971f8['getOpt']('prioritizeFirstAndLastChunk')&&(_0x1a14e4[_0x39de30(0x21d)](_0x1971f8[_0x39de30(0x25a)],function(_0x3d286c){var _0x2d7725=_0x39de30;return _0x3d286c['chunks'][_0x2d7725(0x1f6)]&&_0x2d7725(0x1c8)==_0x3d286c['chunks'][0x0][_0x2d7725(0x1db)]()&&0x0===_0x3d286c[_0x2d7725(0x1f0)][0x0]['preprocessState']?(_0x3d286c[_0x2d7725(0x1f0)][0x0]['send'](),_0x42e136=!0x0,!0x1):_0x3d286c['chunks'][_0x2d7725(0x1f6)]>0x1&&_0x2d7725(0x1c8)==_0x3d286c[_0x2d7725(0x1f0)][_0x3d286c['chunks'][_0x2d7725(0x1f6)]-0x1]['status']()&&0x0===_0x3d286c['chunks'][_0x3d286c[_0x2d7725(0x1f0)][_0x2d7725(0x1f6)]-0x1][_0x2d7725(0x206)]?(_0x3d286c['chunks'][_0x3d286c[_0x2d7725(0x1f0)][_0x2d7725(0x1f6)]-0x1][_0x2d7725(0x24a)](),_0x42e136=!0x0,!0x1):void 0x0;}),_0x42e136)||(_0x1a14e4[_0x39de30(0x21d)](_0x1971f8['files'],function(_0x23559f){var _0x31f4d6=_0x39de30;if(!0x1===_0x23559f[_0x31f4d6(0x1ba)]()&&_0x1a14e4[_0x31f4d6(0x21d)](_0x23559f['chunks'],function(_0x54b655){var _0x10e02d=_0x31f4d6;if(_0x10e02d(0x1c8)==_0x54b655[_0x10e02d(0x1db)]()&&0x0===_0x54b655[_0x10e02d(0x206)])return _0x54b655[_0x10e02d(0x24a)](),_0x42e136=!0x0,!0x1;}),_0x42e136)return!0x1;}),_0x42e136))return!0x0;var _0x251766=!0x1;return _0x1a14e4[_0x39de30(0x21d)](_0x1971f8['files'],function(_0x35e0fb){var _0x3bf119=_0x39de30;if(!_0x35e0fb[_0x3bf119(0x1f5)]())return _0x251766=!0x0,!0x1;}),_0x251766||_0x1971f8[_0x39de30(0x1d5)](_0x39de30(0x240)),!0x1;},_0x1971f8['assignBrowse']=function(_0x3f7a12,_0x225c78){var _0x531321=_0x4f7039;void 0x0===_0x3f7a12[_0x531321(0x1f6)]&&(_0x3f7a12=[_0x3f7a12]),_0x1a14e4[_0x531321(0x21d)](_0x3f7a12,function(_0x5dd3d0){var _0x3782ec=_0x531321;_0x3782ec(0x1f8)===_0x5dd3d0['tagName']&&_0x3782ec(0x247)===_0x5dd3d0[_0x3782ec(0x1ad)]?_0x475f9d=_0x5dd3d0:((_0x475f9d=document[_0x3782ec(0x1a5)](_0x3782ec(0x1fe)))[_0x3782ec(0x205)](_0x3782ec(0x1ad),_0x3782ec(0x247)),_0x475f9d['style']['display']=_0x3782ec(0x1b6),_0x5dd3d0[_0x3782ec(0x208)](_0x3782ec(0x19e),function(){var _0x259227=_0x3782ec;_0x475f9d[_0x259227(0x1cd)][_0x259227(0x259)]=0x0,_0x475f9d[_0x259227(0x1cd)]['display']='block',_0x475f9d[_0x259227(0x270)](),_0x475f9d[_0x259227(0x19e)](),_0x475f9d[_0x259227(0x1cd)]['display']=_0x259227(0x1b6);},!0x1),_0x5dd3d0['appendChild'](_0x475f9d));var _0x475f9d,_0x20aa91=_0x1971f8[_0x3782ec(0x204)](_0x3782ec(0x22b));void 0x0===_0x20aa91||0x1!=_0x20aa91?_0x475f9d[_0x3782ec(0x205)](_0x3782ec(0x1fd),_0x3782ec(0x1fd)):_0x475f9d[_0x3782ec(0x254)](_0x3782ec(0x1fd)),_0x225c78?_0x475f9d[_0x3782ec(0x205)](_0x3782ec(0x26d),_0x3782ec(0x26d)):_0x475f9d[_0x3782ec(0x254)](_0x3782ec(0x26d));var _0x513b22=_0x1971f8[_0x3782ec(0x204)](_0x3782ec(0x1f3));void 0x0!==_0x513b22&&_0x513b22[_0x3782ec(0x1f6)]>=0x1?_0x475f9d[_0x3782ec(0x205)]('accept',_0x513b22[_0x3782ec(0x1bd)](function(_0x30a8f8){return'.'+_0x30a8f8;})['join'](',')):_0x475f9d[_0x3782ec(0x254)](_0x3782ec(0x1ee)),_0x475f9d[_0x3782ec(0x208)]('change',function(_0xb34a57){var _0x5bc125=_0x3782ec;_0x14fc38(_0xb34a57[_0x5bc125(0x19d)][_0x5bc125(0x25a)],_0xb34a57),_0x1971f8[_0x5bc125(0x204)](_0x5bc125(0x1a3))&&(_0xb34a57[_0x5bc125(0x19d)]['value']='');},!0x1);});},_0x1971f8[_0x4f7039(0x257)]=function(_0x2076a3){var _0x5cf0e6=_0x4f7039;void 0x0===_0x2076a3[_0x5cf0e6(0x1f6)]&&(_0x2076a3=[_0x2076a3]),_0x1a14e4['each'](_0x2076a3,function(_0x29b3e5){var _0x4b56f8=_0x5cf0e6;_0x29b3e5['addEventListener'](_0x4b56f8(0x1e7),_0x52aae7,!0x1),_0x29b3e5[_0x4b56f8(0x208)](_0x4b56f8(0x1b7),_0x52aae7,!0x1),_0x29b3e5[_0x4b56f8(0x208)](_0x4b56f8(0x234),_0x156053,!0x1);});},_0x1971f8['unAssignDrop']=function(_0x2b82bc){var _0x58e02e=_0x4f7039;void 0x0===_0x2b82bc[_0x58e02e(0x1f6)]&&(_0x2b82bc=[_0x2b82bc]),_0x1a14e4['each'](_0x2b82bc,function(_0x44d4b8){var _0x34dfbb=_0x58e02e;_0x44d4b8['removeEventListener']('dragover',_0x52aae7),_0x44d4b8[_0x34dfbb(0x20b)](_0x34dfbb(0x1b7),_0x52aae7),_0x44d4b8[_0x34dfbb(0x20b)]('drop',_0x156053);});},_0x1971f8['isUploading']=function(){var _0x9d9989=_0x4f7039,_0x418bd7=!0x1;return _0x1a14e4[_0x9d9989(0x21d)](_0x1971f8[_0x9d9989(0x25a)],function(_0x185f06){var _0xf179f9=_0x9d9989;if(_0x185f06[_0xf179f9(0x217)]())return _0x418bd7=!0x0,!0x1;}),_0x418bd7;},_0x1971f8[_0x4f7039(0x1e8)]=function(){var _0x428884=_0x4f7039;if(!_0x1971f8[_0x428884(0x217)]()){_0x1971f8['fire'](_0x428884(0x220));for(var _0x3d06b2=0x1;_0x3d06b2<=_0x1971f8[_0x428884(0x204)](_0x428884(0x1fa));_0x3d06b2++)_0x1971f8['uploadNextChunk']();}},_0x1971f8[_0x4f7039(0x200)]=function(){var _0x245bd2=_0x4f7039;_0x1a14e4[_0x245bd2(0x21d)](_0x1971f8[_0x245bd2(0x25a)],function(_0x3c7337){var _0x56f456=_0x245bd2;_0x3c7337[_0x56f456(0x1c5)]();}),_0x1971f8[_0x245bd2(0x1d5)](_0x245bd2(0x200));},_0x1971f8[_0x4f7039(0x1a2)]=function(){var _0x9df4cb=_0x4f7039;_0x1971f8['fire'](_0x9df4cb(0x26a));for(var _0xd970f1=_0x1971f8[_0x9df4cb(0x25a)]['length']-0x1;_0xd970f1>=0x0;_0xd970f1--)_0x1971f8[_0x9df4cb(0x25a)][_0xd970f1]['cancel']();_0x1971f8[_0x9df4cb(0x1d5)](_0x9df4cb(0x1a2));},_0x1971f8[_0x4f7039(0x22f)]=function(){var _0x47981d=_0x4f7039,_0x5a62cf=0x0,_0xbd7c0c=0x0;return _0x1a14e4[_0x47981d(0x21d)](_0x1971f8[_0x47981d(0x25a)],function(_0x14dbe6){var _0x3be41e=_0x47981d;_0x5a62cf+=_0x14dbe6[_0x3be41e(0x22f)]()*_0x14dbe6[_0x3be41e(0x266)],_0xbd7c0c+=_0x14dbe6[_0x3be41e(0x266)];}),_0xbd7c0c>0x0?_0x5a62cf/_0xbd7c0c:0x0;},_0x1971f8[_0x4f7039(0x237)]=function(_0x579cf9,_0x1d028f){_0x14fc38([_0x579cf9],_0x1d028f);},_0x1971f8[_0x4f7039(0x1a7)]=function(_0x48cbfa,_0x1f8f21){_0x14fc38(_0x48cbfa,_0x1f8f21);},_0x1971f8[_0x4f7039(0x1f7)]=function(_0xf87c90){var _0x19684d=_0x4f7039;for(var _0x450ec9=_0x1971f8[_0x19684d(0x25a)]['length']-0x1;_0x450ec9>=0x0;_0x450ec9--)_0x1971f8[_0x19684d(0x25a)][_0x450ec9]===_0xf87c90&&_0x1971f8[_0x19684d(0x25a)][_0x19684d(0x232)](_0x450ec9,0x1);},_0x1971f8[_0x4f7039(0x253)]=function(_0x311ca7){var _0x94927d=!0x1;return _0x1a14e4['each'](_0x1971f8['files'],function(_0x156aef){var _0x11c6f0=_0x1a38;_0x156aef[_0x11c6f0(0x21f)]==_0x311ca7&&(_0x94927d=_0x156aef);}),_0x94927d;},_0x1971f8[_0x4f7039(0x23c)]=function(){var _0x324b09=_0x4f7039,_0x62d066=0x0;return _0x1a14e4[_0x324b09(0x21d)](_0x1971f8[_0x324b09(0x25a)],function(_0x26c773){var _0x5db068=_0x324b09;_0x62d066+=_0x26c773[_0x5db068(0x266)];}),_0x62d066;},_0x1971f8[_0x4f7039(0x250)]=function(_0x1a8b3d){_0x156053(_0x1a8b3d);},_0x1971f8[_0x4f7039(0x24e)]=function(_0x577fe4){var _0x4eb80f=_0x4f7039;_0x14fc38(_0x577fe4[_0x4eb80f(0x19d)][_0x4eb80f(0x25a)],_0x577fe4),_0x577fe4[_0x4eb80f(0x19d)][_0x4eb80f(0x1f2)]='';},_0x1971f8[_0x4f7039(0x244)]=function(_0xe85cbd){var _0x2ef72a=_0x4f7039;_0x1971f8['opts'][_0x2ef72a(0x24b)]=_0xe85cbd;},this;};module['exports']=o;
|