UNPKG

botframework-webchat-component

Version:
277 lines (222 loc) 25.5 kB
"use strict"; function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } Object.defineProperty(exports, "__esModule", { value: true }); exports.connectUploadButton = exports.default = void 0; var _botframeworkWebchatApi = require("botframework-webchat-api"); var _classnames = _interopRequireDefault(require("classnames")); var _propTypes = _interopRequireDefault(require("prop-types")); var _react = _interopRequireWildcard(require("react")); var _AttachmentIcon = _interopRequireDefault(require("./Assets/AttachmentIcon")); var _connectToWebChat = _interopRequireDefault(require("../connectToWebChat")); var _index = _interopRequireDefault(require("../Utils/downscaleImageToDataURL/index")); var _IconButton = _interopRequireDefault(require("./IconButton")); var _useSendFiles = _interopRequireDefault(require("../hooks/useSendFiles")); var _useStyleSet3 = _interopRequireDefault(require("../hooks/useStyleSet")); var _useStyleToEmotionObject = _interopRequireDefault(require("../hooks/internal/useStyleToEmotionObject")); function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; } function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) 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; } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } 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; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } 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; } function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } var useDisabled = _botframeworkWebchatApi.hooks.useDisabled, useLocalizer = _botframeworkWebchatApi.hooks.useLocalizer; var ROOT_STYLE = { '&.webchat__upload-button': { display: 'flex', overflow: 'hidden', position: 'relative', '& .webchat__upload-button--file-input': { height: 0, width: 0, opacity: 0, position: 'absolute', left: 0, top: 0 } } }; var PREVENT_DEFAULT_HANDLER = function PREVENT_DEFAULT_HANDLER(event) { return event.preventDefault(); }; function makeThumbnail(_x, _x2, _x3, _x4, _x5) { return _makeThumbnail.apply(this, arguments); } function _makeThumbnail() { _makeThumbnail = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee3(file, width, height, contentType, quality) { return regeneratorRuntime.wrap(function _callee3$(_context3) { while (1) { switch (_context3.prev = _context3.next) { case 0: if (!/\.(gif|jpe?g|png)$/i.test(file.name)) { _context3.next = 10; break; } _context3.prev = 1; _context3.next = 4; return (0, _index.default)(file, width, height, contentType, quality); case 4: return _context3.abrupt("return", _context3.sent); case 7: _context3.prev = 7; _context3.t0 = _context3["catch"](1); console.warn("Web Chat: Failed to downscale image due to ".concat(_context3.t0, ".")); case 10: case "end": return _context3.stop(); } } }, _callee3, null, [[1, 7]]); })); return _makeThumbnail.apply(this, arguments); } var connectUploadButton = function connectUploadButton() { for (var _len = arguments.length, selectors = new Array(_len), _key = 0; _key < _len; _key++) { selectors[_key] = arguments[_key]; } return _connectToWebChat.default.apply(void 0, [function (_ref) { var disabled = _ref.disabled, language = _ref.language, _sendFiles = _ref.sendFiles, _ref$styleSet$options = _ref.styleSet.options, enableUploadThumbnail = _ref$styleSet$options.enableUploadThumbnail, uploadThumbnailContentType = _ref$styleSet$options.uploadThumbnailContentType, uploadThumbnailHeight = _ref$styleSet$options.uploadThumbnailHeight, uploadThumbnailQuality = _ref$styleSet$options.uploadThumbnailQuality, uploadThumbnailWidth = _ref$styleSet$options.uploadThumbnailWidth; return { disabled: disabled, language: language, sendFiles: function () { var _sendFiles2 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2(files) { return regeneratorRuntime.wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: if (!(files && files.length)) { _context2.next = 6; break; } _context2.t0 = _sendFiles; _context2.next = 4; return Promise.all([].map.call(files, /*#__PURE__*/function () { var _ref2 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(file) { return regeneratorRuntime.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: _context.t0 = _objectSpread; _context.t1 = { name: file.name, size: file.size, url: window.URL.createObjectURL(file) }; _context.t2 = enableUploadThumbnail; if (!_context.t2) { _context.next = 8; break; } _context.next = 6; return makeThumbnail(file, uploadThumbnailWidth, uploadThumbnailHeight, uploadThumbnailContentType, uploadThumbnailQuality); case 6: _context.t3 = _context.sent; _context.t2 = { thumbnail: _context.t3 }; case 8: _context.t4 = _context.t2; return _context.abrupt("return", (0, _context.t0)(_context.t1, _context.t4)); case 10: case "end": return _context.stop(); } } }, _callee); })); return function (_x7) { return _ref2.apply(this, arguments); }; }())); case 4: _context2.t1 = _context2.sent; (0, _context2.t0)(_context2.t1); case 6: case "end": return _context2.stop(); } } }, _callee2); })); function sendFiles(_x6) { return _sendFiles2.apply(this, arguments); } return sendFiles; }() }; }].concat(selectors)); }; exports.connectUploadButton = connectUploadButton; var UploadButton = function UploadButton(_ref3) { var className = _ref3.className; var _useStyleSet = (0, _useStyleSet3.default)(), _useStyleSet2 = _slicedToArray(_useStyleSet, 1), uploadButtonStyleSet = _useStyleSet2[0].uploadButton; var _useDisabled = useDisabled(), _useDisabled2 = _slicedToArray(_useDisabled, 1), disabled = _useDisabled2[0]; var inputRef = (0, _react.useRef)(); var localize = useLocalizer(); var rootClassName = (0, _useStyleToEmotionObject.default)()(ROOT_STYLE) + ''; var sendFiles = (0, _useSendFiles.default)(); var current = inputRef.current; var uploadFileString = localize('TEXT_INPUT_UPLOAD_BUTTON_ALT'); var handleClick = (0, _react.useCallback)(function () { current && current.click(); }, [current]); var handleFileChange = (0, _react.useCallback)(function (_ref4) { var files = _ref4.target.files; sendFiles(files); if (current) { current.value = null; } }, [current, sendFiles]); return /*#__PURE__*/_react.default.createElement("div", { className: (0, _classnames.default)(rootClassName, 'webchat__upload-button', uploadButtonStyleSet + '', className) }, /*#__PURE__*/_react.default.createElement("input", { "aria-disabled": disabled, "aria-hidden": "true", className: "webchat__upload-button--file-input", multiple: true, onChange: disabled ? undefined : handleFileChange, onClick: disabled ? PREVENT_DEFAULT_HANDLER : undefined, readOnly: disabled, ref: inputRef, role: "button", tabIndex: -1, type: "file" }), /*#__PURE__*/_react.default.createElement(_IconButton.default, { alt: uploadFileString, "aria-label": uploadFileString, disabled: disabled, onClick: handleClick }, /*#__PURE__*/_react.default.createElement(_AttachmentIcon.default, null))); }; UploadButton.defaultProps = { className: undefined }; UploadButton.propTypes = { className: _propTypes.default.string }; var _default = UploadButton; exports.default = _default; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9TZW5kQm94L1VwbG9hZEJ1dHRvbi5qcyJdLCJuYW1lcyI6WyJ1c2VEaXNhYmxlZCIsImhvb2tzIiwidXNlTG9jYWxpemVyIiwiUk9PVF9TVFlMRSIsImRpc3BsYXkiLCJvdmVyZmxvdyIsInBvc2l0aW9uIiwiaGVpZ2h0Iiwid2lkdGgiLCJvcGFjaXR5IiwibGVmdCIsInRvcCIsIlBSRVZFTlRfREVGQVVMVF9IQU5ETEVSIiwiZXZlbnQiLCJwcmV2ZW50RGVmYXVsdCIsIm1ha2VUaHVtYm5haWwiLCJmaWxlIiwiY29udGVudFR5cGUiLCJxdWFsaXR5IiwidGVzdCIsIm5hbWUiLCJjb25zb2xlIiwid2FybiIsImNvbm5lY3RVcGxvYWRCdXR0b24iLCJzZWxlY3RvcnMiLCJjb25uZWN0VG9XZWJDaGF0IiwiZGlzYWJsZWQiLCJsYW5ndWFnZSIsInNlbmRGaWxlcyIsInN0eWxlU2V0Iiwib3B0aW9ucyIsImVuYWJsZVVwbG9hZFRodW1ibmFpbCIsInVwbG9hZFRodW1ibmFpbENvbnRlbnRUeXBlIiwidXBsb2FkVGh1bWJuYWlsSGVpZ2h0IiwidXBsb2FkVGh1bWJuYWlsUXVhbGl0eSIsInVwbG9hZFRodW1ibmFpbFdpZHRoIiwiZmlsZXMiLCJsZW5ndGgiLCJQcm9taXNlIiwiYWxsIiwibWFwIiwiY2FsbCIsInNpemUiLCJ1cmwiLCJ3aW5kb3ciLCJVUkwiLCJjcmVhdGVPYmplY3RVUkwiLCJ0aHVtYm5haWwiLCJVcGxvYWRCdXR0b24iLCJjbGFzc05hbWUiLCJ1cGxvYWRCdXR0b25TdHlsZVNldCIsInVwbG9hZEJ1dHRvbiIsImlucHV0UmVmIiwibG9jYWxpemUiLCJyb290Q2xhc3NOYW1lIiwiY3VycmVudCIsInVwbG9hZEZpbGVTdHJpbmciLCJoYW5kbGVDbGljayIsImNsaWNrIiwiaGFuZGxlRmlsZUNoYW5nZSIsInRhcmdldCIsInZhbHVlIiwidW5kZWZpbmVkIiwiZGVmYXVsdFByb3BzIiwicHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwi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QmQsRUFBQUEsU0FBUyxFQUFFYTtBQURlLENBQTVCO0FBSUFkLFlBQVksQ0FBQ2dCLFNBQWIsR0FBeUI7QUFDdkJmLEVBQUFBLFNBQVMsRUFBRWdCLG1CQUFVQztBQURFLENBQXpCO2VBSWVsQixZIiwic291cmNlUm9vdCI6ImNvbXBvbmVudDovLy8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBob29rcyB9IGZyb20gJ2JvdGZyYW1ld29yay13ZWJjaGF0LWFwaSc7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZVJlZiB9IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IEF0dGFjaG1lbnRJY29uIGZyb20gJy4vQXNzZXRzL0F0dGFjaG1lbnRJY29uJztcbmltcG9ydCBjb25uZWN0VG9XZWJDaGF0IGZyb20gJy4uL2Nvbm5lY3RUb1dlYkNoYXQnO1xuaW1wb3J0IGRvd25zY2FsZUltYWdlVG9EYXRhVVJMIGZyb20gJy4uL1V0aWxzL2Rvd25zY2FsZUltYWdlVG9EYXRhVVJML2luZGV4JztcbmltcG9ydCBJY29uQnV0dG9uIGZyb20gJy4vSWNvbkJ1dHRvbic7XG5pbXBvcnQgdXNlU2VuZEZpbGVzIGZyb20gJy4uL2hvb2tzL3VzZVNlbmRGaWxlcyc7XG5pbXBvcnQgdXNlU3R5bGVTZXQgZnJvbSAnLi4vaG9va3MvdXNlU3R5bGVTZXQnO1xuaW1wb3J0IHVzZVN0eWxlVG9FbW90aW9uT2JqZWN0IGZyb20gJy4uL2hvb2tzL2ludGVybmFsL3VzZVN0eWxlVG9FbW90aW9uT2JqZWN0JztcblxuY29uc3QgeyB1c2VEaXNhYmxlZCwgdXNlTG9jYWxpemVyIH0gPSBob29rcztcblxuY29uc3QgUk9PVF9TVFlMRSA9IHtcbiAgJyYud2ViY2hhdF9fdXBsb2FkLWJ1dHRvbic6IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuXG4gICAgJyYgLndlYmNoYXRfX3VwbG9hZC1idXR0b24tLWZpbGUtaW5wdXQnOiB7XG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICB3aWR0aDogMCxcbiAgICAgIG9wYWNpdHk6IDAsXG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIGxlZnQ6IDAsXG4gICAgICB0b3A6IDBcbiAgICB9XG4gIH1cbn07XG5cbmNvbnN0IFBSRVZFTlRfREVGQVVMVF9IQU5ETEVSID0gZXZlbnQgPT4gZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuYXN5bmMgZnVuY3Rpb24gbWFrZVRodW1ibmFpbChmaWxlLCB3aWR0aCwgaGVpZ2h0LCBjb250ZW50VHlwZSwgcXVhbGl0eSkge1xuICBpZiAoL1xcLihnaWZ8anBlP2d8cG5nKSQvaXUudGVzdChmaWxlLm5hbWUpKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBkb3duc2NhbGVJbWFnZVRvRGF0YVVSTChmaWxlLCB3aWR0aCwgaGVpZ2h0LCBjb250ZW50VHlwZSwgcXVhbGl0eSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUud2FybihgV2ViIENoYXQ6IEZhaWxlZCB0byBkb3duc2NhbGUgaW1hZ2UgZHVlIHRvICR7ZXJyb3J9LmApO1xuICAgIH1cbiAgfVxufVxuXG5jb25zdCBjb25uZWN0VXBsb2FkQnV0dG9uID0gKC4uLnNlbGVjdG9ycykgPT5cbiAgY29ubmVjdFRvV2ViQ2hhdChcbiAgICAoe1xuICAgICAgZGlzYWJsZWQsXG4gICAgICBsYW5ndWFnZSxcbiAgICAgIHNlbmRGaWxlcyxcbiAgICAgIHN0eWxlU2V0OiB7XG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICBlbmFibGVVcGxvYWRUaHVtYm5haWwsXG4gICAgICAgICAgdXBsb2FkVGh1bWJuYWlsQ29udGVudFR5cGUsXG4gICAgICAgICAgdXBsb2FkVGh1bWJuYWlsSGVpZ2h0LFxuICAgICAgICAgIHVwbG9hZFRodW1ibmFpbFF1YWxpdHksXG4gICAgICAgICAgdXBsb2FkVGh1bWJuYWlsV2lkdGhcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pID0+ICh7XG4gICAgICBkaXNhYmxlZCxcbiAgICAgIGxhbmd1YWdlLFxuICAgICAgc2VuZEZpbGVzOiBhc3luYyBmaWxlcyA9PiB7XG4gICAgICAgIGlmIChmaWxlcyAmJiBmaWxlcy5sZW5ndGgpIHtcbiAgICAgICAgICAvLyBUT0RPOiBbUDNdIFdlIG5lZWQgdG8gZmluZCByZXZva2VPYmplY3RVUkwgb24gdGhlIFVJIHNpZGVcbiAgICAgICAgICAvLyAgICAgICBSZWR1eCBzdG9yZSBzaG91bGQgbm90IGtub3cgYWJvdXQgdGhlIGJyb3dzZXIgZW52aXJvbm1lbnRcbiAgICAgICAgICAvLyAgICAgICBPbmUgZml4IGlzIHRvIHVzZSBBcnJheUJ1ZmZlciBpbnN0ZWFkIG9mIG9iamVjdCBVUkwsIGJ1dCB0aGF0IHdvdWxkIHJlcXVpcmVzIGNoYW5nZSB0byBEaXJlY3RMaW5lSlNcbiAgICAgICAgICBzZW5kRmlsZXMoXG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgICAgW10ubWFwLmNhbGwoZmlsZXMsIGFzeW5jIGZpbGUgPT4gKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBmaWxlLm5hbWUsXG4gICAgICAgICAgICAgICAgc2l6ZTogZmlsZS5zaXplLFxuICAgICAgICAgICAgICAgIHVybDogd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoZmlsZSksXG4gICAgICAgICAgICAgICAgLi4uKGVuYWJsZVVwbG9hZFRodW1ibmFpbCAmJiB7XG4gICAgICAgICAgICAgICAgICB0aHVtYm5haWw6IGF3YWl0IG1ha2VUaHVtYm5haWwoXG4gICAgICAgICAgICAgICAgICAgIGZpbGUsXG4gICAgICAgICAgICAgICAgICAgIHVwbG9hZFRodW1ibmFpbFdpZHRoLFxuICAgICAgICAgICAgICAgICAgICB1cGxvYWRUaHVtYm5haWxIZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgIHVwbG9hZFRodW1ibmFpbENvbnRlbnRUeXBlLFxuICAgICAgICAgICAgICAgICAgICB1cGxvYWRUaHVtYm5haWxRdWFsaXR5XG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pLFxuICAgIC4uLnNlbGVjdG9yc1xuICApO1xuXG5jb25zdCBVcGxvYWRCdXR0b24gPSAoeyBjbGFzc05hbWUgfSkgPT4ge1xuICBjb25zdCBbeyB1cGxvYWRCdXR0b246IHVwbG9hZEJ1dHRvblN0eWxlU2V0IH1dID0gdXNlU3R5bGVTZXQoKTtcbiAgY29uc3QgW2Rpc2FibGVkXSA9IHVzZURpc2FibGVkKCk7XG4gIGNvbnN0IGlucHV0UmVmID0gdXNlUmVmKCk7XG4gIGNvbnN0IGxvY2FsaXplID0gdXNlTG9jYWxpemVyKCk7XG4gIGNvbnN0IHJvb3RDbGFzc05hbWUgPSB1c2VTdHlsZVRvRW1vdGlvbk9iamVjdCgpKFJPT1RfU1RZTEUpICsgJyc7XG4gIGNvbnN0IHNlbmRGaWxlcyA9IHVzZVNlbmRGaWxlcygpO1xuXG4gIGNvbnN0IHsgY3VycmVudCB9ID0gaW5wdXRSZWY7XG4gIGNvbnN0IHVwbG9hZEZpbGVTdHJpbmcgPSBsb2NhbGl6ZSgnVEVYVF9JTlBVVF9VUExPQURfQlVUVE9OX0FMVCcpO1xuXG4gIGNvbnN0IGhhbmRsZUNsaWNrID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGN1cnJlbnQgJiYgY3VycmVudC5jbGljaygpO1xuICB9LCBbY3VycmVudF0pO1xuXG4gIGNvbnN0IGhhbmRsZUZpbGVDaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAoeyB0YXJnZXQ6IHsgZmlsZXMgfSB9KSA9PiB7XG4gICAgICBzZW5kRmlsZXMoZmlsZXMpO1xuXG4gICAgICBpZiAoY3VycmVudCkge1xuICAgICAgICBjdXJyZW50LnZhbHVlID0gbnVsbDtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtjdXJyZW50LCBzZW5kRmlsZXNdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhyb290Q2xhc3NOYW1lLCAnd2ViY2hhdF9fdXBsb2FkLWJ1dHRvbicsIHVwbG9hZEJ1dHRvblN0eWxlU2V0ICsgJycsIGNsYXNzTmFtZSl9PlxuICAgICAgPGlucHV0XG4gICAgICAgIGFyaWEtZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICBjbGFzc05hbWU9XCJ3ZWJjaGF0X191cGxvYWQtYnV0dG9uLS1maWxlLWlucHV0XCJcbiAgICAgICAgbXVsdGlwbGU9e3RydWV9XG4gICAgICAgIG9uQ2hhbmdlPXtkaXNhYmxlZCA/IHVuZGVmaW5lZCA6IGhhbmRsZUZpbGVDaGFuZ2V9XG4gICAgICAgIG9uQ2xpY2s9e2Rpc2FibGVkID8gUFJFVkVOVF9ERUZBVUxUX0hBTkRMRVIgOiB1bmRlZmluZWR9XG4gICAgICAgIHJlYWRPbmx5PXtkaXNhYmxlZH1cbiAgICAgICAgcmVmPXtpbnB1dFJlZn1cbiAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgIHRhYkluZGV4PXstMX1cbiAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgLz5cbiAgICAgIDxJY29uQnV0dG9uIGFsdD17dXBsb2FkRmlsZVN0cmluZ30gYXJpYS1sYWJlbD17dXBsb2FkRmlsZVN0cmluZ30gZGlzYWJsZWQ9e2Rpc2FibGVkfSBvbkNsaWNrPXtoYW5kbGVDbGlja30+XG4gICAgICAgIDxBdHRhY2htZW50SWNvbiAvPlxuICAgICAgPC9JY29uQnV0dG9uPlxuICAgIDwvZGl2PlxuICApO1xufTtcblxuVXBsb2FkQnV0dG9uLmRlZmF1bHRQcm9wcyA9IHtcbiAgY2xhc3NOYW1lOiB1bmRlZmluZWRcbn07XG5cblVwbG9hZEJ1dHRvbi5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZ1xufTtcblxuZXhwb3J0IGRlZmF1bHQgVXBsb2FkQnV0dG9uO1xuXG5leHBvcnQgeyBjb25uZWN0VXBsb2FkQnV0dG9uIH07XG4iXX0=