react-dropzone 10.1.9 → 10.1.10
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 -1
- package/dist/es/index.js +80 -78
- package/dist/es/utils/index.js +2 -2
- package/dist/index.js +2 -2
- package/package.json +10 -8
- package/src/index.js +1 -1
- package/src/index.spec.js +32 -7
- package/src/utils/index.js +4 -2
package/README.md
CHANGED
|
@@ -92,7 +92,7 @@ function MyDropzone() {
|
|
|
92
92
|
console.log(binaryStr)
|
|
93
93
|
}
|
|
94
94
|
|
|
95
|
-
acceptedFiles.forEach(file => reader.
|
|
95
|
+
acceptedFiles.forEach(file => reader.readAsArrayBuffer(file))
|
|
96
96
|
}, [])
|
|
97
97
|
const {getRootProps, getInputProps, isDragActive} = useDropzone({onDrop})
|
|
98
98
|
|
package/dist/es/index.js
CHANGED
|
@@ -10,11 +10,13 @@ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArra
|
|
|
10
10
|
|
|
11
11
|
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); }
|
|
12
12
|
|
|
13
|
-
function _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
|
|
13
|
+
function _iterableToArrayLimit(arr, i) { if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === "[object Arguments]")) { return; } var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
|
|
14
14
|
|
|
15
15
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
16
16
|
|
|
17
|
-
function
|
|
17
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
|
|
18
|
+
|
|
19
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
18
20
|
|
|
19
21
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
20
22
|
|
|
@@ -309,80 +311,80 @@ var initialState = {
|
|
|
309
311
|
draggedFiles: [],
|
|
310
312
|
acceptedFiles: [],
|
|
311
313
|
rejectedFiles: []
|
|
312
|
-
/**
|
|
313
|
-
* A React hook that creates a drag 'n' drop area.
|
|
314
|
-
*
|
|
315
|
-
* ```jsx
|
|
316
|
-
* function MyDropzone(props) {
|
|
317
|
-
* const {getRootProps, getInputProps} = useDropzone({
|
|
318
|
-
* onDrop: acceptedFiles => {
|
|
319
|
-
* // do something with the File objects, e.g. upload to some server
|
|
320
|
-
* }
|
|
321
|
-
* });
|
|
322
|
-
* return (
|
|
323
|
-
* <div {...getRootProps()}>
|
|
324
|
-
* <input {...getInputProps()} />
|
|
325
|
-
* <p>Drag and drop some files here, or click to select files</p>
|
|
326
|
-
* </div>
|
|
327
|
-
* )
|
|
328
|
-
* }
|
|
329
|
-
* ```
|
|
330
|
-
*
|
|
331
|
-
* @function useDropzone
|
|
332
|
-
*
|
|
333
|
-
* @param {object} props
|
|
334
|
-
* @param {string|string[]} [props.accept] Set accepted file types.
|
|
335
|
-
* See https://github.com/okonet/attr-accept for more information.
|
|
336
|
-
* Keep in mind that mime type determination is not reliable across platforms. CSV files,
|
|
337
|
-
* for example, are reported as text/plain under macOS but as application/vnd.ms-excel under
|
|
338
|
-
* Windows. In some cases there might not be a mime type set at all.
|
|
339
|
-
* See: https://github.com/react-dropzone/react-dropzone/issues/276
|
|
340
|
-
* @param {boolean} [props.multiple=true] Allow drag 'n' drop (or selection from the file dialog) of multiple files
|
|
341
|
-
* @param {boolean} [props.preventDropOnDocument=true] If false, allow dropped items to take over the current browser window
|
|
342
|
-
* @param {boolean} [props.noClick=false] If true, disables click to open the native file selection dialog
|
|
343
|
-
* @param {boolean} [props.noKeyboard=false] If true, disables SPACE/ENTER to open the native file selection dialog.
|
|
344
|
-
* Note that it also stops tracking the focus state.
|
|
345
|
-
* @param {boolean} [props.noDrag=false] If true, disables drag 'n' drop
|
|
346
|
-
* @param {boolean} [props.noDragEventsBubbling=false] If true, stops drag event propagation to parents
|
|
347
|
-
* @param {number} [props.minSize=0] Minimum file size (in bytes)
|
|
348
|
-
* @param {number} [props.maxSize=Infinity] Maximum file size (in bytes)
|
|
349
|
-
* @param {boolean} [props.disabled=false] Enable/disable the dropzone
|
|
350
|
-
* @param {getFilesFromEvent} [props.getFilesFromEvent] Use this to provide a custom file aggregator
|
|
351
|
-
* @param {Function} [props.onFileDialogCancel] Cb for when closing the file dialog with no selection
|
|
352
|
-
* @param {dragCb} [props.onDragEnter] Cb for when the `dragenter` event occurs.
|
|
353
|
-
* @param {dragCb} [props.onDragLeave] Cb for when the `dragleave` event occurs
|
|
354
|
-
* @param {dragCb} [props.onDragOver] Cb for when the `dragover` event occurs
|
|
355
|
-
* @param {dropCb} [props.onDrop] Cb for when the `drop` event occurs.
|
|
356
|
-
* Note that this callback is invoked after the `getFilesFromEvent` callback is done.
|
|
357
|
-
*
|
|
358
|
-
* Files are accepted or rejected based on the `accept`, `multiple`, `minSize` and `maxSize` props.
|
|
359
|
-
* `accept` must be a valid [MIME type](http://www.iana.org/assignments/media-types/media-types.xhtml) according to [input element specification](https://www.w3.org/wiki/HTML/Elements/input/file) or a valid file extension.
|
|
360
|
-
* If `multiple` is set to false and additional files are droppped,
|
|
361
|
-
* all files besides the first will be rejected.
|
|
362
|
-
* Any file which does not have a size in the [`minSize`, `maxSize`] range, will be rejected as well.
|
|
363
|
-
*
|
|
364
|
-
* Note that the `onDrop` callback will always be invoked regardless if the dropped files were accepted or rejected.
|
|
365
|
-
* If you'd like to react to a specific scenario, use the `onDropAccepted`/`onDropRejected` props.
|
|
366
|
-
*
|
|
367
|
-
* `onDrop` will provide you with an array of [File](https://developer.mozilla.org/en-US/docs/Web/API/File) objects which you can then process and send to a server.
|
|
368
|
-
* For example, with [SuperAgent](https://github.com/visionmedia/superagent) as a http/ajax library:
|
|
369
|
-
*
|
|
370
|
-
* ```js
|
|
371
|
-
* function onDrop(acceptedFiles) {
|
|
372
|
-
* const req = request.post('/upload')
|
|
373
|
-
* acceptedFiles.forEach(file => {
|
|
374
|
-
* req.attach(file.name, file)
|
|
375
|
-
* })
|
|
376
|
-
* req.end(callback)
|
|
377
|
-
* }
|
|
378
|
-
* ```
|
|
379
|
-
* @param {dropAcceptedCb} [props.onDropAccepted]
|
|
380
|
-
* @param {dropRejectedCb} [props.onDropRejected]
|
|
381
|
-
*
|
|
382
|
-
* @returns {DropzoneState}
|
|
383
|
-
*/
|
|
384
|
-
|
|
385
314
|
};
|
|
315
|
+
/**
|
|
316
|
+
* A React hook that creates a drag 'n' drop area.
|
|
317
|
+
*
|
|
318
|
+
* ```jsx
|
|
319
|
+
* function MyDropzone(props) {
|
|
320
|
+
* const {getRootProps, getInputProps} = useDropzone({
|
|
321
|
+
* onDrop: acceptedFiles => {
|
|
322
|
+
* // do something with the File objects, e.g. upload to some server
|
|
323
|
+
* }
|
|
324
|
+
* });
|
|
325
|
+
* return (
|
|
326
|
+
* <div {...getRootProps()}>
|
|
327
|
+
* <input {...getInputProps()} />
|
|
328
|
+
* <p>Drag and drop some files here, or click to select files</p>
|
|
329
|
+
* </div>
|
|
330
|
+
* )
|
|
331
|
+
* }
|
|
332
|
+
* ```
|
|
333
|
+
*
|
|
334
|
+
* @function useDropzone
|
|
335
|
+
*
|
|
336
|
+
* @param {object} props
|
|
337
|
+
* @param {string|string[]} [props.accept] Set accepted file types.
|
|
338
|
+
* See https://github.com/okonet/attr-accept for more information.
|
|
339
|
+
* Keep in mind that mime type determination is not reliable across platforms. CSV files,
|
|
340
|
+
* for example, are reported as text/plain under macOS but as application/vnd.ms-excel under
|
|
341
|
+
* Windows. In some cases there might not be a mime type set at all.
|
|
342
|
+
* See: https://github.com/react-dropzone/react-dropzone/issues/276
|
|
343
|
+
* @param {boolean} [props.multiple=true] Allow drag 'n' drop (or selection from the file dialog) of multiple files
|
|
344
|
+
* @param {boolean} [props.preventDropOnDocument=true] If false, allow dropped items to take over the current browser window
|
|
345
|
+
* @param {boolean} [props.noClick=false] If true, disables click to open the native file selection dialog
|
|
346
|
+
* @param {boolean} [props.noKeyboard=false] If true, disables SPACE/ENTER to open the native file selection dialog.
|
|
347
|
+
* Note that it also stops tracking the focus state.
|
|
348
|
+
* @param {boolean} [props.noDrag=false] If true, disables drag 'n' drop
|
|
349
|
+
* @param {boolean} [props.noDragEventsBubbling=false] If true, stops drag event propagation to parents
|
|
350
|
+
* @param {number} [props.minSize=0] Minimum file size (in bytes)
|
|
351
|
+
* @param {number} [props.maxSize=Infinity] Maximum file size (in bytes)
|
|
352
|
+
* @param {boolean} [props.disabled=false] Enable/disable the dropzone
|
|
353
|
+
* @param {getFilesFromEvent} [props.getFilesFromEvent] Use this to provide a custom file aggregator
|
|
354
|
+
* @param {Function} [props.onFileDialogCancel] Cb for when closing the file dialog with no selection
|
|
355
|
+
* @param {dragCb} [props.onDragEnter] Cb for when the `dragenter` event occurs.
|
|
356
|
+
* @param {dragCb} [props.onDragLeave] Cb for when the `dragleave` event occurs
|
|
357
|
+
* @param {dragCb} [props.onDragOver] Cb for when the `dragover` event occurs
|
|
358
|
+
* @param {dropCb} [props.onDrop] Cb for when the `drop` event occurs.
|
|
359
|
+
* Note that this callback is invoked after the `getFilesFromEvent` callback is done.
|
|
360
|
+
*
|
|
361
|
+
* Files are accepted or rejected based on the `accept`, `multiple`, `minSize` and `maxSize` props.
|
|
362
|
+
* `accept` must be a valid [MIME type](http://www.iana.org/assignments/media-types/media-types.xhtml) according to [input element specification](https://www.w3.org/wiki/HTML/Elements/input/file) or a valid file extension.
|
|
363
|
+
* If `multiple` is set to false and additional files are droppped,
|
|
364
|
+
* all files besides the first will be rejected.
|
|
365
|
+
* Any file which does not have a size in the [`minSize`, `maxSize`] range, will be rejected as well.
|
|
366
|
+
*
|
|
367
|
+
* Note that the `onDrop` callback will always be invoked regardless if the dropped files were accepted or rejected.
|
|
368
|
+
* If you'd like to react to a specific scenario, use the `onDropAccepted`/`onDropRejected` props.
|
|
369
|
+
*
|
|
370
|
+
* `onDrop` will provide you with an array of [File](https://developer.mozilla.org/en-US/docs/Web/API/File) objects which you can then process and send to a server.
|
|
371
|
+
* For example, with [SuperAgent](https://github.com/visionmedia/superagent) as a http/ajax library:
|
|
372
|
+
*
|
|
373
|
+
* ```js
|
|
374
|
+
* function onDrop(acceptedFiles) {
|
|
375
|
+
* const req = request.post('/upload')
|
|
376
|
+
* acceptedFiles.forEach(file => {
|
|
377
|
+
* req.attach(file.name, file)
|
|
378
|
+
* })
|
|
379
|
+
* req.end(callback)
|
|
380
|
+
* }
|
|
381
|
+
* ```
|
|
382
|
+
* @param {dropAcceptedCb} [props.onDropAccepted]
|
|
383
|
+
* @param {dropRejectedCb} [props.onDropRejected]
|
|
384
|
+
*
|
|
385
|
+
* @returns {DropzoneState}
|
|
386
|
+
*/
|
|
387
|
+
|
|
386
388
|
export function useDropzone() {
|
|
387
389
|
var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
|
|
388
390
|
accept = _ref2.accept,
|
|
@@ -693,7 +695,7 @@ export function useDropzone() {
|
|
|
693
695
|
onDrop: composeDragHandler(composeEventHandlers(onDrop, onDropCb))
|
|
694
696
|
}, refKey, rootRef), !disabled && !noKeyboard ? {
|
|
695
697
|
tabIndex: 0
|
|
696
|
-
} : {}, rest);
|
|
698
|
+
} : {}, {}, rest);
|
|
697
699
|
};
|
|
698
700
|
}, [rootRef, onKeyDownCb, onFocusCb, onBlurCb, onClickCb, onDragEnterCb, onDragOverCb, onDragLeaveCb, onDropCb, noKeyboard, noDrag, disabled]);
|
|
699
701
|
var onInputElementClick = useCallback(function (event) {
|
|
@@ -721,12 +723,12 @@ export function useDropzone() {
|
|
|
721
723
|
tabIndex: -1
|
|
722
724
|
}, refKey, inputRef);
|
|
723
725
|
|
|
724
|
-
return _objectSpread({}, inputProps, rest);
|
|
726
|
+
return _objectSpread({}, inputProps, {}, rest);
|
|
725
727
|
};
|
|
726
728
|
}, [inputRef, accept, multiple, onDropCb, disabled]);
|
|
727
729
|
var fileCount = draggedFiles.length;
|
|
728
730
|
var isMultipleAllowed = multiple || fileCount <= 1;
|
|
729
|
-
var isDragAccept = fileCount > 0 && allFilesAccepted(draggedFiles, accept);
|
|
731
|
+
var isDragAccept = fileCount > 0 && allFilesAccepted(draggedFiles, accept, maxSize, minSize);
|
|
730
732
|
var isDragReject = fileCount > 0 && (!isDragAccept || !isMultipleAllowed);
|
|
731
733
|
return _objectSpread({}, state, {
|
|
732
734
|
isDragAccept: isDragAccept,
|
package/dist/es/utils/index.js
CHANGED
|
@@ -9,9 +9,9 @@ export function fileAccepted(file, accept) {
|
|
|
9
9
|
export function fileMatchSize(file, maxSize, minSize) {
|
|
10
10
|
return file.size <= maxSize && file.size >= minSize;
|
|
11
11
|
}
|
|
12
|
-
export function allFilesAccepted(files, accept) {
|
|
12
|
+
export function allFilesAccepted(files, accept, maxSize, minSize) {
|
|
13
13
|
return files.every(function (file) {
|
|
14
|
-
return fileAccepted(file, accept);
|
|
14
|
+
return fileAccepted(file, accept) && fileMatchSize(file, maxSize, minSize);
|
|
15
15
|
});
|
|
16
16
|
} // React's synthetic events has event.isPropagationStopped,
|
|
17
17
|
// but to remain compatibility with other libs (Preact) fall back
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports,require("react"),require("prop-types")):"function"==typeof define&&define.amd?define(["exports","react","prop-types"],n):n((e=e||self).reactDropzone={},e.React,e.PropTypes)}(this,function(e,ue,n){"use strict";var u="default"in ue?ue.default:ue;function c(e){return(c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function ce(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function ae(n){for(var e=1;e<arguments.length;e++){var t=null!=arguments[e]?arguments[e]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(e){ce(n,e,t[e])})}return n}function fe(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)t=i[r],0<=n.indexOf(t)||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)t=i[r],0<=n.indexOf(t)||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}function le(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t=[],r=!0,o=!1,i=void 0;try{for(var u,c=e[Symbol.iterator]();!(r=(u=c.next()).done)&&(t.push(u.value),!n||t.length!==n);r=!0);}catch(e){o=!0,i=e}finally{try{r||null==c.return||c.return()}finally{if(o)throw i}}return t}(e,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function se(e){return function(e){if(Array.isArray(e)){for(var n=0,t=new Array(e.length);n<e.length;n++)t[n]=e[n];return t}}(e)||function(e){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e))return Array.from(e)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance")}()}function f(i,u,c,a){return new(c||(c=Promise))(function(e,n){function t(e){try{o(a.next(e))}catch(e){n(e)}}function r(e){try{o(a.throw(e))}catch(e){n(e)}}function o(n){n.done?e(n.value):new c(function(e){e(n.value)}).then(t,r)}o((a=a.apply(i,u||[])).next())})}function l(t,r){var o,i,u,e,c={label:0,sent:function(){if(1&u[0])throw u[1];return u[1]},trys:[],ops:[]};return e={next:n(0),throw:n(1),return:n(2)},"function"==typeof Symbol&&(e[Symbol.iterator]=function(){return this}),e;function n(n){return function(e){return function(n){if(o)throw new TypeError("Generator is already executing.");for(;c;)try{if(o=1,i&&(u=2&n[0]?i.return:n[0]?i.throw||((u=i.return)&&u.call(i),0):i.next)&&!(u=u.call(i,n[1])).done)return u;switch(i=0,u&&(n=[2&n[0],u.value]),n[0]){case 0:case 1:u=n;break;case 4:return c.label++,{value:n[1],done:!1};case 5:c.label++,i=n[1],n=[0];continue;case 7:n=c.ops.pop(),c.trys.pop();continue;default:if(!(u=0<(u=c.trys).length&&u[u.length-1])&&(6===n[0]||2===n[0])){c=0;continue}if(3===n[0]&&(!u||n[1]>u[0]&&n[1]<u[3])){c.label=n[1];break}if(6===n[0]&&c.label<u[1]){c.label=u[1],u=n;break}if(u&&c.label<u[2]){c.label=u[2],c.ops.push(n);break}u[2]&&c.ops.pop(),c.trys.pop();continue}n=r.call(t,c)}catch(e){n=[6,e],i=0}finally{o=u=0}if(5&n[0])throw n[1];return{value:n[0]?n[1]:void 0,done:!0}}([n,e])}}}function t(e,n){var t="function"==typeof Symbol&&e[Symbol.iterator];if(!t)return e;var r,o,i=t.call(e),u=[];try{for(;(void 0===n||0<n--)&&!(r=i.next()).done;)u.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(t=i.return)&&t.call(i)}finally{if(o)throw o.error}}return u}function i(){for(var e=[],n=0;n<arguments.length;n++)e=e.concat(t(arguments[n]));return e}n=n&&n.hasOwnProperty("default")?n.default:n;var o=new Map([["avi","video/avi"],["gif","image/gif"],["ico","image/x-icon"],["jpeg","image/jpeg"],["jpg","image/jpeg"],["mkv","video/x-matroska"],["mov","video/quicktime"],["mp4","video/mp4"],["pdf","application/pdf"],["png","image/png"],["zip","application/zip"],["doc","application/msword"],["docx","application/vnd.openxmlformats-officedocument.wordprocessingml.document"]]);function a(e,n){var t=function(e){var n=e.name;if(n&&-1!==n.lastIndexOf(".")&&!e.type){var t=n.split(".").pop().toLowerCase(),r=o.get(t);r&&Object.defineProperty(e,"type",{value:r,writable:!1,configurable:!1,enumerable:!0})}return e}(e),r=e.webkitRelativePath;return Object.defineProperty(t,"path",{value:"string"==typeof n?n:"string"==typeof r&&0<r.length?r:e.name,writable:!1,configurable:!1,enumerable:!0}),t}var r=[".DS_Store","Thumbs.db"];function pe(o){return f(this,void 0,void 0,function(){return l(this,function(e){return[2,(r=o,r.dataTransfer&&o.dataTransfer?function(t,r){return f(this,void 0,void 0,function(){var n;return l(this,function(e){switch(e.label){case 0:return t.items?(n=p(t.items).filter(function(e){return"file"===e.kind}),"drop"!==r?[2,n]:[4,Promise.all(n.map(d))]):[3,2];case 1:return[2,s(function t(e){return e.reduce(function(e,n){return i(e,Array.isArray(n)?t(n):[n])},[])}(e.sent()))];case 2:return[2,s(p(t.files).map(function(e){return a(e)}))]}})})}(o.dataTransfer,o.type):(n=o,(t=n.target,null!==t&&n.target.files?p(n.target.files):[]).map(function(e){return a(e)})))];var n,t,r})})}function s(e){return e.filter(function(e){return-1===r.indexOf(e.name)})}function p(e){for(var n=[],t=0;t<e.length;t++){var r=e[t];n.push(r)}return n}function d(e){if("function"!=typeof e.webkitGetAsEntry)return v(e);var n=e.webkitGetAsEntry();return n&&n.isDirectory?g(n):v(e)}function v(e){var n=e.getAsFile();if(!n)return Promise.reject(e+" is not a File");var t=a(n);return Promise.resolve(t)}function y(n){return f(this,void 0,void 0,function(){return l(this,function(e){return[2,n.isDirectory?g(n):function(r){return f(this,void 0,void 0,function(){return l(this,function(e){return[2,new Promise(function(t,n){r.file(function(e){var n=a(e,r.fullPath);t(n)},function(e){n(e)})})]})})}(n)]})})}function g(e){var n=e.createReader();return new Promise(function(u,c){var a=[];!function i(){var e=this;n.readEntries(function(o){return f(e,void 0,void 0,function(){var n,t,r;return l(this,function(e){switch(e.label){case 0:if(o.length)return[3,5];e.label=1;case 1:return e.trys.push([1,3,,4]),[4,Promise.all(a)];case 2:return n=e.sent(),u(n),[3,4];case 3:return t=e.sent(),c(t),[3,4];case 4:return[3,6];case 5:r=Promise.all(o.map(y)),a.push(r),i(),e.label=6;case 6:return[2]}})})},function(e){c(e)})}()})}var h,b,m=(function(e){e.exports=function(t){function r(e){if(o[e])return o[e].exports;var n=o[e]={i:e,l:!1,exports:{}};return t[e].call(n.exports,n,n.exports,r),n.l=!0,n.exports}var o={};return r.m=t,r.c=o,r.d=function(e,n,t){r.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:t})},r.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(n,"a",n),n},r.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},r.p="",r(r.s=13)}([function(e,n){var t=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=t)},function(e,n){e.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},function(e,n){var t=e.exports={version:"2.5.0"};"number"==typeof __e&&(__e=t)},function(e,n,t){e.exports=!t(4)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(e,n){e.exports=function(e){try{return!!e()}catch(e){return!0}}},function(e,n){var t={}.toString;e.exports=function(e){return t.call(e).slice(8,-1)}},function(e,n,t){var r=t(32)("wks"),o=t(9),i=t(0).Symbol,u="function"==typeof i;(e.exports=function(e){return r[e]||(r[e]=u&&i[e]||(u?i:o)("Symbol."+e))}).store=r},function(e,n,t){var y=t(0),g=t(2),h=t(8),b=t(22),m=t(10),x=function(e,n,t){var r,o,i,u,c=e&x.F,a=e&x.G,f=e&x.S,l=e&x.P,s=e&x.B,p=a?y:f?y[n]||(y[n]={}):(y[n]||{}).prototype,d=a?g:g[n]||(g[n]={}),v=d.prototype||(d.prototype={});for(r in a&&(t=n),t)i=((o=!c&&p&&void 0!==p[r])?p:t)[r],u=s&&o?m(i,y):l&&"function"==typeof i?m(Function.call,i):i,p&&b(p,r,i,e&x.U),d[r]!=i&&h(d,r,u),l&&v[r]!=i&&(v[r]=i)};y.core=g,x.F=1,x.G=2,x.S=4,x.P=8,x.B=16,x.W=32,x.U=64,x.R=128,e.exports=x},function(e,n,t){var r=t(16),o=t(21);e.exports=t(3)?function(e,n,t){return r.f(e,n,o(1,t))}:function(e,n,t){return e[n]=t,e}},function(e,n){var t=0,r=Math.random();e.exports=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++t+r).toString(36))}},function(e,n,t){var i=t(24);e.exports=function(r,o,e){if(i(r),void 0===o)return r;switch(e){case 1:return function(e){return r.call(o,e)};case 2:return function(e,n){return r.call(o,e,n)};case 3:return function(e,n,t){return r.call(o,e,n,t)}}return function(){return r.apply(o,arguments)}}},function(e,n){e.exports=function(e){if(null==e)throw TypeError("Can't call method on "+e);return e}},function(e,n,t){var r=t(28),o=Math.min;e.exports=function(e){return 0<e?o(r(e),9007199254740991):0}},function(e,n,t){n.__esModule=!0,n.default=function(e,n){if(e&&n){var t=Array.isArray(n)?n:n.split(","),r=e.name||"",o=e.type||"",i=o.replace(/\/.*$/,"");return t.some(function(e){var n=e.trim();return"."===n.charAt(0)?r.toLowerCase().endsWith(n.toLowerCase()):n.endsWith("/*")?i===n.replace(/\/.*$/,""):o===n})}return!0},t(14),t(34)},function(e,n,t){t(15),e.exports=t(2).Array.some},function(e,n,t){var r=t(7),o=t(25)(3);r(r.P+r.F*!t(33)([].some,!0),"Array",{some:function(e){return o(this,e,arguments[1])}})},function(e,n,t){var r=t(17),o=t(18),i=t(20),u=Object.defineProperty;n.f=t(3)?Object.defineProperty:function(e,n,t){if(r(e),n=i(n,!0),r(t),o)try{return u(e,n,t)}catch(e){}if("get"in t||"set"in t)throw TypeError("Accessors not supported!");return"value"in t&&(e[n]=t.value),e}},function(e,n,t){var r=t(1);e.exports=function(e){if(!r(e))throw TypeError(e+" is not an object!");return e}},function(e,n,t){e.exports=!t(3)&&!t(4)(function(){return 7!=Object.defineProperty(t(19)("div"),"a",{get:function(){return 7}}).a})},function(e,n,t){var r=t(1),o=t(0).document,i=r(o)&&r(o.createElement);e.exports=function(e){return i?o.createElement(e):{}}},function(e,n,t){var o=t(1);e.exports=function(e,n){if(!o(e))return e;var t,r;if(n&&"function"==typeof(t=e.toString)&&!o(r=t.call(e)))return r;if("function"==typeof(t=e.valueOf)&&!o(r=t.call(e)))return r;if(!n&&"function"==typeof(t=e.toString)&&!o(r=t.call(e)))return r;throw TypeError("Can't convert object to primitive value")}},function(e,n){e.exports=function(e,n){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:n}}},function(e,n,t){var i=t(0),u=t(8),c=t(23),a=t(9)("src"),r=Function.toString,f=(""+r).split("toString");t(2).inspectSource=function(e){return r.call(e)},(e.exports=function(e,n,t,r){var o="function"==typeof t;o&&(c(t,"name")||u(t,"name",n)),e[n]!==t&&(o&&(c(t,a)||u(t,a,e[n]?""+e[n]:f.join(String(n)))),e===i?e[n]=t:r?e[n]?e[n]=t:u(e,n,t):(delete e[n],u(e,n,t)))})(Function.prototype,"toString",function(){return"function"==typeof this&&this[a]||r.call(this)})},function(e,n){var t={}.hasOwnProperty;e.exports=function(e,n){return t.call(e,n)}},function(e,n){e.exports=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e}},function(e,n,t){var m=t(10),x=t(26),D=t(27),w=t(12),r=t(29);e.exports=function(s,e){var p=1==s,d=2==s,v=3==s,y=4==s,g=6==s,h=5==s||g,b=e||r;return function(e,n,t){for(var r,o,i=D(e),u=x(i),c=m(n,t,3),a=w(u.length),f=0,l=p?b(e,a):d?b(e,0):void 0;f<a;f++)if((h||f in u)&&(o=c(r=u[f],f,i),s))if(p)l[f]=o;else if(o)switch(s){case 3:return!0;case 5:return r;case 6:return f;case 2:l.push(r)}else if(y)return!1;return g?-1:v||y?y:l}}},function(e,n,t){var r=t(5);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==r(e)?e.split(""):Object(e)}},function(e,n,t){var r=t(11);e.exports=function(e){return Object(r(e))}},function(e,n){var t=Math.ceil,r=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(0<e?r:t)(e)}},function(e,n,t){var r=t(30);e.exports=function(e,n){return new(r(e))(n)}},function(e,n,t){var r=t(1),o=t(31),i=t(6)("species");e.exports=function(e){var n;return o(e)&&("function"!=typeof(n=e.constructor)||n!==Array&&!o(n.prototype)||(n=void 0),r(n)&&null===(n=n[i])&&(n=void 0)),void 0===n?Array:n}},function(e,n,t){var r=t(5);e.exports=Array.isArray||function(e){return"Array"==r(e)}},function(e,n,t){var r=t(0),o=r["__core-js_shared__"]||(r["__core-js_shared__"]={});e.exports=function(e){return o[e]||(o[e]={})}},function(e,n,t){var r=t(4);e.exports=function(e,n){return!!e&&r(function(){n?e.call(null,function(){},1):e.call(null)})}},function(e,n,t){t(35),e.exports=t(2).String.endsWith},function(e,n,t){var r=t(7),u=t(12),c=t(36),a="".endsWith;r(r.P+r.F*t(38)("endsWith"),"String",{endsWith:function(e){var n=c(this,e,"endsWith"),t=1<arguments.length?arguments[1]:void 0,r=u(n.length),o=void 0===t?r:Math.min(u(t),r),i=String(e);return a?a.call(n,i,o):n.slice(o-i.length,o)===i}})},function(e,n,t){var r=t(37),o=t(11);e.exports=function(e,n,t){if(r(n))throw TypeError("String#"+t+" doesn't accept regex!");return String(o(e))}},function(e,n,t){var r=t(1),o=t(5),i=t(6)("match");e.exports=function(e){var n;return r(e)&&(void 0!==(n=e[i])?!!n:"RegExp"==o(e))}},function(e,n,t){var r=t(6)("match");e.exports=function(n){var t=/./;try{"/./"[n](t)}catch(e){try{return t[r]=!1,!"/./"[n](t)}catch(n){}}return!0}}])}(h={exports:{}},h.exports),h.exports),x=(b=m)&&b.__esModule&&Object.prototype.hasOwnProperty.call(b,"default")?b.default:b;function de(e,n){return"application/x-moz-file"===e.type||x(e,n)}function ve(e){return"function"==typeof e.isPropagationStopped?e.isPropagationStopped():void 0!==e.cancelBubble&&e.cancelBubble}function ye(e){return e.dataTransfer?Array.prototype.some.call(e.dataTransfer.types,function(e){return"Files"===e||"application/x-moz-file"===e}):!!e.target&&!!e.target.files}function ge(e){e.preventDefault()}function he(){for(var e=arguments.length,o=new Array(e),n=0;n<e;n++)o[n]=arguments[n];return function(n){for(var e=arguments.length,t=new Array(1<e?e-1:0),r=1;r<e;r++)t[r-1]=arguments[r];return o.some(function(e){return!ve(n)&&e&&e.apply(void 0,[n].concat(t)),ve(n)})}}var D=ue.forwardRef(function(e,n){var t=e.children,r=w(fe(e,["children"])),o=r.open,i=fe(r,["open"]);return ue.useEffect(function(){return"function"==typeof n?n({open:o}):"object"===c(n)&&null!==n&&(n.current={open:o}),function(){"function"==typeof n?n(null):"object"===c(n)&&null!==n&&(n.current=null)}},[n]),u.createElement(ue.Fragment,null,t(ae({},i,{open:o})))});D.displayName="Dropzone";var be={isFocused:!(D.propTypes={children:n.func,accept:n.oneOfType([n.string,n.arrayOf(n.string)]),multiple:n.bool,preventDropOnDocument:n.bool,noClick:n.bool,noKeyboard:n.bool,noDrag:n.bool,noDragEventsBubbling:n.bool,minSize:n.number,maxSize:n.number,disabled:n.bool,getFilesFromEvent:n.func,onFileDialogCancel:n.func,onDragEnter:n.func,onDragLeave:n.func,onDragOver:n.func,onDrop:n.func,onDropAccepted:n.func,onDropRejected:n.func}),isFileDialogActive:!1,isDragActive:!1,isDragAccept:!1,isDragReject:!1,draggedFiles:[],acceptedFiles:[],rejectedFiles:[]};function w(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{},u=e.accept,n=e.disabled,p=void 0!==n&&n,t=e.getFilesFromEvent,r=void 0===t?pe:t,o=e.maxSize,c=void 0===o?1/0:o,i=e.minSize,a=void 0===i?0:i,f=e.multiple,l=void 0===f||f,s=e.onDragEnter,d=e.onDragLeave,v=e.onDragOver,y=e.onDrop,g=e.onDropAccepted,h=e.onDropRejected,b=e.onFileDialogCancel,m=e.preventDropOnDocument,x=void 0===m||m,D=e.noClick,w=void 0!==D&&D,O=e.noKeyboard,F=void 0!==O&&O,j=e.noDrag,S=void 0!==j&&j,A=e.noDragEventsBubbling,E=void 0!==A&&A,P=ue.useRef(null),k=ue.useRef(null),C=le(ue.useReducer(me,be),2),_=C[0],T=C[1],M=_.isFocused,R=_.isFileDialogActive,z=_.draggedFiles,L=function(){k.current&&(T({type:"openDialog"}),k.current.value=null,k.current.click())},B=function(){R&&setTimeout(function(){k.current&&(k.current.files.length||(T({type:"closeDialog"}),"function"==typeof b&&b()))},300)};ue.useEffect(function(){return window.addEventListener("focus",B,!1),function(){window.removeEventListener("focus",B,!1)}},[k,R,b]);var I=ue.useCallback(function(e){P.current&&P.current.isEqualNode(e.target)&&(32!==e.keyCode&&13!==e.keyCode||(e.preventDefault(),L()))},[P,k]),K=ue.useCallback(function(){T({type:"focus"})},[]),W=ue.useCallback(function(){T({type:"blur"})},[]),G=ue.useCallback(function(){w||(!function(){var e,n=0<arguments.length&&void 0!==arguments[0]?arguments[0]:window.navigator.userAgent;return-1!==(e=n).indexOf("MSIE")||-1!==e.indexOf("Trident/")||-1!==n.indexOf("Edge/")}()?L():setTimeout(L,0))},[k,w]),q=ue.useRef([]),N=function(e){P.current&&P.current.contains(e.target)||(e.preventDefault(),q.current=[])};ue.useEffect(function(){return x&&(document.addEventListener("dragover",ge,!1),document.addEventListener("drop",N,!1)),function(){x&&(document.removeEventListener("dragover",ge),document.removeEventListener("drop",N))}},[P,x]);var U,$=ue.useCallback(function(n){n.preventDefault(),n.persist(),Z(n),-1===q.current.indexOf(n.target)&&(q.current=[].concat(se(q.current),[n.target])),ye(n)&&Promise.resolve(r(n)).then(function(e){ve(n)&&!E||(T({draggedFiles:e,isDragActive:!0,type:"setDraggedFiles"}),s&&s(n))})},[r,s,E]),H=ue.useCallback(function(e){if(e.preventDefault(),e.persist(),Z(e),e.dataTransfer)try{e.dataTransfer.dropEffect="copy"}catch(e){}return ye(e)&&v&&v(e),!1},[v,E]),J=ue.useCallback(function(n){n.preventDefault(),n.persist(),Z(n);var e=q.current.filter(function(e){return e!==n.target&&P.current&&P.current.contains(e)});0<(q.current=e).length||(T({isDragActive:!1,type:"setDraggedFiles",draggedFiles:[]}),ye(n)&&d&&d(n))},[P,d,E]),Q=ue.useCallback(function(n){n.preventDefault(),n.persist(),Z(n),q.current=[],T({type:"reset"}),ye(n)&&Promise.resolve(r(n)).then(function(e){if(!ve(n)||E){var o=[],i=[];e.forEach(function(e){var n,t,r;de(e,u)&&(t=c,r=a,(n=e).size<=t&&n.size>=r)?o.push(e):i.push(e)}),!l&&1<o.length&&i.push.apply(i,se(o.splice(0))),T({acceptedFiles:o,rejectedFiles:i,type:"setFiles"}),y&&y(o,i,n),0<i.length&&h&&h(i,n),0<o.length&&g&&g(o,n)}})},[l,u,a,c,r,y,g,h,E]),V=function(e){return p?null:e},X=function(e){return F?null:V(e)},Y=function(e){return S?null:V(e)},Z=function(e){E&&e.stopPropagation()},ee=ue.useMemo(function(){return function(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{},n=e.refKey,t=void 0===n?"ref":n,r=e.onKeyDown,o=e.onFocus,i=e.onBlur,u=e.onClick,c=e.onDragEnter,a=e.onDragOver,f=e.onDragLeave,l=e.onDrop,s=fe(e,["refKey","onKeyDown","onFocus","onBlur","onClick","onDragEnter","onDragOver","onDragLeave","onDrop"]);return ae(ce({onKeyDown:X(he(r,I)),onFocus:X(he(o,K)),onBlur:X(he(i,W)),onClick:V(he(u,G)),onDragEnter:Y(he(c,$)),onDragOver:Y(he(a,H)),onDragLeave:Y(he(f,J)),onDrop:Y(he(l,Q))},t,P),p||F?{}:{tabIndex:0},s)}},[P,I,K,W,G,$,H,J,Q,F,S,p]),ne=ue.useCallback(function(e){e.stopPropagation()},[]),te=ue.useMemo(function(){return function(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{},n=e.refKey,t=void 0===n?"ref":n,r=e.onChange,o=e.onClick,i=fe(e,["refKey","onChange","onClick"]);return ae({},ce({accept:u,multiple:l,type:"file",style:{display:"none"},onChange:V(he(r,Q)),onClick:V(he(o,ne)),autoComplete:"off",tabIndex:-1},t,k),i)}},[k,u,l,Q,p]),re=z.length,oe=l||re<=1,ie=0<re&&(U=u,z.every(function(e){return de(e,U)}));return ae({},_,{isDragAccept:ie,isDragReject:0<re&&(!ie||!oe),isFocused:M&&!p,getRootProps:ee,getInputProps:te,rootRef:P,inputRef:k,open:V(L)})}function me(e,n){switch(n.type){case"focus":return ae({},e,{isFocused:!0});case"blur":return ae({},e,{isFocused:!1});case"openDialog":return ae({},e,{isFileDialogActive:!0});case"closeDialog":return ae({},e,{isFileDialogActive:!1});case"setDraggedFiles":var t=n.isDragActive;return ae({},e,{draggedFiles:n.draggedFiles,isDragActive:t});case"setFiles":return ae({},e,{acceptedFiles:n.acceptedFiles,rejectedFiles:n.rejectedFiles});case"reset":return ae({},e,{isFileDialogActive:!1,isDragActive:!1,draggedFiles:[]});default:return e}}e.default=D,e.useDropzone=w,Object.defineProperty(e,"__esModule",{value:!0})});
|
|
2
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiLCIuLi9ub2RlX21vZHVsZXMvZmlsZS1zZWxlY3Rvci9kaXN0L2VzNS9maWxlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2ZpbGUtc2VsZWN0b3IvZGlzdC9lczUvZmlsZS1zZWxlY3Rvci5qcyIsIi4uL25vZGVfbW9kdWxlcy9hdHRyLWFjY2VwdC9kaXN0L2luZGV4LmpzIiwiLi4vc3JjL3V0aWxzL2luZGV4LmpzIiwiLi4vc3JjL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlXHJcbnRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlXHJcbkxpY2Vuc2UgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXHJcblxyXG5USElTIENPREUgSVMgUFJPVklERUQgT04gQU4gKkFTIElTKiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZXHJcbktJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gQU5ZIElNUExJRURcclxuV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSxcclxuTUVSQ0hBTlRBQkxJVFkgT1IgTk9OLUlORlJJTkdFTUVOVC5cclxuXHJcblNlZSB0aGUgQXBhY2hlIFZlcnNpb24gMi4wIExpY2Vuc2UgZm9yIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9uc1xyXG5hbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlICovXHJcblxyXG52YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uKGQsIGIpIHtcclxuICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcclxuICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XHJcbiAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07IH07XHJcbiAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2V4dGVuZHMoZCwgYikge1xyXG4gICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxyXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG59XHJcblxyXG5leHBvcnQgdmFyIF9fYXNzaWduID0gZnVuY3Rpb24oKSB7XHJcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xyXG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdDtcclxuICAgIH1cclxuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19yZXN0KHMsIGUpIHtcclxuICAgIHZhciB0ID0ge307XHJcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcclxuICAgICAgICB0W3BdID0gc1twXTtcclxuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMClcclxuICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XHJcbiAgICByZXR1cm4gdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3BhcmFtKHBhcmFtSW5kZXgsIGRlY29yYXRvcikge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkgeyBkZWNvcmF0b3IodGFyZ2V0LCBrZXksIHBhcmFtSW5kZXgpOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZShyZXN1bHQudmFsdWUpOyB9KS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XHJcbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5KSB7XHJcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xyXG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcclxuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XHJcbiAgICAgICAgd2hpbGUgKF8pIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcclxuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xyXG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XHJcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cclxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXhwb3J0U3RhcihtLCBleHBvcnRzKSB7XHJcbiAgICBmb3IgKHZhciBwIGluIG0pIGlmICghZXhwb3J0cy5oYXNPd25Qcm9wZXJ0eShwKSkgZXhwb3J0c1twXSA9IG1bcF07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3ZhbHVlcyhvKSB7XHJcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl0sIGkgPSAwO1xyXG4gICAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcclxuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3JlYWQobywgbikge1xyXG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xyXG4gICAgaWYgKCFtKSByZXR1cm4gbztcclxuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxyXG4gICAgZmluYWxseSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWQoKSB7XHJcbiAgICBmb3IgKHZhciBhciA9IFtdLCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKylcclxuICAgICAgICBhciA9IGFyLmNvbmNhdChfX3JlYWQoYXJndW1lbnRzW2ldKSk7XHJcbiAgICByZXR1cm4gYXI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0KHYpIHtcclxuICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2LCB0aGlzKSA6IG5ldyBfX2F3YWl0KHYpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0dlbmVyYXRvcih0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgZyA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSwgaSwgcSA9IFtdO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlmIChnW25dKSBpW25dID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChhLCBiKSB7IHEucHVzaChbbiwgdiwgYSwgYl0pID4gMSB8fCByZXN1bWUobiwgdik7IH0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiByZXN1bWUobiwgdikgeyB0cnkgeyBzdGVwKGdbbl0odikpOyB9IGNhdGNoIChlKSB7IHNldHRsZShxWzBdWzNdLCBlKTsgfSB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7IH1cclxuICAgIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHsgcmVzdW1lKFwibmV4dFwiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkgeyByZXN1bWUoXCJ0aHJvd1wiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNEZWxlZ2F0b3Iobykge1xyXG4gICAgdmFyIGksIHA7XHJcbiAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIsIGZ1bmN0aW9uIChlKSB7IHRocm93IGU7IH0pLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlbbl0gPSBvW25dID8gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIChwID0gIXApID8geyB2YWx1ZTogX19hd2FpdChvW25dKHYpKSwgZG9uZTogbiA9PT0gXCJyZXR1cm5cIiB9IDogZiA/IGYodikgOiB2OyB9IDogZjsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY1ZhbHVlcyhvKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgaTtcclxuICAgIHJldHVybiBtID8gbS5jYWxsKG8pIDogKG8gPSB0eXBlb2YgX192YWx1ZXMgPT09IFwiZnVuY3Rpb25cIiA/IF9fdmFsdWVzKG8pIDogb1tTeW1ib2wuaXRlcmF0b3JdKCksIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpKTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2ID0gb1tuXSh2KSwgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgdi5kb25lLCB2LnZhbHVlKTsgfSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIGQsIHYpIHsgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24odikgeyByZXNvbHZlKHsgdmFsdWU6IHYsIGRvbmU6IGQgfSk7IH0sIHJlamVjdCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWFrZVRlbXBsYXRlT2JqZWN0KGNvb2tlZCwgcmF3KSB7XHJcbiAgICBpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb29rZWQsIFwicmF3XCIsIHsgdmFsdWU6IHJhdyB9KTsgfSBlbHNlIHsgY29va2VkLnJhdyA9IHJhdzsgfVxyXG4gICAgcmV0dXJuIGNvb2tlZDtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydFN0YXIobW9kKSB7XHJcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xyXG4gICAgdmFyIHJlc3VsdCA9IHt9O1xyXG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIHJlc3VsdFtrXSA9IG1vZFtrXTtcclxuICAgIHJlc3VsdC5kZWZhdWx0ID0gbW9kO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0RGVmYXVsdChtb2QpIHtcclxuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgZGVmYXVsdDogbW9kIH07XHJcbn1cclxuIiwiZXhwb3J0IHZhciBDT01NT05fTUlNRV9UWVBFUyA9IG5ldyBNYXAoW1xuICAgIFsnYXZpJywgJ3ZpZGVvL2F2aSddLFxuICAgIFsnZ2lmJywgJ2ltYWdlL2dpZiddLFxuICAgIFsnaWNvJywgJ2ltYWdlL3gtaWNvbiddLFxuICAgIFsnanBlZycsICdpbWFnZS9qcGVnJ10sXG4gICAgWydqcGcnLCAnaW1hZ2UvanBlZyddLFxuICAgIFsnbWt2JywgJ3ZpZGVvL3gtbWF0cm9za2EnXSxcbiAgICBbJ21vdicsICd2aWRlby9xdWlja3RpbWUnXSxcbiAgICBbJ21wNCcsICd2aWRlby9tcDQnXSxcbiAgICBbJ3BkZicsICdhcHBsaWNhdGlvbi9wZGYnXSxcbiAgICBbJ3BuZycsICdpbWFnZS9wbmcnXSxcbiAgICBbJ3ppcCcsICdhcHBsaWNhdGlvbi96aXAnXSxcbiAgICBbJ2RvYycsICdhcHBsaWNhdGlvbi9tc3dvcmQnXSxcbiAgICBbJ2RvY3gnLCAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwuZG9jdW1lbnQnXVxuXSk7XG5leHBvcnQgZnVuY3Rpb24gdG9GaWxlV2l0aFBhdGgoZmlsZSwgcGF0aCkge1xuICAgIHZhciBmID0gd2l0aE1pbWVUeXBlKGZpbGUpO1xuICAgIHZhciB3ZWJraXRSZWxhdGl2ZVBhdGggPSBmaWxlLndlYmtpdFJlbGF0aXZlUGF0aDtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZiwgJ3BhdGgnLCB7XG4gICAgICAgIHZhbHVlOiB0eXBlb2YgcGF0aCA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgID8gcGF0aFxuICAgICAgICAgICAgLy8gSWYgPGlucHV0IHdlYmtpdGRpcmVjdG9yeT4gaXMgc2V0LFxuICAgICAgICAgICAgLy8gdGhlIEZpbGUgd2lsbCBoYXZlIGEge3dlYmtpdFJlbGF0aXZlUGF0aH0gcHJvcGVydHlcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MSW5wdXRFbGVtZW50L3dlYmtpdGRpcmVjdG9yeVxuICAgICAgICAgICAgOiB0eXBlb2Ygd2Via2l0UmVsYXRpdmVQYXRoID09PSAnc3RyaW5nJyAmJiB3ZWJraXRSZWxhdGl2ZVBhdGgubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgID8gd2Via2l0UmVsYXRpdmVQYXRoXG4gICAgICAgICAgICAgICAgOiBmaWxlLm5hbWUsXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIHJldHVybiBmO1xufVxuZnVuY3Rpb24gd2l0aE1pbWVUeXBlKGZpbGUpIHtcbiAgICB2YXIgbmFtZSA9IGZpbGUubmFtZTtcbiAgICB2YXIgaGFzRXh0ZW5zaW9uID0gbmFtZSAmJiBuYW1lLmxhc3RJbmRleE9mKCcuJykgIT09IC0xO1xuICAgIGlmIChoYXNFeHRlbnNpb24gJiYgIWZpbGUudHlwZSkge1xuICAgICAgICB2YXIgZXh0ID0gbmFtZS5zcGxpdCgnLicpXG4gICAgICAgICAgICAucG9wKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgdmFyIHR5cGUgPSBDT01NT05fTUlNRV9UWVBFUy5nZXQoZXh0KTtcbiAgICAgICAgaWYgKHR5cGUpIHtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmaWxlLCAndHlwZScsIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogdHlwZSxcbiAgICAgICAgICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmlsZTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZpbGUuanMubWFwIiwiaW1wb3J0ICogYXMgdHNsaWJfMSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IHRvRmlsZVdpdGhQYXRoIH0gZnJvbSAnLi9maWxlJztcbnZhciBGSUxFU19UT19JR05PUkUgPSBbXG4gICAgLy8gVGh1bWJuYWlsIGNhY2hlIGZpbGVzIGZvciBtYWNPUyBhbmQgV2luZG93c1xuICAgICcuRFNfU3RvcmUnLFxuICAgICdUaHVtYnMuZGInIC8vIFdpbmRvd3Ncbl07XG4vKipcbiAqIENvbnZlcnQgYSBEcmFnRXZlbnQncyBEYXRhVHJhc2ZlciBvYmplY3QgdG8gYSBsaXN0IG9mIEZpbGUgb2JqZWN0c1xuICogTk9URTogSWYgc29tZSBvZiB0aGUgaXRlbXMgYXJlIGZvbGRlcnMsXG4gKiBldmVyeXRoaW5nIHdpbGwgYmUgZmxhdHRlbmVkIGFuZCBwbGFjZWQgaW4gdGhlIHNhbWUgbGlzdCBidXQgdGhlIHBhdGhzIHdpbGwgYmUga2VwdCBhcyBhIHtwYXRofSBwcm9wZXJ0eS5cbiAqIEBwYXJhbSBldnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZyb21FdmVudChldnQpIHtcbiAgICByZXR1cm4gdHNsaWJfMS5fX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRzbGliXzEuX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgaXNEcmFnRXZ0KGV2dCkgJiYgZXZ0LmRhdGFUcmFuc2ZlclxuICAgICAgICAgICAgICAgICAgICA/IGdldERhdGFUcmFuc2ZlckZpbGVzKGV2dC5kYXRhVHJhbnNmZXIsIGV2dC50eXBlKVxuICAgICAgICAgICAgICAgICAgICA6IGdldElucHV0RmlsZXMoZXZ0KV07XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gaXNEcmFnRXZ0KHZhbHVlKSB7XG4gICAgcmV0dXJuICEhdmFsdWUuZGF0YVRyYW5zZmVyO1xufVxuZnVuY3Rpb24gZ2V0SW5wdXRGaWxlcyhldnQpIHtcbiAgICB2YXIgZmlsZXMgPSBpc0lucHV0KGV2dC50YXJnZXQpXG4gICAgICAgID8gZXZ0LnRhcmdldC5maWxlc1xuICAgICAgICAgICAgPyBmcm9tTGlzdChldnQudGFyZ2V0LmZpbGVzKVxuICAgICAgICAgICAgOiBbXVxuICAgICAgICA6IFtdO1xuICAgIHJldHVybiBmaWxlcy5tYXAoZnVuY3Rpb24gKGZpbGUpIHsgcmV0dXJuIHRvRmlsZVdpdGhQYXRoKGZpbGUpOyB9KTtcbn1cbmZ1bmN0aW9uIGlzSW5wdXQodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgIT09IG51bGw7XG59XG5mdW5jdGlvbiBnZXREYXRhVHJhbnNmZXJGaWxlcyhkdCwgdHlwZSkge1xuICAgIHJldHVybiB0c2xpYl8xLl9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgaXRlbXMsIGZpbGVzO1xuICAgICAgICByZXR1cm4gdHNsaWJfMS5fX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgIGlmICghZHQuaXRlbXMpIHJldHVybiBbMyAvKmJyZWFrKi8sIDJdO1xuICAgICAgICAgICAgICAgICAgICBpdGVtcyA9IGZyb21MaXN0KGR0Lml0ZW1zKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAoaXRlbSkgeyByZXR1cm4gaXRlbS5raW5kID09PSAnZmlsZSc7IH0pO1xuICAgICAgICAgICAgICAgICAgICAvLyBBY2NvcmRpbmcgdG8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZG5kLmh0bWwjZG5kZXZlbnRzLFxuICAgICAgICAgICAgICAgICAgICAvLyBvbmx5ICdkcmFnc3RhcnQnIGFuZCAnZHJvcCcgaGFzIGFjY2VzcyB0byB0aGUgZGF0YSAoc291cmNlIG5vZGUpXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlICE9PSAnZHJvcCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBpdGVtc107XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgUHJvbWlzZS5hbGwoaXRlbXMubWFwKHRvRmlsZVByb21pc2VzKSldO1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgZmlsZXMgPSBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBub0lnbm9yZWRGaWxlcyhmbGF0dGVuKGZpbGVzKSldO1xuICAgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIFsyIC8qcmV0dXJuKi8sIG5vSWdub3JlZEZpbGVzKGZyb21MaXN0KGR0LmZpbGVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAoZmlsZSkgeyByZXR1cm4gdG9GaWxlV2l0aFBhdGgoZmlsZSk7IH0pKV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gbm9JZ25vcmVkRmlsZXMoZmlsZXMpIHtcbiAgICByZXR1cm4gZmlsZXMuZmlsdGVyKGZ1bmN0aW9uIChmaWxlKSB7IHJldHVybiBGSUxFU19UT19JR05PUkUuaW5kZXhPZihmaWxlLm5hbWUpID09PSAtMTsgfSk7XG59XG4vLyBJRTExIGRvZXMgbm90IHN1cHBvcnQgQXJyYXkuZnJvbSgpXG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9BcnJheS9mcm9tI0Jyb3dzZXJfY29tcGF0aWJpbGl0eVxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0ZpbGVMaXN0XG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRGF0YVRyYW5zZmVySXRlbUxpc3RcbmZ1bmN0aW9uIGZyb21MaXN0KGl0ZW1zKSB7XG4gICAgdmFyIGZpbGVzID0gW107XG4gICAgLy8gdHNsaW50OmRpc2FibGU6IHByZWZlci1mb3Itb2ZcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBmaWxlID0gaXRlbXNbaV07XG4gICAgICAgIGZpbGVzLnB1c2goZmlsZSk7XG4gICAgfVxuICAgIHJldHVybiBmaWxlcztcbn1cbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9EYXRhVHJhbnNmZXJJdGVtXG5mdW5jdGlvbiB0b0ZpbGVQcm9taXNlcyhpdGVtKSB7XG4gICAgaWYgKHR5cGVvZiBpdGVtLndlYmtpdEdldEFzRW50cnkgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIGZyb21EYXRhVHJhbnNmZXJJdGVtKGl0ZW0pO1xuICAgIH1cbiAgICB2YXIgZW50cnkgPSBpdGVtLndlYmtpdEdldEFzRW50cnkoKTtcbiAgICAvLyBTYWZhcmkgc3VwcG9ydHMgZHJvcHBpbmcgYW4gaW1hZ2Ugbm9kZSBmcm9tIGEgZGlmZmVyZW50IHdpbmRvdyBhbmQgY2FuIGJlIHJldHJpZXZlZCB1c2luZ1xuICAgIC8vIHRoZSBEYXRhVHJhbnNmZXJJdGVtLmdldEFzRmlsZSgpIEFQSVxuICAgIC8vIE5PVEU6IEZpbGVTeXN0ZW1FbnRyeS5maWxlKCkgdGhyb3dzIGlmIHRyeWluZyB0byBnZXQgdGhlIGZpbGVcbiAgICBpZiAoZW50cnkgJiYgZW50cnkuaXNEaXJlY3RvcnkpIHtcbiAgICAgICAgcmV0dXJuIGZyb21EaXJFbnRyeShlbnRyeSk7XG4gICAgfVxuICAgIHJldHVybiBmcm9tRGF0YVRyYW5zZmVySXRlbShpdGVtKTtcbn1cbmZ1bmN0aW9uIGZsYXR0ZW4oaXRlbXMpIHtcbiAgICByZXR1cm4gaXRlbXMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIGZpbGVzKSB7IHJldHVybiB0c2xpYl8xLl9fc3ByZWFkKGFjYywgKEFycmF5LmlzQXJyYXkoZmlsZXMpID8gZmxhdHRlbihmaWxlcykgOiBbZmlsZXNdKSk7IH0sIFtdKTtcbn1cbmZ1bmN0aW9uIGZyb21EYXRhVHJhbnNmZXJJdGVtKGl0ZW0pIHtcbiAgICB2YXIgZmlsZSA9IGl0ZW0uZ2V0QXNGaWxlKCk7XG4gICAgaWYgKCFmaWxlKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChpdGVtICsgXCIgaXMgbm90IGEgRmlsZVwiKTtcbiAgICB9XG4gICAgdmFyIGZ3cCA9IHRvRmlsZVdpdGhQYXRoKGZpbGUpO1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZndwKTtcbn1cbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9GaWxlU3lzdGVtRW50cnlcbmZ1bmN0aW9uIGZyb21FbnRyeShlbnRyeSkge1xuICAgIHJldHVybiB0c2xpYl8xLl9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdHNsaWJfMS5fX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBlbnRyeS5pc0RpcmVjdG9yeSA/IGZyb21EaXJFbnRyeShlbnRyeSkgOiBmcm9tRmlsZUVudHJ5KGVudHJ5KV07XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0ZpbGVTeXN0ZW1EaXJlY3RvcnlFbnRyeVxuZnVuY3Rpb24gZnJvbURpckVudHJ5KGVudHJ5KSB7XG4gICAgdmFyIHJlYWRlciA9IGVudHJ5LmNyZWF0ZVJlYWRlcigpO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHZhciBlbnRyaWVzID0gW107XG4gICAgICAgIGZ1bmN0aW9uIHJlYWRFbnRyaWVzKCkge1xuICAgICAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9GaWxlU3lzdGVtRGlyZWN0b3J5RW50cnkvY3JlYXRlUmVhZGVyXG4gICAgICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRmlsZVN5c3RlbURpcmVjdG9yeVJlYWRlci9yZWFkRW50cmllc1xuICAgICAgICAgICAgcmVhZGVyLnJlYWRFbnRyaWVzKGZ1bmN0aW9uIChiYXRjaCkgeyByZXR1cm4gdHNsaWJfMS5fX2F3YWl0ZXIoX3RoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGZpbGVzLCBlcnJfMSwgaXRlbXM7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRzbGliXzEuX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISFiYXRjaC5sZW5ndGgpIHJldHVybiBbMyAvKmJyZWFrKi8sIDVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9hLmxhYmVsID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYS50cnlzLnB1c2goWzEsIDMsICwgNF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIFByb21pc2UuYWxsKGVudHJpZXMpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlcyA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZpbGVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMgLypicmVhayovLCA0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJfMSA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyXzEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gWzMgLypicmVhayovLCA2XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcyA9IFByb21pc2UuYWxsKGJhdGNoLm1hcChmcm9tRW50cnkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyaWVzLnB1c2goaXRlbXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbnRpbnVlIHJlYWRpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkRW50cmllcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9hLmxhYmVsID0gNjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNjogcmV0dXJuIFsyIC8qcmV0dXJuKi9dO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTsgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVhZEVudHJpZXMoKTtcbiAgICB9KTtcbn1cbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9GaWxlU3lzdGVtRmlsZUVudHJ5XG5mdW5jdGlvbiBmcm9tRmlsZUVudHJ5KGVudHJ5KSB7XG4gICAgcmV0dXJuIHRzbGliXzEuX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0c2xpYl8xLl9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgZW50cnkuZmlsZShmdW5jdGlvbiAoZmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZ3cCA9IHRvRmlsZVdpdGhQYXRoKGZpbGUsIGVudHJ5LmZ1bGxQYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZndwKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pXTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1maWxlLXNlbGVjdG9yLmpzLm1hcCIsIm1vZHVsZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4oZSl7aWYocltlXSlyZXR1cm4gcltlXS5leHBvcnRzO3ZhciBvPXJbZV09e2k6ZSxsOiExLGV4cG9ydHM6e319O3JldHVybiB0W2VdLmNhbGwoby5leHBvcnRzLG8sby5leHBvcnRzLG4pLG8ubD0hMCxvLmV4cG9ydHN9dmFyIHI9e307cmV0dXJuIG4ubT10LG4uYz1yLG4uZD1mdW5jdGlvbih0LHIsZSl7bi5vKHQscil8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LHIse2NvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLGdldDplfSl9LG4ubj1mdW5jdGlvbih0KXt2YXIgcj10JiZ0Ll9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4gdC5kZWZhdWx0fTpmdW5jdGlvbigpe3JldHVybiB0fTtyZXR1cm4gbi5kKHIsXCJhXCIscikscn0sbi5vPWZ1bmN0aW9uKHQsbil7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfSxuLnA9XCJcIixuKG4ucz0xMyl9KFtmdW5jdGlvbih0LG4pe3ZhciByPXQuZXhwb3J0cz1cInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3cuTWF0aD09TWF0aD93aW5kb3c6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGYmJnNlbGYuTWF0aD09TWF0aD9zZWxmOkZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKTtcIm51bWJlclwiPT10eXBlb2YgX19nJiYoX19nPXIpfSxmdW5jdGlvbih0LG4pe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm5cIm9iamVjdFwiPT10eXBlb2YgdD9udWxsIT09dDpcImZ1bmN0aW9uXCI9PXR5cGVvZiB0fX0sZnVuY3Rpb24odCxuKXt2YXIgcj10LmV4cG9ydHM9e3ZlcnNpb246XCIyLjUuMFwifTtcIm51bWJlclwiPT10eXBlb2YgX19lJiYoX19lPXIpfSxmdW5jdGlvbih0LG4scil7dC5leHBvcnRzPSFyKDQpKGZ1bmN0aW9uKCl7cmV0dXJuIDchPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSxcImFcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSkuYX0pfSxmdW5jdGlvbih0LG4pe3QuZXhwb3J0cz1mdW5jdGlvbih0KXt0cnl7cmV0dXJuISF0KCl9Y2F0Y2godCl7cmV0dXJuITB9fX0sZnVuY3Rpb24odCxuKXt2YXIgcj17fS50b1N0cmluZzt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHIuY2FsbCh0KS5zbGljZSg4LC0xKX19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDMyKShcIndrc1wiKSxvPXIoOSksaT1yKDApLlN5bWJvbCx1PVwiZnVuY3Rpb25cIj09dHlwZW9mIGk7KHQuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gZVt0XXx8KGVbdF09dSYmaVt0XXx8KHU/aTpvKShcIlN5bWJvbC5cIit0KSl9KS5zdG9yZT1lfSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigwKSxvPXIoMiksaT1yKDgpLHU9cigyMiksYz1yKDEwKSxmPWZ1bmN0aW9uKHQsbixyKXt2YXIgYSxzLHAsbCx2PXQmZi5GLHk9dCZmLkcsaD10JmYuUyxkPXQmZi5QLHg9dCZmLkIsZz15P2U6aD9lW25dfHwoZVtuXT17fSk6KGVbbl18fHt9KS5wcm90b3R5cGUsbT15P286b1tuXXx8KG9bbl09e30pLGI9bS5wcm90b3R5cGV8fChtLnByb3RvdHlwZT17fSk7eSYmKHI9bik7Zm9yKGEgaW4gcilzPSF2JiZnJiZ2b2lkIDAhPT1nW2FdLHA9KHM/ZzpyKVthXSxsPXgmJnM/YyhwLGUpOmQmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHA/YyhGdW5jdGlvbi5jYWxsLHApOnAsZyYmdShnLGEscCx0JmYuVSksbVthXSE9cCYmaShtLGEsbCksZCYmYlthXSE9cCYmKGJbYV09cCl9O2UuY29yZT1vLGYuRj0xLGYuRz0yLGYuUz00LGYuUD04LGYuQj0xNixmLlc9MzIsZi5VPTY0LGYuUj0xMjgsdC5leHBvcnRzPWZ9LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDE2KSxvPXIoMjEpO3QuZXhwb3J0cz1yKDMpP2Z1bmN0aW9uKHQsbixyKXtyZXR1cm4gZS5mKHQsbixvKDEscikpfTpmdW5jdGlvbih0LG4scil7cmV0dXJuIHRbbl09cix0fX0sZnVuY3Rpb24odCxuKXt2YXIgcj0wLGU9TWF0aC5yYW5kb20oKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuXCJTeW1ib2woXCIuY29uY2F0KHZvaWQgMD09PXQ/XCJcIjp0LFwiKV9cIiwoKytyK2UpLnRvU3RyaW5nKDM2KSl9fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigyNCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbixyKXtpZihlKHQpLHZvaWQgMD09PW4pcmV0dXJuIHQ7c3dpdGNoKHIpe2Nhc2UgMTpyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIHQuY2FsbChuLHIpfTtjYXNlIDI6cmV0dXJuIGZ1bmN0aW9uKHIsZSl7cmV0dXJuIHQuY2FsbChuLHIsZSl9O2Nhc2UgMzpyZXR1cm4gZnVuY3Rpb24ocixlLG8pe3JldHVybiB0LmNhbGwobixyLGUsbyl9fXJldHVybiBmdW5jdGlvbigpe3JldHVybiB0LmFwcGx5KG4sYXJndW1lbnRzKX19fSxmdW5jdGlvbih0LG4pe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZih2b2lkIDA9PXQpdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gIFwiK3QpO3JldHVybiB0fX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMjgpLG89TWF0aC5taW47dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0PjA/byhlKHQpLDkwMDcxOTkyNTQ3NDA5OTEpOjB9fSxmdW5jdGlvbih0LG4scil7XCJ1c2Ugc3RyaWN0XCI7bi5fX2VzTW9kdWxlPSEwLG4uZGVmYXVsdD1mdW5jdGlvbih0LG4pe2lmKHQmJm4pe3ZhciByPUFycmF5LmlzQXJyYXkobik/bjpuLnNwbGl0KFwiLFwiKSxlPXQubmFtZXx8XCJcIixvPXQudHlwZXx8XCJcIixpPW8ucmVwbGFjZSgvXFwvLiokLyxcIlwiKTtyZXR1cm4gci5zb21lKGZ1bmN0aW9uKHQpe3ZhciBuPXQudHJpbSgpO3JldHVyblwiLlwiPT09bi5jaGFyQXQoMCk/ZS50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKG4udG9Mb3dlckNhc2UoKSk6bi5lbmRzV2l0aChcIi8qXCIpP2k9PT1uLnJlcGxhY2UoL1xcLy4qJC8sXCJcIik6bz09PW59KX1yZXR1cm4hMH0scigxNCkscigzNCl9LGZ1bmN0aW9uKHQsbixyKXtyKDE1KSx0LmV4cG9ydHM9cigyKS5BcnJheS5zb21lfSxmdW5jdGlvbih0LG4scil7XCJ1c2Ugc3RyaWN0XCI7dmFyIGU9cig3KSxvPXIoMjUpKDMpO2UoZS5QK2UuRiohcigzMykoW10uc29tZSwhMCksXCJBcnJheVwiLHtzb21lOmZ1bmN0aW9uKHQpe3JldHVybiBvKHRoaXMsdCxhcmd1bWVudHNbMV0pfX0pfSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigxNyksbz1yKDE4KSxpPXIoMjApLHU9T2JqZWN0LmRlZmluZVByb3BlcnR5O24uZj1yKDMpP09iamVjdC5kZWZpbmVQcm9wZXJ0eTpmdW5jdGlvbih0LG4scil7aWYoZSh0KSxuPWkobiwhMCksZShyKSxvKXRyeXtyZXR1cm4gdSh0LG4scil9Y2F0Y2godCl7fWlmKFwiZ2V0XCJpbiByfHxcInNldFwiaW4gcil0aHJvdyBUeXBlRXJyb3IoXCJBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCFcIik7cmV0dXJuXCJ2YWx1ZVwiaW4gciYmKHRbbl09ci52YWx1ZSksdH19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDEpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighZSh0KSl0aHJvdyBUeXBlRXJyb3IodCtcIiBpcyBub3QgYW4gb2JqZWN0IVwiKTtyZXR1cm4gdH19LGZ1bmN0aW9uKHQsbixyKXt0LmV4cG9ydHM9IXIoMykmJiFyKDQpKGZ1bmN0aW9uKCl7cmV0dXJuIDchPU9iamVjdC5kZWZpbmVQcm9wZXJ0eShyKDE5KShcImRpdlwiKSxcImFcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSkuYX0pfSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigxKSxvPXIoMCkuZG9jdW1lbnQsaT1lKG8pJiZlKG8uY3JlYXRlRWxlbWVudCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpP28uY3JlYXRlRWxlbWVudCh0KTp7fX19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDEpO3QuZXhwb3J0cz1mdW5jdGlvbih0LG4pe2lmKCFlKHQpKXJldHVybiB0O3ZhciByLG87aWYobiYmXCJmdW5jdGlvblwiPT10eXBlb2Yocj10LnRvU3RyaW5nKSYmIWUobz1yLmNhbGwodCkpKXJldHVybiBvO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mKHI9dC52YWx1ZU9mKSYmIWUobz1yLmNhbGwodCkpKXJldHVybiBvO2lmKCFuJiZcImZ1bmN0aW9uXCI9PXR5cGVvZihyPXQudG9TdHJpbmcpJiYhZShvPXIuY2FsbCh0KSkpcmV0dXJuIG87dGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpfX0sZnVuY3Rpb24odCxuKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuKXtyZXR1cm57ZW51bWVyYWJsZTohKDEmdCksY29uZmlndXJhYmxlOiEoMiZ0KSx3cml0YWJsZTohKDQmdCksdmFsdWU6bn19fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigwKSxvPXIoOCksaT1yKDIzKSx1PXIoOSkoXCJzcmNcIiksYz1GdW5jdGlvbi50b1N0cmluZyxmPShcIlwiK2MpLnNwbGl0KFwidG9TdHJpbmdcIik7cigyKS5pbnNwZWN0U291cmNlPWZ1bmN0aW9uKHQpe3JldHVybiBjLmNhbGwodCl9LCh0LmV4cG9ydHM9ZnVuY3Rpb24odCxuLHIsYyl7dmFyIGE9XCJmdW5jdGlvblwiPT10eXBlb2YgcjthJiYoaShyLFwibmFtZVwiKXx8byhyLFwibmFtZVwiLG4pKSx0W25dIT09ciYmKGEmJihpKHIsdSl8fG8ocix1LHRbbl0/XCJcIit0W25dOmYuam9pbihTdHJpbmcobikpKSksdD09PWU/dFtuXT1yOmM/dFtuXT90W25dPXI6byh0LG4scik6KGRlbGV0ZSB0W25dLG8odCxuLHIpKSl9KShGdW5jdGlvbi5wcm90b3R5cGUsXCJ0b1N0cmluZ1wiLGZ1bmN0aW9uKCl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgdGhpcyYmdGhpc1t1XXx8Yy5jYWxsKHRoaXMpfSl9LGZ1bmN0aW9uKHQsbil7dmFyIHI9e30uaGFzT3duUHJvcGVydHk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHIuY2FsbCh0LG4pfX0sZnVuY3Rpb24odCxuKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgdCl0aHJvdyBUeXBlRXJyb3IodCtcIiBpcyBub3QgYSBmdW5jdGlvbiFcIik7cmV0dXJuIHR9fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigxMCksbz1yKDI2KSxpPXIoMjcpLHU9cigxMiksYz1yKDI5KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuKXt2YXIgcj0xPT10LGY9Mj09dCxhPTM9PXQscz00PT10LHA9Nj09dCxsPTU9PXR8fHAsdj1ufHxjO3JldHVybiBmdW5jdGlvbihuLGMseSl7Zm9yKHZhciBoLGQseD1pKG4pLGc9byh4KSxtPWUoYyx5LDMpLGI9dShnLmxlbmd0aCksXz0wLHc9cj92KG4sYik6Zj92KG4sMCk6dm9pZCAwO2I+XztfKyspaWYoKGx8fF8gaW4gZykmJihoPWdbX10sZD1tKGgsXyx4KSx0KSlpZihyKXdbX109ZDtlbHNlIGlmKGQpc3dpdGNoKHQpe2Nhc2UgMzpyZXR1cm4hMDtjYXNlIDU6cmV0dXJuIGg7Y2FzZSA2OnJldHVybiBfO2Nhc2UgMjp3LnB1c2goaCl9ZWxzZSBpZihzKXJldHVybiExO3JldHVybiBwPy0xOmF8fHM/czp3fX19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDUpO3QuZXhwb3J0cz1PYmplY3QoXCJ6XCIpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApP09iamVjdDpmdW5jdGlvbih0KXtyZXR1cm5cIlN0cmluZ1wiPT1lKHQpP3Quc3BsaXQoXCJcIik6T2JqZWN0KHQpfX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMTEpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0KGUodCkpfX0sZnVuY3Rpb24odCxuKXt2YXIgcj1NYXRoLmNlaWwsZT1NYXRoLmZsb29yO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaXNOYU4odD0rdCk/MDoodD4wP2U6cikodCl9fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigzMCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbil7cmV0dXJuIG5ldyhlKHQpKShuKX19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDEpLG89cigzMSksaT1yKDYpKFwic3BlY2llc1wiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIG8odCkmJihuPXQuY29uc3RydWN0b3IsXCJmdW5jdGlvblwiIT10eXBlb2Ygbnx8biE9PUFycmF5JiYhbyhuLnByb3RvdHlwZSl8fChuPXZvaWQgMCksZShuKSYmbnVsbD09PShuPW5baV0pJiYobj12b2lkIDApKSx2b2lkIDA9PT1uP0FycmF5Om59fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cig1KTt0LmV4cG9ydHM9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24odCl7cmV0dXJuXCJBcnJheVwiPT1lKHQpfX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMCksbz1lW1wiX19jb3JlLWpzX3NoYXJlZF9fXCJdfHwoZVtcIl9fY29yZS1qc19zaGFyZWRfX1wiXT17fSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBvW3RdfHwob1t0XT17fSl9fSxmdW5jdGlvbih0LG4scil7XCJ1c2Ugc3RyaWN0XCI7dmFyIGU9cig0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuKXtyZXR1cm4hIXQmJmUoZnVuY3Rpb24oKXtuP3QuY2FsbChudWxsLGZ1bmN0aW9uKCl7fSwxKTp0LmNhbGwobnVsbCl9KX19LGZ1bmN0aW9uKHQsbixyKXtyKDM1KSx0LmV4cG9ydHM9cigyKS5TdHJpbmcuZW5kc1dpdGh9LGZ1bmN0aW9uKHQsbixyKXtcInVzZSBzdHJpY3RcIjt2YXIgZT1yKDcpLG89cigxMiksaT1yKDM2KSx1PVwiXCIuZW5kc1dpdGg7ZShlLlArZS5GKnIoMzgpKFwiZW5kc1dpdGhcIiksXCJTdHJpbmdcIix7ZW5kc1dpdGg6ZnVuY3Rpb24odCl7dmFyIG49aSh0aGlzLHQsXCJlbmRzV2l0aFwiKSxyPWFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLGU9byhuLmxlbmd0aCksYz12b2lkIDA9PT1yP2U6TWF0aC5taW4obyhyKSxlKSxmPVN0cmluZyh0KTtyZXR1cm4gdT91LmNhbGwobixmLGMpOm4uc2xpY2UoYy1mLmxlbmd0aCxjKT09PWZ9fSl9LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDM3KSxvPXIoMTEpO3QuZXhwb3J0cz1mdW5jdGlvbih0LG4scil7aWYoZShuKSl0aHJvdyBUeXBlRXJyb3IoXCJTdHJpbmcjXCIrcitcIiBkb2Vzbid0IGFjY2VwdCByZWdleCFcIik7cmV0dXJuIFN0cmluZyhvKHQpKX19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDEpLG89cig1KSxpPXIoNikoXCJtYXRjaFwiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIGUodCkmJih2b2lkIDAhPT0obj10W2ldKT8hIW46XCJSZWdFeHBcIj09byh0KSl9fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cig2KShcIm1hdGNoXCIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgbj0vLi87dHJ5e1wiLy4vXCJbdF0obil9Y2F0Y2gocil7dHJ5e3JldHVybiBuW2VdPSExLCFcIi8uL1wiW3RdKG4pfWNhdGNoKHQpe319cmV0dXJuITB9fV0pOyIsImltcG9ydCBhY2NlcHRzIGZyb20gJ2F0dHItYWNjZXB0J1xuXG4vLyBGaXJlZm94IHZlcnNpb25zIHByaW9yIHRvIDUzIHJldHVybiBhIGJvZ3VzIE1JTUUgdHlwZSBmb3IgZXZlcnkgZmlsZSBkcmFnLCBzbyBkcmFnb3ZlcnMgd2l0aFxuLy8gdGhhdCBNSU1FIHR5cGUgd2lsbCBhbHdheXMgYmUgYWNjZXB0ZWRcbmV4cG9ydCBmdW5jdGlvbiBmaWxlQWNjZXB0ZWQoZmlsZSwgYWNjZXB0KSB7XG4gIHJldHVybiBmaWxlLnR5cGUgPT09ICdhcHBsaWNhdGlvbi94LW1vei1maWxlJyB8fCBhY2NlcHRzKGZpbGUsIGFjY2VwdClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbGVNYXRjaFNpemUoZmlsZSwgbWF4U2l6ZSwgbWluU2l6ZSkge1xuICByZXR1cm4gZmlsZS5zaXplIDw9IG1heFNpemUgJiYgZmlsZS5zaXplID49IG1pblNpemVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFsbEZpbGVzQWNjZXB0ZWQoZmlsZXMsIGFjY2VwdCkge1xuICByZXR1cm4gZmlsZXMuZXZlcnkoZmlsZSA9PiBmaWxlQWNjZXB0ZWQoZmlsZSwgYWNjZXB0KSlcbn1cblxuLy8gUmVhY3QncyBzeW50aGV0aWMgZXZlbnRzIGhhcyBldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCxcbi8vIGJ1dCB0byByZW1haW4gY29tcGF0aWJpbGl0eSB3aXRoIG90aGVyIGxpYnMgKFByZWFjdCkgZmFsbCBiYWNrXG4vLyB0byBjaGVjayBldmVudC5jYW5jZWxCdWJibGVcbmV4cG9ydCBmdW5jdGlvbiBpc1Byb3BhZ2F0aW9uU3RvcHBlZChldmVudCkge1xuICBpZiAodHlwZW9mIGV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKClcbiAgfSBlbHNlIGlmICh0eXBlb2YgZXZlbnQuY2FuY2VsQnViYmxlICE9PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBldmVudC5jYW5jZWxCdWJibGVcbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRXZ0V2l0aEZpbGVzKGV2ZW50KSB7XG4gIGlmICghZXZlbnQuZGF0YVRyYW5zZmVyKSB7XG4gICAgcmV0dXJuICEhZXZlbnQudGFyZ2V0ICYmICEhZXZlbnQudGFyZ2V0LmZpbGVzXG4gIH1cbiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0RhdGFUcmFuc2Zlci90eXBlc1xuICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTF9EcmFnX2FuZF9Ecm9wX0FQSS9SZWNvbW1lbmRlZF9kcmFnX3R5cGVzI2ZpbGVcbiAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zb21lLmNhbGwoXG4gICAgZXZlbnQuZGF0YVRyYW5zZmVyLnR5cGVzLFxuICAgIHR5cGUgPT4gdHlwZSA9PT0gJ0ZpbGVzJyB8fCB0eXBlID09PSAnYXBwbGljYXRpb24veC1tb3otZmlsZSdcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNLaW5kRmlsZShpdGVtKSB7XG4gIHJldHVybiB0eXBlb2YgaXRlbSA9PT0gJ29iamVjdCcgJiYgaXRlbSAhPT0gbnVsbCAmJiBpdGVtLmtpbmQgPT09ICdmaWxlJ1xufVxuXG4vLyBhbGxvdyB0aGUgZW50aXJlIGRvY3VtZW50IHRvIGJlIGEgZHJhZyB0YXJnZXRcbmV4cG9ydCBmdW5jdGlvbiBvbkRvY3VtZW50RHJhZ092ZXIoZXZlbnQpIHtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKVxufVxuXG5mdW5jdGlvbiBpc0llKHVzZXJBZ2VudCkge1xuICByZXR1cm4gdXNlckFnZW50LmluZGV4T2YoJ01TSUUnKSAhPT0gLTEgfHwgdXNlckFnZW50LmluZGV4T2YoJ1RyaWRlbnQvJykgIT09IC0xXG59XG5cbmZ1bmN0aW9uIGlzRWRnZSh1c2VyQWdlbnQpIHtcbiAgcmV0dXJuIHVzZXJBZ2VudC5pbmRleE9mKCdFZGdlLycpICE9PSAtMVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNJZU9yRWRnZSh1c2VyQWdlbnQgPSB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCkge1xuICByZXR1cm4gaXNJZSh1c2VyQWdlbnQpIHx8IGlzRWRnZSh1c2VyQWdlbnQpXG59XG5cbi8qKlxuICogVGhpcyBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIHRvIGNvbXBvc2UgZXZlbnQgaGFuZGxlcnNcbiAqIFRoZXkgYXJlIGV4ZWN1dGVkIGluIG9yZGVyIHVudGlsIG9uZSBvZiB0aGVtIGNhbGxzIGBldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpYC5cbiAqIE5vdGUgdGhhdCB0aGUgY2hlY2sgaXMgZG9uZSBvbiB0aGUgZmlyc3QgaW52b2tlIHRvbyxcbiAqIG1lYW5pbmcgdGhhdCBpZiBwcm9wYWdhdGlvbiB3YXMgc3RvcHBlZCBiZWZvcmUgaW52b2tpbmcgdGhlIGZucyxcbiAqIG5vIGhhbmRsZXJzIHdpbGwgYmUgZXhlY3V0ZWQuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5zIHRoZSBldmVudCBoYW5sZGVyIGZ1bmN0aW9uc1xuICogQHJldHVybiB7RnVuY3Rpb259IHRoZSBldmVudCBoYW5kbGVyIHRvIGFkZCB0byBhbiBlbGVtZW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21wb3NlRXZlbnRIYW5kbGVycyguLi5mbnMpIHtcbiAgcmV0dXJuIChldmVudCwgLi4uYXJncykgPT5cbiAgICBmbnMuc29tZShmbiA9PiB7XG4gICAgICBpZiAoIWlzUHJvcGFnYXRpb25TdG9wcGVkKGV2ZW50KSAmJiBmbikge1xuICAgICAgICBmbihldmVudCwgLi4uYXJncylcbiAgICAgIH1cbiAgICAgIHJldHVybiBpc1Byb3BhZ2F0aW9uU3RvcHBlZChldmVudClcbiAgICB9KVxufVxuIiwiLyogZXNsaW50IHByZWZlci10ZW1wbGF0ZTogMCAqL1xuaW1wb3J0IFJlYWN0LCB7XG4gIGZvcndhcmRSZWYsXG4gIEZyYWdtZW50LFxuICB1c2VDYWxsYmFjayxcbiAgdXNlRWZmZWN0LFxuICB1c2VNZW1vLFxuICB1c2VSZWR1Y2VyLFxuICB1c2VSZWZcbn0gZnJvbSAncmVhY3QnXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnXG5pbXBvcnQgeyBmcm9tRXZlbnQgfSBmcm9tICdmaWxlLXNlbGVjdG9yJ1xuaW1wb3J0IHtcbiAgYWxsRmlsZXNBY2NlcHRlZCxcbiAgY29tcG9zZUV2ZW50SGFuZGxlcnMsXG4gIGZpbGVBY2NlcHRlZCxcbiAgZmlsZU1hdGNoU2l6ZSxcbiAgaXNFdnRXaXRoRmlsZXMsXG4gIGlzSWVPckVkZ2UsXG4gIGlzUHJvcGFnYXRpb25TdG9wcGVkLFxuICBvbkRvY3VtZW50RHJhZ092ZXJcbn0gZnJvbSAnLi91dGlscy9pbmRleCdcblxuLyoqXG4gKiBDb252ZW5pZW5jZSB3cmFwcGVyIGNvbXBvbmVudCBmb3IgdGhlIGB1c2VEcm9wem9uZWAgaG9va1xuICpcbiAqIGBgYGpzeFxuICogPERyb3B6b25lPlxuICogICB7KHtnZXRSb290UHJvcHMsIGdldElucHV0UHJvcHN9KSA9PiAoXG4gKiAgICAgPGRpdiB7Li4uZ2V0Um9vdFByb3BzKCl9PlxuICogICAgICAgPGlucHV0IHsuLi5nZXRJbnB1dFByb3BzKCl9IC8+XG4gKiAgICAgICA8cD5EcmFnICduJyBkcm9wIHNvbWUgZmlsZXMgaGVyZSwgb3IgY2xpY2sgdG8gc2VsZWN0IGZpbGVzPC9wPlxuICogICAgIDwvZGl2PlxuICogICApfVxuICogPC9Ecm9wem9uZT5cbiAqIGBgYFxuICovXG5jb25zdCBEcm9wem9uZSA9IGZvcndhcmRSZWYoKHsgY2hpbGRyZW4sIC4uLnBhcmFtcyB9LCByZWYpID0+IHtcbiAgY29uc3QgeyBvcGVuLCAuLi5wcm9wcyB9ID0gdXNlRHJvcHpvbmUocGFyYW1zKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiByZWYgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJlZih7IG9wZW4gfSlcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiByZWYgPT09ICdvYmplY3QnICYmIHJlZiAhPT0gbnVsbCkge1xuICAgICAgcmVmLmN1cnJlbnQgPSB7IG9wZW4gfVxuICAgIH1cblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIHJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZWYobnVsbClcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHJlZiA9PT0gJ29iamVjdCcgJiYgcmVmICE9PSBudWxsKSB7XG4gICAgICAgIHJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgfVxuICAgIH1cbiAgfSwgW3JlZl0pXG5cbiAgLy8gVE9ETzogRmlndXJlIG91dCB3aHkgcmVhY3Qtc3R5bGVndWlkaXN0IGNhbm5vdCBjcmVhdGUgZG9jcyBpZiB3ZSBkb24ndCByZXR1cm4gYSBqc3ggZWxlbWVudFxuICByZXR1cm4gPEZyYWdtZW50PntjaGlsZHJlbih7IC4uLnByb3BzLCBvcGVuIH0pfTwvRnJhZ21lbnQ+XG59KVxuXG5Ecm9wem9uZS5kaXNwbGF5TmFtZSA9ICdEcm9wem9uZSdcbkRyb3B6b25lLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAqIFJlbmRlciBmdW5jdGlvbiB0aGF0IGV4cG9zZXMgdGhlIGRyb3B6b25lIHN0YXRlIGFuZCBwcm9wIGdldHRlciBmbnNcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtc1xuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBwYXJhbXMuZ2V0Um9vdFByb3BzIFJldHVybnMgdGhlIHByb3BzIHlvdSBzaG91bGQgYXBwbHkgdG8gdGhlIHJvb3QgZHJvcCBjb250YWluZXIgeW91IHJlbmRlclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBwYXJhbXMuZ2V0SW5wdXRQcm9wcyBSZXR1cm5zIHRoZSBwcm9wcyB5b3Ugc2hvdWxkIGFwcGx5IHRvIGhpZGRlbiBmaWxlIGlucHV0IHlvdSByZW5kZXJcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gcGFyYW1zLm9wZW4gT3BlbiB0aGUgbmF0aXZlIGZpbGUgc2VsZWN0aW9uIGRpYWxvZ1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHBhcmFtcy5pc0ZvY3VzZWQgRHJvcHpvbmUgYXJlYSBpcyBpbiBmb2N1c1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHBhcmFtcy5pc0ZpbGVEaWFsb2dBY3RpdmUgRmlsZSBkaWFsb2cgaXMgb3BlbmVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gcGFyYW1zLmlzRHJhZ0FjdGl2ZSBBY3RpdmUgZHJhZyBpcyBpbiBwcm9ncmVzc1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHBhcmFtcy5pc0RyYWdBY2NlcHQgRHJhZ2dlZCBmaWxlcyBhcmUgYWNjZXB0ZWRcbiAgICogQHBhcmFtIHtib29sZWFufSBwYXJhbXMuaXNEcmFnUmVqZWN0IFNvbWUgZHJhZ2dlZCBmaWxlcyBhcmUgcmVqZWN0ZWRcbiAgICogQHBhcmFtIHtGaWxlW119IHBhcmFtcy5kcmFnZ2VkRmlsZXMgRmlsZXMgaW4gYWN0aXZlIGRyYWdcbiAgICogQHBhcmFtIHtGaWxlW119IHBhcmFtcy5hY2NlcHRlZEZpbGVzIEFjY2VwdGVkIGZpbGVzXG4gICAqIEBwYXJhbSB7RmlsZVtdfSBwYXJhbXMucmVqZWN0ZWRGaWxlcyBSZWplY3RlZCBmaWxlc1xuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBTZXQgYWNjZXB0ZWQgZmlsZSB0eXBlcy5cbiAgICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9va29uZXQvYXR0ci1hY2NlcHQgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gICAqIEtlZXAgaW4gbWluZCB0aGF0IG1pbWUgdHlwZSBkZXRlcm1pbmF0aW9uIGlzIG5vdCByZWxpYWJsZSBhY3Jvc3MgcGxhdGZvcm1zLiBDU1YgZmlsZXMsXG4gICAqIGZvciBleGFtcGxlLCBhcmUgcmVwb3J0ZWQgYXMgdGV4dC9wbGFpbiB1bmRlciBtYWNPUyBidXQgYXMgYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsIHVuZGVyXG4gICAqIFdpbmRvd3MuIEluIHNvbWUgY2FzZXMgdGhlcmUgbWlnaHQgbm90IGJlIGEgbWltZSB0eXBlIHNldCBhdCBhbGwuXG4gICAqIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0LWRyb3B6b25lL3JlYWN0LWRyb3B6b25lL2lzc3Vlcy8yNzZcbiAgICovXG4gIGFjY2VwdDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnN0cmluZyldKSxcblxuICAvKipcbiAgICogQWxsb3cgZHJhZyAnbicgZHJvcCAob3Igc2VsZWN0aW9uIGZyb20gdGhlIGZpbGUgZGlhbG9nKSBvZiBtdWx0aXBsZSBmaWxlc1xuICAgKi9cbiAgbXVsdGlwbGU6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBJZiBmYWxzZSwgYWxsb3cgZHJvcHBlZCBpdGVtcyB0byB0YWtlIG92ZXIgdGhlIGN1cnJlbnQgYnJvd3NlciB3aW5kb3dcbiAgICovXG4gIHByZXZlbnREcm9wT25Eb2N1bWVudDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIElmIHRydWUsIGRpc2FibGVzIGNsaWNrIHRvIG9wZW4gdGhlIG5hdGl2ZSBmaWxlIHNlbGVjdGlvbiBkaWFsb2dcbiAgICovXG4gIG5vQ2xpY2s6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBJZiB0cnVlLCBkaXNhYmxlcyBTUEFDRS9FTlRFUiB0byBvcGVuIHRoZSBuYXRpdmUgZmlsZSBzZWxlY3Rpb24gZGlhbG9nLlxuICAgKiBOb3RlIHRoYXQgaXQgYWxzbyBzdG9wcyB0cmFja2luZyB0aGUgZm9jdXMgc3RhdGUuXG4gICAqL1xuICBub0tleWJvYXJkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogSWYgdHJ1ZSwgZGlzYWJsZXMgZHJhZyAnbicgZHJvcFxuICAgKi9cbiAgbm9EcmFnOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogSWYgdHJ1ZSwgc3RvcHMgZHJhZyBldmVudCBwcm9wYWdhdGlvbiB0byBwYXJlbnRzXG4gICAqL1xuICBub0RyYWdFdmVudHNCdWJibGluZzogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIE1pbmltdW0gZmlsZSBzaXplIChpbiBieXRlcylcbiAgICovXG4gIG1pblNpemU6IFByb3BUeXBlcy5udW1iZXIsXG5cbiAgLyoqXG4gICAqIE1heGltdW0gZmlsZSBzaXplIChpbiBieXRlcylcbiAgICovXG4gIG1heFNpemU6IFByb3BUeXBlcy5udW1iZXIsXG5cbiAgLyoqXG4gICAqIEVuYWJsZS9kaXNhYmxlIHRoZSBkcm9wem9uZVxuICAgKi9cbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBVc2UgdGhpcyB0byBwcm92aWRlIGEgY3VzdG9tIGZpbGUgYWdncmVnYXRvclxuICAgKlxuICAgKiBAcGFyYW0geyhEcmFnRXZlbnR8RXZlbnQpfSBldmVudCBBIGRyYWcgZXZlbnQgb3IgaW5wdXQgY2hhbmdlIGV2ZW50IChpZiBmaWxlcyB3ZXJlIHNlbGVjdGVkIHZpYSB0aGUgZmlsZSBkaWFsb2cpXG4gICAqL1xuICBnZXRGaWxlc0Zyb21FdmVudDogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIENiIGZvciB3aGVuIGNsb3NpbmcgdGhlIGZpbGUgZGlhbG9nIHdpdGggbm8gc2VsZWN0aW9uXG4gICAqL1xuICBvbkZpbGVEaWFsb2dDYW5jZWw6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBDYiBmb3Igd2hlbiB0aGUgYGRyYWdlbnRlcmAgZXZlbnQgb2NjdXJzLlxuICAgKlxuICAgKiBAcGFyYW0ge0RyYWdFdmVudH0gZXZlbnRcbiAgICovXG4gIG9uRHJhZ0VudGVyOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQ2IgZm9yIHdoZW4gdGhlIGBkcmFnbGVhdmVgIGV2ZW50IG9jY3Vyc1xuICAgKlxuICAgKiBAcGFyYW0ge0RyYWdFdmVudH0gZXZlbnRcbiAgICovXG4gIG9uRHJhZ0xlYXZlOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQ2IgZm9yIHdoZW4gdGhlIGBkcmFnb3ZlcmAgZXZlbnQgb2NjdXJzXG4gICAqXG4gICAqIEBwYXJhbSB7RHJhZ0V2ZW50fSBldmVudFxuICAgKi9cbiAgb25EcmFnT3ZlcjogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIENiIGZvciB3aGVuIHRoZSBgZHJvcGAgZXZlbnQgb2NjdXJzLlxuICAgKiBOb3RlIHRoYXQgdGhpcyBjYWxsYmFjayBpcyBpbnZva2VkIGFmdGVyIHRoZSBgZ2V0RmlsZXNGcm9tRXZlbnRgIGNhbGxiYWNrIGlzIGRvbmUuXG4gICAqXG4gICAqIEZpbGVzIGFyZSBhY2NlcHRlZCBvciByZWplY3RlZCBiYXNlZCBvbiB0aGUgYGFjY2VwdGAsIGBtdWx0aXBsZWAsIGBtaW5TaXplYCBhbmQgYG1heFNpemVgIHByb3BzLlxuICAgKiBgYWNjZXB0YCBtdXN0IGJlIGEgdmFsaWQgW01JTUUgdHlwZV0oaHR0cDovL3d3dy5pYW5hLm9yZy9hc3NpZ25tZW50cy9tZWRpYS10eXBlcy9tZWRpYS10eXBlcy54aHRtbCkgYWNjb3JkaW5nIHRvIFtpbnB1dCBlbGVtZW50IHNwZWNpZmljYXRpb25dKGh0dHBzOi8vd3d3LnczLm9yZy93aWtpL0hUTUwvRWxlbWVudHMvaW5wdXQvZmlsZSkgb3IgYSB2YWxpZCBmaWxlIGV4dGVuc2lvbi5cbiAgICogSWYgYG11bHRpcGxlYCBpcyBzZXQgdG8gZmFsc2UgYW5kIGFkZGl0aW9uYWwgZmlsZXMgYXJlIGRyb3BwcGVkLFxuICAgKiBhbGwgZmlsZXMgYmVzaWRlcyB0aGUgZmlyc3Qgd2lsbCBiZSByZWplY3RlZC5cbiAgICogQW55IGZpbGUgd2hpY2ggZG9lcyBub3QgaGF2ZSBhIHNpemUgaW4gdGhlIFtgbWluU2l6ZWAsIGBtYXhTaXplYF0gcmFuZ2UsIHdpbGwgYmUgcmVqZWN0ZWQgYXMgd2VsbC5cbiAgICpcbiAgICogTm90ZSB0aGF0IHRoZSBgb25Ecm9wYCBjYWxsYmFjayB3aWxsIGFsd2F5cyBiZSBpbnZva2VkIHJlZ2FyZGxlc3MgaWYgdGhlIGRyb3BwZWQgZmlsZXMgd2VyZSBhY2NlcHRlZCBvciByZWplY3RlZC5cbiAgICogSWYgeW91J2QgbGlrZSB0byByZWFjdCB0byBhIHNwZWNpZmljIHNjZW5hcmlvLCB1c2UgdGhlIGBvbkRyb3BBY2NlcHRlZGAvYG9uRHJvcFJlamVjdGVkYCBwcm9wcy5cbiAgICpcbiAgICogYG9uRHJvcGAgd2lsbCBwcm92aWRlIHlvdSB3aXRoIGFuIGFycmF5IG9mIFtGaWxlXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRmlsZSkgb2JqZWN0cyB3aGljaCB5b3UgY2FuIHRoZW4gcHJvY2VzcyBhbmQgc2VuZCB0byBhIHNlcnZlci5cbiAgICogRm9yIGV4YW1wbGUsIHdpdGggW1N1cGVyQWdlbnRdKGh0dHBzOi8vZ2l0aHViLmNvbS92aXNpb25tZWRpYS9zdXBlcmFnZW50KSBhcyBhIGh0dHAvYWpheCBsaWJyYXJ5OlxuICAgKlxuICAgKiBgYGBqc1xuICAgKiBmdW5jdGlvbiBvbkRyb3AoYWNjZXB0ZWRGaWxlcykge1xuICAgKiAgIGNvbnN0IHJlcSA9IHJlcXVlc3QucG9zdCgnL3VwbG9hZCcpXG4gICAqICAgYWNjZXB0ZWRGaWxlcy5mb3JFYWNoKGZpbGUgPT4ge1xuICAgKiAgICAgcmVxLmF0dGFjaChmaWxlLm5hbWUsIGZpbGUpXG4gICAqICAgfSlcbiAgICogICByZXEuZW5kKGNhbGxiYWNrKVxuICAgKiB9XG4gICAqIGBgYFxuICAgKlxuICAgKiBAcGFyYW0ge0ZpbGVbXX0gYWNjZXB0ZWRGaWxlc1xuICAgKiBAcGFyYW0ge0ZpbGVbXX0gcmVqZWN0ZWRGaWxlc1xuICAgKiBAcGFyYW0geyhEcmFnRXZlbnR8RXZlbnQpfSBldmVudCBBIGRyYWcgZXZlbnQgb3IgaW5wdXQgY2hhbmdlIGV2ZW50IChpZiBmaWxlcyB3ZXJlIHNlbGVjdGVkIHZpYSB0aGUgZmlsZSBkaWFsb2cpXG4gICAqL1xuICBvbkRyb3A6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBDYiBmb3Igd2hlbiB0aGUgYGRyb3BgIGV2ZW50IG9jY3Vycy5cbiAgICogTm90ZSB0aGF0IGlmIG5vIGZpbGVzIGFyZSBhY2NlcHRlZCwgdGhpcyBjYWxsYmFjayBpcyBub3QgaW52b2tlZC5cbiAgICpcbiAgICogQHBhcmFtIHtGaWxlW119IGZpbGVzXG4gICAqIEBwYXJhbSB7KERyYWdFdmVudHxFdmVudCl9IGV2ZW50XG4gICAqL1xuICBvbkRyb3BBY2NlcHRlZDogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIENiIGZvciB3aGVuIHRoZSBgZHJvcGAgZXZlbnQgb2NjdXJzLlxuICAgKiBOb3RlIHRoYXQgaWYgbm8gZmlsZXMgYXJlIHJlamVjdGVkLCB0aGlzIGNhbGxiYWNrIGlzIG5vdCBpbnZva2VkLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdFtdfSBmaWxlc1xuICAgKiBAcGFyYW0geyhEcmFnRXZlbnR8RXZlbnQpfSBldmVudFxuICAgKi9cbiAgb25Ecm9wUmVqZWN0ZWQ6IFByb3BUeXBlcy5mdW5jXG59XG5cbmV4cG9ydCBkZWZhdWx0IERyb3B6b25lXG5cbi8qKlxuICogQSBmdW5jdGlvbiB0aGF0IGlzIGludm9rZWQgZm9yIHRoZSBgZHJhZ2VudGVyYCxcbiAqIGBkcmFnb3ZlcmAgYW5kIGBkcmFnbGVhdmVgIGV2ZW50cy5cbiAqIEl0IGlzIG5vdCBpbnZva2VkIGlmIHRoZSBpdGVtcyBhcmUgbm90IGZpbGVzIChzdWNoIGFzIGxpbmssIHRleHQsIGV0Yy4pLlxuICpcbiAqIEBjYWxsYmFjayBkcmFnQ2JcbiAqIEBwYXJhbSB7RHJhZ0V2ZW50fSBldmVudFxuICovXG5cbi8qKlxuICogQSBmdW5jdGlvbiB0aGF0IGlzIGludm9rZWQgZm9yIHRoZSBgZHJvcGAgb3IgaW5wdXQgY2hhbmdlIGV2ZW50LlxuICogSXQgaXMgbm90IGludm9rZWQgaWYgdGhlIGl0ZW1zIGFyZSBub3QgZmlsZXMgKHN1Y2ggYXMgbGluaywgdGV4dCwgZXRjLikuXG4gKlxuICogQGNhbGxiYWNrIGRyb3BDYlxuICogQHBhcmFtIHtGaWxlW119IGFjY2VwdGVkRmlsZXMgTGlzdCBvZiBhY2NlcHRlZCBmaWxlc1xuICogQHBhcmFtIHtGaWxlW119IHJlamVjdGVkRmlsZXMgTGlzdCBvZiByZWplY3RlZCBmaWxlc1xuICogQHBhcmFtIHsoRHJhZ0V2ZW50fEV2ZW50KX0gZXZlbnQgQSBkcmFnIGV2ZW50IG9yIGlucHV0IGNoYW5nZSBldmVudCAoaWYgZmlsZXMgd2VyZSBzZWxlY3RlZCB2aWEgdGhlIGZpbGUgZGlhbG9nKVxuICovXG5cbi8qKlxuICogQSBmdW5jdGlvbiB0aGF0IGlzIGludm9rZWQgZm9yIHRoZSBgZHJvcGAgb3IgaW5wdXQgY2hhbmdlIGV2ZW50LlxuICogSXQgaXMgbm90IGludm9rZWQgaWYgdGhlIGl0ZW1zIGFyZSBmaWxlcyAoc3VjaCBhcyBsaW5rLCB0ZXh0LCBldGMuKS5cbiAqXG4gKiBAY2FsbGJhY2sgZHJvcEFjY2VwdGVkQ2JcbiAqIEBwYXJhbSB7RmlsZVtdfSBmaWxlcyBMaXN0IG9mIGFjY2VwdGVkIGZpbGVzIHRoYXQgbWVldCB0aGUgZ2l2ZW4gY3JpdGVyaWFcbiAqIChgYWNjZXB0YCwgYG11bHRpcGxlYCwgYG1pblNpemVgLCBgbWF4U2l6ZWApXG4gKiBAcGFyYW0geyhEcmFnRXZlbnR8RXZlbnQpfSBldmVudCBBIGRyYWcgZXZlbnQgb3IgaW5wdXQgY2hhbmdlIGV2ZW50IChpZiBmaWxlcyB3ZXJlIHNlbGVjdGVkIHZpYSB0aGUgZmlsZSBkaWFsb2cpXG4gKi9cblxuLyoqXG4gKiBBIGZ1bmN0aW9uIHRoYXQgaXMgaW52b2tlZCBmb3IgdGhlIGBkcm9wYCBvciBpbnB1dCBjaGFuZ2UgZXZlbnQuXG4gKlxuICogQGNhbGxiYWNrIGRyb3BSZWplY3RlZENiXG4gKiBAcGFyYW0ge0ZpbGVbXX0gZmlsZXMgTGlzdCBvZiByZWplY3RlZCBmaWxlcyB0aGF0IGRvIG5vdCBtZWV0IHRoZSBnaXZlbiBjcml0ZXJpYVxuICogKGBhY2NlcHRgLCBgbXVsdGlwbGVgLCBgbWluU2l6ZWAsIGBtYXhTaXplYClcbiAqIEBwYXJhbSB7KERyYWdFdmVudHxFdmVudCl9IGV2ZW50IEEgZHJhZyBldmVudCBvciBpbnB1dCBjaGFuZ2UgZXZlbnQgKGlmIGZpbGVzIHdlcmUgc2VsZWN0ZWQgdmlhIHRoZSBmaWxlIGRpYWxvZylcbiAqL1xuXG4vKipcbiAqIEEgZnVuY3Rpb24gdGhhdCBpcyB1c2VkIGFnZ3JlZ2F0ZSBmaWxlcyxcbiAqIGluIGEgYXN5bmNocm9ub3VzIGZhc2hpb24sIGZyb20gZHJhZyBvciBpbnB1dCBjaGFuZ2UgZXZlbnRzLlxuICpcbiAqIEBjYWxsYmFjayBnZXRGaWxlc0Zyb21FdmVudFxuICogQHBhcmFtIHsoRHJhZ0V2ZW50fEV2ZW50KX0gZXZlbnQgQSBkcmFnIGV2ZW50IG9yIGlucHV0IGNoYW5nZSBldmVudCAoaWYgZmlsZXMgd2VyZSBzZWxlY3RlZCB2aWEgdGhlIGZpbGUgZGlhbG9nKVxuICogQHJldHVybnMgeyhGaWxlW118UHJvbWlzZTxGaWxlW10+KX1cbiAqL1xuXG4vKipcbiAqIEFuIG9iamVjdCB3aXRoIHRoZSBjdXJyZW50IGRyb3B6b25lIHN0YXRlIGFuZCBzb21lIGhlbHBlciBmdW5jdGlvbnMuXG4gKlxuICogQHR5cGVkZWYge29iamVjdH0gRHJvcHpvbmVTdGF0ZVxuICogQHByb3BlcnR5IHtGdW5jdGlvbn0gZ2V0Um9vdFByb3BzIFJldHVybnMgdGhlIHByb3BzIHlvdSBzaG91bGQgYXBwbHkgdG8gdGhlIHJvb3QgZHJvcCBjb250YWluZXIgeW91IHJlbmRlclxuICogQHByb3BlcnR5IHtGdW5jdGlvbn0gZ2V0SW5wdXRQcm9wcyBSZXR1cm5zIHRoZSBwcm9wcyB5b3Ugc2hvdWxkIGFwcGx5IHRvIGhpZGRlbiBmaWxlIGlucHV0IHlvdSByZW5kZXJcbiAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IG9wZW4gT3BlbiB0aGUgbmF0aXZlIGZpbGUgc2VsZWN0aW9uIGRpYWxvZ1xuICogQHByb3BlcnR5IHtib29sZWFufSBpc0ZvY3VzZWQgRHJvcHpvbmUgYXJlYSBpcyBpbiBmb2N1c1xuICogQHByb3BlcnR5IHtib29sZWFufSBpc0ZpbGVEaWFsb2dBY3RpdmUgRmlsZSBkaWFsb2cgaXMgb3BlbmVkXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGlzRHJhZ0FjdGl2ZSBBY3RpdmUgZHJhZyBpcyBpbiBwcm9ncmVzc1xuICogQHByb3BlcnR5IHtib29sZWFufSBpc0RyYWdBY2NlcHQgRHJhZ2dlZCBmaWxlcyBhcmUgYWNjZXB0ZWRcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gaXNEcmFnUmVqZWN0IFNvbWUgZHJhZ2dlZCBmaWxlcyBhcmUgcmVqZWN0ZWRcbiAqIEBwcm9wZXJ0eSB7RmlsZVtdfSBkcmFnZ2VkRmlsZXMgRmlsZXMgaW4gYWN0aXZlIGRyYWdcbiAqIEBwcm9wZXJ0eSB7RmlsZVtdfSBhY2NlcHRlZEZpbGVzIEFjY2VwdGVkIGZpbGVzXG4gKiBAcHJvcGVydHkge0ZpbGVbXX0gcmVqZWN0ZWRGaWxlcyBSZWplY3RlZCBmaWxlc1xuICovXG5cbmNvbnN0IGluaXRpYWxTdGF0ZSA9IHtcbiAgaXNGb2N1c2VkOiBmYWxzZSxcbiAgaXNGaWxlRGlhbG9nQWN0aXZlOiBmYWxzZSxcbiAgaXNEcmFnQWN0aXZlOiBmYWxzZSxcbiAgaXNEcmFnQWNjZXB0OiBmYWxzZSxcbiAgaXNEcmFnUmVqZWN0OiBmYWxzZSxcbiAgZHJhZ2dlZEZpbGVzOiBbXSxcbiAgYWNjZXB0ZWRGaWxlczogW10sXG4gIHJlamVjdGVkRmlsZXM6IFtdXG59XG5cbi8qKlxuICogQSBSZWFjdCBob29rIHRoYXQgY3JlYXRlcyBhIGRyYWcgJ24nIGRyb3AgYXJlYS5cbiAqXG4gKiBgYGBqc3hcbiAqIGZ1bmN0aW9uIE15RHJvcHpvbmUocHJvcHMpIHtcbiAqICAgY29uc3Qge2dldFJvb3RQcm9wcywgZ2V0SW5wdXRQcm9wc30gPSB1c2VEcm9wem9uZSh7XG4gKiAgICAgb25Ecm9wOiBhY2NlcHRlZEZpbGVzID0+IHtcbiAqICAgICAgIC8vIGRvIHNvbWV0aGluZyB3aXRoIHRoZSBGaWxlIG9iamVjdHMsIGUuZy4gdXBsb2FkIHRvIHNvbWUgc2VydmVyXG4gKiAgICAgfVxuICogICB9KTtcbiAqICAgcmV0dXJuIChcbiAqICAgICA8ZGl2IHsuLi5nZXRSb290UHJvcHMoKX0+XG4gKiAgICAgICA8aW5wdXQgey4uLmdldElucHV0UHJvcHMoKX0gLz5cbiAqICAgICAgIDxwPkRyYWcgYW5kIGRyb3Agc29tZSBmaWxlcyBoZXJlLCBvciBjbGljayB0byBzZWxlY3QgZmlsZXM8L3A+XG4gKiAgICAgPC9kaXY+XG4gKiAgIClcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEBmdW5jdGlvbiB1c2VEcm9wem9uZVxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wc1xuICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IFtwcm9wcy5hY2NlcHRdIFNldCBhY2NlcHRlZCBmaWxlIHR5cGVzLlxuICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9va29uZXQvYXR0ci1hY2NlcHQgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKiBLZWVwIGluIG1pbmQgdGhhdCBtaW1lIHR5cGUgZGV0ZXJtaW5hdGlvbiBpcyBub3QgcmVsaWFibGUgYWNyb3NzIHBsYXRmb3Jtcy4gQ1NWIGZpbGVzLFxuICogZm9yIGV4YW1wbGUsIGFyZSByZXBvcnRlZCBhcyB0ZXh0L3BsYWluIHVuZGVyIG1hY09TIGJ1dCBhcyBhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwgdW5kZXJcbiAqIFdpbmRvd3MuIEluIHNvbWUgY2FzZXMgdGhlcmUgbWlnaHQgbm90IGJlIGEgbWltZSB0eXBlIHNldCBhdCBhbGwuXG4gKiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdC1kcm9wem9uZS9yZWFjdC1kcm9wem9uZS9pc3N1ZXMvMjc2XG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtwcm9wcy5tdWx0aXBsZT10cnVlXSBBbGxvdyBkcmFnICduJyBkcm9wIChvciBzZWxlY3Rpb24gZnJvbSB0aGUgZmlsZSBkaWFsb2cpIG9mIG11bHRpcGxlIGZpbGVzXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtwcm9wcy5wcmV2ZW50RHJvcE9uRG9jdW1lbnQ9dHJ1ZV0gSWYgZmFsc2UsIGFsbG93IGRyb3BwZWQgaXRlbXMgdG8gdGFrZSBvdmVyIHRoZSBjdXJyZW50IGJyb3dzZXIgd2luZG93XG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtwcm9wcy5ub0NsaWNrPWZhbHNlXSBJZiB0cnVlLCBkaXNhYmxlcyBjbGljayB0byBvcGVuIHRoZSBuYXRpdmUgZmlsZSBzZWxlY3Rpb24gZGlhbG9nXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtwcm9wcy5ub0tleWJvYXJkPWZhbHNlXSBJZiB0cnVlLCBkaXNhYmxlcyBTUEFDRS9FTlRFUiB0byBvcGVuIHRoZSBuYXRpdmUgZmlsZSBzZWxlY3Rpb24gZGlhbG9nLlxuICogTm90ZSB0aGF0IGl0IGFsc28gc3RvcHMgdHJhY2tpbmcgdGhlIGZvY3VzIHN0YXRlLlxuICogQHBhcmFtIHtib29sZWFufSBbcHJvcHMubm9EcmFnPWZhbHNlXSBJZiB0cnVlLCBkaXNhYmxlcyBkcmFnICduJyBkcm9wXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtwcm9wcy5ub0RyYWdFdmVudHNCdWJibGluZz1mYWxzZV0gSWYgdHJ1ZSwgc3RvcHMgZHJhZyBldmVudCBwcm9wYWdhdGlvbiB0byBwYXJlbnRzXG4gKiBAcGFyYW0ge251bWJlcn0gW3Byb3BzLm1pblNpemU9MF0gTWluaW11bSBmaWxlIHNpemUgKGluIGJ5dGVzKVxuICogQHBhcmFtIHtudW1iZXJ9IFtwcm9wcy5tYXhTaXplPUluZmluaXR5XSBNYXhpbXVtIGZpbGUgc2l6ZSAoaW4gYnl0ZXMpXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtwcm9wcy5kaXNhYmxlZD1mYWxzZV0gRW5hYmxlL2Rpc2FibGUgdGhlIGRyb3B6b25lXG4gKiBAcGFyYW0ge2dldEZpbGVzRnJvbUV2ZW50fSBbcHJvcHMuZ2V0RmlsZXNGcm9tRXZlbnRdIFVzZSB0aGlzIHRvIHByb3ZpZGUgYSBjdXN0b20gZmlsZSBhZ2dyZWdhdG9yXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJvcHMub25GaWxlRGlhbG9nQ2FuY2VsXSBDYiBmb3Igd2hlbiBjbG9zaW5nIHRoZSBmaWxlIGRpYWxvZyB3aXRoIG5vIHNlbGVjdGlvblxuICogQHBhcmFtIHtkcmFnQ2J9IFtwcm9wcy5vbkRyYWdFbnRlcl0gQ2IgZm9yIHdoZW4gdGhlIGBkcmFnZW50ZXJgIGV2ZW50IG9jY3Vycy5cbiAqIEBwYXJhbSB7ZHJhZ0NifSBbcHJvcHMub25EcmFnTGVhdmVdIENiIGZvciB3aGVuIHRoZSBgZHJhZ2xlYXZlYCBldmVudCBvY2N1cnNcbiAqIEBwYXJhbSB7ZHJhZ0NifSBbcHJvcHMub25EcmFnT3Zlcl0gQ2IgZm9yIHdoZW4gdGhlIGBkcmFnb3ZlcmAgZXZlbnQgb2NjdXJzXG4gKiBAcGFyYW0ge2Ryb3BDYn0gW3Byb3BzLm9uRHJvcF0gQ2IgZm9yIHdoZW4gdGhlIGBkcm9wYCBldmVudCBvY2N1cnMuXG4gKiBOb3RlIHRoYXQgdGhpcyBjYWxsYmFjayBpcyBpbnZva2VkIGFmdGVyIHRoZSBgZ2V0RmlsZXNGcm9tRXZlbnRgIGNhbGxiYWNrIGlzIGRvbmUuXG4gKlxuICogRmlsZXMgYXJlIGFjY2VwdGVkIG9yIHJlamVjdGVkIGJhc2VkIG9uIHRoZSBgYWNjZXB0YCwgYG11bHRpcGxlYCwgYG1pblNpemVgIGFuZCBgbWF4U2l6ZWAgcHJvcHMuXG4gKiBgYWNjZXB0YCBtdXN0IGJlIGEgdmFsaWQgW01JTUUgdHlwZV0oaHR0cDovL3d3dy5pYW5hLm9yZy9hc3NpZ25tZW50cy9tZWRpYS10eXBlcy9tZWRpYS10eXBlcy54aHRtbCkgYWNjb3JkaW5nIHRvIFtpbnB1dCBlbGVtZW50IHNwZWNpZmljYXRpb25dKGh0dHBzOi8vd3d3LnczLm9yZy93aWtpL0hUTUwvRWxlbWVudHMvaW5wdXQvZmlsZSkgb3IgYSB2YWxpZCBmaWxlIGV4dGVuc2lvbi5cbiAqIElmIGBtdWx0aXBsZWAgaXMgc2V0IHRvIGZhbHNlIGFuZCBhZGRpdGlvbmFsIGZpbGVzIGFyZSBkcm9wcHBlZCxcbiAqIGFsbCBmaWxlcyBiZXNpZGVzIHRoZSBmaXJzdCB3aWxsIGJlIHJlamVjdGVkLlxuICogQW55IGZpbGUgd2hpY2ggZG9lcyBub3QgaGF2ZSBhIHNpemUgaW4gdGhlIFtgbWluU2l6ZWAsIGBtYXhTaXplYF0gcmFuZ2UsIHdpbGwgYmUgcmVqZWN0ZWQgYXMgd2VsbC5cbiAqXG4gKiBOb3RlIHRoYXQgdGhlIGBvbkRyb3BgIGNhbGxiYWNrIHdpbGwgYWx3YXlzIGJlIGludm9rZWQgcmVnYXJkbGVzcyBpZiB0aGUgZHJvcHBlZCBmaWxlcyB3ZXJlIGFjY2VwdGVkIG9yIHJlamVjdGVkLlxuICogSWYgeW91J2QgbGlrZSB0byByZWFjdCB0byBhIHNwZWNpZmljIHNjZW5hcmlvLCB1c2UgdGhlIGBvbkRyb3BBY2NlcHRlZGAvYG9uRHJvcFJlamVjdGVkYCBwcm9wcy5cbiAqXG4gKiBgb25Ecm9wYCB3aWxsIHByb3ZpZGUgeW91IHdpdGggYW4gYXJyYXkgb2YgW0ZpbGVdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9GaWxlKSBvYmplY3RzIHdoaWNoIHlvdSBjYW4gdGhlbiBwcm9jZXNzIGFuZCBzZW5kIHRvIGEgc2VydmVyLlxuICogRm9yIGV4YW1wbGUsIHdpdGggW1N1cGVyQWdlbnRdKGh0dHBzOi8vZ2l0aHViLmNvbS92aXNpb25tZWRpYS9zdXBlcmFnZW50KSBhcyBhIGh0dHAvYWpheCBsaWJyYXJ5OlxuICpcbiAqIGBgYGpzXG4gKiBmdW5jdGlvbiBvbkRyb3AoYWNjZXB0ZWRGaWxlcykge1xuICogICBjb25zdCByZXEgPSByZXF1ZXN0LnBvc3QoJy91cGxvYWQnKVxuICogICBhY2NlcHRlZEZpbGVzLmZvckVhY2goZmlsZSA9PiB7XG4gKiAgICAgcmVxLmF0dGFjaChmaWxlLm5hbWUsIGZpbGUpXG4gKiAgIH0pXG4gKiAgIHJlcS5lbmQoY2FsbGJhY2spXG4gKiB9XG4gKiBgYGBcbiAqIEBwYXJhbSB7ZHJvcEFjY2VwdGVkQ2J9IFtwcm9wcy5vbkRyb3BBY2NlcHRlZF1cbiAqIEBwYXJhbSB7ZHJvcFJlamVjdGVkQ2J9IFtwcm9wcy5vbkRyb3BSZWplY3RlZF1cbiAqXG4gKiBAcmV0dXJucyB7RHJvcHpvbmVTdGF0ZX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZURyb3B6b25lKHtcbiAgYWNjZXB0LFxuICBkaXNhYmxlZCA9IGZhbHNlLFxuICBnZXRGaWxlc0Zyb21FdmVudCA9IGZyb21FdmVudCxcbiAgbWF4U2l6ZSA9IEluZmluaXR5LFxuICBtaW5TaXplID0gMCxcbiAgbXVsdGlwbGUgPSB0cnVlLFxuICBvbkRyYWdFbnRlcixcbiAgb25EcmFnTGVhdmUsXG4gIG9uRHJhZ092ZXIsXG4gIG9uRHJvcCxcbiAgb25Ecm9wQWNjZXB0ZWQsXG4gIG9uRHJvcFJlamVjdGVkLFxuICBvbkZpbGVEaWFsb2dDYW5jZWwsXG4gIHByZXZlbnREcm9wT25Eb2N1bWVudCA9IHRydWUsXG4gIG5vQ2xpY2sgPSBmYWxzZSxcbiAgbm9LZXlib2FyZCA9IGZhbHNlLFxuICBub0RyYWcgPSBmYWxzZSxcbiAgbm9EcmFnRXZlbnRzQnViYmxpbmcgPSBmYWxzZVxufSA9IHt9KSB7XG4gIGNvbnN0IHJvb3RSZWYgPSB1c2VSZWYobnVsbClcbiAgY29uc3QgaW5wdXRSZWYgPSB1c2VSZWYobnVsbClcblxuICBjb25zdCBbc3RhdGUsIGRpc3BhdGNoXSA9IHVzZVJlZHVjZXIocmVkdWNlciwgaW5pdGlhbFN0YXRlKVxuICBjb25zdCB7IGlzRm9jdXNlZCwgaXNGaWxlRGlhbG9nQWN0aXZlLCBkcmFnZ2VkRmlsZXMgfSA9IHN0YXRlXG5cbiAgLy8gRm4gZm9yIG9wZW5pbmcgdGhlIGZpbGUgZGlhbG9nIHByb2dyYW1tYXRpY2FsbHlcbiAgY29uc3Qgb3BlbkZpbGVEaWFsb2cgPSAoKSA9PiB7XG4gICAgaWYgKGlucHV0UmVmLmN1cnJlbnQpIHtcbiAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ29wZW5EaWFsb2cnIH0pXG4gICAgICBpbnB1dFJlZi5jdXJyZW50LnZhbHVlID0gbnVsbFxuICAgICAgaW5wdXRSZWYuY3VycmVudC5jbGljaygpXG4gICAgfVxuICB9XG5cbiAgLy8gVXBkYXRlIGZpbGUgZGlhbG9nIGFjdGl2ZSBzdGF0ZSB3aGVuIHRoZSB3aW5kb3cgaXMgZm9jdXNlZCBvblxuICBjb25zdCBvbldpbmRvd0ZvY3VzID0gKCkgPT4ge1xuICAgIC8vIEV4ZWN1dGUgdGhlIHRpbWVvdXQgb25seSBpZiB0aGUgZmlsZSBkaWFsb2cgaXMgb3BlbmVkIGluIHRoZSBicm93c2VyXG4gICAgaWYgKGlzRmlsZURpYWxvZ0FjdGl2ZSkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmIChpbnB1dFJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgY29uc3QgeyBmaWxlcyB9ID0gaW5wdXRSZWYuY3VycmVudFxuXG4gICAgICAgICAgaWYgKCFmaWxlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ2Nsb3NlRGlhbG9nJyB9KVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIG9uRmlsZURpYWxvZ0NhbmNlbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICBvbkZpbGVEaWFsb2dDYW5jZWwoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSwgMzAwKVxuICAgIH1cbiAgfVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIG9uV2luZG93Rm9jdXMsIGZhbHNlKVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignZm9jdXMnLCBvbldpbmRvd0ZvY3VzLCBmYWxzZSlcbiAgICB9XG4gIH0sIFtpbnB1dFJlZiwgaXNGaWxlRGlhbG9nQWN0aXZlLCBvbkZpbGVEaWFsb2dDYW5jZWxdKVxuXG4gIC8vIENiIHRvIG9wZW4gdGhlIGZpbGUgZGlhbG9nIHdoZW4gU1BBQ0UvRU5URVIgb2NjdXJzIG9uIHRoZSBkcm9wem9uZVxuICBjb25zdCBvbktleURvd25DYiA9IHVzZUNhbGxiYWNrKFxuICAgIGV2ZW50ID0+IHtcbiAgICAgIC8vIElnbm9yZSBrZXlib2FyZCBldmVudHMgYnViYmxpbmcgdXAgdGhlIERPTSB0cmVlXG4gICAgICBpZiAoIXJvb3RSZWYuY3VycmVudCB8fCAhcm9vdFJlZi5jdXJyZW50LmlzRXF1YWxOb2RlKGV2ZW50LnRhcmdldCkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudC5rZXlDb2RlID09PSAzMiB8fCBldmVudC5rZXlDb2RlID09PSAxMykge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgIG9wZW5GaWxlRGlhbG9nKClcbiAgICAgIH1cbiAgICB9LFxuICAgIFtyb290UmVmLCBpbnB1dFJlZl1cbiAgKVxuXG4gIC8vIFVwZGF0ZSBmb2N1cyBzdGF0ZSBmb3IgdGhlIGRyb3B6b25lXG4gIGNvbnN0IG9uRm9jdXNDYiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICdmb2N1cycgfSlcbiAgfSwgW10pXG4gIGNvbnN0IG9uQmx1ckNiID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ2JsdXInIH0pXG4gIH0sIFtdKVxuXG4gIC8vIENiIHRvIG9wZW4gdGhlIGZpbGUgZGlhbG9nIHdoZW4gY2xpY2sgb2NjdXJzIG9uIHRoZSBkcm9wem9uZVxuICBjb25zdCBvbkNsaWNrQ2IgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKG5vQ2xpY2spIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIEluIElFMTEvRWRnZSB0aGUgZmlsZS1icm93c2VyIGRpYWxvZyBpcyBibG9ja2luZywgdGhlcmVmb3JlLCB1c2Ugc2V0VGltZW91dCgpXG4gICAgLy8gdG8gZW5zdXJlIFJlYWN0IGNhbiBoYW5kbGUgc3RhdGUgY2hhbmdlc1xuICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0LWRyb3B6b25lL3JlYWN0LWRyb3B6b25lL2lzc3Vlcy80NTBcbiAgICBpZiAoaXNJZU9yRWRnZSgpKSB7XG4gICAgICBzZXRUaW1lb3V0KG9wZW5GaWxlRGlhbG9nLCAwKVxuICAgIH0gZWxzZSB7XG4gICAgICBvcGVuRmlsZURpYWxvZygpXG4gICAgfVxuICB9LCBbaW5wdXRSZWYsIG5vQ2xpY2tdKVxuXG4gIGNvbnN0IGRyYWdUYXJnZXRzUmVmID0gdXNlUmVmKFtdKVxuICBjb25zdCBvbkRvY3VtZW50RHJvcCA9IGV2ZW50ID0+IHtcbiAgICBpZiAocm9vdFJlZi5jdXJyZW50ICYmIHJvb3RSZWYuY3VycmVudC5jb250YWlucyhldmVudC50YXJnZXQpKSB7XG4gICAgICAvLyBJZiB3ZSBpbnRlcmNlcHRlZCBhbiBldmVudCBmb3Igb3VyIGluc3RhbmNlLCBsZXQgaXQgcHJvcGFnYXRlIGRvd24gdG8gdGhlIGluc3RhbmNlJ3Mgb25Ecm9wIGhhbmRsZXJcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgZHJhZ1RhcmdldHNSZWYuY3VycmVudCA9IFtdXG4gIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChwcmV2ZW50RHJvcE9uRG9jdW1lbnQpIHtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdvdmVyJywgb25Eb2N1bWVudERyYWdPdmVyLCBmYWxzZSlcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2Ryb3AnLCBvbkRvY3VtZW50RHJvcCwgZmFsc2UpXG4gICAgfVxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChwcmV2ZW50RHJvcE9uRG9jdW1lbnQpIHtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignZHJhZ292ZXInLCBvbkRvY3VtZW50RHJhZ092ZXIpXG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Ryb3AnLCBvbkRvY3VtZW50RHJvcClcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtyb290UmVmLCBwcmV2ZW50RHJvcE9uRG9jdW1lbnRdKVxuXG4gIGNvbnN0IG9uRHJhZ0VudGVyQ2IgPSB1c2VDYWxsYmFjayhcbiAgICBldmVudCA9PiB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAvLyBQZXJzaXN0IGhlcmUgYmVjYXVzZSB3ZSBuZWVkIHRoZSBldmVudCBsYXRlciBhZnRlciBnZXRGaWxlc0Zyb21FdmVudCgpIGlzIGRvbmVcbiAgICAgIGV2ZW50LnBlcnNpc3QoKVxuICAgICAgc3RvcFByb3BhZ2F0aW9uKGV2ZW50KVxuXG4gICAgICAvLyBDb3VudCB0aGUgZHJvcHpvbmUgYW5kIGFueSBjaGlsZHJlbiB0aGF0IGFyZSBlbnRlcmVkLlxuICAgICAgaWYgKGRyYWdUYXJnZXRzUmVmLmN1cnJlbnQuaW5kZXhPZihldmVudC50YXJnZXQpID09PSAtMSkge1xuICAgICAgICBkcmFnVGFyZ2V0c1JlZi5jdXJyZW50ID0gWy4uLmRyYWdUYXJnZXRzUmVmLmN1cnJlbnQsIGV2ZW50LnRhcmdldF1cbiAgICAgIH1cblxuICAgICAgaWYgKGlzRXZ0V2l0aEZpbGVzKGV2ZW50KSkge1xuICAgICAgICBQcm9taXNlLnJlc29sdmUoZ2V0RmlsZXNGcm9tRXZlbnQoZXZlbnQpKS50aGVuKGRyYWdnZWRGaWxlcyA9PiB7XG4gICAgICAgICAgaWYgKGlzUHJvcGFnYXRpb25TdG9wcGVkKGV2ZW50KSAmJiAhbm9EcmFnRXZlbnRzQnViYmxpbmcpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cblxuICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIGRyYWdnZWRGaWxlcyxcbiAgICAgICAgICAgIGlzRHJhZ0FjdGl2ZTogdHJ1ZSxcbiAgICAgICAgICAgIHR5cGU6ICdzZXREcmFnZ2VkRmlsZXMnXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIGlmIChvbkRyYWdFbnRlcikge1xuICAgICAgICAgICAgb25EcmFnRW50ZXIoZXZlbnQpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0sXG4gICAgW2dldEZpbGVzRnJvbUV2ZW50LCBvbkRyYWdFbnRlciwgbm9EcmFnRXZlbnRzQnViYmxpbmddXG4gIClcblxuICBjb25zdCBvbkRyYWdPdmVyQ2IgPSB1c2VDYWxsYmFjayhcbiAgICBldmVudCA9PiB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICBldmVudC5wZXJzaXN0KClcbiAgICAgIHN0b3BQcm9wYWdhdGlvbihldmVudClcblxuICAgICAgaWYgKGV2ZW50LmRhdGFUcmFuc2Zlcikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID0gJ2NvcHknXG4gICAgICAgIH0gY2F0Y2gge30gLyogZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eSAqL1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNFdnRXaXRoRmlsZXMoZXZlbnQpICYmIG9uRHJhZ092ZXIpIHtcbiAgICAgICAgb25EcmFnT3ZlcihldmVudClcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcbiAgICBbb25EcmFnT3Zlciwgbm9EcmFnRXZlbnRzQnViYmxpbmddXG4gIClcblxuICBjb25zdCBvbkRyYWdMZWF2ZUNiID0gdXNlQ2FsbGJhY2soXG4gICAgZXZlbnQgPT4ge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgZXZlbnQucGVyc2lzdCgpXG4gICAgICBzdG9wUHJvcGFnYXRpb24oZXZlbnQpXG5cbiAgICAgIC8vIE9ubHkgZGVhY3RpdmF0ZSBvbmNlIHRoZSBkcm9wem9uZSBhbmQgYWxsIGNoaWxkcmVuIGhhdmUgYmVlbiBsZWZ0XG4gICAgICBjb25zdCB0YXJnZXRzID0gZHJhZ1RhcmdldHNSZWYuY3VycmVudC5maWx0ZXIoXG4gICAgICAgIHRhcmdldCA9PiB0YXJnZXQgIT09IGV2ZW50LnRhcmdldCAmJiByb290UmVmLmN1cnJlbnQgJiYgcm9vdFJlZi5jdXJyZW50LmNvbnRhaW5zKHRhcmdldClcbiAgICAgIClcbiAgICAgIGRyYWdUYXJnZXRzUmVmLmN1cnJlbnQgPSB0YXJnZXRzXG4gICAgICBpZiAodGFyZ2V0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBkaXNwYXRjaCh7XG4gICAgICAgIGlzRHJhZ0FjdGl2ZTogZmFsc2UsXG4gICAgICAgIHR5cGU6ICdzZXREcmFnZ2VkRmlsZXMnLFxuICAgICAgICBkcmFnZ2VkRmlsZXM6IFtdXG4gICAgICB9KVxuXG4gICAgICBpZiAoaXNFdnRXaXRoRmlsZXMoZXZlbnQpICYmIG9uRHJhZ0xlYXZlKSB7XG4gICAgICAgIG9uRHJhZ0xlYXZlKGV2ZW50KVxuICAgICAgfVxuICAgIH0sXG4gICAgW3Jvb3RSZWYsIG9uRHJhZ0xlYXZlLCBub0RyYWdFdmVudHNCdWJibGluZ11cbiAgKVxuXG4gIGNvbnN0IG9uRHJvcENiID0gdXNlQ2FsbGJhY2soXG4gICAgZXZlbnQgPT4ge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgLy8gUGVyc2lzdCBoZXJlIGJlY2F1c2Ugd2UgbmVlZCB0aGUgZXZlbnQgbGF0ZXIgYWZ0ZXIgZ2V0RmlsZXNGcm9tRXZlbnQoKSBpcyBkb25lXG4gICAgICBldmVudC5wZXJzaXN0KClcbiAgICAgIHN0b3BQcm9wYWdhdGlvbihldmVudClcblxuICAgICAgZHJhZ1RhcmdldHNSZWYuY3VycmVudCA9IFtdXG4gICAgICBkaXNwYXRjaCh7IHR5cGU6ICdyZXNldCcgfSlcblxuICAgICAgaWYgKGlzRXZ0V2l0aEZpbGVzKGV2ZW50KSkge1xuICAgICAgICBQcm9taXNlLnJlc29sdmUoZ2V0RmlsZXNGcm9tRXZlbnQoZXZlbnQpKS50aGVuKGZpbGVzID0+IHtcbiAgICAgICAgICBpZiAoaXNQcm9wYWdhdGlvblN0b3BwZWQoZXZlbnQpICYmICFub0RyYWdFdmVudHNCdWJibGluZykge1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgYWNjZXB0ZWRGaWxlcyA9IFtdXG4gICAgICAgICAgY29uc3QgcmVqZWN0ZWRGaWxlcyA9IFtdXG5cbiAgICAgICAgICBmaWxlcy5mb3JFYWNoKGZpbGUgPT4ge1xuICAgICAgICAgICAgaWYgKGZpbGVBY2NlcHRlZChmaWxlLCBhY2NlcHQpICYmIGZpbGVNYXRjaFNpemUoZmlsZSwgbWF4U2l6ZSwgbWluU2l6ZSkpIHtcbiAgICAgICAgICAgICAgYWNjZXB0ZWRGaWxlcy5wdXNoKGZpbGUpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZWplY3RlZEZpbGVzLnB1c2goZmlsZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgaWYgKCFtdWx0aXBsZSAmJiBhY2NlcHRlZEZpbGVzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHJlamVjdGVkRmlsZXMucHVzaCguLi5hY2NlcHRlZEZpbGVzLnNwbGljZSgwKSkgLy8gUmVqZWN0IGV2ZXJ5dGhpbmcgYW5kIGVtcHR5IGFjY2VwdGVkIGZpbGVzXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgYWNjZXB0ZWRGaWxlcyxcbiAgICAgICAgICAgIHJlamVjdGVkRmlsZXMsXG4gICAgICAgICAgICB0eXBlOiAnc2V0RmlsZXMnXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIGlmIChvbkRyb3ApIHtcbiAgICAgICAgICAgIG9uRHJvcChhY2NlcHRlZEZpbGVzLCByZWplY3RlZEZpbGVzLCBldmVudClcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocmVqZWN0ZWRGaWxlcy5sZW5ndGggPiAwICYmIG9uRHJvcFJlamVjdGVkKSB7XG4gICAgICAgICAgICBvbkRyb3BSZWplY3RlZChyZWplY3RlZEZpbGVzLCBldmVudClcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoYWNjZXB0ZWRGaWxlcy5sZW5ndGggPiAwICYmIG9uRHJvcEFjY2VwdGVkKSB7XG4gICAgICAgICAgICBvbkRyb3BBY2NlcHRlZChhY2NlcHRlZEZpbGVzLCBldmVudClcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICBtdWx0aXBsZSxcbiAgICAgIGFjY2VwdCxcbiAgICAgIG1pblNpemUsXG4gICAgICBtYXhTaXplLFxuICAgICAgZ2V0RmlsZXNGcm9tRXZlbnQsXG4gICAgICBvbkRyb3AsXG4gICAgICBvbkRyb3BBY2NlcHRlZCxcbiAgICAgIG9uRHJvcFJlamVjdGVkLFxuICAgICAgbm9EcmFnRXZlbnRzQnViYmxpbmdcbiAgICBdXG4gIClcblxuICBjb25zdCBjb21wb3NlSGFuZGxlciA9IGZuID0+IHtcbiAgICByZXR1cm4gZGlzYWJsZWQgPyBudWxsIDogZm5cbiAgfVxuXG4gIGNvbnN0IGNvbXBvc2VLZXlib2FyZEhhbmRsZXIgPSBmbiA9PiB7XG4gICAgcmV0dXJuIG5vS2V5Ym9hcmQgPyBudWxsIDogY29tcG9zZUhhbmRsZXIoZm4pXG4gIH1cblxuICBjb25zdCBjb21wb3NlRHJhZ0hhbmRsZXIgPSBmbiA9PiB7XG4gICAgcmV0dXJuIG5vRHJhZyA/IG51bGwgOiBjb21wb3NlSGFuZGxlcihmbilcbiAgfVxuXG4gIGNvbnN0IHN0b3BQcm9wYWdhdGlvbiA9IGV2ZW50ID0+IHtcbiAgICBpZiAobm9EcmFnRXZlbnRzQnViYmxpbmcpIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgZ2V0Um9vdFByb3BzID0gdXNlTWVtbyhcbiAgICAoKSA9PiAoe1xuICAgICAgcmVmS2V5ID0gJ3JlZicsXG4gICAgICBvbktleURvd24sXG4gICAgICBvbkZvY3VzLFxuICAgICAgb25CbHVyLFxuICAgICAgb25DbGljayxcbiAgICAgIG9uRHJhZ0VudGVyLFxuICAgICAgb25EcmFnT3ZlcixcbiAgICAgIG9uRHJhZ0xlYXZlLFxuICAgICAgb25Ecm9wLFxuICAgICAgLi4ucmVzdFxuICAgIH0gPSB7fSkgPT4gKHtcbiAgICAgIG9uS2V5RG93bjogY29tcG9zZUtleWJvYXJkSGFuZGxlcihjb21wb3NlRXZlbnRIYW5kbGVycyhvbktleURvd24sIG9uS2V5RG93bkNiKSksXG4gICAgICBvbkZvY3VzOiBjb21wb3NlS2V5Ym9hcmRIYW5kbGVyKGNvbXBvc2VFdmVudEhhbmRsZXJzKG9uRm9jdXMsIG9uRm9jdXNDYikpLFxuICAgICAgb25CbHVyOiBjb21wb3NlS2V5Ym9hcmRIYW5kbGVyKGNvbXBvc2VFdmVudEhhbmRsZXJzKG9uQmx1ciwgb25CbHVyQ2IpKSxcbiAgICAgIG9uQ2xpY2s6IGNvbXBvc2VIYW5kbGVyKGNvbXBvc2VFdmVudEhhbmRsZXJzKG9uQ2xpY2ssIG9uQ2xpY2tDYikpLFxuICAgICAgb25EcmFnRW50ZXI6IGNvbXBvc2VEcmFnSGFuZGxlcihjb21wb3NlRXZlbnRIYW5kbGVycyhvbkRyYWdFbnRlciwgb25EcmFnRW50ZXJDYikpLFxuICAgICAgb25EcmFnT3ZlcjogY29tcG9zZURyYWdIYW5kbGVyKGNvbXBvc2VFdmVudEhhbmRsZXJzKG9uRHJhZ092ZXIsIG9uRHJhZ092ZXJDYikpLFxuICAgICAgb25EcmFnTGVhdmU6IGNvbXBvc2VEcmFnSGFuZGxlcihjb21wb3NlRXZlbnRIYW5kbGVycyhvbkRyYWdMZWF2ZSwgb25EcmFnTGVhdmVDYikpLFxuICAgICAgb25Ecm9wOiBjb21wb3NlRHJhZ0hhbmRsZXIoY29tcG9zZUV2ZW50SGFuZGxlcnMob25Ecm9wLCBvbkRyb3BDYikpLFxuICAgICAgW3JlZktleV06IHJvb3RSZWYsXG4gICAgICAuLi4oIWRpc2FibGVkICYmICFub0tleWJvYXJkID8geyB0YWJJbmRleDogMCB9IDoge30pLFxuICAgICAgLi4ucmVzdFxuICAgIH0pLFxuICAgIFtcbiAgICAgIHJvb3RSZWYsXG4gICAgICBvbktleURvd25DYixcbiAgICAgIG9uRm9jdXNDYixcbiAgICAgIG9uQmx1ckNiLFxuICAgICAgb25DbGlja0NiLFxuICAgICAgb25EcmFnRW50ZXJDYixcbiAgICAgIG9uRHJhZ092ZXJDYixcbiAgICAgIG9uRHJhZ0xlYXZlQ2IsXG4gICAgICBvbkRyb3BDYixcbiAgICAgIG5vS2V5Ym9hcmQsXG4gICAgICBub0RyYWcsXG4gICAgICBkaXNhYmxlZFxuICAgIF1cbiAgKVxuXG4gIGNvbnN0IG9uSW5wdXRFbGVtZW50Q2xpY2sgPSB1c2VDYWxsYmFjayhldmVudCA9PiB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgfSwgW10pXG5cbiAgY29uc3QgZ2V0SW5wdXRQcm9wcyA9IHVzZU1lbW8oXG4gICAgKCkgPT4gKHsgcmVmS2V5ID0gJ3JlZicsIG9uQ2hhbmdlLCBvbkNsaWNrLCAuLi5yZXN0IH0gPSB7fSkgPT4ge1xuICAgICAgY29uc3QgaW5wdXRQcm9wcyA9IHtcbiAgICAgICAgYWNjZXB0LFxuICAgICAgICBtdWx0aXBsZSxcbiAgICAgICAgdHlwZTogJ2ZpbGUnLFxuICAgICAgICBzdHlsZTogeyBkaXNwbGF5OiAnbm9uZScgfSxcbiAgICAgICAgb25DaGFuZ2U6IGNvbXBvc2VIYW5kbGVyKGNvbXBvc2VFdmVudEhhbmRsZXJzKG9uQ2hhbmdlLCBvbkRyb3BDYikpLFxuICAgICAgICBvbkNsaWNrOiBjb21wb3NlSGFuZGxlcihjb21wb3NlRXZlbnRIYW5kbGVycyhvbkNsaWNrLCBvbklucHV0RWxlbWVudENsaWNrKSksXG4gICAgICAgIGF1dG9Db21wbGV0ZTogJ29mZicsXG4gICAgICAgIHRhYkluZGV4OiAtMSxcbiAgICAgICAgW3JlZktleV06IGlucHV0UmVmXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmlucHV0UHJvcHMsXG4gICAgICAgIC4uLnJlc3RcbiAgICAgIH1cbiAgICB9LFxuICAgIFtpbnB1dFJlZiwgYWNjZXB0LCBtdWx0aXBsZSwgb25Ecm9wQ2IsIGRpc2FibGVkXVxuICApXG5cbiAgY29uc3QgZmlsZUNvdW50ID0gZHJhZ2dlZEZpbGVzLmxlbmd0aFxuICBjb25zdCBpc011bHRpcGxlQWxsb3dlZCA9IG11bHRpcGxlIHx8IGZpbGVDb3VudCA8PSAxXG4gIGNvbnN0IGlzRHJhZ0FjY2VwdCA9IGZpbGVDb3VudCA+IDAgJiYgYWxsRmlsZXNBY2NlcHRlZChkcmFnZ2VkRmlsZXMsIGFjY2VwdClcbiAgY29uc3QgaXNEcmFnUmVqZWN0ID0gZmlsZUNvdW50ID4gMCAmJiAoIWlzRHJhZ0FjY2VwdCB8fCAhaXNNdWx0aXBsZUFsbG93ZWQpXG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBpc0RyYWdBY2NlcHQsXG4gICAgaXNEcmFnUmVqZWN0LFxuICAgIGlzRm9jdXNlZDogaXNGb2N1c2VkICYmICFkaXNhYmxlZCxcbiAgICBnZXRSb290UHJvcHMsXG4gICAgZ2V0SW5wdXRQcm9wcyxcbiAgICByb290UmVmLFxuICAgIGlucHV0UmVmLFxuICAgIG9wZW46IGNvbXBvc2VIYW5kbGVyKG9wZW5GaWxlRGlhbG9nKVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlZHVjZXIoc3RhdGUsIGFjdGlvbikge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSAnZm9jdXMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGlzRm9jdXNlZDogdHJ1ZVxuICAgICAgfVxuICAgIGNhc2UgJ2JsdXInOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGlzRm9jdXNlZDogZmFsc2VcbiAgICAgIH1cbiAgICBjYXNlICdvcGVuRGlhbG9nJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBpc0ZpbGVEaWFsb2dBY3RpdmU6IHRydWVcbiAgICAgIH1cbiAgICBjYXNlICdjbG9zZURpYWxvZyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgaXNGaWxlRGlhbG9nQWN0aXZlOiBmYWxzZVxuICAgICAgfVxuICAgIGNhc2UgJ3NldERyYWdnZWRGaWxlcyc6XG4gICAgICAvKiBlc2xpbnQgbm8tY2FzZS1kZWNsYXJhdGlvbnM6IDAgKi9cbiAgICAgIGNvbnN0IHsgaXNEcmFnQWN0aXZlLCBkcmFnZ2VkRmlsZXMgfSA9IGFjdGlvblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGRyYWdnZWRGaWxlcyxcbiAgICAgICAgaXNEcmFnQWN0aXZlXG4gICAgICB9XG4gICAgY2FzZSAnc2V0RmlsZXMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGFjY2VwdGVkRmlsZXM6IGFjdGlvbi5hY2NlcHRlZEZpbGVzLFxuICAgICAgICByZWplY3RlZEZpbGVzOiBhY3Rpb24ucmVqZWN0ZWRGaWxlc1xuICAgICAgfVxuICAgIGNhc2UgJ3Jlc2V0JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBpc0ZpbGVEaWFsb2dBY3RpdmU6IGZhbHNlLFxuICAgICAgICBpc0RyYWdBY3RpdmU6IGZhbHNlLFxuICAgICAgICBkcmFnZ2VkRmlsZXM6IFtdXG4gICAgICB9XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzdGF0ZVxuICB9XG59XG4iXSwibmFtZXMiOlsiX19hd2FpdGVyIiwidGhpc0FyZyIsIl9hcmd1bWVudHMiLCJQIiwiZ2VuZXJhdG9yIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJmdWxmaWxsZWQiLCJ2YWx1ZSIsInN0ZXAiLCJuZXh0IiwiZSIsInJlamVjdGVkIiwicmVzdWx0IiwiZG9uZSIsInRoZW4iLCJhcHBseSIsIl9fZ2VuZXJhdG9yIiwiYm9keSIsImYiLCJ5IiwidCIsImciLCJfIiwibGFiZWwiLCJzZW50IiwidHJ5cyIsIm9wcyIsInZlcmIiLCJ0aHJvdyIsInJldHVybiIsIlN5bWJvbCIsIml0ZXJhdG9yIiwidGhpcyIsIm4iLCJ2Iiwib3AiLCJUeXBlRXJyb3IiLCJjYWxsIiwicG9wIiwibGVuZ3RoIiwicHVzaCIsIl9fcmVhZCIsIm8iLCJtIiwiciIsImkiLCJhciIsImVycm9yIiwiX19zcHJlYWQiLCJhcmd1bWVudHMiLCJjb25jYXQiLCJDT01NT05fTUlNRV9UWVBFUyIsIk1hcCIsInRvRmlsZVdpdGhQYXRoIiwiZmlsZSIsInBhdGgiLCJuYW1lIiwibGFzdEluZGV4T2YiLCJ0eXBlIiwiZXh0Iiwic3BsaXQiLCJ0b0xvd2VyQ2FzZSIsImdldCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5Iiwid3JpdGFibGUiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwid2l0aE1pbWVUeXBlIiwid2Via2l0UmVsYXRpdmVQYXRoIiwiRklMRVNfVE9fSUdOT1JFIiwiZnJvbUV2ZW50IiwiZXZ0IiwidHNsaWJfMS5fX2F3YWl0ZXIiLCJ0c2xpYl8xLl9fZ2VuZXJhdG9yIiwiX2EiLCJkYXRhVHJhbnNmZXIiLCJkdCIsIml0ZW1zIiwiZnJvbUxpc3QiLCJmaWx0ZXIiLCJpdGVtIiwia2luZCIsImFsbCIsIm1hcCIsInRvRmlsZVByb21pc2VzIiwibm9JZ25vcmVkRmlsZXMiLCJmbGF0dGVuIiwicmVkdWNlIiwiYWNjIiwiZmlsZXMiLCJ0c2xpYl8xLl9fc3ByZWFkIiwiQXJyYXkiLCJpc0FycmF5IiwiZ2V0RGF0YVRyYW5zZmVyRmlsZXMiLCJ0YXJnZXQiLCJpbmRleE9mIiwid2Via2l0R2V0QXNFbnRyeSIsImZyb21EYXRhVHJhbnNmZXJJdGVtIiwiZW50cnkiLCJpc0RpcmVjdG9yeSIsImZyb21EaXJFbnRyeSIsImdldEFzRmlsZSIsImZ3cCIsImZyb21FbnRyeSIsImZ1bGxQYXRoIiwiZXJyIiwiZnJvbUZpbGVFbnRyeSIsInJlYWRlciIsImNyZWF0ZVJlYWRlciIsImVudHJpZXMiLCJyZWFkRW50cmllcyIsIl90aGlzIiwiYmF0Y2giLCJlcnJfMSIsIm1vZHVsZSIsImV4cG9ydHMiLCJsIiwiYyIsImQiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwicCIsInMiLCJ3aW5kb3ciLCJNYXRoIiwic2VsZiIsIkZ1bmN0aW9uIiwiX19nIiwidmVyc2lvbiIsIl9fZSIsImEiLCJ0b1N0cmluZyIsInNsaWNlIiwidSIsInN0b3JlIiwiRiIsIkciLCJoIiwiUyIsIngiLCJCIiwiYiIsIlUiLCJjb3JlIiwiVyIsIlIiLCJyYW5kb20iLCJtaW4iLCJyZXBsYWNlIiwic29tZSIsInRyaW0iLCJjaGFyQXQiLCJlbmRzV2l0aCIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsInZhbHVlT2YiLCJpbnNwZWN0U291cmNlIiwiam9pbiIsIlN0cmluZyIsInciLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsImNlaWwiLCJmbG9vciIsImlzTmFOIiwiY29uc3RydWN0b3IiLCJmaWxlQWNjZXB0ZWQiLCJhY2NlcHQiLCJhY2NlcHRzIiwiaXNQcm9wYWdhdGlvblN0b3BwZWQiLCJldmVudCIsImNhbmNlbEJ1YmJsZSIsImlzRXZ0V2l0aEZpbGVzIiwidHlwZXMiLCJvbkRvY3VtZW50RHJhZ092ZXIiLCJwcmV2ZW50RGVmYXVsdCIsImNvbXBvc2VFdmVudEhhbmRsZXJzIiwiZm5zIiwiYXJncyIsImZuIiwiRHJvcHpvbmUiLCJmb3J3YXJkUmVmIiwicmVmIiwiY2hpbGRyZW4iLCJ1c2VEcm9wem9uZSIsIm9wZW4iLCJwcm9wcyIsInVzZUVmZmVjdCIsIl90eXBlb2YiLCJjdXJyZW50IiwiUmVhY3QiLCJGcmFnbWVudCIsImRpc3BsYXlOYW1lIiwiaW5pdGlhbFN0YXRlIiwiaXNGb2N1c2VkIiwicHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwiZnVuYyIsIm9uZU9mVHlwZSIsInN0cmluZyIsImFycmF5T2YiLCJtdWx0aXBsZSIsImJvb2wiLCJwcmV2ZW50RHJvcE9uRG9jdW1lbnQiLCJub0NsaWNrIiwibm9LZXlib2FyZCIsIm5vRHJhZyIsIm5vRHJhZ0V2ZW50c0J1YmJsaW5nIiwibWluU2l6ZSIsIm51bWJlciIsIm1heFNpemUiLCJkaXNhYmxlZCIsImdldEZpbGVzRnJvbUV2ZW50Iiwib25GaWxlRGlhbG9nQ2FuY2VsIiwib25EcmFnRW50ZXIiLCJvbkRyYWdMZWF2ZSIsIm9uRHJhZ092ZXIiLCJvbkRyb3AiLCJvbkRyb3BBY2NlcHRlZCIsIm9uRHJvcFJlamVjdGVkIiwiaXNGaWxlRGlhbG9nQWN0aXZlIiwiaXNEcmFnQWN0aXZlIiwiaXNEcmFnQWNjZXB0IiwiaXNEcmFnUmVqZWN0IiwiZHJhZ2dlZEZpbGVzIiwiYWNjZXB0ZWRGaWxlcyIsInJlamVjdGVkRmlsZXMiLCJJbmZpbml0eSIsInJvb3RSZWYiLCJ1c2VSZWYiLCJpbnB1dFJlZiIsInVzZVJlZHVjZXIiLCJyZWR1Y2VyIiwic3RhdGUiLCJkaXNwYXRjaCIsIm9wZW5GaWxlRGlhbG9nIiwiY2xpY2siLCJvbldpbmRvd0ZvY3VzIiwic2V0VGltZW91dCIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwib25LZXlEb3duQ2IiLCJ1c2VDYWxsYmFjayIsImlzRXF1YWxOb2RlIiwia2V5Q29kZSIsIm9uRm9jdXNDYiIsIm9uQmx1ckNiIiwib25DbGlja0NiIiwidXNlckFnZW50IiwibmF2aWdhdG9yIiwiaXNJZU9yRWRnZSIsImRyYWdUYXJnZXRzUmVmIiwib25Eb2N1bWVudERyb3AiLCJjb250YWlucyIsIm9uRHJhZ0VudGVyQ2IiLCJwZXJzaXN0Iiwic3RvcFByb3BhZ2F0aW9uIiwib25EcmFnT3ZlckNiIiwiZHJvcEVmZmVjdCIsIm9uRHJhZ0xlYXZlQ2IiLCJ0YXJnZXRzIiwib25Ecm9wQ2IiLCJmb3JFYWNoIiwic2l6ZSIsInNwbGljZSIsImNvbXBvc2VIYW5kbGVyIiwiY29tcG9zZUtleWJvYXJkSGFuZGxlciIsImNvbXBvc2VEcmFnSGFuZGxlciIsImdldFJvb3RQcm9wcyIsInVzZU1lbW8iLCJyZWZLZXkiLCJvbktleURvd24iLCJvbkZvY3VzIiwib25CbHVyIiwib25DbGljayIsInJlc3QiLCJ0YWJJbmRleCIsIm9uSW5wdXRFbGVtZW50Q2xpY2siLCJnZXRJbnB1dFByb3BzIiwib25DaGFuZ2UiLCJzdHlsZSIsImRpc3BsYXkiLCJhdXRvQ29tcGxldGUiLCJmaWxlQ291bnQiLCJpc011bHRpcGxlQWxsb3dlZCIsImV2ZXJ5IiwiYWN0aW9uIl0sIm1hcHBpbmdzIjoib2tFQWlFTyxTQUFTQSxFQUFVQyxFQUFTQyxFQUFZQyxFQUFHQyxHQUM5QyxPQUFPLElBQUtELElBQU1BLEVBQUlFLFVBQVUsU0FBVUMsRUFBU0MsR0FDL0MsU0FBU0MsRUFB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
|
|
1
|
+
!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports,require("react"),require("prop-types")):"function"==typeof define&&define.amd?define(["exports","react","prop-types"],n):n((e=e||self).reactDropzone={},e.React,e.PropTypes)}(this,function(e,ie,n){"use strict";var u="default"in ie?ie.default:ie;function c(e){return(c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function ue(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function r(n,e){var t=Object.keys(n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(n);e&&(r=r.filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})),t.push.apply(t,r)}return t}function ce(n){for(var e=1;e<arguments.length;e++){var t=null!=arguments[e]?arguments[e]:{};e%2?r(t,!0).forEach(function(e){ue(n,e,t[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):r(t).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))})}return n}function ae(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)t=i[r],0<=n.indexOf(t)||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)t=i[r],0<=n.indexOf(t)||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}function fe(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){if(!(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e)))return;var t=[],r=!0,o=!1,i=void 0;try{for(var u,c=e[Symbol.iterator]();!(r=(u=c.next()).done)&&(t.push(u.value),!n||t.length!==n);r=!0);}catch(e){o=!0,i=e}finally{try{r||null==c.return||c.return()}finally{if(o)throw i}}return t}(e,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function le(e){return function(e){if(Array.isArray(e)){for(var n=0,t=new Array(e.length);n<e.length;n++)t[n]=e[n];return t}}(e)||function(e){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e))return Array.from(e)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance")}()}function f(i,u,c,a){return new(c=c||Promise)(function(e,n){function t(e){try{o(a.next(e))}catch(e){n(e)}}function r(e){try{o(a.throw(e))}catch(e){n(e)}}function o(n){n.done?e(n.value):new c(function(e){e(n.value)}).then(t,r)}o((a=a.apply(i,u||[])).next())})}function l(t,r){var o,i,u,e,c={label:0,sent:function(){if(1&u[0])throw u[1];return u[1]},trys:[],ops:[]};return e={next:n(0),throw:n(1),return:n(2)},"function"==typeof Symbol&&(e[Symbol.iterator]=function(){return this}),e;function n(n){return function(e){return function(n){if(o)throw new TypeError("Generator is already executing.");for(;c;)try{if(o=1,i&&(u=2&n[0]?i.return:n[0]?i.throw||((u=i.return)&&u.call(i),0):i.next)&&!(u=u.call(i,n[1])).done)return u;switch(i=0,u&&(n=[2&n[0],u.value]),n[0]){case 0:case 1:u=n;break;case 4:return c.label++,{value:n[1],done:!1};case 5:c.label++,i=n[1],n=[0];continue;case 7:n=c.ops.pop(),c.trys.pop();continue;default:if(!(u=0<(u=c.trys).length&&u[u.length-1])&&(6===n[0]||2===n[0])){c=0;continue}if(3===n[0]&&(!u||n[1]>u[0]&&n[1]<u[3])){c.label=n[1];break}if(6===n[0]&&c.label<u[1]){c.label=u[1],u=n;break}if(u&&c.label<u[2]){c.label=u[2],c.ops.push(n);break}u[2]&&c.ops.pop(),c.trys.pop();continue}n=r.call(t,c)}catch(e){n=[6,e],i=0}finally{o=u=0}if(5&n[0])throw n[1];return{value:n[0]?n[1]:void 0,done:!0}}([n,e])}}}function t(e,n){var t="function"==typeof Symbol&&e[Symbol.iterator];if(!t)return e;var r,o,i=t.call(e),u=[];try{for(;(void 0===n||0<n--)&&!(r=i.next()).done;)u.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(t=i.return)&&t.call(i)}finally{if(o)throw o.error}}return u}function o(){for(var e=[],n=0;n<arguments.length;n++)e=e.concat(t(arguments[n]));return e}n=n&&n.hasOwnProperty("default")?n.default:n;var i=new Map([["avi","video/avi"],["gif","image/gif"],["ico","image/x-icon"],["jpeg","image/jpeg"],["jpg","image/jpeg"],["mkv","video/x-matroska"],["mov","video/quicktime"],["mp4","video/mp4"],["pdf","application/pdf"],["png","image/png"],["zip","application/zip"],["doc","application/msword"],["docx","application/vnd.openxmlformats-officedocument.wordprocessingml.document"]]);function a(e,n){var t=function(e){var n=e.name;if(n&&-1!==n.lastIndexOf(".")&&!e.type){var t=n.split(".").pop().toLowerCase(),r=i.get(t);r&&Object.defineProperty(e,"type",{value:r,writable:!1,configurable:!1,enumerable:!0})}return e}(e);if("string"!=typeof t.path){var r=e.webkitRelativePath;Object.defineProperty(t,"path",{value:"string"==typeof n?n:"string"==typeof r&&0<r.length?r:e.name,writable:!1,configurable:!1,enumerable:!0})}return t}var s=[".DS_Store","Thumbs.db"];function se(n){return f(this,void 0,void 0,function(){return l(this,function(e){return[2,function(e){return!!e.dataTransfer}(n)&&n.dataTransfer?function(t,r){return f(this,void 0,void 0,function(){var n;return l(this,function(e){switch(e.label){case 0:return t.items?(n=d(t.items).filter(function(e){return"file"===e.kind}),"drop"!==r?[2,n]:[4,Promise.all(n.map(v))]):[3,2];case 1:return[2,p(function t(e){return e.reduce(function(e,n){return o(e,Array.isArray(n)?t(n):[n])},[])}(e.sent()))];case 2:return[2,p(d(t.files).map(function(e){return a(e)}))]}})})}(n.dataTransfer,n.type):function(e){return(function(e){return null!==e}(e.target)&&e.target.files?d(e.target.files):[]).map(function(e){return a(e)})}(n)]})})}function p(e){return e.filter(function(e){return-1===s.indexOf(e.name)})}function d(e){for(var n=[],t=0;t<e.length;t++){var r=e[t];n.push(r)}return n}function v(e){if("function"!=typeof e.webkitGetAsEntry)return y(e);var n=e.webkitGetAsEntry();return n&&n.isDirectory?b(n):y(e)}function y(e){var n=e.getAsFile();if(!n)return Promise.reject(e+" is not a File");var t=a(n);return Promise.resolve(t)}function g(n){return f(this,void 0,void 0,function(){return l(this,function(e){return[2,n.isDirectory?b(n):function(r){return f(this,void 0,void 0,function(){return l(this,function(e){return[2,new Promise(function(t,n){r.file(function(e){var n=a(e,r.fullPath);t(n)},function(e){n(e)})})]})})}(n)]})})}function b(e){var n=e.createReader();return new Promise(function(u,c){var a=[];!function i(){var e=this;n.readEntries(function(o){return f(e,void 0,void 0,function(){var n,t,r;return l(this,function(e){switch(e.label){case 0:if(o.length)return[3,5];e.label=1;case 1:return e.trys.push([1,3,,4]),[4,Promise.all(a)];case 2:return n=e.sent(),u(n),[3,4];case 3:return t=e.sent(),c(t),[3,4];case 4:return[3,6];case 5:r=Promise.all(o.map(g)),a.push(r),i(),e.label=6;case 6:return[2]}})})},function(e){c(e)})}()})}var h,m,D=(function(e){function r(e){if(o[e])return o[e].exports;var n=o[e]={i:e,l:!1,exports:{}};return t[e].call(n.exports,n,n.exports,r),n.l=!0,n.exports}var t,o;e.exports=(o={},r.m=t=[function(e,n){var t=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=t)},function(e,n){e.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},function(e,n){var t=e.exports={version:"2.5.0"};"number"==typeof __e&&(__e=t)},function(e,n,t){e.exports=!t(4)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(e,n){e.exports=function(e){try{return!!e()}catch(e){return!0}}},function(e,n){var t={}.toString;e.exports=function(e){return t.call(e).slice(8,-1)}},function(e,n,t){var r=t(32)("wks"),o=t(9),i=t(0).Symbol,u="function"==typeof i;(e.exports=function(e){return r[e]||(r[e]=u&&i[e]||(u?i:o)("Symbol."+e))}).store=r},function(e,n,t){var y=t(0),g=t(2),b=t(8),h=t(22),m=t(10),D=function(e,n,t){var r,o,i,u,c=e&D.F,a=e&D.G,f=e&D.S,l=e&D.P,s=e&D.B,p=a?y:f?y[n]||(y[n]={}):(y[n]||{}).prototype,d=a?g:g[n]||(g[n]={}),v=d.prototype||(d.prototype={});for(r in a&&(t=n),t)i=((o=!c&&p&&void 0!==p[r])?p:t)[r],u=s&&o?m(i,y):l&&"function"==typeof i?m(Function.call,i):i,p&&h(p,r,i,e&D.U),d[r]!=i&&b(d,r,u),l&&v[r]!=i&&(v[r]=i)};y.core=g,D.F=1,D.G=2,D.S=4,D.P=8,D.B=16,D.W=32,D.U=64,D.R=128,e.exports=D},function(e,n,t){var r=t(16),o=t(21);e.exports=t(3)?function(e,n,t){return r.f(e,n,o(1,t))}:function(e,n,t){return e[n]=t,e}},function(e,n){var t=0,r=Math.random();e.exports=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++t+r).toString(36))}},function(e,n,t){var i=t(24);e.exports=function(r,o,e){if(i(r),void 0===o)return r;switch(e){case 1:return function(e){return r.call(o,e)};case 2:return function(e,n){return r.call(o,e,n)};case 3:return function(e,n,t){return r.call(o,e,n,t)}}return function(){return r.apply(o,arguments)}}},function(e,n){e.exports=function(e){if(null==e)throw TypeError("Can't call method on "+e);return e}},function(e,n,t){var r=t(28),o=Math.min;e.exports=function(e){return 0<e?o(r(e),9007199254740991):0}},function(e,n,t){n.__esModule=!0,n.default=function(e,n){if(e&&n){var t=Array.isArray(n)?n:n.split(","),r=e.name||"",o=e.type||"",i=o.replace(/\/.*$/,"");return t.some(function(e){var n=e.trim();return"."===n.charAt(0)?r.toLowerCase().endsWith(n.toLowerCase()):n.endsWith("/*")?i===n.replace(/\/.*$/,""):o===n})}return!0},t(14),t(34)},function(e,n,t){t(15),e.exports=t(2).Array.some},function(e,n,t){var r=t(7),o=t(25)(3);r(r.P+r.F*!t(33)([].some,!0),"Array",{some:function(e){return o(this,e,arguments[1])}})},function(e,n,t){var r=t(17),o=t(18),i=t(20),u=Object.defineProperty;n.f=t(3)?Object.defineProperty:function(e,n,t){if(r(e),n=i(n,!0),r(t),o)try{return u(e,n,t)}catch(e){}if("get"in t||"set"in t)throw TypeError("Accessors not supported!");return"value"in t&&(e[n]=t.value),e}},function(e,n,t){var r=t(1);e.exports=function(e){if(!r(e))throw TypeError(e+" is not an object!");return e}},function(e,n,t){e.exports=!t(3)&&!t(4)(function(){return 7!=Object.defineProperty(t(19)("div"),"a",{get:function(){return 7}}).a})},function(e,n,t){var r=t(1),o=t(0).document,i=r(o)&&r(o.createElement);e.exports=function(e){return i?o.createElement(e):{}}},function(e,n,t){var o=t(1);e.exports=function(e,n){if(!o(e))return e;var t,r;if(n&&"function"==typeof(t=e.toString)&&!o(r=t.call(e)))return r;if("function"==typeof(t=e.valueOf)&&!o(r=t.call(e)))return r;if(!n&&"function"==typeof(t=e.toString)&&!o(r=t.call(e)))return r;throw TypeError("Can't convert object to primitive value")}},function(e,n){e.exports=function(e,n){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:n}}},function(e,n,t){var i=t(0),u=t(8),c=t(23),a=t(9)("src"),r=Function.toString,f=(""+r).split("toString");t(2).inspectSource=function(e){return r.call(e)},(e.exports=function(e,n,t,r){var o="function"==typeof t;o&&(c(t,"name")||u(t,"name",n)),e[n]!==t&&(o&&(c(t,a)||u(t,a,e[n]?""+e[n]:f.join(String(n)))),e===i?e[n]=t:r?e[n]?e[n]=t:u(e,n,t):(delete e[n],u(e,n,t)))})(Function.prototype,"toString",function(){return"function"==typeof this&&this[a]||r.call(this)})},function(e,n){var t={}.hasOwnProperty;e.exports=function(e,n){return t.call(e,n)}},function(e,n){e.exports=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e}},function(e,n,t){var m=t(10),D=t(26),w=t(27),x=t(12),r=t(29);e.exports=function(s,e){var p=1==s,d=2==s,v=3==s,y=4==s,g=6==s,b=5==s||g,h=e||r;return function(e,n,t){for(var r,o,i=w(e),u=D(i),c=m(n,t,3),a=x(u.length),f=0,l=p?h(e,a):d?h(e,0):void 0;f<a;f++)if((b||f in u)&&(o=c(r=u[f],f,i),s))if(p)l[f]=o;else if(o)switch(s){case 3:return!0;case 5:return r;case 6:return f;case 2:l.push(r)}else if(y)return!1;return g?-1:v||y?y:l}}},function(e,n,t){var r=t(5);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==r(e)?e.split(""):Object(e)}},function(e,n,t){var r=t(11);e.exports=function(e){return Object(r(e))}},function(e,n){var t=Math.ceil,r=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(0<e?r:t)(e)}},function(e,n,t){var r=t(30);e.exports=function(e,n){return new(r(e))(n)}},function(e,n,t){var r=t(1),o=t(31),i=t(6)("species");e.exports=function(e){var n;return o(e)&&("function"!=typeof(n=e.constructor)||n!==Array&&!o(n.prototype)||(n=void 0),r(n)&&null===(n=n[i])&&(n=void 0)),void 0===n?Array:n}},function(e,n,t){var r=t(5);e.exports=Array.isArray||function(e){return"Array"==r(e)}},function(e,n,t){var r=t(0),o=r["__core-js_shared__"]||(r["__core-js_shared__"]={});e.exports=function(e){return o[e]||(o[e]={})}},function(e,n,t){var r=t(4);e.exports=function(e,n){return!!e&&r(function(){n?e.call(null,function(){},1):e.call(null)})}},function(e,n,t){t(35),e.exports=t(2).String.endsWith},function(e,n,t){var r=t(7),u=t(12),c=t(36),a="".endsWith;r(r.P+r.F*t(38)("endsWith"),"String",{endsWith:function(e){var n=c(this,e,"endsWith"),t=1<arguments.length?arguments[1]:void 0,r=u(n.length),o=void 0===t?r:Math.min(u(t),r),i=String(e);return a?a.call(n,i,o):n.slice(o-i.length,o)===i}})},function(e,n,t){var r=t(37),o=t(11);e.exports=function(e,n,t){if(r(n))throw TypeError("String#"+t+" doesn't accept regex!");return String(o(e))}},function(e,n,t){var r=t(1),o=t(5),i=t(6)("match");e.exports=function(e){var n;return r(e)&&(void 0!==(n=e[i])?!!n:"RegExp"==o(e))}},function(e,n,t){var r=t(6)("match");e.exports=function(n){var t=/./;try{"/./"[n](t)}catch(e){try{return t[r]=!1,!"/./"[n](t)}catch(n){}}return!0}}],r.c=o,r.d=function(e,n,t){r.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:t})},r.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(n,"a",n),n},r.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},r.p="",r(r.s=13))}(h={exports:{}},h.exports),h.exports),w=(m=D)&&m.__esModule&&Object.prototype.hasOwnProperty.call(m,"default")?m.default:m;function pe(e,n){return"application/x-moz-file"===e.type||w(e,n)}function de(e,n,t){return e.size<=n&&e.size>=t}function ve(e){return"function"==typeof e.isPropagationStopped?e.isPropagationStopped():void 0!==e.cancelBubble&&e.cancelBubble}function ye(e){return e.dataTransfer?Array.prototype.some.call(e.dataTransfer.types,function(e){return"Files"===e||"application/x-moz-file"===e}):!!e.target&&!!e.target.files}function ge(e){e.preventDefault()}function be(){for(var e=arguments.length,o=new Array(e),n=0;n<e;n++)o[n]=arguments[n];return function(n){for(var e=arguments.length,t=new Array(1<e?e-1:0),r=1;r<e;r++)t[r-1]=arguments[r];return o.some(function(e){return!ve(n)&&e&&e.apply(void 0,[n].concat(t)),ve(n)})}}var x=ie.forwardRef(function(e,n){var t=e.children,r=O(ae(e,["children"])),o=r.open,i=ae(r,["open"]);return ie.useEffect(function(){return"function"==typeof n?n({open:o}):"object"===c(n)&&null!==n&&(n.current={open:o}),function(){"function"==typeof n?n(null):"object"===c(n)&&null!==n&&(n.current=null)}},[n]),u.createElement(ie.Fragment,null,t(ce({},i,{open:o})))});x.displayName="Dropzone";var he={isFocused:!(x.propTypes={children:n.func,accept:n.oneOfType([n.string,n.arrayOf(n.string)]),multiple:n.bool,preventDropOnDocument:n.bool,noClick:n.bool,noKeyboard:n.bool,noDrag:n.bool,noDragEventsBubbling:n.bool,minSize:n.number,maxSize:n.number,disabled:n.bool,getFilesFromEvent:n.func,onFileDialogCancel:n.func,onDragEnter:n.func,onDragLeave:n.func,onDragOver:n.func,onDrop:n.func,onDropAccepted:n.func,onDropRejected:n.func}),isFileDialogActive:!1,isDragActive:!1,isDragAccept:!1,isDragReject:!1,draggedFiles:[],acceptedFiles:[],rejectedFiles:[]};function O(){function n(){_.current&&(R({type:"openDialog"}),_.current.value=null,_.current.click())}function e(){L&&setTimeout(function(){_.current&&(_.current.files.length||(R({type:"closeDialog"}),"function"==typeof D&&D()))},300)}var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{},u=t.accept,r=t.disabled,p=void 0!==r&&r,o=t.getFilesFromEvent,i=void 0===o?se:o,c=t.maxSize,a=void 0===c?1/0:c,f=t.minSize,l=void 0===f?0:f,s=t.multiple,d=void 0===s||s,v=t.onDragEnter,y=t.onDragLeave,g=t.onDragOver,b=t.onDrop,h=t.onDropAccepted,m=t.onDropRejected,D=t.onFileDialogCancel,w=t.preventDropOnDocument,x=void 0===w||w,O=t.noClick,j=void 0!==O&&O,F=t.noKeyboard,S=void 0!==F&&F,P=t.noDrag,A=void 0!==P&&P,E=t.noDragEventsBubbling,k=void 0!==E&&E,C=ie.useRef(null),_=ie.useRef(null),T=fe(ie.useReducer(me,he),2),M=T[0],R=T[1],z=M.isFocused,L=M.isFileDialogActive,B=M.draggedFiles;ie.useEffect(function(){return window.addEventListener("focus",e,!1),function(){window.removeEventListener("focus",e,!1)}},[_,L,D]);function I(e){C.current&&C.current.contains(e.target)||(e.preventDefault(),N.current=[])}var K=ie.useCallback(function(e){C.current&&C.current.isEqualNode(e.target)&&(32!==e.keyCode&&13!==e.keyCode||(e.preventDefault(),n()))},[C,_]),W=ie.useCallback(function(){R({type:"focus"})},[]),G=ie.useCallback(function(){R({type:"blur"})},[]),q=ie.useCallback(function(){j||(!function(e){var n=0<arguments.length&&void 0!==e?e:window.navigator.userAgent;return function(e){return-1!==e.indexOf("MSIE")||-1!==e.indexOf("Trident/")}(n)||function(e){return-1!==e.indexOf("Edge/")}(n)}()?n():setTimeout(n,0))},[_,j]),N=ie.useRef([]);ie.useEffect(function(){return x&&(document.addEventListener("dragover",ge,!1),document.addEventListener("drop",I,!1)),function(){x&&(document.removeEventListener("dragover",ge),document.removeEventListener("drop",I))}},[C,x]);function U(e){return p?null:e}function $(e){return S?null:U(e)}function H(e){return A?null:U(e)}var J=ie.useCallback(function(n){n.preventDefault(),n.persist(),Y(n),-1===N.current.indexOf(n.target)&&(N.current=[].concat(le(N.current),[n.target])),ye(n)&&Promise.resolve(i(n)).then(function(e){ve(n)&&!k||(R({draggedFiles:e,isDragActive:!0,type:"setDraggedFiles"}),v&&v(n))})},[i,v,k]),Q=ie.useCallback(function(e){if(e.preventDefault(),e.persist(),Y(e),e.dataTransfer)try{e.dataTransfer.dropEffect="copy"}catch(e){}return ye(e)&&g&&g(e),!1},[g,k]),V=ie.useCallback(function(n){n.preventDefault(),n.persist(),Y(n);var e=N.current.filter(function(e){return e!==n.target&&C.current&&C.current.contains(e)});0<(N.current=e).length||(R({isDragActive:!1,type:"setDraggedFiles",draggedFiles:[]}),ye(n)&&y&&y(n))},[C,y,k]),X=ie.useCallback(function(r){r.preventDefault(),r.persist(),Y(r),N.current=[],R({type:"reset"}),ye(r)&&Promise.resolve(i(r)).then(function(e){if(!ve(r)||k){var n=[],t=[];e.forEach(function(e){pe(e,u)&&de(e,a,l)?n.push(e):t.push(e)}),!d&&1<n.length&&t.push.apply(t,le(n.splice(0))),R({acceptedFiles:n,rejectedFiles:t,type:"setFiles"}),b&&b(n,t,r),0<t.length&&m&&m(t,r),0<n.length&&h&&h(n,r)}})},[d,u,l,a,i,b,h,m,k]),Y=function(e){k&&e.stopPropagation()},Z=ie.useMemo(function(){return function(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{},n=e.refKey,t=void 0===n?"ref":n,r=e.onKeyDown,o=e.onFocus,i=e.onBlur,u=e.onClick,c=e.onDragEnter,a=e.onDragOver,f=e.onDragLeave,l=e.onDrop,s=ae(e,["refKey","onKeyDown","onFocus","onBlur","onClick","onDragEnter","onDragOver","onDragLeave","onDrop"]);return ce(ue({onKeyDown:$(be(r,K)),onFocus:$(be(o,W)),onBlur:$(be(i,G)),onClick:U(be(u,q)),onDragEnter:H(be(c,J)),onDragOver:H(be(a,Q)),onDragLeave:H(be(f,V)),onDrop:H(be(l,X))},t,C),p||S?{}:{tabIndex:0},{},s)}},[C,K,W,G,q,J,Q,V,X,S,A,p]),ee=ie.useCallback(function(e){e.stopPropagation()},[]),ne=ie.useMemo(function(){return function(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{},n=e.refKey,t=void 0===n?"ref":n,r=e.onChange,o=e.onClick,i=ae(e,["refKey","onChange","onClick"]);return ce({},ue({accept:u,multiple:d,type:"file",style:{display:"none"},onChange:U(be(r,X)),onClick:U(be(o,ee)),autoComplete:"off",tabIndex:-1},t,_),{},i)}},[_,u,d,X,p]),te=B.length,re=d||te<=1,oe=0<te&&function(e,n,t,r){return e.every(function(e){return pe(e,n)&&de(e,t,r)})}(B,u,a,l);return ce({},M,{isDragAccept:oe,isDragReject:0<te&&(!oe||!re),isFocused:z&&!p,getRootProps:Z,getInputProps:ne,rootRef:C,inputRef:_,open:U(n)})}function me(e,n){switch(n.type){case"focus":return ce({},e,{isFocused:!0});case"blur":return ce({},e,{isFocused:!1});case"openDialog":return ce({},e,{isFileDialogActive:!0});case"closeDialog":return ce({},e,{isFileDialogActive:!1});case"setDraggedFiles":var t=n.isDragActive;return ce({},e,{draggedFiles:n.draggedFiles,isDragActive:t});case"setFiles":return ce({},e,{acceptedFiles:n.acceptedFiles,rejectedFiles:n.rejectedFiles});case"reset":return ce({},e,{isFileDialogActive:!1,isDragActive:!1,draggedFiles:[]});default:return e}}e.default=x,e.useDropzone=O,Object.defineProperty(e,"__esModule",{value:!0})});
|
|
2
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiLCIuLi9ub2RlX21vZHVsZXMvZmlsZS1zZWxlY3Rvci9kaXN0L2VzNS9maWxlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2ZpbGUtc2VsZWN0b3IvZGlzdC9lczUvZmlsZS1zZWxlY3Rvci5qcyIsIi4uL25vZGVfbW9kdWxlcy9hdHRyLWFjY2VwdC9kaXN0L2luZGV4LmpzIiwiLi4vc3JjL3V0aWxzL2luZGV4LmpzIiwiLi4vc3JjL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlXHJcbnRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlXHJcbkxpY2Vuc2UgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXHJcblxyXG5USElTIENPREUgSVMgUFJPVklERUQgT04gQU4gKkFTIElTKiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZXHJcbktJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gQU5ZIElNUExJRURcclxuV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSxcclxuTUVSQ0hBTlRBQkxJVFkgT1IgTk9OLUlORlJJTkdFTUVOVC5cclxuXHJcblNlZSB0aGUgQXBhY2hlIFZlcnNpb24gMi4wIExpY2Vuc2UgZm9yIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9uc1xyXG5hbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlICovXHJcblxyXG52YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uKGQsIGIpIHtcclxuICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcclxuICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XHJcbiAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07IH07XHJcbiAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2V4dGVuZHMoZCwgYikge1xyXG4gICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxyXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG59XHJcblxyXG5leHBvcnQgdmFyIF9fYXNzaWduID0gZnVuY3Rpb24oKSB7XHJcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xyXG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdDtcclxuICAgIH1cclxuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19yZXN0KHMsIGUpIHtcclxuICAgIHZhciB0ID0ge307XHJcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcclxuICAgICAgICB0W3BdID0gc1twXTtcclxuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcclxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xyXG4gICAgICAgIH1cclxuICAgIHJldHVybiB0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xyXG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xyXG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcGFyYW0ocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7IGRlY29yYXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0ZXIodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHJlc3VsdC52YWx1ZSk7IH0pLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcclxuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XHJcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xyXG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcclxuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xyXG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XHJcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxyXG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHBvcnRTdGFyKG0sIGV4cG9ydHMpIHtcclxuICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKCFleHBvcnRzLmhhc093blByb3BlcnR5KHApKSBleHBvcnRzW3BdID0gbVtwXTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fdmFsdWVzKG8pIHtcclxuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXSwgaSA9IDA7XHJcbiAgICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xyXG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVhZChvLCBuKSB7XHJcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XHJcbiAgICBpZiAoIW0pIHJldHVybiBvO1xyXG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XHJcbiAgICBmaW5hbGx5IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZCgpIHtcclxuICAgIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIGFyID0gYXIuY29uY2F0KF9fcmVhZChhcmd1bWVudHNbaV0pKTtcclxuICAgIHJldHVybiBhcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXlzKCkge1xyXG4gICAgZm9yICh2YXIgcyA9IDAsIGkgPSAwLCBpbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKSBzICs9IGFyZ3VtZW50c1tpXS5sZW5ndGg7XHJcbiAgICBmb3IgKHZhciByID0gQXJyYXkocyksIGsgPSAwLCBpID0gMDsgaSA8IGlsOyBpKyspXHJcbiAgICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXHJcbiAgICAgICAgICAgIHJba10gPSBhW2pdO1xyXG4gICAgcmV0dXJuIHI7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdCh2KSB7XHJcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpZiAoZ1tuXSkgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxyXG4gICAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyB9XHJcbiAgICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jRGVsZWdhdG9yKG8pIHtcclxuICAgIHZhciBpLCBwO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpW25dID0gb1tuXSA/IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IG4gPT09IFwicmV0dXJuXCIgfSA6IGYgPyBmKHYpIDogdjsgfSA6IGY7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNWYWx1ZXMobykge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGk7XHJcbiAgICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaSk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaVtuXSA9IG9bbl0gJiYgZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdiA9IG9bbl0odiksIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7IH0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCBkLCB2KSB7IFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGZ1bmN0aW9uKHYpIHsgcmVzb2x2ZSh7IHZhbHVlOiB2LCBkb25lOiBkIH0pOyB9LCByZWplY3QpOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ha2VUZW1wbGF0ZU9iamVjdChjb29rZWQsIHJhdykge1xyXG4gICAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29va2VkLCBcInJhd1wiLCB7IHZhbHVlOiByYXcgfSk7IH0gZWxzZSB7IGNvb2tlZC5yYXcgPSByYXc7IH1cclxuICAgIHJldHVybiBjb29rZWQ7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnRTdGFyKG1vZCkge1xyXG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcclxuICAgIHZhciByZXN1bHQgPSB7fTtcclxuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSByZXN1bHRba10gPSBtb2Rba107XHJcbiAgICByZXN1bHQuZGVmYXVsdCA9IG1vZDtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydERlZmF1bHQobW9kKSB7XHJcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IGRlZmF1bHQ6IG1vZCB9O1xyXG59XHJcbiIsImV4cG9ydCB2YXIgQ09NTU9OX01JTUVfVFlQRVMgPSBuZXcgTWFwKFtcbiAgICBbJ2F2aScsICd2aWRlby9hdmknXSxcbiAgICBbJ2dpZicsICdpbWFnZS9naWYnXSxcbiAgICBbJ2ljbycsICdpbWFnZS94LWljb24nXSxcbiAgICBbJ2pwZWcnLCAnaW1hZ2UvanBlZyddLFxuICAgIFsnanBnJywgJ2ltYWdlL2pwZWcnXSxcbiAgICBbJ21rdicsICd2aWRlby94LW1hdHJvc2thJ10sXG4gICAgWydtb3YnLCAndmlkZW8vcXVpY2t0aW1lJ10sXG4gICAgWydtcDQnLCAndmlkZW8vbXA0J10sXG4gICAgWydwZGYnLCAnYXBwbGljYXRpb24vcGRmJ10sXG4gICAgWydwbmcnLCAnaW1hZ2UvcG5nJ10sXG4gICAgWyd6aXAnLCAnYXBwbGljYXRpb24vemlwJ10sXG4gICAgWydkb2MnLCAnYXBwbGljYXRpb24vbXN3b3JkJ10sXG4gICAgWydkb2N4JywgJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLmRvY3VtZW50J11cbl0pO1xuZXhwb3J0IGZ1bmN0aW9uIHRvRmlsZVdpdGhQYXRoKGZpbGUsIHBhdGgpIHtcbiAgICB2YXIgZiA9IHdpdGhNaW1lVHlwZShmaWxlKTtcbiAgICBpZiAodHlwZW9mIGYucGF0aCAhPT0gJ3N0cmluZycpIHsgLy8gb24gZWxlY3Ryb24sIHBhdGggaXMgYWxyZWFkeSBzZXQgdG8gdGhlIGFic29sdXRlIHBhdGhcbiAgICAgICAgdmFyIHdlYmtpdFJlbGF0aXZlUGF0aCA9IGZpbGUud2Via2l0UmVsYXRpdmVQYXRoO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZiwgJ3BhdGgnLCB7XG4gICAgICAgICAgICB2YWx1ZTogdHlwZW9mIHBhdGggPT09ICdzdHJpbmcnXG4gICAgICAgICAgICAgICAgPyBwYXRoXG4gICAgICAgICAgICAgICAgLy8gSWYgPGlucHV0IHdlYmtpdGRpcmVjdG9yeT4gaXMgc2V0LFxuICAgICAgICAgICAgICAgIC8vIHRoZSBGaWxlIHdpbGwgaGF2ZSBhIHt3ZWJraXRSZWxhdGl2ZVBhdGh9IHByb3BlcnR5XG4gICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hUTUxJbnB1dEVsZW1lbnQvd2Via2l0ZGlyZWN0b3J5XG4gICAgICAgICAgICAgICAgOiB0eXBlb2Ygd2Via2l0UmVsYXRpdmVQYXRoID09PSAnc3RyaW5nJyAmJiB3ZWJraXRSZWxhdGl2ZVBhdGgubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgICAgICA/IHdlYmtpdFJlbGF0aXZlUGF0aFxuICAgICAgICAgICAgICAgICAgICA6IGZpbGUubmFtZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gZjtcbn1cbmZ1bmN0aW9uIHdpdGhNaW1lVHlwZShmaWxlKSB7XG4gICAgdmFyIG5hbWUgPSBmaWxlLm5hbWU7XG4gICAgdmFyIGhhc0V4dGVuc2lvbiA9IG5hbWUgJiYgbmFtZS5sYXN0SW5kZXhPZignLicpICE9PSAtMTtcbiAgICBpZiAoaGFzRXh0ZW5zaW9uICYmICFmaWxlLnR5cGUpIHtcbiAgICAgICAgdmFyIGV4dCA9IG5hbWUuc3BsaXQoJy4nKVxuICAgICAgICAgICAgLnBvcCgpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHZhciB0eXBlID0gQ09NTU9OX01JTUVfVFlQRVMuZ2V0KGV4dCk7XG4gICAgICAgIGlmICh0eXBlKSB7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZmlsZSwgJ3R5cGUnLCB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IHR5cGUsXG4gICAgICAgICAgICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZpbGU7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1maWxlLmpzLm1hcCIsImltcG9ydCAqIGFzIHRzbGliXzEgZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyB0b0ZpbGVXaXRoUGF0aCB9IGZyb20gJy4vZmlsZSc7XG52YXIgRklMRVNfVE9fSUdOT1JFID0gW1xuICAgIC8vIFRodW1ibmFpbCBjYWNoZSBmaWxlcyBmb3IgbWFjT1MgYW5kIFdpbmRvd3NcbiAgICAnLkRTX1N0b3JlJyxcbiAgICAnVGh1bWJzLmRiJyAvLyBXaW5kb3dzXG5dO1xuLyoqXG4gKiBDb252ZXJ0IGEgRHJhZ0V2ZW50J3MgRGF0YVRyYXNmZXIgb2JqZWN0IHRvIGEgbGlzdCBvZiBGaWxlIG9iamVjdHNcbiAqIE5PVEU6IElmIHNvbWUgb2YgdGhlIGl0ZW1zIGFyZSBmb2xkZXJzLFxuICogZXZlcnl0aGluZyB3aWxsIGJlIGZsYXR0ZW5lZCBhbmQgcGxhY2VkIGluIHRoZSBzYW1lIGxpc3QgYnV0IHRoZSBwYXRocyB3aWxsIGJlIGtlcHQgYXMgYSB7cGF0aH0gcHJvcGVydHkuXG4gKiBAcGFyYW0gZXZ0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmcm9tRXZlbnQoZXZ0KSB7XG4gICAgcmV0dXJuIHRzbGliXzEuX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0c2xpYl8xLl9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIGlzRHJhZ0V2dChldnQpICYmIGV2dC5kYXRhVHJhbnNmZXJcbiAgICAgICAgICAgICAgICAgICAgPyBnZXREYXRhVHJhbnNmZXJGaWxlcyhldnQuZGF0YVRyYW5zZmVyLCBldnQudHlwZSlcbiAgICAgICAgICAgICAgICAgICAgOiBnZXRJbnB1dEZpbGVzKGV2dCldO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGlzRHJhZ0V2dCh2YWx1ZSkge1xuICAgIHJldHVybiAhIXZhbHVlLmRhdGFUcmFuc2Zlcjtcbn1cbmZ1bmN0aW9uIGdldElucHV0RmlsZXMoZXZ0KSB7XG4gICAgdmFyIGZpbGVzID0gaXNJbnB1dChldnQudGFyZ2V0KVxuICAgICAgICA/IGV2dC50YXJnZXQuZmlsZXNcbiAgICAgICAgICAgID8gZnJvbUxpc3QoZXZ0LnRhcmdldC5maWxlcylcbiAgICAgICAgICAgIDogW11cbiAgICAgICAgOiBbXTtcbiAgICByZXR1cm4gZmlsZXMubWFwKGZ1bmN0aW9uIChmaWxlKSB7IHJldHVybiB0b0ZpbGVXaXRoUGF0aChmaWxlKTsgfSk7XG59XG5mdW5jdGlvbiBpc0lucHV0KHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlICE9PSBudWxsO1xufVxuZnVuY3Rpb24gZ2V0RGF0YVRyYW5zZmVyRmlsZXMoZHQsIHR5cGUpIHtcbiAgICByZXR1cm4gdHNsaWJfMS5fX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGl0ZW1zLCBmaWxlcztcbiAgICAgICAgcmV0dXJuIHRzbGliXzEuX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKF9hLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICBpZiAoIWR0Lml0ZW1zKSByZXR1cm4gWzMgLypicmVhayovLCAyXTtcbiAgICAgICAgICAgICAgICAgICAgaXRlbXMgPSBmcm9tTGlzdChkdC5pdGVtcylcbiAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHsgcmV0dXJuIGl0ZW0ua2luZCA9PT0gJ2ZpbGUnOyB9KTtcbiAgICAgICAgICAgICAgICAgICAgLy8gQWNjb3JkaW5nIHRvIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2RuZC5odG1sI2RuZGV2ZW50cyxcbiAgICAgICAgICAgICAgICAgICAgLy8gb25seSAnZHJhZ3N0YXJ0JyBhbmQgJ2Ryb3AnIGhhcyBhY2Nlc3MgdG8gdGhlIGRhdGEgKHNvdXJjZSBub2RlKVxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZSAhPT0gJ2Ryb3AnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgaXRlbXNdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIFByb21pc2UuYWxsKGl0ZW1zLm1hcCh0b0ZpbGVQcm9taXNlcykpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIGZpbGVzID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgbm9JZ25vcmVkRmlsZXMoZmxhdHRlbihmaWxlcykpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBbMiAvKnJldHVybiovLCBub0lnbm9yZWRGaWxlcyhmcm9tTGlzdChkdC5maWxlcylcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKGZpbGUpIHsgcmV0dXJuIHRvRmlsZVdpdGhQYXRoKGZpbGUpOyB9KSldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIG5vSWdub3JlZEZpbGVzKGZpbGVzKSB7XG4gICAgcmV0dXJuIGZpbGVzLmZpbHRlcihmdW5jdGlvbiAoZmlsZSkgeyByZXR1cm4gRklMRVNfVE9fSUdOT1JFLmluZGV4T2YoZmlsZS5uYW1lKSA9PT0gLTE7IH0pO1xufVxuLy8gSUUxMSBkb2VzIG5vdCBzdXBwb3J0IEFycmF5LmZyb20oKVxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvQXJyYXkvZnJvbSNCcm93c2VyX2NvbXBhdGliaWxpdHlcbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9GaWxlTGlzdFxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0RhdGFUcmFuc2Zlckl0ZW1MaXN0XG5mdW5jdGlvbiBmcm9tTGlzdChpdGVtcykge1xuICAgIHZhciBmaWxlcyA9IFtdO1xuICAgIC8vIHRzbGludDpkaXNhYmxlOiBwcmVmZXItZm9yLW9mXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZmlsZSA9IGl0ZW1zW2ldO1xuICAgICAgICBmaWxlcy5wdXNoKGZpbGUpO1xuICAgIH1cbiAgICByZXR1cm4gZmlsZXM7XG59XG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRGF0YVRyYW5zZmVySXRlbVxuZnVuY3Rpb24gdG9GaWxlUHJvbWlzZXMoaXRlbSkge1xuICAgIGlmICh0eXBlb2YgaXRlbS53ZWJraXRHZXRBc0VudHJ5ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBmcm9tRGF0YVRyYW5zZmVySXRlbShpdGVtKTtcbiAgICB9XG4gICAgdmFyIGVudHJ5ID0gaXRlbS53ZWJraXRHZXRBc0VudHJ5KCk7XG4gICAgLy8gU2FmYXJpIHN1cHBvcnRzIGRyb3BwaW5nIGFuIGltYWdlIG5vZGUgZnJvbSBhIGRpZmZlcmVudCB3aW5kb3cgYW5kIGNhbiBiZSByZXRyaWV2ZWQgdXNpbmdcbiAgICAvLyB0aGUgRGF0YVRyYW5zZmVySXRlbS5nZXRBc0ZpbGUoKSBBUElcbiAgICAvLyBOT1RFOiBGaWxlU3lzdGVtRW50cnkuZmlsZSgpIHRocm93cyBpZiB0cnlpbmcgdG8gZ2V0IHRoZSBmaWxlXG4gICAgaWYgKGVudHJ5ICYmIGVudHJ5LmlzRGlyZWN0b3J5KSB7XG4gICAgICAgIHJldHVybiBmcm9tRGlyRW50cnkoZW50cnkpO1xuICAgIH1cbiAgICByZXR1cm4gZnJvbURhdGFUcmFuc2Zlckl0ZW0oaXRlbSk7XG59XG5mdW5jdGlvbiBmbGF0dGVuKGl0ZW1zKSB7XG4gICAgcmV0dXJuIGl0ZW1zLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBmaWxlcykgeyByZXR1cm4gdHNsaWJfMS5fX3NwcmVhZChhY2MsIChBcnJheS5pc0FycmF5KGZpbGVzKSA/IGZsYXR0ZW4oZmlsZXMpIDogW2ZpbGVzXSkpOyB9LCBbXSk7XG59XG5mdW5jdGlvbiBmcm9tRGF0YVRyYW5zZmVySXRlbShpdGVtKSB7XG4gICAgdmFyIGZpbGUgPSBpdGVtLmdldEFzRmlsZSgpO1xuICAgIGlmICghZmlsZSkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoaXRlbSArIFwiIGlzIG5vdCBhIEZpbGVcIik7XG4gICAgfVxuICAgIHZhciBmd3AgPSB0b0ZpbGVXaXRoUGF0aChmaWxlKTtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZ3cCk7XG59XG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRmlsZVN5c3RlbUVudHJ5XG5mdW5jdGlvbiBmcm9tRW50cnkoZW50cnkpIHtcbiAgICByZXR1cm4gdHNsaWJfMS5fX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRzbGliXzEuX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgZW50cnkuaXNEaXJlY3RvcnkgPyBmcm9tRGlyRW50cnkoZW50cnkpIDogZnJvbUZpbGVFbnRyeShlbnRyeSldO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9GaWxlU3lzdGVtRGlyZWN0b3J5RW50cnlcbmZ1bmN0aW9uIGZyb21EaXJFbnRyeShlbnRyeSkge1xuICAgIHZhciByZWFkZXIgPSBlbnRyeS5jcmVhdGVSZWFkZXIoKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICB2YXIgZW50cmllcyA9IFtdO1xuICAgICAgICBmdW5jdGlvbiByZWFkRW50cmllcygpIHtcbiAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRmlsZVN5c3RlbURpcmVjdG9yeUVudHJ5L2NyZWF0ZVJlYWRlclxuICAgICAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0ZpbGVTeXN0ZW1EaXJlY3RvcnlSZWFkZXIvcmVhZEVudHJpZXNcbiAgICAgICAgICAgIHJlYWRlci5yZWFkRW50cmllcyhmdW5jdGlvbiAoYmF0Y2gpIHsgcmV0dXJuIHRzbGliXzEuX19hd2FpdGVyKF90aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBmaWxlcywgZXJyXzEsIGl0ZW1zO1xuICAgICAgICAgICAgICAgIHJldHVybiB0c2xpYl8xLl9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKF9hLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhYmF0Y2gubGVuZ3RoKSByZXR1cm4gWzMgLypicmVhayovLCA1XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYS5sYWJlbCA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2EudHJ5cy5wdXNoKFsxLCAzLCAsIDRdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCBQcm9taXNlLmFsbChlbnRyaWVzKV07XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXMgPSBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmaWxlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszIC8qYnJlYWsqLywgNF07XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyXzEgPSBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycl8xKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMgLypicmVhayovLCA0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFszIC8qYnJlYWsqLywgNl07XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMgPSBQcm9taXNlLmFsbChiYXRjaC5tYXAoZnJvbUVudHJ5KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cmllcy5wdXNoKGl0ZW1zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDb250aW51ZSByZWFkaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZEVudHJpZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYS5sYWJlbCA9IDY7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDY6IHJldHVybiBbMiAvKnJldHVybiovXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7IH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJlYWRFbnRyaWVzKCk7XG4gICAgfSk7XG59XG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRmlsZVN5c3RlbUZpbGVFbnRyeVxuZnVuY3Rpb24gZnJvbUZpbGVFbnRyeShlbnRyeSkge1xuICAgIHJldHVybiB0c2xpYl8xLl9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdHNsaWJfMS5fX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIGVudHJ5LmZpbGUoZnVuY3Rpb24gKGZpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmd3AgPSB0b0ZpbGVXaXRoUGF0aChmaWxlLCBlbnRyeS5mdWxsUGF0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZ3cCk7XG4gICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KV07XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZmlsZS1zZWxlY3Rvci5qcy5tYXAiLCJtb2R1bGUuZXhwb3J0cz1mdW5jdGlvbih0KXtmdW5jdGlvbiBuKGUpe2lmKHJbZV0pcmV0dXJuIHJbZV0uZXhwb3J0czt2YXIgbz1yW2VdPXtpOmUsbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gdFtlXS5jYWxsKG8uZXhwb3J0cyxvLG8uZXhwb3J0cyxuKSxvLmw9ITAsby5leHBvcnRzfXZhciByPXt9O3JldHVybiBuLm09dCxuLmM9cixuLmQ9ZnVuY3Rpb24odCxyLGUpe24ubyh0LHIpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxyLHtjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCxnZXQ6ZX0pfSxuLm49ZnVuY3Rpb24odCl7dmFyIHI9dCYmdC5fX2VzTW9kdWxlP2Z1bmN0aW9uKCl7cmV0dXJuIHQuZGVmYXVsdH06ZnVuY3Rpb24oKXtyZXR1cm4gdH07cmV0dXJuIG4uZChyLFwiYVwiLHIpLHJ9LG4ubz1mdW5jdGlvbih0LG4pe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKX0sbi5wPVwiXCIsbihuLnM9MTMpfShbZnVuY3Rpb24odCxuKXt2YXIgcj10LmV4cG9ydHM9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdyYmd2luZG93Lk1hdGg9PU1hdGg/d2luZG93OlwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmJiZzZWxmLk1hdGg9PU1hdGg/c2VsZjpGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7XCJudW1iZXJcIj09dHlwZW9mIF9fZyYmKF9fZz1yKX0sZnVuY3Rpb24odCxuKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIHQ/bnVsbCE9PXQ6XCJmdW5jdGlvblwiPT10eXBlb2YgdH19LGZ1bmN0aW9uKHQsbil7dmFyIHI9dC5leHBvcnRzPXt2ZXJzaW9uOlwiMi41LjBcIn07XCJudW1iZXJcIj09dHlwZW9mIF9fZSYmKF9fZT1yKX0sZnVuY3Rpb24odCxuLHIpe3QuZXhwb3J0cz0hcig0KShmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sXCJhXCIse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pLmF9KX0sZnVuY3Rpb24odCxuKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dHJ5e3JldHVybiEhdCgpfWNhdGNoKHQpe3JldHVybiEwfX19LGZ1bmN0aW9uKHQsbil7dmFyIHI9e30udG9TdHJpbmc7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiByLmNhbGwodCkuc2xpY2UoOCwtMSl9fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigzMikoXCJ3a3NcIiksbz1yKDkpLGk9cigwKS5TeW1ib2wsdT1cImZ1bmN0aW9uXCI9PXR5cGVvZiBpOyh0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGVbdF18fChlW3RdPXUmJmlbdF18fCh1P2k6bykoXCJTeW1ib2wuXCIrdCkpfSkuc3RvcmU9ZX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMCksbz1yKDIpLGk9cig4KSx1PXIoMjIpLGM9cigxMCksZj1mdW5jdGlvbih0LG4scil7dmFyIGEscyxwLGwsdj10JmYuRix5PXQmZi5HLGg9dCZmLlMsZD10JmYuUCx4PXQmZi5CLGc9eT9lOmg/ZVtuXXx8KGVbbl09e30pOihlW25dfHx7fSkucHJvdG90eXBlLG09eT9vOm9bbl18fChvW25dPXt9KSxiPW0ucHJvdG90eXBlfHwobS5wcm90b3R5cGU9e30pO3kmJihyPW4pO2ZvcihhIGluIHIpcz0hdiYmZyYmdm9pZCAwIT09Z1thXSxwPShzP2c6cilbYV0sbD14JiZzP2MocCxlKTpkJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBwP2MoRnVuY3Rpb24uY2FsbCxwKTpwLGcmJnUoZyxhLHAsdCZmLlUpLG1bYV0hPXAmJmkobSxhLGwpLGQmJmJbYV0hPXAmJihiW2FdPXApfTtlLmNvcmU9byxmLkY9MSxmLkc9MixmLlM9NCxmLlA9OCxmLkI9MTYsZi5XPTMyLGYuVT02NCxmLlI9MTI4LHQuZXhwb3J0cz1mfSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigxNiksbz1yKDIxKTt0LmV4cG9ydHM9cigzKT9mdW5jdGlvbih0LG4scil7cmV0dXJuIGUuZih0LG4sbygxLHIpKX06ZnVuY3Rpb24odCxuLHIpe3JldHVybiB0W25dPXIsdH19LGZ1bmN0aW9uKHQsbil7dmFyIHI9MCxlPU1hdGgucmFuZG9tKCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVyblwiU3ltYm9sKFwiLmNvbmNhdCh2b2lkIDA9PT10P1wiXCI6dCxcIilfXCIsKCsrcitlKS50b1N0cmluZygzNikpfX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMjQpO3QuZXhwb3J0cz1mdW5jdGlvbih0LG4scil7aWYoZSh0KSx2b2lkIDA9PT1uKXJldHVybiB0O3N3aXRjaChyKXtjYXNlIDE6cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiB0LmNhbGwobixyKX07Y2FzZSAyOnJldHVybiBmdW5jdGlvbihyLGUpe3JldHVybiB0LmNhbGwobixyLGUpfTtjYXNlIDM6cmV0dXJuIGZ1bmN0aW9uKHIsZSxvKXtyZXR1cm4gdC5jYWxsKG4scixlLG8pfX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdC5hcHBseShuLGFyZ3VtZW50cyl9fX0sZnVuY3Rpb24odCxuKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYodm9pZCAwPT10KXRocm93IFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uICBcIit0KTtyZXR1cm4gdH19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDI4KSxvPU1hdGgubWluO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdD4wP28oZSh0KSw5MDA3MTk5MjU0NzQwOTkxKTowfX0sZnVuY3Rpb24odCxuLHIpe1widXNlIHN0cmljdFwiO24uX19lc01vZHVsZT0hMCxuLmRlZmF1bHQ9ZnVuY3Rpb24odCxuKXtpZih0JiZuKXt2YXIgcj1BcnJheS5pc0FycmF5KG4pP246bi5zcGxpdChcIixcIiksZT10Lm5hbWV8fFwiXCIsbz10LnR5cGV8fFwiXCIsaT1vLnJlcGxhY2UoL1xcLy4qJC8sXCJcIik7cmV0dXJuIHIuc29tZShmdW5jdGlvbih0KXt2YXIgbj10LnRyaW0oKTtyZXR1cm5cIi5cIj09PW4uY2hhckF0KDApP2UudG9Mb3dlckNhc2UoKS5lbmRzV2l0aChuLnRvTG93ZXJDYXNlKCkpOm4uZW5kc1dpdGgoXCIvKlwiKT9pPT09bi5yZXBsYWNlKC9cXC8uKiQvLFwiXCIpOm89PT1ufSl9cmV0dXJuITB9LHIoMTQpLHIoMzQpfSxmdW5jdGlvbih0LG4scil7cigxNSksdC5leHBvcnRzPXIoMikuQXJyYXkuc29tZX0sZnVuY3Rpb24odCxuLHIpe1widXNlIHN0cmljdFwiO3ZhciBlPXIoNyksbz1yKDI1KSgzKTtlKGUuUCtlLkYqIXIoMzMpKFtdLnNvbWUsITApLFwiQXJyYXlcIix7c29tZTpmdW5jdGlvbih0KXtyZXR1cm4gbyh0aGlzLHQsYXJndW1lbnRzWzFdKX19KX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMTcpLG89cigxOCksaT1yKDIwKSx1PU9iamVjdC5kZWZpbmVQcm9wZXJ0eTtuLmY9cigzKT9PYmplY3QuZGVmaW5lUHJvcGVydHk6ZnVuY3Rpb24odCxuLHIpe2lmKGUodCksbj1pKG4sITApLGUociksbyl0cnl7cmV0dXJuIHUodCxuLHIpfWNhdGNoKHQpe31pZihcImdldFwiaW4gcnx8XCJzZXRcImluIHIpdGhyb3cgVHlwZUVycm9yKFwiQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQhXCIpO3JldHVyblwidmFsdWVcImluIHImJih0W25dPXIudmFsdWUpLHR9fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigxKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoIWUodCkpdGhyb3cgVHlwZUVycm9yKHQrXCIgaXMgbm90IGFuIG9iamVjdCFcIik7cmV0dXJuIHR9fSxmdW5jdGlvbih0LG4scil7dC5leHBvcnRzPSFyKDMpJiYhcig0KShmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkocigxOSkoXCJkaXZcIiksXCJhXCIse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pLmF9KX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMSksbz1yKDApLmRvY3VtZW50LGk9ZShvKSYmZShvLmNyZWF0ZUVsZW1lbnQpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaT9vLmNyZWF0ZUVsZW1lbnQodCk6e319fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigxKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuKXtpZighZSh0KSlyZXR1cm4gdDt2YXIgcixvO2lmKG4mJlwiZnVuY3Rpb25cIj09dHlwZW9mKHI9dC50b1N0cmluZykmJiFlKG89ci5jYWxsKHQpKSlyZXR1cm4gbztpZihcImZ1bmN0aW9uXCI9PXR5cGVvZihyPXQudmFsdWVPZikmJiFlKG89ci5jYWxsKHQpKSlyZXR1cm4gbztpZighbiYmXCJmdW5jdGlvblwiPT10eXBlb2Yocj10LnRvU3RyaW5nKSYmIWUobz1yLmNhbGwodCkpKXJldHVybiBvO3Rocm93IFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKX19LGZ1bmN0aW9uKHQsbil7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbil7cmV0dXJue2VudW1lcmFibGU6ISgxJnQpLGNvbmZpZ3VyYWJsZTohKDImdCksd3JpdGFibGU6ISg0JnQpLHZhbHVlOm59fX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMCksbz1yKDgpLGk9cigyMyksdT1yKDkpKFwic3JjXCIpLGM9RnVuY3Rpb24udG9TdHJpbmcsZj0oXCJcIitjKS5zcGxpdChcInRvU3RyaW5nXCIpO3IoMikuaW5zcGVjdFNvdXJjZT1mdW5jdGlvbih0KXtyZXR1cm4gYy5jYWxsKHQpfSwodC5leHBvcnRzPWZ1bmN0aW9uKHQsbixyLGMpe3ZhciBhPVwiZnVuY3Rpb25cIj09dHlwZW9mIHI7YSYmKGkocixcIm5hbWVcIil8fG8ocixcIm5hbWVcIixuKSksdFtuXSE9PXImJihhJiYoaShyLHUpfHxvKHIsdSx0W25dP1wiXCIrdFtuXTpmLmpvaW4oU3RyaW5nKG4pKSkpLHQ9PT1lP3Rbbl09cjpjP3Rbbl0/dFtuXT1yOm8odCxuLHIpOihkZWxldGUgdFtuXSxvKHQsbixyKSkpfSkoRnVuY3Rpb24ucHJvdG90eXBlLFwidG9TdHJpbmdcIixmdW5jdGlvbigpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHRoaXMmJnRoaXNbdV18fGMuY2FsbCh0aGlzKX0pfSxmdW5jdGlvbih0LG4pe3ZhciByPXt9Lmhhc093blByb3BlcnR5O3QuZXhwb3J0cz1mdW5jdGlvbih0LG4pe3JldHVybiByLmNhbGwodCxuKX19LGZ1bmN0aW9uKHQsbil7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIHQpdGhyb3cgVHlwZUVycm9yKHQrXCIgaXMgbm90IGEgZnVuY3Rpb24hXCIpO3JldHVybiB0fX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMTApLG89cigyNiksaT1yKDI3KSx1PXIoMTIpLGM9cigyOSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbil7dmFyIHI9MT09dCxmPTI9PXQsYT0zPT10LHM9ND09dCxwPTY9PXQsbD01PT10fHxwLHY9bnx8YztyZXR1cm4gZnVuY3Rpb24obixjLHkpe2Zvcih2YXIgaCxkLHg9aShuKSxnPW8oeCksbT1lKGMseSwzKSxiPXUoZy5sZW5ndGgpLF89MCx3PXI/dihuLGIpOmY/dihuLDApOnZvaWQgMDtiPl87XysrKWlmKChsfHxfIGluIGcpJiYoaD1nW19dLGQ9bShoLF8seCksdCkpaWYocil3W19dPWQ7ZWxzZSBpZihkKXN3aXRjaCh0KXtjYXNlIDM6cmV0dXJuITA7Y2FzZSA1OnJldHVybiBoO2Nhc2UgNjpyZXR1cm4gXztjYXNlIDI6dy5wdXNoKGgpfWVsc2UgaWYocylyZXR1cm4hMTtyZXR1cm4gcD8tMTphfHxzP3M6d319fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cig1KTt0LmV4cG9ydHM9T2JqZWN0KFwielwiKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKT9PYmplY3Q6ZnVuY3Rpb24odCl7cmV0dXJuXCJTdHJpbmdcIj09ZSh0KT90LnNwbGl0KFwiXCIpOk9iamVjdCh0KX19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDExKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdChlKHQpKX19LGZ1bmN0aW9uKHQsbil7dmFyIHI9TWF0aC5jZWlsLGU9TWF0aC5mbG9vcjt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGlzTmFOKHQ9K3QpPzA6KHQ+MD9lOnIpKHQpfX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMzApO3QuZXhwb3J0cz1mdW5jdGlvbih0LG4pe3JldHVybiBuZXcoZSh0KSkobil9fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigxKSxvPXIoMzEpLGk9cig2KShcInNwZWNpZXNcIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiBvKHQpJiYobj10LmNvbnN0cnVjdG9yLFwiZnVuY3Rpb25cIiE9dHlwZW9mIG58fG4hPT1BcnJheSYmIW8obi5wcm90b3R5cGUpfHwobj12b2lkIDApLGUobikmJm51bGw9PT0obj1uW2ldKSYmKG49dm9pZCAwKSksdm9pZCAwPT09bj9BcnJheTpufX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoNSk7dC5leHBvcnRzPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKHQpe3JldHVyblwiQXJyYXlcIj09ZSh0KX19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDApLG89ZVtcIl9fY29yZS1qc19zaGFyZWRfX1wiXXx8KGVbXCJfX2NvcmUtanNfc2hhcmVkX19cIl09e30pO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gb1t0XXx8KG9bdF09e30pfX0sZnVuY3Rpb24odCxuLHIpe1widXNlIHN0cmljdFwiO3ZhciBlPXIoNCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbil7cmV0dXJuISF0JiZlKGZ1bmN0aW9uKCl7bj90LmNhbGwobnVsbCxmdW5jdGlvbigpe30sMSk6dC5jYWxsKG51bGwpfSl9fSxmdW5jdGlvbih0LG4scil7cigzNSksdC5leHBvcnRzPXIoMikuU3RyaW5nLmVuZHNXaXRofSxmdW5jdGlvbih0LG4scil7XCJ1c2Ugc3RyaWN0XCI7dmFyIGU9cig3KSxvPXIoMTIpLGk9cigzNiksdT1cIlwiLmVuZHNXaXRoO2UoZS5QK2UuRipyKDM4KShcImVuZHNXaXRoXCIpLFwiU3RyaW5nXCIse2VuZHNXaXRoOmZ1bmN0aW9uKHQpe3ZhciBuPWkodGhpcyx0LFwiZW5kc1dpdGhcIikscj1hcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCxlPW8obi5sZW5ndGgpLGM9dm9pZCAwPT09cj9lOk1hdGgubWluKG8ociksZSksZj1TdHJpbmcodCk7cmV0dXJuIHU/dS5jYWxsKG4sZixjKTpuLnNsaWNlKGMtZi5sZW5ndGgsYyk9PT1mfX0pfSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigzNyksbz1yKDExKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuLHIpe2lmKGUobikpdGhyb3cgVHlwZUVycm9yKFwiU3RyaW5nI1wiK3IrXCIgZG9lc24ndCBhY2NlcHQgcmVnZXghXCIpO3JldHVybiBTdHJpbmcobyh0KSl9fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigxKSxvPXIoNSksaT1yKDYpKFwibWF0Y2hcIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiBlKHQpJiYodm9pZCAwIT09KG49dFtpXSk/ISFuOlwiUmVnRXhwXCI9PW8odCkpfX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoNikoXCJtYXRjaFwiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIG49Ly4vO3RyeXtcIi8uL1wiW3RdKG4pfWNhdGNoKHIpe3RyeXtyZXR1cm4gbltlXT0hMSwhXCIvLi9cIlt0XShuKX1jYXRjaCh0KXt9fXJldHVybiEwfX1dKTsiLCJpbXBvcnQgYWNjZXB0cyBmcm9tICdhdHRyLWFjY2VwdCdcblxuLy8gRmlyZWZveCB2ZXJzaW9ucyBwcmlvciB0byA1MyByZXR1cm4gYSBib2d1cyBNSU1FIHR5cGUgZm9yIGV2ZXJ5IGZpbGUgZHJhZywgc28gZHJhZ292ZXJzIHdpdGhcbi8vIHRoYXQgTUlNRSB0eXBlIHdpbGwgYWx3YXlzIGJlIGFjY2VwdGVkXG5leHBvcnQgZnVuY3Rpb24gZmlsZUFjY2VwdGVkKGZpbGUsIGFjY2VwdCkge1xuICByZXR1cm4gZmlsZS50eXBlID09PSAnYXBwbGljYXRpb24veC1tb3otZmlsZScgfHwgYWNjZXB0cyhmaWxlLCBhY2NlcHQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWxlTWF0Y2hTaXplKGZpbGUsIG1heFNpemUsIG1pblNpemUpIHtcbiAgcmV0dXJuIGZpbGUuc2l6ZSA8PSBtYXhTaXplICYmIGZpbGUuc2l6ZSA+PSBtaW5TaXplXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhbGxGaWxlc0FjY2VwdGVkKGZpbGVzLCBhY2NlcHQsIG1heFNpemUsIG1pblNpemUpIHtcbiAgcmV0dXJuIGZpbGVzLmV2ZXJ5KGZpbGUgPT4ge1xuICAgIHJldHVybiBmaWxlQWNjZXB0ZWQoZmlsZSwgYWNjZXB0KSAmJiBmaWxlTWF0Y2hTaXplKGZpbGUsIG1heFNpemUsIG1pblNpemUpXG4gIH0pXG59XG5cbi8vIFJlYWN0J3Mgc3ludGhldGljIGV2ZW50cyBoYXMgZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQsXG4vLyBidXQgdG8gcmVtYWluIGNvbXBhdGliaWxpdHkgd2l0aCBvdGhlciBsaWJzIChQcmVhY3QpIGZhbGwgYmFja1xuLy8gdG8gY2hlY2sgZXZlbnQuY2FuY2VsQnViYmxlXG5leHBvcnQgZnVuY3Rpb24gaXNQcm9wYWdhdGlvblN0b3BwZWQoZXZlbnQpIHtcbiAgaWYgKHR5cGVvZiBldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpXG4gIH0gZWxzZSBpZiAodHlwZW9mIGV2ZW50LmNhbmNlbEJ1YmJsZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gZXZlbnQuY2FuY2VsQnViYmxlXG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0V2dFdpdGhGaWxlcyhldmVudCkge1xuICBpZiAoIWV2ZW50LmRhdGFUcmFuc2Zlcikge1xuICAgIHJldHVybiAhIWV2ZW50LnRhcmdldCAmJiAhIWV2ZW50LnRhcmdldC5maWxlc1xuICB9XG4gIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9EYXRhVHJhbnNmZXIvdHlwZXNcbiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hUTUxfRHJhZ19hbmRfRHJvcF9BUEkvUmVjb21tZW5kZWRfZHJhZ190eXBlcyNmaWxlXG4gIHJldHVybiBBcnJheS5wcm90b3R5cGUuc29tZS5jYWxsKFxuICAgIGV2ZW50LmRhdGFUcmFuc2Zlci50eXBlcyxcbiAgICB0eXBlID0+IHR5cGUgPT09ICdGaWxlcycgfHwgdHlwZSA9PT0gJ2FwcGxpY2F0aW9uL3gtbW96LWZpbGUnXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzS2luZEZpbGUoaXRlbSkge1xuICByZXR1cm4gdHlwZW9mIGl0ZW0gPT09ICdvYmplY3QnICYmIGl0ZW0gIT09IG51bGwgJiYgaXRlbS5raW5kID09PSAnZmlsZSdcbn1cblxuLy8gYWxsb3cgdGhlIGVudGlyZSBkb2N1bWVudCB0byBiZSBhIGRyYWcgdGFyZ2V0XG5leHBvcnQgZnVuY3Rpb24gb25Eb2N1bWVudERyYWdPdmVyKGV2ZW50KSB7XG4gIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbn1cblxuZnVuY3Rpb24gaXNJZSh1c2VyQWdlbnQpIHtcbiAgcmV0dXJuIHVzZXJBZ2VudC5pbmRleE9mKCdNU0lFJykgIT09IC0xIHx8IHVzZXJBZ2VudC5pbmRleE9mKCdUcmlkZW50LycpICE9PSAtMVxufVxuXG5mdW5jdGlvbiBpc0VkZ2UodXNlckFnZW50KSB7XG4gIHJldHVybiB1c2VyQWdlbnQuaW5kZXhPZignRWRnZS8nKSAhPT0gLTFcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzSWVPckVkZ2UodXNlckFnZW50ID0gd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQpIHtcbiAgcmV0dXJuIGlzSWUodXNlckFnZW50KSB8fCBpc0VkZ2UodXNlckFnZW50KVxufVxuXG4vKipcbiAqIFRoaXMgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB0byBjb21wb3NlIGV2ZW50IGhhbmRsZXJzXG4gKiBUaGV5IGFyZSBleGVjdXRlZCBpbiBvcmRlciB1bnRpbCBvbmUgb2YgdGhlbSBjYWxscyBgZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKWAuXG4gKiBOb3RlIHRoYXQgdGhlIGNoZWNrIGlzIGRvbmUgb24gdGhlIGZpcnN0IGludm9rZSB0b28sXG4gKiBtZWFuaW5nIHRoYXQgaWYgcHJvcGFnYXRpb24gd2FzIHN0b3BwZWQgYmVmb3JlIGludm9raW5nIHRoZSBmbnMsXG4gKiBubyBoYW5kbGVycyB3aWxsIGJlIGV4ZWN1dGVkLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZucyB0aGUgZXZlbnQgaGFubGRlciBmdW5jdGlvbnNcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSB0aGUgZXZlbnQgaGFuZGxlciB0byBhZGQgdG8gYW4gZWxlbWVudFxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcG9zZUV2ZW50SGFuZGxlcnMoLi4uZm5zKSB7XG4gIHJldHVybiAoZXZlbnQsIC4uLmFyZ3MpID0+XG4gICAgZm5zLnNvbWUoZm4gPT4ge1xuICAgICAgaWYgKCFpc1Byb3BhZ2F0aW9uU3RvcHBlZChldmVudCkgJiYgZm4pIHtcbiAgICAgICAgZm4oZXZlbnQsIC4uLmFyZ3MpXG4gICAgICB9XG4gICAgICByZXR1cm4gaXNQcm9wYWdhdGlvblN0b3BwZWQoZXZlbnQpXG4gICAgfSlcbn1cbiIsIi8qIGVzbGludCBwcmVmZXItdGVtcGxhdGU6IDAgKi9cbmltcG9ydCBSZWFjdCwge1xuICBmb3J3YXJkUmVmLFxuICBGcmFnbWVudCxcbiAgdXNlQ2FsbGJhY2ssXG4gIHVzZUVmZmVjdCxcbiAgdXNlTWVtbyxcbiAgdXNlUmVkdWNlcixcbiAgdXNlUmVmXG59IGZyb20gJ3JlYWN0J1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJ1xuaW1wb3J0IHsgZnJvbUV2ZW50IH0gZnJvbSAnZmlsZS1zZWxlY3RvcidcbmltcG9ydCB7XG4gIGFsbEZpbGVzQWNjZXB0ZWQsXG4gIGNvbXBvc2VFdmVudEhhbmRsZXJzLFxuICBmaWxlQWNjZXB0ZWQsXG4gIGZpbGVNYXRjaFNpemUsXG4gIGlzRXZ0V2l0aEZpbGVzLFxuICBpc0llT3JFZGdlLFxuICBpc1Byb3BhZ2F0aW9uU3RvcHBlZCxcbiAgb25Eb2N1bWVudERyYWdPdmVyXG59IGZyb20gJy4vdXRpbHMvaW5kZXgnXG5cbi8qKlxuICogQ29udmVuaWVuY2Ugd3JhcHBlciBjb21wb25lbnQgZm9yIHRoZSBgdXNlRHJvcHpvbmVgIGhvb2tcbiAqXG4gKiBgYGBqc3hcbiAqIDxEcm9wem9uZT5cbiAqICAgeyh7Z2V0Um9vdFByb3BzLCBnZXRJbnB1dFByb3BzfSkgPT4gKFxuICogICAgIDxkaXYgey4uLmdldFJvb3RQcm9wcygpfT5cbiAqICAgICAgIDxpbnB1dCB7Li4uZ2V0SW5wdXRQcm9wcygpfSAvPlxuICogICAgICAgPHA+RHJhZyAnbicgZHJvcCBzb21lIGZpbGVzIGhlcmUsIG9yIGNsaWNrIHRvIHNlbGVjdCBmaWxlczwvcD5cbiAqICAgICA8L2Rpdj5cbiAqICAgKX1cbiAqIDwvRHJvcHpvbmU+XG4gKiBgYGBcbiAqL1xuY29uc3QgRHJvcHpvbmUgPSBmb3J3YXJkUmVmKCh7IGNoaWxkcmVuLCAuLi5wYXJhbXMgfSwgcmVmKSA9PiB7XG4gIGNvbnN0IHsgb3BlbiwgLi4ucHJvcHMgfSA9IHVzZURyb3B6b25lKHBhcmFtcylcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh0eXBlb2YgcmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZWYoeyBvcGVuIH0pXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgcmVmID09PSAnb2JqZWN0JyAmJiByZWYgIT09IG51bGwpIHtcbiAgICAgIHJlZi5jdXJyZW50ID0geyBvcGVuIH1cbiAgICB9XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiByZWYgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmVmKG51bGwpXG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiByZWYgPT09ICdvYmplY3QnICYmIHJlZiAhPT0gbnVsbCkge1xuICAgICAgICByZWYuY3VycmVudCA9IG51bGxcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtyZWZdKVxuXG4gIC8vIFRPRE86IEZpZ3VyZSBvdXQgd2h5IHJlYWN0LXN0eWxlZ3VpZGlzdCBjYW5ub3QgY3JlYXRlIGRvY3MgaWYgd2UgZG9uJ3QgcmV0dXJuIGEganN4IGVsZW1lbnRcbiAgcmV0dXJuIDxGcmFnbWVudD57Y2hpbGRyZW4oeyAuLi5wcm9wcywgb3BlbiB9KX08L0ZyYWdtZW50PlxufSlcblxuRHJvcHpvbmUuZGlzcGxheU5hbWUgPSAnRHJvcHpvbmUnXG5Ecm9wem9uZS5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgKiBSZW5kZXIgZnVuY3Rpb24gdGhhdCBleHBvc2VzIHRoZSBkcm9wem9uZSBzdGF0ZSBhbmQgcHJvcCBnZXR0ZXIgZm5zXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBwYXJhbXNcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gcGFyYW1zLmdldFJvb3RQcm9wcyBSZXR1cm5zIHRoZSBwcm9wcyB5b3Ugc2hvdWxkIGFwcGx5IHRvIHRoZSByb290IGRyb3AgY29udGFpbmVyIHlvdSByZW5kZXJcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gcGFyYW1zLmdldElucHV0UHJvcHMgUmV0dXJucyB0aGUgcHJvcHMgeW91IHNob3VsZCBhcHBseSB0byBoaWRkZW4gZmlsZSBpbnB1dCB5b3UgcmVuZGVyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IHBhcmFtcy5vcGVuIE9wZW4gdGhlIG5hdGl2ZSBmaWxlIHNlbGVjdGlvbiBkaWFsb2dcbiAgICogQHBhcmFtIHtib29sZWFufSBwYXJhbXMuaXNGb2N1c2VkIERyb3B6b25lIGFyZWEgaXMgaW4gZm9jdXNcbiAgICogQHBhcmFtIHtib29sZWFufSBwYXJhbXMuaXNGaWxlRGlhbG9nQWN0aXZlIEZpbGUgZGlhbG9nIGlzIG9wZW5lZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHBhcmFtcy5pc0RyYWdBY3RpdmUgQWN0aXZlIGRyYWcgaXMgaW4gcHJvZ3Jlc3NcbiAgICogQHBhcmFtIHtib29sZWFufSBwYXJhbXMuaXNEcmFnQWNjZXB0IERyYWdnZWQgZmlsZXMgYXJlIGFjY2VwdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gcGFyYW1zLmlzRHJhZ1JlamVjdCBTb21lIGRyYWdnZWQgZmlsZXMgYXJlIHJlamVjdGVkXG4gICAqIEBwYXJhbSB7RmlsZVtdfSBwYXJhbXMuZHJhZ2dlZEZpbGVzIEZpbGVzIGluIGFjdGl2ZSBkcmFnXG4gICAqIEBwYXJhbSB7RmlsZVtdfSBwYXJhbXMuYWNjZXB0ZWRGaWxlcyBBY2NlcHRlZCBmaWxlc1xuICAgKiBAcGFyYW0ge0ZpbGVbXX0gcGFyYW1zLnJlamVjdGVkRmlsZXMgUmVqZWN0ZWQgZmlsZXNcbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogU2V0IGFjY2VwdGVkIGZpbGUgdHlwZXMuXG4gICAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vb2tvbmV0L2F0dHItYWNjZXB0IGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAgKiBLZWVwIGluIG1pbmQgdGhhdCBtaW1lIHR5cGUgZGV0ZXJtaW5hdGlvbiBpcyBub3QgcmVsaWFibGUgYWNyb3NzIHBsYXRmb3Jtcy4gQ1NWIGZpbGVzLFxuICAgKiBmb3IgZXhhbXBsZSwgYXJlIHJlcG9ydGVkIGFzIHRleHQvcGxhaW4gdW5kZXIgbWFjT1MgYnV0IGFzIGFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbCB1bmRlclxuICAgKiBXaW5kb3dzLiBJbiBzb21lIGNhc2VzIHRoZXJlIG1pZ2h0IG5vdCBiZSBhIG1pbWUgdHlwZSBzZXQgYXQgYWxsLlxuICAgKiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdC1kcm9wem9uZS9yZWFjdC1kcm9wem9uZS9pc3N1ZXMvMjc2XG4gICAqL1xuICBhY2NlcHQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zdHJpbmcpXSksXG5cbiAgLyoqXG4gICAqIEFsbG93IGRyYWcgJ24nIGRyb3AgKG9yIHNlbGVjdGlvbiBmcm9tIHRoZSBmaWxlIGRpYWxvZykgb2YgbXVsdGlwbGUgZmlsZXNcbiAgICovXG4gIG11bHRpcGxlOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogSWYgZmFsc2UsIGFsbG93IGRyb3BwZWQgaXRlbXMgdG8gdGFrZSBvdmVyIHRoZSBjdXJyZW50IGJyb3dzZXIgd2luZG93XG4gICAqL1xuICBwcmV2ZW50RHJvcE9uRG9jdW1lbnQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBJZiB0cnVlLCBkaXNhYmxlcyBjbGljayB0byBvcGVuIHRoZSBuYXRpdmUgZmlsZSBzZWxlY3Rpb24gZGlhbG9nXG4gICAqL1xuICBub0NsaWNrOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogSWYgdHJ1ZSwgZGlzYWJsZXMgU1BBQ0UvRU5URVIgdG8gb3BlbiB0aGUgbmF0aXZlIGZpbGUgc2VsZWN0aW9uIGRpYWxvZy5cbiAgICogTm90ZSB0aGF0IGl0IGFsc28gc3RvcHMgdHJhY2tpbmcgdGhlIGZvY3VzIHN0YXRlLlxuICAgKi9cbiAgbm9LZXlib2FyZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIElmIHRydWUsIGRpc2FibGVzIGRyYWcgJ24nIGRyb3BcbiAgICovXG4gIG5vRHJhZzogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIElmIHRydWUsIHN0b3BzIGRyYWcgZXZlbnQgcHJvcGFnYXRpb24gdG8gcGFyZW50c1xuICAgKi9cbiAgbm9EcmFnRXZlbnRzQnViYmxpbmc6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBNaW5pbXVtIGZpbGUgc2l6ZSAoaW4gYnl0ZXMpXG4gICAqL1xuICBtaW5TaXplOiBQcm9wVHlwZXMubnVtYmVyLFxuXG4gIC8qKlxuICAgKiBNYXhpbXVtIGZpbGUgc2l6ZSAoaW4gYnl0ZXMpXG4gICAqL1xuICBtYXhTaXplOiBQcm9wVHlwZXMubnVtYmVyLFxuXG4gIC8qKlxuICAgKiBFbmFibGUvZGlzYWJsZSB0aGUgZHJvcHpvbmVcbiAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogVXNlIHRoaXMgdG8gcHJvdmlkZSBhIGN1c3RvbSBmaWxlIGFnZ3JlZ2F0b3JcbiAgICpcbiAgICogQHBhcmFtIHsoRHJhZ0V2ZW50fEV2ZW50KX0gZXZlbnQgQSBkcmFnIGV2ZW50IG9yIGlucHV0IGNoYW5nZSBldmVudCAoaWYgZmlsZXMgd2VyZSBzZWxlY3RlZCB2aWEgdGhlIGZpbGUgZGlhbG9nKVxuICAgKi9cbiAgZ2V0RmlsZXNGcm9tRXZlbnQ6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBDYiBmb3Igd2hlbiBjbG9zaW5nIHRoZSBmaWxlIGRpYWxvZyB3aXRoIG5vIHNlbGVjdGlvblxuICAgKi9cbiAgb25GaWxlRGlhbG9nQ2FuY2VsOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQ2IgZm9yIHdoZW4gdGhlIGBkcmFnZW50ZXJgIGV2ZW50IG9jY3Vycy5cbiAgICpcbiAgICogQHBhcmFtIHtEcmFnRXZlbnR9IGV2ZW50XG4gICAqL1xuICBvbkRyYWdFbnRlcjogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIENiIGZvciB3aGVuIHRoZSBgZHJhZ2xlYXZlYCBldmVudCBvY2N1cnNcbiAgICpcbiAgICogQHBhcmFtIHtEcmFnRXZlbnR9IGV2ZW50XG4gICAqL1xuICBvbkRyYWdMZWF2ZTogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIENiIGZvciB3aGVuIHRoZSBgZHJhZ292ZXJgIGV2ZW50IG9jY3Vyc1xuICAgKlxuICAgKiBAcGFyYW0ge0RyYWdFdmVudH0gZXZlbnRcbiAgICovXG4gIG9uRHJhZ092ZXI6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBDYiBmb3Igd2hlbiB0aGUgYGRyb3BgIGV2ZW50IG9jY3Vycy5cbiAgICogTm90ZSB0aGF0IHRoaXMgY2FsbGJhY2sgaXMgaW52b2tlZCBhZnRlciB0aGUgYGdldEZpbGVzRnJvbUV2ZW50YCBjYWxsYmFjayBpcyBkb25lLlxuICAgKlxuICAgKiBGaWxlcyBhcmUgYWNjZXB0ZWQgb3IgcmVqZWN0ZWQgYmFzZWQgb24gdGhlIGBhY2NlcHRgLCBgbXVsdGlwbGVgLCBgbWluU2l6ZWAgYW5kIGBtYXhTaXplYCBwcm9wcy5cbiAgICogYGFjY2VwdGAgbXVzdCBiZSBhIHZhbGlkIFtNSU1FIHR5cGVdKGh0dHA6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvbWVkaWEtdHlwZXMvbWVkaWEtdHlwZXMueGh0bWwpIGFjY29yZGluZyB0byBbaW5wdXQgZWxlbWVudCBzcGVjaWZpY2F0aW9uXShodHRwczovL3d3dy53My5vcmcvd2lraS9IVE1ML0VsZW1lbnRzL2lucHV0L2ZpbGUpIG9yIGEgdmFsaWQgZmlsZSBleHRlbnNpb24uXG4gICAqIElmIGBtdWx0aXBsZWAgaXMgc2V0IHRvIGZhbHNlIGFuZCBhZGRpdGlvbmFsIGZpbGVzIGFyZSBkcm9wcHBlZCxcbiAgICogYWxsIGZpbGVzIGJlc2lkZXMgdGhlIGZpcnN0IHdpbGwgYmUgcmVqZWN0ZWQuXG4gICAqIEFueSBmaWxlIHdoaWNoIGRvZXMgbm90IGhhdmUgYSBzaXplIGluIHRoZSBbYG1pblNpemVgLCBgbWF4U2l6ZWBdIHJhbmdlLCB3aWxsIGJlIHJlamVjdGVkIGFzIHdlbGwuXG4gICAqXG4gICAqIE5vdGUgdGhhdCB0aGUgYG9uRHJvcGAgY2FsbGJhY2sgd2lsbCBhbHdheXMgYmUgaW52b2tlZCByZWdhcmRsZXNzIGlmIHRoZSBkcm9wcGVkIGZpbGVzIHdlcmUgYWNjZXB0ZWQgb3IgcmVqZWN0ZWQuXG4gICAqIElmIHlvdSdkIGxpa2UgdG8gcmVhY3QgdG8gYSBzcGVjaWZpYyBzY2VuYXJpbywgdXNlIHRoZSBgb25Ecm9wQWNjZXB0ZWRgL2BvbkRyb3BSZWplY3RlZGAgcHJvcHMuXG4gICAqXG4gICAqIGBvbkRyb3BgIHdpbGwgcHJvdmlkZSB5b3Ugd2l0aCBhbiBhcnJheSBvZiBbRmlsZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0ZpbGUpIG9iamVjdHMgd2hpY2ggeW91IGNhbiB0aGVuIHByb2Nlc3MgYW5kIHNlbmQgdG8gYSBzZXJ2ZXIuXG4gICAqIEZvciBleGFtcGxlLCB3aXRoIFtTdXBlckFnZW50XShodHRwczovL2dpdGh1Yi5jb20vdmlzaW9ubWVkaWEvc3VwZXJhZ2VudCkgYXMgYSBodHRwL2FqYXggbGlicmFyeTpcbiAgICpcbiAgICogYGBganNcbiAgICogZnVuY3Rpb24gb25Ecm9wKGFjY2VwdGVkRmlsZXMpIHtcbiAgICogICBjb25zdCByZXEgPSByZXF1ZXN0LnBvc3QoJy91cGxvYWQnKVxuICAgKiAgIGFjY2VwdGVkRmlsZXMuZm9yRWFjaChmaWxlID0+IHtcbiAgICogICAgIHJlcS5hdHRhY2goZmlsZS5uYW1lLCBmaWxlKVxuICAgKiAgIH0pXG4gICAqICAgcmVxLmVuZChjYWxsYmFjaylcbiAgICogfVxuICAgKiBgYGBcbiAgICpcbiAgICogQHBhcmFtIHtGaWxlW119IGFjY2VwdGVkRmlsZXNcbiAgICogQHBhcmFtIHtGaWxlW119IHJlamVjdGVkRmlsZXNcbiAgICogQHBhcmFtIHsoRHJhZ0V2ZW50fEV2ZW50KX0gZXZlbnQgQSBkcmFnIGV2ZW50IG9yIGlucHV0IGNoYW5nZSBldmVudCAoaWYgZmlsZXMgd2VyZSBzZWxlY3RlZCB2aWEgdGhlIGZpbGUgZGlhbG9nKVxuICAgKi9cbiAgb25Ecm9wOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQ2IgZm9yIHdoZW4gdGhlIGBkcm9wYCBldmVudCBvY2N1cnMuXG4gICAqIE5vdGUgdGhhdCBpZiBubyBmaWxlcyBhcmUgYWNjZXB0ZWQsIHRoaXMgY2FsbGJhY2sgaXMgbm90IGludm9rZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7RmlsZVtdfSBmaWxlc1xuICAgKiBAcGFyYW0geyhEcmFnRXZlbnR8RXZlbnQpfSBldmVudFxuICAgKi9cbiAgb25Ecm9wQWNjZXB0ZWQ6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBDYiBmb3Igd2hlbiB0aGUgYGRyb3BgIGV2ZW50IG9jY3Vycy5cbiAgICogTm90ZSB0aGF0IGlmIG5vIGZpbGVzIGFyZSByZWplY3RlZCwgdGhpcyBjYWxsYmFjayBpcyBub3QgaW52b2tlZC5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3RbXX0gZmlsZXNcbiAgICogQHBhcmFtIHsoRHJhZ0V2ZW50fEV2ZW50KX0gZXZlbnRcbiAgICovXG4gIG9uRHJvcFJlamVjdGVkOiBQcm9wVHlwZXMuZnVuY1xufVxuXG5leHBvcnQgZGVmYXVsdCBEcm9wem9uZVxuXG4vKipcbiAqIEEgZnVuY3Rpb24gdGhhdCBpcyBpbnZva2VkIGZvciB0aGUgYGRyYWdlbnRlcmAsXG4gKiBgZHJhZ292ZXJgIGFuZCBgZHJhZ2xlYXZlYCBldmVudHMuXG4gKiBJdCBpcyBub3QgaW52b2tlZCBpZiB0aGUgaXRlbXMgYXJlIG5vdCBmaWxlcyAoc3VjaCBhcyBsaW5rLCB0ZXh0LCBldGMuKS5cbiAqXG4gKiBAY2FsbGJhY2sgZHJhZ0NiXG4gKiBAcGFyYW0ge0RyYWdFdmVudH0gZXZlbnRcbiAqL1xuXG4vKipcbiAqIEEgZnVuY3Rpb24gdGhhdCBpcyBpbnZva2VkIGZvciB0aGUgYGRyb3BgIG9yIGlucHV0IGNoYW5nZSBldmVudC5cbiAqIEl0IGlzIG5vdCBpbnZva2VkIGlmIHRoZSBpdGVtcyBhcmUgbm90IGZpbGVzIChzdWNoIGFzIGxpbmssIHRleHQsIGV0Yy4pLlxuICpcbiAqIEBjYWxsYmFjayBkcm9wQ2JcbiAqIEBwYXJhbSB7RmlsZVtdfSBhY2NlcHRlZEZpbGVzIExpc3Qgb2YgYWNjZXB0ZWQgZmlsZXNcbiAqIEBwYXJhbSB7RmlsZVtdfSByZWplY3RlZEZpbGVzIExpc3Qgb2YgcmVqZWN0ZWQgZmlsZXNcbiAqIEBwYXJhbSB7KERyYWdFdmVudHxFdmVudCl9IGV2ZW50IEEgZHJhZyBldmVudCBvciBpbnB1dCBjaGFuZ2UgZXZlbnQgKGlmIGZpbGVzIHdlcmUgc2VsZWN0ZWQgdmlhIHRoZSBmaWxlIGRpYWxvZylcbiAqL1xuXG4vKipcbiAqIEEgZnVuY3Rpb24gdGhhdCBpcyBpbnZva2VkIGZvciB0aGUgYGRyb3BgIG9yIGlucHV0IGNoYW5nZSBldmVudC5cbiAqIEl0IGlzIG5vdCBpbnZva2VkIGlmIHRoZSBpdGVtcyBhcmUgZmlsZXMgKHN1Y2ggYXMgbGluaywgdGV4dCwgZXRjLikuXG4gKlxuICogQGNhbGxiYWNrIGRyb3BBY2NlcHRlZENiXG4gKiBAcGFyYW0ge0ZpbGVbXX0gZmlsZXMgTGlzdCBvZiBhY2NlcHRlZCBmaWxlcyB0aGF0IG1lZXQgdGhlIGdpdmVuIGNyaXRlcmlhXG4gKiAoYGFjY2VwdGAsIGBtdWx0aXBsZWAsIGBtaW5TaXplYCwgYG1heFNpemVgKVxuICogQHBhcmFtIHsoRHJhZ0V2ZW50fEV2ZW50KX0gZXZlbnQgQSBkcmFnIGV2ZW50IG9yIGlucHV0IGNoYW5nZSBldmVudCAoaWYgZmlsZXMgd2VyZSBzZWxlY3RlZCB2aWEgdGhlIGZpbGUgZGlhbG9nKVxuICovXG5cbi8qKlxuICogQSBmdW5jdGlvbiB0aGF0IGlzIGludm9rZWQgZm9yIHRoZSBgZHJvcGAgb3IgaW5wdXQgY2hhbmdlIGV2ZW50LlxuICpcbiAqIEBjYWxsYmFjayBkcm9wUmVqZWN0ZWRDYlxuICogQHBhcmFtIHtGaWxlW119IGZpbGVzIExpc3Qgb2YgcmVqZWN0ZWQgZmlsZXMgdGhhdCBkbyBub3QgbWVldCB0aGUgZ2l2ZW4gY3JpdGVyaWFcbiAqIChgYWNjZXB0YCwgYG11bHRpcGxlYCwgYG1pblNpemVgLCBgbWF4U2l6ZWApXG4gKiBAcGFyYW0geyhEcmFnRXZlbnR8RXZlbnQpfSBldmVudCBBIGRyYWcgZXZlbnQgb3IgaW5wdXQgY2hhbmdlIGV2ZW50IChpZiBmaWxlcyB3ZXJlIHNlbGVjdGVkIHZpYSB0aGUgZmlsZSBkaWFsb2cpXG4gKi9cblxuLyoqXG4gKiBBIGZ1bmN0aW9uIHRoYXQgaXMgdXNlZCBhZ2dyZWdhdGUgZmlsZXMsXG4gKiBpbiBhIGFzeW5jaHJvbm91cyBmYXNoaW9uLCBmcm9tIGRyYWcgb3IgaW5wdXQgY2hhbmdlIGV2ZW50cy5cbiAqXG4gKiBAY2FsbGJhY2sgZ2V0RmlsZXNGcm9tRXZlbnRcbiAqIEBwYXJhbSB7KERyYWdFdmVudHxFdmVudCl9IGV2ZW50IEEgZHJhZyBldmVudCBvciBpbnB1dCBjaGFuZ2UgZXZlbnQgKGlmIGZpbGVzIHdlcmUgc2VsZWN0ZWQgdmlhIHRoZSBmaWxlIGRpYWxvZylcbiAqIEByZXR1cm5zIHsoRmlsZVtdfFByb21pc2U8RmlsZVtdPil9XG4gKi9cblxuLyoqXG4gKiBBbiBvYmplY3Qgd2l0aCB0aGUgY3VycmVudCBkcm9wem9uZSBzdGF0ZSBhbmQgc29tZSBoZWxwZXIgZnVuY3Rpb25zLlxuICpcbiAqIEB0eXBlZGVmIHtvYmplY3R9IERyb3B6b25lU3RhdGVcbiAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IGdldFJvb3RQcm9wcyBSZXR1cm5zIHRoZSBwcm9wcyB5b3Ugc2hvdWxkIGFwcGx5IHRvIHRoZSByb290IGRyb3AgY29udGFpbmVyIHlvdSByZW5kZXJcbiAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IGdldElucHV0UHJvcHMgUmV0dXJucyB0aGUgcHJvcHMgeW91IHNob3VsZCBhcHBseSB0byBoaWRkZW4gZmlsZSBpbnB1dCB5b3UgcmVuZGVyXG4gKiBAcHJvcGVydHkge0Z1bmN0aW9ufSBvcGVuIE9wZW4gdGhlIG5hdGl2ZSBmaWxlIHNlbGVjdGlvbiBkaWFsb2dcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gaXNGb2N1c2VkIERyb3B6b25lIGFyZWEgaXMgaW4gZm9jdXNcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gaXNGaWxlRGlhbG9nQWN0aXZlIEZpbGUgZGlhbG9nIGlzIG9wZW5lZFxuICogQHByb3BlcnR5IHtib29sZWFufSBpc0RyYWdBY3RpdmUgQWN0aXZlIGRyYWcgaXMgaW4gcHJvZ3Jlc3NcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gaXNEcmFnQWNjZXB0IERyYWdnZWQgZmlsZXMgYXJlIGFjY2VwdGVkXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGlzRHJhZ1JlamVjdCBTb21lIGRyYWdnZWQgZmlsZXMgYXJlIHJlamVjdGVkXG4gKiBAcHJvcGVydHkge0ZpbGVbXX0gZHJhZ2dlZEZpbGVzIEZpbGVzIGluIGFjdGl2ZSBkcmFnXG4gKiBAcHJvcGVydHkge0ZpbGVbXX0gYWNjZXB0ZWRGaWxlcyBBY2NlcHRlZCBmaWxlc1xuICogQHByb3BlcnR5IHtGaWxlW119IHJlamVjdGVkRmlsZXMgUmVqZWN0ZWQgZmlsZXNcbiAqL1xuXG5jb25zdCBpbml0aWFsU3RhdGUgPSB7XG4gIGlzRm9jdXNlZDogZmFsc2UsXG4gIGlzRmlsZURpYWxvZ0FjdGl2ZTogZmFsc2UsXG4gIGlzRHJhZ0FjdGl2ZTogZmFsc2UsXG4gIGlzRHJhZ0FjY2VwdDogZmFsc2UsXG4gIGlzRHJhZ1JlamVjdDogZmFsc2UsXG4gIGRyYWdnZWRGaWxlczogW10sXG4gIGFjY2VwdGVkRmlsZXM6IFtdLFxuICByZWplY3RlZEZpbGVzOiBbXVxufVxuXG4vKipcbiAqIEEgUmVhY3QgaG9vayB0aGF0IGNyZWF0ZXMgYSBkcmFnICduJyBkcm9wIGFyZWEuXG4gKlxuICogYGBganN4XG4gKiBmdW5jdGlvbiBNeURyb3B6b25lKHByb3BzKSB7XG4gKiAgIGNvbnN0IHtnZXRSb290UHJvcHMsIGdldElucHV0UHJvcHN9ID0gdXNlRHJvcHpvbmUoe1xuICogICAgIG9uRHJvcDogYWNjZXB0ZWRGaWxlcyA9PiB7XG4gKiAgICAgICAvLyBkbyBzb21ldGhpbmcgd2l0aCB0aGUgRmlsZSBvYmplY3RzLCBlLmcuIHVwbG9hZCB0byBzb21lIHNlcnZlclxuICogICAgIH1cbiAqICAgfSk7XG4gKiAgIHJldHVybiAoXG4gKiAgICAgPGRpdiB7Li4uZ2V0Um9vdFByb3BzKCl9PlxuICogICAgICAgPGlucHV0IHsuLi5nZXRJbnB1dFByb3BzKCl9IC8+XG4gKiAgICAgICA8cD5EcmFnIGFuZCBkcm9wIHNvbWUgZmlsZXMgaGVyZSwgb3IgY2xpY2sgdG8gc2VsZWN0IGZpbGVzPC9wPlxuICogICAgIDwvZGl2PlxuICogICApXG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBAZnVuY3Rpb24gdXNlRHJvcHpvbmVcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcHNcbiAqIEBwYXJhbSB7c3RyaW5nfHN0cmluZ1tdfSBbcHJvcHMuYWNjZXB0XSBTZXQgYWNjZXB0ZWQgZmlsZSB0eXBlcy5cbiAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vb2tvbmV0L2F0dHItYWNjZXB0IGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICogS2VlcCBpbiBtaW5kIHRoYXQgbWltZSB0eXBlIGRldGVybWluYXRpb24gaXMgbm90IHJlbGlhYmxlIGFjcm9zcyBwbGF0Zm9ybXMuIENTViBmaWxlcyxcbiAqIGZvciBleGFtcGxlLCBhcmUgcmVwb3J0ZWQgYXMgdGV4dC9wbGFpbiB1bmRlciBtYWNPUyBidXQgYXMgYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsIHVuZGVyXG4gKiBXaW5kb3dzLiBJbiBzb21lIGNhc2VzIHRoZXJlIG1pZ2h0IG5vdCBiZSBhIG1pbWUgdHlwZSBzZXQgYXQgYWxsLlxuICogU2VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVhY3QtZHJvcHpvbmUvcmVhY3QtZHJvcHpvbmUvaXNzdWVzLzI3NlxuICogQHBhcmFtIHtib29sZWFufSBbcHJvcHMubXVsdGlwbGU9dHJ1ZV0gQWxsb3cgZHJhZyAnbicgZHJvcCAob3Igc2VsZWN0aW9uIGZyb20gdGhlIGZpbGUgZGlhbG9nKSBvZiBtdWx0aXBsZSBmaWxlc1xuICogQHBhcmFtIHtib29sZWFufSBbcHJvcHMucHJldmVudERyb3BPbkRvY3VtZW50PXRydWVdIElmIGZhbHNlLCBhbGxvdyBkcm9wcGVkIGl0ZW1zIHRvIHRha2Ugb3ZlciB0aGUgY3VycmVudCBicm93c2VyIHdpbmRvd1xuICogQHBhcmFtIHtib29sZWFufSBbcHJvcHMubm9DbGljaz1mYWxzZV0gSWYgdHJ1ZSwgZGlzYWJsZXMgY2xpY2sgdG8gb3BlbiB0aGUgbmF0aXZlIGZpbGUgc2VsZWN0aW9uIGRpYWxvZ1xuICogQHBhcmFtIHtib29sZWFufSBbcHJvcHMubm9LZXlib2FyZD1mYWxzZV0gSWYgdHJ1ZSwgZGlzYWJsZXMgU1BBQ0UvRU5URVIgdG8gb3BlbiB0aGUgbmF0aXZlIGZpbGUgc2VsZWN0aW9uIGRpYWxvZy5cbiAqIE5vdGUgdGhhdCBpdCBhbHNvIHN0b3BzIHRyYWNraW5nIHRoZSBmb2N1cyBzdGF0ZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Byb3BzLm5vRHJhZz1mYWxzZV0gSWYgdHJ1ZSwgZGlzYWJsZXMgZHJhZyAnbicgZHJvcFxuICogQHBhcmFtIHtib29sZWFufSBbcHJvcHMubm9EcmFnRXZlbnRzQnViYmxpbmc9ZmFsc2VdIElmIHRydWUsIHN0b3BzIGRyYWcgZXZlbnQgcHJvcGFnYXRpb24gdG8gcGFyZW50c1xuICogQHBhcmFtIHtudW1iZXJ9IFtwcm9wcy5taW5TaXplPTBdIE1pbmltdW0gZmlsZSBzaXplIChpbiBieXRlcylcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcHJvcHMubWF4U2l6ZT1JbmZpbml0eV0gTWF4aW11bSBmaWxlIHNpemUgKGluIGJ5dGVzKVxuICogQHBhcmFtIHtib29sZWFufSBbcHJvcHMuZGlzYWJsZWQ9ZmFsc2VdIEVuYWJsZS9kaXNhYmxlIHRoZSBkcm9wem9uZVxuICogQHBhcmFtIHtnZXRGaWxlc0Zyb21FdmVudH0gW3Byb3BzLmdldEZpbGVzRnJvbUV2ZW50XSBVc2UgdGhpcyB0byBwcm92aWRlIGEgY3VzdG9tIGZpbGUgYWdncmVnYXRvclxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3Byb3BzLm9uRmlsZURpYWxvZ0NhbmNlbF0gQ2IgZm9yIHdoZW4gY2xvc2luZyB0aGUgZmlsZSBkaWFsb2cgd2l0aCBubyBzZWxlY3Rpb25cbiAqIEBwYXJhbSB7ZHJhZ0NifSBbcHJvcHMub25EcmFnRW50ZXJdIENiIGZvciB3aGVuIHRoZSBgZHJhZ2VudGVyYCBldmVudCBvY2N1cnMuXG4gKiBAcGFyYW0ge2RyYWdDYn0gW3Byb3BzLm9uRHJhZ0xlYXZlXSBDYiBmb3Igd2hlbiB0aGUgYGRyYWdsZWF2ZWAgZXZlbnQgb2NjdXJzXG4gKiBAcGFyYW0ge2RyYWdDYn0gW3Byb3BzLm9uRHJhZ092ZXJdIENiIGZvciB3aGVuIHRoZSBgZHJhZ292ZXJgIGV2ZW50IG9jY3Vyc1xuICogQHBhcmFtIHtkcm9wQ2J9IFtwcm9wcy5vbkRyb3BdIENiIGZvciB3aGVuIHRoZSBgZHJvcGAgZXZlbnQgb2NjdXJzLlxuICogTm90ZSB0aGF0IHRoaXMgY2FsbGJhY2sgaXMgaW52b2tlZCBhZnRlciB0aGUgYGdldEZpbGVzRnJvbUV2ZW50YCBjYWxsYmFjayBpcyBkb25lLlxuICpcbiAqIEZpbGVzIGFyZSBhY2NlcHRlZCBvciByZWplY3RlZCBiYXNlZCBvbiB0aGUgYGFjY2VwdGAsIGBtdWx0aXBsZWAsIGBtaW5TaXplYCBhbmQgYG1heFNpemVgIHByb3BzLlxuICogYGFjY2VwdGAgbXVzdCBiZSBhIHZhbGlkIFtNSU1FIHR5cGVdKGh0dHA6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvbWVkaWEtdHlwZXMvbWVkaWEtdHlwZXMueGh0bWwpIGFjY29yZGluZyB0byBbaW5wdXQgZWxlbWVudCBzcGVjaWZpY2F0aW9uXShodHRwczovL3d3dy53My5vcmcvd2lraS9IVE1ML0VsZW1lbnRzL2lucHV0L2ZpbGUpIG9yIGEgdmFsaWQgZmlsZSBleHRlbnNpb24uXG4gKiBJZiBgbXVsdGlwbGVgIGlzIHNldCB0byBmYWxzZSBhbmQgYWRkaXRpb25hbCBmaWxlcyBhcmUgZHJvcHBwZWQsXG4gKiBhbGwgZmlsZXMgYmVzaWRlcyB0aGUgZmlyc3Qgd2lsbCBiZSByZWplY3RlZC5cbiAqIEFueSBmaWxlIHdoaWNoIGRvZXMgbm90IGhhdmUgYSBzaXplIGluIHRoZSBbYG1pblNpemVgLCBgbWF4U2l6ZWBdIHJhbmdlLCB3aWxsIGJlIHJlamVjdGVkIGFzIHdlbGwuXG4gKlxuICogTm90ZSB0aGF0IHRoZSBgb25Ecm9wYCBjYWxsYmFjayB3aWxsIGFsd2F5cyBiZSBpbnZva2VkIHJlZ2FyZGxlc3MgaWYgdGhlIGRyb3BwZWQgZmlsZXMgd2VyZSBhY2NlcHRlZCBvciByZWplY3RlZC5cbiAqIElmIHlvdSdkIGxpa2UgdG8gcmVhY3QgdG8gYSBzcGVjaWZpYyBzY2VuYXJpbywgdXNlIHRoZSBgb25Ecm9wQWNjZXB0ZWRgL2BvbkRyb3BSZWplY3RlZGAgcHJvcHMuXG4gKlxuICogYG9uRHJvcGAgd2lsbCBwcm92aWRlIHlvdSB3aXRoIGFuIGFycmF5IG9mIFtGaWxlXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRmlsZSkgb2JqZWN0cyB3aGljaCB5b3UgY2FuIHRoZW4gcHJvY2VzcyBhbmQgc2VuZCB0byBhIHNlcnZlci5cbiAqIEZvciBleGFtcGxlLCB3aXRoIFtTdXBlckFnZW50XShodHRwczovL2dpdGh1Yi5jb20vdmlzaW9ubWVkaWEvc3VwZXJhZ2VudCkgYXMgYSBodHRwL2FqYXggbGlicmFyeTpcbiAqXG4gKiBgYGBqc1xuICogZnVuY3Rpb24gb25Ecm9wKGFjY2VwdGVkRmlsZXMpIHtcbiAqICAgY29uc3QgcmVxID0gcmVxdWVzdC5wb3N0KCcvdXBsb2FkJylcbiAqICAgYWNjZXB0ZWRGaWxlcy5mb3JFYWNoKGZpbGUgPT4ge1xuICogICAgIHJlcS5hdHRhY2goZmlsZS5uYW1lLCBmaWxlKVxuICogICB9KVxuICogICByZXEuZW5kKGNhbGxiYWNrKVxuICogfVxuICogYGBgXG4gKiBAcGFyYW0ge2Ryb3BBY2NlcHRlZENifSBbcHJvcHMub25Ecm9wQWNjZXB0ZWRdXG4gKiBAcGFyYW0ge2Ryb3BSZWplY3RlZENifSBbcHJvcHMub25Ecm9wUmVqZWN0ZWRdXG4gKlxuICogQHJldHVybnMge0Ryb3B6b25lU3RhdGV9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VEcm9wem9uZSh7XG4gIGFjY2VwdCxcbiAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgZ2V0RmlsZXNGcm9tRXZlbnQgPSBmcm9tRXZlbnQsXG4gIG1heFNpemUgPSBJbmZpbml0eSxcbiAgbWluU2l6ZSA9IDAsXG4gIG11bHRpcGxlID0gdHJ1ZSxcbiAgb25EcmFnRW50ZXIsXG4gIG9uRHJhZ0xlYXZlLFxuICBvbkRyYWdPdmVyLFxuICBvbkRyb3AsXG4gIG9uRHJvcEFjY2VwdGVkLFxuICBvbkRyb3BSZWplY3RlZCxcbiAgb25GaWxlRGlhbG9nQ2FuY2VsLFxuICBwcmV2ZW50RHJvcE9uRG9jdW1lbnQgPSB0cnVlLFxuICBub0NsaWNrID0gZmFsc2UsXG4gIG5vS2V5Ym9hcmQgPSBmYWxzZSxcbiAgbm9EcmFnID0gZmFsc2UsXG4gIG5vRHJhZ0V2ZW50c0J1YmJsaW5nID0gZmFsc2Vcbn0gPSB7fSkge1xuICBjb25zdCByb290UmVmID0gdXNlUmVmKG51bGwpXG4gIGNvbnN0IGlucHV0UmVmID0gdXNlUmVmKG51bGwpXG5cbiAgY29uc3QgW3N0YXRlLCBkaXNwYXRjaF0gPSB1c2VSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxTdGF0ZSlcbiAgY29uc3QgeyBpc0ZvY3VzZWQsIGlzRmlsZURpYWxvZ0FjdGl2ZSwgZHJhZ2dlZEZpbGVzIH0gPSBzdGF0ZVxuXG4gIC8vIEZuIGZvciBvcGVuaW5nIHRoZSBmaWxlIGRpYWxvZyBwcm9ncmFtbWF0aWNhbGx5XG4gIGNvbnN0IG9wZW5GaWxlRGlhbG9nID0gKCkgPT4ge1xuICAgIGlmIChpbnB1dFJlZi5jdXJyZW50KSB7XG4gICAgICBkaXNwYXRjaCh7IHR5cGU6ICdvcGVuRGlhbG9nJyB9KVxuICAgICAgaW5wdXRSZWYuY3VycmVudC52YWx1ZSA9IG51bGxcbiAgICAgIGlucHV0UmVmLmN1cnJlbnQuY2xpY2soKVxuICAgIH1cbiAgfVxuXG4gIC8vIFVwZGF0ZSBmaWxlIGRpYWxvZyBhY3RpdmUgc3RhdGUgd2hlbiB0aGUgd2luZG93IGlzIGZvY3VzZWQgb25cbiAgY29uc3Qgb25XaW5kb3dGb2N1cyA9ICgpID0+IHtcbiAgICAvLyBFeGVjdXRlIHRoZSB0aW1lb3V0IG9ubHkgaWYgdGhlIGZpbGUgZGlhbG9nIGlzIG9wZW5lZCBpbiB0aGUgYnJvd3NlclxuICAgIGlmIChpc0ZpbGVEaWFsb2dBY3RpdmUpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAoaW5wdXRSZWYuY3VycmVudCkge1xuICAgICAgICAgIGNvbnN0IHsgZmlsZXMgfSA9IGlucHV0UmVmLmN1cnJlbnRcblxuICAgICAgICAgIGlmICghZmlsZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBkaXNwYXRjaCh7IHR5cGU6ICdjbG9zZURpYWxvZycgfSlcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBvbkZpbGVEaWFsb2dDYW5jZWwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgb25GaWxlRGlhbG9nQ2FuY2VsKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sIDMwMClcbiAgICB9XG4gIH1cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCBvbldpbmRvd0ZvY3VzLCBmYWxzZSlcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgb25XaW5kb3dGb2N1cywgZmFsc2UpXG4gICAgfVxuICB9LCBbaW5wdXRSZWYsIGlzRmlsZURpYWxvZ0FjdGl2ZSwgb25GaWxlRGlhbG9nQ2FuY2VsXSlcblxuICAvLyBDYiB0byBvcGVuIHRoZSBmaWxlIGRpYWxvZyB3aGVuIFNQQUNFL0VOVEVSIG9jY3VycyBvbiB0aGUgZHJvcHpvbmVcbiAgY29uc3Qgb25LZXlEb3duQ2IgPSB1c2VDYWxsYmFjayhcbiAgICBldmVudCA9PiB7XG4gICAgICAvLyBJZ25vcmUga2V5Ym9hcmQgZXZlbnRzIGJ1YmJsaW5nIHVwIHRoZSBET00gdHJlZVxuICAgICAgaWYgKCFyb290UmVmLmN1cnJlbnQgfHwgIXJvb3RSZWYuY3VycmVudC5pc0VxdWFsTm9kZShldmVudC50YXJnZXQpKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gMzIgfHwgZXZlbnQua2V5Q29kZSA9PT0gMTMpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICBvcGVuRmlsZURpYWxvZygpXG4gICAgICB9XG4gICAgfSxcbiAgICBbcm9vdFJlZiwgaW5wdXRSZWZdXG4gIClcblxuICAvLyBVcGRhdGUgZm9jdXMgc3RhdGUgZm9yIHRoZSBkcm9wem9uZVxuICBjb25zdCBvbkZvY3VzQ2IgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAnZm9jdXMnIH0pXG4gIH0sIFtdKVxuICBjb25zdCBvbkJsdXJDYiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICdibHVyJyB9KVxuICB9LCBbXSlcblxuICAvLyBDYiB0byBvcGVuIHRoZSBmaWxlIGRpYWxvZyB3aGVuIGNsaWNrIG9jY3VycyBvbiB0aGUgZHJvcHpvbmVcbiAgY29uc3Qgb25DbGlja0NiID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChub0NsaWNrKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBJbiBJRTExL0VkZ2UgdGhlIGZpbGUtYnJvd3NlciBkaWFsb2cgaXMgYmxvY2tpbmcsIHRoZXJlZm9yZSwgdXNlIHNldFRpbWVvdXQoKVxuICAgIC8vIHRvIGVuc3VyZSBSZWFjdCBjYW4gaGFuZGxlIHN0YXRlIGNoYW5nZXNcbiAgICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdC1kcm9wem9uZS9yZWFjdC1kcm9wem9uZS9pc3N1ZXMvNDUwXG4gICAgaWYgKGlzSWVPckVkZ2UoKSkge1xuICAgICAgc2V0VGltZW91dChvcGVuRmlsZURpYWxvZywgMClcbiAgICB9IGVsc2Uge1xuICAgICAgb3BlbkZpbGVEaWFsb2coKVxuICAgIH1cbiAgfSwgW2lucHV0UmVmLCBub0NsaWNrXSlcblxuICBjb25zdCBkcmFnVGFyZ2V0c1JlZiA9IHVzZVJlZihbXSlcbiAgY29uc3Qgb25Eb2N1bWVudERyb3AgPSBldmVudCA9PiB7XG4gICAgaWYgKHJvb3RSZWYuY3VycmVudCAmJiByb290UmVmLmN1cnJlbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkge1xuICAgICAgLy8gSWYgd2UgaW50ZXJjZXB0ZWQgYW4gZXZlbnQgZm9yIG91ciBpbnN0YW5jZSwgbGV0IGl0IHByb3BhZ2F0ZSBkb3duIHRvIHRoZSBpbnN0YW5jZSdzIG9uRHJvcCBoYW5kbGVyXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgIGRyYWdUYXJnZXRzUmVmLmN1cnJlbnQgPSBbXVxuICB9XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAocHJldmVudERyb3BPbkRvY3VtZW50KSB7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdkcmFnb3ZlcicsIG9uRG9jdW1lbnREcmFnT3ZlciwgZmFsc2UpXG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdkcm9wJywgb25Eb2N1bWVudERyb3AsIGZhbHNlKVxuICAgIH1cblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAocHJldmVudERyb3BPbkRvY3VtZW50KSB7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2RyYWdvdmVyJywgb25Eb2N1bWVudERyYWdPdmVyKVxuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdkcm9wJywgb25Eb2N1bWVudERyb3ApXG4gICAgICB9XG4gICAgfVxuICB9LCBbcm9vdFJlZiwgcHJldmVudERyb3BPbkRvY3VtZW50XSlcblxuICBjb25zdCBvbkRyYWdFbnRlckNiID0gdXNlQ2FsbGJhY2soXG4gICAgZXZlbnQgPT4ge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgLy8gUGVyc2lzdCBoZXJlIGJlY2F1c2Ugd2UgbmVlZCB0aGUgZXZlbnQgbGF0ZXIgYWZ0ZXIgZ2V0RmlsZXNGcm9tRXZlbnQoKSBpcyBkb25lXG4gICAgICBldmVudC5wZXJzaXN0KClcbiAgICAgIHN0b3BQcm9wYWdhdGlvbihldmVudClcblxuICAgICAgLy8gQ291bnQgdGhlIGRyb3B6b25lIGFuZCBhbnkgY2hpbGRyZW4gdGhhdCBhcmUgZW50ZXJlZC5cbiAgICAgIGlmIChkcmFnVGFyZ2V0c1JlZi5jdXJyZW50LmluZGV4T2YoZXZlbnQudGFyZ2V0KSA9PT0gLTEpIHtcbiAgICAgICAgZHJhZ1RhcmdldHNSZWYuY3VycmVudCA9IFsuLi5kcmFnVGFyZ2V0c1JlZi5jdXJyZW50LCBldmVudC50YXJnZXRdXG4gICAgICB9XG5cbiAgICAgIGlmIChpc0V2dFdpdGhGaWxlcyhldmVudCkpIHtcbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKGdldEZpbGVzRnJvbUV2ZW50KGV2ZW50KSkudGhlbihkcmFnZ2VkRmlsZXMgPT4ge1xuICAgICAgICAgIGlmIChpc1Byb3BhZ2F0aW9uU3RvcHBlZChldmVudCkgJiYgIW5vRHJhZ0V2ZW50c0J1YmJsaW5nKSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICBkcmFnZ2VkRmlsZXMsXG4gICAgICAgICAgICBpc0RyYWdBY3RpdmU6IHRydWUsXG4gICAgICAgICAgICB0eXBlOiAnc2V0RHJhZ2dlZEZpbGVzJ1xuICAgICAgICAgIH0pXG5cbiAgICAgICAgICBpZiAob25EcmFnRW50ZXIpIHtcbiAgICAgICAgICAgIG9uRHJhZ0VudGVyKGV2ZW50KVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuICAgIFtnZXRGaWxlc0Zyb21FdmVudCwgb25EcmFnRW50ZXIsIG5vRHJhZ0V2ZW50c0J1YmJsaW5nXVxuICApXG5cbiAgY29uc3Qgb25EcmFnT3ZlckNiID0gdXNlQ2FsbGJhY2soXG4gICAgZXZlbnQgPT4ge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgZXZlbnQucGVyc2lzdCgpXG4gICAgICBzdG9wUHJvcGFnYXRpb24oZXZlbnQpXG5cbiAgICAgIGlmIChldmVudC5kYXRhVHJhbnNmZXIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBldmVudC5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9ICdjb3B5J1xuICAgICAgICB9IGNhdGNoIHt9IC8qIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHkgKi9cbiAgICAgIH1cblxuICAgICAgaWYgKGlzRXZ0V2l0aEZpbGVzKGV2ZW50KSAmJiBvbkRyYWdPdmVyKSB7XG4gICAgICAgIG9uRHJhZ092ZXIoZXZlbnQpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG4gICAgW29uRHJhZ092ZXIsIG5vRHJhZ0V2ZW50c0J1YmJsaW5nXVxuICApXG5cbiAgY29uc3Qgb25EcmFnTGVhdmVDYiA9IHVzZUNhbGxiYWNrKFxuICAgIGV2ZW50ID0+IHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgIGV2ZW50LnBlcnNpc3QoKVxuICAgICAgc3RvcFByb3BhZ2F0aW9uKGV2ZW50KVxuXG4gICAgICAvLyBPbmx5IGRlYWN0aXZhdGUgb25jZSB0aGUgZHJvcHpvbmUgYW5kIGFsbCBjaGlsZHJlbiBoYXZlIGJlZW4gbGVmdFxuICAgICAgY29uc3QgdGFyZ2V0cyA9IGRyYWdUYXJnZXRzUmVmLmN1cnJlbnQuZmlsdGVyKFxuICAgICAgICB0YXJnZXQgPT4gdGFyZ2V0ICE9PSBldmVudC50YXJnZXQgJiYgcm9vdFJlZi5jdXJyZW50ICYmIHJvb3RSZWYuY3VycmVudC5jb250YWlucyh0YXJnZXQpXG4gICAgICApXG4gICAgICBkcmFnVGFyZ2V0c1JlZi5jdXJyZW50ID0gdGFyZ2V0c1xuICAgICAgaWYgKHRhcmdldHMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgZGlzcGF0Y2goe1xuICAgICAgICBpc0RyYWdBY3RpdmU6IGZhbHNlLFxuICAgICAgICB0eXBlOiAnc2V0RHJhZ2dlZEZpbGVzJyxcbiAgICAgICAgZHJhZ2dlZEZpbGVzOiBbXVxuICAgICAgfSlcblxuICAgICAgaWYgKGlzRXZ0V2l0aEZpbGVzKGV2ZW50KSAmJiBvbkRyYWdMZWF2ZSkge1xuICAgICAgICBvbkRyYWdMZWF2ZShldmVudClcbiAgICAgIH1cbiAgICB9LFxuICAgIFtyb290UmVmLCBvbkRyYWdMZWF2ZSwgbm9EcmFnRXZlbnRzQnViYmxpbmddXG4gIClcblxuICBjb25zdCBvbkRyb3BDYiA9IHVzZUNhbGxiYWNrKFxuICAgIGV2ZW50ID0+IHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgIC8vIFBlcnNpc3QgaGVyZSBiZWNhdXNlIHdlIG5lZWQgdGhlIGV2ZW50IGxhdGVyIGFmdGVyIGdldEZpbGVzRnJvbUV2ZW50KCkgaXMgZG9uZVxuICAgICAgZXZlbnQucGVyc2lzdCgpXG4gICAgICBzdG9wUHJvcGFnYXRpb24oZXZlbnQpXG5cbiAgICAgIGRyYWdUYXJnZXRzUmVmLmN1cnJlbnQgPSBbXVxuICAgICAgZGlzcGF0Y2goeyB0eXBlOiAncmVzZXQnIH0pXG5cbiAgICAgIGlmIChpc0V2dFdpdGhGaWxlcyhldmVudCkpIHtcbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKGdldEZpbGVzRnJvbUV2ZW50KGV2ZW50KSkudGhlbihmaWxlcyA9PiB7XG4gICAgICAgICAgaWYgKGlzUHJvcGFnYXRpb25TdG9wcGVkKGV2ZW50KSAmJiAhbm9EcmFnRXZlbnRzQnViYmxpbmcpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGFjY2VwdGVkRmlsZXMgPSBbXVxuICAgICAgICAgIGNvbnN0IHJlamVjdGVkRmlsZXMgPSBbXVxuXG4gICAgICAgICAgZmlsZXMuZm9yRWFjaChmaWxlID0+IHtcbiAgICAgICAgICAgIGlmIChmaWxlQWNjZXB0ZWQoZmlsZSwgYWNjZXB0KSAmJiBmaWxlTWF0Y2hTaXplKGZpbGUsIG1heFNpemUsIG1pblNpemUpKSB7XG4gICAgICAgICAgICAgIGFjY2VwdGVkRmlsZXMucHVzaChmaWxlKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmVqZWN0ZWRGaWxlcy5wdXNoKGZpbGUpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcblxuICAgICAgICAgIGlmICghbXVsdGlwbGUgJiYgYWNjZXB0ZWRGaWxlcy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICByZWplY3RlZEZpbGVzLnB1c2goLi4uYWNjZXB0ZWRGaWxlcy5zcGxpY2UoMCkpIC8vIFJlamVjdCBldmVyeXRoaW5nIGFuZCBlbXB0eSBhY2NlcHRlZCBmaWxlc1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIGFjY2VwdGVkRmlsZXMsXG4gICAgICAgICAgICByZWplY3RlZEZpbGVzLFxuICAgICAgICAgICAgdHlwZTogJ3NldEZpbGVzJ1xuICAgICAgICAgIH0pXG5cbiAgICAgICAgICBpZiAob25Ecm9wKSB7XG4gICAgICAgICAgICBvbkRyb3AoYWNjZXB0ZWRGaWxlcywgcmVqZWN0ZWRGaWxlcywgZXZlbnQpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHJlamVjdGVkRmlsZXMubGVuZ3RoID4gMCAmJiBvbkRyb3BSZWplY3RlZCkge1xuICAgICAgICAgICAgb25Ecm9wUmVqZWN0ZWQocmVqZWN0ZWRGaWxlcywgZXZlbnQpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGFjY2VwdGVkRmlsZXMubGVuZ3RoID4gMCAmJiBvbkRyb3BBY2NlcHRlZCkge1xuICAgICAgICAgICAgb25Ecm9wQWNjZXB0ZWQoYWNjZXB0ZWRGaWxlcywgZXZlbnQpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0sXG4gICAgW1xuICAgICAgbXVsdGlwbGUsXG4gICAgICBhY2NlcHQsXG4gICAgICBtaW5TaXplLFxuICAgICAgbWF4U2l6ZSxcbiAgICAgIGdldEZpbGVzRnJvbUV2ZW50LFxuICAgICAgb25Ecm9wLFxuICAgICAgb25Ecm9wQWNjZXB0ZWQsXG4gICAgICBvbkRyb3BSZWplY3RlZCxcbiAgICAgIG5vRHJhZ0V2ZW50c0J1YmJsaW5nXG4gICAgXVxuICApXG5cbiAgY29uc3QgY29tcG9zZUhhbmRsZXIgPSBmbiA9PiB7XG4gICAgcmV0dXJuIGRpc2FibGVkID8gbnVsbCA6IGZuXG4gIH1cblxuICBjb25zdCBjb21wb3NlS2V5Ym9hcmRIYW5kbGVyID0gZm4gPT4ge1xuICAgIHJldHVybiBub0tleWJvYXJkID8gbnVsbCA6IGNvbXBvc2VIYW5kbGVyKGZuKVxuICB9XG5cbiAgY29uc3QgY29tcG9zZURyYWdIYW5kbGVyID0gZm4gPT4ge1xuICAgIHJldHVybiBub0RyYWcgPyBudWxsIDogY29tcG9zZUhhbmRsZXIoZm4pXG4gIH1cblxuICBjb25zdCBzdG9wUHJvcGFnYXRpb24gPSBldmVudCA9PiB7XG4gICAgaWYgKG5vRHJhZ0V2ZW50c0J1YmJsaW5nKSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGdldFJvb3RQcm9wcyA9IHVzZU1lbW8oXG4gICAgKCkgPT4gKHtcbiAgICAgIHJlZktleSA9ICdyZWYnLFxuICAgICAgb25LZXlEb3duLFxuICAgICAgb25Gb2N1cyxcbiAgICAgIG9uQmx1cixcbiAgICAgIG9uQ2xpY2ssXG4gICAgICBvbkRyYWdFbnRlcixcbiAgICAgIG9uRHJhZ092ZXIsXG4gICAgICBvbkRyYWdMZWF2ZSxcbiAgICAgIG9uRHJvcCxcbiAgICAgIC4uLnJlc3RcbiAgICB9ID0ge30pID0+ICh7XG4gICAgICBvbktleURvd246IGNvbXBvc2VLZXlib2FyZEhhbmRsZXIoY29tcG9zZUV2ZW50SGFuZGxlcnMob25LZXlEb3duLCBvbktleURvd25DYikpLFxuICAgICAgb25Gb2N1czogY29tcG9zZUtleWJvYXJkSGFuZGxlcihjb21wb3NlRXZlbnRIYW5kbGVycyhvbkZvY3VzLCBvbkZvY3VzQ2IpKSxcbiAgICAgIG9uQmx1cjogY29tcG9zZUtleWJvYXJkSGFuZGxlcihjb21wb3NlRXZlbnRIYW5kbGVycyhvbkJsdXIsIG9uQmx1ckNiKSksXG4gICAgICBvbkNsaWNrOiBjb21wb3NlSGFuZGxlcihjb21wb3NlRXZlbnRIYW5kbGVycyhvbkNsaWNrLCBvbkNsaWNrQ2IpKSxcbiAgICAgIG9uRHJhZ0VudGVyOiBjb21wb3NlRHJhZ0hhbmRsZXIoY29tcG9zZUV2ZW50SGFuZGxlcnMob25EcmFnRW50ZXIsIG9uRHJhZ0VudGVyQ2IpKSxcbiAgICAgIG9uRHJhZ092ZXI6IGNvbXBvc2VEcmFnSGFuZGxlcihjb21wb3NlRXZlbnRIYW5kbGVycyhvbkRyYWdPdmVyLCBvbkRyYWdPdmVyQ2IpKSxcbiAgICAgIG9uRHJhZ0xlYXZlOiBjb21wb3NlRHJhZ0hhbmRsZXIoY29tcG9zZUV2ZW50SGFuZGxlcnMob25EcmFnTGVhdmUsIG9uRHJhZ0xlYXZlQ2IpKSxcbiAgICAgIG9uRHJvcDogY29tcG9zZURyYWdIYW5kbGVyKGNvbXBvc2VFdmVudEhhbmRsZXJzKG9uRHJvcCwgb25Ecm9wQ2IpKSxcbiAgICAgIFtyZWZLZXldOiByb290UmVmLFxuICAgICAgLi4uKCFkaXNhYmxlZCAmJiAhbm9LZXlib2FyZCA/IHsgdGFiSW5kZXg6IDAgfSA6IHt9KSxcbiAgICAgIC4uLnJlc3RcbiAgICB9KSxcbiAgICBbXG4gICAgICByb290UmVmLFxuICAgICAgb25LZXlEb3duQ2IsXG4gICAgICBvbkZvY3VzQ2IsXG4gICAgICBvbkJsdXJDYixcbiAgICAgIG9uQ2xpY2tDYixcbiAgICAgIG9uRHJhZ0VudGVyQ2IsXG4gICAgICBvbkRyYWdPdmVyQ2IsXG4gICAgICBvbkRyYWdMZWF2ZUNiLFxuICAgICAgb25Ecm9wQ2IsXG4gICAgICBub0tleWJvYXJkLFxuICAgICAgbm9EcmFnLFxuICAgICAgZGlzYWJsZWRcbiAgICBdXG4gIClcblxuICBjb25zdCBvbklucHV0RWxlbWVudENsaWNrID0gdXNlQ2FsbGJhY2soZXZlbnQgPT4ge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gIH0sIFtdKVxuXG4gIGNvbnN0IGdldElucHV0UHJvcHMgPSB1c2VNZW1vKFxuICAgICgpID0+ICh7IHJlZktleSA9ICdyZWYnLCBvbkNoYW5nZSwgb25DbGljaywgLi4ucmVzdCB9ID0ge30pID0+IHtcbiAgICAgIGNvbnN0IGlucHV0UHJvcHMgPSB7XG4gICAgICAgIGFjY2VwdCxcbiAgICAgICAgbXVsdGlwbGUsXG4gICAgICAgIHR5cGU6ICdmaWxlJyxcbiAgICAgICAgc3R5bGU6IHsgZGlzcGxheTogJ25vbmUnIH0sXG4gICAgICAgIG9uQ2hhbmdlOiBjb21wb3NlSGFuZGxlcihjb21wb3NlRXZlbnRIYW5kbGVycyhvbkNoYW5nZSwgb25Ecm9wQ2IpKSxcbiAgICAgICAgb25DbGljazogY29tcG9zZUhhbmRsZXIoY29tcG9zZUV2ZW50SGFuZGxlcnMob25DbGljaywgb25JbnB1dEVsZW1lbnRDbGljaykpLFxuICAgICAgICBhdXRvQ29tcGxldGU6ICdvZmYnLFxuICAgICAgICB0YWJJbmRleDogLTEsXG4gICAgICAgIFtyZWZLZXldOiBpbnB1dFJlZlxuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5pbnB1dFByb3BzLFxuICAgICAgICAuLi5yZXN0XG4gICAgICB9XG4gICAgfSxcbiAgICBbaW5wdXRSZWYsIGFjY2VwdCwgbXVsdGlwbGUsIG9uRHJvcENiLCBkaXNhYmxlZF1cbiAgKVxuXG4gIGNvbnN0IGZpbGVDb3VudCA9IGRyYWdnZWRGaWxlcy5sZW5ndGhcbiAgY29uc3QgaXNNdWx0aXBsZUFsbG93ZWQgPSBtdWx0aXBsZSB8fCBmaWxlQ291bnQgPD0gMVxuICBjb25zdCBpc0RyYWdBY2NlcHQgPSBmaWxlQ291bnQgPiAwICYmIGFsbEZpbGVzQWNjZXB0ZWQoZHJhZ2dlZEZpbGVzLCBhY2NlcHQsIG1heFNpemUsIG1pblNpemUpXG4gIGNvbnN0IGlzRHJhZ1JlamVjdCA9IGZpbGVDb3VudCA+IDAgJiYgKCFpc0RyYWdBY2NlcHQgfHwgIWlzTXVsdGlwbGVBbGxvd2VkKVxuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgaXNEcmFnQWNjZXB0LFxuICAgIGlzRHJhZ1JlamVjdCxcbiAgICBpc0ZvY3VzZWQ6IGlzRm9jdXNlZCAmJiAhZGlzYWJsZWQsXG4gICAgZ2V0Um9vdFByb3BzLFxuICAgIGdldElucHV0UHJvcHMsXG4gICAgcm9vdFJlZixcbiAgICBpbnB1dFJlZixcbiAgICBvcGVuOiBjb21wb3NlSGFuZGxlcihvcGVuRmlsZURpYWxvZylcbiAgfVxufVxuXG5mdW5jdGlvbiByZWR1Y2VyKHN0YXRlLCBhY3Rpb24pIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgIGNhc2UgJ2ZvY3VzJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBpc0ZvY3VzZWQ6IHRydWVcbiAgICAgIH1cbiAgICBjYXNlICdibHVyJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBpc0ZvY3VzZWQ6IGZhbHNlXG4gICAgICB9XG4gICAgY2FzZSAnb3BlbkRpYWxvZyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgaXNGaWxlRGlhbG9nQWN0aXZlOiB0cnVlXG4gICAgICB9XG4gICAgY2FzZSAnY2xvc2VEaWFsb2cnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGlzRmlsZURpYWxvZ0FjdGl2ZTogZmFsc2VcbiAgICAgIH1cbiAgICBjYXNlICdzZXREcmFnZ2VkRmlsZXMnOlxuICAgICAgLyogZXNsaW50IG5vLWNhc2UtZGVjbGFyYXRpb25zOiAwICovXG4gICAgICBjb25zdCB7IGlzRHJhZ0FjdGl2ZSwgZHJhZ2dlZEZpbGVzIH0gPSBhY3Rpb25cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBkcmFnZ2VkRmlsZXMsXG4gICAgICAgIGlzRHJhZ0FjdGl2ZVxuICAgICAgfVxuICAgIGNhc2UgJ3NldEZpbGVzJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBhY2NlcHRlZEZpbGVzOiBhY3Rpb24uYWNjZXB0ZWRGaWxlcyxcbiAgICAgICAgcmVqZWN0ZWRGaWxlczogYWN0aW9uLnJlamVjdGVkRmlsZXNcbiAgICAgIH1cbiAgICBjYXNlICdyZXNldCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgaXNGaWxlRGlhbG9nQWN0aXZlOiBmYWxzZSxcbiAgICAgICAgaXNEcmFnQWN0aXZlOiBmYWxzZSxcbiAgICAgICAgZHJhZ2dlZEZpbGVzOiBbXVxuICAgICAgfVxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gc3RhdGVcbiAgfVxufVxuIl0sIm5hbWVzIjpbIl9fYXdhaXRlciIsInRoaXNBcmciLCJfYXJndW1lbnRzIiwiUCIsImdlbmVyYXRvciIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiZnVsZmlsbGVkIiwidmFsdWUiLCJzdGVwIiwibmV4dCIsImUiLCJyZWplY3RlZCIsInJlc3VsdCIsImRvbmUiLCJ0aGVuIiwiYXBwbHkiLCJfX2dlbmVyYXRvciIsImJvZHkiLCJmIiwieSIsInQiLCJnIiwiXyIsImxhYmVsIiwic2VudCIsInRyeXMiLCJvcHMiLCJ2ZXJiIiwidGhyb3ciLCJyZXR1cm4iLCJTeW1ib2wiLCJpdGVyYXRvciIsInRoaXMiLCJuIiwidiIsIm9wIiwiVHlwZUVycm9yIiwiY2FsbCIsInBvcCIsImxlbmd0aCIsInB1c2giLCJfX3JlYWQiLCJvIiwibSIsInIiLCJpIiwiYXIiLCJlcnJvciIsIl9fc3ByZWFkIiwiYXJndW1lbnRzIiwiY29uY2F0IiwiQ09NTU9OX01JTUVfVFlQRVMiLCJNYXAiLCJ0b0ZpbGVXaXRoUGF0aCIsImZpbGUiLCJwYXRoIiwibmFtZSIsImxhc3RJbmRleE9mIiwidHlwZSIsImV4dCIsInNwbGl0IiwidG9Mb3dlckNhc2UiLCJnZXQiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsIndyaXRhYmxlIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIndpdGhNaW1lVHlwZSIsIndlYmtpdFJlbGF0aXZlUGF0aCIsIkZJTEVTX1RPX0lHTk9SRSIsImZyb21FdmVudCIsImV2dCIsInRzbGliXzEuX19hd2FpdGVyIiwidHNsaWJfMS5fX2dlbmVyYXRvciIsIl9hIiwiZGF0YVRyYW5zZmVyIiwiaXNEcmFnRXZ0IiwiZHQiLCJpdGVtcyIsImZyb21MaXN0IiwiZmlsdGVyIiwiaXRlbSIsImtpbmQiLCJhbGwiLCJtYXAiLCJ0b0ZpbGVQcm9taXNlcyIsIm5vSWdub3JlZEZpbGVzIiwiZmxhdHRlbiIsInJlZHVjZSIsImFjYyIsImZpbGVzIiwidHNsaWJfMS5fX3NwcmVhZCIsIkFycmF5IiwiaXNBcnJheSIsImdldERhdGFUcmFuc2ZlckZpbGVzIiwiaXNJbnB1dCIsInRhcmdldCIsImdldElucHV0RmlsZXMiLCJpbmRleE9mIiwid2Via2l0R2V0QXNFbnRyeSIsImZyb21EYXRhVHJhbnNmZXJJdGVtIiwiZW50cnkiLCJpc0RpcmVjdG9yeSIsImZyb21EaXJFbnRyeSIsImdldEFzRmlsZSIsImZ3cCIsImZyb21FbnRyeSIsImZ1bGxQYXRoIiwiZXJyIiwiZnJvbUZpbGVFbnRyeSIsInJlYWRlciIsImNyZWF0ZVJlYWRlciIsImVudHJpZXMiLCJyZWFkRW50cmllcyIsIl90aGlzIiwiYmF0Y2giLCJlcnJfMSIsImV4cG9ydHMiLCJsIiwibW9kdWxlIiwid2luZG93IiwiTWF0aCIsInNlbGYiLCJGdW5jdGlvbiIsIl9fZyIsInZlcnNpb24iLCJfX2UiLCJhIiwidG9TdHJpbmciLCJzbGljZSIsInUiLCJzdG9yZSIsImMiLCJzIiwicCIsIkYiLCJHIiwiaCIsIlMiLCJkIiwieCIsIkIiLCJwcm90b3R5cGUiLCJiIiwiVSIsImNvcmUiLCJXIiwiUiIsInJhbmRvbSIsIm1pbiIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwicmVwbGFjZSIsInNvbWUiLCJ0cmltIiwiY2hhckF0IiwiZW5kc1dpdGgiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJ2YWx1ZU9mIiwiaW5zcGVjdFNvdXJjZSIsImpvaW4iLCJTdHJpbmciLCJoYXNPd25Qcm9wZXJ0eSIsInciLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsImNlaWwiLCJmbG9vciIsImlzTmFOIiwiY29uc3RydWN0b3IiLCJmaWxlQWNjZXB0ZWQiLCJhY2NlcHQiLCJhY2NlcHRzIiwiZmlsZU1hdGNoU2l6ZSIsIm1heFNpemUiLCJtaW5TaXplIiwic2l6ZSIsImlzUHJvcGFnYXRpb25TdG9wcGVkIiwiZXZlbnQiLCJjYW5jZWxCdWJibGUiLCJpc0V2dFdpdGhGaWxlcyIsInR5cGVzIiwib25Eb2N1bWVudERyYWdPdmVyIiwicHJldmVudERlZmF1bHQiLCJjb21wb3NlRXZlbnRIYW5kbGVycyIsImZucyIsImFyZ3MiLCJmbiIsIkRyb3B6b25lIiwiZm9yd2FyZFJlZiIsInJlZiIsImNoaWxkcmVuIiwidXNlRHJvcHpvbmUiLCJvcGVuIiwicHJvcHMiLCJ1c2VFZmZlY3QiLCJfdHlwZW9mIiwiY3VycmVudCIsIlJlYWN0IiwiRnJhZ21lbnQiLCJkaXNwbGF5TmFtZSIsImluaXRpYWxTdGF0ZSIsImlzRm9jdXNlZCIsInByb3BUeXBlcyIsIlByb3BUeXBlcyIsImZ1bmMiLCJvbmVPZlR5cGUiLCJzdHJpbmciLCJhcnJheU9mIiwibXVsdGlwbGUiLCJib29sIiwicHJldmVudERyb3BPbkRvY3VtZW50Iiwibm9DbGljayIsIm5vS2V5Ym9hcmQiLCJub0RyYWciLCJub0RyYWdFdmVudHNCdWJibGluZyIsIm51bWJlciIsImRpc2FibGVkIiwiZ2V0RmlsZXNGcm9tRXZlbnQiLCJvbkZpbGVEaWFsb2dDYW5jZWwiLCJvbkRyYWdFbnRlciIsIm9uRHJhZ0xlYXZlIiwib25EcmFnT3ZlciIsIm9uRHJvcCIsIm9uRHJvcEFjY2VwdGVkIiwib25Ecm9wUmVqZWN0ZWQiLCJpc0ZpbGVEaWFsb2dBY3RpdmUiLCJpc0RyYWdBY3RpdmUiLCJpc0RyYWdBY2NlcHQiLCJpc0RyYWdSZWplY3QiLCJkcmFnZ2VkRmlsZXMiLCJhY2NlcHRlZEZpbGVzIiwicmVqZWN0ZWRGaWxlcyIsIm9wZW5GaWxlRGlhbG9nIiwiaW5wdXRSZWYiLCJkaXNwYXRjaCIsImNsaWNrIiwib25XaW5kb3dGb2N1cyIsInNldFRpbWVvdXQiLCJJbmZpbml0eSIsInJvb3RSZWYiLCJ1c2VSZWYiLCJ1c2VSZWR1Y2VyIiwicmVkdWNlciIsInN0YXRlIiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJvbkRvY3VtZW50RHJvcCIsImNvbnRhaW5zIiwiZHJhZ1RhcmdldHNSZWYiLCJvbktleURvd25DYiIsInVzZUNhbGxiYWNrIiwiaXNFcXVhbE5vZGUiLCJrZXlDb2RlIiwib25Gb2N1c0NiIiwib25CbHVyQ2IiLCJvbkNsaWNrQ2IiLCJ1c2VyQWdlbnQiLCJuYXZpZ2F0b3IiLCJpc0llIiwiaXNFZGdlIiwiaXNJZU9yRWRnZSIsImNvbXBvc2VIYW5kbGVyIiwiY29tcG9zZUtleWJvYXJkSGFuZGxlciIsImNvbXBvc2VEcmFnSGFuZGxlciIsIm9uRHJhZ0VudGVyQ2IiLCJwZXJzaXN0Iiwic3RvcFByb3BhZ2F0aW9uIiwib25EcmFnT3ZlckNiIiwiZHJvcEVmZmVjdCIsIm9uRHJhZ0xlYXZlQ2IiLCJ0YXJnZXRzIiwib25Ecm9wQ2IiLCJmb3JFYWNoIiwic3BsaWNlIiwiZ2V0Um9vdFByb3BzIiwidXNlTWVtbyIsInJlZktleSIsIm9uS2V5RG93biIsIm9uRm9jdXMiLCJvbkJsdXIiLCJvbkNsaWNrIiwicmVzdCIsInRhYkluZGV4Iiwib25JbnB1dEVsZW1lbnRDbGljayIsImdldElucHV0UHJvcHMiLCJvbkNoYW5nZSIsInN0eWxlIiwiZGlzcGxheSIsImF1dG9Db21wbGV0ZSIsImZpbGVDb3VudCIsImlzTXVsdGlwbGVBbGxvd2VkIiwiZXZlcnkiLCJhbGxGaWxlc0FjY2VwdGVkIiwiYWN0aW9uIl0sIm1hcHBpbmdzIjoiNjRFQW1FTyxTQUFTQSxFQUFVQyxFQUFTQyxFQUFZQyxFQUFHQyxHQUM5QyxPQUFPLElBQVdELEVBQU5BLEdBQVVFLFNBQVUsU0FBVUMsRUFBU0MsR0FDL0MsU0FBU0MsRUFBVUMsR0FBUyxJQUFNQyxFQUFLTixFQUFVTyxLQUFLRixJQUFXLE1BQU9HLEdBQUtMLEVBQU9LLElBQ3BGLFNBQVNDLEVBQVNKLEdBQVMsSUFBTUMsRUFBS04sRUFBaUIsTUFBRUssSUFBVyxNQUFPRyxHQUFLTCxFQUFPSyxJQUN2RixTQUFTRixFQUFLSSxHQUFV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
|
package/package.json
CHANGED
|
@@ -112,8 +112,12 @@
|
|
|
112
112
|
"@commitlint/config-angular": "^7.0.1",
|
|
113
113
|
"@commitlint/prompt": "^7.0.0",
|
|
114
114
|
"@commitlint/prompt-cli": "^7.0.0",
|
|
115
|
-
"@
|
|
116
|
-
"@
|
|
115
|
+
"@testing-library/dom": "^6.5.0",
|
|
116
|
+
"@testing-library/jest-dom": "^4.1.0",
|
|
117
|
+
"@testing-library/react": "^9.3.0",
|
|
118
|
+
"@testing-library/react-hooks": "^2.0.3",
|
|
119
|
+
"@types/react": "^16.9.0",
|
|
120
|
+
"@types/react-dom": "^16.9.0",
|
|
117
121
|
"babel-eslint": "*",
|
|
118
122
|
"babel-jest": "^24.1.0",
|
|
119
123
|
"babel-plugin-add-module-exports": "^1.0.0",
|
|
@@ -138,12 +142,10 @@
|
|
|
138
142
|
"lint-staged": "^7.2.2",
|
|
139
143
|
"markdownlint-cli": "^0.13.0",
|
|
140
144
|
"prettier": "*",
|
|
141
|
-
"react": "^16.
|
|
142
|
-
"react-dom": "^16.
|
|
143
|
-
"react-hooks-testing-library": "^0.3.4",
|
|
145
|
+
"react": "^16.9.0",
|
|
146
|
+
"react-dom": "^16.9.0",
|
|
144
147
|
"react-styleguidist": "^9.0.1",
|
|
145
|
-
"react-test-renderer": "^16.
|
|
146
|
-
"react-testing-library": "^6.0.0",
|
|
148
|
+
"react-test-renderer": "^16.9.0",
|
|
147
149
|
"rimraf": "^2.5.2",
|
|
148
150
|
"rollup": "^1.3.0",
|
|
149
151
|
"rollup-plugin-babel": "^4.3.2",
|
|
@@ -165,7 +167,7 @@
|
|
|
165
167
|
"path": "@commitlint/prompt"
|
|
166
168
|
}
|
|
167
169
|
},
|
|
168
|
-
"version": "10.1.
|
|
170
|
+
"version": "10.1.10",
|
|
169
171
|
"engines": {
|
|
170
172
|
"node": ">= 8"
|
|
171
173
|
}
|
package/src/index.js
CHANGED
|
@@ -725,7 +725,7 @@ export function useDropzone({
|
|
|
725
725
|
|
|
726
726
|
const fileCount = draggedFiles.length
|
|
727
727
|
const isMultipleAllowed = multiple || fileCount <= 1
|
|
728
|
-
const isDragAccept = fileCount > 0 && allFilesAccepted(draggedFiles, accept)
|
|
728
|
+
const isDragAccept = fileCount > 0 && allFilesAccepted(draggedFiles, accept, maxSize, minSize)
|
|
729
729
|
const isDragReject = fileCount > 0 && (!isDragAccept || !isMultipleAllowed)
|
|
730
730
|
|
|
731
731
|
return {
|
package/src/index.spec.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/* eslint react/prop-types: 0, jsx-a11y/label-has-for: 0 */
|
|
2
2
|
import React, { createRef } from 'react'
|
|
3
|
-
import { cleanup, fireEvent, render } from '
|
|
4
|
-
import { renderHook } from 'react-hooks
|
|
3
|
+
import { cleanup, fireEvent, render } from '@testing-library/react'
|
|
4
|
+
import { renderHook } from '@testing-library/react-hooks'
|
|
5
|
+
import '@testing-library/jest-dom/extend-expect'
|
|
5
6
|
import { fromEvent } from 'file-selector'
|
|
6
7
|
import * as utils from './utils'
|
|
7
8
|
import Dropzone, { useDropzone } from './index'
|
|
@@ -622,12 +623,12 @@ describe('useDropzone() hook', () => {
|
|
|
622
623
|
const dragEvt = new Event('dragover', { bubbles: true })
|
|
623
624
|
const dragEvtPreventDefaultSpy = jest.spyOn(dragEvt, 'preventDefault')
|
|
624
625
|
fireEvent(document.body, dragEvt)
|
|
625
|
-
expect(dragEvtPreventDefaultSpy).
|
|
626
|
+
expect(dragEvtPreventDefaultSpy).toHaveBeenCalled()
|
|
626
627
|
|
|
627
628
|
const dropEvt = new Event('drop', { bubbles: true })
|
|
628
629
|
const dropEvtPreventDefaultSpy = jest.spyOn(dropEvt, 'preventDefault')
|
|
629
630
|
fireEvent(document.body, dropEvt)
|
|
630
|
-
expect(dropEvtPreventDefaultSpy).
|
|
631
|
+
expect(dropEvtPreventDefaultSpy).toHaveBeenCalled()
|
|
631
632
|
})
|
|
632
633
|
|
|
633
634
|
it('permits drags and drops on elements inside our dropzone', () => {
|
|
@@ -648,7 +649,7 @@ describe('useDropzone() hook', () => {
|
|
|
648
649
|
fireEvent(dropzone, dropEvt)
|
|
649
650
|
// A call is from the onDrop handler for the dropzone,
|
|
650
651
|
// but there should be no more than 1
|
|
651
|
-
expect(dropEvtPreventDefaultSpy).
|
|
652
|
+
expect(dropEvtPreventDefaultSpy).toHaveBeenCalled()
|
|
652
653
|
})
|
|
653
654
|
|
|
654
655
|
it('does not prevent stray drops when {preventDropOnDocument} is false', () => {
|
|
@@ -665,7 +666,7 @@ describe('useDropzone() hook', () => {
|
|
|
665
666
|
const dropEvt = new Event('drop', { bubbles: true })
|
|
666
667
|
const dropEvtPreventDefaultSpy = jest.spyOn(dropEvt, 'preventDefault')
|
|
667
668
|
fireEvent(document.body, dropEvt)
|
|
668
|
-
expect(dropEvtPreventDefaultSpy).
|
|
669
|
+
expect(dropEvtPreventDefaultSpy).toHaveBeenCalledTimes(1) // TODO: Figure out who calls the preventDefault()
|
|
669
670
|
})
|
|
670
671
|
})
|
|
671
672
|
|
|
@@ -1676,7 +1677,7 @@ describe('useDropzone() hook', () => {
|
|
|
1676
1677
|
expect(props.onDrop).toHaveBeenCalled()
|
|
1677
1678
|
})
|
|
1678
1679
|
|
|
1679
|
-
it('sets {isDragActive} and {isDragAccept} if some files are accepted on
|
|
1680
|
+
it('sets {isDragActive} and {isDragAccept} if some files are accepted on dragenter', async () => {
|
|
1680
1681
|
const ui = (
|
|
1681
1682
|
<Dropzone>
|
|
1682
1683
|
{({ getRootProps, getInputProps, isDragActive, isDragAccept, isDragReject }) => (
|
|
@@ -1726,6 +1727,29 @@ describe('useDropzone() hook', () => {
|
|
|
1726
1727
|
expect(dropzone).toHaveTextContent('dragReject')
|
|
1727
1728
|
})
|
|
1728
1729
|
|
|
1730
|
+
it('sets {isDragReject} if some files are too large', async () => {
|
|
1731
|
+
const ui = (
|
|
1732
|
+
<Dropzone maxSize={0}>
|
|
1733
|
+
{({ getRootProps, getInputProps, isDragAccept, isDragReject }) => (
|
|
1734
|
+
<div {...getRootProps()}>
|
|
1735
|
+
<input {...getInputProps()} />
|
|
1736
|
+
{isDragAccept && 'dragAccept'}
|
|
1737
|
+
{isDragReject && 'dragReject'}
|
|
1738
|
+
</div>
|
|
1739
|
+
)}
|
|
1740
|
+
</Dropzone>
|
|
1741
|
+
)
|
|
1742
|
+
const { container } = render(ui)
|
|
1743
|
+
const dropzone = container.querySelector('div')
|
|
1744
|
+
|
|
1745
|
+
const data = createDtWithFiles(files)
|
|
1746
|
+
fireDragEnter(dropzone, data)
|
|
1747
|
+
await flushPromises(ui, container)
|
|
1748
|
+
|
|
1749
|
+
expect(dropzone).not.toHaveTextContent('dragAccept')
|
|
1750
|
+
expect(dropzone).toHaveTextContent('dragReject')
|
|
1751
|
+
})
|
|
1752
|
+
|
|
1729
1753
|
it('sets {isDragActive, isDragAccept, isDragReject} if all files are accepted and {multiple} is false on dragenter', async () => {
|
|
1730
1754
|
const ui = (
|
|
1731
1755
|
<Dropzone accept="image/*" multiple={false}>
|
|
@@ -2483,6 +2507,7 @@ function createDtWithFiles(files = []) {
|
|
|
2483
2507
|
files,
|
|
2484
2508
|
items: files.map(file => ({
|
|
2485
2509
|
kind: 'file',
|
|
2510
|
+
size: file.size,
|
|
2486
2511
|
type: file.type,
|
|
2487
2512
|
getAsFile: () => file
|
|
2488
2513
|
})),
|
package/src/utils/index.js
CHANGED
|
@@ -10,8 +10,10 @@ export function fileMatchSize(file, maxSize, minSize) {
|
|
|
10
10
|
return file.size <= maxSize && file.size >= minSize
|
|
11
11
|
}
|
|
12
12
|
|
|
13
|
-
export function allFilesAccepted(files, accept) {
|
|
14
|
-
return files.every(file =>
|
|
13
|
+
export function allFilesAccepted(files, accept, maxSize, minSize) {
|
|
14
|
+
return files.every(file => {
|
|
15
|
+
return fileAccepted(file, accept) && fileMatchSize(file, maxSize, minSize)
|
|
16
|
+
})
|
|
15
17
|
}
|
|
16
18
|
|
|
17
19
|
// React's synthetic events has event.isPropagationStopped,
|