"use strict";
(self["webpackChunk_core_volunteer_app"] = self["webpackChunk_core_volunteer_app"] || []).push([["vendors-node_modules_rc-image_es_index_js-node_modules_rc-input_lib_utils_commonUtils_js-node-8cf92a"],{
/***/ "../../../node_modules/rc-image/es/Image.js":
/*!**************************************************!*\
!*** ../../../node_modules/rc-image/es/Image.js ***!
\**************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "../../../node_modules/@babel/runtime/helpers/esm/extends.js");
/* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js");
/* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js");
/* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js");
/* harmony import */ var _babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/esm/typeof */ "../../../node_modules/@babel/runtime/helpers/esm/typeof.js");
/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ "../../../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js");
/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! classnames */ "../../../node_modules/classnames/index.js");
/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_6__);
/* harmony import */ var rc_util_es_Dom_css__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! rc-util/es/Dom/css */ "../../../node_modules/rc-util/es/Dom/css.js");
/* harmony import */ var rc_util_es_hooks_useMergedState__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! rc-util/es/hooks/useMergedState */ "../../../node_modules/rc-util/es/hooks/useMergedState.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_9__);
/* harmony import */ var _Preview__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./Preview */ "../../../node_modules/rc-image/es/Preview.js");
/* harmony import */ var _PreviewGroup__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./PreviewGroup */ "../../../node_modules/rc-image/es/PreviewGroup.js");
/* harmony import */ var _common__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./common */ "../../../node_modules/rc-image/es/common.js");
/* harmony import */ var _context__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./context */ "../../../node_modules/rc-image/es/context.js");
/* harmony import */ var _hooks_useRegisterImage__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./hooks/useRegisterImage */ "../../../node_modules/rc-image/es/hooks/useRegisterImage.js");
/* harmony import */ var _hooks_useStatus__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./hooks/useStatus */ "../../../node_modules/rc-image/es/hooks/useStatus.js");
var _excluded = ["src", "alt", "onPreviewClose", "prefixCls", "previewPrefixCls", "placeholder", "fallback", "width", "height", "style", "preview", "className", "onClick", "onError", "wrapperClassName", "wrapperStyle", "rootClassName"],
_excluded2 = ["src", "visible", "onVisibleChange", "getContainer", "mask", "maskClassName", "movable", "icons", "scaleStep", "minScale", "maxScale", "imageRender", "toolbarRender"];
var ImageInternal = function ImageInternal(props) {
var imgSrc = props.src,
alt = props.alt,
onInitialPreviewClose = props.onPreviewClose,
_props$prefixCls = props.prefixCls,
prefixCls = _props$prefixCls === void 0 ? 'rc-image' : _props$prefixCls,
_props$previewPrefixC = props.previewPrefixCls,
previewPrefixCls = _props$previewPrefixC === void 0 ? "".concat(prefixCls, "-preview") : _props$previewPrefixC,
placeholder = props.placeholder,
fallback = props.fallback,
width = props.width,
height = props.height,
style = props.style,
_props$preview = props.preview,
preview = _props$preview === void 0 ? true : _props$preview,
className = props.className,
onClick = props.onClick,
onError = props.onError,
wrapperClassName = props.wrapperClassName,
wrapperStyle = props.wrapperStyle,
rootClassName = props.rootClassName,
otherProps = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_5__["default"])(props, _excluded);
var isCustomPlaceholder = placeholder && placeholder !== true;
var _ref = (0,_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_4__["default"])(preview) === 'object' ? preview : {},
previewSrc = _ref.src,
_ref$visible = _ref.visible,
previewVisible = _ref$visible === void 0 ? undefined : _ref$visible,
_ref$onVisibleChange = _ref.onVisibleChange,
onPreviewVisibleChange = _ref$onVisibleChange === void 0 ? onInitialPreviewClose : _ref$onVisibleChange,
_ref$getContainer = _ref.getContainer,
getPreviewContainer = _ref$getContainer === void 0 ? undefined : _ref$getContainer,
previewMask = _ref.mask,
maskClassName = _ref.maskClassName,
movable = _ref.movable,
icons = _ref.icons,
scaleStep = _ref.scaleStep,
minScale = _ref.minScale,
maxScale = _ref.maxScale,
imageRender = _ref.imageRender,
toolbarRender = _ref.toolbarRender,
dialogProps = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_5__["default"])(_ref, _excluded2);
var src = previewSrc !== null && previewSrc !== void 0 ? previewSrc : imgSrc;
var _useMergedState = (0,rc_util_es_hooks_useMergedState__WEBPACK_IMPORTED_MODULE_8__["default"])(!!previewVisible, {
value: previewVisible,
onChange: onPreviewVisibleChange
}),
_useMergedState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__["default"])(_useMergedState, 2),
isShowPreview = _useMergedState2[0],
setShowPreview = _useMergedState2[1];
var _useStatus = (0,_hooks_useStatus__WEBPACK_IMPORTED_MODULE_15__["default"])({
src: imgSrc,
isCustomPlaceholder: isCustomPlaceholder,
fallback: fallback
}),
_useStatus2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__["default"])(_useStatus, 3),
getImgRef = _useStatus2[0],
srcAndOnload = _useStatus2[1],
status = _useStatus2[2];
var _useState = (0,react__WEBPACK_IMPORTED_MODULE_9__.useState)(null),
_useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__["default"])(_useState, 2),
mousePosition = _useState2[0],
setMousePosition = _useState2[1];
var groupContext = (0,react__WEBPACK_IMPORTED_MODULE_9__.useContext)(_context__WEBPACK_IMPORTED_MODULE_13__.PreviewGroupContext);
var canPreview = !!preview;
var onPreviewClose = function onPreviewClose() {
setShowPreview(false);
setMousePosition(null);
};
var wrapperClass = classnames__WEBPACK_IMPORTED_MODULE_6___default()(prefixCls, wrapperClassName, rootClassName, (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__["default"])({}, "".concat(prefixCls, "-error"), status === 'error'));
// ========================= ImageProps =========================
var imgCommonProps = (0,react__WEBPACK_IMPORTED_MODULE_9__.useMemo)(function () {
var obj = {};
_common__WEBPACK_IMPORTED_MODULE_12__.COMMON_PROPS.forEach(function (prop) {
if (props[prop] !== undefined) {
obj[prop] = props[prop];
}
});
return obj;
}, _common__WEBPACK_IMPORTED_MODULE_12__.COMMON_PROPS.map(function (prop) {
return props[prop];
}));
// ========================== Register ==========================
var registerData = (0,react__WEBPACK_IMPORTED_MODULE_9__.useMemo)(function () {
return (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, imgCommonProps), {}, {
src: src
});
}, [src, imgCommonProps]);
var imageId = (0,_hooks_useRegisterImage__WEBPACK_IMPORTED_MODULE_14__["default"])(canPreview, registerData);
// ========================== Preview ===========================
var onPreview = function onPreview(e) {
var _getOffset = (0,rc_util_es_Dom_css__WEBPACK_IMPORTED_MODULE_7__.getOffset)(e.target),
left = _getOffset.left,
top = _getOffset.top;
if (groupContext) {
groupContext.onPreview(imageId, src, left, top);
} else {
setMousePosition({
x: left,
y: top
});
setShowPreview(true);
}
onClick === null || onClick === void 0 || onClick(e);
};
// =========================== Render ===========================
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_9__.createElement(react__WEBPACK_IMPORTED_MODULE_9__.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_9__.createElement("div", (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, otherProps, {
className: wrapperClass,
onClick: canPreview ? onPreview : onClick,
style: (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({
width: width,
height: height
}, wrapperStyle)
}), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_9__.createElement("img", (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, imgCommonProps, {
className: classnames__WEBPACK_IMPORTED_MODULE_6___default()("".concat(prefixCls, "-img"), (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__["default"])({}, "".concat(prefixCls, "-img-placeholder"), placeholder === true), className),
style: (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({
height: height
}, style),
ref: getImgRef
}, srcAndOnload, {
width: width,
height: height,
onError: onError
})), status === 'loading' && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_9__.createElement("div", {
"aria-hidden": "true",
className: "".concat(prefixCls, "-placeholder")
}, placeholder), previewMask && canPreview && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_9__.createElement("div", {
className: classnames__WEBPACK_IMPORTED_MODULE_6___default()("".concat(prefixCls, "-mask"), maskClassName),
style: {
display: (style === null || style === void 0 ? void 0 : style.display) === 'none' ? 'none' : undefined
}
}, previewMask)), !groupContext && canPreview && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_9__.createElement(_Preview__WEBPACK_IMPORTED_MODULE_10__["default"], (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({
"aria-hidden": !isShowPreview,
visible: isShowPreview,
prefixCls: previewPrefixCls,
onClose: onPreviewClose,
mousePosition: mousePosition,
src: src,
alt: alt,
imageInfo: {
width: width,
height: height
},
fallback: fallback,
getContainer: getPreviewContainer,
icons: icons,
movable: movable,
scaleStep: scaleStep,
minScale: minScale,
maxScale: maxScale,
rootClassName: rootClassName,
imageRender: imageRender,
imgCommonProps: imgCommonProps,
toolbarRender: toolbarRender
}, dialogProps)));
};
ImageInternal.PreviewGroup = _PreviewGroup__WEBPACK_IMPORTED_MODULE_11__["default"];
if (true) {
ImageInternal.displayName = 'Image';
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ImageInternal);
/***/ }),
/***/ "../../../node_modules/rc-image/es/Operations.js":
/*!*******************************************************!*\
!*** ../../../node_modules/rc-image/es/Operations.js ***!
\*******************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js");
/* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js");
/* harmony import */ var _rc_component_portal__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @rc-component/portal */ "../../../node_modules/@rc-component/portal/es/index.js");
/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! classnames */ "../../../node_modules/classnames/index.js");
/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var rc_motion__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! rc-motion */ "../../../node_modules/rc-motion/es/index.js");
/* harmony import */ var rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! rc-util/es/KeyCode */ "../../../node_modules/rc-util/es/KeyCode.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_6__);
/* harmony import */ var _context__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./context */ "../../../node_modules/rc-image/es/context.js");
var Operations = function Operations(props) {
var visible = props.visible,
maskTransitionName = props.maskTransitionName,
getContainer = props.getContainer,
prefixCls = props.prefixCls,
rootClassName = props.rootClassName,
icons = props.icons,
countRender = props.countRender,
showSwitch = props.showSwitch,
showProgress = props.showProgress,
current = props.current,
transform = props.transform,
count = props.count,
scale = props.scale,
minScale = props.minScale,
maxScale = props.maxScale,
closeIcon = props.closeIcon,
onActive = props.onActive,
onClose = props.onClose,
onZoomIn = props.onZoomIn,
onZoomOut = props.onZoomOut,
onRotateRight = props.onRotateRight,
onRotateLeft = props.onRotateLeft,
onFlipX = props.onFlipX,
onFlipY = props.onFlipY,
onReset = props.onReset,
toolbarRender = props.toolbarRender,
zIndex = props.zIndex,
image = props.image;
var groupContext = (0,react__WEBPACK_IMPORTED_MODULE_6__.useContext)(_context__WEBPACK_IMPORTED_MODULE_7__.PreviewGroupContext);
var rotateLeft = icons.rotateLeft,
rotateRight = icons.rotateRight,
zoomIn = icons.zoomIn,
zoomOut = icons.zoomOut,
close = icons.close,
left = icons.left,
right = icons.right,
flipX = icons.flipX,
flipY = icons.flipY;
var toolClassName = "".concat(prefixCls, "-operations-operation");
react__WEBPACK_IMPORTED_MODULE_6__.useEffect(function () {
var onKeyDown = function onKeyDown(e) {
if (e.keyCode === rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_5__["default"].ESC) {
onClose();
}
};
if (visible) {
window.addEventListener('keydown', onKeyDown);
}
return function () {
window.removeEventListener('keydown', onKeyDown);
};
}, [visible]);
var handleActive = function handleActive(e, offset) {
e.preventDefault();
e.stopPropagation();
onActive(offset);
};
var renderOperation = react__WEBPACK_IMPORTED_MODULE_6__.useCallback(function (_ref) {
var type = _ref.type,
disabled = _ref.disabled,
onClick = _ref.onClick,
icon = _ref.icon;
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_6__.createElement("div", {
key: type,
className: classnames__WEBPACK_IMPORTED_MODULE_3___default()(toolClassName, "".concat(prefixCls, "-operations-operation-").concat(type), (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])({}, "".concat(prefixCls, "-operations-operation-disabled"), !!disabled)),
onClick: onClick
}, icon);
}, [toolClassName, prefixCls]);
var switchPrevNode = showSwitch ? renderOperation({
icon: left,
onClick: function onClick(e) {
return handleActive(e, -1);
},
type: 'prev',
disabled: current === 0
}) : undefined;
var switchNextNode = showSwitch ? renderOperation({
icon: right,
onClick: function onClick(e) {
return handleActive(e, 1);
},
type: 'next',
disabled: current === count - 1
}) : undefined;
var flipYNode = renderOperation({
icon: flipY,
onClick: onFlipY,
type: 'flipY'
});
var flipXNode = renderOperation({
icon: flipX,
onClick: onFlipX,
type: 'flipX'
});
var rotateLeftNode = renderOperation({
icon: rotateLeft,
onClick: onRotateLeft,
type: 'rotateLeft'
});
var rotateRightNode = renderOperation({
icon: rotateRight,
onClick: onRotateRight,
type: 'rotateRight'
});
var zoomOutNode = renderOperation({
icon: zoomOut,
onClick: onZoomOut,
type: 'zoomOut',
disabled: scale <= minScale
});
var zoomInNode = renderOperation({
icon: zoomIn,
onClick: onZoomIn,
type: 'zoomIn',
disabled: scale === maxScale
});
var toolbarNode = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_6__.createElement("div", {
className: "".concat(prefixCls, "-operations")
}, flipYNode, flipXNode, rotateLeftNode, rotateRightNode, zoomOutNode, zoomInNode);
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_6__.createElement(rc_motion__WEBPACK_IMPORTED_MODULE_4__["default"], {
visible: visible,
motionName: maskTransitionName
}, function (_ref2) {
var className = _ref2.className,
style = _ref2.style;
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_6__.createElement(_rc_component_portal__WEBPACK_IMPORTED_MODULE_2__["default"], {
open: true,
getContainer: getContainer !== null && getContainer !== void 0 ? getContainer : document.body
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_6__.createElement("div", {
className: classnames__WEBPACK_IMPORTED_MODULE_3___default()("".concat(prefixCls, "-operations-wrapper"), className, rootClassName),
style: (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({}, style), {}, {
zIndex: zIndex
})
}, closeIcon === null ? null : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_6__.createElement("button", {
className: "".concat(prefixCls, "-close"),
onClick: onClose
}, closeIcon || close), showSwitch && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_6__.createElement(react__WEBPACK_IMPORTED_MODULE_6__.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_6__.createElement("div", {
className: classnames__WEBPACK_IMPORTED_MODULE_3___default()("".concat(prefixCls, "-switch-left"), (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])({}, "".concat(prefixCls, "-switch-left-disabled"), current === 0)),
onClick: function onClick(e) {
return handleActive(e, -1);
}
}, left), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_6__.createElement("div", {
className: classnames__WEBPACK_IMPORTED_MODULE_3___default()("".concat(prefixCls, "-switch-right"), (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])({}, "".concat(prefixCls, "-switch-right-disabled"), current === count - 1)),
onClick: function onClick(e) {
return handleActive(e, 1);
}
}, right)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_6__.createElement("div", {
className: "".concat(prefixCls, "-footer")
}, showProgress && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_6__.createElement("div", {
className: "".concat(prefixCls, "-progress")
}, countRender ? countRender(current + 1, count) : "".concat(current + 1, " / ").concat(count)), toolbarRender ? toolbarRender(toolbarNode, (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({
icons: {
prevIcon: switchPrevNode,
nextIcon: switchNextNode,
flipYIcon: flipYNode,
flipXIcon: flipXNode,
rotateLeftIcon: rotateLeftNode,
rotateRightIcon: rotateRightNode,
zoomOutIcon: zoomOutNode,
zoomInIcon: zoomInNode
},
actions: {
onActive: onActive,
onFlipY: onFlipY,
onFlipX: onFlipX,
onRotateLeft: onRotateLeft,
onRotateRight: onRotateRight,
onZoomOut: onZoomOut,
onZoomIn: onZoomIn,
onReset: onReset,
onClose: onClose
},
transform: transform
}, groupContext ? {
current: current,
total: count
} : {}), {}, {
image: image
})) : toolbarNode)));
});
};
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Operations);
/***/ }),
/***/ "../../../node_modules/rc-image/es/Preview.js":
/*!****************************************************!*\
!*** ../../../node_modules/rc-image/es/Preview.js ***!
\****************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js");
/* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js");
/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "../../../node_modules/@babel/runtime/helpers/esm/extends.js");
/* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js");
/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ "../../../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js");
/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! classnames */ "../../../node_modules/classnames/index.js");
/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var rc_dialog__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! rc-dialog */ "../../../node_modules/rc-dialog/es/index.js");
/* harmony import */ var rc_util_es_Dom_addEventListener__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! rc-util/es/Dom/addEventListener */ "../../../node_modules/rc-util/es/Dom/addEventListener.js");
/* harmony import */ var rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! rc-util/es/KeyCode */ "../../../node_modules/rc-util/es/KeyCode.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_9__);
/* harmony import */ var _Operations__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./Operations */ "../../../node_modules/rc-image/es/Operations.js");
/* harmony import */ var _context__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./context */ "../../../node_modules/rc-image/es/context.js");
/* harmony import */ var _hooks_useImageTransform__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./hooks/useImageTransform */ "../../../node_modules/rc-image/es/hooks/useImageTransform.js");
/* harmony import */ var _hooks_useMouseEvent__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./hooks/useMouseEvent */ "../../../node_modules/rc-image/es/hooks/useMouseEvent.js");
/* harmony import */ var _hooks_useStatus__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./hooks/useStatus */ "../../../node_modules/rc-image/es/hooks/useStatus.js");
/* harmony import */ var _hooks_useTouchEvent__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./hooks/useTouchEvent */ "../../../node_modules/rc-image/es/hooks/useTouchEvent.js");
/* harmony import */ var _previewConfig__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./previewConfig */ "../../../node_modules/rc-image/es/previewConfig.js");
var _excluded = ["fallback", "src", "imgRef"],
_excluded2 = ["prefixCls", "src", "alt", "imageInfo", "fallback", "movable", "onClose", "visible", "icons", "rootClassName", "closeIcon", "getContainer", "current", "count", "countRender", "scaleStep", "minScale", "maxScale", "transitionName", "maskTransitionName", "imageRender", "imgCommonProps", "toolbarRender", "onTransform", "onChange"];
var PreviewImage = function PreviewImage(_ref) {
var fallback = _ref.fallback,
src = _ref.src,
imgRef = _ref.imgRef,
props = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_4__["default"])(_ref, _excluded);
var _useStatus = (0,_hooks_useStatus__WEBPACK_IMPORTED_MODULE_14__["default"])({
src: src,
fallback: fallback
}),
_useStatus2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__["default"])(_useStatus, 2),
getImgRef = _useStatus2[0],
srcAndOnload = _useStatus2[1];
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_9___default().createElement("img", (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_2__["default"])({
ref: function ref(_ref2) {
imgRef.current = _ref2;
getImgRef(_ref2);
}
}, props, srcAndOnload));
};
var Preview = function Preview(props) {
var prefixCls = props.prefixCls,
src = props.src,
alt = props.alt,
imageInfo = props.imageInfo,
fallback = props.fallback,
_props$movable = props.movable,
movable = _props$movable === void 0 ? true : _props$movable,
onClose = props.onClose,
visible = props.visible,
_props$icons = props.icons,
icons = _props$icons === void 0 ? {} : _props$icons,
rootClassName = props.rootClassName,
closeIcon = props.closeIcon,
getContainer = props.getContainer,
_props$current = props.current,
current = _props$current === void 0 ? 0 : _props$current,
_props$count = props.count,
count = _props$count === void 0 ? 1 : _props$count,
countRender = props.countRender,
_props$scaleStep = props.scaleStep,
scaleStep = _props$scaleStep === void 0 ? 0.5 : _props$scaleStep,
_props$minScale = props.minScale,
minScale = _props$minScale === void 0 ? 1 : _props$minScale,
_props$maxScale = props.maxScale,
maxScale = _props$maxScale === void 0 ? 50 : _props$maxScale,
_props$transitionName = props.transitionName,
transitionName = _props$transitionName === void 0 ? 'zoom' : _props$transitionName,
_props$maskTransition = props.maskTransitionName,
maskTransitionName = _props$maskTransition === void 0 ? 'fade' : _props$maskTransition,
imageRender = props.imageRender,
imgCommonProps = props.imgCommonProps,
toolbarRender = props.toolbarRender,
onTransform = props.onTransform,
onChange = props.onChange,
restProps = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_4__["default"])(props, _excluded2);
var imgRef = (0,react__WEBPACK_IMPORTED_MODULE_9__.useRef)();
var groupContext = (0,react__WEBPACK_IMPORTED_MODULE_9__.useContext)(_context__WEBPACK_IMPORTED_MODULE_11__.PreviewGroupContext);
var showLeftOrRightSwitches = groupContext && count > 1;
var showOperationsProgress = groupContext && count >= 1;
var _useState = (0,react__WEBPACK_IMPORTED_MODULE_9__.useState)(true),
_useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__["default"])(_useState, 2),
enableTransition = _useState2[0],
setEnableTransition = _useState2[1];
var _useImageTransform = (0,_hooks_useImageTransform__WEBPACK_IMPORTED_MODULE_12__["default"])(imgRef, minScale, maxScale, onTransform),
transform = _useImageTransform.transform,
resetTransform = _useImageTransform.resetTransform,
updateTransform = _useImageTransform.updateTransform,
dispatchZoomChange = _useImageTransform.dispatchZoomChange;
var _useMouseEvent = (0,_hooks_useMouseEvent__WEBPACK_IMPORTED_MODULE_13__["default"])(imgRef, movable, visible, scaleStep, transform, updateTransform, dispatchZoomChange),
isMoving = _useMouseEvent.isMoving,
onMouseDown = _useMouseEvent.onMouseDown,
onWheel = _useMouseEvent.onWheel;
var _useTouchEvent = (0,_hooks_useTouchEvent__WEBPACK_IMPORTED_MODULE_15__["default"])(imgRef, movable, visible, minScale, transform, updateTransform, dispatchZoomChange),
isTouching = _useTouchEvent.isTouching,
onTouchStart = _useTouchEvent.onTouchStart,
onTouchMove = _useTouchEvent.onTouchMove,
onTouchEnd = _useTouchEvent.onTouchEnd;
var rotate = transform.rotate,
scale = transform.scale;
var wrapClassName = classnames__WEBPACK_IMPORTED_MODULE_5___default()((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])({}, "".concat(prefixCls, "-moving"), isMoving));
(0,react__WEBPACK_IMPORTED_MODULE_9__.useEffect)(function () {
if (!enableTransition) {
setEnableTransition(true);
}
}, [enableTransition]);
var onAfterClose = function onAfterClose() {
resetTransform('close');
};
var onZoomIn = function onZoomIn() {
dispatchZoomChange(_previewConfig__WEBPACK_IMPORTED_MODULE_16__.BASE_SCALE_RATIO + scaleStep, 'zoomIn');
};
var onZoomOut = function onZoomOut() {
dispatchZoomChange(_previewConfig__WEBPACK_IMPORTED_MODULE_16__.BASE_SCALE_RATIO / (_previewConfig__WEBPACK_IMPORTED_MODULE_16__.BASE_SCALE_RATIO + scaleStep), 'zoomOut');
};
var onRotateRight = function onRotateRight() {
updateTransform({
rotate: rotate + 90
}, 'rotateRight');
};
var onRotateLeft = function onRotateLeft() {
updateTransform({
rotate: rotate - 90
}, 'rotateLeft');
};
var onFlipX = function onFlipX() {
updateTransform({
flipX: !transform.flipX
}, 'flipX');
};
var onFlipY = function onFlipY() {
updateTransform({
flipY: !transform.flipY
}, 'flipY');
};
var onReset = function onReset() {
resetTransform('reset');
};
var onActive = function onActive(offset) {
var position = current + offset;
if (!Number.isInteger(position) || position < 0 || position > count - 1) {
return;
}
setEnableTransition(false);
resetTransform(offset < 0 ? 'prev' : 'next');
onChange === null || onChange === void 0 || onChange(position, current);
};
var onKeyDown = function onKeyDown(event) {
if (!visible || !showLeftOrRightSwitches) return;
if (event.keyCode === rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_8__["default"].LEFT) {
onActive(-1);
} else if (event.keyCode === rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_8__["default"].RIGHT) {
onActive(1);
}
};
var onDoubleClick = function onDoubleClick(event) {
if (visible) {
if (scale !== 1) {
updateTransform({
x: 0,
y: 0,
scale: 1
}, 'doubleClick');
} else {
dispatchZoomChange(_previewConfig__WEBPACK_IMPORTED_MODULE_16__.BASE_SCALE_RATIO + scaleStep, 'doubleClick', event.clientX, event.clientY);
}
}
};
(0,react__WEBPACK_IMPORTED_MODULE_9__.useEffect)(function () {
var onKeyDownListener = (0,rc_util_es_Dom_addEventListener__WEBPACK_IMPORTED_MODULE_7__["default"])(window, 'keydown', onKeyDown, false);
return function () {
onKeyDownListener.remove();
};
}, [visible, showLeftOrRightSwitches, current]);
var imgNode = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_9___default().createElement(PreviewImage, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_2__["default"])({}, imgCommonProps, {
width: props.width,
height: props.height,
imgRef: imgRef,
className: "".concat(prefixCls, "-img"),
alt: alt,
style: {
transform: "translate3d(".concat(transform.x, "px, ").concat(transform.y, "px, 0) scale3d(").concat(transform.flipX ? '-' : '').concat(scale, ", ").concat(transform.flipY ? '-' : '').concat(scale, ", 1) rotate(").concat(rotate, "deg)"),
transitionDuration: (!enableTransition || isTouching) && '0s'
},
fallback: fallback,
src: src,
onWheel: onWheel,
onMouseDown: onMouseDown,
onDoubleClick: onDoubleClick,
onTouchStart: onTouchStart,
onTouchMove: onTouchMove,
onTouchEnd: onTouchEnd,
onTouchCancel: onTouchEnd
}));
var image = (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({
url: src,
alt: alt
}, imageInfo);
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_9___default().createElement((react__WEBPACK_IMPORTED_MODULE_9___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_9___default().createElement(rc_dialog__WEBPACK_IMPORTED_MODULE_6__["default"], (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_2__["default"])({
transitionName: transitionName,
maskTransitionName: maskTransitionName,
closable: false,
keyboard: true,
prefixCls: prefixCls,
onClose: onClose,
visible: visible,
classNames: {
wrapper: wrapClassName
},
rootClassName: rootClassName,
getContainer: getContainer
}, restProps, {
afterClose: onAfterClose
}), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_9___default().createElement("div", {
className: "".concat(prefixCls, "-img-wrapper")
}, imageRender ? imageRender(imgNode, (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({
transform: transform,
image: image
}, groupContext ? {
current: current
} : {})) : imgNode)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_9___default().createElement(_Operations__WEBPACK_IMPORTED_MODULE_10__["default"], {
visible: visible,
transform: transform,
maskTransitionName: maskTransitionName,
closeIcon: closeIcon,
getContainer: getContainer,
prefixCls: prefixCls,
rootClassName: rootClassName,
icons: icons,
countRender: countRender,
showSwitch: showLeftOrRightSwitches,
showProgress: showOperationsProgress,
current: current,
count: count,
scale: scale,
minScale: minScale,
maxScale: maxScale,
toolbarRender: toolbarRender,
onActive: onActive,
onZoomIn: onZoomIn,
onZoomOut: onZoomOut,
onRotateRight: onRotateRight,
onRotateLeft: onRotateLeft,
onFlipX: onFlipX,
onFlipY: onFlipY,
onClose: onClose,
onReset: onReset,
zIndex: restProps.zIndex !== undefined ? restProps.zIndex + 1 : undefined,
image: image
}));
};
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Preview);
/***/ }),
/***/ "../../../node_modules/rc-image/es/PreviewGroup.js":
/*!*********************************************************!*\
!*** ../../../node_modules/rc-image/es/PreviewGroup.js ***!
\*********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "../../../node_modules/@babel/runtime/helpers/esm/extends.js");
/* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js");
/* harmony import */ var _babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/typeof */ "../../../node_modules/@babel/runtime/helpers/esm/typeof.js");
/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ "../../../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js");
/* harmony import */ var rc_util_es_hooks_useMergedState__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! rc-util/es/hooks/useMergedState */ "../../../node_modules/rc-util/es/hooks/useMergedState.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var _Preview__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./Preview */ "../../../node_modules/rc-image/es/Preview.js");
/* harmony import */ var _context__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./context */ "../../../node_modules/rc-image/es/context.js");
/* harmony import */ var _hooks_usePreviewItems__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./hooks/usePreviewItems */ "../../../node_modules/rc-image/es/hooks/usePreviewItems.js");
var _excluded = ["visible", "onVisibleChange", "getContainer", "current", "movable", "minScale", "maxScale", "countRender", "closeIcon", "onChange", "onTransform", "toolbarRender", "imageRender"],
_excluded2 = ["src"];
var Group = function Group(_ref) {
var _mergedItems$current;
var _ref$previewPrefixCls = _ref.previewPrefixCls,
previewPrefixCls = _ref$previewPrefixCls === void 0 ? 'rc-image-preview' : _ref$previewPrefixCls,
children = _ref.children,
_ref$icons = _ref.icons,
icons = _ref$icons === void 0 ? {} : _ref$icons,
items = _ref.items,
preview = _ref.preview,
fallback = _ref.fallback;
var _ref2 = (0,_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_2__["default"])(preview) === 'object' ? preview : {},
previewVisible = _ref2.visible,
onVisibleChange = _ref2.onVisibleChange,
getContainer = _ref2.getContainer,
currentIndex = _ref2.current,
movable = _ref2.movable,
minScale = _ref2.minScale,
maxScale = _ref2.maxScale,
countRender = _ref2.countRender,
closeIcon = _ref2.closeIcon,
onChange = _ref2.onChange,
onTransform = _ref2.onTransform,
toolbarRender = _ref2.toolbarRender,
imageRender = _ref2.imageRender,
dialogProps = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_3__["default"])(_ref2, _excluded);
// ========================== Items ===========================
var _usePreviewItems = (0,_hooks_usePreviewItems__WEBPACK_IMPORTED_MODULE_8__["default"])(items),
_usePreviewItems2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__["default"])(_usePreviewItems, 3),
mergedItems = _usePreviewItems2[0],
register = _usePreviewItems2[1],
fromItems = _usePreviewItems2[2];
// ========================= Preview ==========================
// >>> Index
var _useMergedState = (0,rc_util_es_hooks_useMergedState__WEBPACK_IMPORTED_MODULE_4__["default"])(0, {
value: currentIndex
}),
_useMergedState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__["default"])(_useMergedState, 2),
current = _useMergedState2[0],
setCurrent = _useMergedState2[1];
var _useState = (0,react__WEBPACK_IMPORTED_MODULE_5__.useState)(false),
_useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__["default"])(_useState, 2),
keepOpenIndex = _useState2[0],
setKeepOpenIndex = _useState2[1];
// >>> Image
var _ref3 = ((_mergedItems$current = mergedItems[current]) === null || _mergedItems$current === void 0 ? void 0 : _mergedItems$current.data) || {},
src = _ref3.src,
imgCommonProps = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_3__["default"])(_ref3, _excluded2);
// >>> Visible
var _useMergedState3 = (0,rc_util_es_hooks_useMergedState__WEBPACK_IMPORTED_MODULE_4__["default"])(!!previewVisible, {
value: previewVisible,
onChange: function onChange(val, prevVal) {
onVisibleChange === null || onVisibleChange === void 0 || onVisibleChange(val, prevVal, current);
}
}),
_useMergedState4 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__["default"])(_useMergedState3, 2),
isShowPreview = _useMergedState4[0],
setShowPreview = _useMergedState4[1];
// >>> Position
var _useState3 = (0,react__WEBPACK_IMPORTED_MODULE_5__.useState)(null),
_useState4 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__["default"])(_useState3, 2),
mousePosition = _useState4[0],
setMousePosition = _useState4[1];
var onPreviewFromImage = react__WEBPACK_IMPORTED_MODULE_5__.useCallback(function (id, imageSrc, mouseX, mouseY) {
var index = fromItems ? mergedItems.findIndex(function (item) {
return item.data.src === imageSrc;
}) : mergedItems.findIndex(function (item) {
return item.id === id;
});
setCurrent(index < 0 ? 0 : index);
setShowPreview(true);
setMousePosition({
x: mouseX,
y: mouseY
});
setKeepOpenIndex(true);
}, [mergedItems, fromItems]);
// Reset current when reopen
react__WEBPACK_IMPORTED_MODULE_5__.useEffect(function () {
if (isShowPreview) {
if (!keepOpenIndex) {
setCurrent(0);
}
} else {
setKeepOpenIndex(false);
}
}, [isShowPreview]);
// ========================== Events ==========================
var onInternalChange = function onInternalChange(next, prev) {
setCurrent(next);
onChange === null || onChange === void 0 || onChange(next, prev);
};
var onPreviewClose = function onPreviewClose() {
setShowPreview(false);
setMousePosition(null);
};
// ========================= Context ==========================
var previewGroupContext = react__WEBPACK_IMPORTED_MODULE_5__.useMemo(function () {
return {
register: register,
onPreview: onPreviewFromImage
};
}, [register, onPreviewFromImage]);
// ========================== Render ==========================
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5__.createElement(_context__WEBPACK_IMPORTED_MODULE_7__.PreviewGroupContext.Provider, {
value: previewGroupContext
}, children, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5__.createElement(_Preview__WEBPACK_IMPORTED_MODULE_6__["default"], (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({
"aria-hidden": !isShowPreview,
movable: movable,
visible: isShowPreview,
prefixCls: previewPrefixCls,
closeIcon: closeIcon,
onClose: onPreviewClose,
mousePosition: mousePosition,
imgCommonProps: imgCommonProps,
src: src,
fallback: fallback,
icons: icons,
minScale: minScale,
maxScale: maxScale,
getContainer: getContainer,
current: current,
count: mergedItems.length,
countRender: countRender,
onTransform: onTransform,
toolbarRender: toolbarRender,
imageRender: imageRender,
onChange: onInternalChange
}, dialogProps)));
};
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Group);
/***/ }),
/***/ "../../../node_modules/rc-image/es/common.js":
/*!***************************************************!*\
!*** ../../../node_modules/rc-image/es/common.js ***!
\***************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ COMMON_PROPS: () => (/* binding */ COMMON_PROPS)
/* harmony export */ });
var COMMON_PROPS = ['crossOrigin', 'decoding', 'draggable', 'loading', 'referrerPolicy', 'sizes', 'srcSet', 'useMap', 'alt'];
/***/ }),
/***/ "../../../node_modules/rc-image/es/context.js":
/*!****************************************************!*\
!*** ../../../node_modules/rc-image/es/context.js ***!
\****************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ PreviewGroupContext: () => (/* binding */ PreviewGroupContext)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
var PreviewGroupContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext(null);
/***/ }),
/***/ "../../../node_modules/rc-image/es/getFixScaleEleTransPosition.js":
/*!************************************************************************!*\
!*** ../../../node_modules/rc-image/es/getFixScaleEleTransPosition.js ***!
\************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ getFixScaleEleTransPosition)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js");
/* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js");
/* harmony import */ var rc_util_es_Dom_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rc-util/es/Dom/css */ "../../../node_modules/rc-util/es/Dom/css.js");
function fixPoint(key, start, width, clientWidth) {
var startAddWidth = start + width;
var offsetStart = (width - clientWidth) / 2;
if (width > clientWidth) {
if (start > 0) {
return (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])({}, key, offsetStart);
}
if (start < 0 && startAddWidth < clientWidth) {
return (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])({}, key, -offsetStart);
}
} else if (start < 0 || startAddWidth > clientWidth) {
return (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])({}, key, start < 0 ? offsetStart : -offsetStart);
}
return {};
}
/**
* Fix positon x,y point when
*
* Ele width && height < client
* - Back origin
*
* - Ele width | height > clientWidth | clientHeight
* - left | top > 0 -> Back 0
* - left | top + width | height < clientWidth | clientHeight -> Back left | top + width | height === clientWidth | clientHeight
*
* Regardless of other
*/
function getFixScaleEleTransPosition(width, height, left, top) {
var _getClientSize = (0,rc_util_es_Dom_css__WEBPACK_IMPORTED_MODULE_2__.getClientSize)(),
clientWidth = _getClientSize.width,
clientHeight = _getClientSize.height;
var fixPos = null;
if (width <= clientWidth && height <= clientHeight) {
fixPos = {
x: 0,
y: 0
};
} else if (width > clientWidth || height > clientHeight) {
fixPos = (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({}, fixPoint('x', left, width, clientWidth)), fixPoint('y', top, height, clientHeight));
}
return fixPos;
}
/***/ }),
/***/ "../../../node_modules/rc-image/es/hooks/useImageTransform.js":
/*!********************************************************************!*\
!*** ../../../node_modules/rc-image/es/hooks/useImageTransform.js ***!
\********************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ useImageTransform)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js");
/* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js");
/* harmony import */ var rc_util_es_Dom_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rc-util/es/Dom/css */ "../../../node_modules/rc-util/es/Dom/css.js");
/* harmony import */ var rc_util_es_isEqual__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! rc-util/es/isEqual */ "../../../node_modules/rc-util/es/isEqual.js");
/* harmony import */ var rc_util_es_raf__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! rc-util/es/raf */ "../../../node_modules/rc-util/es/raf.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_5__);
var initialTransform = {
x: 0,
y: 0,
rotate: 0,
scale: 1,
flipX: false,
flipY: false
};
function useImageTransform(imgRef, minScale, maxScale, onTransform) {
var frame = (0,react__WEBPACK_IMPORTED_MODULE_5__.useRef)(null);
var queue = (0,react__WEBPACK_IMPORTED_MODULE_5__.useRef)([]);
var _useState = (0,react__WEBPACK_IMPORTED_MODULE_5__.useState)(initialTransform),
_useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__["default"])(_useState, 2),
transform = _useState2[0],
setTransform = _useState2[1];
var resetTransform = function resetTransform(action) {
setTransform(initialTransform);
if (!(0,rc_util_es_isEqual__WEBPACK_IMPORTED_MODULE_3__["default"])(initialTransform, transform)) {
onTransform === null || onTransform === void 0 || onTransform({
transform: initialTransform,
action: action
});
}
};
/** Direct update transform */
var updateTransform = function updateTransform(newTransform, action) {
if (frame.current === null) {
queue.current = [];
frame.current = (0,rc_util_es_raf__WEBPACK_IMPORTED_MODULE_4__["default"])(function () {
setTransform(function (preState) {
var memoState = preState;
queue.current.forEach(function (queueState) {
memoState = (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({}, memoState), queueState);
});
frame.current = null;
onTransform === null || onTransform === void 0 || onTransform({
transform: memoState,
action: action
});
return memoState;
});
});
}
queue.current.push((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({}, transform), newTransform));
};
/** Scale according to the position of centerX and centerY */
var dispatchZoomChange = function dispatchZoomChange(ratio, action, centerX, centerY, isTouch) {
var _imgRef$current = imgRef.current,
width = _imgRef$current.width,
height = _imgRef$current.height,
offsetWidth = _imgRef$current.offsetWidth,
offsetHeight = _imgRef$current.offsetHeight,
offsetLeft = _imgRef$current.offsetLeft,
offsetTop = _imgRef$current.offsetTop;
var newRatio = ratio;
var newScale = transform.scale * ratio;
if (newScale > maxScale) {
newScale = maxScale;
newRatio = maxScale / transform.scale;
} else if (newScale < minScale) {
// For mobile interactions, allow scaling down to the minimum scale.
newScale = isTouch ? newScale : minScale;
newRatio = newScale / transform.scale;
}
/** Default center point scaling */
var mergedCenterX = centerX !== null && centerX !== void 0 ? centerX : innerWidth / 2;
var mergedCenterY = centerY !== null && centerY !== void 0 ? centerY : innerHeight / 2;
var diffRatio = newRatio - 1;
/** Deviation calculated from image size */
var diffImgX = diffRatio * width * 0.5;
var diffImgY = diffRatio * height * 0.5;
/** The difference between the click position and the edge of the document */
var diffOffsetLeft = diffRatio * (mergedCenterX - transform.x - offsetLeft);
var diffOffsetTop = diffRatio * (mergedCenterY - transform.y - offsetTop);
/** Final positioning */
var newX = transform.x - (diffOffsetLeft - diffImgX);
var newY = transform.y - (diffOffsetTop - diffImgY);
/**
* When zooming the image
* When the image size is smaller than the width and height of the window, the position is initialized
*/
if (ratio < 1 && newScale === 1) {
var mergedWidth = offsetWidth * newScale;
var mergedHeight = offsetHeight * newScale;
var _getClientSize = (0,rc_util_es_Dom_css__WEBPACK_IMPORTED_MODULE_2__.getClientSize)(),
clientWidth = _getClientSize.width,
clientHeight = _getClientSize.height;
if (mergedWidth <= clientWidth && mergedHeight <= clientHeight) {
newX = 0;
newY = 0;
}
}
updateTransform({
x: newX,
y: newY,
scale: newScale
}, action);
};
return {
transform: transform,
resetTransform: resetTransform,
updateTransform: updateTransform,
dispatchZoomChange: dispatchZoomChange
};
}
/***/ }),
/***/ "../../../node_modules/rc-image/es/hooks/useMouseEvent.js":
/*!****************************************************************!*\
!*** ../../../node_modules/rc-image/es/hooks/useMouseEvent.js ***!
\****************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ useMouseEvent)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js");
/* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js");
/* harmony import */ var rc_util_es_Dom_addEventListener__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rc-util/es/Dom/addEventListener */ "../../../node_modules/rc-util/es/Dom/addEventListener.js");
/* harmony import */ var rc_util_es_warning__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! rc-util/es/warning */ "../../../node_modules/rc-util/es/warning.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var _getFixScaleEleTransPosition__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../getFixScaleEleTransPosition */ "../../../node_modules/rc-image/es/getFixScaleEleTransPosition.js");
/* harmony import */ var _previewConfig__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../previewConfig */ "../../../node_modules/rc-image/es/previewConfig.js");
function useMouseEvent(imgRef, movable, visible, scaleStep, transform, updateTransform, dispatchZoomChange) {
var rotate = transform.rotate,
scale = transform.scale,
x = transform.x,
y = transform.y;
var _useState = (0,react__WEBPACK_IMPORTED_MODULE_4__.useState)(false),
_useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__["default"])(_useState, 2),
isMoving = _useState2[0],
setMoving = _useState2[1];
var startPositionInfo = (0,react__WEBPACK_IMPORTED_MODULE_4__.useRef)({
diffX: 0,
diffY: 0,
transformX: 0,
transformY: 0
});
var onMouseDown = function onMouseDown(event) {
// Only allow main button
if (!movable || event.button !== 0) return;
event.preventDefault();
event.stopPropagation();
startPositionInfo.current = {
diffX: event.pageX - x,
diffY: event.pageY - y,
transformX: x,
transformY: y
};
setMoving(true);
};
var onMouseMove = function onMouseMove(event) {
if (visible && isMoving) {
updateTransform({
x: event.pageX - startPositionInfo.current.diffX,
y: event.pageY - startPositionInfo.current.diffY
}, 'move');
}
};
var onMouseUp = function onMouseUp() {
if (visible && isMoving) {
setMoving(false);
/** No need to restore the position when the picture is not moved, So as not to interfere with the click */
var _startPositionInfo$cu = startPositionInfo.current,
transformX = _startPositionInfo$cu.transformX,
transformY = _startPositionInfo$cu.transformY;
var hasChangedPosition = x !== transformX && y !== transformY;
if (!hasChangedPosition) return;
var width = imgRef.current.offsetWidth * scale;
var height = imgRef.current.offsetHeight * scale;
// eslint-disable-next-line @typescript-eslint/no-shadow
var _imgRef$current$getBo = imgRef.current.getBoundingClientRect(),
left = _imgRef$current$getBo.left,
top = _imgRef$current$getBo.top;
var isRotate = rotate % 180 !== 0;
var fixState = (0,_getFixScaleEleTransPosition__WEBPACK_IMPORTED_MODULE_5__["default"])(isRotate ? height : width, isRotate ? width : height, left, top);
if (fixState) {
updateTransform((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({}, fixState), 'dragRebound');
}
}
};
var onWheel = function onWheel(event) {
if (!visible || event.deltaY == 0) return;
// Scale ratio depends on the deltaY size
var scaleRatio = Math.abs(event.deltaY / 100);
// Limit the maximum scale ratio
var mergedScaleRatio = Math.min(scaleRatio, _previewConfig__WEBPACK_IMPORTED_MODULE_6__.WHEEL_MAX_SCALE_RATIO);
// Scale the ratio each time
var ratio = _previewConfig__WEBPACK_IMPORTED_MODULE_6__.BASE_SCALE_RATIO + mergedScaleRatio * scaleStep;
if (event.deltaY > 0) {
ratio = _previewConfig__WEBPACK_IMPORTED_MODULE_6__.BASE_SCALE_RATIO / ratio;
}
dispatchZoomChange(ratio, 'wheel', event.clientX, event.clientY);
};
(0,react__WEBPACK_IMPORTED_MODULE_4__.useEffect)(function () {
var onTopMouseUpListener;
var onTopMouseMoveListener;
var onMouseUpListener;
var onMouseMoveListener;
if (movable) {
onMouseUpListener = (0,rc_util_es_Dom_addEventListener__WEBPACK_IMPORTED_MODULE_2__["default"])(window, 'mouseup', onMouseUp, false);
onMouseMoveListener = (0,rc_util_es_Dom_addEventListener__WEBPACK_IMPORTED_MODULE_2__["default"])(window, 'mousemove', onMouseMove, false);
try {
// Resolve if in iframe lost event
/* istanbul ignore next */
if (window.top !== window.self) {
onTopMouseUpListener = (0,rc_util_es_Dom_addEventListener__WEBPACK_IMPORTED_MODULE_2__["default"])(window.top, 'mouseup', onMouseUp, false);
onTopMouseMoveListener = (0,rc_util_es_Dom_addEventListener__WEBPACK_IMPORTED_MODULE_2__["default"])(window.top, 'mousemove', onMouseMove, false);
}
} catch (error) {
/* istanbul ignore next */
(0,rc_util_es_warning__WEBPACK_IMPORTED_MODULE_3__.warning)(false, "[rc-image] ".concat(error));
}
}
return function () {
var _onMouseUpListener, _onMouseMoveListener, _onTopMouseUpListener, _onTopMouseMoveListen;
(_onMouseUpListener = onMouseUpListener) === null || _onMouseUpListener === void 0 || _onMouseUpListener.remove();
(_onMouseMoveListener = onMouseMoveListener) === null || _onMouseMoveListener === void 0 || _onMouseMoveListener.remove();
/* istanbul ignore next */
(_onTopMouseUpListener = onTopMouseUpListener) === null || _onTopMouseUpListener === void 0 || _onTopMouseUpListener.remove();
/* istanbul ignore next */
(_onTopMouseMoveListen = onTopMouseMoveListener) === null || _onTopMouseMoveListen === void 0 || _onTopMouseMoveListen.remove();
};
}, [visible, isMoving, x, y, rotate, movable]);
return {
isMoving: isMoving,
onMouseDown: onMouseDown,
onMouseMove: onMouseMove,
onMouseUp: onMouseUp,
onWheel: onWheel
};
}
/***/ }),
/***/ "../../../node_modules/rc-image/es/hooks/usePreviewItems.js":
/*!******************************************************************!*\
!*** ../../../node_modules/rc-image/es/hooks/usePreviewItems.js ***!
\******************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ usePreviewItems)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ "../../../node_modules/@babel/runtime/helpers/esm/toConsumableArray.js");
/* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js");
/* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js");
/* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var _common__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../common */ "../../../node_modules/rc-image/es/common.js");
/**
* Merge props provided `items` or context collected images
*/
function usePreviewItems(items) {
// Context collection image data
var _React$useState = react__WEBPACK_IMPORTED_MODULE_4__.useState({}),
_React$useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__["default"])(_React$useState, 2),
images = _React$useState2[0],
setImages = _React$useState2[1];
var registerImage = react__WEBPACK_IMPORTED_MODULE_4__.useCallback(function (id, data) {
setImages(function (imgs) {
return (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__["default"])({}, imgs), {}, (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])({}, id, data));
});
return function () {
setImages(function (imgs) {
var cloneImgs = (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__["default"])({}, imgs);
delete cloneImgs[id];
return cloneImgs;
});
};
}, []);
// items
var mergedItems = react__WEBPACK_IMPORTED_MODULE_4__.useMemo(function () {
// use `items` first
if (items) {
return items.map(function (item) {
if (typeof item === 'string') {
return {
data: {
src: item
}
};
}
var data = {};
Object.keys(item).forEach(function (key) {
if (['src'].concat((0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__["default"])(_common__WEBPACK_IMPORTED_MODULE_5__.COMMON_PROPS)).includes(key)) {
data[key] = item[key];
}
});
return {
data: data
};
});
}
// use registered images secondly
return Object.keys(images).reduce(function (total, id) {
var _images$id = images[id],
canPreview = _images$id.canPreview,
data = _images$id.data;
if (canPreview) {
total.push({
data: data,
id: id
});
}
return total;
}, []);
}, [items, images]);
return [mergedItems, registerImage, !!items];
}
/***/ }),
/***/ "../../../node_modules/rc-image/es/hooks/useRegisterImage.js":
/*!*******************************************************************!*\
!*** ../../../node_modules/rc-image/es/hooks/useRegisterImage.js ***!
\*******************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ useRegisterImage)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _context__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../context */ "../../../node_modules/rc-image/es/context.js");
var uid = 0;
function useRegisterImage(canPreview, data) {
var _React$useState = react__WEBPACK_IMPORTED_MODULE_1__.useState(function () {
uid += 1;
return String(uid);
}),
_React$useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__["default"])(_React$useState, 1),
id = _React$useState2[0];
var groupContext = react__WEBPACK_IMPORTED_MODULE_1__.useContext(_context__WEBPACK_IMPORTED_MODULE_2__.PreviewGroupContext);
var registerData = {
data: data,
canPreview: canPreview
};
// Keep order start
// Resolve https://github.com/ant-design/ant-design/issues/28881
// Only need unRegister when component unMount
react__WEBPACK_IMPORTED_MODULE_1__.useEffect(function () {
if (groupContext) {
return groupContext.register(id, registerData);
}
}, []);
react__WEBPACK_IMPORTED_MODULE_1__.useEffect(function () {
if (groupContext) {
groupContext.register(id, registerData);
}
}, [canPreview, data]);
return id;
}
/***/ }),
/***/ "../../../node_modules/rc-image/es/hooks/useStatus.js":
/*!************************************************************!*\
!*** ../../../node_modules/rc-image/es/hooks/useStatus.js ***!
\************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ useStatus)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util */ "../../../node_modules/rc-image/es/util.js");
function useStatus(_ref) {
var src = _ref.src,
isCustomPlaceholder = _ref.isCustomPlaceholder,
fallback = _ref.fallback;
var _useState = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(isCustomPlaceholder ? 'loading' : 'normal'),
_useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__["default"])(_useState, 2),
status = _useState2[0],
setStatus = _useState2[1];
var isLoaded = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(false);
var isError = status === 'error';
// https://github.com/react-component/image/pull/187
(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(function () {
var isCurrentSrc = true;
(0,_util__WEBPACK_IMPORTED_MODULE_2__.isImageValid)(src).then(function (isValid) {
// https://github.com/ant-design/ant-design/issues/44948
// If src changes, the previous setStatus should not be triggered
if (!isValid && isCurrentSrc) {
setStatus('error');
}
});
return function () {
isCurrentSrc = false;
};
}, [src]);
(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(function () {
if (isCustomPlaceholder && !isLoaded.current) {
setStatus('loading');
} else if (isError) {
setStatus('normal');
}
}, [src]);
var onLoad = function onLoad() {
setStatus('normal');
};
var getImgRef = function getImgRef(img) {
isLoaded.current = false;
if (status === 'loading' && img !== null && img !== void 0 && img.complete && (img.naturalWidth || img.naturalHeight)) {
isLoaded.current = true;
onLoad();
}
};
var srcAndOnload = isError && fallback ? {
src: fallback
} : {
onLoad: onLoad,
src: src
};
return [getImgRef, srcAndOnload, status];
}
/***/ }),
/***/ "../../../node_modules/rc-image/es/hooks/useTouchEvent.js":
/*!****************************************************************!*\
!*** ../../../node_modules/rc-image/es/hooks/useTouchEvent.js ***!
\****************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ useTouchEvent)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js");
/* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js");
/* harmony import */ var rc_util_es_Dom_addEventListener__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rc-util/es/Dom/addEventListener */ "../../../node_modules/rc-util/es/Dom/addEventListener.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _getFixScaleEleTransPosition__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../getFixScaleEleTransPosition */ "../../../node_modules/rc-image/es/getFixScaleEleTransPosition.js");
function getDistance(a, b) {
var x = a.x - b.x;
var y = a.y - b.y;
return Math.hypot(x, y);
}
function getCenter(oldPoint1, oldPoint2, newPoint1, newPoint2) {
// Calculate the distance each point has moved
var distance1 = getDistance(oldPoint1, newPoint1);
var distance2 = getDistance(oldPoint2, newPoint2);
// If both distances are 0, return the original points
if (distance1 === 0 && distance2 === 0) {
return [oldPoint1.x, oldPoint1.y];
}
// Calculate the ratio of the distances
var ratio = distance1 / (distance1 + distance2);
// Calculate the new center point based on the ratio
var x = oldPoint1.x + ratio * (oldPoint2.x - oldPoint1.x);
var y = oldPoint1.y + ratio * (oldPoint2.y - oldPoint1.y);
return [x, y];
}
function useTouchEvent(imgRef, movable, visible, minScale, transform, updateTransform, dispatchZoomChange) {
var rotate = transform.rotate,
scale = transform.scale,
x = transform.x,
y = transform.y;
var _useState = (0,react__WEBPACK_IMPORTED_MODULE_3__.useState)(false),
_useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__["default"])(_useState, 2),
isTouching = _useState2[0],
setIsTouching = _useState2[1];
var touchPointInfo = (0,react__WEBPACK_IMPORTED_MODULE_3__.useRef)({
point1: {
x: 0,
y: 0
},
point2: {
x: 0,
y: 0
},
eventType: 'none'
});
var updateTouchPointInfo = function updateTouchPointInfo(values) {
touchPointInfo.current = (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({}, touchPointInfo.current), values);
};
var onTouchStart = function onTouchStart(event) {
if (!movable) return;
event.stopPropagation();
setIsTouching(true);
var _event$touches = event.touches,
touches = _event$touches === void 0 ? [] : _event$touches;
if (touches.length > 1) {
// touch zoom
updateTouchPointInfo({
point1: {
x: touches[0].clientX,
y: touches[0].clientY
},
point2: {
x: touches[1].clientX,
y: touches[1].clientY
},
eventType: 'touchZoom'
});
} else {
// touch move
updateTouchPointInfo({
point1: {
x: touches[0].clientX - x,
y: touches[0].clientY - y
},
eventType: 'move'
});
}
};
var onTouchMove = function onTouchMove(event) {
var _event$touches2 = event.touches,
touches = _event$touches2 === void 0 ? [] : _event$touches2;
var _touchPointInfo$curre = touchPointInfo.current,
point1 = _touchPointInfo$curre.point1,
point2 = _touchPointInfo$curre.point2,
eventType = _touchPointInfo$curre.eventType;
if (touches.length > 1 && eventType === 'touchZoom') {
// touch zoom
var newPoint1 = {
x: touches[0].clientX,
y: touches[0].clientY
};
var newPoint2 = {
x: touches[1].clientX,
y: touches[1].clientY
};
var _getCenter = getCenter(point1, point2, newPoint1, newPoint2),
_getCenter2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__["default"])(_getCenter, 2),
centerX = _getCenter2[0],
centerY = _getCenter2[1];
var ratio = getDistance(newPoint1, newPoint2) / getDistance(point1, point2);
dispatchZoomChange(ratio, 'touchZoom', centerX, centerY, true);
updateTouchPointInfo({
point1: newPoint1,
point2: newPoint2,
eventType: 'touchZoom'
});
} else if (eventType === 'move') {
// touch move
updateTransform({
x: touches[0].clientX - point1.x,
y: touches[0].clientY - point1.y
}, 'move');
updateTouchPointInfo({
eventType: 'move'
});
}
};
var onTouchEnd = function onTouchEnd() {
if (!visible) return;
if (isTouching) {
setIsTouching(false);
}
updateTouchPointInfo({
eventType: 'none'
});
if (minScale > scale) {
/** When the scaling ratio is less than the minimum scaling ratio, reset the scaling ratio */
return updateTransform({
x: 0,
y: 0,
scale: minScale
}, 'touchZoom');
}
var width = imgRef.current.offsetWidth * scale;
var height = imgRef.current.offsetHeight * scale;
// eslint-disable-next-line @typescript-eslint/no-shadow
var _imgRef$current$getBo = imgRef.current.getBoundingClientRect(),
left = _imgRef$current$getBo.left,
top = _imgRef$current$getBo.top;
var isRotate = rotate % 180 !== 0;
var fixState = (0,_getFixScaleEleTransPosition__WEBPACK_IMPORTED_MODULE_4__["default"])(isRotate ? height : width, isRotate ? width : height, left, top);
if (fixState) {
updateTransform((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({}, fixState), 'dragRebound');
}
};
(0,react__WEBPACK_IMPORTED_MODULE_3__.useEffect)(function () {
var onTouchMoveListener;
if (visible && movable) {
onTouchMoveListener = (0,rc_util_es_Dom_addEventListener__WEBPACK_IMPORTED_MODULE_2__["default"])(window, 'touchmove', function (e) {
return e.preventDefault();
}, {
passive: false
});
}
return function () {
var _onTouchMoveListener;
(_onTouchMoveListener = onTouchMoveListener) === null || _onTouchMoveListener === void 0 || _onTouchMoveListener.remove();
};
}, [visible, movable]);
return {
isTouching: isTouching,
onTouchStart: onTouchStart,
onTouchMove: onTouchMove,
onTouchEnd: onTouchEnd
};
}
/***/ }),
/***/ "../../../node_modules/rc-image/es/index.js":
/*!**************************************************!*\
!*** ../../../node_modules/rc-image/es/index.js ***!
\**************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _Image__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Image */ "../../../node_modules/rc-image/es/Image.js");
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_Image__WEBPACK_IMPORTED_MODULE_0__["default"]);
/***/ }),
/***/ "../../../node_modules/rc-image/es/previewConfig.js":
/*!**********************************************************!*\
!*** ../../../node_modules/rc-image/es/previewConfig.js ***!
\**********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ BASE_SCALE_RATIO: () => (/* binding */ BASE_SCALE_RATIO),
/* harmony export */ WHEEL_MAX_SCALE_RATIO: () => (/* binding */ WHEEL_MAX_SCALE_RATIO)
/* harmony export */ });
/** Scale the ratio base */
var BASE_SCALE_RATIO = 1;
/** The maximum zoom ratio when the mouse zooms in, adjustable */
var WHEEL_MAX_SCALE_RATIO = 1;
/***/ }),
/***/ "../../../node_modules/rc-image/es/util.js":
/*!*************************************************!*\
!*** ../../../node_modules/rc-image/es/util.js ***!
\*************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ isImageValid: () => (/* binding */ isImageValid)
/* harmony export */ });
function isImageValid(src) {
return new Promise(function (resolve) {
var img = document.createElement('img');
img.onerror = function () {
return resolve(false);
};
img.onload = function () {
return resolve(true);
};
img.src = src;
});
}
/***/ }),
/***/ "../../../node_modules/rc-input/es/BaseInput.js":
/*!******************************************************!*\
!*** ../../../node_modules/rc-input/es/BaseInput.js ***!
\******************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js");
/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "../../../node_modules/@babel/runtime/helpers/esm/extends.js");
/* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js");
/* harmony import */ var _babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/typeof */ "../../../node_modules/@babel/runtime/helpers/esm/typeof.js");
/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! classnames */ "../../../node_modules/classnames/index.js");
/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var _utils_commonUtils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./utils/commonUtils */ "../../../node_modules/rc-input/es/utils/commonUtils.js");
var BaseInput = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5___default().forwardRef(function (props, ref) {
var _props, _props2, _props3;
var inputEl = props.inputElement,
children = props.children,
prefixCls = props.prefixCls,
prefix = props.prefix,
suffix = props.suffix,
addonBefore = props.addonBefore,
addonAfter = props.addonAfter,
className = props.className,
style = props.style,
disabled = props.disabled,
readOnly = props.readOnly,
focused = props.focused,
triggerFocus = props.triggerFocus,
allowClear = props.allowClear,
value = props.value,
handleReset = props.handleReset,
hidden = props.hidden,
classes = props.classes,
classNames = props.classNames,
dataAttrs = props.dataAttrs,
styles = props.styles,
components = props.components,
onClear = props.onClear;
var inputElement = children !== null && children !== void 0 ? children : inputEl;
var AffixWrapperComponent = (components === null || components === void 0 ? void 0 : components.affixWrapper) || 'span';
var GroupWrapperComponent = (components === null || components === void 0 ? void 0 : components.groupWrapper) || 'span';
var WrapperComponent = (components === null || components === void 0 ? void 0 : components.wrapper) || 'span';
var GroupAddonComponent = (components === null || components === void 0 ? void 0 : components.groupAddon) || 'span';
var containerRef = (0,react__WEBPACK_IMPORTED_MODULE_5__.useRef)(null);
var onInputClick = function onInputClick(e) {
var _containerRef$current;
if ((_containerRef$current = containerRef.current) !== null && _containerRef$current !== void 0 && _containerRef$current.contains(e.target)) {
triggerFocus === null || triggerFocus === void 0 || triggerFocus();
}
};
var hasAffix = (0,_utils_commonUtils__WEBPACK_IMPORTED_MODULE_6__.hasPrefixSuffix)(props);
var element = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_5__.cloneElement)(inputElement, {
value: value,
className: classnames__WEBPACK_IMPORTED_MODULE_4___default()((_props = inputElement.props) === null || _props === void 0 ? void 0 : _props.className, !hasAffix && (classNames === null || classNames === void 0 ? void 0 : classNames.variant)) || null
});
// ======================== Ref ======================== //
var groupRef = (0,react__WEBPACK_IMPORTED_MODULE_5__.useRef)(null);
react__WEBPACK_IMPORTED_MODULE_5___default().useImperativeHandle(ref, function () {
return {
nativeElement: groupRef.current || containerRef.current
};
});
// ================== Prefix & Suffix ================== //
if (hasAffix) {
// ================== Clear Icon ================== //
var clearIcon = null;
if (allowClear) {
var needClear = !disabled && !readOnly && value;
var clearIconCls = "".concat(prefixCls, "-clear-icon");
var iconNode = (0,_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_3__["default"])(allowClear) === 'object' && allowClear !== null && allowClear !== void 0 && allowClear.clearIcon ? allowClear.clearIcon : '✖';
clearIcon = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5___default().createElement("button", {
type: "button",
tabIndex: -1,
onClick: function onClick(event) {
handleReset === null || handleReset === void 0 || handleReset(event);
onClear === null || onClear === void 0 || onClear();
}
// Do not trigger onBlur when clear input
// https://github.com/ant-design/ant-design/issues/31200
,
onMouseDown: function onMouseDown(e) {
return e.preventDefault();
},
className: classnames__WEBPACK_IMPORTED_MODULE_4___default()(clearIconCls, (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__["default"])({}, "".concat(clearIconCls, "-hidden"), !needClear), "".concat(clearIconCls, "-has-suffix"), !!suffix))
}, iconNode);
}
var affixWrapperPrefixCls = "".concat(prefixCls, "-affix-wrapper");
var affixWrapperCls = classnames__WEBPACK_IMPORTED_MODULE_4___default()(affixWrapperPrefixCls, (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__["default"])({}, "".concat(prefixCls, "-disabled"), disabled), "".concat(affixWrapperPrefixCls, "-disabled"), disabled), "".concat(affixWrapperPrefixCls, "-focused"), focused), "".concat(affixWrapperPrefixCls, "-readonly"), readOnly), "".concat(affixWrapperPrefixCls, "-input-with-clear-btn"), suffix && allowClear && value), classes === null || classes === void 0 ? void 0 : classes.affixWrapper, classNames === null || classNames === void 0 ? void 0 : classNames.affixWrapper, classNames === null || classNames === void 0 ? void 0 : classNames.variant);
var suffixNode = (suffix || allowClear) && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5___default().createElement("span", {
className: classnames__WEBPACK_IMPORTED_MODULE_4___default()("".concat(prefixCls, "-suffix"), classNames === null || classNames === void 0 ? void 0 : classNames.suffix),
style: styles === null || styles === void 0 ? void 0 : styles.suffix
}, clearIcon, suffix);
element = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5___default().createElement(AffixWrapperComponent, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__["default"])({
className: affixWrapperCls,
style: styles === null || styles === void 0 ? void 0 : styles.affixWrapper,
onClick: onInputClick
}, dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.affixWrapper, {
ref: containerRef
}), prefix && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5___default().createElement("span", {
className: classnames__WEBPACK_IMPORTED_MODULE_4___default()("".concat(prefixCls, "-prefix"), classNames === null || classNames === void 0 ? void 0 : classNames.prefix),
style: styles === null || styles === void 0 ? void 0 : styles.prefix
}, prefix), element, suffixNode);
}
// ================== Addon ================== //
if ((0,_utils_commonUtils__WEBPACK_IMPORTED_MODULE_6__.hasAddon)(props)) {
var wrapperCls = "".concat(prefixCls, "-group");
var addonCls = "".concat(wrapperCls, "-addon");
var groupWrapperCls = "".concat(wrapperCls, "-wrapper");
var mergedWrapperClassName = classnames__WEBPACK_IMPORTED_MODULE_4___default()("".concat(prefixCls, "-wrapper"), wrapperCls, classes === null || classes === void 0 ? void 0 : classes.wrapper, classNames === null || classNames === void 0 ? void 0 : classNames.wrapper);
var mergedGroupClassName = classnames__WEBPACK_IMPORTED_MODULE_4___default()(groupWrapperCls, (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__["default"])({}, "".concat(groupWrapperCls, "-disabled"), disabled), classes === null || classes === void 0 ? void 0 : classes.group, classNames === null || classNames === void 0 ? void 0 : classNames.groupWrapper);
// Need another wrapper for changing display:table to display:inline-block
// and put style prop in wrapper
element = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5___default().createElement(GroupWrapperComponent, {
className: mergedGroupClassName,
ref: groupRef
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5___default().createElement(WrapperComponent, {
className: mergedWrapperClassName
}, addonBefore && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5___default().createElement(GroupAddonComponent, {
className: addonCls
}, addonBefore), element, addonAfter && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5___default().createElement(GroupAddonComponent, {
className: addonCls
}, addonAfter)));
}
// `className` and `style` are always on the root element
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5___default().cloneElement(element, {
className: classnames__WEBPACK_IMPORTED_MODULE_4___default()((_props2 = element.props) === null || _props2 === void 0 ? void 0 : _props2.className, className) || null,
style: (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({}, (_props3 = element.props) === null || _props3 === void 0 ? void 0 : _props3.style), style),
hidden: hidden
});
});
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (BaseInput);
/***/ }),
/***/ "../../../node_modules/rc-input/es/Input.js":
/*!**************************************************!*\
!*** ../../../node_modules/rc-input/es/Input.js ***!
\**************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js");
/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "../../../node_modules/@babel/runtime/helpers/esm/extends.js");
/* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js");
/* harmony import */ var _babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ "../../../node_modules/@babel/runtime/helpers/esm/toConsumableArray.js");
/* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js");
/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ "../../../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js");
/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! classnames */ "../../../node_modules/classnames/index.js");
/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_6__);
/* harmony import */ var rc_util_es_hooks_useMergedState__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! rc-util/es/hooks/useMergedState */ "../../../node_modules/rc-util/es/hooks/useMergedState.js");
/* harmony import */ var rc_util_es_omit__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! rc-util/es/omit */ "../../../node_modules/rc-util/es/omit.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_9__);
/* harmony import */ var _BaseInput__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./BaseInput */ "../../../node_modules/rc-input/es/BaseInput.js");
/* harmony import */ var _hooks_useCount__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./hooks/useCount */ "../../../node_modules/rc-input/es/hooks/useCount.js");
/* harmony import */ var _utils_commonUtils__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./utils/commonUtils */ "../../../node_modules/rc-input/es/utils/commonUtils.js");
var _excluded = ["autoComplete", "onChange", "onFocus", "onBlur", "onPressEnter", "onKeyDown", "onKeyUp", "prefixCls", "disabled", "htmlSize", "className", "maxLength", "suffix", "showCount", "count", "type", "classes", "classNames", "styles", "onCompositionStart", "onCompositionEnd"];
var Input = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_9__.forwardRef)(function (props, ref) {
var autoComplete = props.autoComplete,
onChange = props.onChange,
onFocus = props.onFocus,
onBlur = props.onBlur,
onPressEnter = props.onPressEnter,
onKeyDown = props.onKeyDown,
onKeyUp = props.onKeyUp,
_props$prefixCls = props.prefixCls,
prefixCls = _props$prefixCls === void 0 ? 'rc-input' : _props$prefixCls,
disabled = props.disabled,
htmlSize = props.htmlSize,
className = props.className,
maxLength = props.maxLength,
suffix = props.suffix,
showCount = props.showCount,
count = props.count,
_props$type = props.type,
type = _props$type === void 0 ? 'text' : _props$type,
classes = props.classes,
classNames = props.classNames,
styles = props.styles,
_onCompositionStart = props.onCompositionStart,
onCompositionEnd = props.onCompositionEnd,
rest = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_5__["default"])(props, _excluded);
var _useState = (0,react__WEBPACK_IMPORTED_MODULE_9__.useState)(false),
_useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_4__["default"])(_useState, 2),
focused = _useState2[0],
setFocused = _useState2[1];
var compositionRef = (0,react__WEBPACK_IMPORTED_MODULE_9__.useRef)(false);
var keyLockRef = (0,react__WEBPACK_IMPORTED_MODULE_9__.useRef)(false);
var inputRef = (0,react__WEBPACK_IMPORTED_MODULE_9__.useRef)(null);
var holderRef = (0,react__WEBPACK_IMPORTED_MODULE_9__.useRef)(null);
var focus = function focus(option) {
if (inputRef.current) {
(0,_utils_commonUtils__WEBPACK_IMPORTED_MODULE_12__.triggerFocus)(inputRef.current, option);
}
};
// ====================== Value =======================
var _useMergedState = (0,rc_util_es_hooks_useMergedState__WEBPACK_IMPORTED_MODULE_7__["default"])(props.defaultValue, {
value: props.value
}),
_useMergedState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_4__["default"])(_useMergedState, 2),
value = _useMergedState2[0],
setValue = _useMergedState2[1];
var formatValue = value === undefined || value === null ? '' : String(value);
// =================== Select Range ===================
var _useState3 = (0,react__WEBPACK_IMPORTED_MODULE_9__.useState)(null),
_useState4 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_4__["default"])(_useState3, 2),
selection = _useState4[0],
setSelection = _useState4[1];
// ====================== Count =======================
var countConfig = (0,_hooks_useCount__WEBPACK_IMPORTED_MODULE_11__["default"])(count, showCount);
var mergedMax = countConfig.max || maxLength;
var valueLength = countConfig.strategy(formatValue);
var isOutOfRange = !!mergedMax && valueLength > mergedMax;
// ======================= Ref ========================
(0,react__WEBPACK_IMPORTED_MODULE_9__.useImperativeHandle)(ref, function () {
var _holderRef$current;
return {
focus: focus,
blur: function blur() {
var _inputRef$current;
(_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 || _inputRef$current.blur();
},
setSelectionRange: function setSelectionRange(start, end, direction) {
var _inputRef$current2;
(_inputRef$current2 = inputRef.current) === null || _inputRef$current2 === void 0 || _inputRef$current2.setSelectionRange(start, end, direction);
},
select: function select() {
var _inputRef$current3;
(_inputRef$current3 = inputRef.current) === null || _inputRef$current3 === void 0 || _inputRef$current3.select();
},
input: inputRef.current,
nativeElement: ((_holderRef$current = holderRef.current) === null || _holderRef$current === void 0 ? void 0 : _holderRef$current.nativeElement) || inputRef.current
};
});
(0,react__WEBPACK_IMPORTED_MODULE_9__.useEffect)(function () {
if (keyLockRef.current) {
keyLockRef.current = false;
}
setFocused(function (prev) {
return prev && disabled ? false : prev;
});
}, [disabled]);
var triggerChange = function triggerChange(e, currentValue, info) {
var cutValue = currentValue;
if (!compositionRef.current && countConfig.exceedFormatter && countConfig.max && countConfig.strategy(currentValue) > countConfig.max) {
cutValue = countConfig.exceedFormatter(currentValue, {
max: countConfig.max
});
if (currentValue !== cutValue) {
var _inputRef$current4, _inputRef$current5;
setSelection([((_inputRef$current4 = inputRef.current) === null || _inputRef$current4 === void 0 ? void 0 : _inputRef$current4.selectionStart) || 0, ((_inputRef$current5 = inputRef.current) === null || _inputRef$current5 === void 0 ? void 0 : _inputRef$current5.selectionEnd) || 0]);
}
} else if (info.source === 'compositionEnd') {
// Avoid triggering twice
// https://github.com/ant-design/ant-design/issues/46587
return;
}
setValue(cutValue);
if (inputRef.current) {
(0,_utils_commonUtils__WEBPACK_IMPORTED_MODULE_12__.resolveOnChange)(inputRef.current, e, onChange, cutValue);
}
};
(0,react__WEBPACK_IMPORTED_MODULE_9__.useEffect)(function () {
if (selection) {
var _inputRef$current6;
(_inputRef$current6 = inputRef.current) === null || _inputRef$current6 === void 0 || _inputRef$current6.setSelectionRange.apply(_inputRef$current6, (0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_3__["default"])(selection));
}
}, [selection]);
var onInternalChange = function onInternalChange(e) {
triggerChange(e, e.target.value, {
source: 'change'
});
};
var onInternalCompositionEnd = function onInternalCompositionEnd(e) {
compositionRef.current = false;
triggerChange(e, e.currentTarget.value, {
source: 'compositionEnd'
});
onCompositionEnd === null || onCompositionEnd === void 0 || onCompositionEnd(e);
};
var handleKeyDown = function handleKeyDown(e) {
if (onPressEnter && e.key === 'Enter' && !keyLockRef.current) {
keyLockRef.current = true;
onPressEnter(e);
}
onKeyDown === null || onKeyDown === void 0 || onKeyDown(e);
};
var handleKeyUp = function handleKeyUp(e) {
if (e.key === 'Enter') {
keyLockRef.current = false;
}
onKeyUp === null || onKeyUp === void 0 || onKeyUp(e);
};
var handleFocus = function handleFocus(e) {
setFocused(true);
onFocus === null || onFocus === void 0 || onFocus(e);
};
var handleBlur = function handleBlur(e) {
if (keyLockRef.current) {
keyLockRef.current = false;
}
setFocused(false);
onBlur === null || onBlur === void 0 || onBlur(e);
};
var handleReset = function handleReset(e) {
setValue('');
focus();
if (inputRef.current) {
(0,_utils_commonUtils__WEBPACK_IMPORTED_MODULE_12__.resolveOnChange)(inputRef.current, e, onChange);
}
};
// ====================== Input =======================
var outOfRangeCls = isOutOfRange && "".concat(prefixCls, "-out-of-range");
var getInputElement = function getInputElement() {
// Fix https://fb.me/react-unknown-prop
var otherProps = (0,rc_util_es_omit__WEBPACK_IMPORTED_MODULE_8__["default"])(props, ['prefixCls', 'onPressEnter', 'addonBefore', 'addonAfter', 'prefix', 'suffix', 'allowClear',
// Input elements must be either controlled or uncontrolled,
// specify either the value prop, or the defaultValue prop, but not both.
'defaultValue', 'showCount', 'count', 'classes', 'htmlSize', 'styles', 'classNames', 'onClear']);
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_9___default().createElement("input", (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__["default"])({
autoComplete: autoComplete
}, otherProps, {
onChange: onInternalChange,
onFocus: handleFocus,
onBlur: handleBlur,
onKeyDown: handleKeyDown,
onKeyUp: handleKeyUp,
className: classnames__WEBPACK_IMPORTED_MODULE_6___default()(prefixCls, (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__["default"])({}, "".concat(prefixCls, "-disabled"), disabled), classNames === null || classNames === void 0 ? void 0 : classNames.input),
style: styles === null || styles === void 0 ? void 0 : styles.input,
ref: inputRef,
size: htmlSize,
type: type,
onCompositionStart: function onCompositionStart(e) {
compositionRef.current = true;
_onCompositionStart === null || _onCompositionStart === void 0 || _onCompositionStart(e);
},
onCompositionEnd: onInternalCompositionEnd
}));
};
var getSuffix = function getSuffix() {
// Max length value
var hasMaxLength = Number(mergedMax) > 0;
if (suffix || countConfig.show) {
var dataCount = countConfig.showFormatter ? countConfig.showFormatter({
value: formatValue,
count: valueLength,
maxLength: mergedMax
}) : "".concat(valueLength).concat(hasMaxLength ? " / ".concat(mergedMax) : '');
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_9___default().createElement((react__WEBPACK_IMPORTED_MODULE_9___default().Fragment), null, countConfig.show && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_9___default().createElement("span", {
className: classnames__WEBPACK_IMPORTED_MODULE_6___default()("".concat(prefixCls, "-show-count-suffix"), (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__["default"])({}, "".concat(prefixCls, "-show-count-has-suffix"), !!suffix), classNames === null || classNames === void 0 ? void 0 : classNames.count),
style: (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({}, styles === null || styles === void 0 ? void 0 : styles.count)
}, dataCount), suffix);
}
return null;
};
// ====================== Render ======================
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_9___default().createElement(_BaseInput__WEBPACK_IMPORTED_MODULE_10__["default"], (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__["default"])({}, rest, {
prefixCls: prefixCls,
className: classnames__WEBPACK_IMPORTED_MODULE_6___default()(className, outOfRangeCls),
handleReset: handleReset,
value: formatValue,
focused: focused,
triggerFocus: focus,
suffix: getSuffix(),
disabled: disabled,
classes: classes,
classNames: classNames,
styles: styles
}), getInputElement());
});
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Input);
/***/ }),
/***/ "../../../node_modules/rc-input/es/hooks/useCount.js":
/*!***********************************************************!*\
!*** ../../../node_modules/rc-input/es/hooks/useCount.js ***!
\***********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ useCount),
/* harmony export */ inCountRange: () => (/* binding */ inCountRange)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ "../../../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js");
/* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js");
/* harmony import */ var _babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/typeof */ "../../../node_modules/@babel/runtime/helpers/esm/typeof.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);
var _excluded = ["show"];
/**
* Cut `value` by the `count.max` prop.
*/
function inCountRange(value, countConfig) {
if (!countConfig.max) {
return true;
}
var count = countConfig.strategy(value);
return count <= countConfig.max;
}
function useCount(count, showCount) {
return react__WEBPACK_IMPORTED_MODULE_3__.useMemo(function () {
var mergedConfig = {};
if (showCount) {
mergedConfig.show = (0,_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_2__["default"])(showCount) === 'object' && showCount.formatter ? showCount.formatter : !!showCount;
}
mergedConfig = (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, mergedConfig), count);
var _ref = mergedConfig,
show = _ref.show,
rest = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__["default"])(_ref, _excluded);
return (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, rest), {}, {
show: !!show,
showFormatter: typeof show === 'function' ? show : undefined,
strategy: rest.strategy || function (value) {
return value.length;
}
});
}, [count, showCount]);
}
/***/ }),
/***/ "../../../node_modules/rc-input/es/index.js":
/*!**************************************************!*\
!*** ../../../node_modules/rc-input/es/index.js ***!
\**************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ BaseInput: () => (/* reexport safe */ _BaseInput__WEBPACK_IMPORTED_MODULE_0__["default"]),
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _BaseInput__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./BaseInput */ "../../../node_modules/rc-input/es/BaseInput.js");
/* harmony import */ var _Input__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Input */ "../../../node_modules/rc-input/es/Input.js");
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_Input__WEBPACK_IMPORTED_MODULE_1__["default"]);
/***/ }),
/***/ "../../../node_modules/rc-input/es/utils/commonUtils.js":
/*!**************************************************************!*\
!*** ../../../node_modules/rc-input/es/utils/commonUtils.js ***!
\**************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ hasAddon: () => (/* binding */ hasAddon),
/* harmony export */ hasPrefixSuffix: () => (/* binding */ hasPrefixSuffix),
/* harmony export */ resolveOnChange: () => (/* binding */ resolveOnChange),
/* harmony export */ triggerFocus: () => (/* binding */ triggerFocus)
/* harmony export */ });
function hasAddon(props) {
return !!(props.addonBefore || props.addonAfter);
}
function hasPrefixSuffix(props) {
return !!(props.prefix || props.suffix || props.allowClear);
}
// TODO: It's better to use `Proxy` replace the `element.value`. But we still need support IE11.
function cloneEvent(event, target, value) {
// A bug report filed on WebKit's Bugzilla tracker, dating back to 2009, specifically addresses the issue of cloneNode() not copying files of elements.
// As of the last update, this bug was still marked as "NEW," indicating that it might not have been resolved yet​​.
// https://bugs.webkit.org/show_bug.cgi?id=28123
var currentTarget = target.cloneNode(true);
// click clear icon
var newEvent = Object.create(event, {
target: {
value: currentTarget
},
currentTarget: {
value: currentTarget
}
});
// Fill data
currentTarget.value = value;
// Fill selection. Some type like `email` not support selection
// https://github.com/ant-design/ant-design/issues/47833
if (typeof target.selectionStart === 'number' && typeof target.selectionEnd === 'number') {
currentTarget.selectionStart = target.selectionStart;
currentTarget.selectionEnd = target.selectionEnd;
}
currentTarget.setSelectionRange = function () {
target.setSelectionRange.apply(target, arguments);
};
return newEvent;
}
function resolveOnChange(target, e, onChange, targetValue) {
if (!onChange) {
return;
}
var event = e;
if (e.type === 'click') {
// Clone a new target for event.
// Avoid the following usage, the setQuery method gets the original value.
//
// const [query, setQuery] = React.useState('');
// {
// setQuery((prevStatus) => e.target.value);
// }}
// />
event = cloneEvent(e, target, '');
onChange(event);
return;
}
// Trigger by composition event, this means we need force change the input value
// https://github.com/ant-design/ant-design/issues/45737
// https://github.com/ant-design/ant-design/issues/46598
if (target.type !== 'file' && targetValue !== undefined) {
event = cloneEvent(e, target, targetValue);
onChange(event);
return;
}
onChange(event);
}
function triggerFocus(element, option) {
if (!element) return;
element.focus(option);
// Selection content
var _ref = option || {},
cursor = _ref.cursor;
if (cursor) {
var len = element.value.length;
switch (cursor) {
case 'start':
element.setSelectionRange(0, 0);
break;
case 'end':
element.setSelectionRange(len, len);
break;
default:
element.setSelectionRange(0, len);
}
}
}
/***/ }),
/***/ "../../../node_modules/rc-input/lib/utils/commonUtils.js":
/*!***************************************************************!*\
!*** ../../../node_modules/rc-input/lib/utils/commonUtils.js ***!
\***************************************************************/
/***/ ((__unused_webpack_module, exports) => {
Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports.hasAddon = hasAddon;
exports.hasPrefixSuffix = hasPrefixSuffix;
exports.resolveOnChange = resolveOnChange;
exports.triggerFocus = triggerFocus;
function hasAddon(props) {
return !!(props.addonBefore || props.addonAfter);
}
function hasPrefixSuffix(props) {
return !!(props.prefix || props.suffix || props.allowClear);
}
// TODO: It's better to use `Proxy` replace the `element.value`. But we still need support IE11.
function cloneEvent(event, target, value) {
// A bug report filed on WebKit's Bugzilla tracker, dating back to 2009, specifically addresses the issue of cloneNode() not copying files of elements.
// As of the last update, this bug was still marked as "NEW," indicating that it might not have been resolved yet​​.
// https://bugs.webkit.org/show_bug.cgi?id=28123
var currentTarget = target.cloneNode(true);
// click clear icon
var newEvent = Object.create(event, {
target: {
value: currentTarget
},
currentTarget: {
value: currentTarget
}
});
// Fill data
currentTarget.value = value;
// Fill selection. Some type like `email` not support selection
// https://github.com/ant-design/ant-design/issues/47833
if (typeof target.selectionStart === 'number' && typeof target.selectionEnd === 'number') {
currentTarget.selectionStart = target.selectionStart;
currentTarget.selectionEnd = target.selectionEnd;
}
currentTarget.setSelectionRange = function () {
target.setSelectionRange.apply(target, arguments);
};
return newEvent;
}
function resolveOnChange(target, e, onChange, targetValue) {
if (!onChange) {
return;
}
var event = e;
if (e.type === 'click') {
// Clone a new target for event.
// Avoid the following usage, the setQuery method gets the original value.
//
// const [query, setQuery] = React.useState('');
// {
// setQuery((prevStatus) => e.target.value);
// }}
// />
event = cloneEvent(e, target, '');
onChange(event);
return;
}
// Trigger by composition event, this means we need force change the input value
// https://github.com/ant-design/ant-design/issues/45737
// https://github.com/ant-design/ant-design/issues/46598
if (target.type !== 'file' && targetValue !== undefined) {
event = cloneEvent(e, target, targetValue);
onChange(event);
return;
}
onChange(event);
}
function triggerFocus(element, option) {
if (!element) return;
element.focus(option);
// Selection content
var _ref = option || {},
cursor = _ref.cursor;
if (cursor) {
var len = element.value.length;
switch (cursor) {
case 'start':
element.setSelectionRange(0, 0);
break;
case 'end':
element.setSelectionRange(len, len);
break;
default:
element.setSelectionRange(0, len);
}
}
}
/***/ }),
/***/ "../../../node_modules/rc-mentions/es/DropdownMenu.js":
/*!************************************************************!*\
!*** ../../../node_modules/rc-mentions/es/DropdownMenu.js ***!
\************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var rc_menu__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rc-menu */ "../../../node_modules/rc-menu/es/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _MentionsContext__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./MentionsContext */ "../../../node_modules/rc-mentions/es/MentionsContext.js");
/**
* We only use Menu to display the candidate.
* The focus is controlled by textarea to make accessibility easy.
*/
function DropdownMenu(props) {
var _React$useContext = react__WEBPACK_IMPORTED_MODULE_1__.useContext(_MentionsContext__WEBPACK_IMPORTED_MODULE_2__["default"]),
notFoundContent = _React$useContext.notFoundContent,
activeIndex = _React$useContext.activeIndex,
setActiveIndex = _React$useContext.setActiveIndex,
selectOption = _React$useContext.selectOption,
onFocus = _React$useContext.onFocus,
onBlur = _React$useContext.onBlur,
onScroll = _React$useContext.onScroll;
var prefixCls = props.prefixCls,
options = props.options;
var activeOption = options[activeIndex] || {};
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(rc_menu__WEBPACK_IMPORTED_MODULE_0__["default"], {
prefixCls: "".concat(prefixCls, "-menu"),
activeKey: activeOption.key,
onSelect: function onSelect(_ref) {
var key = _ref.key;
var option = options.find(function (_ref2) {
var optionKey = _ref2.key;
return optionKey === key;
});
selectOption(option);
},
onFocus: onFocus,
onBlur: onBlur,
onScroll: onScroll
}, options.map(function (option, index) {
var key = option.key,
disabled = option.disabled,
className = option.className,
style = option.style,
label = option.label;
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(rc_menu__WEBPACK_IMPORTED_MODULE_0__.MenuItem, {
key: key,
disabled: disabled,
className: className,
style: style,
onMouseEnter: function onMouseEnter() {
setActiveIndex(index);
}
}, label);
}), !options.length && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(rc_menu__WEBPACK_IMPORTED_MODULE_0__.MenuItem, {
disabled: true
}, notFoundContent));
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (DropdownMenu);
/***/ }),
/***/ "../../../node_modules/rc-mentions/es/KeywordTrigger.js":
/*!**************************************************************!*\
!*** ../../../node_modules/rc-mentions/es/KeywordTrigger.js ***!
\**************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _rc_component_trigger__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @rc-component/trigger */ "../../../node_modules/@rc-component/trigger/es/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _DropdownMenu__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./DropdownMenu */ "../../../node_modules/rc-mentions/es/DropdownMenu.js");
var BUILT_IN_PLACEMENTS = {
bottomRight: {
points: ['tl', 'br'],
offset: [0, 4],
overflow: {
adjustX: 1,
adjustY: 1
}
},
bottomLeft: {
points: ['tr', 'bl'],
offset: [0, 4],
overflow: {
adjustX: 1,
adjustY: 1
}
},
topRight: {
points: ['bl', 'tr'],
offset: [0, -4],
overflow: {
adjustX: 1,
adjustY: 1
}
},
topLeft: {
points: ['br', 'tl'],
offset: [0, -4],
overflow: {
adjustX: 1,
adjustY: 1
}
}
};
var KeywordTrigger = function KeywordTrigger(props) {
var prefixCls = props.prefixCls,
options = props.options,
children = props.children,
visible = props.visible,
transitionName = props.transitionName,
getPopupContainer = props.getPopupContainer,
dropdownClassName = props.dropdownClassName,
direction = props.direction,
placement = props.placement;
var dropdownPrefix = "".concat(prefixCls, "-dropdown");
var dropdownElement = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(_DropdownMenu__WEBPACK_IMPORTED_MODULE_2__["default"], {
prefixCls: dropdownPrefix,
options: options
});
var dropdownPlacement = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(function () {
var popupPlacement;
if (direction === 'rtl') {
popupPlacement = placement === 'top' ? 'topLeft' : 'bottomLeft';
} else {
popupPlacement = placement === 'top' ? 'topRight' : 'bottomRight';
}
return popupPlacement;
}, [direction, placement]);
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(_rc_component_trigger__WEBPACK_IMPORTED_MODULE_0__["default"], {
prefixCls: dropdownPrefix,
popupVisible: visible,
popup: dropdownElement,
popupPlacement: dropdownPlacement,
popupTransitionName: transitionName,
builtinPlacements: BUILT_IN_PLACEMENTS,
getPopupContainer: getPopupContainer,
popupClassName: dropdownClassName
}, children);
};
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (KeywordTrigger);
/***/ }),
/***/ "../../../node_modules/rc-mentions/es/Mentions.js":
/*!********************************************************!*\
!*** ../../../node_modules/rc-mentions/es/Mentions.js ***!
\********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "../../../node_modules/@babel/runtime/helpers/esm/extends.js");
/* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js");
/* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js");
/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ "../../../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js");
/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! classnames */ "../../../node_modules/classnames/index.js");
/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var rc_input__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! rc-input */ "../../../node_modules/rc-input/es/index.js");
/* harmony import */ var rc_textarea__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! rc-textarea */ "../../../node_modules/rc-textarea/es/index.js");
/* harmony import */ var rc_util_es_Children_toArray__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! rc-util/es/Children/toArray */ "../../../node_modules/rc-util/es/Children/toArray.js");
/* harmony import */ var rc_util_es_hooks_useMergedState__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! rc-util/es/hooks/useMergedState */ "../../../node_modules/rc-util/es/hooks/useMergedState.js");
/* harmony import */ var rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! rc-util/es/KeyCode */ "../../../node_modules/rc-util/es/KeyCode.js");
/* harmony import */ var rc_util_es_warning__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! rc-util/es/warning */ "../../../node_modules/rc-util/es/warning.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_11__);
/* harmony import */ var _hooks_useEffectState__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./hooks/useEffectState */ "../../../node_modules/rc-mentions/es/hooks/useEffectState.js");
/* harmony import */ var _KeywordTrigger__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./KeywordTrigger */ "../../../node_modules/rc-mentions/es/KeywordTrigger.js");
/* harmony import */ var _MentionsContext__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./MentionsContext */ "../../../node_modules/rc-mentions/es/MentionsContext.js");
/* harmony import */ var _Option__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./Option */ "../../../node_modules/rc-mentions/es/Option.js");
/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./util */ "../../../node_modules/rc-mentions/es/util.js");
var _excluded = ["prefixCls", "className", "style", "prefix", "split", "notFoundContent", "value", "defaultValue", "children", "options", "open", "allowClear", "silent", "validateSearch", "filterOption", "onChange", "onKeyDown", "onKeyUp", "onPressEnter", "onSearch", "onSelect", "onFocus", "onBlur", "transitionName", "placement", "direction", "getPopupContainer", "dropdownClassName", "rows", "visible", "onPopupScroll"],
_excluded2 = ["suffix", "prefixCls", "defaultValue", "value", "allowClear", "onChange", "classNames", "className", "disabled", "onClear"];
var InternalMentions = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_11__.forwardRef)(function (props, ref) {
var prefixCls = props.prefixCls,
className = props.className,
style = props.style,
_props$prefix = props.prefix,
prefix = _props$prefix === void 0 ? '@' : _props$prefix,
_props$split = props.split,
split = _props$split === void 0 ? ' ' : _props$split,
_props$notFoundConten = props.notFoundContent,
notFoundContent = _props$notFoundConten === void 0 ? 'Not Found' : _props$notFoundConten,
value = props.value,
defaultValue = props.defaultValue,
children = props.children,
options = props.options,
open = props.open,
allowClear = props.allowClear,
silent = props.silent,
_props$validateSearch = props.validateSearch,
validateSearch = _props$validateSearch === void 0 ? _util__WEBPACK_IMPORTED_MODULE_16__.validateSearch : _props$validateSearch,
_props$filterOption = props.filterOption,
filterOption = _props$filterOption === void 0 ? _util__WEBPACK_IMPORTED_MODULE_16__.filterOption : _props$filterOption,
onChange = props.onChange,
onKeyDown = props.onKeyDown,
onKeyUp = props.onKeyUp,
onPressEnter = props.onPressEnter,
onSearch = props.onSearch,
onSelect = props.onSelect,
onFocus = props.onFocus,
onBlur = props.onBlur,
transitionName = props.transitionName,
placement = props.placement,
direction = props.direction,
getPopupContainer = props.getPopupContainer,
dropdownClassName = props.dropdownClassName,
_props$rows = props.rows,
rows = _props$rows === void 0 ? 1 : _props$rows,
visible = props.visible,
onPopupScroll = props.onPopupScroll,
restProps = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_3__["default"])(props, _excluded);
var mergedPrefix = (0,react__WEBPACK_IMPORTED_MODULE_11__.useMemo)(function () {
return Array.isArray(prefix) ? prefix : [prefix];
}, [prefix]);
// =============================== Refs ===============================
var containerRef = (0,react__WEBPACK_IMPORTED_MODULE_11__.useRef)(null);
var textareaRef = (0,react__WEBPACK_IMPORTED_MODULE_11__.useRef)(null);
var measureRef = (0,react__WEBPACK_IMPORTED_MODULE_11__.useRef)(null);
var getTextArea = function getTextArea() {
var _textareaRef$current;
return (_textareaRef$current = textareaRef.current) === null || _textareaRef$current === void 0 || (_textareaRef$current = _textareaRef$current.resizableTextArea) === null || _textareaRef$current === void 0 ? void 0 : _textareaRef$current.textArea;
};
react__WEBPACK_IMPORTED_MODULE_11___default().useImperativeHandle(ref, function () {
var _textareaRef$current4;
return {
focus: function focus() {
var _textareaRef$current2;
return (_textareaRef$current2 = textareaRef.current) === null || _textareaRef$current2 === void 0 ? void 0 : _textareaRef$current2.focus();
},
blur: function blur() {
var _textareaRef$current3;
return (_textareaRef$current3 = textareaRef.current) === null || _textareaRef$current3 === void 0 ? void 0 : _textareaRef$current3.blur();
},
textarea: (_textareaRef$current4 = textareaRef.current) === null || _textareaRef$current4 === void 0 || (_textareaRef$current4 = _textareaRef$current4.resizableTextArea) === null || _textareaRef$current4 === void 0 ? void 0 : _textareaRef$current4.textArea,
nativeElement: containerRef.current
};
});
// ============================== State ===============================
var _useState = (0,react__WEBPACK_IMPORTED_MODULE_11__.useState)(false),
_useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_useState, 2),
measuring = _useState2[0],
setMeasuring = _useState2[1];
var _useState3 = (0,react__WEBPACK_IMPORTED_MODULE_11__.useState)(''),
_useState4 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_useState3, 2),
measureText = _useState4[0],
setMeasureText = _useState4[1];
var _useState5 = (0,react__WEBPACK_IMPORTED_MODULE_11__.useState)(''),
_useState6 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_useState5, 2),
measurePrefix = _useState6[0],
setMeasurePrefix = _useState6[1];
var _useState7 = (0,react__WEBPACK_IMPORTED_MODULE_11__.useState)(0),
_useState8 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_useState7, 2),
measureLocation = _useState8[0],
setMeasureLocation = _useState8[1];
var _useState9 = (0,react__WEBPACK_IMPORTED_MODULE_11__.useState)(0),
_useState10 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_useState9, 2),
activeIndex = _useState10[0],
setActiveIndex = _useState10[1];
var _useState11 = (0,react__WEBPACK_IMPORTED_MODULE_11__.useState)(false),
_useState12 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_useState11, 2),
isFocus = _useState12[0],
setIsFocus = _useState12[1];
// ============================== Value ===============================
var _useMergedState = (0,rc_util_es_hooks_useMergedState__WEBPACK_IMPORTED_MODULE_8__["default"])('', {
defaultValue: defaultValue,
value: value
}),
_useMergedState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_useMergedState, 2),
mergedValue = _useMergedState2[0],
setMergedValue = _useMergedState2[1];
// =============================== Open ===============================
(0,react__WEBPACK_IMPORTED_MODULE_11__.useEffect)(function () {
// Sync measure div top with textarea for rc-trigger usage
if (measuring && measureRef.current) {
measureRef.current.scrollTop = getTextArea().scrollTop;
}
}, [measuring]);
var _React$useMemo = react__WEBPACK_IMPORTED_MODULE_11___default().useMemo(function () {
if (open) {
if (true) {
(0,rc_util_es_warning__WEBPACK_IMPORTED_MODULE_10__["default"])(false, '`open` of Mentions is only used for debug usage. Do not use in you production.');
}
for (var i = 0; i < mergedPrefix.length; i += 1) {
var curPrefix = mergedPrefix[i];
var index = mergedValue.lastIndexOf(curPrefix);
if (index >= 0) {
return [true, '', curPrefix, index];
}
}
}
return [measuring, measureText, measurePrefix, measureLocation];
}, [open, measuring, mergedPrefix, mergedValue, measureText, measurePrefix, measureLocation]),
_React$useMemo2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_React$useMemo, 4),
mergedMeasuring = _React$useMemo2[0],
mergedMeasureText = _React$useMemo2[1],
mergedMeasurePrefix = _React$useMemo2[2],
mergedMeasureLocation = _React$useMemo2[3];
// ============================== Option ==============================
var getOptions = react__WEBPACK_IMPORTED_MODULE_11___default().useCallback(function (targetMeasureText) {
var list;
if (options && options.length > 0) {
list = options.map(function (item) {
var _item$key;
return (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, item), {}, {
key: (_item$key = item === null || item === void 0 ? void 0 : item.key) !== null && _item$key !== void 0 ? _item$key : item.value
});
});
} else {
list = (0,rc_util_es_Children_toArray__WEBPACK_IMPORTED_MODULE_7__["default"])(children).map(function (_ref) {
var optionProps = _ref.props,
key = _ref.key;
return (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, optionProps), {}, {
label: optionProps.children,
key: key || optionProps.value
});
});
}
return list.filter(function (option) {
/** Return all result if `filterOption` is false. */
if (filterOption === false) {
return true;
}
return filterOption(targetMeasureText, option);
});
}, [children, options, filterOption]);
var mergedOptions = react__WEBPACK_IMPORTED_MODULE_11___default().useMemo(function () {
return getOptions(mergedMeasureText);
}, [getOptions, mergedMeasureText]);
// ============================= Measure ==============================
// Mark that we will reset input selection to target position when user select option
var onSelectionEffect = (0,_hooks_useEffectState__WEBPACK_IMPORTED_MODULE_12__["default"])();
var startMeasure = function startMeasure(nextMeasureText, nextMeasurePrefix, nextMeasureLocation) {
setMeasuring(true);
setMeasureText(nextMeasureText);
setMeasurePrefix(nextMeasurePrefix);
setMeasureLocation(nextMeasureLocation);
setActiveIndex(0);
};
var stopMeasure = function stopMeasure(callback) {
setMeasuring(false);
setMeasureLocation(0);
setMeasureText('');
onSelectionEffect(callback);
};
// ============================== Change ==============================
var triggerChange = function triggerChange(nextValue) {
setMergedValue(nextValue);
onChange === null || onChange === void 0 || onChange(nextValue);
};
var onInternalChange = function onInternalChange(_ref2) {
var nextValue = _ref2.target.value;
triggerChange(nextValue);
};
var selectOption = function selectOption(option) {
var _getTextArea;
var _option$value = option.value,
mentionValue = _option$value === void 0 ? '' : _option$value;
var _replaceWithMeasure = (0,_util__WEBPACK_IMPORTED_MODULE_16__.replaceWithMeasure)(mergedValue, {
measureLocation: mergedMeasureLocation,
targetText: mentionValue,
prefix: mergedMeasurePrefix,
selectionStart: (_getTextArea = getTextArea()) === null || _getTextArea === void 0 ? void 0 : _getTextArea.selectionStart,
split: split
}),
text = _replaceWithMeasure.text,
selectionLocation = _replaceWithMeasure.selectionLocation;
triggerChange(text);
stopMeasure(function () {
// We need restore the selection position
(0,_util__WEBPACK_IMPORTED_MODULE_16__.setInputSelection)(getTextArea(), selectionLocation);
});
onSelect === null || onSelect === void 0 || onSelect(option, mergedMeasurePrefix);
};
// ============================= KeyEvent =============================
// Check if hit the measure keyword
var onInternalKeyDown = function onInternalKeyDown(event) {
var which = event.which;
onKeyDown === null || onKeyDown === void 0 || onKeyDown(event);
// Skip if not measuring
if (!mergedMeasuring) {
return;
}
if (which === rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_9__["default"].UP || which === rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_9__["default"].DOWN) {
// Control arrow function
var optionLen = mergedOptions.length;
var offset = which === rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_9__["default"].UP ? -1 : 1;
var newActiveIndex = (activeIndex + offset + optionLen) % optionLen;
setActiveIndex(newActiveIndex);
event.preventDefault();
} else if (which === rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_9__["default"].ESC) {
stopMeasure();
} else if (which === rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_9__["default"].ENTER) {
// Measure hit
event.preventDefault();
// loading skip
if (silent) {
return;
}
if (!mergedOptions.length) {
stopMeasure();
return;
}
var _option = mergedOptions[activeIndex];
selectOption(_option);
}
};
/**
* When to start measure:
* 1. When user press `prefix`
* 2. When measureText !== prevMeasureText
* - If measure hit
* - If measuring
*
* When to stop measure:
* 1. Selection is out of range
* 2. Contains `space`
* 3. ESC or select one
*/
var onInternalKeyUp = function onInternalKeyUp(event) {
var key = event.key,
which = event.which;
var target = event.target;
var selectionStartText = (0,_util__WEBPACK_IMPORTED_MODULE_16__.getBeforeSelectionText)(target);
var _getLastMeasureIndex = (0,_util__WEBPACK_IMPORTED_MODULE_16__.getLastMeasureIndex)(selectionStartText, mergedPrefix),
measureIndex = _getLastMeasureIndex.location,
nextMeasurePrefix = _getLastMeasureIndex.prefix;
// If the client implements an onKeyUp handler, call it
onKeyUp === null || onKeyUp === void 0 || onKeyUp(event);
// Skip if match the white key list
if ([rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_9__["default"].ESC, rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_9__["default"].UP, rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_9__["default"].DOWN, rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_9__["default"].ENTER].indexOf(which) !== -1) {
return;
}
if (measureIndex !== -1) {
var nextMeasureText = selectionStartText.slice(measureIndex + nextMeasurePrefix.length);
var validateMeasure = validateSearch(nextMeasureText, split);
var matchOption = !!getOptions(nextMeasureText).length;
if (validateMeasure) {
// adding AltGraph also fort azert keyboard
if (key === nextMeasurePrefix || key === 'Shift' || which === rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_9__["default"].ALT || key === 'AltGraph' || mergedMeasuring || nextMeasureText !== mergedMeasureText && matchOption) {
startMeasure(nextMeasureText, nextMeasurePrefix, measureIndex);
}
} else if (mergedMeasuring) {
// Stop if measureText is invalidate
stopMeasure();
}
/**
* We will trigger `onSearch` to developer since they may use for async update.
* If met `space` means user finished searching.
*/
if (onSearch && validateMeasure) {
onSearch(nextMeasureText, nextMeasurePrefix);
}
} else if (mergedMeasuring) {
stopMeasure();
}
};
var onInternalPressEnter = function onInternalPressEnter(event) {
if (!mergedMeasuring && onPressEnter) {
onPressEnter(event);
}
};
// ============================ Focus Blur ============================
var focusRef = (0,react__WEBPACK_IMPORTED_MODULE_11__.useRef)();
var onInternalFocus = function onInternalFocus(event) {
window.clearTimeout(focusRef.current);
if (!isFocus && event && onFocus) {
onFocus(event);
}
setIsFocus(true);
};
var onInternalBlur = function onInternalBlur(event) {
focusRef.current = window.setTimeout(function () {
setIsFocus(false);
stopMeasure();
onBlur === null || onBlur === void 0 || onBlur(event);
}, 0);
};
var onDropdownFocus = function onDropdownFocus() {
onInternalFocus();
};
var onDropdownBlur = function onDropdownBlur() {
onInternalBlur();
};
// ============================== Scroll ===============================
var onInternalPopupScroll = function onInternalPopupScroll(event) {
onPopupScroll === null || onPopupScroll === void 0 || onPopupScroll(event);
};
// ============================== Render ==============================
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_11___default().createElement("div", {
className: classnames__WEBPACK_IMPORTED_MODULE_4___default()(prefixCls, className),
style: style,
ref: containerRef
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_11___default().createElement(rc_textarea__WEBPACK_IMPORTED_MODULE_6__["default"], (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({
ref: textareaRef,
value: mergedValue
}, restProps, {
rows: rows,
onChange: onInternalChange,
onKeyDown: onInternalKeyDown,
onKeyUp: onInternalKeyUp,
onPressEnter: onInternalPressEnter,
onFocus: onInternalFocus,
onBlur: onInternalBlur
})), mergedMeasuring && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_11___default().createElement("div", {
ref: measureRef,
className: "".concat(prefixCls, "-measure")
}, mergedValue.slice(0, mergedMeasureLocation), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_11___default().createElement(_MentionsContext__WEBPACK_IMPORTED_MODULE_14__["default"].Provider, {
value: {
notFoundContent: notFoundContent,
activeIndex: activeIndex,
setActiveIndex: setActiveIndex,
selectOption: selectOption,
onFocus: onDropdownFocus,
onBlur: onDropdownBlur,
onScroll: onInternalPopupScroll
}
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_11___default().createElement(_KeywordTrigger__WEBPACK_IMPORTED_MODULE_13__["default"], {
prefixCls: prefixCls,
transitionName: transitionName,
placement: placement,
direction: direction,
options: mergedOptions,
visible: true,
getPopupContainer: getPopupContainer,
dropdownClassName: dropdownClassName
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_11___default().createElement("span", null, mergedMeasurePrefix))), mergedValue.slice(mergedMeasureLocation + mergedMeasurePrefix.length)));
});
var Mentions = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_11__.forwardRef)(function (_ref3, ref) {
var suffix = _ref3.suffix,
_ref3$prefixCls = _ref3.prefixCls,
prefixCls = _ref3$prefixCls === void 0 ? 'rc-mentions' : _ref3$prefixCls,
defaultValue = _ref3.defaultValue,
customValue = _ref3.value,
allowClear = _ref3.allowClear,
onChange = _ref3.onChange,
classes = _ref3.classNames,
className = _ref3.className,
disabled = _ref3.disabled,
onClear = _ref3.onClear,
rest = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_3__["default"])(_ref3, _excluded2);
// =============================== Ref ================================
var holderRef = (0,react__WEBPACK_IMPORTED_MODULE_11__.useRef)(null);
var mentionRef = (0,react__WEBPACK_IMPORTED_MODULE_11__.useRef)(null);
(0,react__WEBPACK_IMPORTED_MODULE_11__.useImperativeHandle)(ref, function () {
var _holderRef$current, _mentionRef$current;
return (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, mentionRef.current), {}, {
nativeElement: ((_holderRef$current = holderRef.current) === null || _holderRef$current === void 0 ? void 0 : _holderRef$current.nativeElement) || ((_mentionRef$current = mentionRef.current) === null || _mentionRef$current === void 0 ? void 0 : _mentionRef$current.nativeElement)
});
});
// ============================== Value ===============================
var _useMergedState3 = (0,rc_util_es_hooks_useMergedState__WEBPACK_IMPORTED_MODULE_8__["default"])('', {
defaultValue: defaultValue,
value: customValue
}),
_useMergedState4 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_useMergedState3, 2),
mergedValue = _useMergedState4[0],
setMergedValue = _useMergedState4[1];
// ============================== Change ==============================
var triggerChange = function triggerChange(currentValue) {
setMergedValue(currentValue);
onChange === null || onChange === void 0 || onChange(currentValue);
};
// ============================== Reset ===============================
var handleReset = function handleReset() {
triggerChange('');
};
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_11___default().createElement(rc_input__WEBPACK_IMPORTED_MODULE_5__.BaseInput, {
suffix: suffix,
prefixCls: prefixCls,
value: mergedValue,
allowClear: allowClear,
handleReset: handleReset,
className: className,
classNames: classes,
disabled: disabled,
ref: holderRef,
onClear: onClear
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_11___default().createElement(InternalMentions, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({
className: classes === null || classes === void 0 ? void 0 : classes.mentions,
prefixCls: prefixCls,
ref: mentionRef,
onChange: triggerChange,
disabled: disabled
}, rest)));
});
Mentions.Option = _Option__WEBPACK_IMPORTED_MODULE_15__["default"];
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Mentions);
/***/ }),
/***/ "../../../node_modules/rc-mentions/es/MentionsContext.js":
/*!***************************************************************!*\
!*** ../../../node_modules/rc-mentions/es/MentionsContext.js ***!
\***************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
/* tslint:disable: no-object-literal-type-assertion */
// We will never use default, here only to fix TypeScript warning
var MentionsContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext(null);
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (MentionsContext);
/***/ }),
/***/ "../../../node_modules/rc-mentions/es/Option.js":
/*!******************************************************!*\
!*** ../../../node_modules/rc-mentions/es/Option.js ***!
\******************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
var Option = function Option() {
return null;
};
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Option);
/***/ }),
/***/ "../../../node_modules/rc-mentions/es/hooks/useEffectState.js":
/*!********************************************************************!*\
!*** ../../../node_modules/rc-mentions/es/hooks/useEffectState.js ***!
\********************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ useEffectState)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
/**
* Trigger a callback on state change
*/
function useEffectState() {
var _useState = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)({
id: 0,
callback: null
}),
_useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__["default"])(_useState, 2),
effectId = _useState2[0],
setEffectId = _useState2[1];
var update = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(function (callback) {
setEffectId(function (_ref) {
var id = _ref.id;
return {
id: id + 1,
callback: callback
};
});
}, []);
(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(function () {
var _effectId$callback;
(_effectId$callback = effectId.callback) === null || _effectId$callback === void 0 || _effectId$callback.call(effectId);
}, [effectId]);
return update;
}
/***/ }),
/***/ "../../../node_modules/rc-mentions/es/index.js":
/*!*****************************************************!*\
!*** ../../../node_modules/rc-mentions/es/index.js ***!
\*****************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _Mentions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Mentions */ "../../../node_modules/rc-mentions/es/Mentions.js");
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_Mentions__WEBPACK_IMPORTED_MODULE_0__["default"]);
/***/ }),
/***/ "../../../node_modules/rc-mentions/es/util.js":
/*!****************************************************!*\
!*** ../../../node_modules/rc-mentions/es/util.js ***!
\****************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ filterOption: () => (/* binding */ filterOption),
/* harmony export */ getBeforeSelectionText: () => (/* binding */ getBeforeSelectionText),
/* harmony export */ getLastMeasureIndex: () => (/* binding */ getLastMeasureIndex),
/* harmony export */ replaceWithMeasure: () => (/* binding */ replaceWithMeasure),
/* harmony export */ setInputSelection: () => (/* binding */ setInputSelection),
/* harmony export */ validateSearch: () => (/* binding */ validateSearch)
/* harmony export */ });
/**
* Cut input selection into 2 part and return text before selection start
*/
function getBeforeSelectionText(input) {
var selectionStart = input.selectionStart;
return input.value.slice(0, selectionStart);
}
/**
* Find the last match prefix index
*/
function getLastMeasureIndex(text, prefix) {
return prefix.reduce(function (lastMatch, prefixStr) {
var lastIndex = text.lastIndexOf(prefixStr);
if (lastIndex > lastMatch.location) {
return {
location: lastIndex,
prefix: prefixStr
};
}
return lastMatch;
}, {
location: -1,
prefix: ''
});
}
function lower(char) {
return (char || '').toLowerCase();
}
function reduceText(text, targetText, split) {
var firstChar = text[0];
if (!firstChar || firstChar === split) {
return text;
}
// Reuse rest text as it can
var restText = text;
var targetTextLen = targetText.length;
for (var i = 0; i < targetTextLen; i += 1) {
if (lower(restText[i]) !== lower(targetText[i])) {
restText = restText.slice(i);
break;
} else if (i === targetTextLen - 1) {
restText = restText.slice(targetTextLen);
}
}
return restText;
}
/**
* Paint targetText into current text:
* text: little@litest
* targetText: light
* => little @light test
*/
function replaceWithMeasure(text, measureConfig) {
var measureLocation = measureConfig.measureLocation,
prefix = measureConfig.prefix,
targetText = measureConfig.targetText,
selectionStart = measureConfig.selectionStart,
split = measureConfig.split;
// Before text will append one space if have other text
var beforeMeasureText = text.slice(0, measureLocation);
if (beforeMeasureText[beforeMeasureText.length - split.length] === split) {
beforeMeasureText = beforeMeasureText.slice(0, beforeMeasureText.length - split.length);
}
if (beforeMeasureText) {
beforeMeasureText = "".concat(beforeMeasureText).concat(split);
}
// Cut duplicate string with current targetText
var restText = reduceText(text.slice(selectionStart), targetText.slice(selectionStart - measureLocation - prefix.length), split);
if (restText.slice(0, split.length) === split) {
restText = restText.slice(split.length);
}
var connectedStartText = "".concat(beforeMeasureText).concat(prefix).concat(targetText).concat(split);
return {
text: "".concat(connectedStartText).concat(restText),
selectionLocation: connectedStartText.length
};
}
function setInputSelection(input, location) {
input.setSelectionRange(location, location);
/**
* Reset caret into view.
* Since this function always called by user control, it's safe to focus element.
*/
input.blur();
input.focus();
}
function validateSearch(text, split) {
return !split || text.indexOf(split) === -1;
}
function filterOption(input, _ref) {
var _ref$value = _ref.value,
value = _ref$value === void 0 ? '' : _ref$value;
var lowerCase = input.toLowerCase();
return value.toLowerCase().indexOf(lowerCase) !== -1;
}
/***/ }),
/***/ "../../../node_modules/rc-menu/es/Divider.js":
/*!***************************************************!*\
!*** ../../../node_modules/rc-menu/es/Divider.js ***!
\***************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ Divider)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! classnames */ "../../../node_modules/classnames/index.js");
/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _context_MenuContext__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./context/MenuContext */ "../../../node_modules/rc-menu/es/context/MenuContext.js");
/* harmony import */ var _context_PathContext__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./context/PathContext */ "../../../node_modules/rc-menu/es/context/PathContext.js");
function Divider(_ref) {
var className = _ref.className,
style = _ref.style;
var _React$useContext = react__WEBPACK_IMPORTED_MODULE_0__.useContext(_context_MenuContext__WEBPACK_IMPORTED_MODULE_2__.MenuContext),
prefixCls = _React$useContext.prefixCls;
var measure = (0,_context_PathContext__WEBPACK_IMPORTED_MODULE_3__.useMeasure)();
if (measure) {
return null;
}
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("li", {
role: "separator",
className: classnames__WEBPACK_IMPORTED_MODULE_1___default()("".concat(prefixCls, "-item-divider"), className),
style: style
});
}
/***/ }),
/***/ "../../../node_modules/rc-menu/es/Icon.js":
/*!************************************************!*\
!*** ../../../node_modules/rc-menu/es/Icon.js ***!
\************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ Icon)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
function Icon(_ref) {
var icon = _ref.icon,
props = _ref.props,
children = _ref.children;
var iconNode;
if (icon === null || icon === false) {
return null;
}
if (typeof icon === 'function') {
iconNode = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(icon, (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({}, props));
} else if (typeof icon !== "boolean") {
// Compatible for origin definition
iconNode = icon;
}
return iconNode || children || null;
}
/***/ }),
/***/ "../../../node_modules/rc-menu/es/Menu.js":
/*!************************************************!*\
!*** ../../../node_modules/rc-menu/es/Menu.js ***!
\************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "../../../node_modules/@babel/runtime/helpers/esm/extends.js");
/* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js");
/* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js");
/* harmony import */ var _babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ "../../../node_modules/@babel/runtime/helpers/esm/toConsumableArray.js");
/* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js");
/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ "../../../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js");
/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! classnames */ "../../../node_modules/classnames/index.js");
/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_6__);
/* harmony import */ var rc_overflow__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! rc-overflow */ "../../../node_modules/rc-overflow/es/index.js");
/* harmony import */ var rc_util_es_hooks_useMergedState__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! rc-util/es/hooks/useMergedState */ "../../../node_modules/rc-util/es/hooks/useMergedState.js");
/* harmony import */ var rc_util_es_isEqual__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! rc-util/es/isEqual */ "../../../node_modules/rc-util/es/isEqual.js");
/* harmony import */ var rc_util_es_warning__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! rc-util/es/warning */ "../../../node_modules/rc-util/es/warning.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_11__);
/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! react-dom */ "../../../node_modules/react-dom/index.js");
/* harmony import */ var _context_IdContext__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./context/IdContext */ "../../../node_modules/rc-menu/es/context/IdContext.js");
/* harmony import */ var _context_MenuContext__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./context/MenuContext */ "../../../node_modules/rc-menu/es/context/MenuContext.js");
/* harmony import */ var _context_PathContext__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./context/PathContext */ "../../../node_modules/rc-menu/es/context/PathContext.js");
/* harmony import */ var _context_PrivateContext__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./context/PrivateContext */ "../../../node_modules/rc-menu/es/context/PrivateContext.js");
/* harmony import */ var _hooks_useAccessibility__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./hooks/useAccessibility */ "../../../node_modules/rc-menu/es/hooks/useAccessibility.js");
/* harmony import */ var _hooks_useKeyRecords__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./hooks/useKeyRecords */ "../../../node_modules/rc-menu/es/hooks/useKeyRecords.js");
/* harmony import */ var _hooks_useMemoCallback__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./hooks/useMemoCallback */ "../../../node_modules/rc-menu/es/hooks/useMemoCallback.js");
/* harmony import */ var _hooks_useUUID__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./hooks/useUUID */ "../../../node_modules/rc-menu/es/hooks/useUUID.js");
/* harmony import */ var _MenuItem__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./MenuItem */ "../../../node_modules/rc-menu/es/MenuItem.js");
/* harmony import */ var _SubMenu__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./SubMenu */ "../../../node_modules/rc-menu/es/SubMenu/index.js");
/* harmony import */ var _utils_nodeUtil__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./utils/nodeUtil */ "../../../node_modules/rc-menu/es/utils/nodeUtil.js");
/* harmony import */ var _utils_warnUtil__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./utils/warnUtil */ "../../../node_modules/rc-menu/es/utils/warnUtil.js");
var _excluded = ["prefixCls", "rootClassName", "style", "className", "tabIndex", "items", "children", "direction", "id", "mode", "inlineCollapsed", "disabled", "disabledOverflow", "subMenuOpenDelay", "subMenuCloseDelay", "forceSubMenuRender", "defaultOpenKeys", "openKeys", "activeKey", "defaultActiveFirst", "selectable", "multiple", "defaultSelectedKeys", "selectedKeys", "onSelect", "onDeselect", "inlineIndent", "motion", "defaultMotions", "triggerSubMenuAction", "builtinPlacements", "itemIcon", "expandIcon", "overflowedIndicator", "overflowedIndicatorPopupClassName", "getPopupContainer", "onClick", "onOpenChange", "onKeyDown", "openAnimation", "openTransitionName", "_internalRenderMenuItem", "_internalRenderSubMenuItem", "_internalComponents"];
/**
* Menu modify after refactor:
* ## Add
* - disabled
*
* ## Remove
* - openTransitionName
* - openAnimation
* - onDestroy
* - siderCollapsed: Seems antd do not use this prop (Need test in antd)
* - collapsedWidth: Seems this logic should be handle by antd Layout.Sider
*/
// optimize for render
var EMPTY_LIST = [];
var Menu = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_11__.forwardRef(function (props, ref) {
var _childList$;
var _ref = props,
_ref$prefixCls = _ref.prefixCls,
prefixCls = _ref$prefixCls === void 0 ? 'rc-menu' : _ref$prefixCls,
rootClassName = _ref.rootClassName,
style = _ref.style,
className = _ref.className,
_ref$tabIndex = _ref.tabIndex,
tabIndex = _ref$tabIndex === void 0 ? 0 : _ref$tabIndex,
items = _ref.items,
children = _ref.children,
direction = _ref.direction,
id = _ref.id,
_ref$mode = _ref.mode,
mode = _ref$mode === void 0 ? 'vertical' : _ref$mode,
inlineCollapsed = _ref.inlineCollapsed,
disabled = _ref.disabled,
disabledOverflow = _ref.disabledOverflow,
_ref$subMenuOpenDelay = _ref.subMenuOpenDelay,
subMenuOpenDelay = _ref$subMenuOpenDelay === void 0 ? 0.1 : _ref$subMenuOpenDelay,
_ref$subMenuCloseDela = _ref.subMenuCloseDelay,
subMenuCloseDelay = _ref$subMenuCloseDela === void 0 ? 0.1 : _ref$subMenuCloseDela,
forceSubMenuRender = _ref.forceSubMenuRender,
defaultOpenKeys = _ref.defaultOpenKeys,
openKeys = _ref.openKeys,
activeKey = _ref.activeKey,
defaultActiveFirst = _ref.defaultActiveFirst,
_ref$selectable = _ref.selectable,
selectable = _ref$selectable === void 0 ? true : _ref$selectable,
_ref$multiple = _ref.multiple,
multiple = _ref$multiple === void 0 ? false : _ref$multiple,
defaultSelectedKeys = _ref.defaultSelectedKeys,
selectedKeys = _ref.selectedKeys,
onSelect = _ref.onSelect,
onDeselect = _ref.onDeselect,
_ref$inlineIndent = _ref.inlineIndent,
inlineIndent = _ref$inlineIndent === void 0 ? 24 : _ref$inlineIndent,
motion = _ref.motion,
defaultMotions = _ref.defaultMotions,
_ref$triggerSubMenuAc = _ref.triggerSubMenuAction,
triggerSubMenuAction = _ref$triggerSubMenuAc === void 0 ? 'hover' : _ref$triggerSubMenuAc,
builtinPlacements = _ref.builtinPlacements,
itemIcon = _ref.itemIcon,
expandIcon = _ref.expandIcon,
_ref$overflowedIndica = _ref.overflowedIndicator,
overflowedIndicator = _ref$overflowedIndica === void 0 ? '...' : _ref$overflowedIndica,
overflowedIndicatorPopupClassName = _ref.overflowedIndicatorPopupClassName,
getPopupContainer = _ref.getPopupContainer,
onClick = _ref.onClick,
onOpenChange = _ref.onOpenChange,
onKeyDown = _ref.onKeyDown,
openAnimation = _ref.openAnimation,
openTransitionName = _ref.openTransitionName,
_internalRenderMenuItem = _ref._internalRenderMenuItem,
_internalRenderSubMenuItem = _ref._internalRenderSubMenuItem,
_internalComponents = _ref._internalComponents,
restProps = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_5__["default"])(_ref, _excluded);
var _React$useMemo = react__WEBPACK_IMPORTED_MODULE_11__.useMemo(function () {
return [(0,_utils_nodeUtil__WEBPACK_IMPORTED_MODULE_23__.parseItems)(children, items, EMPTY_LIST, _internalComponents, prefixCls), (0,_utils_nodeUtil__WEBPACK_IMPORTED_MODULE_23__.parseItems)(children, items, EMPTY_LIST, {}, prefixCls)];
}, [children, items, _internalComponents]),
_React$useMemo2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_4__["default"])(_React$useMemo, 2),
childList = _React$useMemo2[0],
measureChildList = _React$useMemo2[1];
var _React$useState = react__WEBPACK_IMPORTED_MODULE_11__.useState(false),
_React$useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_4__["default"])(_React$useState, 2),
mounted = _React$useState2[0],
setMounted = _React$useState2[1];
var containerRef = react__WEBPACK_IMPORTED_MODULE_11__.useRef();
var uuid = (0,_hooks_useUUID__WEBPACK_IMPORTED_MODULE_20__["default"])(id);
var isRtl = direction === 'rtl';
// ========================= Warn =========================
if (true) {
(0,rc_util_es_warning__WEBPACK_IMPORTED_MODULE_10__["default"])(!openAnimation && !openTransitionName, '`openAnimation` and `openTransitionName` is removed. Please use `motion` or `defaultMotion` instead.');
}
// ========================= Open =========================
var _useMergedState = (0,rc_util_es_hooks_useMergedState__WEBPACK_IMPORTED_MODULE_8__["default"])(defaultOpenKeys, {
value: openKeys,
postState: function postState(keys) {
return keys || EMPTY_LIST;
}
}),
_useMergedState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_4__["default"])(_useMergedState, 2),
mergedOpenKeys = _useMergedState2[0],
setMergedOpenKeys = _useMergedState2[1];
// React 18 will merge mouse event which means we open key will not sync
// ref: https://github.com/ant-design/ant-design/issues/38818
var triggerOpenKeys = function triggerOpenKeys(keys) {
var forceFlush = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
function doUpdate() {
setMergedOpenKeys(keys);
onOpenChange === null || onOpenChange === void 0 || onOpenChange(keys);
}
if (forceFlush) {
(0,react_dom__WEBPACK_IMPORTED_MODULE_12__.flushSync)(doUpdate);
} else {
doUpdate();
}
};
// >>>>> Cache & Reset open keys when inlineCollapsed changed
var _React$useState3 = react__WEBPACK_IMPORTED_MODULE_11__.useState(mergedOpenKeys),
_React$useState4 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_4__["default"])(_React$useState3, 2),
inlineCacheOpenKeys = _React$useState4[0],
setInlineCacheOpenKeys = _React$useState4[1];
var mountRef = react__WEBPACK_IMPORTED_MODULE_11__.useRef(false);
// ========================= Mode =========================
var _React$useMemo3 = react__WEBPACK_IMPORTED_MODULE_11__.useMemo(function () {
if ((mode === 'inline' || mode === 'vertical') && inlineCollapsed) {
return ['vertical', inlineCollapsed];
}
return [mode, false];
}, [mode, inlineCollapsed]),
_React$useMemo4 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_4__["default"])(_React$useMemo3, 2),
mergedMode = _React$useMemo4[0],
mergedInlineCollapsed = _React$useMemo4[1];
var isInlineMode = mergedMode === 'inline';
var _React$useState5 = react__WEBPACK_IMPORTED_MODULE_11__.useState(mergedMode),
_React$useState6 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_4__["default"])(_React$useState5, 2),
internalMode = _React$useState6[0],
setInternalMode = _React$useState6[1];
var _React$useState7 = react__WEBPACK_IMPORTED_MODULE_11__.useState(mergedInlineCollapsed),
_React$useState8 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_4__["default"])(_React$useState7, 2),
internalInlineCollapsed = _React$useState8[0],
setInternalInlineCollapsed = _React$useState8[1];
react__WEBPACK_IMPORTED_MODULE_11__.useEffect(function () {
setInternalMode(mergedMode);
setInternalInlineCollapsed(mergedInlineCollapsed);
if (!mountRef.current) {
return;
}
// Synchronously update MergedOpenKeys
if (isInlineMode) {
setMergedOpenKeys(inlineCacheOpenKeys);
} else {
// Trigger open event in case its in control
triggerOpenKeys(EMPTY_LIST);
}
}, [mergedMode, mergedInlineCollapsed]);
// ====================== Responsive ======================
var _React$useState9 = react__WEBPACK_IMPORTED_MODULE_11__.useState(0),
_React$useState10 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_4__["default"])(_React$useState9, 2),
lastVisibleIndex = _React$useState10[0],
setLastVisibleIndex = _React$useState10[1];
var allVisible = lastVisibleIndex >= childList.length - 1 || internalMode !== 'horizontal' || disabledOverflow;
// Cache
react__WEBPACK_IMPORTED_MODULE_11__.useEffect(function () {
if (isInlineMode) {
setInlineCacheOpenKeys(mergedOpenKeys);
}
}, [mergedOpenKeys]);
react__WEBPACK_IMPORTED_MODULE_11__.useEffect(function () {
mountRef.current = true;
return function () {
mountRef.current = false;
};
}, []);
// ========================= Path =========================
var _useKeyRecords = (0,_hooks_useKeyRecords__WEBPACK_IMPORTED_MODULE_18__["default"])(),
registerPath = _useKeyRecords.registerPath,
unregisterPath = _useKeyRecords.unregisterPath,
refreshOverflowKeys = _useKeyRecords.refreshOverflowKeys,
isSubPathKey = _useKeyRecords.isSubPathKey,
getKeyPath = _useKeyRecords.getKeyPath,
getKeys = _useKeyRecords.getKeys,
getSubPathKeys = _useKeyRecords.getSubPathKeys;
var registerPathContext = react__WEBPACK_IMPORTED_MODULE_11__.useMemo(function () {
return {
registerPath: registerPath,
unregisterPath: unregisterPath
};
}, [registerPath, unregisterPath]);
var pathUserContext = react__WEBPACK_IMPORTED_MODULE_11__.useMemo(function () {
return {
isSubPathKey: isSubPathKey
};
}, [isSubPathKey]);
react__WEBPACK_IMPORTED_MODULE_11__.useEffect(function () {
refreshOverflowKeys(allVisible ? EMPTY_LIST : childList.slice(lastVisibleIndex + 1).map(function (child) {
return child.key;
}));
}, [lastVisibleIndex, allVisible]);
// ======================== Active ========================
var _useMergedState3 = (0,rc_util_es_hooks_useMergedState__WEBPACK_IMPORTED_MODULE_8__["default"])(activeKey || defaultActiveFirst && ((_childList$ = childList[0]) === null || _childList$ === void 0 ? void 0 : _childList$.key), {
value: activeKey
}),
_useMergedState4 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_4__["default"])(_useMergedState3, 2),
mergedActiveKey = _useMergedState4[0],
setMergedActiveKey = _useMergedState4[1];
var onActive = (0,_hooks_useMemoCallback__WEBPACK_IMPORTED_MODULE_19__["default"])(function (key) {
setMergedActiveKey(key);
});
var onInactive = (0,_hooks_useMemoCallback__WEBPACK_IMPORTED_MODULE_19__["default"])(function () {
setMergedActiveKey(undefined);
});
(0,react__WEBPACK_IMPORTED_MODULE_11__.useImperativeHandle)(ref, function () {
return {
list: containerRef.current,
focus: function focus(options) {
var _childList$find;
var keys = getKeys();
var _refreshElements = (0,_hooks_useAccessibility__WEBPACK_IMPORTED_MODULE_17__.refreshElements)(keys, uuid),
elements = _refreshElements.elements,
key2element = _refreshElements.key2element,
element2key = _refreshElements.element2key;
var focusableElements = (0,_hooks_useAccessibility__WEBPACK_IMPORTED_MODULE_17__.getFocusableElements)(containerRef.current, elements);
var shouldFocusKey = mergedActiveKey !== null && mergedActiveKey !== void 0 ? mergedActiveKey : focusableElements[0] ? element2key.get(focusableElements[0]) : (_childList$find = childList.find(function (node) {
return !node.props.disabled;
})) === null || _childList$find === void 0 ? void 0 : _childList$find.key;
var elementToFocus = key2element.get(shouldFocusKey);
if (shouldFocusKey && elementToFocus) {
var _elementToFocus$focus;
elementToFocus === null || elementToFocus === void 0 || (_elementToFocus$focus = elementToFocus.focus) === null || _elementToFocus$focus === void 0 || _elementToFocus$focus.call(elementToFocus, options);
}
}
};
});
// ======================== Select ========================
// >>>>> Select keys
var _useMergedState5 = (0,rc_util_es_hooks_useMergedState__WEBPACK_IMPORTED_MODULE_8__["default"])(defaultSelectedKeys || [], {
value: selectedKeys,
// Legacy convert key to array
postState: function postState(keys) {
if (Array.isArray(keys)) {
return keys;
}
if (keys === null || keys === undefined) {
return EMPTY_LIST;
}
return [keys];
}
}),
_useMergedState6 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_4__["default"])(_useMergedState5, 2),
mergedSelectKeys = _useMergedState6[0],
setMergedSelectKeys = _useMergedState6[1];
// >>>>> Trigger select
var triggerSelection = function triggerSelection(info) {
if (selectable) {
// Insert or Remove
var targetKey = info.key;
var exist = mergedSelectKeys.includes(targetKey);
var newSelectKeys;
if (multiple) {
if (exist) {
newSelectKeys = mergedSelectKeys.filter(function (key) {
return key !== targetKey;
});
} else {
newSelectKeys = [].concat((0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_3__["default"])(mergedSelectKeys), [targetKey]);
}
} else {
newSelectKeys = [targetKey];
}
setMergedSelectKeys(newSelectKeys);
// Trigger event
var selectInfo = (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__["default"])({}, info), {}, {
selectedKeys: newSelectKeys
});
if (exist) {
onDeselect === null || onDeselect === void 0 || onDeselect(selectInfo);
} else {
onSelect === null || onSelect === void 0 || onSelect(selectInfo);
}
}
// Whatever selectable, always close it
if (!multiple && mergedOpenKeys.length && internalMode !== 'inline') {
triggerOpenKeys(EMPTY_LIST);
}
};
// ========================= Open =========================
/**
* Click for item. SubMenu do not have selection status
*/
var onInternalClick = (0,_hooks_useMemoCallback__WEBPACK_IMPORTED_MODULE_19__["default"])(function (info) {
onClick === null || onClick === void 0 || onClick((0,_utils_warnUtil__WEBPACK_IMPORTED_MODULE_24__.warnItemProp)(info));
triggerSelection(info);
});
var onInternalOpenChange = (0,_hooks_useMemoCallback__WEBPACK_IMPORTED_MODULE_19__["default"])(function (key, open) {
var newOpenKeys = mergedOpenKeys.filter(function (k) {
return k !== key;
});
if (open) {
newOpenKeys.push(key);
} else if (internalMode !== 'inline') {
// We need find all related popup to close
var subPathKeys = getSubPathKeys(key);
newOpenKeys = newOpenKeys.filter(function (k) {
return !subPathKeys.has(k);
});
}
if (!(0,rc_util_es_isEqual__WEBPACK_IMPORTED_MODULE_9__["default"])(mergedOpenKeys, newOpenKeys, true)) {
triggerOpenKeys(newOpenKeys, true);
}
});
// ==================== Accessibility =====================
var triggerAccessibilityOpen = function triggerAccessibilityOpen(key, open) {
var nextOpen = open !== null && open !== void 0 ? open : !mergedOpenKeys.includes(key);
onInternalOpenChange(key, nextOpen);
};
var onInternalKeyDown = (0,_hooks_useAccessibility__WEBPACK_IMPORTED_MODULE_17__.useAccessibility)(internalMode, mergedActiveKey, isRtl, uuid, containerRef, getKeys, getKeyPath, setMergedActiveKey, triggerAccessibilityOpen, onKeyDown);
// ======================== Effect ========================
react__WEBPACK_IMPORTED_MODULE_11__.useEffect(function () {
setMounted(true);
}, []);
// ======================= Context ========================
var privateContext = react__WEBPACK_IMPORTED_MODULE_11__.useMemo(function () {
return {
_internalRenderMenuItem: _internalRenderMenuItem,
_internalRenderSubMenuItem: _internalRenderSubMenuItem
};
}, [_internalRenderMenuItem, _internalRenderSubMenuItem]);
// ======================== Render ========================
// >>>>> Children
var wrappedChildList = internalMode !== 'horizontal' || disabledOverflow ? childList :
// Need wrap for overflow dropdown that do not response for open
childList.map(function (child, index) {
return (
/*#__PURE__*/
// Always wrap provider to avoid sub node re-mount
react__WEBPACK_IMPORTED_MODULE_11__.createElement(_context_MenuContext__WEBPACK_IMPORTED_MODULE_14__["default"], {
key: child.key,
overflowDisabled: index > lastVisibleIndex
}, child)
);
});
// >>>>> Container
var container = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_11__.createElement(rc_overflow__WEBPACK_IMPORTED_MODULE_7__["default"], (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({
id: id,
ref: containerRef,
prefixCls: "".concat(prefixCls, "-overflow"),
component: "ul",
itemComponent: _MenuItem__WEBPACK_IMPORTED_MODULE_21__["default"],
className: classnames__WEBPACK_IMPORTED_MODULE_6___default()(prefixCls, "".concat(prefixCls, "-root"), "".concat(prefixCls, "-").concat(internalMode), className, (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])({}, "".concat(prefixCls, "-inline-collapsed"), internalInlineCollapsed), "".concat(prefixCls, "-rtl"), isRtl), rootClassName),
dir: direction,
style: style,
role: "menu",
tabIndex: tabIndex,
data: wrappedChildList,
renderRawItem: function renderRawItem(node) {
return node;
},
renderRawRest: function renderRawRest(omitItems) {
// We use origin list since wrapped list use context to prevent open
var len = omitItems.length;
var originOmitItems = len ? childList.slice(-len) : null;
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_11__.createElement(_SubMenu__WEBPACK_IMPORTED_MODULE_22__["default"], {
eventKey: _hooks_useKeyRecords__WEBPACK_IMPORTED_MODULE_18__.OVERFLOW_KEY,
title: overflowedIndicator,
disabled: allVisible,
internalPopupClose: len === 0,
popupClassName: overflowedIndicatorPopupClassName
}, originOmitItems);
},
maxCount: internalMode !== 'horizontal' || disabledOverflow ? rc_overflow__WEBPACK_IMPORTED_MODULE_7__["default"].INVALIDATE : rc_overflow__WEBPACK_IMPORTED_MODULE_7__["default"].RESPONSIVE,
ssr: "full",
"data-menu-list": true,
onVisibleChange: function onVisibleChange(newLastIndex) {
setLastVisibleIndex(newLastIndex);
},
onKeyDown: onInternalKeyDown
}, restProps));
// >>>>> Render
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_11__.createElement(_context_PrivateContext__WEBPACK_IMPORTED_MODULE_16__["default"].Provider, {
value: privateContext
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_11__.createElement(_context_IdContext__WEBPACK_IMPORTED_MODULE_13__.IdContext.Provider, {
value: uuid
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_11__.createElement(_context_MenuContext__WEBPACK_IMPORTED_MODULE_14__["default"], {
prefixCls: prefixCls,
rootClassName: rootClassName,
mode: internalMode,
openKeys: mergedOpenKeys,
rtl: isRtl
// Disabled
,
disabled: disabled
// Motion
,
motion: mounted ? motion : null,
defaultMotions: mounted ? defaultMotions : null
// Active
,
activeKey: mergedActiveKey,
onActive: onActive,
onInactive: onInactive
// Selection
,
selectedKeys: mergedSelectKeys
// Level
,
inlineIndent: inlineIndent
// Popup
,
subMenuOpenDelay: subMenuOpenDelay,
subMenuCloseDelay: subMenuCloseDelay,
forceSubMenuRender: forceSubMenuRender,
builtinPlacements: builtinPlacements,
triggerSubMenuAction: triggerSubMenuAction,
getPopupContainer: getPopupContainer
// Icon
,
itemIcon: itemIcon,
expandIcon: expandIcon
// Events
,
onItemClick: onInternalClick,
onOpenChange: onInternalOpenChange
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_11__.createElement(_context_PathContext__WEBPACK_IMPORTED_MODULE_15__.PathUserContext.Provider, {
value: pathUserContext
}, container), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_11__.createElement("div", {
style: {
display: 'none'
},
"aria-hidden": true
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_11__.createElement(_context_PathContext__WEBPACK_IMPORTED_MODULE_15__.PathRegisterContext.Provider, {
value: registerPathContext
}, measureChildList)))));
});
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Menu);
/***/ }),
/***/ "../../../node_modules/rc-menu/es/MenuItem.js":
/*!****************************************************!*\
!*** ../../../node_modules/rc-menu/es/MenuItem.js ***!
\****************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js");
/* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js");
/* harmony import */ var _babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ "../../../node_modules/@babel/runtime/helpers/esm/toConsumableArray.js");
/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "../../../node_modules/@babel/runtime/helpers/esm/extends.js");
/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ "../../../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js");
/* harmony import */ var _babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/esm/classCallCheck */ "../../../node_modules/@babel/runtime/helpers/esm/classCallCheck.js");
/* harmony import */ var _babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/esm/createClass */ "../../../node_modules/@babel/runtime/helpers/esm/createClass.js");
/* harmony import */ var _babel_runtime_helpers_esm_inherits__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inherits */ "../../../node_modules/@babel/runtime/helpers/esm/inherits.js");
/* harmony import */ var _babel_runtime_helpers_esm_createSuper__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @babel/runtime/helpers/esm/createSuper */ "../../../node_modules/@babel/runtime/helpers/esm/createSuper.js");
/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! classnames */ "../../../node_modules/classnames/index.js");
/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_9__);
/* harmony import */ var rc_overflow__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! rc-overflow */ "../../../node_modules/rc-overflow/es/index.js");
/* harmony import */ var rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! rc-util/es/KeyCode */ "../../../node_modules/rc-util/es/KeyCode.js");
/* harmony import */ var rc_util_es_omit__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! rc-util/es/omit */ "../../../node_modules/rc-util/es/omit.js");
/* harmony import */ var rc_util_es_ref__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! rc-util/es/ref */ "../../../node_modules/rc-util/es/ref.js");
/* harmony import */ var rc_util_es_warning__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! rc-util/es/warning */ "../../../node_modules/rc-util/es/warning.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_15__);
/* harmony import */ var _context_IdContext__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./context/IdContext */ "../../../node_modules/rc-menu/es/context/IdContext.js");
/* harmony import */ var _context_MenuContext__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./context/MenuContext */ "../../../node_modules/rc-menu/es/context/MenuContext.js");
/* harmony import */ var _context_PathContext__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./context/PathContext */ "../../../node_modules/rc-menu/es/context/PathContext.js");
/* harmony import */ var _context_PrivateContext__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./context/PrivateContext */ "../../../node_modules/rc-menu/es/context/PrivateContext.js");
/* harmony import */ var _hooks_useActive__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./hooks/useActive */ "../../../node_modules/rc-menu/es/hooks/useActive.js");
/* harmony import */ var _hooks_useDirectionStyle__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./hooks/useDirectionStyle */ "../../../node_modules/rc-menu/es/hooks/useDirectionStyle.js");
/* harmony import */ var _Icon__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./Icon */ "../../../node_modules/rc-menu/es/Icon.js");
/* harmony import */ var _utils_warnUtil__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./utils/warnUtil */ "../../../node_modules/rc-menu/es/utils/warnUtil.js");
var _excluded = ["title", "attribute", "elementRef"],
_excluded2 = ["style", "className", "eventKey", "warnKey", "disabled", "itemIcon", "children", "role", "onMouseEnter", "onMouseLeave", "onClick", "onKeyDown", "onFocus"],
_excluded3 = ["active"];
// Since Menu event provide the `info.item` which point to the MenuItem node instance.
// We have to use class component here.
// This should be removed from doc & api in future.
var LegacyMenuItem = /*#__PURE__*/function (_React$Component) {
(0,_babel_runtime_helpers_esm_inherits__WEBPACK_IMPORTED_MODULE_7__["default"])(LegacyMenuItem, _React$Component);
var _super = (0,_babel_runtime_helpers_esm_createSuper__WEBPACK_IMPORTED_MODULE_8__["default"])(LegacyMenuItem);
function LegacyMenuItem() {
(0,_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_5__["default"])(this, LegacyMenuItem);
return _super.apply(this, arguments);
}
(0,_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_6__["default"])(LegacyMenuItem, [{
key: "render",
value: function render() {
var _this$props = this.props,
title = _this$props.title,
attribute = _this$props.attribute,
elementRef = _this$props.elementRef,
restProps = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_4__["default"])(_this$props, _excluded);
// Here the props are eventually passed to the DOM element.
// React does not recognize non-standard attributes.
// Therefore, remove the props that is not used here.
// ref: https://github.com/ant-design/ant-design/issues/41395
var passedProps = (0,rc_util_es_omit__WEBPACK_IMPORTED_MODULE_12__["default"])(restProps, ['eventKey', 'popupClassName', 'popupOffset', 'onTitleClick']);
(0,rc_util_es_warning__WEBPACK_IMPORTED_MODULE_14__["default"])(!attribute, '`attribute` of Menu.Item is deprecated. Please pass attribute directly.');
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_15__.createElement(rc_overflow__WEBPACK_IMPORTED_MODULE_10__["default"].Item, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_3__["default"])({}, attribute, {
title: typeof title === 'string' ? title : undefined
}, passedProps, {
ref: elementRef
}));
}
}]);
return LegacyMenuItem;
}(react__WEBPACK_IMPORTED_MODULE_15__.Component);
/**
* Real Menu Item component
*/
var InternalMenuItem = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_15__.forwardRef(function (props, ref) {
var style = props.style,
className = props.className,
eventKey = props.eventKey,
warnKey = props.warnKey,
disabled = props.disabled,
itemIcon = props.itemIcon,
children = props.children,
role = props.role,
onMouseEnter = props.onMouseEnter,
onMouseLeave = props.onMouseLeave,
onClick = props.onClick,
onKeyDown = props.onKeyDown,
onFocus = props.onFocus,
restProps = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_4__["default"])(props, _excluded2);
var domDataId = (0,_context_IdContext__WEBPACK_IMPORTED_MODULE_16__.useMenuId)(eventKey);
var _React$useContext = react__WEBPACK_IMPORTED_MODULE_15__.useContext(_context_MenuContext__WEBPACK_IMPORTED_MODULE_17__.MenuContext),
prefixCls = _React$useContext.prefixCls,
onItemClick = _React$useContext.onItemClick,
contextDisabled = _React$useContext.disabled,
overflowDisabled = _React$useContext.overflowDisabled,
contextItemIcon = _React$useContext.itemIcon,
selectedKeys = _React$useContext.selectedKeys,
onActive = _React$useContext.onActive;
var _React$useContext2 = react__WEBPACK_IMPORTED_MODULE_15__.useContext(_context_PrivateContext__WEBPACK_IMPORTED_MODULE_19__["default"]),
_internalRenderMenuItem = _React$useContext2._internalRenderMenuItem;
var itemCls = "".concat(prefixCls, "-item");
var legacyMenuItemRef = react__WEBPACK_IMPORTED_MODULE_15__.useRef();
var elementRef = react__WEBPACK_IMPORTED_MODULE_15__.useRef();
var mergedDisabled = contextDisabled || disabled;
var mergedEleRef = (0,rc_util_es_ref__WEBPACK_IMPORTED_MODULE_13__.useComposeRef)(ref, elementRef);
var connectedKeys = (0,_context_PathContext__WEBPACK_IMPORTED_MODULE_18__.useFullPath)(eventKey);
// ================================ Warn ================================
if ( true && warnKey) {
(0,rc_util_es_warning__WEBPACK_IMPORTED_MODULE_14__["default"])(false, 'MenuItem should not leave undefined `key`.');
}
// ============================= Info =============================
var getEventInfo = function getEventInfo(e) {
return {
key: eventKey,
// Note: For legacy code is reversed which not like other antd component
keyPath: (0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_2__["default"])(connectedKeys).reverse(),
item: legacyMenuItemRef.current,
domEvent: e
};
};
// ============================= Icon =============================
var mergedItemIcon = itemIcon || contextItemIcon;
// ============================ Active ============================
var _useActive = (0,_hooks_useActive__WEBPACK_IMPORTED_MODULE_20__["default"])(eventKey, mergedDisabled, onMouseEnter, onMouseLeave),
active = _useActive.active,
activeProps = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_4__["default"])(_useActive, _excluded3);
// ============================ Select ============================
var selected = selectedKeys.includes(eventKey);
// ======================== DirectionStyle ========================
var directionStyle = (0,_hooks_useDirectionStyle__WEBPACK_IMPORTED_MODULE_21__["default"])(connectedKeys.length);
// ============================ Events ============================
var onInternalClick = function onInternalClick(e) {
if (mergedDisabled) {
return;
}
var info = getEventInfo(e);
onClick === null || onClick === void 0 || onClick((0,_utils_warnUtil__WEBPACK_IMPORTED_MODULE_23__.warnItemProp)(info));
onItemClick(info);
};
var onInternalKeyDown = function onInternalKeyDown(e) {
onKeyDown === null || onKeyDown === void 0 || onKeyDown(e);
if (e.which === rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_11__["default"].ENTER) {
var info = getEventInfo(e);
// Legacy. Key will also trigger click event
onClick === null || onClick === void 0 || onClick((0,_utils_warnUtil__WEBPACK_IMPORTED_MODULE_23__.warnItemProp)(info));
onItemClick(info);
}
};
/**
* Used for accessibility. Helper will focus element without key board.
* We should manually trigger an active
*/
var onInternalFocus = function onInternalFocus(e) {
onActive(eventKey);
onFocus === null || onFocus === void 0 || onFocus(e);
};
// ============================ Render ============================
var optionRoleProps = {};
if (props.role === 'option') {
optionRoleProps['aria-selected'] = selected;
}
var renderNode = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_15__.createElement(LegacyMenuItem, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_3__["default"])({
ref: legacyMenuItemRef,
elementRef: mergedEleRef,
role: role === null ? 'none' : role || 'menuitem',
tabIndex: disabled ? null : -1,
"data-menu-id": overflowDisabled && domDataId ? null : domDataId
}, (0,rc_util_es_omit__WEBPACK_IMPORTED_MODULE_12__["default"])(restProps, ['extra']), activeProps, optionRoleProps, {
component: "li",
"aria-disabled": disabled,
style: (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, directionStyle), style),
className: classnames__WEBPACK_IMPORTED_MODULE_9___default()(itemCls, (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])({}, "".concat(itemCls, "-active"), active), "".concat(itemCls, "-selected"), selected), "".concat(itemCls, "-disabled"), mergedDisabled), className),
onClick: onInternalClick,
onKeyDown: onInternalKeyDown,
onFocus: onInternalFocus
}), children, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_15__.createElement(_Icon__WEBPACK_IMPORTED_MODULE_22__["default"], {
props: (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, props), {}, {
isSelected: selected
}),
icon: mergedItemIcon
}));
if (_internalRenderMenuItem) {
renderNode = _internalRenderMenuItem(renderNode, props, {
selected: selected
});
}
return renderNode;
});
function MenuItem(props, ref) {
var eventKey = props.eventKey;
// ==================== Record KeyPath ====================
var measure = (0,_context_PathContext__WEBPACK_IMPORTED_MODULE_18__.useMeasure)();
var connectedKeyPath = (0,_context_PathContext__WEBPACK_IMPORTED_MODULE_18__.useFullPath)(eventKey);
// eslint-disable-next-line consistent-return
react__WEBPACK_IMPORTED_MODULE_15__.useEffect(function () {
if (measure) {
measure.registerPath(eventKey, connectedKeyPath);
return function () {
measure.unregisterPath(eventKey, connectedKeyPath);
};
}
}, [connectedKeyPath]);
if (measure) {
return null;
}
// ======================== Render ========================
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_15__.createElement(InternalMenuItem, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_3__["default"])({}, props, {
ref: ref
}));
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_15__.forwardRef(MenuItem));
/***/ }),
/***/ "../../../node_modules/rc-menu/es/MenuItemGroup.js":
/*!*********************************************************!*\
!*** ../../../node_modules/rc-menu/es/MenuItemGroup.js ***!
\*********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "../../../node_modules/@babel/runtime/helpers/esm/extends.js");
/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ "../../../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js");
/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! classnames */ "../../../node_modules/classnames/index.js");
/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var rc_util_es_omit__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! rc-util/es/omit */ "../../../node_modules/rc-util/es/omit.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var _context_MenuContext__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./context/MenuContext */ "../../../node_modules/rc-menu/es/context/MenuContext.js");
/* harmony import */ var _context_PathContext__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./context/PathContext */ "../../../node_modules/rc-menu/es/context/PathContext.js");
/* harmony import */ var _utils_commonUtil__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./utils/commonUtil */ "../../../node_modules/rc-menu/es/utils/commonUtil.js");
var _excluded = ["className", "title", "eventKey", "children"];
var InternalMenuItemGroup = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4__.forwardRef(function (props, ref) {
var className = props.className,
title = props.title,
eventKey = props.eventKey,
children = props.children,
restProps = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__["default"])(props, _excluded);
var _React$useContext = react__WEBPACK_IMPORTED_MODULE_4__.useContext(_context_MenuContext__WEBPACK_IMPORTED_MODULE_5__.MenuContext),
prefixCls = _React$useContext.prefixCls;
var groupPrefixCls = "".concat(prefixCls, "-item-group");
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4__.createElement("li", (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({
ref: ref,
role: "presentation"
}, restProps, {
onClick: function onClick(e) {
return e.stopPropagation();
},
className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(groupPrefixCls, className)
}), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4__.createElement("div", {
role: "presentation",
className: "".concat(groupPrefixCls, "-title"),
title: typeof title === 'string' ? title : undefined
}, title), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4__.createElement("ul", {
role: "group",
className: "".concat(groupPrefixCls, "-list")
}, children));
});
var MenuItemGroup = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4__.forwardRef(function (props, ref) {
var eventKey = props.eventKey,
children = props.children;
var connectedKeyPath = (0,_context_PathContext__WEBPACK_IMPORTED_MODULE_6__.useFullPath)(eventKey);
var childList = (0,_utils_commonUtil__WEBPACK_IMPORTED_MODULE_7__.parseChildren)(children, connectedKeyPath);
var measure = (0,_context_PathContext__WEBPACK_IMPORTED_MODULE_6__.useMeasure)();
if (measure) {
return childList;
}
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4__.createElement(InternalMenuItemGroup, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({
ref: ref
}, (0,rc_util_es_omit__WEBPACK_IMPORTED_MODULE_3__["default"])(props, ['warnKey'])), childList);
});
if (true) {
MenuItemGroup.displayName = 'MenuItemGroup';
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (MenuItemGroup);
/***/ }),
/***/ "../../../node_modules/rc-menu/es/SubMenu/InlineSubMenuList.js":
/*!*********************************************************************!*\
!*** ../../../node_modules/rc-menu/es/SubMenu/InlineSubMenuList.js ***!
\*********************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ InlineSubMenuList)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "../../../node_modules/@babel/runtime/helpers/esm/extends.js");
/* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js");
/* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var rc_motion__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! rc-motion */ "../../../node_modules/rc-motion/es/index.js");
/* harmony import */ var _utils_motionUtil__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utils/motionUtil */ "../../../node_modules/rc-menu/es/utils/motionUtil.js");
/* harmony import */ var _context_MenuContext__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../context/MenuContext */ "../../../node_modules/rc-menu/es/context/MenuContext.js");
/* harmony import */ var _SubMenuList__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./SubMenuList */ "../../../node_modules/rc-menu/es/SubMenu/SubMenuList.js");
function InlineSubMenuList(_ref) {
var id = _ref.id,
open = _ref.open,
keyPath = _ref.keyPath,
children = _ref.children;
var fixedMode = 'inline';
var _React$useContext = react__WEBPACK_IMPORTED_MODULE_3__.useContext(_context_MenuContext__WEBPACK_IMPORTED_MODULE_6__.MenuContext),
prefixCls = _React$useContext.prefixCls,
forceSubMenuRender = _React$useContext.forceSubMenuRender,
motion = _React$useContext.motion,
defaultMotions = _React$useContext.defaultMotions,
mode = _React$useContext.mode;
// Always use latest mode check
var sameModeRef = react__WEBPACK_IMPORTED_MODULE_3__.useRef(false);
sameModeRef.current = mode === fixedMode;
// We record `destroy` mark here since when mode change from `inline` to others.
// The inline list should remove when motion end.
var _React$useState = react__WEBPACK_IMPORTED_MODULE_3__.useState(!sameModeRef.current),
_React$useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_React$useState, 2),
destroy = _React$useState2[0],
setDestroy = _React$useState2[1];
var mergedOpen = sameModeRef.current ? open : false;
// ================================= Effect =================================
// Reset destroy state when mode change back
react__WEBPACK_IMPORTED_MODULE_3__.useEffect(function () {
if (sameModeRef.current) {
setDestroy(false);
}
}, [mode]);
// ================================= Render =================================
var mergedMotion = (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, (0,_utils_motionUtil__WEBPACK_IMPORTED_MODULE_5__.getMotion)(fixedMode, motion, defaultMotions));
// No need appear since nest inlineCollapse changed
if (keyPath.length > 1) {
mergedMotion.motionAppear = false;
}
// Hide inline list when mode changed and motion end
var originOnVisibleChanged = mergedMotion.onVisibleChanged;
mergedMotion.onVisibleChanged = function (newVisible) {
if (!sameModeRef.current && !newVisible) {
setDestroy(true);
}
return originOnVisibleChanged === null || originOnVisibleChanged === void 0 ? void 0 : originOnVisibleChanged(newVisible);
};
if (destroy) {
return null;
}
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(_context_MenuContext__WEBPACK_IMPORTED_MODULE_6__["default"], {
mode: fixedMode,
locked: !sameModeRef.current
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(rc_motion__WEBPACK_IMPORTED_MODULE_4__["default"], (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({
visible: mergedOpen
}, mergedMotion, {
forceRender: forceSubMenuRender,
removeOnLeave: false,
leavedClassName: "".concat(prefixCls, "-hidden")
}), function (_ref2) {
var motionClassName = _ref2.className,
motionStyle = _ref2.style;
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(_SubMenuList__WEBPACK_IMPORTED_MODULE_7__["default"], {
id: id,
className: motionClassName,
style: motionStyle
}, children);
}));
}
/***/ }),
/***/ "../../../node_modules/rc-menu/es/SubMenu/PopupTrigger.js":
/*!****************************************************************!*\
!*** ../../../node_modules/rc-menu/es/SubMenu/PopupTrigger.js ***!
\****************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ PopupTrigger)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js");
/* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js");
/* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _rc_component_trigger__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @rc-component/trigger */ "../../../node_modules/@rc-component/trigger/es/index.js");
/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! classnames */ "../../../node_modules/classnames/index.js");
/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var rc_util_es_raf__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! rc-util/es/raf */ "../../../node_modules/rc-util/es/raf.js");
/* harmony import */ var _context_MenuContext__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../context/MenuContext */ "../../../node_modules/rc-menu/es/context/MenuContext.js");
/* harmony import */ var _placements__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../placements */ "../../../node_modules/rc-menu/es/placements.js");
/* harmony import */ var _utils_motionUtil__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../utils/motionUtil */ "../../../node_modules/rc-menu/es/utils/motionUtil.js");
var popupPlacementMap = {
horizontal: 'bottomLeft',
vertical: 'rightTop',
'vertical-left': 'rightTop',
'vertical-right': 'leftTop'
};
function PopupTrigger(_ref) {
var prefixCls = _ref.prefixCls,
visible = _ref.visible,
children = _ref.children,
popup = _ref.popup,
popupStyle = _ref.popupStyle,
popupClassName = _ref.popupClassName,
popupOffset = _ref.popupOffset,
disabled = _ref.disabled,
mode = _ref.mode,
onVisibleChange = _ref.onVisibleChange;
var _React$useContext = react__WEBPACK_IMPORTED_MODULE_3__.useContext(_context_MenuContext__WEBPACK_IMPORTED_MODULE_7__.MenuContext),
getPopupContainer = _React$useContext.getPopupContainer,
rtl = _React$useContext.rtl,
subMenuOpenDelay = _React$useContext.subMenuOpenDelay,
subMenuCloseDelay = _React$useContext.subMenuCloseDelay,
builtinPlacements = _React$useContext.builtinPlacements,
triggerSubMenuAction = _React$useContext.triggerSubMenuAction,
forceSubMenuRender = _React$useContext.forceSubMenuRender,
rootClassName = _React$useContext.rootClassName,
motion = _React$useContext.motion,
defaultMotions = _React$useContext.defaultMotions;
var _React$useState = react__WEBPACK_IMPORTED_MODULE_3__.useState(false),
_React$useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_React$useState, 2),
innerVisible = _React$useState2[0],
setInnerVisible = _React$useState2[1];
var placement = rtl ? (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, _placements__WEBPACK_IMPORTED_MODULE_8__.placementsRtl), builtinPlacements) : (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, _placements__WEBPACK_IMPORTED_MODULE_8__.placements), builtinPlacements);
var popupPlacement = popupPlacementMap[mode];
var targetMotion = (0,_utils_motionUtil__WEBPACK_IMPORTED_MODULE_9__.getMotion)(mode, motion, defaultMotions);
var targetMotionRef = react__WEBPACK_IMPORTED_MODULE_3__.useRef(targetMotion);
if (mode !== 'inline') {
/**
* PopupTrigger is only used for vertical and horizontal types.
* When collapsed is unfolded, the inline animation will destroy the vertical animation.
*/
targetMotionRef.current = targetMotion;
}
var mergedMotion = (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, targetMotionRef.current), {}, {
leavedClassName: "".concat(prefixCls, "-hidden"),
removeOnLeave: false,
motionAppear: true
});
// Delay to change visible
var visibleRef = react__WEBPACK_IMPORTED_MODULE_3__.useRef();
react__WEBPACK_IMPORTED_MODULE_3__.useEffect(function () {
visibleRef.current = (0,rc_util_es_raf__WEBPACK_IMPORTED_MODULE_6__["default"])(function () {
setInnerVisible(visible);
});
return function () {
rc_util_es_raf__WEBPACK_IMPORTED_MODULE_6__["default"].cancel(visibleRef.current);
};
}, [visible]);
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(_rc_component_trigger__WEBPACK_IMPORTED_MODULE_4__["default"], {
prefixCls: prefixCls,
popupClassName: classnames__WEBPACK_IMPORTED_MODULE_5___default()("".concat(prefixCls, "-popup"), (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])({}, "".concat(prefixCls, "-rtl"), rtl), popupClassName, rootClassName),
stretch: mode === 'horizontal' ? 'minWidth' : null,
getPopupContainer: getPopupContainer,
builtinPlacements: placement,
popupPlacement: popupPlacement,
popupVisible: innerVisible,
popup: popup,
popupStyle: popupStyle,
popupAlign: popupOffset && {
offset: popupOffset
},
action: disabled ? [] : [triggerSubMenuAction],
mouseEnterDelay: subMenuOpenDelay,
mouseLeaveDelay: subMenuCloseDelay,
onPopupVisibleChange: onVisibleChange,
forceRender: forceSubMenuRender,
popupMotion: mergedMotion,
fresh: true
}, children);
}
/***/ }),
/***/ "../../../node_modules/rc-menu/es/SubMenu/SubMenuList.js":
/*!***************************************************************!*\
!*** ../../../node_modules/rc-menu/es/SubMenu/SubMenuList.js ***!
\***************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "../../../node_modules/@babel/runtime/helpers/esm/extends.js");
/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ "../../../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! classnames */ "../../../node_modules/classnames/index.js");
/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _context_MenuContext__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../context/MenuContext */ "../../../node_modules/rc-menu/es/context/MenuContext.js");
var _excluded = ["className", "children"];
var InternalSubMenuList = function InternalSubMenuList(_ref, ref) {
var className = _ref.className,
children = _ref.children,
restProps = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__["default"])(_ref, _excluded);
var _React$useContext = react__WEBPACK_IMPORTED_MODULE_2__.useContext(_context_MenuContext__WEBPACK_IMPORTED_MODULE_4__.MenuContext),
prefixCls = _React$useContext.prefixCls,
mode = _React$useContext.mode,
rtl = _React$useContext.rtl;
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement("ul", (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({
className: classnames__WEBPACK_IMPORTED_MODULE_3___default()(prefixCls, rtl && "".concat(prefixCls, "-rtl"), "".concat(prefixCls, "-sub"), "".concat(prefixCls, "-").concat(mode === 'inline' ? 'inline' : 'vertical'), className),
role: "menu"
}, restProps, {
"data-menu-list": true,
ref: ref
}), children);
};
var SubMenuList = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.forwardRef(InternalSubMenuList);
SubMenuList.displayName = 'SubMenuList';
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SubMenuList);
/***/ }),
/***/ "../../../node_modules/rc-menu/es/SubMenu/index.js":
/*!*********************************************************!*\
!*** ../../../node_modules/rc-menu/es/SubMenu/index.js ***!
\*********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js");
/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "../../../node_modules/@babel/runtime/helpers/esm/extends.js");
/* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js");
/* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js");
/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ "../../../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! classnames */ "../../../node_modules/classnames/index.js");
/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_6__);
/* harmony import */ var rc_overflow__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! rc-overflow */ "../../../node_modules/rc-overflow/es/index.js");
/* harmony import */ var rc_util_es_warning__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! rc-util/es/warning */ "../../../node_modules/rc-util/es/warning.js");
/* harmony import */ var _SubMenuList__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./SubMenuList */ "../../../node_modules/rc-menu/es/SubMenu/SubMenuList.js");
/* harmony import */ var _utils_commonUtil__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../utils/commonUtil */ "../../../node_modules/rc-menu/es/utils/commonUtil.js");
/* harmony import */ var _context_MenuContext__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../context/MenuContext */ "../../../node_modules/rc-menu/es/context/MenuContext.js");
/* harmony import */ var _hooks_useMemoCallback__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../hooks/useMemoCallback */ "../../../node_modules/rc-menu/es/hooks/useMemoCallback.js");
/* harmony import */ var _PopupTrigger__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./PopupTrigger */ "../../../node_modules/rc-menu/es/SubMenu/PopupTrigger.js");
/* harmony import */ var _Icon__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../Icon */ "../../../node_modules/rc-menu/es/Icon.js");
/* harmony import */ var _hooks_useActive__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../hooks/useActive */ "../../../node_modules/rc-menu/es/hooks/useActive.js");
/* harmony import */ var _utils_warnUtil__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../utils/warnUtil */ "../../../node_modules/rc-menu/es/utils/warnUtil.js");
/* harmony import */ var _hooks_useDirectionStyle__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../hooks/useDirectionStyle */ "../../../node_modules/rc-menu/es/hooks/useDirectionStyle.js");
/* harmony import */ var _InlineSubMenuList__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./InlineSubMenuList */ "../../../node_modules/rc-menu/es/SubMenu/InlineSubMenuList.js");
/* harmony import */ var _context_PathContext__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../context/PathContext */ "../../../node_modules/rc-menu/es/context/PathContext.js");
/* harmony import */ var _context_IdContext__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../context/IdContext */ "../../../node_modules/rc-menu/es/context/IdContext.js");
/* harmony import */ var _context_PrivateContext__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../context/PrivateContext */ "../../../node_modules/rc-menu/es/context/PrivateContext.js");
var _excluded = ["style", "className", "title", "eventKey", "warnKey", "disabled", "internalPopupClose", "children", "itemIcon", "expandIcon", "popupClassName", "popupOffset", "popupStyle", "onClick", "onMouseEnter", "onMouseLeave", "onTitleClick", "onTitleMouseEnter", "onTitleMouseLeave"],
_excluded2 = ["active"];
var InternalSubMenu = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5__.forwardRef(function (props, ref) {
var style = props.style,
className = props.className,
title = props.title,
eventKey = props.eventKey,
warnKey = props.warnKey,
disabled = props.disabled,
internalPopupClose = props.internalPopupClose,
children = props.children,
itemIcon = props.itemIcon,
expandIcon = props.expandIcon,
popupClassName = props.popupClassName,
popupOffset = props.popupOffset,
popupStyle = props.popupStyle,
onClick = props.onClick,
onMouseEnter = props.onMouseEnter,
onMouseLeave = props.onMouseLeave,
onTitleClick = props.onTitleClick,
onTitleMouseEnter = props.onTitleMouseEnter,
onTitleMouseLeave = props.onTitleMouseLeave,
restProps = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_4__["default"])(props, _excluded);
var domDataId = (0,_context_IdContext__WEBPACK_IMPORTED_MODULE_20__.useMenuId)(eventKey);
var _React$useContext = react__WEBPACK_IMPORTED_MODULE_5__.useContext(_context_MenuContext__WEBPACK_IMPORTED_MODULE_11__.MenuContext),
prefixCls = _React$useContext.prefixCls,
mode = _React$useContext.mode,
openKeys = _React$useContext.openKeys,
contextDisabled = _React$useContext.disabled,
overflowDisabled = _React$useContext.overflowDisabled,
activeKey = _React$useContext.activeKey,
selectedKeys = _React$useContext.selectedKeys,
contextItemIcon = _React$useContext.itemIcon,
contextExpandIcon = _React$useContext.expandIcon,
onItemClick = _React$useContext.onItemClick,
onOpenChange = _React$useContext.onOpenChange,
onActive = _React$useContext.onActive;
var _React$useContext2 = react__WEBPACK_IMPORTED_MODULE_5__.useContext(_context_PrivateContext__WEBPACK_IMPORTED_MODULE_21__["default"]),
_internalRenderSubMenuItem = _React$useContext2._internalRenderSubMenuItem;
var _React$useContext3 = react__WEBPACK_IMPORTED_MODULE_5__.useContext(_context_PathContext__WEBPACK_IMPORTED_MODULE_19__.PathUserContext),
isSubPathKey = _React$useContext3.isSubPathKey;
var connectedPath = (0,_context_PathContext__WEBPACK_IMPORTED_MODULE_19__.useFullPath)();
var subMenuPrefixCls = "".concat(prefixCls, "-submenu");
var mergedDisabled = contextDisabled || disabled;
var elementRef = react__WEBPACK_IMPORTED_MODULE_5__.useRef();
var popupRef = react__WEBPACK_IMPORTED_MODULE_5__.useRef();
// ================================ Warn ================================
if ( true && warnKey) {
(0,rc_util_es_warning__WEBPACK_IMPORTED_MODULE_8__["default"])(false, 'SubMenu should not leave undefined `key`.');
}
// ================================ Icon ================================
var mergedItemIcon = itemIcon !== null && itemIcon !== void 0 ? itemIcon : contextItemIcon;
var mergedExpandIcon = expandIcon !== null && expandIcon !== void 0 ? expandIcon : contextExpandIcon;
// ================================ Open ================================
var originOpen = openKeys.includes(eventKey);
var open = !overflowDisabled && originOpen;
// =============================== Select ===============================
var childrenSelected = isSubPathKey(selectedKeys, eventKey);
// =============================== Active ===============================
var _useActive = (0,_hooks_useActive__WEBPACK_IMPORTED_MODULE_15__["default"])(eventKey, mergedDisabled, onTitleMouseEnter, onTitleMouseLeave),
active = _useActive.active,
activeProps = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_4__["default"])(_useActive, _excluded2);
// Fallback of active check to avoid hover on menu title or disabled item
var _React$useState = react__WEBPACK_IMPORTED_MODULE_5__.useState(false),
_React$useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__["default"])(_React$useState, 2),
childrenActive = _React$useState2[0],
setChildrenActive = _React$useState2[1];
var triggerChildrenActive = function triggerChildrenActive(newActive) {
if (!mergedDisabled) {
setChildrenActive(newActive);
}
};
var onInternalMouseEnter = function onInternalMouseEnter(domEvent) {
triggerChildrenActive(true);
onMouseEnter === null || onMouseEnter === void 0 || onMouseEnter({
key: eventKey,
domEvent: domEvent
});
};
var onInternalMouseLeave = function onInternalMouseLeave(domEvent) {
triggerChildrenActive(false);
onMouseLeave === null || onMouseLeave === void 0 || onMouseLeave({
key: eventKey,
domEvent: domEvent
});
};
var mergedActive = react__WEBPACK_IMPORTED_MODULE_5__.useMemo(function () {
if (active) {
return active;
}
if (mode !== 'inline') {
return childrenActive || isSubPathKey([activeKey], eventKey);
}
return false;
}, [mode, active, activeKey, childrenActive, eventKey, isSubPathKey]);
// ========================== DirectionStyle ==========================
var directionStyle = (0,_hooks_useDirectionStyle__WEBPACK_IMPORTED_MODULE_17__["default"])(connectedPath.length);
// =============================== Events ===============================
// >>>> Title click
var onInternalTitleClick = function onInternalTitleClick(e) {
// Skip if disabled
if (mergedDisabled) {
return;
}
onTitleClick === null || onTitleClick === void 0 || onTitleClick({
key: eventKey,
domEvent: e
});
// Trigger open by click when mode is `inline`
if (mode === 'inline') {
onOpenChange(eventKey, !originOpen);
}
};
// >>>> Context for children click
var onMergedItemClick = (0,_hooks_useMemoCallback__WEBPACK_IMPORTED_MODULE_12__["default"])(function (info) {
onClick === null || onClick === void 0 || onClick((0,_utils_warnUtil__WEBPACK_IMPORTED_MODULE_16__.warnItemProp)(info));
onItemClick(info);
});
// >>>>> Visible change
var onPopupVisibleChange = function onPopupVisibleChange(newVisible) {
if (mode !== 'inline') {
onOpenChange(eventKey, newVisible);
}
};
/**
* Used for accessibility. Helper will focus element without key board.
* We should manually trigger an active
*/
var onInternalFocus = function onInternalFocus() {
onActive(eventKey);
};
// =============================== Render ===============================
var popupId = domDataId && "".concat(domDataId, "-popup");
var expandIconNode = react__WEBPACK_IMPORTED_MODULE_5__.useMemo(function () {
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5__.createElement(_Icon__WEBPACK_IMPORTED_MODULE_14__["default"], {
icon: mode !== 'horizontal' ? mergedExpandIcon : undefined,
props: (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__["default"])({}, props), {}, {
isOpen: open,
// [Legacy] Not sure why need this mark
isSubMenu: true
})
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5__.createElement("i", {
className: "".concat(subMenuPrefixCls, "-arrow")
}));
}, [mode, mergedExpandIcon, props, open, subMenuPrefixCls]);
// >>>>> Title
var titleNode = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5__.createElement("div", (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__["default"])({
role: "menuitem",
style: directionStyle,
className: "".concat(subMenuPrefixCls, "-title"),
tabIndex: mergedDisabled ? null : -1,
ref: elementRef,
title: typeof title === 'string' ? title : null,
"data-menu-id": overflowDisabled && domDataId ? null : domDataId,
"aria-expanded": open,
"aria-haspopup": true,
"aria-controls": popupId,
"aria-disabled": mergedDisabled,
onClick: onInternalTitleClick,
onFocus: onInternalFocus
}, activeProps), title, expandIconNode);
// Cache mode if it change to `inline` which do not have popup motion
var triggerModeRef = react__WEBPACK_IMPORTED_MODULE_5__.useRef(mode);
if (mode !== 'inline' && connectedPath.length > 1) {
triggerModeRef.current = 'vertical';
} else {
triggerModeRef.current = mode;
}
if (!overflowDisabled) {
var triggerMode = triggerModeRef.current;
// Still wrap with Trigger here since we need avoid react re-mount dom node
// Which makes motion failed
titleNode = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5__.createElement(_PopupTrigger__WEBPACK_IMPORTED_MODULE_13__["default"], {
mode: triggerMode,
prefixCls: subMenuPrefixCls,
visible: !internalPopupClose && open && mode !== 'inline',
popupClassName: popupClassName,
popupOffset: popupOffset,
popupStyle: popupStyle,
popup: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5__.createElement(_context_MenuContext__WEBPACK_IMPORTED_MODULE_11__["default"]
// Special handle of horizontal mode
, {
mode: triggerMode === 'horizontal' ? 'vertical' : triggerMode
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5__.createElement(_SubMenuList__WEBPACK_IMPORTED_MODULE_9__["default"], {
id: popupId,
ref: popupRef
}, children)),
disabled: mergedDisabled,
onVisibleChange: onPopupVisibleChange
}, titleNode);
}
// >>>>> List node
var listNode = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5__.createElement(rc_overflow__WEBPACK_IMPORTED_MODULE_7__["default"].Item, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__["default"])({
ref: ref,
role: "none"
}, restProps, {
component: "li",
style: style,
className: classnames__WEBPACK_IMPORTED_MODULE_6___default()(subMenuPrefixCls, "".concat(subMenuPrefixCls, "-").concat(mode), className, (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])({}, "".concat(subMenuPrefixCls, "-open"), open), "".concat(subMenuPrefixCls, "-active"), mergedActive), "".concat(subMenuPrefixCls, "-selected"), childrenSelected), "".concat(subMenuPrefixCls, "-disabled"), mergedDisabled)),
onMouseEnter: onInternalMouseEnter,
onMouseLeave: onInternalMouseLeave
}), titleNode, !overflowDisabled && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5__.createElement(_InlineSubMenuList__WEBPACK_IMPORTED_MODULE_18__["default"], {
id: popupId,
open: open,
keyPath: connectedPath
}, children));
if (_internalRenderSubMenuItem) {
listNode = _internalRenderSubMenuItem(listNode, props, {
selected: childrenSelected,
active: mergedActive,
open: open,
disabled: mergedDisabled
});
}
// >>>>> Render
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5__.createElement(_context_MenuContext__WEBPACK_IMPORTED_MODULE_11__["default"], {
onItemClick: onMergedItemClick,
mode: mode === 'horizontal' ? 'vertical' : mode,
itemIcon: mergedItemIcon,
expandIcon: mergedExpandIcon
}, listNode);
});
var SubMenu = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5__.forwardRef(function (props, ref) {
var eventKey = props.eventKey,
children = props.children;
var connectedKeyPath = (0,_context_PathContext__WEBPACK_IMPORTED_MODULE_19__.useFullPath)(eventKey);
var childList = (0,_utils_commonUtil__WEBPACK_IMPORTED_MODULE_10__.parseChildren)(children, connectedKeyPath);
// ==================== Record KeyPath ====================
var measure = (0,_context_PathContext__WEBPACK_IMPORTED_MODULE_19__.useMeasure)();
// eslint-disable-next-line consistent-return
react__WEBPACK_IMPORTED_MODULE_5__.useEffect(function () {
if (measure) {
measure.registerPath(eventKey, connectedKeyPath);
return function () {
measure.unregisterPath(eventKey, connectedKeyPath);
};
}
}, [connectedKeyPath]);
var renderNode;
// ======================== Render ========================
if (measure) {
renderNode = childList;
} else {
renderNode = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5__.createElement(InternalSubMenu, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__["default"])({
ref: ref
}, props), childList);
}
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5__.createElement(_context_PathContext__WEBPACK_IMPORTED_MODULE_19__.PathTrackerContext.Provider, {
value: connectedKeyPath
}, renderNode);
});
if (true) {
SubMenu.displayName = 'SubMenu';
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SubMenu);
/***/ }),
/***/ "../../../node_modules/rc-menu/es/context/IdContext.js":
/*!*************************************************************!*\
!*** ../../../node_modules/rc-menu/es/context/IdContext.js ***!
\*************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ IdContext: () => (/* binding */ IdContext),
/* harmony export */ getMenuId: () => (/* binding */ getMenuId),
/* harmony export */ useMenuId: () => (/* binding */ useMenuId)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
var IdContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext(null);
function getMenuId(uuid, eventKey) {
if (uuid === undefined) {
return null;
}
return "".concat(uuid, "-").concat(eventKey);
}
/**
* Get `data-menu-id`
*/
function useMenuId(eventKey) {
var id = react__WEBPACK_IMPORTED_MODULE_0__.useContext(IdContext);
return getMenuId(id, eventKey);
}
/***/ }),
/***/ "../../../node_modules/rc-menu/es/context/MenuContext.js":
/*!***************************************************************!*\
!*** ../../../node_modules/rc-menu/es/context/MenuContext.js ***!
\***************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ MenuContext: () => (/* binding */ MenuContext),
/* harmony export */ "default": () => (/* binding */ InheritableContextProvider)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ "../../../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js");
/* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var rc_util_es_hooks_useMemo__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! rc-util/es/hooks/useMemo */ "../../../node_modules/rc-util/es/hooks/useMemo.js");
/* harmony import */ var rc_util_es_isEqual__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! rc-util/es/isEqual */ "../../../node_modules/rc-util/es/isEqual.js");
var _excluded = ["children", "locked"];
var MenuContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createContext(null);
function mergeProps(origin, target) {
var clone = (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, origin);
Object.keys(target).forEach(function (key) {
var value = target[key];
if (value !== undefined) {
clone[key] = value;
}
});
return clone;
}
function InheritableContextProvider(_ref) {
var children = _ref.children,
locked = _ref.locked,
restProps = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__["default"])(_ref, _excluded);
var context = react__WEBPACK_IMPORTED_MODULE_2__.useContext(MenuContext);
var inheritableContext = (0,rc_util_es_hooks_useMemo__WEBPACK_IMPORTED_MODULE_3__["default"])(function () {
return mergeProps(context, restProps);
}, [context, restProps], function (prev, next) {
return !locked && (prev[0] !== next[0] || !(0,rc_util_es_isEqual__WEBPACK_IMPORTED_MODULE_4__["default"])(prev[1], next[1], true));
});
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement(MenuContext.Provider, {
value: inheritableContext
}, children);
}
/***/ }),
/***/ "../../../node_modules/rc-menu/es/context/PathContext.js":
/*!***************************************************************!*\
!*** ../../../node_modules/rc-menu/es/context/PathContext.js ***!
\***************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ PathRegisterContext: () => (/* binding */ PathRegisterContext),
/* harmony export */ PathTrackerContext: () => (/* binding */ PathTrackerContext),
/* harmony export */ PathUserContext: () => (/* binding */ PathUserContext),
/* harmony export */ useFullPath: () => (/* binding */ useFullPath),
/* harmony export */ useMeasure: () => (/* binding */ useMeasure)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ "../../../node_modules/@babel/runtime/helpers/esm/toConsumableArray.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
var EmptyList = [];
// ========================= Path Register =========================
var PathRegisterContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createContext(null);
function useMeasure() {
return react__WEBPACK_IMPORTED_MODULE_1__.useContext(PathRegisterContext);
}
// ========================= Path Tracker ==========================
var PathTrackerContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createContext(EmptyList);
function useFullPath(eventKey) {
var parentKeyPath = react__WEBPACK_IMPORTED_MODULE_1__.useContext(PathTrackerContext);
return react__WEBPACK_IMPORTED_MODULE_1__.useMemo(function () {
return eventKey !== undefined ? [].concat((0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__["default"])(parentKeyPath), [eventKey]) : parentKeyPath;
}, [parentKeyPath, eventKey]);
}
// =========================== Path User ===========================
var PathUserContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createContext(null);
/***/ }),
/***/ "../../../node_modules/rc-menu/es/context/PrivateContext.js":
/*!******************************************************************!*\
!*** ../../../node_modules/rc-menu/es/context/PrivateContext.js ***!
\******************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
var PrivateContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext({});
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (PrivateContext);
/***/ }),
/***/ "../../../node_modules/rc-menu/es/hooks/useAccessibility.js":
/*!******************************************************************!*\
!*** ../../../node_modules/rc-menu/es/hooks/useAccessibility.js ***!
\******************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ getFocusableElements: () => (/* binding */ getFocusableElements),
/* harmony export */ refreshElements: () => (/* binding */ refreshElements),
/* harmony export */ useAccessibility: () => (/* binding */ useAccessibility)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js");
/* harmony import */ var rc_util_es_Dom_focus__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rc-util/es/Dom/focus */ "../../../node_modules/rc-util/es/Dom/focus.js");
/* harmony import */ var rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rc-util/es/KeyCode */ "../../../node_modules/rc-util/es/KeyCode.js");
/* harmony import */ var rc_util_es_raf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! rc-util/es/raf */ "../../../node_modules/rc-util/es/raf.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var _context_IdContext__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../context/IdContext */ "../../../node_modules/rc-menu/es/context/IdContext.js");
// destruct to reduce minify size
var LEFT = rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_2__["default"].LEFT,
RIGHT = rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_2__["default"].RIGHT,
UP = rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_2__["default"].UP,
DOWN = rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_2__["default"].DOWN,
ENTER = rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_2__["default"].ENTER,
ESC = rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_2__["default"].ESC,
HOME = rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_2__["default"].HOME,
END = rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_2__["default"].END;
var ArrowKeys = [UP, DOWN, LEFT, RIGHT];
function getOffset(mode, isRootLevel, isRtl, which) {
var _offsets;
var prev = 'prev';
var next = 'next';
var children = 'children';
var parent = 'parent';
// Inline enter is special that we use unique operation
if (mode === 'inline' && which === ENTER) {
return {
inlineTrigger: true
};
}
var inline = (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])({}, UP, prev), DOWN, next);
var horizontal = (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])({}, LEFT, isRtl ? next : prev), RIGHT, isRtl ? prev : next), DOWN, children), ENTER, children);
var vertical = (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])({}, UP, prev), DOWN, next), ENTER, children), ESC, parent), LEFT, isRtl ? children : parent), RIGHT, isRtl ? parent : children);
var offsets = {
inline: inline,
horizontal: horizontal,
vertical: vertical,
inlineSub: inline,
horizontalSub: vertical,
verticalSub: vertical
};
var type = (_offsets = offsets["".concat(mode).concat(isRootLevel ? '' : 'Sub')]) === null || _offsets === void 0 ? void 0 : _offsets[which];
switch (type) {
case prev:
return {
offset: -1,
sibling: true
};
case next:
return {
offset: 1,
sibling: true
};
case parent:
return {
offset: -1,
sibling: false
};
case children:
return {
offset: 1,
sibling: false
};
default:
return null;
}
}
function findContainerUL(element) {
var current = element;
while (current) {
if (current.getAttribute('data-menu-list')) {
return current;
}
current = current.parentElement;
}
// Normally should not reach this line
/* istanbul ignore next */
return null;
}
/**
* Find focused element within element set provided
*/
function getFocusElement(activeElement, elements) {
var current = activeElement || document.activeElement;
while (current) {
if (elements.has(current)) {
return current;
}
current = current.parentElement;
}
return null;
}
/**
* Get focusable elements from the element set under provided container
*/
function getFocusableElements(container, elements) {
var list = (0,rc_util_es_Dom_focus__WEBPACK_IMPORTED_MODULE_1__.getFocusNodeList)(container, true);
return list.filter(function (ele) {
return elements.has(ele);
});
}
function getNextFocusElement(parentQueryContainer, elements, focusMenuElement) {
var offset = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1;
// Key on the menu item will not get validate parent container
if (!parentQueryContainer) {
return null;
}
// List current level menu item elements
var sameLevelFocusableMenuElementList = getFocusableElements(parentQueryContainer, elements);
// Find next focus index
var count = sameLevelFocusableMenuElementList.length;
var focusIndex = sameLevelFocusableMenuElementList.findIndex(function (ele) {
return focusMenuElement === ele;
});
if (offset < 0) {
if (focusIndex === -1) {
focusIndex = count - 1;
} else {
focusIndex -= 1;
}
} else if (offset > 0) {
focusIndex += 1;
}
focusIndex = (focusIndex + count) % count;
// Focus menu item
return sameLevelFocusableMenuElementList[focusIndex];
}
var refreshElements = function refreshElements(keys, id) {
var elements = new Set();
var key2element = new Map();
var element2key = new Map();
keys.forEach(function (key) {
var element = document.querySelector("[data-menu-id='".concat((0,_context_IdContext__WEBPACK_IMPORTED_MODULE_5__.getMenuId)(id, key), "']"));
if (element) {
elements.add(element);
element2key.set(element, key);
key2element.set(key, element);
}
});
return {
elements: elements,
key2element: key2element,
element2key: element2key
};
};
function useAccessibility(mode, activeKey, isRtl, id, containerRef, getKeys, getKeyPath, triggerActiveKey, triggerAccessibilityOpen, originOnKeyDown) {
var rafRef = react__WEBPACK_IMPORTED_MODULE_4__.useRef();
var activeRef = react__WEBPACK_IMPORTED_MODULE_4__.useRef();
activeRef.current = activeKey;
var cleanRaf = function cleanRaf() {
rc_util_es_raf__WEBPACK_IMPORTED_MODULE_3__["default"].cancel(rafRef.current);
};
react__WEBPACK_IMPORTED_MODULE_4__.useEffect(function () {
return function () {
cleanRaf();
};
}, []);
return function (e) {
var which = e.which;
if ([].concat(ArrowKeys, [ENTER, ESC, HOME, END]).includes(which)) {
var keys = getKeys();
var refreshedElements = refreshElements(keys, id);
var _refreshedElements = refreshedElements,
elements = _refreshedElements.elements,
key2element = _refreshedElements.key2element,
element2key = _refreshedElements.element2key;
// First we should find current focused MenuItem/SubMenu element
var activeElement = key2element.get(activeKey);
var focusMenuElement = getFocusElement(activeElement, elements);
var focusMenuKey = element2key.get(focusMenuElement);
var offsetObj = getOffset(mode, getKeyPath(focusMenuKey, true).length === 1, isRtl, which);
// Some mode do not have fully arrow operation like inline
if (!offsetObj && which !== HOME && which !== END) {
return;
}
// Arrow prevent default to avoid page scroll
if (ArrowKeys.includes(which) || [HOME, END].includes(which)) {
e.preventDefault();
}
var tryFocus = function tryFocus(menuElement) {
if (menuElement) {
var focusTargetElement = menuElement;
// Focus to link instead of menu item if possible
var link = menuElement.querySelector('a');
if (link !== null && link !== void 0 && link.getAttribute('href')) {
focusTargetElement = link;
}
var targetKey = element2key.get(menuElement);
triggerActiveKey(targetKey);
/**
* Do not `useEffect` here since `tryFocus` may trigger async
* which makes React sync update the `activeKey`
* that force render before `useRef` set the next activeKey
*/
cleanRaf();
rafRef.current = (0,rc_util_es_raf__WEBPACK_IMPORTED_MODULE_3__["default"])(function () {
if (activeRef.current === targetKey) {
focusTargetElement.focus();
}
});
}
};
if ([HOME, END].includes(which) || offsetObj.sibling || !focusMenuElement) {
// ========================== Sibling ==========================
// Find walkable focus menu element container
var parentQueryContainer;
if (!focusMenuElement || mode === 'inline') {
parentQueryContainer = containerRef.current;
} else {
parentQueryContainer = findContainerUL(focusMenuElement);
}
// Get next focus element
var targetElement;
var focusableElements = getFocusableElements(parentQueryContainer, elements);
if (which === HOME) {
targetElement = focusableElements[0];
} else if (which === END) {
targetElement = focusableElements[focusableElements.length - 1];
} else {
targetElement = getNextFocusElement(parentQueryContainer, elements, focusMenuElement, offsetObj.offset);
}
// Focus menu item
tryFocus(targetElement);
// ======================= InlineTrigger =======================
} else if (offsetObj.inlineTrigger) {
// Inline trigger no need switch to sub menu item
triggerAccessibilityOpen(focusMenuKey);
// =========================== Level ===========================
} else if (offsetObj.offset > 0) {
triggerAccessibilityOpen(focusMenuKey, true);
cleanRaf();
rafRef.current = (0,rc_util_es_raf__WEBPACK_IMPORTED_MODULE_3__["default"])(function () {
// Async should resync elements
refreshedElements = refreshElements(keys, id);
var controlId = focusMenuElement.getAttribute('aria-controls');
var subQueryContainer = document.getElementById(controlId);
// Get sub focusable menu item
var targetElement = getNextFocusElement(subQueryContainer, refreshedElements.elements);
// Focus menu item
tryFocus(targetElement);
}, 5);
} else if (offsetObj.offset < 0) {
var keyPath = getKeyPath(focusMenuKey, true);
var parentKey = keyPath[keyPath.length - 2];
var parentMenuElement = key2element.get(parentKey);
// Focus menu item
triggerAccessibilityOpen(parentKey, false);
tryFocus(parentMenuElement);
}
}
// Pass origin key down event
originOnKeyDown === null || originOnKeyDown === void 0 || originOnKeyDown(e);
};
}
/***/ }),
/***/ "../../../node_modules/rc-menu/es/hooks/useActive.js":
/*!***********************************************************!*\
!*** ../../../node_modules/rc-menu/es/hooks/useActive.js ***!
\***********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ useActive)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _context_MenuContext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../context/MenuContext */ "../../../node_modules/rc-menu/es/context/MenuContext.js");
function useActive(eventKey, disabled, onMouseEnter, onMouseLeave) {
var _React$useContext = react__WEBPACK_IMPORTED_MODULE_0__.useContext(_context_MenuContext__WEBPACK_IMPORTED_MODULE_1__.MenuContext),
activeKey = _React$useContext.activeKey,
onActive = _React$useContext.onActive,
onInactive = _React$useContext.onInactive;
var ret = {
active: activeKey === eventKey
};
// Skip when disabled
if (!disabled) {
ret.onMouseEnter = function (domEvent) {
onMouseEnter === null || onMouseEnter === void 0 || onMouseEnter({
key: eventKey,
domEvent: domEvent
});
onActive(eventKey);
};
ret.onMouseLeave = function (domEvent) {
onMouseLeave === null || onMouseLeave === void 0 || onMouseLeave({
key: eventKey,
domEvent: domEvent
});
onInactive(eventKey);
};
}
return ret;
}
/***/ }),
/***/ "../../../node_modules/rc-menu/es/hooks/useDirectionStyle.js":
/*!*******************************************************************!*\
!*** ../../../node_modules/rc-menu/es/hooks/useDirectionStyle.js ***!
\*******************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ useDirectionStyle)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _context_MenuContext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../context/MenuContext */ "../../../node_modules/rc-menu/es/context/MenuContext.js");
function useDirectionStyle(level) {
var _React$useContext = react__WEBPACK_IMPORTED_MODULE_0__.useContext(_context_MenuContext__WEBPACK_IMPORTED_MODULE_1__.MenuContext),
mode = _React$useContext.mode,
rtl = _React$useContext.rtl,
inlineIndent = _React$useContext.inlineIndent;
if (mode !== 'inline') {
return null;
}
var len = level;
return rtl ? {
paddingRight: len * inlineIndent
} : {
paddingLeft: len * inlineIndent
};
}
/***/ }),
/***/ "../../../node_modules/rc-menu/es/hooks/useKeyRecords.js":
/*!***************************************************************!*\
!*** ../../../node_modules/rc-menu/es/hooks/useKeyRecords.js ***!
\***************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ OVERFLOW_KEY: () => (/* binding */ OVERFLOW_KEY),
/* harmony export */ "default": () => (/* binding */ useKeyRecords)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ "../../../node_modules/@babel/runtime/helpers/esm/toConsumableArray.js");
/* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var rc_util_es_warning__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! rc-util/es/warning */ "../../../node_modules/rc-util/es/warning.js");
/* harmony import */ var _utils_timeUtil__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/timeUtil */ "../../../node_modules/rc-menu/es/utils/timeUtil.js");
var PATH_SPLIT = '__RC_UTIL_PATH_SPLIT__';
var getPathStr = function getPathStr(keyPath) {
return keyPath.join(PATH_SPLIT);
};
var getPathKeys = function getPathKeys(keyPathStr) {
return keyPathStr.split(PATH_SPLIT);
};
var OVERFLOW_KEY = 'rc-menu-more';
function useKeyRecords() {
var _React$useState = react__WEBPACK_IMPORTED_MODULE_2__.useState({}),
_React$useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__["default"])(_React$useState, 2),
internalForceUpdate = _React$useState2[1];
var key2pathRef = (0,react__WEBPACK_IMPORTED_MODULE_2__.useRef)(new Map());
var path2keyRef = (0,react__WEBPACK_IMPORTED_MODULE_2__.useRef)(new Map());
var _React$useState3 = react__WEBPACK_IMPORTED_MODULE_2__.useState([]),
_React$useState4 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__["default"])(_React$useState3, 2),
overflowKeys = _React$useState4[0],
setOverflowKeys = _React$useState4[1];
var updateRef = (0,react__WEBPACK_IMPORTED_MODULE_2__.useRef)(0);
var destroyRef = (0,react__WEBPACK_IMPORTED_MODULE_2__.useRef)(false);
var forceUpdate = function forceUpdate() {
if (!destroyRef.current) {
internalForceUpdate({});
}
};
var registerPath = (0,react__WEBPACK_IMPORTED_MODULE_2__.useCallback)(function (key, keyPath) {
// Warning for invalidate or duplicated `key`
if (true) {
(0,rc_util_es_warning__WEBPACK_IMPORTED_MODULE_3__["default"])(!key2pathRef.current.has(key), "Duplicated key '".concat(key, "' used in Menu by path [").concat(keyPath.join(' > '), "]"));
}
// Fill map
var connectedPath = getPathStr(keyPath);
path2keyRef.current.set(connectedPath, key);
key2pathRef.current.set(key, connectedPath);
updateRef.current += 1;
var id = updateRef.current;
(0,_utils_timeUtil__WEBPACK_IMPORTED_MODULE_4__.nextSlice)(function () {
if (id === updateRef.current) {
forceUpdate();
}
});
}, []);
var unregisterPath = (0,react__WEBPACK_IMPORTED_MODULE_2__.useCallback)(function (key, keyPath) {
var connectedPath = getPathStr(keyPath);
path2keyRef.current.delete(connectedPath);
key2pathRef.current.delete(key);
}, []);
var refreshOverflowKeys = (0,react__WEBPACK_IMPORTED_MODULE_2__.useCallback)(function (keys) {
setOverflowKeys(keys);
}, []);
var getKeyPath = (0,react__WEBPACK_IMPORTED_MODULE_2__.useCallback)(function (eventKey, includeOverflow) {
var fullPath = key2pathRef.current.get(eventKey) || '';
var keys = getPathKeys(fullPath);
if (includeOverflow && overflowKeys.includes(keys[0])) {
keys.unshift(OVERFLOW_KEY);
}
return keys;
}, [overflowKeys]);
var isSubPathKey = (0,react__WEBPACK_IMPORTED_MODULE_2__.useCallback)(function (pathKeys, eventKey) {
return pathKeys.filter(function (item) {
return item !== undefined;
}).some(function (pathKey) {
var pathKeyList = getKeyPath(pathKey, true);
return pathKeyList.includes(eventKey);
});
}, [getKeyPath]);
var getKeys = function getKeys() {
var keys = (0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__["default"])(key2pathRef.current.keys());
if (overflowKeys.length) {
keys.push(OVERFLOW_KEY);
}
return keys;
};
/**
* Find current key related child path keys
*/
var getSubPathKeys = (0,react__WEBPACK_IMPORTED_MODULE_2__.useCallback)(function (key) {
var connectedPath = "".concat(key2pathRef.current.get(key)).concat(PATH_SPLIT);
var pathKeys = new Set();
(0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__["default"])(path2keyRef.current.keys()).forEach(function (pathKey) {
if (pathKey.startsWith(connectedPath)) {
pathKeys.add(path2keyRef.current.get(pathKey));
}
});
return pathKeys;
}, []);
react__WEBPACK_IMPORTED_MODULE_2__.useEffect(function () {
return function () {
destroyRef.current = true;
};
}, []);
return {
// Register
registerPath: registerPath,
unregisterPath: unregisterPath,
refreshOverflowKeys: refreshOverflowKeys,
// Util
isSubPathKey: isSubPathKey,
getKeyPath: getKeyPath,
getKeys: getKeys,
getSubPathKeys: getSubPathKeys
};
}
/***/ }),
/***/ "../../../node_modules/rc-menu/es/hooks/useMemoCallback.js":
/*!*****************************************************************!*\
!*** ../../../node_modules/rc-menu/es/hooks/useMemoCallback.js ***!
\*****************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ useMemoCallback)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
/**
* Cache callback function that always return same ref instead.
* This is used for context optimization.
*/
function useMemoCallback(func) {
var funRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(func);
funRef.current = func;
var callback = react__WEBPACK_IMPORTED_MODULE_0__.useCallback(function () {
var _funRef$current;
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
return (_funRef$current = funRef.current) === null || _funRef$current === void 0 ? void 0 : _funRef$current.call.apply(_funRef$current, [funRef].concat(args));
}, []);
return func ? callback : undefined;
}
/***/ }),
/***/ "../../../node_modules/rc-menu/es/hooks/useUUID.js":
/*!*********************************************************!*\
!*** ../../../node_modules/rc-menu/es/hooks/useUUID.js ***!
\*********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ useUUID)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var rc_util_es_hooks_useMergedState__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rc-util/es/hooks/useMergedState */ "../../../node_modules/rc-util/es/hooks/useMergedState.js");
var uniquePrefix = Math.random().toFixed(5).toString().slice(2);
var internalId = 0;
function useUUID(id) {
var _useMergedState = (0,rc_util_es_hooks_useMergedState__WEBPACK_IMPORTED_MODULE_2__["default"])(id, {
value: id
}),
_useMergedState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__["default"])(_useMergedState, 2),
uuid = _useMergedState2[0],
setUUID = _useMergedState2[1];
react__WEBPACK_IMPORTED_MODULE_1__.useEffect(function () {
internalId += 1;
var newId = false ? 0 : "".concat(uniquePrefix, "-").concat(internalId);
setUUID("rc-menu-uuid-".concat(newId));
}, []);
return uuid;
}
/***/ }),
/***/ "../../../node_modules/rc-menu/es/index.js":
/*!*************************************************!*\
!*** ../../../node_modules/rc-menu/es/index.js ***!
\*************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ Divider: () => (/* reexport safe */ _Divider__WEBPACK_IMPORTED_MODULE_5__["default"]),
/* harmony export */ Item: () => (/* reexport safe */ _MenuItem__WEBPACK_IMPORTED_MODULE_1__["default"]),
/* harmony export */ ItemGroup: () => (/* reexport safe */ _MenuItemGroup__WEBPACK_IMPORTED_MODULE_3__["default"]),
/* harmony export */ MenuItem: () => (/* reexport safe */ _MenuItem__WEBPACK_IMPORTED_MODULE_1__["default"]),
/* harmony export */ MenuItemGroup: () => (/* reexport safe */ _MenuItemGroup__WEBPACK_IMPORTED_MODULE_3__["default"]),
/* harmony export */ SubMenu: () => (/* reexport safe */ _SubMenu__WEBPACK_IMPORTED_MODULE_2__["default"]),
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__),
/* harmony export */ useFullPath: () => (/* reexport safe */ _context_PathContext__WEBPACK_IMPORTED_MODULE_4__.useFullPath)
/* harmony export */ });
/* harmony import */ var _Menu__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Menu */ "../../../node_modules/rc-menu/es/Menu.js");
/* harmony import */ var _MenuItem__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./MenuItem */ "../../../node_modules/rc-menu/es/MenuItem.js");
/* harmony import */ var _SubMenu__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./SubMenu */ "../../../node_modules/rc-menu/es/SubMenu/index.js");
/* harmony import */ var _MenuItemGroup__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./MenuItemGroup */ "../../../node_modules/rc-menu/es/MenuItemGroup.js");
/* harmony import */ var _context_PathContext__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./context/PathContext */ "../../../node_modules/rc-menu/es/context/PathContext.js");
/* harmony import */ var _Divider__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./Divider */ "../../../node_modules/rc-menu/es/Divider.js");
var ExportMenu = _Menu__WEBPACK_IMPORTED_MODULE_0__["default"];
ExportMenu.Item = _MenuItem__WEBPACK_IMPORTED_MODULE_1__["default"];
ExportMenu.SubMenu = _SubMenu__WEBPACK_IMPORTED_MODULE_2__["default"];
ExportMenu.ItemGroup = _MenuItemGroup__WEBPACK_IMPORTED_MODULE_3__["default"];
ExportMenu.Divider = _Divider__WEBPACK_IMPORTED_MODULE_5__["default"];
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ExportMenu);
/***/ }),
/***/ "../../../node_modules/rc-menu/es/placements.js":
/*!******************************************************!*\
!*** ../../../node_modules/rc-menu/es/placements.js ***!
\******************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__),
/* harmony export */ placements: () => (/* binding */ placements),
/* harmony export */ placementsRtl: () => (/* binding */ placementsRtl)
/* harmony export */ });
var autoAdjustOverflow = {
adjustX: 1,
adjustY: 1
};
var placements = {
topLeft: {
points: ['bl', 'tl'],
overflow: autoAdjustOverflow
},
topRight: {
points: ['br', 'tr'],
overflow: autoAdjustOverflow
},
bottomLeft: {
points: ['tl', 'bl'],
overflow: autoAdjustOverflow
},
bottomRight: {
points: ['tr', 'br'],
overflow: autoAdjustOverflow
},
leftTop: {
points: ['tr', 'tl'],
overflow: autoAdjustOverflow
},
leftBottom: {
points: ['br', 'bl'],
overflow: autoAdjustOverflow
},
rightTop: {
points: ['tl', 'tr'],
overflow: autoAdjustOverflow
},
rightBottom: {
points: ['bl', 'br'],
overflow: autoAdjustOverflow
}
};
var placementsRtl = {
topLeft: {
points: ['bl', 'tl'],
overflow: autoAdjustOverflow
},
topRight: {
points: ['br', 'tr'],
overflow: autoAdjustOverflow
},
bottomLeft: {
points: ['tl', 'bl'],
overflow: autoAdjustOverflow
},
bottomRight: {
points: ['tr', 'br'],
overflow: autoAdjustOverflow
},
rightTop: {
points: ['tr', 'tl'],
overflow: autoAdjustOverflow
},
rightBottom: {
points: ['br', 'bl'],
overflow: autoAdjustOverflow
},
leftTop: {
points: ['tl', 'tr'],
overflow: autoAdjustOverflow
},
leftBottom: {
points: ['bl', 'br'],
overflow: autoAdjustOverflow
}
};
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (placements);
/***/ }),
/***/ "../../../node_modules/rc-menu/es/utils/commonUtil.js":
/*!************************************************************!*\
!*** ../../../node_modules/rc-menu/es/utils/commonUtil.js ***!
\************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ parseChildren: () => (/* binding */ parseChildren)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ "../../../node_modules/@babel/runtime/helpers/esm/toConsumableArray.js");
/* harmony import */ var rc_util_es_Children_toArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rc-util/es/Children/toArray */ "../../../node_modules/rc-util/es/Children/toArray.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);
function parseChildren(children, keyPath) {
return (0,rc_util_es_Children_toArray__WEBPACK_IMPORTED_MODULE_1__["default"])(children).map(function (child, index) {
if ( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.isValidElement(child)) {
var _eventKey, _child$props;
var key = child.key;
var eventKey = (_eventKey = (_child$props = child.props) === null || _child$props === void 0 ? void 0 : _child$props.eventKey) !== null && _eventKey !== void 0 ? _eventKey : key;
var emptyKey = eventKey === null || eventKey === undefined;
if (emptyKey) {
eventKey = "tmp_key-".concat([].concat((0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__["default"])(keyPath), [index]).join('-'));
}
var cloneProps = {
key: eventKey,
eventKey: eventKey
};
if ( true && emptyKey) {
cloneProps.warnKey = true;
}
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.cloneElement(child, cloneProps);
}
return child;
});
}
/***/ }),
/***/ "../../../node_modules/rc-menu/es/utils/motionUtil.js":
/*!************************************************************!*\
!*** ../../../node_modules/rc-menu/es/utils/motionUtil.js ***!
\************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ getMotion: () => (/* binding */ getMotion)
/* harmony export */ });
function getMotion(mode, motion, defaultMotions) {
if (motion) {
return motion;
}
if (defaultMotions) {
return defaultMotions[mode] || defaultMotions.other;
}
return undefined;
}
/***/ }),
/***/ "../../../node_modules/rc-menu/es/utils/nodeUtil.js":
/*!**********************************************************!*\
!*** ../../../node_modules/rc-menu/es/utils/nodeUtil.js ***!
\**********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ parseItems: () => (/* binding */ parseItems)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js");
/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "../../../node_modules/@babel/runtime/helpers/esm/extends.js");
/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ "../../../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js");
/* harmony import */ var _babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/typeof */ "../../../node_modules/@babel/runtime/helpers/esm/typeof.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var _Divider__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../Divider */ "../../../node_modules/rc-menu/es/Divider.js");
/* harmony import */ var _MenuItem__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../MenuItem */ "../../../node_modules/rc-menu/es/MenuItem.js");
/* harmony import */ var _MenuItemGroup__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../MenuItemGroup */ "../../../node_modules/rc-menu/es/MenuItemGroup.js");
/* harmony import */ var _SubMenu__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../SubMenu */ "../../../node_modules/rc-menu/es/SubMenu/index.js");
/* harmony import */ var _commonUtil__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./commonUtil */ "../../../node_modules/rc-menu/es/utils/commonUtil.js");
var _excluded = ["label", "children", "key", "type", "extra"];
function convertItemsToNodes(list, components, prefixCls) {
var MergedMenuItem = components.item,
MergedMenuItemGroup = components.group,
MergedSubMenu = components.submenu,
MergedDivider = components.divider;
return (list || []).map(function (opt, index) {
if (opt && (0,_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_3__["default"])(opt) === 'object') {
var _ref = opt,
label = _ref.label,
children = _ref.children,
key = _ref.key,
type = _ref.type,
extra = _ref.extra,
restProps = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2__["default"])(_ref, _excluded);
var mergedKey = key !== null && key !== void 0 ? key : "tmp-".concat(index);
// MenuItemGroup & SubMenuItem
if (children || type === 'group') {
if (type === 'group') {
// Group
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4__.createElement(MergedMenuItemGroup, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__["default"])({
key: mergedKey
}, restProps, {
title: label
}), convertItemsToNodes(children, components, prefixCls));
}
// Sub Menu
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4__.createElement(MergedSubMenu, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__["default"])({
key: mergedKey
}, restProps, {
title: label
}), convertItemsToNodes(children, components, prefixCls));
}
// MenuItem & Divider
if (type === 'divider') {
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4__.createElement(MergedDivider, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__["default"])({
key: mergedKey
}, restProps));
}
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4__.createElement(MergedMenuItem, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__["default"])({
key: mergedKey
}, restProps, {
extra: extra
}), label, (!!extra || extra === 0) && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4__.createElement("span", {
className: "".concat(prefixCls, "-item-extra")
}, extra));
}
return null;
}).filter(function (opt) {
return opt;
});
}
function parseItems(children, items, keyPath, components, prefixCls) {
var childNodes = children;
var mergedComponents = (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({
divider: _Divider__WEBPACK_IMPORTED_MODULE_5__["default"],
item: _MenuItem__WEBPACK_IMPORTED_MODULE_6__["default"],
group: _MenuItemGroup__WEBPACK_IMPORTED_MODULE_7__["default"],
submenu: _SubMenu__WEBPACK_IMPORTED_MODULE_8__["default"]
}, components);
if (items) {
childNodes = convertItemsToNodes(items, mergedComponents, prefixCls);
}
return (0,_commonUtil__WEBPACK_IMPORTED_MODULE_9__.parseChildren)(childNodes, keyPath);
}
/***/ }),
/***/ "../../../node_modules/rc-menu/es/utils/timeUtil.js":
/*!**********************************************************!*\
!*** ../../../node_modules/rc-menu/es/utils/timeUtil.js ***!
\**********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ nextSlice: () => (/* binding */ nextSlice)
/* harmony export */ });
function nextSlice(callback) {
/* istanbul ignore next */
Promise.resolve().then(callback);
}
/***/ }),
/***/ "../../../node_modules/rc-menu/es/utils/warnUtil.js":
/*!**********************************************************!*\
!*** ../../../node_modules/rc-menu/es/utils/warnUtil.js ***!
\**********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ warnItemProp: () => (/* binding */ warnItemProp)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ "../../../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js");
/* harmony import */ var rc_util_es_warning__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rc-util/es/warning */ "../../../node_modules/rc-util/es/warning.js");
var _excluded = ["item"];
/**
* `onClick` event return `info.item` which point to react node directly.
* We should warning this since it will not work on FC.
*/
function warnItemProp(_ref) {
var item = _ref.item,
restInfo = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__["default"])(_ref, _excluded);
Object.defineProperty(restInfo, 'item', {
get: function get() {
(0,rc_util_es_warning__WEBPACK_IMPORTED_MODULE_1__["default"])(false, '`info.item` is deprecated since we will move to function component that not provides React Node instance in future.');
return item;
}
});
return restInfo;
}
/***/ }),
/***/ "../../../node_modules/rc-motion/es/CSSMotion.js":
/*!*******************************************************!*\
!*** ../../../node_modules/rc-motion/es/CSSMotion.js ***!
\*******************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__),
/* harmony export */ genCSSMotion: () => (/* binding */ genCSSMotion)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js");
/* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js");
/* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js");
/* harmony import */ var _babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/typeof */ "../../../node_modules/@babel/runtime/helpers/esm/typeof.js");
/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! classnames */ "../../../node_modules/classnames/index.js");
/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var rc_util_es_Dom_findDOMNode__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! rc-util/es/Dom/findDOMNode */ "../../../node_modules/rc-util/es/Dom/findDOMNode.js");
/* harmony import */ var rc_util_es_ref__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! rc-util/es/ref */ "../../../node_modules/rc-util/es/ref.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_7__);
/* harmony import */ var _context__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./context */ "../../../node_modules/rc-motion/es/context.js");
/* harmony import */ var _DomWrapper__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./DomWrapper */ "../../../node_modules/rc-motion/es/DomWrapper.js");
/* harmony import */ var _hooks_useStatus__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./hooks/useStatus */ "../../../node_modules/rc-motion/es/hooks/useStatus.js");
/* harmony import */ var _hooks_useStepQueue__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./hooks/useStepQueue */ "../../../node_modules/rc-motion/es/hooks/useStepQueue.js");
/* harmony import */ var _interface__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./interface */ "../../../node_modules/rc-motion/es/interface.js");
/* harmony import */ var _util_motion__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./util/motion */ "../../../node_modules/rc-motion/es/util/motion.js");
/* eslint-disable react/default-props-match-prop-types, react/no-multi-comp, react/prop-types */
/**
* `transitionSupport` is used for none transition test case.
* Default we use browser transition event support check.
*/
function genCSSMotion(config) {
var transitionSupport = config;
if ((0,_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_3__["default"])(config) === 'object') {
transitionSupport = config.transitionSupport;
}
function isSupportTransition(props, contextMotion) {
return !!(props.motionName && transitionSupport && contextMotion !== false);
}
var CSSMotion = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7__.forwardRef(function (props, ref) {
var _props$visible = props.visible,
visible = _props$visible === void 0 ? true : _props$visible,
_props$removeOnLeave = props.removeOnLeave,
removeOnLeave = _props$removeOnLeave === void 0 ? true : _props$removeOnLeave,
forceRender = props.forceRender,
children = props.children,
motionName = props.motionName,
leavedClassName = props.leavedClassName,
eventProps = props.eventProps;
var _React$useContext = react__WEBPACK_IMPORTED_MODULE_7__.useContext(_context__WEBPACK_IMPORTED_MODULE_8__.Context),
contextMotion = _React$useContext.motion;
var supportMotion = isSupportTransition(props, contextMotion);
// Ref to the react node, it may be a HTMLElement
var nodeRef = (0,react__WEBPACK_IMPORTED_MODULE_7__.useRef)();
// Ref to the dom wrapper in case ref can not pass to HTMLElement
var wrapperNodeRef = (0,react__WEBPACK_IMPORTED_MODULE_7__.useRef)();
function getDomElement() {
try {
// Here we're avoiding call for findDOMNode since it's deprecated
// in strict mode. We're calling it only when node ref is not
// an instance of DOM HTMLElement. Otherwise use
// findDOMNode as a final resort
return nodeRef.current instanceof HTMLElement ? nodeRef.current : (0,rc_util_es_Dom_findDOMNode__WEBPACK_IMPORTED_MODULE_5__["default"])(wrapperNodeRef.current);
} catch (e) {
// Only happen when `motionDeadline` trigger but element removed.
return null;
}
}
var _useStatus = (0,_hooks_useStatus__WEBPACK_IMPORTED_MODULE_10__["default"])(supportMotion, visible, getDomElement, props),
_useStatus2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_useStatus, 4),
status = _useStatus2[0],
statusStep = _useStatus2[1],
statusStyle = _useStatus2[2],
mergedVisible = _useStatus2[3];
// Record whether content has rendered
// Will return null for un-rendered even when `removeOnLeave={false}`
var renderedRef = react__WEBPACK_IMPORTED_MODULE_7__.useRef(mergedVisible);
if (mergedVisible) {
renderedRef.current = true;
}
// ====================== Refs ======================
var setNodeRef = react__WEBPACK_IMPORTED_MODULE_7__.useCallback(function (node) {
nodeRef.current = node;
(0,rc_util_es_ref__WEBPACK_IMPORTED_MODULE_6__.fillRef)(ref, node);
}, [ref]);
// ===================== Render =====================
var motionChildren;
var mergedProps = (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, eventProps), {}, {
visible: visible
});
if (!children) {
// No children
motionChildren = null;
} else if (status === _interface__WEBPACK_IMPORTED_MODULE_12__.STATUS_NONE) {
// Stable children
if (mergedVisible) {
motionChildren = children((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, mergedProps), setNodeRef);
} else if (!removeOnLeave && renderedRef.current && leavedClassName) {
motionChildren = children((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, mergedProps), {}, {
className: leavedClassName
}), setNodeRef);
} else if (forceRender || !removeOnLeave && !leavedClassName) {
motionChildren = children((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, mergedProps), {}, {
style: {
display: 'none'
}
}), setNodeRef);
} else {
motionChildren = null;
}
} else {
// In motion
var statusSuffix;
if (statusStep === _interface__WEBPACK_IMPORTED_MODULE_12__.STEP_PREPARE) {
statusSuffix = 'prepare';
} else if ((0,_hooks_useStepQueue__WEBPACK_IMPORTED_MODULE_11__.isActive)(statusStep)) {
statusSuffix = 'active';
} else if (statusStep === _interface__WEBPACK_IMPORTED_MODULE_12__.STEP_START) {
statusSuffix = 'start';
}
var motionCls = (0,_util_motion__WEBPACK_IMPORTED_MODULE_13__.getTransitionName)(motionName, "".concat(status, "-").concat(statusSuffix));
motionChildren = children((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, mergedProps), {}, {
className: classnames__WEBPACK_IMPORTED_MODULE_4___default()((0,_util_motion__WEBPACK_IMPORTED_MODULE_13__.getTransitionName)(motionName, status), (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])({}, motionCls, motionCls && statusSuffix), motionName, typeof motionName === 'string')),
style: statusStyle
}), setNodeRef);
}
// Auto inject ref if child node not have `ref` props
if ( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7__.isValidElement(motionChildren) && (0,rc_util_es_ref__WEBPACK_IMPORTED_MODULE_6__.supportRef)(motionChildren)) {
var originNodeRef = (0,rc_util_es_ref__WEBPACK_IMPORTED_MODULE_6__.getNodeRef)(motionChildren);
if (!originNodeRef) {
motionChildren = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7__.cloneElement(motionChildren, {
ref: setNodeRef
});
}
}
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7__.createElement(_DomWrapper__WEBPACK_IMPORTED_MODULE_9__["default"], {
ref: wrapperNodeRef
}, motionChildren);
});
CSSMotion.displayName = 'CSSMotion';
return CSSMotion;
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (genCSSMotion(_util_motion__WEBPACK_IMPORTED_MODULE_13__.supportTransition));
/***/ }),
/***/ "../../../node_modules/rc-motion/es/CSSMotionList.js":
/*!***********************************************************!*\
!*** ../../../node_modules/rc-motion/es/CSSMotionList.js ***!
\***********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__),
/* harmony export */ genCSSMotionList: () => (/* binding */ genCSSMotionList)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "../../../node_modules/@babel/runtime/helpers/esm/extends.js");
/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ "../../../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js");
/* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js");
/* harmony import */ var _babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/classCallCheck */ "../../../node_modules/@babel/runtime/helpers/esm/classCallCheck.js");
/* harmony import */ var _babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/esm/createClass */ "../../../node_modules/@babel/runtime/helpers/esm/createClass.js");
/* harmony import */ var _babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/esm/assertThisInitialized */ "../../../node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js");
/* harmony import */ var _babel_runtime_helpers_esm_inherits__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inherits */ "../../../node_modules/@babel/runtime/helpers/esm/inherits.js");
/* harmony import */ var _babel_runtime_helpers_esm_createSuper__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/helpers/esm/createSuper */ "../../../node_modules/@babel/runtime/helpers/esm/createSuper.js");
/* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_9__);
/* harmony import */ var _CSSMotion__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./CSSMotion */ "../../../node_modules/rc-motion/es/CSSMotion.js");
/* harmony import */ var _util_diff__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./util/diff */ "../../../node_modules/rc-motion/es/util/diff.js");
/* harmony import */ var _util_motion__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./util/motion */ "../../../node_modules/rc-motion/es/util/motion.js");
var _excluded = ["component", "children", "onVisibleChanged", "onAllRemoved"],
_excluded2 = ["status"];
/* eslint react/prop-types: 0 */
var MOTION_PROP_NAMES = ['eventProps', 'visible', 'children', 'motionName', 'motionAppear', 'motionEnter', 'motionLeave', 'motionLeaveImmediately', 'motionDeadline', 'removeOnLeave', 'leavedClassName', 'onAppearPrepare', 'onAppearStart', 'onAppearActive', 'onAppearEnd', 'onEnterStart', 'onEnterActive', 'onEnterEnd', 'onLeaveStart', 'onLeaveActive', 'onLeaveEnd'];
/**
* Generate a CSSMotionList component with config
* @param transitionSupport No need since CSSMotionList no longer depends on transition support
* @param CSSMotion CSSMotion component
*/
function genCSSMotionList(transitionSupport) {
var CSSMotion = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _CSSMotion__WEBPACK_IMPORTED_MODULE_10__["default"];
var CSSMotionList = /*#__PURE__*/function (_React$Component) {
(0,_babel_runtime_helpers_esm_inherits__WEBPACK_IMPORTED_MODULE_6__["default"])(CSSMotionList, _React$Component);
var _super = (0,_babel_runtime_helpers_esm_createSuper__WEBPACK_IMPORTED_MODULE_7__["default"])(CSSMotionList);
function CSSMotionList() {
var _this;
(0,_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_3__["default"])(this, CSSMotionList);
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
_this = _super.call.apply(_super, [this].concat(args));
(0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_8__["default"])((0,_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_5__["default"])(_this), "state", {
keyEntities: []
});
// ZombieJ: Return the count of rest keys. It's safe to refactor if need more info.
(0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_8__["default"])((0,_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_5__["default"])(_this), "removeKey", function (removeKey) {
_this.setState(function (prevState) {
var nextKeyEntities = prevState.keyEntities.map(function (entity) {
if (entity.key !== removeKey) return entity;
return (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__["default"])({}, entity), {}, {
status: _util_diff__WEBPACK_IMPORTED_MODULE_11__.STATUS_REMOVED
});
});
return {
keyEntities: nextKeyEntities
};
}, function () {
var keyEntities = _this.state.keyEntities;
var restKeysCount = keyEntities.filter(function (_ref) {
var status = _ref.status;
return status !== _util_diff__WEBPACK_IMPORTED_MODULE_11__.STATUS_REMOVED;
}).length;
if (restKeysCount === 0 && _this.props.onAllRemoved) {
_this.props.onAllRemoved();
}
});
});
return _this;
}
(0,_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_4__["default"])(CSSMotionList, [{
key: "render",
value: function render() {
var _this2 = this;
var keyEntities = this.state.keyEntities;
var _this$props = this.props,
component = _this$props.component,
children = _this$props.children,
_onVisibleChanged = _this$props.onVisibleChanged,
onAllRemoved = _this$props.onAllRemoved,
restProps = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__["default"])(_this$props, _excluded);
var Component = component || react__WEBPACK_IMPORTED_MODULE_9__.Fragment;
var motionProps = {};
MOTION_PROP_NAMES.forEach(function (prop) {
motionProps[prop] = restProps[prop];
delete restProps[prop];
});
delete restProps.keys;
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_9__.createElement(Component, restProps, keyEntities.map(function (_ref2, index) {
var status = _ref2.status,
eventProps = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__["default"])(_ref2, _excluded2);
var visible = status === _util_diff__WEBPACK_IMPORTED_MODULE_11__.STATUS_ADD || status === _util_diff__WEBPACK_IMPORTED_MODULE_11__.STATUS_KEEP;
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_9__.createElement(CSSMotion, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, motionProps, {
key: eventProps.key,
visible: visible,
eventProps: eventProps,
onVisibleChanged: function onVisibleChanged(changedVisible) {
_onVisibleChanged === null || _onVisibleChanged === void 0 || _onVisibleChanged(changedVisible, {
key: eventProps.key
});
if (!changedVisible) {
_this2.removeKey(eventProps.key);
}
}
}), function (props, ref) {
return children((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__["default"])({}, props), {}, {
index: index
}), ref);
});
}));
}
}], [{
key: "getDerivedStateFromProps",
value: function getDerivedStateFromProps(_ref3, _ref4) {
var keys = _ref3.keys;
var keyEntities = _ref4.keyEntities;
var parsedKeyObjects = (0,_util_diff__WEBPACK_IMPORTED_MODULE_11__.parseKeys)(keys);
var mixedKeyEntities = (0,_util_diff__WEBPACK_IMPORTED_MODULE_11__.diffKeys)(keyEntities, parsedKeyObjects);
return {
keyEntities: mixedKeyEntities.filter(function (entity) {
var prevEntity = keyEntities.find(function (_ref5) {
var key = _ref5.key;
return entity.key === key;
});
// Remove if already mark as removed
if (prevEntity && prevEntity.status === _util_diff__WEBPACK_IMPORTED_MODULE_11__.STATUS_REMOVED && entity.status === _util_diff__WEBPACK_IMPORTED_MODULE_11__.STATUS_REMOVE) {
return false;
}
return true;
})
};
}
}]);
return CSSMotionList;
}(react__WEBPACK_IMPORTED_MODULE_9__.Component);
(0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_8__["default"])(CSSMotionList, "defaultProps", {
component: 'div'
});
return CSSMotionList;
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (genCSSMotionList(_util_motion__WEBPACK_IMPORTED_MODULE_12__.supportTransition));
/***/ }),
/***/ "../../../node_modules/rc-motion/es/DomWrapper.js":
/*!********************************************************!*\
!*** ../../../node_modules/rc-motion/es/DomWrapper.js ***!
\********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/classCallCheck */ "../../../node_modules/@babel/runtime/helpers/esm/classCallCheck.js");
/* harmony import */ var _babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/createClass */ "../../../node_modules/@babel/runtime/helpers/esm/createClass.js");
/* harmony import */ var _babel_runtime_helpers_esm_inherits__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inherits */ "../../../node_modules/@babel/runtime/helpers/esm/inherits.js");
/* harmony import */ var _babel_runtime_helpers_esm_createSuper__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/createSuper */ "../../../node_modules/@babel/runtime/helpers/esm/createSuper.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_4__);
var DomWrapper = /*#__PURE__*/function (_React$Component) {
(0,_babel_runtime_helpers_esm_inherits__WEBPACK_IMPORTED_MODULE_2__["default"])(DomWrapper, _React$Component);
var _super = (0,_babel_runtime_helpers_esm_createSuper__WEBPACK_IMPORTED_MODULE_3__["default"])(DomWrapper);
function DomWrapper() {
(0,_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_0__["default"])(this, DomWrapper);
return _super.apply(this, arguments);
}
(0,_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_1__["default"])(DomWrapper, [{
key: "render",
value: function render() {
return this.props.children;
}
}]);
return DomWrapper;
}(react__WEBPACK_IMPORTED_MODULE_4__.Component);
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (DomWrapper);
/***/ }),
/***/ "../../../node_modules/rc-motion/es/context.js":
/*!*****************************************************!*\
!*** ../../../node_modules/rc-motion/es/context.js ***!
\*****************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ Context: () => (/* binding */ Context),
/* harmony export */ "default": () => (/* binding */ MotionProvider)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ "../../../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
var _excluded = ["children"];
var Context = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createContext({});
function MotionProvider(_ref) {
var children = _ref.children,
props = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__["default"])(_ref, _excluded);
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(Context.Provider, {
value: props
}, children);
}
/***/ }),
/***/ "../../../node_modules/rc-motion/es/hooks/useDomMotionEvents.js":
/*!**********************************************************************!*\
!*** ../../../node_modules/rc-motion/es/hooks/useDomMotionEvents.js ***!
\**********************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _util_motion__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/motion */ "../../../node_modules/rc-motion/es/util/motion.js");
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (function (onInternalMotionEnd) {
var cacheElementRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)();
// Remove events
function removeMotionEvents(element) {
if (element) {
element.removeEventListener(_util_motion__WEBPACK_IMPORTED_MODULE_1__.transitionEndName, onInternalMotionEnd);
element.removeEventListener(_util_motion__WEBPACK_IMPORTED_MODULE_1__.animationEndName, onInternalMotionEnd);
}
}
// Patch events
function patchMotionEvents(element) {
if (cacheElementRef.current && cacheElementRef.current !== element) {
removeMotionEvents(cacheElementRef.current);
}
if (element && element !== cacheElementRef.current) {
element.addEventListener(_util_motion__WEBPACK_IMPORTED_MODULE_1__.transitionEndName, onInternalMotionEnd);
element.addEventListener(_util_motion__WEBPACK_IMPORTED_MODULE_1__.animationEndName, onInternalMotionEnd);
// Save as cache in case dom removed trigger by `motionDeadline`
cacheElementRef.current = element;
}
}
// Clean up when removed
react__WEBPACK_IMPORTED_MODULE_0__.useEffect(function () {
return function () {
removeMotionEvents(cacheElementRef.current);
};
}, []);
return [patchMotionEvents, removeMotionEvents];
});
/***/ }),
/***/ "../../../node_modules/rc-motion/es/hooks/useIsomorphicLayoutEffect.js":
/*!*****************************************************************************!*\
!*** ../../../node_modules/rc-motion/es/hooks/useIsomorphicLayoutEffect.js ***!
\*****************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var rc_util_es_Dom_canUseDom__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rc-util/es/Dom/canUseDom */ "../../../node_modules/rc-util/es/Dom/canUseDom.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
// It's safe to use `useLayoutEffect` but the warning is annoying
var useIsomorphicLayoutEffect = (0,rc_util_es_Dom_canUseDom__WEBPACK_IMPORTED_MODULE_0__["default"])() ? react__WEBPACK_IMPORTED_MODULE_1__.useLayoutEffect : react__WEBPACK_IMPORTED_MODULE_1__.useEffect;
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (useIsomorphicLayoutEffect);
/***/ }),
/***/ "../../../node_modules/rc-motion/es/hooks/useNextFrame.js":
/*!****************************************************************!*\
!*** ../../../node_modules/rc-motion/es/hooks/useNextFrame.js ***!
\****************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var rc_util_es_raf__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rc-util/es/raf */ "../../../node_modules/rc-util/es/raf.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (function () {
var nextFrameRef = react__WEBPACK_IMPORTED_MODULE_1__.useRef(null);
function cancelNextFrame() {
rc_util_es_raf__WEBPACK_IMPORTED_MODULE_0__["default"].cancel(nextFrameRef.current);
}
function nextFrame(callback) {
var delay = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2;
cancelNextFrame();
var nextFrameId = (0,rc_util_es_raf__WEBPACK_IMPORTED_MODULE_0__["default"])(function () {
if (delay <= 1) {
callback({
isCanceled: function isCanceled() {
return nextFrameId !== nextFrameRef.current;
}
});
} else {
nextFrame(callback, delay - 1);
}
});
nextFrameRef.current = nextFrameId;
}
react__WEBPACK_IMPORTED_MODULE_1__.useEffect(function () {
return function () {
cancelNextFrame();
};
}, []);
return [nextFrame, cancelNextFrame];
});
/***/ }),
/***/ "../../../node_modules/rc-motion/es/hooks/useStatus.js":
/*!*************************************************************!*\
!*** ../../../node_modules/rc-motion/es/hooks/useStatus.js ***!
\*************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ useStatus)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js");
/* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js");
/* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js");
/* harmony import */ var rc_util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! rc-util */ "../../../node_modules/rc-util/es/index.js");
/* harmony import */ var rc_util_es_hooks_useState__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! rc-util/es/hooks/useState */ "../../../node_modules/rc-util/es/hooks/useState.js");
/* harmony import */ var rc_util_es_hooks_useSyncState__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! rc-util/es/hooks/useSyncState */ "../../../node_modules/rc-util/es/hooks/useSyncState.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_6__);
/* harmony import */ var _interface__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../interface */ "../../../node_modules/rc-motion/es/interface.js");
/* harmony import */ var _useDomMotionEvents__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./useDomMotionEvents */ "../../../node_modules/rc-motion/es/hooks/useDomMotionEvents.js");
/* harmony import */ var _useIsomorphicLayoutEffect__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./useIsomorphicLayoutEffect */ "../../../node_modules/rc-motion/es/hooks/useIsomorphicLayoutEffect.js");
/* harmony import */ var _useStepQueue__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./useStepQueue */ "../../../node_modules/rc-motion/es/hooks/useStepQueue.js");
function useStatus(supportMotion, visible, getElement, _ref) {
var _ref$motionEnter = _ref.motionEnter,
motionEnter = _ref$motionEnter === void 0 ? true : _ref$motionEnter,
_ref$motionAppear = _ref.motionAppear,
motionAppear = _ref$motionAppear === void 0 ? true : _ref$motionAppear,
_ref$motionLeave = _ref.motionLeave,
motionLeave = _ref$motionLeave === void 0 ? true : _ref$motionLeave,
motionDeadline = _ref.motionDeadline,
motionLeaveImmediately = _ref.motionLeaveImmediately,
onAppearPrepare = _ref.onAppearPrepare,
onEnterPrepare = _ref.onEnterPrepare,
onLeavePrepare = _ref.onLeavePrepare,
onAppearStart = _ref.onAppearStart,
onEnterStart = _ref.onEnterStart,
onLeaveStart = _ref.onLeaveStart,
onAppearActive = _ref.onAppearActive,
onEnterActive = _ref.onEnterActive,
onLeaveActive = _ref.onLeaveActive,
onAppearEnd = _ref.onAppearEnd,
onEnterEnd = _ref.onEnterEnd,
onLeaveEnd = _ref.onLeaveEnd,
onVisibleChanged = _ref.onVisibleChanged;
// Used for outer render usage to avoid `visible: false & status: none` to render nothing
var _useState = (0,rc_util_es_hooks_useState__WEBPACK_IMPORTED_MODULE_4__["default"])(),
_useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_useState, 2),
asyncVisible = _useState2[0],
setAsyncVisible = _useState2[1];
var _useSyncState = (0,rc_util_es_hooks_useSyncState__WEBPACK_IMPORTED_MODULE_5__["default"])(_interface__WEBPACK_IMPORTED_MODULE_7__.STATUS_NONE),
_useSyncState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_useSyncState, 2),
getStatus = _useSyncState2[0],
setStatus = _useSyncState2[1];
var _useState3 = (0,rc_util_es_hooks_useState__WEBPACK_IMPORTED_MODULE_4__["default"])(null),
_useState4 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_useState3, 2),
style = _useState4[0],
setStyle = _useState4[1];
var currentStatus = getStatus();
var mountedRef = (0,react__WEBPACK_IMPORTED_MODULE_6__.useRef)(false);
var deadlineRef = (0,react__WEBPACK_IMPORTED_MODULE_6__.useRef)(null);
// =========================== Dom Node ===========================
function getDomElement() {
return getElement();
}
// ========================== Motion End ==========================
var activeRef = (0,react__WEBPACK_IMPORTED_MODULE_6__.useRef)(false);
/**
* Clean up status & style
*/
function updateMotionEndStatus() {
setStatus(_interface__WEBPACK_IMPORTED_MODULE_7__.STATUS_NONE);
setStyle(null, true);
}
var onInternalMotionEnd = (0,rc_util__WEBPACK_IMPORTED_MODULE_3__.useEvent)(function (event) {
var status = getStatus();
// Do nothing since not in any transition status.
// This may happen when `motionDeadline` trigger.
if (status === _interface__WEBPACK_IMPORTED_MODULE_7__.STATUS_NONE) {
return;
}
var element = getDomElement();
if (event && !event.deadline && event.target !== element) {
// event exists
// not initiated by deadline
// transitionEnd not fired by inner elements
return;
}
var currentActive = activeRef.current;
var canEnd;
if (status === _interface__WEBPACK_IMPORTED_MODULE_7__.STATUS_APPEAR && currentActive) {
canEnd = onAppearEnd === null || onAppearEnd === void 0 ? void 0 : onAppearEnd(element, event);
} else if (status === _interface__WEBPACK_IMPORTED_MODULE_7__.STATUS_ENTER && currentActive) {
canEnd = onEnterEnd === null || onEnterEnd === void 0 ? void 0 : onEnterEnd(element, event);
} else if (status === _interface__WEBPACK_IMPORTED_MODULE_7__.STATUS_LEAVE && currentActive) {
canEnd = onLeaveEnd === null || onLeaveEnd === void 0 ? void 0 : onLeaveEnd(element, event);
}
// Only update status when `canEnd` and not destroyed
if (currentActive && canEnd !== false) {
updateMotionEndStatus();
}
});
var _useDomMotionEvents = (0,_useDomMotionEvents__WEBPACK_IMPORTED_MODULE_8__["default"])(onInternalMotionEnd),
_useDomMotionEvents2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_useDomMotionEvents, 1),
patchMotionEvents = _useDomMotionEvents2[0];
// ============================= Step =============================
var getEventHandlers = function getEventHandlers(targetStatus) {
switch (targetStatus) {
case _interface__WEBPACK_IMPORTED_MODULE_7__.STATUS_APPEAR:
return (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])({}, _interface__WEBPACK_IMPORTED_MODULE_7__.STEP_PREPARE, onAppearPrepare), _interface__WEBPACK_IMPORTED_MODULE_7__.STEP_START, onAppearStart), _interface__WEBPACK_IMPORTED_MODULE_7__.STEP_ACTIVE, onAppearActive);
case _interface__WEBPACK_IMPORTED_MODULE_7__.STATUS_ENTER:
return (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])({}, _interface__WEBPACK_IMPORTED_MODULE_7__.STEP_PREPARE, onEnterPrepare), _interface__WEBPACK_IMPORTED_MODULE_7__.STEP_START, onEnterStart), _interface__WEBPACK_IMPORTED_MODULE_7__.STEP_ACTIVE, onEnterActive);
case _interface__WEBPACK_IMPORTED_MODULE_7__.STATUS_LEAVE:
return (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])({}, _interface__WEBPACK_IMPORTED_MODULE_7__.STEP_PREPARE, onLeavePrepare), _interface__WEBPACK_IMPORTED_MODULE_7__.STEP_START, onLeaveStart), _interface__WEBPACK_IMPORTED_MODULE_7__.STEP_ACTIVE, onLeaveActive);
default:
return {};
}
};
var eventHandlers = react__WEBPACK_IMPORTED_MODULE_6__.useMemo(function () {
return getEventHandlers(currentStatus);
}, [currentStatus]);
var _useStepQueue = (0,_useStepQueue__WEBPACK_IMPORTED_MODULE_10__["default"])(currentStatus, !supportMotion, function (newStep) {
// Only prepare step can be skip
if (newStep === _interface__WEBPACK_IMPORTED_MODULE_7__.STEP_PREPARE) {
var onPrepare = eventHandlers[_interface__WEBPACK_IMPORTED_MODULE_7__.STEP_PREPARE];
if (!onPrepare) {
return _useStepQueue__WEBPACK_IMPORTED_MODULE_10__.SkipStep;
}
return onPrepare(getDomElement());
}
// Rest step is sync update
if (step in eventHandlers) {
var _eventHandlers$step;
setStyle(((_eventHandlers$step = eventHandlers[step]) === null || _eventHandlers$step === void 0 ? void 0 : _eventHandlers$step.call(eventHandlers, getDomElement(), null)) || null);
}
if (step === _interface__WEBPACK_IMPORTED_MODULE_7__.STEP_ACTIVE && currentStatus !== _interface__WEBPACK_IMPORTED_MODULE_7__.STATUS_NONE) {
// Patch events when motion needed
patchMotionEvents(getDomElement());
if (motionDeadline > 0) {
clearTimeout(deadlineRef.current);
deadlineRef.current = setTimeout(function () {
onInternalMotionEnd({
deadline: true
});
}, motionDeadline);
}
}
if (step === _interface__WEBPACK_IMPORTED_MODULE_7__.STEP_PREPARED) {
updateMotionEndStatus();
}
return _useStepQueue__WEBPACK_IMPORTED_MODULE_10__.DoStep;
}),
_useStepQueue2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_useStepQueue, 2),
startStep = _useStepQueue2[0],
step = _useStepQueue2[1];
var active = (0,_useStepQueue__WEBPACK_IMPORTED_MODULE_10__.isActive)(step);
activeRef.current = active;
// ============================ Status ============================
var visibleRef = (0,react__WEBPACK_IMPORTED_MODULE_6__.useRef)(null);
// Update with new status
(0,_useIsomorphicLayoutEffect__WEBPACK_IMPORTED_MODULE_9__["default"])(function () {
// When use Suspense, the `visible` will repeat trigger,
// But not real change of the `visible`, we need to skip it.
// https://github.com/ant-design/ant-design/issues/44379
if (mountedRef.current && visibleRef.current === visible) {
return;
}
setAsyncVisible(visible);
var isMounted = mountedRef.current;
mountedRef.current = true;
// if (!supportMotion) {
// return;
// }
var nextStatus;
// Appear
if (!isMounted && visible && motionAppear) {
nextStatus = _interface__WEBPACK_IMPORTED_MODULE_7__.STATUS_APPEAR;
}
// Enter
if (isMounted && visible && motionEnter) {
nextStatus = _interface__WEBPACK_IMPORTED_MODULE_7__.STATUS_ENTER;
}
// Leave
if (isMounted && !visible && motionLeave || !isMounted && motionLeaveImmediately && !visible && motionLeave) {
nextStatus = _interface__WEBPACK_IMPORTED_MODULE_7__.STATUS_LEAVE;
}
var nextEventHandlers = getEventHandlers(nextStatus);
// Update to next status
if (nextStatus && (supportMotion || nextEventHandlers[_interface__WEBPACK_IMPORTED_MODULE_7__.STEP_PREPARE])) {
setStatus(nextStatus);
startStep();
} else {
// Set back in case no motion but prev status has prepare step
setStatus(_interface__WEBPACK_IMPORTED_MODULE_7__.STATUS_NONE);
}
visibleRef.current = visible;
}, [visible]);
// ============================ Effect ============================
// Reset when motion changed
(0,react__WEBPACK_IMPORTED_MODULE_6__.useEffect)(function () {
if (
// Cancel appear
currentStatus === _interface__WEBPACK_IMPORTED_MODULE_7__.STATUS_APPEAR && !motionAppear ||
// Cancel enter
currentStatus === _interface__WEBPACK_IMPORTED_MODULE_7__.STATUS_ENTER && !motionEnter ||
// Cancel leave
currentStatus === _interface__WEBPACK_IMPORTED_MODULE_7__.STATUS_LEAVE && !motionLeave) {
setStatus(_interface__WEBPACK_IMPORTED_MODULE_7__.STATUS_NONE);
}
}, [motionAppear, motionEnter, motionLeave]);
(0,react__WEBPACK_IMPORTED_MODULE_6__.useEffect)(function () {
return function () {
mountedRef.current = false;
clearTimeout(deadlineRef.current);
};
}, []);
// Trigger `onVisibleChanged`
var firstMountChangeRef = react__WEBPACK_IMPORTED_MODULE_6__.useRef(false);
(0,react__WEBPACK_IMPORTED_MODULE_6__.useEffect)(function () {
// [visible & motion not end] => [!visible & motion end] still need trigger onVisibleChanged
if (asyncVisible) {
firstMountChangeRef.current = true;
}
if (asyncVisible !== undefined && currentStatus === _interface__WEBPACK_IMPORTED_MODULE_7__.STATUS_NONE) {
// Skip first render is invisible since it's nothing changed
if (firstMountChangeRef.current || asyncVisible) {
onVisibleChanged === null || onVisibleChanged === void 0 || onVisibleChanged(asyncVisible);
}
firstMountChangeRef.current = true;
}
}, [asyncVisible, currentStatus]);
// ============================ Styles ============================
var mergedStyle = style;
if (eventHandlers[_interface__WEBPACK_IMPORTED_MODULE_7__.STEP_PREPARE] && step === _interface__WEBPACK_IMPORTED_MODULE_7__.STEP_START) {
mergedStyle = (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({
transition: 'none'
}, mergedStyle);
}
return [currentStatus, step, mergedStyle, asyncVisible !== null && asyncVisible !== void 0 ? asyncVisible : visible];
}
/***/ }),
/***/ "../../../node_modules/rc-motion/es/hooks/useStepQueue.js":
/*!****************************************************************!*\
!*** ../../../node_modules/rc-motion/es/hooks/useStepQueue.js ***!
\****************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ DoStep: () => (/* binding */ DoStep),
/* harmony export */ SkipStep: () => (/* binding */ SkipStep),
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__),
/* harmony export */ isActive: () => (/* binding */ isActive)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js");
/* harmony import */ var rc_util_es_hooks_useState__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rc-util/es/hooks/useState */ "../../../node_modules/rc-util/es/hooks/useState.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _interface__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../interface */ "../../../node_modules/rc-motion/es/interface.js");
/* harmony import */ var _useIsomorphicLayoutEffect__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./useIsomorphicLayoutEffect */ "../../../node_modules/rc-motion/es/hooks/useIsomorphicLayoutEffect.js");
/* harmony import */ var _useNextFrame__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./useNextFrame */ "../../../node_modules/rc-motion/es/hooks/useNextFrame.js");
var FULL_STEP_QUEUE = [_interface__WEBPACK_IMPORTED_MODULE_3__.STEP_PREPARE, _interface__WEBPACK_IMPORTED_MODULE_3__.STEP_START, _interface__WEBPACK_IMPORTED_MODULE_3__.STEP_ACTIVE, _interface__WEBPACK_IMPORTED_MODULE_3__.STEP_ACTIVATED];
var SIMPLE_STEP_QUEUE = [_interface__WEBPACK_IMPORTED_MODULE_3__.STEP_PREPARE, _interface__WEBPACK_IMPORTED_MODULE_3__.STEP_PREPARED];
/** Skip current step */
var SkipStep = false;
/** Current step should be update in */
var DoStep = true;
function isActive(step) {
return step === _interface__WEBPACK_IMPORTED_MODULE_3__.STEP_ACTIVE || step === _interface__WEBPACK_IMPORTED_MODULE_3__.STEP_ACTIVATED;
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (function (status, prepareOnly, callback) {
var _useState = (0,rc_util_es_hooks_useState__WEBPACK_IMPORTED_MODULE_1__["default"])(_interface__WEBPACK_IMPORTED_MODULE_3__.STEP_NONE),
_useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__["default"])(_useState, 2),
step = _useState2[0],
setStep = _useState2[1];
var _useNextFrame = (0,_useNextFrame__WEBPACK_IMPORTED_MODULE_5__["default"])(),
_useNextFrame2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__["default"])(_useNextFrame, 2),
nextFrame = _useNextFrame2[0],
cancelNextFrame = _useNextFrame2[1];
function startQueue() {
setStep(_interface__WEBPACK_IMPORTED_MODULE_3__.STEP_PREPARE, true);
}
var STEP_QUEUE = prepareOnly ? SIMPLE_STEP_QUEUE : FULL_STEP_QUEUE;
(0,_useIsomorphicLayoutEffect__WEBPACK_IMPORTED_MODULE_4__["default"])(function () {
if (step !== _interface__WEBPACK_IMPORTED_MODULE_3__.STEP_NONE && step !== _interface__WEBPACK_IMPORTED_MODULE_3__.STEP_ACTIVATED) {
var index = STEP_QUEUE.indexOf(step);
var nextStep = STEP_QUEUE[index + 1];
var result = callback(step);
if (result === SkipStep) {
// Skip when no needed
setStep(nextStep, true);
} else if (nextStep) {
// Do as frame for step update
nextFrame(function (info) {
function doNext() {
// Skip since current queue is ood
if (info.isCanceled()) return;
setStep(nextStep, true);
}
if (result === true) {
doNext();
} else {
// Only promise should be async
Promise.resolve(result).then(doNext);
}
});
}
}
}, [status, step]);
react__WEBPACK_IMPORTED_MODULE_2__.useEffect(function () {
return function () {
cancelNextFrame();
};
}, []);
return [startQueue, step];
});
/***/ }),
/***/ "../../../node_modules/rc-motion/es/index.js":
/*!***************************************************!*\
!*** ../../../node_modules/rc-motion/es/index.js ***!
\***************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ CSSMotionList: () => (/* reexport safe */ _CSSMotionList__WEBPACK_IMPORTED_MODULE_1__["default"]),
/* harmony export */ Provider: () => (/* reexport safe */ _context__WEBPACK_IMPORTED_MODULE_2__["default"]),
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _CSSMotion__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./CSSMotion */ "../../../node_modules/rc-motion/es/CSSMotion.js");
/* harmony import */ var _CSSMotionList__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./CSSMotionList */ "../../../node_modules/rc-motion/es/CSSMotionList.js");
/* harmony import */ var _context__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./context */ "../../../node_modules/rc-motion/es/context.js");
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_CSSMotion__WEBPACK_IMPORTED_MODULE_0__["default"]);
/***/ }),
/***/ "../../../node_modules/rc-motion/es/interface.js":
/*!*******************************************************!*\
!*** ../../../node_modules/rc-motion/es/interface.js ***!
\*******************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ STATUS_APPEAR: () => (/* binding */ STATUS_APPEAR),
/* harmony export */ STATUS_ENTER: () => (/* binding */ STATUS_ENTER),
/* harmony export */ STATUS_LEAVE: () => (/* binding */ STATUS_LEAVE),
/* harmony export */ STATUS_NONE: () => (/* binding */ STATUS_NONE),
/* harmony export */ STEP_ACTIVATED: () => (/* binding */ STEP_ACTIVATED),
/* harmony export */ STEP_ACTIVE: () => (/* binding */ STEP_ACTIVE),
/* harmony export */ STEP_NONE: () => (/* binding */ STEP_NONE),
/* harmony export */ STEP_PREPARE: () => (/* binding */ STEP_PREPARE),
/* harmony export */ STEP_PREPARED: () => (/* binding */ STEP_PREPARED),
/* harmony export */ STEP_START: () => (/* binding */ STEP_START)
/* harmony export */ });
var STATUS_NONE = 'none';
var STATUS_APPEAR = 'appear';
var STATUS_ENTER = 'enter';
var STATUS_LEAVE = 'leave';
var STEP_NONE = 'none';
var STEP_PREPARE = 'prepare';
var STEP_START = 'start';
var STEP_ACTIVE = 'active';
var STEP_ACTIVATED = 'end';
/**
* Used for disabled motion case.
* Prepare stage will still work but start & active will be skipped.
*/
var STEP_PREPARED = 'prepared';
/***/ }),
/***/ "../../../node_modules/rc-motion/es/util/diff.js":
/*!*******************************************************!*\
!*** ../../../node_modules/rc-motion/es/util/diff.js ***!
\*******************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ STATUS_ADD: () => (/* binding */ STATUS_ADD),
/* harmony export */ STATUS_KEEP: () => (/* binding */ STATUS_KEEP),
/* harmony export */ STATUS_REMOVE: () => (/* binding */ STATUS_REMOVE),
/* harmony export */ STATUS_REMOVED: () => (/* binding */ STATUS_REMOVED),
/* harmony export */ diffKeys: () => (/* binding */ diffKeys),
/* harmony export */ parseKeys: () => (/* binding */ parseKeys),
/* harmony export */ wrapKeyToObject: () => (/* binding */ wrapKeyToObject)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js");
/* harmony import */ var _babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/typeof */ "../../../node_modules/@babel/runtime/helpers/esm/typeof.js");
var STATUS_ADD = 'add';
var STATUS_KEEP = 'keep';
var STATUS_REMOVE = 'remove';
var STATUS_REMOVED = 'removed';
function wrapKeyToObject(key) {
var keyObj;
if (key && (0,_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_1__["default"])(key) === 'object' && 'key' in key) {
keyObj = key;
} else {
keyObj = {
key: key
};
}
return (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({}, keyObj), {}, {
key: String(keyObj.key)
});
}
function parseKeys() {
var keys = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
return keys.map(wrapKeyToObject);
}
function diffKeys() {
var prevKeys = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
var currentKeys = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
var list = [];
var currentIndex = 0;
var currentLen = currentKeys.length;
var prevKeyObjects = parseKeys(prevKeys);
var currentKeyObjects = parseKeys(currentKeys);
// Check prev keys to insert or keep
prevKeyObjects.forEach(function (keyObj) {
var hit = false;
for (var i = currentIndex; i < currentLen; i += 1) {
var currentKeyObj = currentKeyObjects[i];
if (currentKeyObj.key === keyObj.key) {
// New added keys should add before current key
if (currentIndex < i) {
list = list.concat(currentKeyObjects.slice(currentIndex, i).map(function (obj) {
return (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({}, obj), {}, {
status: STATUS_ADD
});
}));
currentIndex = i;
}
list.push((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({}, currentKeyObj), {}, {
status: STATUS_KEEP
}));
currentIndex += 1;
hit = true;
break;
}
}
// If not hit, it means key is removed
if (!hit) {
list.push((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({}, keyObj), {}, {
status: STATUS_REMOVE
}));
}
});
// Add rest to the list
if (currentIndex < currentLen) {
list = list.concat(currentKeyObjects.slice(currentIndex).map(function (obj) {
return (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({}, obj), {}, {
status: STATUS_ADD
});
}));
}
/**
* Merge same key when it remove and add again:
* [1 - add, 2 - keep, 1 - remove] -> [1 - keep, 2 - keep]
*/
var keys = {};
list.forEach(function (_ref) {
var key = _ref.key;
keys[key] = (keys[key] || 0) + 1;
});
var duplicatedKeys = Object.keys(keys).filter(function (key) {
return keys[key] > 1;
});
duplicatedKeys.forEach(function (matchKey) {
// Remove `STATUS_REMOVE` node.
list = list.filter(function (_ref2) {
var key = _ref2.key,
status = _ref2.status;
return key !== matchKey || status !== STATUS_REMOVE;
});
// Update `STATUS_ADD` to `STATUS_KEEP`
list.forEach(function (node) {
if (node.key === matchKey) {
// eslint-disable-next-line no-param-reassign
node.status = STATUS_KEEP;
}
});
});
return list;
}
/***/ }),
/***/ "../../../node_modules/rc-motion/es/util/motion.js":
/*!*********************************************************!*\
!*** ../../../node_modules/rc-motion/es/util/motion.js ***!
\*********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ animationEndName: () => (/* binding */ animationEndName),
/* harmony export */ getTransitionName: () => (/* binding */ getTransitionName),
/* harmony export */ getVendorPrefixedEventName: () => (/* binding */ getVendorPrefixedEventName),
/* harmony export */ getVendorPrefixes: () => (/* binding */ getVendorPrefixes),
/* harmony export */ supportTransition: () => (/* binding */ supportTransition),
/* harmony export */ transitionEndName: () => (/* binding */ transitionEndName)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/typeof */ "../../../node_modules/@babel/runtime/helpers/esm/typeof.js");
/* harmony import */ var rc_util_es_Dom_canUseDom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rc-util/es/Dom/canUseDom */ "../../../node_modules/rc-util/es/Dom/canUseDom.js");
// ================= Transition =================
// Event wrapper. Copy from react source code
function makePrefixMap(styleProp, eventName) {
var prefixes = {};
prefixes[styleProp.toLowerCase()] = eventName.toLowerCase();
prefixes["Webkit".concat(styleProp)] = "webkit".concat(eventName);
prefixes["Moz".concat(styleProp)] = "moz".concat(eventName);
prefixes["ms".concat(styleProp)] = "MS".concat(eventName);
prefixes["O".concat(styleProp)] = "o".concat(eventName.toLowerCase());
return prefixes;
}
function getVendorPrefixes(domSupport, win) {
var prefixes = {
animationend: makePrefixMap('Animation', 'AnimationEnd'),
transitionend: makePrefixMap('Transition', 'TransitionEnd')
};
if (domSupport) {
if (!('AnimationEvent' in win)) {
delete prefixes.animationend.animation;
}
if (!('TransitionEvent' in win)) {
delete prefixes.transitionend.transition;
}
}
return prefixes;
}
var vendorPrefixes = getVendorPrefixes((0,rc_util_es_Dom_canUseDom__WEBPACK_IMPORTED_MODULE_1__["default"])(), typeof window !== 'undefined' ? window : {});
var style = {};
if ((0,rc_util_es_Dom_canUseDom__WEBPACK_IMPORTED_MODULE_1__["default"])()) {
var _document$createEleme = document.createElement('div');
style = _document$createEleme.style;
}
var prefixedEventNames = {};
function getVendorPrefixedEventName(eventName) {
if (prefixedEventNames[eventName]) {
return prefixedEventNames[eventName];
}
var prefixMap = vendorPrefixes[eventName];
if (prefixMap) {
var stylePropList = Object.keys(prefixMap);
var len = stylePropList.length;
for (var i = 0; i < len; i += 1) {
var styleProp = stylePropList[i];
if (Object.prototype.hasOwnProperty.call(prefixMap, styleProp) && styleProp in style) {
prefixedEventNames[eventName] = prefixMap[styleProp];
return prefixedEventNames[eventName];
}
}
}
return '';
}
var internalAnimationEndName = getVendorPrefixedEventName('animationend');
var internalTransitionEndName = getVendorPrefixedEventName('transitionend');
var supportTransition = !!(internalAnimationEndName && internalTransitionEndName);
var animationEndName = internalAnimationEndName || 'animationend';
var transitionEndName = internalTransitionEndName || 'transitionend';
function getTransitionName(transitionName, transitionType) {
if (!transitionName) return null;
if ((0,_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_0__["default"])(transitionName) === 'object') {
var type = transitionType.replace(/-\w/g, function (match) {
return match[1].toUpperCase();
});
return transitionName[type];
}
return "".concat(transitionName, "-").concat(transitionType);
}
/***/ }),
/***/ "../../../node_modules/rc-notification/es/Notice.js":
/*!**********************************************************!*\
!*** ../../../node_modules/rc-notification/es/Notice.js ***!
\**********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "../../../node_modules/@babel/runtime/helpers/esm/extends.js");
/* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js");
/* harmony import */ var _babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/typeof */ "../../../node_modules/@babel/runtime/helpers/esm/typeof.js");
/* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js");
/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! classnames */ "../../../node_modules/classnames/index.js");
/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! rc-util/es/KeyCode */ "../../../node_modules/rc-util/es/KeyCode.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_6__);
/* harmony import */ var rc_util_es_pickAttrs__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! rc-util/es/pickAttrs */ "../../../node_modules/rc-util/es/pickAttrs.js");
var Notify = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_6__.forwardRef(function (props, ref) {
var prefixCls = props.prefixCls,
style = props.style,
className = props.className,
_props$duration = props.duration,
duration = _props$duration === void 0 ? 4.5 : _props$duration,
showProgress = props.showProgress,
_props$pauseOnHover = props.pauseOnHover,
pauseOnHover = _props$pauseOnHover === void 0 ? true : _props$pauseOnHover,
eventKey = props.eventKey,
content = props.content,
closable = props.closable,
_props$closeIcon = props.closeIcon,
closeIcon = _props$closeIcon === void 0 ? 'x' : _props$closeIcon,
divProps = props.props,
onClick = props.onClick,
onNoticeClose = props.onNoticeClose,
times = props.times,
forcedHovering = props.hovering;
var _React$useState = react__WEBPACK_IMPORTED_MODULE_6__.useState(false),
_React$useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__["default"])(_React$useState, 2),
hovering = _React$useState2[0],
setHovering = _React$useState2[1];
var _React$useState3 = react__WEBPACK_IMPORTED_MODULE_6__.useState(0),
_React$useState4 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__["default"])(_React$useState3, 2),
percent = _React$useState4[0],
setPercent = _React$useState4[1];
var _React$useState5 = react__WEBPACK_IMPORTED_MODULE_6__.useState(0),
_React$useState6 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__["default"])(_React$useState5, 2),
spentTime = _React$useState6[0],
setSpentTime = _React$useState6[1];
var mergedHovering = forcedHovering || hovering;
var mergedShowProgress = duration > 0 && showProgress;
// ======================== Close =========================
var onInternalClose = function onInternalClose() {
onNoticeClose(eventKey);
};
var onCloseKeyDown = function onCloseKeyDown(e) {
if (e.key === 'Enter' || e.code === 'Enter' || e.keyCode === rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_5__["default"].ENTER) {
onInternalClose();
}
};
// ======================== Effect ========================
react__WEBPACK_IMPORTED_MODULE_6__.useEffect(function () {
if (!mergedHovering && duration > 0) {
var start = Date.now() - spentTime;
var timeout = setTimeout(function () {
onInternalClose();
}, duration * 1000 - spentTime);
return function () {
if (pauseOnHover) {
clearTimeout(timeout);
}
setSpentTime(Date.now() - start);
};
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [duration, mergedHovering, times]);
react__WEBPACK_IMPORTED_MODULE_6__.useEffect(function () {
if (!mergedHovering && mergedShowProgress && (pauseOnHover || spentTime === 0)) {
var start = performance.now();
var animationFrame;
var calculate = function calculate() {
cancelAnimationFrame(animationFrame);
animationFrame = requestAnimationFrame(function (timestamp) {
var runtime = timestamp + spentTime - start;
var progress = Math.min(runtime / (duration * 1000), 1);
setPercent(progress * 100);
if (progress < 1) {
calculate();
}
});
};
calculate();
return function () {
if (pauseOnHover) {
cancelAnimationFrame(animationFrame);
}
};
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [duration, spentTime, mergedHovering, mergedShowProgress, times]);
// ======================== Closable ========================
var closableObj = react__WEBPACK_IMPORTED_MODULE_6__.useMemo(function () {
if ((0,_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_2__["default"])(closable) === 'object' && closable !== null) {
return closable;
}
if (closable) {
return {
closeIcon: closeIcon
};
}
return {};
}, [closable, closeIcon]);
var ariaProps = (0,rc_util_es_pickAttrs__WEBPACK_IMPORTED_MODULE_7__["default"])(closableObj, true);
// ======================== Progress ========================
var validPercent = 100 - (!percent || percent < 0 ? 0 : percent > 100 ? 100 : percent);
// ======================== Render ========================
var noticePrefixCls = "".concat(prefixCls, "-notice");
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_6__.createElement("div", (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, divProps, {
ref: ref,
className: classnames__WEBPACK_IMPORTED_MODULE_4___default()(noticePrefixCls, className, (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])({}, "".concat(noticePrefixCls, "-closable"), closable)),
style: style,
onMouseEnter: function onMouseEnter(e) {
var _divProps$onMouseEnte;
setHovering(true);
divProps === null || divProps === void 0 || (_divProps$onMouseEnte = divProps.onMouseEnter) === null || _divProps$onMouseEnte === void 0 || _divProps$onMouseEnte.call(divProps, e);
},
onMouseLeave: function onMouseLeave(e) {
var _divProps$onMouseLeav;
setHovering(false);
divProps === null || divProps === void 0 || (_divProps$onMouseLeav = divProps.onMouseLeave) === null || _divProps$onMouseLeav === void 0 || _divProps$onMouseLeav.call(divProps, e);
},
onClick: onClick
}), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_6__.createElement("div", {
className: "".concat(noticePrefixCls, "-content")
}, content), closable && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_6__.createElement("a", (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({
tabIndex: 0,
className: "".concat(noticePrefixCls, "-close"),
onKeyDown: onCloseKeyDown,
"aria-label": "Close"
}, ariaProps, {
onClick: function onClick(e) {
e.preventDefault();
e.stopPropagation();
onInternalClose();
}
}), closableObj.closeIcon), mergedShowProgress && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_6__.createElement("progress", {
className: "".concat(noticePrefixCls, "-progress"),
max: "100",
value: validPercent
}, validPercent + '%'));
});
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Notify);
/***/ }),
/***/ "../../../node_modules/rc-notification/es/NoticeList.js":
/*!**************************************************************!*\
!*** ../../../node_modules/rc-notification/es/NoticeList.js ***!
\**************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "../../../node_modules/@babel/runtime/helpers/esm/extends.js");
/* harmony import */ var _babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ "../../../node_modules/@babel/runtime/helpers/esm/toConsumableArray.js");
/* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js");
/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ "../../../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js");
/* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js");
/* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_6__);
/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! classnames */ "../../../node_modules/classnames/index.js");
/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_7__);
/* harmony import */ var rc_motion__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! rc-motion */ "../../../node_modules/rc-motion/es/index.js");
/* harmony import */ var _Notice__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./Notice */ "../../../node_modules/rc-notification/es/Notice.js");
/* harmony import */ var _NotificationProvider__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./NotificationProvider */ "../../../node_modules/rc-notification/es/NotificationProvider.js");
/* harmony import */ var _hooks_useStack__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./hooks/useStack */ "../../../node_modules/rc-notification/es/hooks/useStack.js");
var _excluded = ["className", "style", "classNames", "styles"];
var NoticeList = function NoticeList(props) {
var configList = props.configList,
placement = props.placement,
prefixCls = props.prefixCls,
className = props.className,
style = props.style,
motion = props.motion,
onAllNoticeRemoved = props.onAllNoticeRemoved,
onNoticeClose = props.onNoticeClose,
stackConfig = props.stack;
var _useContext = (0,react__WEBPACK_IMPORTED_MODULE_6__.useContext)(_NotificationProvider__WEBPACK_IMPORTED_MODULE_10__.NotificationContext),
ctxCls = _useContext.classNames;
var dictRef = (0,react__WEBPACK_IMPORTED_MODULE_6__.useRef)({});
var _useState = (0,react__WEBPACK_IMPORTED_MODULE_6__.useState)(null),
_useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_5__["default"])(_useState, 2),
latestNotice = _useState2[0],
setLatestNotice = _useState2[1];
var _useState3 = (0,react__WEBPACK_IMPORTED_MODULE_6__.useState)([]),
_useState4 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_5__["default"])(_useState3, 2),
hoverKeys = _useState4[0],
setHoverKeys = _useState4[1];
var keys = configList.map(function (config) {
return {
config: config,
key: String(config.key)
};
});
var _useStack = (0,_hooks_useStack__WEBPACK_IMPORTED_MODULE_11__["default"])(stackConfig),
_useStack2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_5__["default"])(_useStack, 2),
stack = _useStack2[0],
_useStack2$ = _useStack2[1],
offset = _useStack2$.offset,
threshold = _useStack2$.threshold,
gap = _useStack2$.gap;
var expanded = stack && (hoverKeys.length > 0 || keys.length <= threshold);
var placementMotion = typeof motion === 'function' ? motion(placement) : motion;
// Clean hover key
(0,react__WEBPACK_IMPORTED_MODULE_6__.useEffect)(function () {
if (stack && hoverKeys.length > 1) {
setHoverKeys(function (prev) {
return prev.filter(function (key) {
return keys.some(function (_ref) {
var dataKey = _ref.key;
return key === dataKey;
});
});
});
}
}, [hoverKeys, keys, stack]);
// Force update latest notice
(0,react__WEBPACK_IMPORTED_MODULE_6__.useEffect)(function () {
var _keys;
if (stack && dictRef.current[(_keys = keys[keys.length - 1]) === null || _keys === void 0 ? void 0 : _keys.key]) {
var _keys2;
setLatestNotice(dictRef.current[(_keys2 = keys[keys.length - 1]) === null || _keys2 === void 0 ? void 0 : _keys2.key]);
}
}, [keys, stack]);
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_6___default().createElement(rc_motion__WEBPACK_IMPORTED_MODULE_8__.CSSMotionList, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({
key: placement,
className: classnames__WEBPACK_IMPORTED_MODULE_7___default()(prefixCls, "".concat(prefixCls, "-").concat(placement), ctxCls === null || ctxCls === void 0 ? void 0 : ctxCls.list, className, (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_4__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_4__["default"])({}, "".concat(prefixCls, "-stack"), !!stack), "".concat(prefixCls, "-stack-expanded"), expanded)),
style: style,
keys: keys,
motionAppear: true
}, placementMotion, {
onAllRemoved: function onAllRemoved() {
onAllNoticeRemoved(placement);
}
}), function (_ref2, nodeRef) {
var config = _ref2.config,
motionClassName = _ref2.className,
motionStyle = _ref2.style,
motionIndex = _ref2.index;
var _ref3 = config,
key = _ref3.key,
times = _ref3.times;
var strKey = String(key);
var _ref4 = config,
configClassName = _ref4.className,
configStyle = _ref4.style,
configClassNames = _ref4.classNames,
configStyles = _ref4.styles,
restConfig = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_3__["default"])(_ref4, _excluded);
var dataIndex = keys.findIndex(function (item) {
return item.key === strKey;
});
// If dataIndex is -1, that means this notice has been removed in data, but still in dom
// Should minus (motionIndex - 1) to get the correct index because keys.length is not the same as dom length
var stackStyle = {};
if (stack) {
var index = keys.length - 1 - (dataIndex > -1 ? dataIndex : motionIndex - 1);
var transformX = placement === 'top' || placement === 'bottom' ? '-50%' : '0';
if (index > 0) {
var _dictRef$current$strK, _dictRef$current$strK2, _dictRef$current$strK3;
stackStyle.height = expanded ? (_dictRef$current$strK = dictRef.current[strKey]) === null || _dictRef$current$strK === void 0 ? void 0 : _dictRef$current$strK.offsetHeight : latestNotice === null || latestNotice === void 0 ? void 0 : latestNotice.offsetHeight;
// Transform
var verticalOffset = 0;
for (var i = 0; i < index; i++) {
var _dictRef$current$keys;
verticalOffset += ((_dictRef$current$keys = dictRef.current[keys[keys.length - 1 - i].key]) === null || _dictRef$current$keys === void 0 ? void 0 : _dictRef$current$keys.offsetHeight) + gap;
}
var transformY = (expanded ? verticalOffset : index * offset) * (placement.startsWith('top') ? 1 : -1);
var scaleX = !expanded && latestNotice !== null && latestNotice !== void 0 && latestNotice.offsetWidth && (_dictRef$current$strK2 = dictRef.current[strKey]) !== null && _dictRef$current$strK2 !== void 0 && _dictRef$current$strK2.offsetWidth ? ((latestNotice === null || latestNotice === void 0 ? void 0 : latestNotice.offsetWidth) - offset * 2 * (index < 3 ? index : 3)) / ((_dictRef$current$strK3 = dictRef.current[strKey]) === null || _dictRef$current$strK3 === void 0 ? void 0 : _dictRef$current$strK3.offsetWidth) : 1;
stackStyle.transform = "translate3d(".concat(transformX, ", ").concat(transformY, "px, 0) scaleX(").concat(scaleX, ")");
} else {
stackStyle.transform = "translate3d(".concat(transformX, ", 0, 0)");
}
}
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_6___default().createElement("div", {
ref: nodeRef,
className: classnames__WEBPACK_IMPORTED_MODULE_7___default()("".concat(prefixCls, "-notice-wrapper"), motionClassName, configClassNames === null || configClassNames === void 0 ? void 0 : configClassNames.wrapper),
style: (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__["default"])({}, motionStyle), stackStyle), configStyles === null || configStyles === void 0 ? void 0 : configStyles.wrapper),
onMouseEnter: function onMouseEnter() {
return setHoverKeys(function (prev) {
return prev.includes(strKey) ? prev : [].concat((0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__["default"])(prev), [strKey]);
});
},
onMouseLeave: function onMouseLeave() {
return setHoverKeys(function (prev) {
return prev.filter(function (k) {
return k !== strKey;
});
});
}
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_6___default().createElement(_Notice__WEBPACK_IMPORTED_MODULE_9__["default"], (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, restConfig, {
ref: function ref(node) {
if (dataIndex > -1) {
dictRef.current[strKey] = node;
} else {
delete dictRef.current[strKey];
}
},
prefixCls: prefixCls,
classNames: configClassNames,
styles: configStyles,
className: classnames__WEBPACK_IMPORTED_MODULE_7___default()(configClassName, ctxCls === null || ctxCls === void 0 ? void 0 : ctxCls.notice),
style: configStyle,
times: times,
key: key,
eventKey: key,
onNoticeClose: onNoticeClose,
hovering: stack && hoverKeys.length > 0
})));
});
};
if (true) {
NoticeList.displayName = 'NoticeList';
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (NoticeList);
/***/ }),
/***/ "../../../node_modules/rc-notification/es/NotificationProvider.js":
/*!************************************************************************!*\
!*** ../../../node_modules/rc-notification/es/NotificationProvider.js ***!
\************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ NotificationContext: () => (/* binding */ NotificationContext),
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
var NotificationContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createContext({});
var NotificationProvider = function NotificationProvider(_ref) {
var children = _ref.children,
classNames = _ref.classNames;
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(NotificationContext.Provider, {
value: {
classNames: classNames
}
}, children);
};
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (NotificationProvider);
/***/ }),
/***/ "../../../node_modules/rc-notification/es/Notifications.js":
/*!*****************************************************************!*\
!*** ../../../node_modules/rc-notification/es/Notifications.js ***!
\*****************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js");
/* harmony import */ var _babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ "../../../node_modules/@babel/runtime/helpers/esm/toConsumableArray.js");
/* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-dom */ "../../../node_modules/react-dom/index.js");
/* harmony import */ var _NoticeList__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./NoticeList */ "../../../node_modules/rc-notification/es/NoticeList.js");
// ant-notification ant-notification-topRight
var Notifications = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.forwardRef(function (props, ref) {
var _props$prefixCls = props.prefixCls,
prefixCls = _props$prefixCls === void 0 ? 'rc-notification' : _props$prefixCls,
container = props.container,
motion = props.motion,
maxCount = props.maxCount,
className = props.className,
style = props.style,
onAllRemoved = props.onAllRemoved,
stack = props.stack,
renderNotifications = props.renderNotifications;
var _React$useState = react__WEBPACK_IMPORTED_MODULE_3__.useState([]),
_React$useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_React$useState, 2),
configList = _React$useState2[0],
setConfigList = _React$useState2[1];
// ======================== Close =========================
var onNoticeClose = function onNoticeClose(key) {
var _config$onClose;
// Trigger close event
var config = configList.find(function (item) {
return item.key === key;
});
config === null || config === void 0 || (_config$onClose = config.onClose) === null || _config$onClose === void 0 || _config$onClose.call(config);
setConfigList(function (list) {
return list.filter(function (item) {
return item.key !== key;
});
});
};
// ========================= Refs =========================
react__WEBPACK_IMPORTED_MODULE_3__.useImperativeHandle(ref, function () {
return {
open: function open(config) {
setConfigList(function (list) {
var clone = (0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__["default"])(list);
// Replace if exist
var index = clone.findIndex(function (item) {
return item.key === config.key;
});
var innerConfig = (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({}, config);
if (index >= 0) {
var _list$index;
innerConfig.times = (((_list$index = list[index]) === null || _list$index === void 0 ? void 0 : _list$index.times) || 0) + 1;
clone[index] = innerConfig;
} else {
innerConfig.times = 0;
clone.push(innerConfig);
}
if (maxCount > 0 && clone.length > maxCount) {
clone = clone.slice(-maxCount);
}
return clone;
});
},
close: function close(key) {
onNoticeClose(key);
},
destroy: function destroy() {
setConfigList([]);
}
};
});
// ====================== Placements ======================
var _React$useState3 = react__WEBPACK_IMPORTED_MODULE_3__.useState({}),
_React$useState4 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_React$useState3, 2),
placements = _React$useState4[0],
setPlacements = _React$useState4[1];
react__WEBPACK_IMPORTED_MODULE_3__.useEffect(function () {
var nextPlacements = {};
configList.forEach(function (config) {
var _config$placement = config.placement,
placement = _config$placement === void 0 ? 'topRight' : _config$placement;
if (placement) {
nextPlacements[placement] = nextPlacements[placement] || [];
nextPlacements[placement].push(config);
}
});
// Fill exist placements to avoid empty list causing remove without motion
Object.keys(placements).forEach(function (placement) {
nextPlacements[placement] = nextPlacements[placement] || [];
});
setPlacements(nextPlacements);
}, [configList]);
// Clean up container if all notices fade out
var onAllNoticeRemoved = function onAllNoticeRemoved(placement) {
setPlacements(function (originPlacements) {
var clone = (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({}, originPlacements);
var list = clone[placement] || [];
if (!list.length) {
delete clone[placement];
}
return clone;
});
};
// Effect tell that placements is empty now
var emptyRef = react__WEBPACK_IMPORTED_MODULE_3__.useRef(false);
react__WEBPACK_IMPORTED_MODULE_3__.useEffect(function () {
if (Object.keys(placements).length > 0) {
emptyRef.current = true;
} else if (emptyRef.current) {
// Trigger only when from exist to empty
onAllRemoved === null || onAllRemoved === void 0 || onAllRemoved();
emptyRef.current = false;
}
}, [placements]);
// ======================== Render ========================
if (!container) {
return null;
}
var placementList = Object.keys(placements);
return /*#__PURE__*/(0,react_dom__WEBPACK_IMPORTED_MODULE_4__.createPortal)( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(react__WEBPACK_IMPORTED_MODULE_3__.Fragment, null, placementList.map(function (placement) {
var placementConfigList = placements[placement];
var list = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(_NoticeList__WEBPACK_IMPORTED_MODULE_5__["default"], {
key: placement,
configList: placementConfigList,
placement: placement,
prefixCls: prefixCls,
className: className === null || className === void 0 ? void 0 : className(placement),
style: style === null || style === void 0 ? void 0 : style(placement),
motion: motion,
onNoticeClose: onNoticeClose,
onAllNoticeRemoved: onAllNoticeRemoved,
stack: stack
});
return renderNotifications ? renderNotifications(list, {
prefixCls: prefixCls,
key: placement
}) : list;
})), container);
});
if (true) {
Notifications.displayName = 'Notifications';
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Notifications);
/***/ }),
/***/ "../../../node_modules/rc-notification/es/hooks/useNotification.js":
/*!*************************************************************************!*\
!*** ../../../node_modules/rc-notification/es/hooks/useNotification.js ***!
\*************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ useNotification)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ "../../../node_modules/@babel/runtime/helpers/esm/toConsumableArray.js");
/* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js");
/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ "../../../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _Notifications__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../Notifications */ "../../../node_modules/rc-notification/es/Notifications.js");
var _excluded = ["getContainer", "motion", "prefixCls", "maxCount", "className", "style", "onAllRemoved", "stack", "renderNotifications"];
var defaultGetContainer = function defaultGetContainer() {
return document.body;
};
var uniqueKey = 0;
function mergeConfig() {
var clone = {};
for (var _len = arguments.length, objList = new Array(_len), _key = 0; _key < _len; _key++) {
objList[_key] = arguments[_key];
}
objList.forEach(function (obj) {
if (obj) {
Object.keys(obj).forEach(function (key) {
var val = obj[key];
if (val !== undefined) {
clone[key] = val;
}
});
}
});
return clone;
}
function useNotification() {
var rootConfig = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var _rootConfig$getContai = rootConfig.getContainer,
getContainer = _rootConfig$getContai === void 0 ? defaultGetContainer : _rootConfig$getContai,
motion = rootConfig.motion,
prefixCls = rootConfig.prefixCls,
maxCount = rootConfig.maxCount,
className = rootConfig.className,
style = rootConfig.style,
onAllRemoved = rootConfig.onAllRemoved,
stack = rootConfig.stack,
renderNotifications = rootConfig.renderNotifications,
shareConfig = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2__["default"])(rootConfig, _excluded);
var _React$useState = react__WEBPACK_IMPORTED_MODULE_3__.useState(),
_React$useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__["default"])(_React$useState, 2),
container = _React$useState2[0],
setContainer = _React$useState2[1];
var notificationsRef = react__WEBPACK_IMPORTED_MODULE_3__.useRef();
var contextHolder = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(_Notifications__WEBPACK_IMPORTED_MODULE_4__["default"], {
container: container,
ref: notificationsRef,
prefixCls: prefixCls,
motion: motion,
maxCount: maxCount,
className: className,
style: style,
onAllRemoved: onAllRemoved,
stack: stack,
renderNotifications: renderNotifications
});
var _React$useState3 = react__WEBPACK_IMPORTED_MODULE_3__.useState([]),
_React$useState4 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__["default"])(_React$useState3, 2),
taskQueue = _React$useState4[0],
setTaskQueue = _React$useState4[1];
// ========================= Refs =========================
var api = react__WEBPACK_IMPORTED_MODULE_3__.useMemo(function () {
return {
open: function open(config) {
var mergedConfig = mergeConfig(shareConfig, config);
if (mergedConfig.key === null || mergedConfig.key === undefined) {
mergedConfig.key = "rc-notification-".concat(uniqueKey);
uniqueKey += 1;
}
setTaskQueue(function (queue) {
return [].concat((0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__["default"])(queue), [{
type: 'open',
config: mergedConfig
}]);
});
},
close: function close(key) {
setTaskQueue(function (queue) {
return [].concat((0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__["default"])(queue), [{
type: 'close',
key: key
}]);
});
},
destroy: function destroy() {
setTaskQueue(function (queue) {
return [].concat((0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__["default"])(queue), [{
type: 'destroy'
}]);
});
}
};
}, []);
// ======================= Container ======================
// React 18 should all in effect that we will check container in each render
// Which means getContainer should be stable.
react__WEBPACK_IMPORTED_MODULE_3__.useEffect(function () {
setContainer(getContainer());
});
// ======================== Effect ========================
react__WEBPACK_IMPORTED_MODULE_3__.useEffect(function () {
// Flush task when node ready
if (notificationsRef.current && taskQueue.length) {
taskQueue.forEach(function (task) {
switch (task.type) {
case 'open':
notificationsRef.current.open(task.config);
break;
case 'close':
notificationsRef.current.close(task.key);
break;
case 'destroy':
notificationsRef.current.destroy();
break;
}
});
// https://github.com/ant-design/ant-design/issues/52590
// React `startTransition` will run once `useEffect` but many times `setState`,
// So `setTaskQueue` with filtered array will cause infinite loop.
// We cache the first match queue instead.
var oriTaskQueue;
var tgtTaskQueue;
// React 17 will mix order of effect & setState in async
// - open: setState[0]
// - effect[0]
// - open: setState[1]
// - effect setState([]) * here will clean up [0, 1] in React 17
setTaskQueue(function (oriQueue) {
if (oriTaskQueue !== oriQueue || !tgtTaskQueue) {
oriTaskQueue = oriQueue;
tgtTaskQueue = oriQueue.filter(function (task) {
return !taskQueue.includes(task);
});
}
return tgtTaskQueue;
});
}
}, [taskQueue]);
// ======================== Return ========================
return [api, contextHolder];
}
/***/ }),
/***/ "../../../node_modules/rc-notification/es/hooks/useStack.js":
/*!******************************************************************!*\
!*** ../../../node_modules/rc-notification/es/hooks/useStack.js ***!
\******************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/typeof */ "../../../node_modules/@babel/runtime/helpers/esm/typeof.js");
var DEFAULT_OFFSET = 8;
var DEFAULT_THRESHOLD = 3;
var DEFAULT_GAP = 16;
var useStack = function useStack(config) {
var result = {
offset: DEFAULT_OFFSET,
threshold: DEFAULT_THRESHOLD,
gap: DEFAULT_GAP
};
if (config && (0,_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_0__["default"])(config) === 'object') {
var _config$offset, _config$threshold, _config$gap;
result.offset = (_config$offset = config.offset) !== null && _config$offset !== void 0 ? _config$offset : DEFAULT_OFFSET;
result.threshold = (_config$threshold = config.threshold) !== null && _config$threshold !== void 0 ? _config$threshold : DEFAULT_THRESHOLD;
result.gap = (_config$gap = config.gap) !== null && _config$gap !== void 0 ? _config$gap : DEFAULT_GAP;
}
return [!!config, result];
};
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (useStack);
/***/ }),
/***/ "../../../node_modules/rc-notification/es/index.js":
/*!*********************************************************!*\
!*** ../../../node_modules/rc-notification/es/index.js ***!
\*********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ Notice: () => (/* reexport safe */ _Notice__WEBPACK_IMPORTED_MODULE_1__["default"]),
/* harmony export */ NotificationProvider: () => (/* reexport safe */ _NotificationProvider__WEBPACK_IMPORTED_MODULE_2__["default"]),
/* harmony export */ useNotification: () => (/* reexport safe */ _hooks_useNotification__WEBPACK_IMPORTED_MODULE_0__["default"])
/* harmony export */ });
/* harmony import */ var _hooks_useNotification__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./hooks/useNotification */ "../../../node_modules/rc-notification/es/hooks/useNotification.js");
/* harmony import */ var _Notice__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Notice */ "../../../node_modules/rc-notification/es/Notice.js");
/* harmony import */ var _NotificationProvider__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./NotificationProvider */ "../../../node_modules/rc-notification/es/NotificationProvider.js");
/***/ })
}]);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianMvdmVuZG9ycy1ub2RlX21vZHVsZXNfcmMtaW1hZ2VfZXNfaW5kZXhfanMtbm9kZV9tb2R1bGVzX3JjLWlucHV0X2xpYl91dGlsc19jb21tb25VdGlsc19qcy1ub2RlLThjZjkyYS52b2x1bnRlZXJhcGkuMDIwN2VkMDFhOTc4ZmMxYmQwYzUuYnVuZGxlLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBMEQ7QUFDVztBQUNHO0FBQ0Y7QUFDZDtBQUNrQztBQUMxRjtBQUNBO0FBQzRCO0FBQ21CO0FBQ2M7QUFDOUI7QUFDdUI7QUFDdEI7QUFDVTtBQUNGO0FBQ1E7QUFDUTtBQUNkO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQiw4RkFBd0I7QUFDekM7QUFDQSxhQUFhLDZFQUFPLHFDQUFxQztBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQiw4RkFBd0I7QUFDMUM7QUFDQSx3QkFBd0IsMkVBQWM7QUFDdEM7QUFDQTtBQUNBLEtBQUs7QUFDTCx1QkFBdUIsb0ZBQWM7QUFDckM7QUFDQTtBQUNBLG1CQUFtQiw2REFBUztBQUM1QjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsa0JBQWtCLG9GQUFjO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQiwrQ0FBUTtBQUMxQixpQkFBaUIsb0ZBQWM7QUFDL0I7QUFDQTtBQUNBLHFCQUFxQixpREFBVSxDQUFDLDBEQUFtQjtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLGlEQUFFLDZDQUE2QyxxRkFBZSxHQUFHOztBQUV0RjtBQUNBLHVCQUF1Qiw4Q0FBTztBQUM5QjtBQUNBLElB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ZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1pbWFnZS9lcy9JbWFnZS5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1pbWFnZS9lcy9PcGVyYXRpb25zLmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLWltYWdlL2VzL1ByZXZpZXcuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtaW1hZ2UvZXMvUHJldmlld0dyb3VwLmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLWltYWdlL2VzL2NvbW1vbi5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1pbWFnZS9lcy9jb250ZXh0LmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLWltYWdlL2VzL2dldEZpeFNjYWxlRWxlVHJhbnNQb3NpdGlvbi5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1pbWFnZS9lcy9ob29rcy91c2VJbWFnZVRyYW5zZm9ybS5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1pbWFnZS9lcy9ob29rcy91c2VNb3VzZUV2ZW50LmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLWltYWdlL2VzL2hvb2tzL3VzZVByZXZpZXdJdGVtcy5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1pbWFnZS9lcy9ob29rcy91c2VSZWdpc3RlckltYWdlLmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLWltYWdlL2VzL2hvb2tzL3VzZVN0YXR1cy5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1pbWFnZS9lcy9ob29rcy91c2VUb3VjaEV2ZW50LmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLWltYWdlL2VzL2luZGV4LmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLWltYWdlL2VzL3ByZXZpZXdDb25maWcuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtaW1hZ2UvZXMvdXRpbC5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1pbnB1dC9lcy9CYXNlSW5wdXQuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtaW5wdXQvZXMvSW5wdXQuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtaW5wdXQvZXMvaG9va3MvdXNlQ291bnQuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtaW5wdXQvZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtaW5wdXQvZXMvdXRpbHMvY29tbW9uVXRpbHMuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtaW5wdXQvbGliL3V0aWxzL2NvbW1vblV0aWxzLmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLW1lbnRpb25zL2VzL0Ryb3Bkb3duTWVudS5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1tZW50aW9ucy9lcy9LZXl3b3JkVHJpZ2dlci5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1tZW50aW9ucy9lcy9NZW50aW9ucy5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1tZW50aW9ucy9lcy9NZW50aW9uc0NvbnRleHQuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtbWVudGlvbnMvZXMvT3B0aW9uLmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLW1lbnRpb25zL2VzL2hvb2tzL3VzZUVmZmVjdFN0YXRlLmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLW1lbnRpb25zL2VzL2luZGV4LmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLW1lbnRpb25zL2VzL3V0aWwuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtbWVudS9lcy9EaXZpZGVyLmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLW1lbnUvZXMvSWNvbi5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1tZW51L2VzL01lbnUuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtbWVudS9lcy9NZW51SXRlbS5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1tZW51L2VzL01lbnVJdGVtR3JvdXAuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtbWVudS9lcy9TdWJNZW51L0lubGluZVN1Yk1lbnVMaXN0LmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLW1lbnUvZXMvU3ViTWVudS9Qb3B1cFRyaWdnZXIuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtbWVudS9lcy9TdWJNZW51L1N1Yk1lbnVMaXN0LmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLW1lbnUvZXMvU3ViTWVudS9pbmRleC5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1tZW51L2VzL2NvbnRleHQvSWRDb250ZXh0LmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLW1lbnUvZXMvY29udGV4dC9NZW51Q29udGV4dC5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1tZW51L2VzL2NvbnRleHQvUGF0aENvbnRleHQuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtbWVudS9lcy9jb250ZXh0L1ByaXZhdGVDb250ZXh0LmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLW1lbnUvZXMvaG9va3MvdXNlQWNjZXNzaWJpbGl0eS5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1tZW51L2VzL2hvb2tzL3VzZUFjdGl2ZS5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1tZW51L2VzL2hvb2tzL3VzZURpcmVjdGlvblN0eWxlLmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLW1lbnUvZXMvaG9va3MvdXNlS2V5UmVjb3Jkcy5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1tZW51L2VzL2hvb2tzL3VzZU1lbW9DYWxsYmFjay5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1tZW51L2VzL2hvb2tzL3VzZVVVSUQuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtbWVudS9lcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1tZW51L2VzL3BsYWNlbWVudHMuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtbWVudS9lcy91dGlscy9jb21tb25VdGlsLmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLW1lbnUvZXMvdXRpbHMvbW90aW9uVXRpbC5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1tZW51L2VzL3V0aWxzL25vZGVVdGlsLmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLW1lbnUvZXMvdXRpbHMvdGltZVV0aWwuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtbWVudS9lcy91dGlscy93YXJuVXRpbC5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1tb3Rpb24vZXMvQ1NTTW90aW9uLmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLW1vdGlvbi9lcy9DU1NNb3Rpb25MaXN0LmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLW1vdGlvbi9lcy9Eb21XcmFwcGVyLmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLW1vdGlvbi9lcy9jb250ZXh0LmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLW1vdGlvbi9lcy9ob29rcy91c2VEb21Nb3Rpb25FdmVudHMuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtbW90aW9uL2VzL2hvb2tzL3VzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtbW90aW9uL2VzL2hvb2tzL3VzZU5leHRGcmFtZS5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1tb3Rpb24vZXMvaG9va3MvdXNlU3RhdHVzLmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLW1vdGlvbi9lcy9ob29rcy91c2VTdGVwUXVldWUuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtbW90aW9uL2VzL2luZGV4LmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLW1vdGlvbi9lcy9pbnRlcmZhY2UuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtbW90aW9uL2VzL3V0aWwvZGlmZi5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1tb3Rpb24vZXMvdXRpbC9tb3Rpb24uanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtbm90aWZpY2F0aW9uL2VzL05vdGljZS5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1ub3RpZmljYXRpb24vZXMvTm90aWNlTGlzdC5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1ub3RpZmljYXRpb24vZXMvTm90aWZpY2F0aW9uUHJvdmlkZXIuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtbm90aWZpY2F0aW9uL2VzL05vdGlmaWNhdGlvbnMuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtbm90aWZpY2F0aW9uL2VzL2hvb2tzL3VzZU5vdGlmaWNhdGlvbi5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1ub3RpZmljYXRpb24vZXMvaG9va3MvdXNlU3RhY2suanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtbm90aWZpY2F0aW9uL2VzL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RTcHJlYWQgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFNwcmVhZDJcIjtcbmltcG9ydCBfZGVmaW5lUHJvcGVydHkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5XCI7XG5pbXBvcnQgX3NsaWNlZFRvQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXlcIjtcbmltcG9ydCBfdHlwZW9mIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2ZcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzXCI7XG52YXIgX2V4Y2x1ZGVkID0gW1wic3JjXCIsIFwiYWx0XCIsIFwib25QcmV2aWV3Q2xvc2VcIiwgXCJwcmVmaXhDbHNcIiwgXCJwcmV2aWV3UHJlZml4Q2xzXCIsIFwicGxhY2Vob2xkZXJcIiwgXCJmYWxsYmFja1wiLCBcIndpZHRoXCIsIFwiaGVpZ2h0XCIsIFwic3R5bGVcIiwgXCJwcmV2aWV3XCIsIFwiY2xhc3NOYW1lXCIsIFwib25DbGlja1wiLCBcIm9uRXJyb3JcIiwgXCJ3cmFwcGVyQ2xhc3NOYW1lXCIsIFwid3JhcHBlclN0eWxlXCIsIFwicm9vdENsYXNzTmFtZVwiXSxcbiAgX2V4Y2x1ZGVkMiA9IFtcInNyY1wiLCBcInZpc2libGVcIiwgXCJvblZpc2libGVDaGFuZ2VcIiwgXCJnZXRDb250YWluZXJcIiwgXCJtYXNrXCIsIFwibWFza0NsYXNzTmFtZVwiLCBcIm1vdmFibGVcIiwgXCJpY29uc1wiLCBcInNjYWxlU3RlcFwiLCBcIm1pblNjYWxlXCIsIFwibWF4U2NhbGVcIiwgXCJpbWFnZVJlbmRlclwiLCBcInRvb2xiYXJSZW5kZXJcIl07XG5pbXBvcnQgY24gZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBnZXRPZmZzZXQgfSBmcm9tIFwicmMtdXRpbC9lcy9Eb20vY3NzXCI7XG5pbXBvcnQgdXNlTWVyZ2VkU3RhdGUgZnJvbSBcInJjLXV0aWwvZXMvaG9va3MvdXNlTWVyZ2VkU3RhdGVcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUNvbnRleHQsIHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByZXZpZXcgZnJvbSBcIi4vUHJldmlld1wiO1xuaW1wb3J0IFByZXZpZXdHcm91cCBmcm9tIFwiLi9QcmV2aWV3R3JvdXBcIjtcbmltcG9ydCB7IENPTU1PTl9QUk9QUyB9IGZyb20gXCIuL2NvbW1vblwiO1xuaW1wb3J0IHsgUHJldmlld0dyb3VwQ29udGV4dCB9IGZyb20gXCIuL2NvbnRleHRcIjtcbmltcG9ydCB1c2VSZWdpc3RlckltYWdlIGZyb20gXCIuL2hvb2tzL3VzZVJlZ2lzdGVySW1hZ2VcIjtcbmltcG9ydCB1c2VTdGF0dXMgZnJvbSBcIi4vaG9va3MvdXNlU3RhdHVzXCI7XG52YXIgSW1hZ2VJbnRlcm5hbCA9IGZ1bmN0aW9uIEltYWdlSW50ZXJuYWwocHJvcHMpIHtcbiAgdmFyIGltZ1NyYyA9IHByb3BzLnNyYyxcbiAgICBhbHQgPSBwcm9wcy5hbHQsXG4gICAgb25Jbml0aWFsUHJldmlld0Nsb3NlID0gcHJvcHMub25QcmV2aWV3Q2xvc2UsXG4gICAgX3Byb3BzJHByZWZpeENscyA9IHByb3BzLnByZWZpeENscyxcbiAgICBwcmVmaXhDbHMgPSBfcHJvcHMkcHJlZml4Q2xzID09PSB2b2lkIDAgPyAncmMtaW1hZ2UnIDogX3Byb3BzJHByZWZpeENscyxcbiAgICBfcHJvcHMkcHJldmlld1ByZWZpeEMgPSBwcm9wcy5wcmV2aWV3UHJlZml4Q2xzLFxuICAgIHByZXZpZXdQcmVmaXhDbHMgPSBfcHJvcHMkcHJldmlld1ByZWZpeEMgPT09IHZvaWQgMCA/IFwiXCIuY29uY2F0KHByZWZpeENscywgXCItcHJldmlld1wiKSA6IF9wcm9wcyRwcmV2aWV3UHJlZml4QyxcbiAgICBwbGFjZWhvbGRlciA9IHByb3BzLnBsYWNlaG9sZGVyLFxuICAgIGZhbGxiYWNrID0gcHJvcHMuZmFsbGJhY2ssXG4gICAgd2lkdGggPSBwcm9wcy53aWR0aCxcbiAgICBoZWlnaHQgPSBwcm9wcy5oZWlnaHQsXG4gICAgc3R5bGUgPSBwcm9wcy5zdHlsZSxcbiAgICBfcHJvcHMkcHJldmlldyA9IHByb3BzLnByZXZpZXcsXG4gICAgcHJldmlldyA9IF9wcm9wcyRwcmV2aWV3ID09PSB2b2lkIDAgPyB0cnVlIDogX3Byb3BzJHByZXZpZXcsXG4gICAgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lLFxuICAgIG9uQ2xpY2sgPSBwcm9wcy5vbkNsaWNrLFxuICAgIG9uRXJyb3IgPSBwcm9wcy5vbkVycm9yLFxuICAgIHdyYXBwZXJDbGFzc05hbWUgPSBwcm9wcy53cmFwcGVyQ2xhc3NOYW1lLFxuICAgIHdyYXBwZXJTdHlsZSA9IHByb3BzLndyYXBwZXJTdHlsZSxcbiAgICByb290Q2xhc3NOYW1lID0gcHJvcHMucm9vdENsYXNzTmFtZSxcbiAgICBvdGhlclByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHByb3BzLCBfZXhjbHVkZWQpO1xuICB2YXIgaXNDdXN0b21QbGFjZWhvbGRlciA9IHBsYWNlaG9sZGVyICYmIHBsYWNlaG9sZGVyICE9PSB0cnVlO1xuICB2YXIgX3JlZiA9IF90eXBlb2YocHJldmlldykgPT09ICdvYmplY3QnID8gcHJldmlldyA6IHt9LFxuICAgIHByZXZpZXdTcmMgPSBfcmVmLnNyYyxcbiAgICBfcmVmJHZpc2libGUgPSBfcmVmLnZpc2libGUsXG4gICAgcHJldmlld1Zpc2libGUgPSBfcmVmJHZpc2libGUgPT09IHZvaWQgMCA/IHVuZGVmaW5lZCA6IF9yZWYkdmlzaWJsZSxcbiAgICBfcmVmJG9uVmlzaWJsZUNoYW5nZSA9IF9yZWYub25WaXNpYmxlQ2hhbmdlLFxuICAgIG9uUHJldmlld1Zpc2libGVDaGFuZ2UgPSBfcmVmJG9uVmlzaWJsZUNoYW5nZSA9PT0gdm9pZCAwID8gb25Jbml0aWFsUHJldmlld0Nsb3NlIDogX3JlZiRvblZpc2libGVDaGFuZ2UsXG4gICAgX3JlZiRnZXRDb250YWluZXIgPSBfcmVmLmdldENvbnRhaW5lcixcbiAgICBnZXRQcmV2aWV3Q29udGFpbmVyID0gX3JlZiRnZXRDb250YWluZXIgPT09IHZvaWQgMCA/IHVuZGVmaW5lZCA6IF9yZWYkZ2V0Q29udGFpbmVyLFxuICAgIHByZXZpZXdNYXNrID0gX3JlZi5tYXNrLFxuICAgIG1hc2tDbGFzc05hbWUgPSBfcmVmLm1hc2tDbGFzc05hbWUsXG4gICAgbW92YWJsZSA9IF9yZWYubW92YWJsZSxcbiAgICBpY29ucyA9IF9yZWYuaWNvbnMsXG4gICAgc2NhbGVTdGVwID0gX3JlZi5zY2FsZVN0ZXAsXG4gICAgbWluU2NhbGUgPSBfcmVmLm1pblNjYWxlLFxuICAgIG1heFNjYWxlID0gX3JlZi5tYXhTY2FsZSxcbiAgICBpbWFnZVJlbmRlciA9IF9yZWYuaW1hZ2VSZW5kZXIsXG4gICAgdG9vbGJhclJlbmRlciA9IF9yZWYudG9vbGJhclJlbmRlcixcbiAgICBkaWFsb2dQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQyKTtcbiAgdmFyIHNyYyA9IHByZXZpZXdTcmMgIT09IG51bGwgJiYgcHJldmlld1NyYyAhPT0gdm9pZCAwID8gcHJldmlld1NyYyA6IGltZ1NyYztcbiAgdmFyIF91c2VNZXJnZWRTdGF0ZSA9IHVzZU1lcmdlZFN0YXRlKCEhcHJldmlld1Zpc2libGUsIHtcbiAgICAgIHZhbHVlOiBwcmV2aWV3VmlzaWJsZSxcbiAgICAgIG9uQ2hhbmdlOiBvblByZXZpZXdWaXNpYmxlQ2hhbmdlXG4gICAgfSksXG4gICAgX3VzZU1lcmdlZFN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VNZXJnZWRTdGF0ZSwgMiksXG4gICAgaXNTaG93UHJldmlldyA9IF91c2VNZXJnZWRTdGF0ZTJbMF0sXG4gICAgc2V0U2hvd1ByZXZpZXcgPSBfdXNlTWVyZ2VkU3RhdGUyWzFdO1xuICB2YXIgX3VzZVN0YXR1cyA9IHVzZVN0YXR1cyh7XG4gICAgICBzcmM6IGltZ1NyYyxcbiAgICAgIGlzQ3VzdG9tUGxhY2Vob2xkZXI6IGlzQ3VzdG9tUGxhY2Vob2xkZXIsXG4gICAgICBmYWxsYmFjazogZmFsbGJhY2tcbiAgICB9KSxcbiAgICBfdXNlU3RhdHVzMiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0dXMsIDMpLFxuICAgIGdldEltZ1JlZiA9IF91c2VTdGF0dXMyWzBdLFxuICAgIHNyY0FuZE9ubG9hZCA9IF91c2VTdGF0dXMyWzFdLFxuICAgIHN0YXR1cyA9IF91c2VTdGF0dXMyWzJdO1xuICB2YXIgX3VzZVN0YXRlID0gdXNlU3RhdGUobnVsbCksXG4gICAgX3VzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZSwgMiksXG4gICAgbW91c2VQb3NpdGlvbiA9IF91c2VTdGF0ZTJbMF0sXG4gICAgc2V0TW91c2VQb3NpdGlvbiA9IF91c2VTdGF0ZTJbMV07XG4gIHZhciBncm91cENvbnRleHQgPSB1c2VDb250ZXh0KFByZXZpZXdHcm91cENvbnRleHQpO1xuICB2YXIgY2FuUHJldmlldyA9ICEhcHJldmlldztcbiAgdmFyIG9uUHJldmlld0Nsb3NlID0gZnVuY3Rpb24gb25QcmV2aWV3Q2xvc2UoKSB7XG4gICAgc2V0U2hvd1ByZXZpZXcoZmFsc2UpO1xuICAgIHNldE1vdXNlUG9zaXRpb24obnVsbCk7XG4gIH07XG4gIHZhciB3cmFwcGVyQ2xhc3MgPSBjbihwcmVmaXhDbHMsIHdyYXBwZXJDbGFzc05hbWUsIHJvb3RDbGFzc05hbWUsIF9kZWZpbmVQcm9wZXJ0eSh7fSwgXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1lcnJvclwiKSwgc3RhdHVzID09PSAnZXJyb3InKSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PSBJbWFnZVByb3BzID09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIGltZ0NvbW1vblByb3BzID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG9iaiA9IHt9O1xuICAgIENPTU1PTl9QUk9QUy5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgICBpZiAocHJvcHNbcHJvcF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBvYmpbcHJvcF0gPSBwcm9wc1twcm9wXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gb2JqO1xuICB9LCBDT01NT05fUFJPUFMubWFwKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgcmV0dXJuIHByb3BzW3Byb3BdO1xuICB9KSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT0gUmVnaXN0ZXIgPT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIHJlZ2lzdGVyRGF0YSA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGltZ0NvbW1vblByb3BzKSwge30sIHtcbiAgICAgIHNyYzogc3JjXG4gICAgfSk7XG4gIH0sIFtzcmMsIGltZ0NvbW1vblByb3BzXSk7XG4gIHZhciBpbWFnZUlkID0gdXNlUmVnaXN0ZXJJbWFnZShjYW5QcmV2aWV3LCByZWdpc3RlckRhdGEpO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09IFByZXZpZXcgPT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBvblByZXZpZXcgPSBmdW5jdGlvbiBvblByZXZpZXcoZSkge1xuICAgIHZhciBfZ2V0T2Zmc2V0ID0gZ2V0T2Zmc2V0KGUudGFyZ2V0KSxcbiAgICAgIGxlZnQgPSBfZ2V0T2Zmc2V0LmxlZnQsXG4gICAgICB0b3AgPSBfZ2V0T2Zmc2V0LnRvcDtcbiAgICBpZiAoZ3JvdXBDb250ZXh0KSB7XG4gICAgICBncm91cENvbnRleHQub25QcmV2aWV3KGltYWdlSWQsIHNyYywgbGVmdCwgdG9wKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0TW91c2VQb3NpdGlvbih7XG4gICAgICAgIHg6IGxlZnQsXG4gICAgICAgIHk6IHRvcFxuICAgICAgfSk7XG4gICAgICBzZXRTaG93UHJldmlldyh0cnVlKTtcbiAgICB9XG4gICAgb25DbGljayA9PT0gbnVsbCB8fCBvbkNsaWNrID09PSB2b2lkIDAgfHwgb25DbGljayhlKTtcbiAgfTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT0gUmVuZGVyID09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIF9leHRlbmRzKHt9LCBvdGhlclByb3BzLCB7XG4gICAgY2xhc3NOYW1lOiB3cmFwcGVyQ2xhc3MsXG4gICAgb25DbGljazogY2FuUHJldmlldyA/IG9uUHJldmlldyA6IG9uQ2xpY2ssXG4gICAgc3R5bGU6IF9vYmplY3RTcHJlYWQoe1xuICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgaGVpZ2h0OiBoZWlnaHRcbiAgICB9LCB3cmFwcGVyU3R5bGUpXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImltZ1wiLCBfZXh0ZW5kcyh7fSwgaW1nQ29tbW9uUHJvcHMsIHtcbiAgICBjbGFzc05hbWU6IGNuKFwiXCIuY29uY2F0KHByZWZpeENscywgXCItaW1nXCIpLCBfZGVmaW5lUHJvcGVydHkoe30sIFwiXCIuY29uY2F0KHByZWZpeENscywgXCItaW1nLXBsYWNlaG9sZGVyXCIpLCBwbGFjZWhvbGRlciA9PT0gdHJ1ZSksIGNsYXNzTmFtZSksXG4gICAgc3R5bGU6IF9vYmplY3RTcHJlYWQoe1xuICAgICAgaGVpZ2h0OiBoZWlnaHRcbiAgICB9LCBzdHlsZSksXG4gICAgcmVmOiBnZXRJbWdSZWZcbiAgfSwgc3JjQW5kT25sb2FkLCB7XG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0LFxuICAgIG9uRXJyb3I6IG9uRXJyb3JcbiAgfSkpLCBzdGF0dXMgPT09ICdsb2FkaW5nJyAmJiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgXCJhcmlhLWhpZGRlblwiOiBcInRydWVcIixcbiAgICBjbGFzc05hbWU6IFwiXCIuY29uY2F0KHByZWZpeENscywgXCItcGxhY2Vob2xkZXJcIilcbiAgfSwgcGxhY2Vob2xkZXIpLCBwcmV2aWV3TWFzayAmJiBjYW5QcmV2aWV3ICYmIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICBjbGFzc05hbWU6IGNuKFwiXCIuY29uY2F0KHByZWZpeENscywgXCItbWFza1wiKSwgbWFza0NsYXNzTmFtZSksXG4gICAgc3R5bGU6IHtcbiAgICAgIGRpc3BsYXk6IChzdHlsZSA9PT0gbnVsbCB8fCBzdHlsZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc3R5bGUuZGlzcGxheSkgPT09ICdub25lJyA/ICdub25lJyA6IHVuZGVmaW5lZFxuICAgIH1cbiAgfSwgcHJldmlld01hc2spKSwgIWdyb3VwQ29udGV4dCAmJiBjYW5QcmV2aWV3ICYmIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFByZXZpZXcsIF9leHRlbmRzKHtcbiAgICBcImFyaWEtaGlkZGVuXCI6ICFpc1Nob3dQcmV2aWV3LFxuICAgIHZpc2libGU6IGlzU2hvd1ByZXZpZXcsXG4gICAgcHJlZml4Q2xzOiBwcmV2aWV3UHJlZml4Q2xzLFxuICAgIG9uQ2xvc2U6IG9uUHJldmlld0Nsb3NlLFxuICAgIG1vdXNlUG9zaXRpb246IG1vdXNlUG9zaXRpb24sXG4gICAgc3JjOiBzcmMsXG4gICAgYWx0OiBhbHQsXG4gICAgaW1hZ2VJbmZvOiB7XG4gICAgICB3aWR0aDogd2lkdGgsXG4gICAgICBoZWlnaHQ6IGhlaWdodFxuICAgIH0sXG4gICAgZmFsbGJhY2s6IGZhbGxiYWNrLFxuICAgIGdldENvbnRhaW5lcjogZ2V0UHJldmlld0NvbnRhaW5lcixcbiAgICBpY29uczogaWNvbnMsXG4gICAgbW92YWJsZTogbW92YWJsZSxcbiAgICBzY2FsZVN0ZXA6IHNjYWxlU3RlcCxcbiAgICBtaW5TY2FsZTogbWluU2NhbGUsXG4gICAgbWF4U2NhbGU6IG1heFNjYWxlLFxuICAgIHJvb3RDbGFzc05hbWU6IHJvb3RDbGFzc05hbWUsXG4gICAgaW1hZ2VSZW5kZXI6IGltYWdlUmVuZGVyLFxuICAgIGltZ0NvbW1vblByb3BzOiBpbWdDb21tb25Qcm9wcyxcbiAgICB0b29sYmFyUmVuZGVyOiB0b29sYmFyUmVuZGVyXG4gIH0sIGRpYWxvZ1Byb3BzKSkpO1xufTtcbkltYWdlSW50ZXJuYWwuUHJldmlld0dyb3VwID0gUHJldmlld0dyb3VwO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgSW1hZ2VJbnRlcm5hbC5kaXNwbGF5TmFtZSA9ICdJbWFnZSc7XG59XG5leHBvcnQgZGVmYXVsdCBJbWFnZUludGVybmFsOyIsImltcG9ydCBfb2JqZWN0U3ByZWFkIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyXCI7XG5pbXBvcnQgX2RlZmluZVByb3BlcnR5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eVwiO1xuaW1wb3J0IFBvcnRhbCBmcm9tICdAcmMtY29tcG9uZW50L3BvcnRhbCc7XG5pbXBvcnQgY2xhc3NuYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBDU1NNb3Rpb24gZnJvbSAncmMtbW90aW9uJztcbmltcG9ydCBLZXlDb2RlIGZyb20gXCJyYy11dGlsL2VzL0tleUNvZGVcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBQcmV2aWV3R3JvdXBDb250ZXh0IH0gZnJvbSBcIi4vY29udGV4dFwiO1xudmFyIE9wZXJhdGlvbnMgPSBmdW5jdGlvbiBPcGVyYXRpb25zKHByb3BzKSB7XG4gIHZhciB2aXNpYmxlID0gcHJvcHMudmlzaWJsZSxcbiAgICBtYXNrVHJhbnNpdGlvbk5hbWUgPSBwcm9wcy5tYXNrVHJhbnNpdGlvbk5hbWUsXG4gICAgZ2V0Q29udGFpbmVyID0gcHJvcHMuZ2V0Q29udGFpbmVyLFxuICAgIHByZWZpeENscyA9IHByb3BzLnByZWZpeENscyxcbiAgICByb290Q2xhc3NOYW1lID0gcHJvcHMucm9vdENsYXNzTmFtZSxcbiAgICBpY29ucyA9IHByb3BzLmljb25zLFxuICAgIGNvdW50UmVuZGVyID0gcHJvcHMuY291bnRSZW5kZXIsXG4gICAgc2hvd1N3aXRjaCA9IHByb3BzLnNob3dTd2l0Y2gsXG4gICAgc2hvd1Byb2dyZXNzID0gcHJvcHMuc2hvd1Byb2dyZXNzLFxuICAgIGN1cnJlbnQgPSBwcm9wcy5jdXJyZW50LFxuICAgIHRyYW5zZm9ybSA9IHByb3BzLnRyYW5zZm9ybSxcbiAgICBjb3VudCA9IHByb3BzLmNvdW50LFxuICAgIHNjYWxlID0gcHJvcHMuc2NhbGUsXG4gICAgbWluU2NhbGUgPSBwcm9wcy5taW5TY2FsZSxcbiAgICBtYXhTY2FsZSA9IHByb3BzLm1heFNjYWxlLFxuICAgIGNsb3NlSWNvbiA9IHByb3BzLmNsb3NlSWNvbixcbiAgICBvbkFjdGl2ZSA9IHByb3BzLm9uQWN0aXZlLFxuICAgIG9uQ2xvc2UgPSBwcm9wcy5vbkNsb3NlLFxuICAgIG9uWm9vbUluID0gcHJvcHMub25ab29tSW4sXG4gICAgb25ab29tT3V0ID0gcHJvcHMub25ab29tT3V0LFxuICAgIG9uUm90YXRlUmlnaHQgPSBwcm9wcy5vblJvdGF0ZVJpZ2h0LFxuICAgIG9uUm90YXRlTGVmdCA9IHByb3BzLm9uUm90YXRlTGVmdCxcbiAgICBvbkZsaXBYID0gcHJvcHMub25GbGlwWCxcbiAgICBvbkZsaXBZID0gcHJvcHMub25GbGlwWSxcbiAgICBvblJlc2V0ID0gcHJvcHMub25SZXNldCxcbiAgICB0b29sYmFyUmVuZGVyID0gcHJvcHMudG9vbGJhclJlbmRlcixcbiAgICB6SW5kZXggPSBwcm9wcy56SW5kZXgsXG4gICAgaW1hZ2UgPSBwcm9wcy5pbWFnZTtcbiAgdmFyIGdyb3VwQ29udGV4dCA9IHVzZUNvbnRleHQoUHJldmlld0dyb3VwQ29udGV4dCk7XG4gIHZhciByb3RhdGVMZWZ0ID0gaWNvbnMucm90YXRlTGVmdCxcbiAgICByb3RhdGVSaWdodCA9IGljb25zLnJvdGF0ZVJpZ2h0LFxuICAgIHpvb21JbiA9IGljb25zLnpvb21JbixcbiAgICB6b29tT3V0ID0gaWNvbnMuem9vbU91dCxcbiAgICBjbG9zZSA9IGljb25zLmNsb3NlLFxuICAgIGxlZnQgPSBpY29ucy5sZWZ0LFxuICAgIHJpZ2h0ID0gaWNvbnMucmlnaHQsXG4gICAgZmxpcFggPSBpY29ucy5mbGlwWCxcbiAgICBmbGlwWSA9IGljb25zLmZsaXBZO1xuICB2YXIgdG9vbENsYXNzTmFtZSA9IFwiXCIuY29uY2F0KHByZWZpeENscywgXCItb3BlcmF0aW9ucy1vcGVyYXRpb25cIik7XG4gIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG9uS2V5RG93biA9IGZ1bmN0aW9uIG9uS2V5RG93bihlKSB7XG4gICAgICBpZiAoZS5rZXlDb2RlID09PSBLZXlDb2RlLkVTQykge1xuICAgICAgICBvbkNsb3NlKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBpZiAodmlzaWJsZSkge1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBvbktleURvd24pO1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBvbktleURvd24pO1xuICAgIH07XG4gIH0sIFt2aXNpYmxlXSk7XG4gIHZhciBoYW5kbGVBY3RpdmUgPSBmdW5jdGlvbiBoYW5kbGVBY3RpdmUoZSwgb2Zmc2V0KSB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgb25BY3RpdmUob2Zmc2V0KTtcbiAgfTtcbiAgdmFyIHJlbmRlck9wZXJhdGlvbiA9IFJlYWN0LnVzZUNhbGxiYWNrKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgdmFyIHR5cGUgPSBfcmVmLnR5cGUsXG4gICAgICBkaXNhYmxlZCA9IF9yZWYuZGlzYWJsZWQsXG4gICAgICBvbkNsaWNrID0gX3JlZi5vbkNsaWNrLFxuICAgICAgaWNvbiA9IF9yZWYuaWNvbjtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAga2V5OiB0eXBlLFxuICAgICAgY2xhc3NOYW1lOiBjbGFzc25hbWVzKHRvb2xDbGFzc05hbWUsIFwiXCIuY29uY2F0KHByZWZpeENscywgXCItb3BlcmF0aW9ucy1vcGVyYXRpb24tXCIpLmNvbmNhdCh0eXBlKSwgX2RlZmluZVByb3BlcnR5KHt9LCBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLW9wZXJhdGlvbnMtb3BlcmF0aW9uLWRpc2FibGVkXCIpLCAhIWRpc2FibGVkKSksXG4gICAgICBvbkNsaWNrOiBvbkNsaWNrXG4gICAgfSwgaWNvbik7XG4gIH0sIFt0b29sQ2xhc3NOYW1lLCBwcmVmaXhDbHNdKTtcbiAgdmFyIHN3aXRjaFByZXZOb2RlID0gc2hvd1N3aXRjaCA/IHJlbmRlck9wZXJhdGlvbih7XG4gICAgaWNvbjogbGVmdCxcbiAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKGUpIHtcbiAgICAgIHJldHVybiBoYW5kbGVBY3RpdmUoZSwgLTEpO1xuICAgIH0sXG4gICAgdHlwZTogJ3ByZXYnLFxuICAgIGRpc2FibGVkOiBjdXJyZW50ID09PSAwXG4gIH0pIDogdW5kZWZpbmVkO1xuICB2YXIgc3dpdGNoTmV4dE5vZGUgPSBzaG93U3dpdGNoID8gcmVuZGVyT3BlcmF0aW9uKHtcbiAgICBpY29uOiByaWdodCxcbiAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKGUpIHtcbiAgICAgIHJldHVybiBoYW5kbGVBY3RpdmUoZSwgMSk7XG4gICAgfSxcbiAgICB0eXBlOiAnbmV4dCcsXG4gICAgZGlzYWJsZWQ6IGN1cnJlbnQgPT09IGNvdW50IC0gMVxuICB9KSA6IHVuZGVmaW5lZDtcbiAgdmFyIGZsaXBZTm9kZSA9IHJlbmRlck9wZXJhdGlvbih7XG4gICAgaWNvbjogZmxpcFksXG4gICAgb25DbGljazogb25GbGlwWSxcbiAgICB0eXBlOiAnZmxpcFknXG4gIH0pO1xuICB2YXIgZmxpcFhOb2RlID0gcmVuZGVyT3BlcmF0aW9uKHtcbiAgICBpY29uOiBmbGlwWCxcbiAgICBvbkNsaWNrOiBvbkZsaXBYLFxuICAgIHR5cGU6ICdmbGlwWCdcbiAgfSk7XG4gIHZhciByb3RhdGVMZWZ0Tm9kZSA9IHJlbmRlck9wZXJhdGlvbih7XG4gICAgaWNvbjogcm90YXRlTGVmdCxcbiAgICBvbkNsaWNrOiBvblJvdGF0ZUxlZnQsXG4gICAgdHlwZTogJ3JvdGF0ZUxlZnQnXG4gIH0pO1xuICB2YXIgcm90YXRlUmlnaHROb2RlID0gcmVuZGVyT3BlcmF0aW9uKHtcbiAgICBpY29uOiByb3RhdGVSaWdodCxcbiAgICBvbkNsaWNrOiBvblJvdGF0ZVJpZ2h0LFxuICAgIHR5cGU6ICdyb3RhdGVSaWdodCdcbiAgfSk7XG4gIHZhciB6b29tT3V0Tm9kZSA9IHJlbmRlck9wZXJhdGlvbih7XG4gICAgaWNvbjogem9vbU91dCxcbiAgICBvbkNsaWNrOiBvblpvb21PdXQsXG4gICAgdHlwZTogJ3pvb21PdXQnLFxuICAgIGRpc2FibGVkOiBzY2FsZSA8PSBtaW5TY2FsZVxuICB9KTtcbiAgdmFyIHpvb21Jbk5vZGUgPSByZW5kZXJPcGVyYXRpb24oe1xuICAgIGljb246IHpvb21JbixcbiAgICBvbkNsaWNrOiBvblpvb21JbixcbiAgICB0eXBlOiAnem9vbUluJyxcbiAgICBkaXNhYmxlZDogc2NhbGUgPT09IG1heFNjYWxlXG4gIH0pO1xuICB2YXIgdG9vbGJhck5vZGUgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgY2xhc3NOYW1lOiBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLW9wZXJhdGlvbnNcIilcbiAgfSwgZmxpcFlOb2RlLCBmbGlwWE5vZGUsIHJvdGF0ZUxlZnROb2RlLCByb3RhdGVSaWdodE5vZGUsIHpvb21PdXROb2RlLCB6b29tSW5Ob2RlKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KENTU01vdGlvbiwge1xuICAgIHZpc2libGU6IHZpc2libGUsXG4gICAgbW90aW9uTmFtZTogbWFza1RyYW5zaXRpb25OYW1lXG4gIH0sIGZ1bmN0aW9uIChfcmVmMikge1xuICAgIHZhciBjbGFzc05hbWUgPSBfcmVmMi5jbGFzc05hbWUsXG4gICAgICBzdHlsZSA9IF9yZWYyLnN0eWxlO1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChQb3J0YWwsIHtcbiAgICAgIG9wZW46IHRydWUsXG4gICAgICBnZXRDb250YWluZXI6IGdldENvbnRhaW5lciAhPT0gbnVsbCAmJiBnZXRDb250YWluZXIgIT09IHZvaWQgMCA/IGdldENvbnRhaW5lciA6IGRvY3VtZW50LmJvZHlcbiAgICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICBjbGFzc05hbWU6IGNsYXNzbmFtZXMoXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1vcGVyYXRpb25zLXdyYXBwZXJcIiksIGNsYXNzTmFtZSwgcm9vdENsYXNzTmFtZSksXG4gICAgICBzdHlsZTogX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBzdHlsZSksIHt9LCB7XG4gICAgICAgIHpJbmRleDogekluZGV4XG4gICAgICB9KVxuICAgIH0sIGNsb3NlSWNvbiA9PT0gbnVsbCA/IG51bGwgOiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLCB7XG4gICAgICBjbGFzc05hbWU6IFwiXCIuY29uY2F0KHByZWZpeENscywgXCItY2xvc2VcIiksXG4gICAgICBvbkNsaWNrOiBvbkNsb3NlXG4gICAgfSwgY2xvc2VJY29uIHx8IGNsb3NlKSwgc2hvd1N3aXRjaCAmJiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3NOYW1lOiBjbGFzc25hbWVzKFwiXCIuY29uY2F0KHByZWZpeENscywgXCItc3dpdGNoLWxlZnRcIiksIF9kZWZpbmVQcm9wZXJ0eSh7fSwgXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1zd2l0Y2gtbGVmdC1kaXNhYmxlZFwiKSwgY3VycmVudCA9PT0gMCkpLFxuICAgICAgb25DbGljazogZnVuY3Rpb24gb25DbGljayhlKSB7XG4gICAgICAgIHJldHVybiBoYW5kbGVBY3RpdmUoZSwgLTEpO1xuICAgICAgfVxuICAgIH0sIGxlZnQpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICBjbGFzc05hbWU6IGNsYXNzbmFtZXMoXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1zd2l0Y2gtcmlnaHRcIiksIF9kZWZpbmVQcm9wZXJ0eSh7fSwgXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1zd2l0Y2gtcmlnaHQtZGlzYWJsZWRcIiksIGN1cnJlbnQgPT09IGNvdW50IC0gMSkpLFxuICAgICAgb25DbGljazogZnVuY3Rpb24gb25DbGljayhlKSB7XG4gICAgICAgIHJldHVybiBoYW5kbGVBY3RpdmUoZSwgMSk7XG4gICAgICB9XG4gICAgfSwgcmlnaHQpKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3NOYW1lOiBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLWZvb3RlclwiKVxuICAgIH0sIHNob3dQcm9ncmVzcyAmJiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICBjbGFzc05hbWU6IFwiXCIuY29uY2F0KHByZWZpeENscywgXCItcHJvZ3Jlc3NcIilcbiAgICB9LCBjb3VudFJlbmRlciA/IGNvdW50UmVuZGVyKGN1cnJlbnQgKyAxLCBjb3VudCkgOiBcIlwiLmNvbmNhdChjdXJyZW50ICsgMSwgXCIgLyBcIikuY29uY2F0KGNvdW50KSksIHRvb2xiYXJSZW5kZXIgPyB0b29sYmFyUmVuZGVyKHRvb2xiYXJOb2RlLCBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe1xuICAgICAgaWNvbnM6IHtcbiAgICAgICAgcHJldkljb246IHN3aXRjaFByZXZOb2RlLFxuICAgICAgICBuZXh0SWNvbjogc3dpdGNoTmV4dE5vZGUsXG4gICAgICAgIGZsaXBZSWNvbjogZmxpcFlOb2RlLFxuICAgICAgICBmbGlwWEljb246IGZsaXBYTm9kZSxcbiAgICAgICAgcm90YXRlTGVmdEljb246IHJvdGF0ZUxlZnROb2RlLFxuICAgICAgICByb3RhdGVSaWdodEljb246IHJvdGF0ZVJpZ2h0Tm9kZSxcbiAgICAgICAgem9vbU91dEljb246IHpvb21PdXROb2RlLFxuICAgICAgICB6b29tSW5JY29uOiB6b29tSW5Ob2RlXG4gICAgICB9LFxuICAgICAgYWN0aW9uczoge1xuICAgICAgICBvbkFjdGl2ZTogb25BY3RpdmUsXG4gICAgICAgIG9uRmxpcFk6IG9uRmxpcFksXG4gICAgICAgIG9uRmxpcFg6IG9uRmxpcFgsXG4gICAgICAgIG9uUm90YXRlTGVmdDogb25Sb3RhdGVMZWZ0LFxuICAgICAgICBvblJvdGF0ZVJpZ2h0OiBvblJvdGF0ZVJpZ2h0LFxuICAgICAgICBvblpvb21PdXQ6IG9uWm9vbU91dCxcbiAgICAgICAgb25ab29tSW46IG9uWm9vbUluLFxuICAgICAgICBvblJlc2V0OiBvblJlc2V0LFxuICAgICAgICBvbkNsb3NlOiBvbkNsb3NlXG4gICAgICB9LFxuICAgICAgdHJhbnNmb3JtOiB0cmFuc2Zvcm1cbiAgICB9LCBncm91cENvbnRleHQgPyB7XG4gICAgICBjdXJyZW50OiBjdXJyZW50LFxuICAgICAgdG90YWw6IGNvdW50XG4gICAgfSA6IHt9KSwge30sIHtcbiAgICAgIGltYWdlOiBpbWFnZVxuICAgIH0pKSA6IHRvb2xiYXJOb2RlKSkpO1xuICB9KTtcbn07XG5leHBvcnQgZGVmYXVsdCBPcGVyYXRpb25zOyIsImltcG9ydCBfb2JqZWN0U3ByZWFkIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyXCI7XG5pbXBvcnQgX2RlZmluZVByb3BlcnR5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX3NsaWNlZFRvQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXlcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzXCI7XG52YXIgX2V4Y2x1ZGVkID0gW1wiZmFsbGJhY2tcIiwgXCJzcmNcIiwgXCJpbWdSZWZcIl0sXG4gIF9leGNsdWRlZDIgPSBbXCJwcmVmaXhDbHNcIiwgXCJzcmNcIiwgXCJhbHRcIiwgXCJpbWFnZUluZm9cIiwgXCJmYWxsYmFja1wiLCBcIm1vdmFibGVcIiwgXCJvbkNsb3NlXCIsIFwidmlzaWJsZVwiLCBcImljb25zXCIsIFwicm9vdENsYXNzTmFtZVwiLCBcImNsb3NlSWNvblwiLCBcImdldENvbnRhaW5lclwiLCBcImN1cnJlbnRcIiwgXCJjb3VudFwiLCBcImNvdW50UmVuZGVyXCIsIFwic2NhbGVTdGVwXCIsIFwibWluU2NhbGVcIiwgXCJtYXhTY2FsZVwiLCBcInRyYW5zaXRpb25OYW1lXCIsIFwibWFza1RyYW5zaXRpb25OYW1lXCIsIFwiaW1hZ2VSZW5kZXJcIiwgXCJpbWdDb21tb25Qcm9wc1wiLCBcInRvb2xiYXJSZW5kZXJcIiwgXCJvblRyYW5zZm9ybVwiLCBcIm9uQ2hhbmdlXCJdO1xuaW1wb3J0IGNsYXNzbmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgRGlhbG9nIGZyb20gJ3JjLWRpYWxvZyc7XG5pbXBvcnQgYWRkRXZlbnRMaXN0ZW5lciBmcm9tIFwicmMtdXRpbC9lcy9Eb20vYWRkRXZlbnRMaXN0ZW5lclwiO1xuaW1wb3J0IEtleUNvZGUgZnJvbSBcInJjLXV0aWwvZXMvS2V5Q29kZVwiO1xuaW1wb3J0IFJlYWN0LCB7IHVzZUNvbnRleHQsIHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBPcGVyYXRpb25zIGZyb20gXCIuL09wZXJhdGlvbnNcIjtcbmltcG9ydCB7IFByZXZpZXdHcm91cENvbnRleHQgfSBmcm9tIFwiLi9jb250ZXh0XCI7XG5pbXBvcnQgdXNlSW1hZ2VUcmFuc2Zvcm0gZnJvbSBcIi4vaG9va3MvdXNlSW1hZ2VUcmFuc2Zvcm1cIjtcbmltcG9ydCB1c2VNb3VzZUV2ZW50IGZyb20gXCIuL2hvb2tzL3VzZU1vdXNlRXZlbnRcIjtcbmltcG9ydCB1c2VTdGF0dXMgZnJvbSBcIi4vaG9va3MvdXNlU3RhdHVzXCI7XG5pbXBvcnQgdXNlVG91Y2hFdmVudCBmcm9tIFwiLi9ob29rcy91c2VUb3VjaEV2ZW50XCI7XG5pbXBvcnQgeyBCQVNFX1NDQUxFX1JBVElPIH0gZnJvbSBcIi4vcHJldmlld0NvbmZpZ1wiO1xudmFyIFByZXZpZXdJbWFnZSA9IGZ1bmN0aW9uIFByZXZpZXdJbWFnZShfcmVmKSB7XG4gIHZhciBmYWxsYmFjayA9IF9yZWYuZmFsbGJhY2ssXG4gICAgc3JjID0gX3JlZi5zcmMsXG4gICAgaW1nUmVmID0gX3JlZi5pbWdSZWYsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIF91c2VTdGF0dXMgPSB1c2VTdGF0dXMoe1xuICAgICAgc3JjOiBzcmMsXG4gICAgICBmYWxsYmFjazogZmFsbGJhY2tcbiAgICB9KSxcbiAgICBfdXNlU3RhdHVzMiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0dXMsIDIpLFxuICAgIGdldEltZ1JlZiA9IF91c2VTdGF0dXMyWzBdLFxuICAgIHNyY0FuZE9ubG9hZCA9IF91c2VTdGF0dXMyWzFdO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogZnVuY3Rpb24gcmVmKF9yZWYyKSB7XG4gICAgICBpbWdSZWYuY3VycmVudCA9IF9yZWYyO1xuICAgICAgZ2V0SW1nUmVmKF9yZWYyKTtcbiAgICB9XG4gIH0sIHByb3BzLCBzcmNBbmRPbmxvYWQpKTtcbn07XG52YXIgUHJldmlldyA9IGZ1bmN0aW9uIFByZXZpZXcocHJvcHMpIHtcbiAgdmFyIHByZWZpeENscyA9IHByb3BzLnByZWZpeENscyxcbiAgICBzcmMgPSBwcm9wcy5zcmMsXG4gICAgYWx0ID0gcHJvcHMuYWx0LFxuICAgIGltYWdlSW5mbyA9IHByb3BzLmltYWdlSW5mbyxcbiAgICBmYWxsYmFjayA9IHByb3BzLmZhbGxiYWNrLFxuICAgIF9wcm9wcyRtb3ZhYmxlID0gcHJvcHMubW92YWJsZSxcbiAgICBtb3ZhYmxlID0gX3Byb3BzJG1vdmFibGUgPT09IHZvaWQgMCA/IHRydWUgOiBfcHJvcHMkbW92YWJsZSxcbiAgICBvbkNsb3NlID0gcHJvcHMub25DbG9zZSxcbiAgICB2aXNpYmxlID0gcHJvcHMudmlzaWJsZSxcbiAgICBfcHJvcHMkaWNvbnMgPSBwcm9wcy5pY29ucyxcbiAgICBpY29ucyA9IF9wcm9wcyRpY29ucyA9PT0gdm9pZCAwID8ge30gOiBfcHJvcHMkaWNvbnMsXG4gICAgcm9vdENsYXNzTmFtZSA9IHByb3BzLnJvb3RDbGFzc05hbWUsXG4gICAgY2xvc2VJY29uID0gcHJvcHMuY2xvc2VJY29uLFxuICAgIGdldENvbnRhaW5lciA9IHByb3BzLmdldENvbnRhaW5lcixcbiAgICBfcHJvcHMkY3VycmVudCA9IHByb3BzLmN1cnJlbnQsXG4gICAgY3VycmVudCA9IF9wcm9wcyRjdXJyZW50ID09PSB2b2lkIDAgPyAwIDogX3Byb3BzJGN1cnJlbnQsXG4gICAgX3Byb3BzJGNvdW50ID0gcHJvcHMuY291bnQsXG4gICAgY291bnQgPSBfcHJvcHMkY291bnQgPT09IHZvaWQgMCA/IDEgOiBfcHJvcHMkY291bnQsXG4gICAgY291bnRSZW5kZXIgPSBwcm9wcy5jb3VudFJlbmRlcixcbiAgICBfcHJvcHMkc2NhbGVTdGVwID0gcHJvcHMuc2NhbGVTdGVwLFxuICAgIHNjYWxlU3RlcCA9IF9wcm9wcyRzY2FsZVN0ZXAgPT09IHZvaWQgMCA/IDAuNSA6IF9wcm9wcyRzY2FsZVN0ZXAsXG4gICAgX3Byb3BzJG1pblNjYWxlID0gcHJvcHMubWluU2NhbGUsXG4gICAgbWluU2NhbGUgPSBfcHJvcHMkbWluU2NhbGUgPT09IHZvaWQgMCA/IDEgOiBfcHJvcHMkbWluU2NhbGUsXG4gICAgX3Byb3BzJG1heFNjYWxlID0gcHJvcHMubWF4U2NhbGUsXG4gICAgbWF4U2NhbGUgPSBfcHJvcHMkbWF4U2NhbGUgPT09IHZvaWQgMCA/IDUwIDogX3Byb3BzJG1heFNjYWxlLFxuICAgIF9wcm9wcyR0cmFuc2l0aW9uTmFtZSA9IHByb3BzLnRyYW5zaXRpb25OYW1lLFxuICAgIHRyYW5zaXRpb25OYW1lID0gX3Byb3BzJHRyYW5zaXRpb25OYW1lID09PSB2b2lkIDAgPyAnem9vbScgOiBfcHJvcHMkdHJhbnNpdGlvbk5hbWUsXG4gICAgX3Byb3BzJG1hc2tUcmFuc2l0aW9uID0gcHJvcHMubWFza1RyYW5zaXRpb25OYW1lLFxuICAgIG1hc2tUcmFuc2l0aW9uTmFtZSA9IF9wcm9wcyRtYXNrVHJhbnNpdGlvbiA9PT0gdm9pZCAwID8gJ2ZhZGUnIDogX3Byb3BzJG1hc2tUcmFuc2l0aW9uLFxuICAgIGltYWdlUmVuZGVyID0gcHJvcHMuaW1hZ2VSZW5kZXIsXG4gICAgaW1nQ29tbW9uUHJvcHMgPSBwcm9wcy5pbWdDb21tb25Qcm9wcyxcbiAgICB0b29sYmFyUmVuZGVyID0gcHJvcHMudG9vbGJhclJlbmRlcixcbiAgICBvblRyYW5zZm9ybSA9IHByb3BzLm9uVHJhbnNmb3JtLFxuICAgIG9uQ2hhbmdlID0gcHJvcHMub25DaGFuZ2UsXG4gICAgcmVzdFByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHByb3BzLCBfZXhjbHVkZWQyKTtcbiAgdmFyIGltZ1JlZiA9IHVzZVJlZigpO1xuICB2YXIgZ3JvdXBDb250ZXh0ID0gdXNlQ29udGV4dChQcmV2aWV3R3JvdXBDb250ZXh0KTtcbiAgdmFyIHNob3dMZWZ0T3JSaWdodFN3aXRjaGVzID0gZ3JvdXBDb250ZXh0ICYmIGNvdW50ID4gMTtcbiAgdmFyIHNob3dPcGVyYXRpb25zUHJvZ3Jlc3MgPSBncm91cENvbnRleHQgJiYgY291bnQgPj0gMTtcbiAgdmFyIF91c2VTdGF0ZSA9IHVzZVN0YXRlKHRydWUpLFxuICAgIF91c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUsIDIpLFxuICAgIGVuYWJsZVRyYW5zaXRpb24gPSBfdXNlU3RhdGUyWzBdLFxuICAgIHNldEVuYWJsZVRyYW5zaXRpb24gPSBfdXNlU3RhdGUyWzFdO1xuICB2YXIgX3VzZUltYWdlVHJhbnNmb3JtID0gdXNlSW1hZ2VUcmFuc2Zvcm0oaW1nUmVmLCBtaW5TY2FsZSwgbWF4U2NhbGUsIG9uVHJhbnNmb3JtKSxcbiAgICB0cmFuc2Zvcm0gPSBfdXNlSW1hZ2VUcmFuc2Zvcm0udHJhbnNmb3JtLFxuICAgIHJlc2V0VHJhbnNmb3JtID0gX3VzZUltYWdlVHJhbnNmb3JtLnJlc2V0VHJhbnNmb3JtLFxuICAgIHVwZGF0ZVRyYW5zZm9ybSA9IF91c2VJbWFnZVRyYW5zZm9ybS51cGRhdGVUcmFuc2Zvcm0sXG4gICAgZGlzcGF0Y2hab29tQ2hhbmdlID0gX3VzZUltYWdlVHJhbnNmb3JtLmRpc3BhdGNoWm9vbUNoYW5nZTtcbiAgdmFyIF91c2VNb3VzZUV2ZW50ID0gdXNlTW91c2VFdmVudChpbWdSZWYsIG1vdmFibGUsIHZpc2libGUsIHNjYWxlU3RlcCwgdHJhbnNmb3JtLCB1cGRhdGVUcmFuc2Zvcm0sIGRpc3BhdGNoWm9vbUNoYW5nZSksXG4gICAgaXNNb3ZpbmcgPSBfdXNlTW91c2VFdmVudC5pc01vdmluZyxcbiAgICBvbk1vdXNlRG93biA9IF91c2VNb3VzZUV2ZW50Lm9uTW91c2VEb3duLFxuICAgIG9uV2hlZWwgPSBfdXNlTW91c2VFdmVudC5vbldoZWVsO1xuICB2YXIgX3VzZVRvdWNoRXZlbnQgPSB1c2VUb3VjaEV2ZW50KGltZ1JlZiwgbW92YWJsZSwgdmlzaWJsZSwgbWluU2NhbGUsIHRyYW5zZm9ybSwgdXBkYXRlVHJhbnNmb3JtLCBkaXNwYXRjaFpvb21DaGFuZ2UpLFxuICAgIGlzVG91Y2hpbmcgPSBfdXNlVG91Y2hFdmVudC5pc1RvdWNoaW5nLFxuICAgIG9uVG91Y2hTdGFydCA9IF91c2VUb3VjaEV2ZW50Lm9uVG91Y2hTdGFydCxcbiAgICBvblRvdWNoTW92ZSA9IF91c2VUb3VjaEV2ZW50Lm9uVG91Y2hNb3ZlLFxuICAgIG9uVG91Y2hFbmQgPSBfdXNlVG91Y2hFdmVudC5vblRvdWNoRW5kO1xuICB2YXIgcm90YXRlID0gdHJhbnNmb3JtLnJvdGF0ZSxcbiAgICBzY2FsZSA9IHRyYW5zZm9ybS5zY2FsZTtcbiAgdmFyIHdyYXBDbGFzc05hbWUgPSBjbGFzc25hbWVzKF9kZWZpbmVQcm9wZXJ0eSh7fSwgXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1tb3ZpbmdcIiksIGlzTW92aW5nKSk7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFlbmFibGVUcmFuc2l0aW9uKSB7XG4gICAgICBzZXRFbmFibGVUcmFuc2l0aW9uKHRydWUpO1xuICAgIH1cbiAgfSwgW2VuYWJsZVRyYW5zaXRpb25dKTtcbiAgdmFyIG9uQWZ0ZXJDbG9zZSA9IGZ1bmN0aW9uIG9uQWZ0ZXJDbG9zZSgpIHtcbiAgICByZXNldFRyYW5zZm9ybSgnY2xvc2UnKTtcbiAgfTtcbiAgdmFyIG9uWm9vbUluID0gZnVuY3Rpb24gb25ab29tSW4oKSB7XG4gICAgZGlzcGF0Y2hab29tQ2hhbmdlKEJBU0VfU0NBTEVfUkFUSU8gKyBzY2FsZVN0ZXAsICd6b29tSW4nKTtcbiAgfTtcbiAgdmFyIG9uWm9vbU91dCA9IGZ1bmN0aW9uIG9uWm9vbU91dCgpIHtcbiAgICBkaXNwYXRjaFpvb21DaGFuZ2UoQkFTRV9TQ0FMRV9SQVRJTyAvIChCQVNFX1NDQUxFX1JBVElPICsgc2NhbGVTdGVwKSwgJ3pvb21PdXQnKTtcbiAgfTtcbiAgdmFyIG9uUm90YXRlUmlnaHQgPSBmdW5jdGlvbiBvblJvdGF0ZVJpZ2h0KCkge1xuICAgIHVwZGF0ZVRyYW5zZm9ybSh7XG4gICAgICByb3RhdGU6IHJvdGF0ZSArIDkwXG4gICAgfSwgJ3JvdGF0ZVJpZ2h0Jyk7XG4gIH07XG4gIHZhciBvblJvdGF0ZUxlZnQgPSBmdW5jdGlvbiBvblJvdGF0ZUxlZnQoKSB7XG4gICAgdXBkYXRlVHJhbnNmb3JtKHtcbiAgICAgIHJvdGF0ZTogcm90YXRlIC0gOTBcbiAgICB9LCAncm90YXRlTGVmdCcpO1xuICB9O1xuICB2YXIgb25GbGlwWCA9IGZ1bmN0aW9uIG9uRmxpcFgoKSB7XG4gICAgdXBkYXRlVHJhbnNmb3JtKHtcbiAgICAgIGZsaXBYOiAhdHJhbnNmb3JtLmZsaXBYXG4gICAgfSwgJ2ZsaXBYJyk7XG4gIH07XG4gIHZhciBvbkZsaXBZID0gZnVuY3Rpb24gb25GbGlwWSgpIHtcbiAgICB1cGRhdGVUcmFuc2Zvcm0oe1xuICAgICAgZmxpcFk6ICF0cmFuc2Zvcm0uZmxpcFlcbiAgICB9LCAnZmxpcFknKTtcbiAgfTtcbiAgdmFyIG9uUmVzZXQgPSBmdW5jdGlvbiBvblJlc2V0KCkge1xuICAgIHJlc2V0VHJhbnNmb3JtKCdyZXNldCcpO1xuICB9O1xuICB2YXIgb25BY3RpdmUgPSBmdW5jdGlvbiBvbkFjdGl2ZShvZmZzZXQpIHtcbiAgICB2YXIgcG9zaXRpb24gPSBjdXJyZW50ICsgb2Zmc2V0O1xuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihwb3NpdGlvbikgfHwgcG9zaXRpb24gPCAwIHx8IHBvc2l0aW9uID4gY291bnQgLSAxKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHNldEVuYWJsZVRyYW5zaXRpb24oZmFsc2UpO1xuICAgIHJlc2V0VHJhbnNmb3JtKG9mZnNldCA8IDAgPyAncHJldicgOiAnbmV4dCcpO1xuICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgfHwgb25DaGFuZ2UocG9zaXRpb24sIGN1cnJlbnQpO1xuICB9O1xuICB2YXIgb25LZXlEb3duID0gZnVuY3Rpb24gb25LZXlEb3duKGV2ZW50KSB7XG4gICAgaWYgKCF2aXNpYmxlIHx8ICFzaG93TGVmdE9yUmlnaHRTd2l0Y2hlcykgcmV0dXJuO1xuICAgIGlmIChldmVudC5rZXlDb2RlID09PSBLZXlDb2RlLkxFRlQpIHtcbiAgICAgIG9uQWN0aXZlKC0xKTtcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmtleUNvZGUgPT09IEtleUNvZGUuUklHSFQpIHtcbiAgICAgIG9uQWN0aXZlKDEpO1xuICAgIH1cbiAgfTtcbiAgdmFyIG9uRG91YmxlQ2xpY2sgPSBmdW5jdGlvbiBvbkRvdWJsZUNsaWNrKGV2ZW50KSB7XG4gICAgaWYgKHZpc2libGUpIHtcbiAgICAgIGlmIChzY2FsZSAhPT0gMSkge1xuICAgICAgICB1cGRhdGVUcmFuc2Zvcm0oe1xuICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgeTogMCxcbiAgICAgICAgICBzY2FsZTogMVxuICAgICAgICB9LCAnZG91YmxlQ2xpY2snKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRpc3BhdGNoWm9vbUNoYW5nZShCQVNFX1NDQUxFX1JBVElPICsgc2NhbGVTdGVwLCAnZG91YmxlQ2xpY2snLCBldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG9uS2V5RG93bkxpc3RlbmVyID0gYWRkRXZlbnRMaXN0ZW5lcih3aW5kb3csICdrZXlkb3duJywgb25LZXlEb3duLCBmYWxzZSk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIG9uS2V5RG93bkxpc3RlbmVyLnJlbW92ZSgpO1xuICAgIH07XG4gIH0sIFt2aXNpYmxlLCBzaG93TGVmdE9yUmlnaHRTd2l0Y2hlcywgY3VycmVudF0pO1xuICB2YXIgaW1nTm9kZSA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFByZXZpZXdJbWFnZSwgX2V4dGVuZHMoe30sIGltZ0NvbW1vblByb3BzLCB7XG4gICAgd2lkdGg6IHByb3BzLndpZHRoLFxuICAgIGhlaWdodDogcHJvcHMuaGVpZ2h0LFxuICAgIGltZ1JlZjogaW1nUmVmLFxuICAgIGNsYXNzTmFtZTogXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1pbWdcIiksXG4gICAgYWx0OiBhbHQsXG4gICAgc3R5bGU6IHtcbiAgICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUzZChcIi5jb25jYXQodHJhbnNmb3JtLngsIFwicHgsIFwiKS5jb25jYXQodHJhbnNmb3JtLnksIFwicHgsIDApIHNjYWxlM2QoXCIpLmNvbmNhdCh0cmFuc2Zvcm0uZmxpcFggPyAnLScgOiAnJykuY29uY2F0KHNjYWxlLCBcIiwgXCIpLmNvbmNhdCh0cmFuc2Zvcm0uZmxpcFkgPyAnLScgOiAnJykuY29uY2F0KHNjYWxlLCBcIiwgMSkgcm90YXRlKFwiKS5jb25jYXQocm90YXRlLCBcImRlZylcIiksXG4gICAgICB0cmFuc2l0aW9uRHVyYXRpb246ICghZW5hYmxlVHJhbnNpdGlvbiB8fCBpc1RvdWNoaW5nKSAmJiAnMHMnXG4gICAgfSxcbiAgICBmYWxsYmFjazogZmFsbGJhY2ssXG4gICAgc3JjOiBzcmMsXG4gICAgb25XaGVlbDogb25XaGVlbCxcbiAgICBvbk1vdXNlRG93bjogb25Nb3VzZURvd24sXG4gICAgb25Eb3VibGVDbGljazogb25Eb3VibGVDbGljayxcbiAgICBvblRvdWNoU3RhcnQ6IG9uVG91Y2hTdGFydCxcbiAgICBvblRvdWNoTW92ZTogb25Ub3VjaE1vdmUsXG4gICAgb25Ub3VjaEVuZDogb25Ub3VjaEVuZCxcbiAgICBvblRvdWNoQ2FuY2VsOiBvblRvdWNoRW5kXG4gIH0pKTtcbiAgdmFyIGltYWdlID0gX29iamVjdFNwcmVhZCh7XG4gICAgdXJsOiBzcmMsXG4gICAgYWx0OiBhbHRcbiAgfSwgaW1hZ2VJbmZvKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChEaWFsb2csIF9leHRlbmRzKHtcbiAgICB0cmFuc2l0aW9uTmFtZTogdHJhbnNpdGlvbk5hbWUsXG4gICAgbWFza1RyYW5zaXRpb25OYW1lOiBtYXNrVHJhbnNpdGlvbk5hbWUsXG4gICAgY2xvc2FibGU6IGZhbHNlLFxuICAgIGtleWJvYXJkOiB0cnVlLFxuICAgIHByZWZpeENsczogcHJlZml4Q2xzLFxuICAgIG9uQ2xvc2U6IG9uQ2xvc2UsXG4gICAgdmlzaWJsZTogdmlzaWJsZSxcbiAgICBjbGFzc05hbWVzOiB7XG4gICAgICB3cmFwcGVyOiB3cmFwQ2xhc3NOYW1lXG4gICAgfSxcbiAgICByb290Q2xhc3NOYW1lOiByb290Q2xhc3NOYW1lLFxuICAgIGdldENvbnRhaW5lcjogZ2V0Q29udGFpbmVyXG4gIH0sIHJlc3RQcm9wcywge1xuICAgIGFmdGVyQ2xvc2U6IG9uQWZ0ZXJDbG9zZVxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgIGNsYXNzTmFtZTogXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1pbWctd3JhcHBlclwiKVxuICB9LCBpbWFnZVJlbmRlciA/IGltYWdlUmVuZGVyKGltZ05vZGUsIF9vYmplY3RTcHJlYWQoe1xuICAgIHRyYW5zZm9ybTogdHJhbnNmb3JtLFxuICAgIGltYWdlOiBpbWFnZVxuICB9LCBncm91cENvbnRleHQgPyB7XG4gICAgY3VycmVudDogY3VycmVudFxuICB9IDoge30pKSA6IGltZ05vZGUpKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoT3BlcmF0aW9ucywge1xuICAgIHZpc2libGU6IHZpc2libGUsXG4gICAgdHJhbnNmb3JtOiB0cmFuc2Zvcm0sXG4gICAgbWFza1RyYW5zaXRpb25OYW1lOiBtYXNrVHJhbnNpdGlvbk5hbWUsXG4gICAgY2xvc2VJY29uOiBjbG9zZUljb24sXG4gICAgZ2V0Q29udGFpbmVyOiBnZXRDb250YWluZXIsXG4gICAgcHJlZml4Q2xzOiBwcmVmaXhDbHMsXG4gICAgcm9vdENsYXNzTmFtZTogcm9vdENsYXNzTmFtZSxcbiAgICBpY29uczogaWNvbnMsXG4gICAgY291bnRSZW5kZXI6IGNvdW50UmVuZGVyLFxuICAgIHNob3dTd2l0Y2g6IHNob3dMZWZ0T3JSaWdodFN3aXRjaGVzLFxuICAgIHNob3dQcm9ncmVzczogc2hvd09wZXJhdGlvbnNQcm9ncmVzcyxcbiAgICBjdXJyZW50OiBjdXJyZW50LFxuICAgIGNvdW50OiBjb3VudCxcbiAgICBzY2FsZTogc2NhbGUsXG4gICAgbWluU2NhbGU6IG1pblNjYWxlLFxuICAgIG1heFNjYWxlOiBtYXhTY2FsZSxcbiAgICB0b29sYmFyUmVuZGVyOiB0b29sYmFyUmVuZGVyLFxuICAgIG9uQWN0aXZlOiBvbkFjdGl2ZSxcbiAgICBvblpvb21Jbjogb25ab29tSW4sXG4gICAgb25ab29tT3V0OiBvblpvb21PdXQsXG4gICAgb25Sb3RhdGVSaWdodDogb25Sb3RhdGVSaWdodCxcbiAgICBvblJvdGF0ZUxlZnQ6IG9uUm90YXRlTGVmdCxcbiAgICBvbkZsaXBYOiBvbkZsaXBYLFxuICAgIG9uRmxpcFk6IG9uRmxpcFksXG4gICAgb25DbG9zZTogb25DbG9zZSxcbiAgICBvblJlc2V0OiBvblJlc2V0LFxuICAgIHpJbmRleDogcmVzdFByb3BzLnpJbmRleCAhPT0gdW5kZWZpbmVkID8gcmVzdFByb3BzLnpJbmRleCArIDEgOiB1bmRlZmluZWQsXG4gICAgaW1hZ2U6IGltYWdlXG4gIH0pKTtcbn07XG5leHBvcnQgZGVmYXVsdCBQcmV2aWV3OyIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9zbGljZWRUb0FycmF5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zbGljZWRUb0FycmF5XCI7XG5pbXBvcnQgX3R5cGVvZiBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdHlwZW9mXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc1wiO1xudmFyIF9leGNsdWRlZCA9IFtcInZpc2libGVcIiwgXCJvblZpc2libGVDaGFuZ2VcIiwgXCJnZXRDb250YWluZXJcIiwgXCJjdXJyZW50XCIsIFwibW92YWJsZVwiLCBcIm1pblNjYWxlXCIsIFwibWF4U2NhbGVcIiwgXCJjb3VudFJlbmRlclwiLCBcImNsb3NlSWNvblwiLCBcIm9uQ2hhbmdlXCIsIFwib25UcmFuc2Zvcm1cIiwgXCJ0b29sYmFyUmVuZGVyXCIsIFwiaW1hZ2VSZW5kZXJcIl0sXG4gIF9leGNsdWRlZDIgPSBbXCJzcmNcIl07XG5pbXBvcnQgdXNlTWVyZ2VkU3RhdGUgZnJvbSBcInJjLXV0aWwvZXMvaG9va3MvdXNlTWVyZ2VkU3RhdGVcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByZXZpZXcgZnJvbSBcIi4vUHJldmlld1wiO1xuaW1wb3J0IHsgUHJldmlld0dyb3VwQ29udGV4dCB9IGZyb20gXCIuL2NvbnRleHRcIjtcbmltcG9ydCB1c2VQcmV2aWV3SXRlbXMgZnJvbSBcIi4vaG9va3MvdXNlUHJldmlld0l0ZW1zXCI7XG52YXIgR3JvdXAgPSBmdW5jdGlvbiBHcm91cChfcmVmKSB7XG4gIHZhciBfbWVyZ2VkSXRlbXMkY3VycmVudDtcbiAgdmFyIF9yZWYkcHJldmlld1ByZWZpeENscyA9IF9yZWYucHJldmlld1ByZWZpeENscyxcbiAgICBwcmV2aWV3UHJlZml4Q2xzID0gX3JlZiRwcmV2aWV3UHJlZml4Q2xzID09PSB2b2lkIDAgPyAncmMtaW1hZ2UtcHJldmlldycgOiBfcmVmJHByZXZpZXdQcmVmaXhDbHMsXG4gICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIF9yZWYkaWNvbnMgPSBfcmVmLmljb25zLFxuICAgIGljb25zID0gX3JlZiRpY29ucyA9PT0gdm9pZCAwID8ge30gOiBfcmVmJGljb25zLFxuICAgIGl0ZW1zID0gX3JlZi5pdGVtcyxcbiAgICBwcmV2aWV3ID0gX3JlZi5wcmV2aWV3LFxuICAgIGZhbGxiYWNrID0gX3JlZi5mYWxsYmFjaztcbiAgdmFyIF9yZWYyID0gX3R5cGVvZihwcmV2aWV3KSA9PT0gJ29iamVjdCcgPyBwcmV2aWV3IDoge30sXG4gICAgcHJldmlld1Zpc2libGUgPSBfcmVmMi52aXNpYmxlLFxuICAgIG9uVmlzaWJsZUNoYW5nZSA9IF9yZWYyLm9uVmlzaWJsZUNoYW5nZSxcbiAgICBnZXRDb250YWluZXIgPSBfcmVmMi5nZXRDb250YWluZXIsXG4gICAgY3VycmVudEluZGV4ID0gX3JlZjIuY3VycmVudCxcbiAgICBtb3ZhYmxlID0gX3JlZjIubW92YWJsZSxcbiAgICBtaW5TY2FsZSA9IF9yZWYyLm1pblNjYWxlLFxuICAgIG1heFNjYWxlID0gX3JlZjIubWF4U2NhbGUsXG4gICAgY291bnRSZW5kZXIgPSBfcmVmMi5jb3VudFJlbmRlcixcbiAgICBjbG9zZUljb24gPSBfcmVmMi5jbG9zZUljb24sXG4gICAgb25DaGFuZ2UgPSBfcmVmMi5vbkNoYW5nZSxcbiAgICBvblRyYW5zZm9ybSA9IF9yZWYyLm9uVHJhbnNmb3JtLFxuICAgIHRvb2xiYXJSZW5kZXIgPSBfcmVmMi50b29sYmFyUmVuZGVyLFxuICAgIGltYWdlUmVuZGVyID0gX3JlZjIuaW1hZ2VSZW5kZXIsXG4gICAgZGlhbG9nUHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZjIsIF9leGNsdWRlZCk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT0gSXRlbXMgPT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBfdXNlUHJldmlld0l0ZW1zID0gdXNlUHJldmlld0l0ZW1zKGl0ZW1zKSxcbiAgICBfdXNlUHJldmlld0l0ZW1zMiA9IF9zbGljZWRUb0FycmF5KF91c2VQcmV2aWV3SXRlbXMsIDMpLFxuICAgIG1lcmdlZEl0ZW1zID0gX3VzZVByZXZpZXdJdGVtczJbMF0sXG4gICAgcmVnaXN0ZXIgPSBfdXNlUHJldmlld0l0ZW1zMlsxXSxcbiAgICBmcm9tSXRlbXMgPSBfdXNlUHJldmlld0l0ZW1zMlsyXTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09IFByZXZpZXcgPT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gPj4+IEluZGV4XG4gIHZhciBfdXNlTWVyZ2VkU3RhdGUgPSB1c2VNZXJnZWRTdGF0ZSgwLCB7XG4gICAgICB2YWx1ZTogY3VycmVudEluZGV4XG4gICAgfSksXG4gICAgX3VzZU1lcmdlZFN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VNZXJnZWRTdGF0ZSwgMiksXG4gICAgY3VycmVudCA9IF91c2VNZXJnZWRTdGF0ZTJbMF0sXG4gICAgc2V0Q3VycmVudCA9IF91c2VNZXJnZWRTdGF0ZTJbMV07XG4gIHZhciBfdXNlU3RhdGUgPSB1c2VTdGF0ZShmYWxzZSksXG4gICAgX3VzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZSwgMiksXG4gICAga2VlcE9wZW5JbmRleCA9IF91c2VTdGF0ZTJbMF0sXG4gICAgc2V0S2VlcE9wZW5JbmRleCA9IF91c2VTdGF0ZTJbMV07XG5cbiAgLy8gPj4+IEltYWdlXG4gIHZhciBfcmVmMyA9ICgoX21lcmdlZEl0ZW1zJGN1cnJlbnQgPSBtZXJnZWRJdGVtc1tjdXJyZW50XSkgPT09IG51bGwgfHwgX21lcmdlZEl0ZW1zJGN1cnJlbnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9tZXJnZWRJdGVtcyRjdXJyZW50LmRhdGEpIHx8IHt9LFxuICAgIHNyYyA9IF9yZWYzLnNyYyxcbiAgICBpbWdDb21tb25Qcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmMywgX2V4Y2x1ZGVkMik7XG4gIC8vID4+PiBWaXNpYmxlXG4gIHZhciBfdXNlTWVyZ2VkU3RhdGUzID0gdXNlTWVyZ2VkU3RhdGUoISFwcmV2aWV3VmlzaWJsZSwge1xuICAgICAgdmFsdWU6IHByZXZpZXdWaXNpYmxlLFxuICAgICAgb25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKHZhbCwgcHJldlZhbCkge1xuICAgICAgICBvblZpc2libGVDaGFuZ2UgPT09IG51bGwgfHwgb25WaXNpYmxlQ2hhbmdlID09PSB2b2lkIDAgfHwgb25WaXNpYmxlQ2hhbmdlKHZhbCwgcHJldlZhbCwgY3VycmVudCk7XG4gICAgICB9XG4gICAgfSksXG4gICAgX3VzZU1lcmdlZFN0YXRlNCA9IF9zbGljZWRUb0FycmF5KF91c2VNZXJnZWRTdGF0ZTMsIDIpLFxuICAgIGlzU2hvd1ByZXZpZXcgPSBfdXNlTWVyZ2VkU3RhdGU0WzBdLFxuICAgIHNldFNob3dQcmV2aWV3ID0gX3VzZU1lcmdlZFN0YXRlNFsxXTtcblxuICAvLyA+Pj4gUG9zaXRpb25cbiAgdmFyIF91c2VTdGF0ZTMgPSB1c2VTdGF0ZShudWxsKSxcbiAgICBfdXNlU3RhdGU0ID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlMywgMiksXG4gICAgbW91c2VQb3NpdGlvbiA9IF91c2VTdGF0ZTRbMF0sXG4gICAgc2V0TW91c2VQb3NpdGlvbiA9IF91c2VTdGF0ZTRbMV07XG4gIHZhciBvblByZXZpZXdGcm9tSW1hZ2UgPSBSZWFjdC51c2VDYWxsYmFjayhmdW5jdGlvbiAoaWQsIGltYWdlU3JjLCBtb3VzZVgsIG1vdXNlWSkge1xuICAgIHZhciBpbmRleCA9IGZyb21JdGVtcyA/IG1lcmdlZEl0ZW1zLmZpbmRJbmRleChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgcmV0dXJuIGl0ZW0uZGF0YS5zcmMgPT09IGltYWdlU3JjO1xuICAgIH0pIDogbWVyZ2VkSXRlbXMuZmluZEluZGV4KGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICByZXR1cm4gaXRlbS5pZCA9PT0gaWQ7XG4gICAgfSk7XG4gICAgc2V0Q3VycmVudChpbmRleCA8IDAgPyAwIDogaW5kZXgpO1xuICAgIHNldFNob3dQcmV2aWV3KHRydWUpO1xuICAgIHNldE1vdXNlUG9zaXRpb24oe1xuICAgICAgeDogbW91c2VYLFxuICAgICAgeTogbW91c2VZXG4gICAgfSk7XG4gICAgc2V0S2VlcE9wZW5JbmRleCh0cnVlKTtcbiAgfSwgW21lcmdlZEl0ZW1zLCBmcm9tSXRlbXNdKTtcblxuICAvLyBSZXNldCBjdXJyZW50IHdoZW4gcmVvcGVuXG4gIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGlzU2hvd1ByZXZpZXcpIHtcbiAgICAgIGlmICgha2VlcE9wZW5JbmRleCkge1xuICAgICAgICBzZXRDdXJyZW50KDApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzZXRLZWVwT3BlbkluZGV4KGZhbHNlKTtcbiAgICB9XG4gIH0sIFtpc1Nob3dQcmV2aWV3XSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT0gRXZlbnRzID09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBvbkludGVybmFsQ2hhbmdlID0gZnVuY3Rpb24gb25JbnRlcm5hbENoYW5nZShuZXh0LCBwcmV2KSB7XG4gICAgc2V0Q3VycmVudChuZXh0KTtcbiAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwIHx8IG9uQ2hhbmdlKG5leHQsIHByZXYpO1xuICB9O1xuICB2YXIgb25QcmV2aWV3Q2xvc2UgPSBmdW5jdGlvbiBvblByZXZpZXdDbG9zZSgpIHtcbiAgICBzZXRTaG93UHJldmlldyhmYWxzZSk7XG4gICAgc2V0TW91c2VQb3NpdGlvbihudWxsKTtcbiAgfTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09IENvbnRleHQgPT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIHByZXZpZXdHcm91cENvbnRleHQgPSBSZWFjdC51c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcmVnaXN0ZXI6IHJlZ2lzdGVyLFxuICAgICAgb25QcmV2aWV3OiBvblByZXZpZXdGcm9tSW1hZ2VcbiAgICB9O1xuICB9LCBbcmVnaXN0ZXIsIG9uUHJldmlld0Zyb21JbWFnZV0pO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09IFJlbmRlciA9PT09PT09PT09PT09PT09PT09PT09PT09PVxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUHJldmlld0dyb3VwQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBwcmV2aWV3R3JvdXBDb250ZXh0XG4gIH0sIGNoaWxkcmVuLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChQcmV2aWV3LCBfZXh0ZW5kcyh7XG4gICAgXCJhcmlhLWhpZGRlblwiOiAhaXNTaG93UHJldmlldyxcbiAgICBtb3ZhYmxlOiBtb3ZhYmxlLFxuICAgIHZpc2libGU6IGlzU2hvd1ByZXZpZXcsXG4gICAgcHJlZml4Q2xzOiBwcmV2aWV3UHJlZml4Q2xzLFxuICAgIGNsb3NlSWNvbjogY2xvc2VJY29uLFxuICAgIG9uQ2xvc2U6IG9uUHJldmlld0Nsb3NlLFxuICAgIG1vdXNlUG9zaXRpb246IG1vdXNlUG9zaXRpb24sXG4gICAgaW1nQ29tbW9uUHJvcHM6IGltZ0NvbW1vblByb3BzLFxuICAgIHNyYzogc3JjLFxuICAgIGZhbGxiYWNrOiBmYWxsYmFjayxcbiAgICBpY29uczogaWNvbnMsXG4gICAgbWluU2NhbGU6IG1pblNjYWxlLFxuICAgIG1heFNjYWxlOiBtYXhTY2FsZSxcbiAgICBnZXRDb250YWluZXI6IGdldENvbnRhaW5lcixcbiAgICBjdXJyZW50OiBjdXJyZW50LFxuICAgIGNvdW50OiBtZXJnZWRJdGVtcy5sZW5ndGgsXG4gICAgY291bnRSZW5kZXI6IGNvdW50UmVuZGVyLFxuICAgIG9uVHJhbnNmb3JtOiBvblRyYW5zZm9ybSxcbiAgICB0b29sYmFyUmVuZGVyOiB0b29sYmFyUmVuZGVyLFxuICAgIGltYWdlUmVuZGVyOiBpbWFnZVJlbmRlcixcbiAgICBvbkNoYW5nZTogb25JbnRlcm5hbENoYW5nZVxuICB9LCBkaWFsb2dQcm9wcykpKTtcbn07XG5leHBvcnQgZGVmYXVsdCBHcm91cDsiLCJleHBvcnQgdmFyIENPTU1PTl9QUk9QUyA9IFsnY3Jvc3NPcmlnaW4nLCAnZGVjb2RpbmcnLCAnZHJhZ2dhYmxlJywgJ2xvYWRpbmcnLCAncmVmZXJyZXJQb2xpY3knLCAnc2l6ZXMnLCAnc3JjU2V0JywgJ3VzZU1hcCcsICdhbHQnXTsiLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5leHBvcnQgdmFyIFByZXZpZXdHcm91cENvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlQ29udGV4dChudWxsKTsiLCJpbXBvcnQgX29iamVjdFNwcmVhZCBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0U3ByZWFkMlwiO1xuaW1wb3J0IF9kZWZpbmVQcm9wZXJ0eSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHlcIjtcbmltcG9ydCB7IGdldENsaWVudFNpemUgfSBmcm9tIFwicmMtdXRpbC9lcy9Eb20vY3NzXCI7XG5mdW5jdGlvbiBmaXhQb2ludChrZXksIHN0YXJ0LCB3aWR0aCwgY2xpZW50V2lkdGgpIHtcbiAgdmFyIHN0YXJ0QWRkV2lkdGggPSBzdGFydCArIHdpZHRoO1xuICB2YXIgb2Zmc2V0U3RhcnQgPSAod2lkdGggLSBjbGllbnRXaWR0aCkgLyAyO1xuICBpZiAod2lkdGggPiBjbGllbnRXaWR0aCkge1xuICAgIGlmIChzdGFydCA+IDApIHtcbiAgICAgIHJldHVybiBfZGVmaW5lUHJvcGVydHkoe30sIGtleSwgb2Zmc2V0U3RhcnQpO1xuICAgIH1cbiAgICBpZiAoc3RhcnQgPCAwICYmIHN0YXJ0QWRkV2lkdGggPCBjbGllbnRXaWR0aCkge1xuICAgICAgcmV0dXJuIF9kZWZpbmVQcm9wZXJ0eSh7fSwga2V5LCAtb2Zmc2V0U3RhcnQpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChzdGFydCA8IDAgfHwgc3RhcnRBZGRXaWR0aCA+IGNsaWVudFdpZHRoKSB7XG4gICAgcmV0dXJuIF9kZWZpbmVQcm9wZXJ0eSh7fSwga2V5LCBzdGFydCA8IDAgPyBvZmZzZXRTdGFydCA6IC1vZmZzZXRTdGFydCk7XG4gIH1cbiAgcmV0dXJuIHt9O1xufVxuXG4vKipcbiAqIEZpeCBwb3NpdG9uIHgseSBwb2ludCB3aGVuXG4gKlxuICogRWxlIHdpZHRoICYmIGhlaWdodCA8IGNsaWVudFxuICogLSBCYWNrIG9yaWdpblxuICpcbiAqIC0gRWxlIHdpZHRoIHwgaGVpZ2h0ID4gY2xpZW50V2lkdGggfCBjbGllbnRIZWlnaHRcbiAqIC0gbGVmdCB8IHRvcCA+IDAgLT4gQmFjayAwXG4gKiAtIGxlZnQgfCB0b3AgKyB3aWR0aCB8IGhlaWdodCA8IGNsaWVudFdpZHRoIHwgY2xpZW50SGVpZ2h0IC0+IEJhY2sgbGVmdCB8IHRvcCArIHdpZHRoIHwgaGVpZ2h0ID09PSBjbGllbnRXaWR0aCB8IGNsaWVudEhlaWdodFxuICpcbiAqIFJlZ2FyZGxlc3Mgb2Ygb3RoZXJcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Rml4U2NhbGVFbGVUcmFuc1Bvc2l0aW9uKHdpZHRoLCBoZWlnaHQsIGxlZnQsIHRvcCkge1xuICB2YXIgX2dldENsaWVudFNpemUgPSBnZXRDbGllbnRTaXplKCksXG4gICAgY2xpZW50V2lkdGggPSBfZ2V0Q2xpZW50U2l6ZS53aWR0aCxcbiAgICBjbGllbnRIZWlnaHQgPSBfZ2V0Q2xpZW50U2l6ZS5oZWlnaHQ7XG4gIHZhciBmaXhQb3MgPSBudWxsO1xuICBpZiAod2lkdGggPD0gY2xpZW50V2lkdGggJiYgaGVpZ2h0IDw9IGNsaWVudEhlaWdodCkge1xuICAgIGZpeFBvcyA9IHtcbiAgICAgIHg6IDAsXG4gICAgICB5OiAwXG4gICAgfTtcbiAgfSBlbHNlIGlmICh3aWR0aCA+IGNsaWVudFdpZHRoIHx8IGhlaWdodCA+IGNsaWVudEhlaWdodCkge1xuICAgIGZpeFBvcyA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgZml4UG9pbnQoJ3gnLCBsZWZ0LCB3aWR0aCwgY2xpZW50V2lkdGgpKSwgZml4UG9pbnQoJ3knLCB0b3AsIGhlaWdodCwgY2xpZW50SGVpZ2h0KSk7XG4gIH1cbiAgcmV0dXJuIGZpeFBvcztcbn0iLCJpbXBvcnQgX29iamVjdFNwcmVhZCBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0U3ByZWFkMlwiO1xuaW1wb3J0IF9zbGljZWRUb0FycmF5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zbGljZWRUb0FycmF5XCI7XG5pbXBvcnQgeyBnZXRDbGllbnRTaXplIH0gZnJvbSBcInJjLXV0aWwvZXMvRG9tL2Nzc1wiO1xuaW1wb3J0IGlzRXF1YWwgZnJvbSBcInJjLXV0aWwvZXMvaXNFcXVhbFwiO1xuaW1wb3J0IHJhZiBmcm9tIFwicmMtdXRpbC9lcy9yYWZcIjtcbmltcG9ydCB7IHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG52YXIgaW5pdGlhbFRyYW5zZm9ybSA9IHtcbiAgeDogMCxcbiAgeTogMCxcbiAgcm90YXRlOiAwLFxuICBzY2FsZTogMSxcbiAgZmxpcFg6IGZhbHNlLFxuICBmbGlwWTogZmFsc2Vcbn07XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VJbWFnZVRyYW5zZm9ybShpbWdSZWYsIG1pblNjYWxlLCBtYXhTY2FsZSwgb25UcmFuc2Zvcm0pIHtcbiAgdmFyIGZyYW1lID0gdXNlUmVmKG51bGwpO1xuICB2YXIgcXVldWUgPSB1c2VSZWYoW10pO1xuICB2YXIgX3VzZVN0YXRlID0gdXNlU3RhdGUoaW5pdGlhbFRyYW5zZm9ybSksXG4gICAgX3VzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZSwgMiksXG4gICAgdHJhbnNmb3JtID0gX3VzZVN0YXRlMlswXSxcbiAgICBzZXRUcmFuc2Zvcm0gPSBfdXNlU3RhdGUyWzFdO1xuICB2YXIgcmVzZXRUcmFuc2Zvcm0gPSBmdW5jdGlvbiByZXNldFRyYW5zZm9ybShhY3Rpb24pIHtcbiAgICBzZXRUcmFuc2Zvcm0oaW5pdGlhbFRyYW5zZm9ybSk7XG4gICAgaWYgKCFpc0VxdWFsKGluaXRpYWxUcmFuc2Zvcm0sIHRyYW5zZm9ybSkpIHtcbiAgICAgIG9uVHJhbnNmb3JtID09PSBudWxsIHx8IG9uVHJhbnNmb3JtID09PSB2b2lkIDAgfHwgb25UcmFuc2Zvcm0oe1xuICAgICAgICB0cmFuc2Zvcm06IGluaXRpYWxUcmFuc2Zvcm0sXG4gICAgICAgIGFjdGlvbjogYWN0aW9uXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgLyoqIERpcmVjdCB1cGRhdGUgdHJhbnNmb3JtICovXG4gIHZhciB1cGRhdGVUcmFuc2Zvcm0gPSBmdW5jdGlvbiB1cGRhdGVUcmFuc2Zvcm0obmV3VHJhbnNmb3JtLCBhY3Rpb24pIHtcbiAgICBpZiAoZnJhbWUuY3VycmVudCA9PT0gbnVsbCkge1xuICAgICAgcXVldWUuY3VycmVudCA9IFtdO1xuICAgICAgZnJhbWUuY3VycmVudCA9IHJhZihmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNldFRyYW5zZm9ybShmdW5jdGlvbiAocHJlU3RhdGUpIHtcbiAgICAgICAgICB2YXIgbWVtb1N0YXRlID0gcHJlU3RhdGU7XG4gICAgICAgICAgcXVldWUuY3VycmVudC5mb3JFYWNoKGZ1bmN0aW9uIChxdWV1ZVN0YXRlKSB7XG4gICAgICAgICAgICBtZW1vU3RhdGUgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIG1lbW9TdGF0ZSksIHF1ZXVlU3RhdGUpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGZyYW1lLmN1cnJlbnQgPSBudWxsO1xuICAgICAgICAgIG9uVHJhbnNmb3JtID09PSBudWxsIHx8IG9uVHJhbnNmb3JtID09PSB2b2lkIDAgfHwgb25UcmFuc2Zvcm0oe1xuICAgICAgICAgICAgdHJhbnNmb3JtOiBtZW1vU3RhdGUsXG4gICAgICAgICAgICBhY3Rpb246IGFjdGlvblxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBtZW1vU3RhdGU7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHF1ZXVlLmN1cnJlbnQucHVzaChfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHRyYW5zZm9ybSksIG5ld1RyYW5zZm9ybSkpO1xuICB9O1xuXG4gIC8qKiBTY2FsZSBhY2NvcmRpbmcgdG8gdGhlIHBvc2l0aW9uIG9mIGNlbnRlclggYW5kIGNlbnRlclkgKi9cbiAgdmFyIGRpc3BhdGNoWm9vbUNoYW5nZSA9IGZ1bmN0aW9uIGRpc3BhdGNoWm9vbUNoYW5nZShyYXRpbywgYWN0aW9uLCBjZW50ZXJYLCBjZW50ZXJZLCBpc1RvdWNoKSB7XG4gICAgdmFyIF9pbWdSZWYkY3VycmVudCA9IGltZ1JlZi5jdXJyZW50LFxuICAgICAgd2lkdGggPSBfaW1nUmVmJGN1cnJlbnQud2lkdGgsXG4gICAgICBoZWlnaHQgPSBfaW1nUmVmJGN1cnJlbnQuaGVpZ2h0LFxuICAgICAgb2Zmc2V0V2lkdGggPSBfaW1nUmVmJGN1cnJlbnQub2Zmc2V0V2lkdGgsXG4gICAgICBvZmZzZXRIZWlnaHQgPSBfaW1nUmVmJGN1cnJlbnQub2Zmc2V0SGVpZ2h0LFxuICAgICAgb2Zmc2V0TGVmdCA9IF9pbWdSZWYkY3VycmVudC5vZmZzZXRMZWZ0LFxuICAgICAgb2Zmc2V0VG9wID0gX2ltZ1JlZiRjdXJyZW50Lm9mZnNldFRvcDtcbiAgICB2YXIgbmV3UmF0aW8gPSByYXRpbztcbiAgICB2YXIgbmV3U2NhbGUgPSB0cmFuc2Zvcm0uc2NhbGUgKiByYXRpbztcbiAgICBpZiAobmV3U2NhbGUgPiBtYXhTY2FsZSkge1xuICAgICAgbmV3U2NhbGUgPSBtYXhTY2FsZTtcbiAgICAgIG5ld1JhdGlvID0gbWF4U2NhbGUgLyB0cmFuc2Zvcm0uc2NhbGU7XG4gICAgfSBlbHNlIGlmIChuZXdTY2FsZSA8IG1pblNjYWxlKSB7XG4gICAgICAvLyBGb3IgbW9iaWxlIGludGVyYWN0aW9ucywgYWxsb3cgc2NhbGluZyBkb3duIHRvIHRoZSBtaW5pbXVtIHNjYWxlLlxuICAgICAgbmV3U2NhbGUgPSBpc1RvdWNoID8gbmV3U2NhbGUgOiBtaW5TY2FsZTtcbiAgICAgIG5ld1JhdGlvID0gbmV3U2NhbGUgLyB0cmFuc2Zvcm0uc2NhbGU7XG4gICAgfVxuXG4gICAgLyoqIERlZmF1bHQgY2VudGVyIHBvaW50IHNjYWxpbmcgKi9cbiAgICB2YXIgbWVyZ2VkQ2VudGVyWCA9IGNlbnRlclggIT09IG51bGwgJiYgY2VudGVyWCAhPT0gdm9pZCAwID8gY2VudGVyWCA6IGlubmVyV2lkdGggLyAyO1xuICAgIHZhciBtZXJnZWRDZW50ZXJZID0gY2VudGVyWSAhPT0gbnVsbCAmJiBjZW50ZXJZICE9PSB2b2lkIDAgPyBjZW50ZXJZIDogaW5uZXJIZWlnaHQgLyAyO1xuICAgIHZhciBkaWZmUmF0aW8gPSBuZXdSYXRpbyAtIDE7XG4gICAgLyoqIERldmlhdGlvbiBjYWxjdWxhdGVkIGZyb20gaW1hZ2Ugc2l6ZSAqL1xuICAgIHZhciBkaWZmSW1nWCA9IGRpZmZSYXRpbyAqIHdpZHRoICogMC41O1xuICAgIHZhciBkaWZmSW1nWSA9IGRpZmZSYXRpbyAqIGhlaWdodCAqIDAuNTtcbiAgICAvKiogVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgY2xpY2sgcG9zaXRpb24gYW5kIHRoZSBlZGdlIG9mIHRoZSBkb2N1bWVudCAqL1xuICAgIHZhciBkaWZmT2Zmc2V0TGVmdCA9IGRpZmZSYXRpbyAqIChtZXJnZWRDZW50ZXJYIC0gdHJhbnNmb3JtLnggLSBvZmZzZXRMZWZ0KTtcbiAgICB2YXIgZGlmZk9mZnNldFRvcCA9IGRpZmZSYXRpbyAqIChtZXJnZWRDZW50ZXJZIC0gdHJhbnNmb3JtLnkgLSBvZmZzZXRUb3ApO1xuICAgIC8qKiBGaW5hbCBwb3NpdGlvbmluZyAqL1xuICAgIHZhciBuZXdYID0gdHJhbnNmb3JtLnggLSAoZGlmZk9mZnNldExlZnQgLSBkaWZmSW1nWCk7XG4gICAgdmFyIG5ld1kgPSB0cmFuc2Zvcm0ueSAtIChkaWZmT2Zmc2V0VG9wIC0gZGlmZkltZ1kpO1xuXG4gICAgLyoqXG4gICAgICogV2hlbiB6b29taW5nIHRoZSBpbWFnZVxuICAgICAqIFdoZW4gdGhlIGltYWdlIHNpemUgaXMgc21hbGxlciB0aGFuIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSB3aW5kb3csIHRoZSBwb3NpdGlvbiBpcyBpbml0aWFsaXplZFxuICAgICAqL1xuICAgIGlmIChyYXRpbyA8IDEgJiYgbmV3U2NhbGUgPT09IDEpIHtcbiAgICAgIHZhciBtZXJnZWRXaWR0aCA9IG9mZnNldFdpZHRoICogbmV3U2NhbGU7XG4gICAgICB2YXIgbWVyZ2VkSGVpZ2h0ID0gb2Zmc2V0SGVpZ2h0ICogbmV3U2NhbGU7XG4gICAgICB2YXIgX2dldENsaWVudFNpemUgPSBnZXRDbGllbnRTaXplKCksXG4gICAgICAgIGNsaWVudFdpZHRoID0gX2dldENsaWVudFNpemUud2lkdGgsXG4gICAgICAgIGNsaWVudEhlaWdodCA9IF9nZXRDbGllbnRTaXplLmhlaWdodDtcbiAgICAgIGlmIChtZXJnZWRXaWR0aCA8PSBjbGllbnRXaWR0aCAmJiBtZXJnZWRIZWlnaHQgPD0gY2xpZW50SGVpZ2h0KSB7XG4gICAgICAgIG5ld1ggPSAwO1xuICAgICAgICBuZXdZID0gMDtcbiAgICAgIH1cbiAgICB9XG4gICAgdXBkYXRlVHJhbnNmb3JtKHtcbiAgICAgIHg6IG5ld1gsXG4gICAgICB5OiBuZXdZLFxuICAgICAgc2NhbGU6IG5ld1NjYWxlXG4gICAgfSwgYWN0aW9uKTtcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zZm9ybSxcbiAgICByZXNldFRyYW5zZm9ybTogcmVzZXRUcmFuc2Zvcm0sXG4gICAgdXBkYXRlVHJhbnNmb3JtOiB1cGRhdGVUcmFuc2Zvcm0sXG4gICAgZGlzcGF0Y2hab29tQ2hhbmdlOiBkaXNwYXRjaFpvb21DaGFuZ2VcbiAgfTtcbn0iLCJpbXBvcnQgX29iamVjdFNwcmVhZCBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0U3ByZWFkMlwiO1xuaW1wb3J0IF9zbGljZWRUb0FycmF5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zbGljZWRUb0FycmF5XCI7XG5pbXBvcnQgYWRkRXZlbnRMaXN0ZW5lciBmcm9tIFwicmMtdXRpbC9lcy9Eb20vYWRkRXZlbnRMaXN0ZW5lclwiO1xuaW1wb3J0IHsgd2FybmluZyB9IGZyb20gXCJyYy11dGlsL2VzL3dhcm5pbmdcIjtcbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBnZXRGaXhTY2FsZUVsZVRyYW5zUG9zaXRpb24gZnJvbSBcIi4uL2dldEZpeFNjYWxlRWxlVHJhbnNQb3NpdGlvblwiO1xuaW1wb3J0IHsgQkFTRV9TQ0FMRV9SQVRJTywgV0hFRUxfTUFYX1NDQUxFX1JBVElPIH0gZnJvbSBcIi4uL3ByZXZpZXdDb25maWdcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZU1vdXNlRXZlbnQoaW1nUmVmLCBtb3ZhYmxlLCB2aXNpYmxlLCBzY2FsZVN0ZXAsIHRyYW5zZm9ybSwgdXBkYXRlVHJhbnNmb3JtLCBkaXNwYXRjaFpvb21DaGFuZ2UpIHtcbiAgdmFyIHJvdGF0ZSA9IHRyYW5zZm9ybS5yb3RhdGUsXG4gICAgc2NhbGUgPSB0cmFuc2Zvcm0uc2NhbGUsXG4gICAgeCA9IHRyYW5zZm9ybS54LFxuICAgIHkgPSB0cmFuc2Zvcm0ueTtcbiAgdmFyIF91c2VTdGF0ZSA9IHVzZVN0YXRlKGZhbHNlKSxcbiAgICBfdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlLCAyKSxcbiAgICBpc01vdmluZyA9IF91c2VTdGF0ZTJbMF0sXG4gICAgc2V0TW92aW5nID0gX3VzZVN0YXRlMlsxXTtcbiAgdmFyIHN0YXJ0UG9zaXRpb25JbmZvID0gdXNlUmVmKHtcbiAgICBkaWZmWDogMCxcbiAgICBkaWZmWTogMCxcbiAgICB0cmFuc2Zvcm1YOiAwLFxuICAgIHRyYW5zZm9ybVk6IDBcbiAgfSk7XG4gIHZhciBvbk1vdXNlRG93biA9IGZ1bmN0aW9uIG9uTW91c2VEb3duKGV2ZW50KSB7XG4gICAgLy8gT25seSBhbGxvdyBtYWluIGJ1dHRvblxuICAgIGlmICghbW92YWJsZSB8fCBldmVudC5idXR0b24gIT09IDApIHJldHVybjtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHN0YXJ0UG9zaXRpb25JbmZvLmN1cnJlbnQgPSB7XG4gICAgICBkaWZmWDogZXZlbnQucGFnZVggLSB4LFxuICAgICAgZGlmZlk6IGV2ZW50LnBhZ2VZIC0geSxcbiAgICAgIHRyYW5zZm9ybVg6IHgsXG4gICAgICB0cmFuc2Zvcm1ZOiB5XG4gICAgfTtcbiAgICBzZXRNb3ZpbmcodHJ1ZSk7XG4gIH07XG4gIHZhciBvbk1vdXNlTW92ZSA9IGZ1bmN0aW9uIG9uTW91c2VNb3ZlKGV2ZW50KSB7XG4gICAgaWYgKHZpc2libGUgJiYgaXNNb3ZpbmcpIHtcbiAgICAgIHVwZGF0ZVRyYW5zZm9ybSh7XG4gICAgICAgIHg6IGV2ZW50LnBhZ2VYIC0gc3RhcnRQb3NpdGlvbkluZm8uY3VycmVudC5kaWZmWCxcbiAgICAgICAgeTogZXZlbnQucGFnZVkgLSBzdGFydFBvc2l0aW9uSW5mby5jdXJyZW50LmRpZmZZXG4gICAgICB9LCAnbW92ZScpO1xuICAgIH1cbiAgfTtcbiAgdmFyIG9uTW91c2VVcCA9IGZ1bmN0aW9uIG9uTW91c2VVcCgpIHtcbiAgICBpZiAodmlzaWJsZSAmJiBpc01vdmluZykge1xuICAgICAgc2V0TW92aW5nKGZhbHNlKTtcblxuICAgICAgLyoqIE5vIG5lZWQgdG8gcmVzdG9yZSB0aGUgcG9zaXRpb24gd2hlbiB0aGUgcGljdHVyZSBpcyBub3QgbW92ZWQsIFNvIGFzIG5vdCB0byBpbnRlcmZlcmUgd2l0aCB0aGUgY2xpY2sgKi9cbiAgICAgIHZhciBfc3RhcnRQb3NpdGlvbkluZm8kY3UgPSBzdGFydFBvc2l0aW9uSW5mby5jdXJyZW50LFxuICAgICAgICB0cmFuc2Zvcm1YID0gX3N0YXJ0UG9zaXRpb25JbmZvJGN1LnRyYW5zZm9ybVgsXG4gICAgICAgIHRyYW5zZm9ybVkgPSBfc3RhcnRQb3NpdGlvbkluZm8kY3UudHJhbnNmb3JtWTtcbiAgICAgIHZhciBoYXNDaGFuZ2VkUG9zaXRpb24gPSB4ICE9PSB0cmFuc2Zvcm1YICYmIHkgIT09IHRyYW5zZm9ybVk7XG4gICAgICBpZiAoIWhhc0NoYW5nZWRQb3NpdGlvbikgcmV0dXJuO1xuICAgICAgdmFyIHdpZHRoID0gaW1nUmVmLmN1cnJlbnQub2Zmc2V0V2lkdGggKiBzY2FsZTtcbiAgICAgIHZhciBoZWlnaHQgPSBpbWdSZWYuY3VycmVudC5vZmZzZXRIZWlnaHQgKiBzY2FsZTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tc2hhZG93XG4gICAgICB2YXIgX2ltZ1JlZiRjdXJyZW50JGdldEJvID0gaW1nUmVmLmN1cnJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksXG4gICAgICAgIGxlZnQgPSBfaW1nUmVmJGN1cnJlbnQkZ2V0Qm8ubGVmdCxcbiAgICAgICAgdG9wID0gX2ltZ1JlZiRjdXJyZW50JGdldEJvLnRvcDtcbiAgICAgIHZhciBpc1JvdGF0ZSA9IHJvdGF0ZSAlIDE4MCAhPT0gMDtcbiAgICAgIHZhciBmaXhTdGF0ZSA9IGdldEZpeFNjYWxlRWxlVHJhbnNQb3NpdGlvbihpc1JvdGF0ZSA/IGhlaWdodCA6IHdpZHRoLCBpc1JvdGF0ZSA/IHdpZHRoIDogaGVpZ2h0LCBsZWZ0LCB0b3ApO1xuICAgICAgaWYgKGZpeFN0YXRlKSB7XG4gICAgICAgIHVwZGF0ZVRyYW5zZm9ybShfb2JqZWN0U3ByZWFkKHt9LCBmaXhTdGF0ZSksICdkcmFnUmVib3VuZCcpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgdmFyIG9uV2hlZWwgPSBmdW5jdGlvbiBvbldoZWVsKGV2ZW50KSB7XG4gICAgaWYgKCF2aXNpYmxlIHx8IGV2ZW50LmRlbHRhWSA9PSAwKSByZXR1cm47XG4gICAgLy8gU2NhbGUgcmF0aW8gZGVwZW5kcyBvbiB0aGUgZGVsdGFZIHNpemVcbiAgICB2YXIgc2NhbGVSYXRpbyA9IE1hdGguYWJzKGV2ZW50LmRlbHRhWSAvIDEwMCk7XG4gICAgLy8gTGltaXQgdGhlIG1heGltdW0gc2NhbGUgcmF0aW9cbiAgICB2YXIgbWVyZ2VkU2NhbGVSYXRpbyA9IE1hdGgubWluKHNjYWxlUmF0aW8sIFdIRUVMX01BWF9TQ0FMRV9SQVRJTyk7XG4gICAgLy8gU2NhbGUgdGhlIHJhdGlvIGVhY2ggdGltZVxuICAgIHZhciByYXRpbyA9IEJBU0VfU0NBTEVfUkFUSU8gKyBtZXJnZWRTY2FsZVJhdGlvICogc2NhbGVTdGVwO1xuICAgIGlmIChldmVudC5kZWx0YVkgPiAwKSB7XG4gICAgICByYXRpbyA9IEJBU0VfU0NBTEVfUkFUSU8gLyByYXRpbztcbiAgICB9XG4gICAgZGlzcGF0Y2hab29tQ2hhbmdlKHJhdGlvLCAnd2hlZWwnLCBldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKTtcbiAgfTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgb25Ub3BNb3VzZVVwTGlzdGVuZXI7XG4gICAgdmFyIG9uVG9wTW91c2VNb3ZlTGlzdGVuZXI7XG4gICAgdmFyIG9uTW91c2VVcExpc3RlbmVyO1xuICAgIHZhciBvbk1vdXNlTW92ZUxpc3RlbmVyO1xuICAgIGlmIChtb3ZhYmxlKSB7XG4gICAgICBvbk1vdXNlVXBMaXN0ZW5lciA9IGFkZEV2ZW50TGlzdGVuZXIod2luZG93LCAnbW91c2V1cCcsIG9uTW91c2VVcCwgZmFsc2UpO1xuICAgICAgb25Nb3VzZU1vdmVMaXN0ZW5lciA9IGFkZEV2ZW50TGlzdGVuZXIod2luZG93LCAnbW91c2Vtb3ZlJywgb25Nb3VzZU1vdmUsIGZhbHNlKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIFJlc29sdmUgaWYgaW4gaWZyYW1lIGxvc3QgZXZlbnRcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgaWYgKHdpbmRvdy50b3AgIT09IHdpbmRvdy5zZWxmKSB7XG4gICAgICAgICAgb25Ub3BNb3VzZVVwTGlzdGVuZXIgPSBhZGRFdmVudExpc3RlbmVyKHdpbmRvdy50b3AsICdtb3VzZXVwJywgb25Nb3VzZVVwLCBmYWxzZSk7XG4gICAgICAgICAgb25Ub3BNb3VzZU1vdmVMaXN0ZW5lciA9IGFkZEV2ZW50TGlzdGVuZXIod2luZG93LnRvcCwgJ21vdXNlbW92ZScsIG9uTW91c2VNb3ZlLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIHdhcm5pbmcoZmFsc2UsIFwiW3JjLWltYWdlXSBcIi5jb25jYXQoZXJyb3IpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBfb25Nb3VzZVVwTGlzdGVuZXIsIF9vbk1vdXNlTW92ZUxpc3RlbmVyLCBfb25Ub3BNb3VzZVVwTGlzdGVuZXIsIF9vblRvcE1vdXNlTW92ZUxpc3RlbjtcbiAgICAgIChfb25Nb3VzZVVwTGlzdGVuZXIgPSBvbk1vdXNlVXBMaXN0ZW5lcikgPT09IG51bGwgfHwgX29uTW91c2VVcExpc3RlbmVyID09PSB2b2lkIDAgfHwgX29uTW91c2VVcExpc3RlbmVyLnJlbW92ZSgpO1xuICAgICAgKF9vbk1vdXNlTW92ZUxpc3RlbmVyID0gb25Nb3VzZU1vdmVMaXN0ZW5lcikgPT09IG51bGwgfHwgX29uTW91c2VNb3ZlTGlzdGVuZXIgPT09IHZvaWQgMCB8fCBfb25Nb3VzZU1vdmVMaXN0ZW5lci5yZW1vdmUoKTtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAoX29uVG9wTW91c2VVcExpc3RlbmVyID0gb25Ub3BNb3VzZVVwTGlzdGVuZXIpID09PSBudWxsIHx8IF9vblRvcE1vdXNlVXBMaXN0ZW5lciA9PT0gdm9pZCAwIHx8IF9vblRvcE1vdXNlVXBMaXN0ZW5lci5yZW1vdmUoKTtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAoX29uVG9wTW91c2VNb3ZlTGlzdGVuID0gb25Ub3BNb3VzZU1vdmVMaXN0ZW5lcikgPT09IG51bGwgfHwgX29uVG9wTW91c2VNb3ZlTGlzdGVuID09PSB2b2lkIDAgfHwgX29uVG9wTW91c2VNb3ZlTGlzdGVuLnJlbW92ZSgpO1xuICAgIH07XG4gIH0sIFt2aXNpYmxlLCBpc01vdmluZywgeCwgeSwgcm90YXRlLCBtb3ZhYmxlXSk7XG4gIHJldHVybiB7XG4gICAgaXNNb3Zpbmc6IGlzTW92aW5nLFxuICAgIG9uTW91c2VEb3duOiBvbk1vdXNlRG93bixcbiAgICBvbk1vdXNlTW92ZTogb25Nb3VzZU1vdmUsXG4gICAgb25Nb3VzZVVwOiBvbk1vdXNlVXAsXG4gICAgb25XaGVlbDogb25XaGVlbFxuICB9O1xufSIsImltcG9ydCBfdG9Db25zdW1hYmxlQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvQ29uc3VtYWJsZUFycmF5XCI7XG5pbXBvcnQgX2RlZmluZVByb3BlcnR5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eVwiO1xuaW1wb3J0IF9vYmplY3RTcHJlYWQgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFNwcmVhZDJcIjtcbmltcG9ydCBfc2xpY2VkVG9BcnJheSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheVwiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQ09NTU9OX1BST1BTIH0gZnJvbSBcIi4uL2NvbW1vblwiO1xuLyoqXG4gKiBNZXJnZSBwcm9wcyBwcm92aWRlZCBgaXRlbXNgIG9yIGNvbnRleHQgY29sbGVjdGVkIGltYWdlc1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VQcmV2aWV3SXRlbXMoaXRlbXMpIHtcbiAgLy8gQ29udGV4dCBjb2xsZWN0aW9uIGltYWdlIGRhdGFcbiAgdmFyIF9SZWFjdCR1c2VTdGF0ZSA9IFJlYWN0LnVzZVN0YXRlKHt9KSxcbiAgICBfUmVhY3QkdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX1JlYWN0JHVzZVN0YXRlLCAyKSxcbiAgICBpbWFnZXMgPSBfUmVhY3QkdXNlU3RhdGUyWzBdLFxuICAgIHNldEltYWdlcyA9IF9SZWFjdCR1c2VTdGF0ZTJbMV07XG4gIHZhciByZWdpc3RlckltYWdlID0gUmVhY3QudXNlQ2FsbGJhY2soZnVuY3Rpb24gKGlkLCBkYXRhKSB7XG4gICAgc2V0SW1hZ2VzKGZ1bmN0aW9uIChpbWdzKSB7XG4gICAgICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBpbWdzKSwge30sIF9kZWZpbmVQcm9wZXJ0eSh7fSwgaWQsIGRhdGEpKTtcbiAgICB9KTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgc2V0SW1hZ2VzKGZ1bmN0aW9uIChpbWdzKSB7XG4gICAgICAgIHZhciBjbG9uZUltZ3MgPSBfb2JqZWN0U3ByZWFkKHt9LCBpbWdzKTtcbiAgICAgICAgZGVsZXRlIGNsb25lSW1nc1tpZF07XG4gICAgICAgIHJldHVybiBjbG9uZUltZ3M7XG4gICAgICB9KTtcbiAgICB9O1xuICB9LCBbXSk7XG5cbiAgLy8gaXRlbXNcbiAgdmFyIG1lcmdlZEl0ZW1zID0gUmVhY3QudXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gdXNlIGBpdGVtc2AgZmlyc3RcbiAgICBpZiAoaXRlbXMpIHtcbiAgICAgIHJldHVybiBpdGVtcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgIHNyYzogaXRlbVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGRhdGEgPSB7fTtcbiAgICAgICAgT2JqZWN0LmtleXMoaXRlbSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgaWYgKFsnc3JjJ10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShDT01NT05fUFJPUFMpKS5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgICAgICBkYXRhW2tleV0gPSBpdGVtW2tleV07XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkYXRhOiBkYXRhXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyB1c2UgcmVnaXN0ZXJlZCBpbWFnZXMgc2Vjb25kbHlcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoaW1hZ2VzKS5yZWR1Y2UoZnVuY3Rpb24gKHRvdGFsLCBpZCkge1xuICAgICAgdmFyIF9pbWFnZXMkaWQgPSBpbWFnZXNbaWRdLFxuICAgICAgICBjYW5QcmV2aWV3ID0gX2ltYWdlcyRpZC5jYW5QcmV2aWV3LFxuICAgICAgICBkYXRhID0gX2ltYWdlcyRpZC5kYXRhO1xuICAgICAgaWYgKGNhblByZXZpZXcpIHtcbiAgICAgICAgdG90YWwucHVzaCh7XG4gICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICBpZDogaWRcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdG90YWw7XG4gICAgfSwgW10pO1xuICB9LCBbaXRlbXMsIGltYWdlc10pO1xuICByZXR1cm4gW21lcmdlZEl0ZW1zLCByZWdpc3RlckltYWdlLCAhIWl0ZW1zXTtcbn0iLCJpbXBvcnQgX3NsaWNlZFRvQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXlcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFByZXZpZXdHcm91cENvbnRleHQgfSBmcm9tIFwiLi4vY29udGV4dFwiO1xudmFyIHVpZCA9IDA7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VSZWdpc3RlckltYWdlKGNhblByZXZpZXcsIGRhdGEpIHtcbiAgdmFyIF9SZWFjdCR1c2VTdGF0ZSA9IFJlYWN0LnVzZVN0YXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgIHVpZCArPSAxO1xuICAgICAgcmV0dXJuIFN0cmluZyh1aWQpO1xuICAgIH0pLFxuICAgIF9SZWFjdCR1c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfUmVhY3QkdXNlU3RhdGUsIDEpLFxuICAgIGlkID0gX1JlYWN0JHVzZVN0YXRlMlswXTtcbiAgdmFyIGdyb3VwQ29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoUHJldmlld0dyb3VwQ29udGV4dCk7XG4gIHZhciByZWdpc3RlckRhdGEgPSB7XG4gICAgZGF0YTogZGF0YSxcbiAgICBjYW5QcmV2aWV3OiBjYW5QcmV2aWV3XG4gIH07XG5cbiAgLy8gS2VlcCBvcmRlciBzdGFydFxuICAvLyBSZXNvbHZlIGh0dHBzOi8vZ2l0aHViLmNvbS9hbnQtZGVzaWduL2FudC1kZXNpZ24vaXNzdWVzLzI4ODgxXG4gIC8vIE9ubHkgbmVlZCB1blJlZ2lzdGVyIHdoZW4gY29tcG9uZW50IHVuTW91bnRcbiAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoZ3JvdXBDb250ZXh0KSB7XG4gICAgICByZXR1cm4gZ3JvdXBDb250ZXh0LnJlZ2lzdGVyKGlkLCByZWdpc3RlckRhdGEpO1xuICAgIH1cbiAgfSwgW10pO1xuICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmIChncm91cENvbnRleHQpIHtcbiAgICAgIGdyb3VwQ29udGV4dC5yZWdpc3RlcihpZCwgcmVnaXN0ZXJEYXRhKTtcbiAgICB9XG4gIH0sIFtjYW5QcmV2aWV3LCBkYXRhXSk7XG4gIHJldHVybiBpZDtcbn0iLCJpbXBvcnQgX3NsaWNlZFRvQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXlcIjtcbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGlzSW1hZ2VWYWxpZCB9IGZyb20gXCIuLi91dGlsXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VTdGF0dXMoX3JlZikge1xuICB2YXIgc3JjID0gX3JlZi5zcmMsXG4gICAgaXNDdXN0b21QbGFjZWhvbGRlciA9IF9yZWYuaXNDdXN0b21QbGFjZWhvbGRlcixcbiAgICBmYWxsYmFjayA9IF9yZWYuZmFsbGJhY2s7XG4gIHZhciBfdXNlU3RhdGUgPSB1c2VTdGF0ZShpc0N1c3RvbVBsYWNlaG9sZGVyID8gJ2xvYWRpbmcnIDogJ25vcm1hbCcpLFxuICAgIF91c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUsIDIpLFxuICAgIHN0YXR1cyA9IF91c2VTdGF0ZTJbMF0sXG4gICAgc2V0U3RhdHVzID0gX3VzZVN0YXRlMlsxXTtcbiAgdmFyIGlzTG9hZGVkID0gdXNlUmVmKGZhbHNlKTtcbiAgdmFyIGlzRXJyb3IgPSBzdGF0dXMgPT09ICdlcnJvcic7XG5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0LWNvbXBvbmVudC9pbWFnZS9wdWxsLzE4N1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHZhciBpc0N1cnJlbnRTcmMgPSB0cnVlO1xuICAgIGlzSW1hZ2VWYWxpZChzcmMpLnRoZW4oZnVuY3Rpb24gKGlzVmFsaWQpIHtcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hbnQtZGVzaWduL2FudC1kZXNpZ24vaXNzdWVzLzQ0OTQ4XG4gICAgICAvLyBJZiBzcmMgY2hhbmdlcywgdGhlIHByZXZpb3VzIHNldFN0YXR1cyBzaG91bGQgbm90IGJlIHRyaWdnZXJlZFxuICAgICAgaWYgKCFpc1ZhbGlkICYmIGlzQ3VycmVudFNyYykge1xuICAgICAgICBzZXRTdGF0dXMoJ2Vycm9yJyk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlzQ3VycmVudFNyYyA9IGZhbHNlO1xuICAgIH07XG4gIH0sIFtzcmNdKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoaXNDdXN0b21QbGFjZWhvbGRlciAmJiAhaXNMb2FkZWQuY3VycmVudCkge1xuICAgICAgc2V0U3RhdHVzKCdsb2FkaW5nJyk7XG4gICAgfSBlbHNlIGlmIChpc0Vycm9yKSB7XG4gICAgICBzZXRTdGF0dXMoJ25vcm1hbCcpO1xuICAgIH1cbiAgfSwgW3NyY10pO1xuICB2YXIgb25Mb2FkID0gZnVuY3Rpb24gb25Mb2FkKCkge1xuICAgIHNldFN0YXR1cygnbm9ybWFsJyk7XG4gIH07XG4gIHZhciBnZXRJbWdSZWYgPSBmdW5jdGlvbiBnZXRJbWdSZWYoaW1nKSB7XG4gICAgaXNMb2FkZWQuY3VycmVudCA9IGZhbHNlO1xuICAgIGlmIChzdGF0dXMgPT09ICdsb2FkaW5nJyAmJiBpbWcgIT09IG51bGwgJiYgaW1nICE9PSB2b2lkIDAgJiYgaW1nLmNvbXBsZXRlICYmIChpbWcubmF0dXJhbFdpZHRoIHx8IGltZy5uYXR1cmFsSGVpZ2h0KSkge1xuICAgICAgaXNMb2FkZWQuY3VycmVudCA9IHRydWU7XG4gICAgICBvbkxvYWQoKTtcbiAgICB9XG4gIH07XG4gIHZhciBzcmNBbmRPbmxvYWQgPSBpc0Vycm9yICYmIGZhbGxiYWNrID8ge1xuICAgIHNyYzogZmFsbGJhY2tcbiAgfSA6IHtcbiAgICBvbkxvYWQ6IG9uTG9hZCxcbiAgICBzcmM6IHNyY1xuICB9O1xuICByZXR1cm4gW2dldEltZ1JlZiwgc3JjQW5kT25sb2FkLCBzdGF0dXNdO1xufSIsImltcG9ydCBfb2JqZWN0U3ByZWFkIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyXCI7XG5pbXBvcnQgX3NsaWNlZFRvQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXlcIjtcbmltcG9ydCBhZGRFdmVudExpc3RlbmVyIGZyb20gXCJyYy11dGlsL2VzL0RvbS9hZGRFdmVudExpc3RlbmVyXCI7XG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgZ2V0Rml4U2NhbGVFbGVUcmFuc1Bvc2l0aW9uIGZyb20gXCIuLi9nZXRGaXhTY2FsZUVsZVRyYW5zUG9zaXRpb25cIjtcbmZ1bmN0aW9uIGdldERpc3RhbmNlKGEsIGIpIHtcbiAgdmFyIHggPSBhLnggLSBiLng7XG4gIHZhciB5ID0gYS55IC0gYi55O1xuICByZXR1cm4gTWF0aC5oeXBvdCh4LCB5KTtcbn1cbmZ1bmN0aW9uIGdldENlbnRlcihvbGRQb2ludDEsIG9sZFBvaW50MiwgbmV3UG9pbnQxLCBuZXdQb2ludDIpIHtcbiAgLy8gQ2FsY3VsYXRlIHRoZSBkaXN0YW5jZSBlYWNoIHBvaW50IGhhcyBtb3ZlZFxuICB2YXIgZGlzdGFuY2UxID0gZ2V0RGlzdGFuY2Uob2xkUG9pbnQxLCBuZXdQb2ludDEpO1xuICB2YXIgZGlzdGFuY2UyID0gZ2V0RGlzdGFuY2Uob2xkUG9pbnQyLCBuZXdQb2ludDIpO1xuXG4gIC8vIElmIGJvdGggZGlzdGFuY2VzIGFyZSAwLCByZXR1cm4gdGhlIG9yaWdpbmFsIHBvaW50c1xuICBpZiAoZGlzdGFuY2UxID09PSAwICYmIGRpc3RhbmNlMiA9PT0gMCkge1xuICAgIHJldHVybiBbb2xkUG9pbnQxLngsIG9sZFBvaW50MS55XTtcbiAgfVxuXG4gIC8vIENhbGN1bGF0ZSB0aGUgcmF0aW8gb2YgdGhlIGRpc3RhbmNlc1xuICB2YXIgcmF0aW8gPSBkaXN0YW5jZTEgLyAoZGlzdGFuY2UxICsgZGlzdGFuY2UyKTtcblxuICAvLyBDYWxjdWxhdGUgdGhlIG5ldyBjZW50ZXIgcG9pbnQgYmFzZWQgb24gdGhlIHJhdGlvXG4gIHZhciB4ID0gb2xkUG9pbnQxLnggKyByYXRpbyAqIChvbGRQb2ludDIueCAtIG9sZFBvaW50MS54KTtcbiAgdmFyIHkgPSBvbGRQb2ludDEueSArIHJhdGlvICogKG9sZFBvaW50Mi55IC0gb2xkUG9pbnQxLnkpO1xuICByZXR1cm4gW3gsIHldO1xufVxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlVG91Y2hFdmVudChpbWdSZWYsIG1vdmFibGUsIHZpc2libGUsIG1pblNjYWxlLCB0cmFuc2Zvcm0sIHVwZGF0ZVRyYW5zZm9ybSwgZGlzcGF0Y2hab29tQ2hhbmdlKSB7XG4gIHZhciByb3RhdGUgPSB0cmFuc2Zvcm0ucm90YXRlLFxuICAgIHNjYWxlID0gdHJhbnNmb3JtLnNjYWxlLFxuICAgIHggPSB0cmFuc2Zvcm0ueCxcbiAgICB5ID0gdHJhbnNmb3JtLnk7XG4gIHZhciBfdXNlU3RhdGUgPSB1c2VTdGF0ZShmYWxzZSksXG4gICAgX3VzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZSwgMiksXG4gICAgaXNUb3VjaGluZyA9IF91c2VTdGF0ZTJbMF0sXG4gICAgc2V0SXNUb3VjaGluZyA9IF91c2VTdGF0ZTJbMV07XG4gIHZhciB0b3VjaFBvaW50SW5mbyA9IHVzZVJlZih7XG4gICAgcG9pbnQxOiB7XG4gICAgICB4OiAwLFxuICAgICAgeTogMFxuICAgIH0sXG4gICAgcG9pbnQyOiB7XG4gICAgICB4OiAwLFxuICAgICAgeTogMFxuICAgIH0sXG4gICAgZXZlbnRUeXBlOiAnbm9uZSdcbiAgfSk7XG4gIHZhciB1cGRhdGVUb3VjaFBvaW50SW5mbyA9IGZ1bmN0aW9uIHVwZGF0ZVRvdWNoUG9pbnRJbmZvKHZhbHVlcykge1xuICAgIHRvdWNoUG9pbnRJbmZvLmN1cnJlbnQgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHRvdWNoUG9pbnRJbmZvLmN1cnJlbnQpLCB2YWx1ZXMpO1xuICB9O1xuICB2YXIgb25Ub3VjaFN0YXJ0ID0gZnVuY3Rpb24gb25Ub3VjaFN0YXJ0KGV2ZW50KSB7XG4gICAgaWYgKCFtb3ZhYmxlKSByZXR1cm47XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgc2V0SXNUb3VjaGluZyh0cnVlKTtcbiAgICB2YXIgX2V2ZW50JHRvdWNoZXMgPSBldmVudC50b3VjaGVzLFxuICAgICAgdG91Y2hlcyA9IF9ldmVudCR0b3VjaGVzID09PSB2b2lkIDAgPyBbXSA6IF9ldmVudCR0b3VjaGVzO1xuICAgIGlmICh0b3VjaGVzLmxlbmd0aCA+IDEpIHtcbiAgICAgIC8vIHRvdWNoIHpvb21cbiAgICAgIHVwZGF0ZVRvdWNoUG9pbnRJbmZvKHtcbiAgICAgICAgcG9pbnQxOiB7XG4gICAgICAgICAgeDogdG91Y2hlc1swXS5jbGllbnRYLFxuICAgICAgICAgIHk6IHRvdWNoZXNbMF0uY2xpZW50WVxuICAgICAgICB9LFxuICAgICAgICBwb2ludDI6IHtcbiAgICAgICAgICB4OiB0b3VjaGVzWzFdLmNsaWVudFgsXG4gICAgICAgICAgeTogdG91Y2hlc1sxXS5jbGllbnRZXG4gICAgICAgIH0sXG4gICAgICAgIGV2ZW50VHlwZTogJ3RvdWNoWm9vbSdcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB0b3VjaCBtb3ZlXG4gICAgICB1cGRhdGVUb3VjaFBvaW50SW5mbyh7XG4gICAgICAgIHBvaW50MToge1xuICAgICAgICAgIHg6IHRvdWNoZXNbMF0uY2xpZW50WCAtIHgsXG4gICAgICAgICAgeTogdG91Y2hlc1swXS5jbGllbnRZIC0geVxuICAgICAgICB9LFxuICAgICAgICBldmVudFR5cGU6ICdtb3ZlJ1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuICB2YXIgb25Ub3VjaE1vdmUgPSBmdW5jdGlvbiBvblRvdWNoTW92ZShldmVudCkge1xuICAgIHZhciBfZXZlbnQkdG91Y2hlczIgPSBldmVudC50b3VjaGVzLFxuICAgICAgdG91Y2hlcyA9IF9ldmVudCR0b3VjaGVzMiA9PT0gdm9pZCAwID8gW10gOiBfZXZlbnQkdG91Y2hlczI7XG4gICAgdmFyIF90b3VjaFBvaW50SW5mbyRjdXJyZSA9IHRvdWNoUG9pbnRJbmZvLmN1cnJlbnQsXG4gICAgICBwb2ludDEgPSBfdG91Y2hQb2ludEluZm8kY3VycmUucG9pbnQxLFxuICAgICAgcG9pbnQyID0gX3RvdWNoUG9pbnRJbmZvJGN1cnJlLnBvaW50MixcbiAgICAgIGV2ZW50VHlwZSA9IF90b3VjaFBvaW50SW5mbyRjdXJyZS5ldmVudFR5cGU7XG4gICAgaWYgKHRvdWNoZXMubGVuZ3RoID4gMSAmJiBldmVudFR5cGUgPT09ICd0b3VjaFpvb20nKSB7XG4gICAgICAvLyB0b3VjaCB6b29tXG4gICAgICB2YXIgbmV3UG9pbnQxID0ge1xuICAgICAgICB4OiB0b3VjaGVzWzBdLmNsaWVudFgsXG4gICAgICAgIHk6IHRvdWNoZXNbMF0uY2xpZW50WVxuICAgICAgfTtcbiAgICAgIHZhciBuZXdQb2ludDIgPSB7XG4gICAgICAgIHg6IHRvdWNoZXNbMV0uY2xpZW50WCxcbiAgICAgICAgeTogdG91Y2hlc1sxXS5jbGllbnRZXG4gICAgICB9O1xuICAgICAgdmFyIF9nZXRDZW50ZXIgPSBnZXRDZW50ZXIocG9pbnQxLCBwb2ludDIsIG5ld1BvaW50MSwgbmV3UG9pbnQyKSxcbiAgICAgICAgX2dldENlbnRlcjIgPSBfc2xpY2VkVG9BcnJheShfZ2V0Q2VudGVyLCAyKSxcbiAgICAgICAgY2VudGVyWCA9IF9nZXRDZW50ZXIyWzBdLFxuICAgICAgICBjZW50ZXJZID0gX2dldENlbnRlcjJbMV07XG4gICAgICB2YXIgcmF0aW8gPSBnZXREaXN0YW5jZShuZXdQb2ludDEsIG5ld1BvaW50MikgLyBnZXREaXN0YW5jZShwb2ludDEsIHBvaW50Mik7XG4gICAgICBkaXNwYXRjaFpvb21DaGFuZ2UocmF0aW8sICd0b3VjaFpvb20nLCBjZW50ZXJYLCBjZW50ZXJZLCB0cnVlKTtcbiAgICAgIHVwZGF0ZVRvdWNoUG9pbnRJbmZvKHtcbiAgICAgICAgcG9pbnQxOiBuZXdQb2ludDEsXG4gICAgICAgIHBvaW50MjogbmV3UG9pbnQyLFxuICAgICAgICBldmVudFR5cGU6ICd0b3VjaFpvb20nXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PT0gJ21vdmUnKSB7XG4gICAgICAvLyB0b3VjaCBtb3ZlXG4gICAgICB1cGRhdGVUcmFuc2Zvcm0oe1xuICAgICAgICB4OiB0b3VjaGVzWzBdLmNsaWVudFggLSBwb2ludDEueCxcbiAgICAgICAgeTogdG91Y2hlc1swXS5jbGllbnRZIC0gcG9pbnQxLnlcbiAgICAgIH0sICdtb3ZlJyk7XG4gICAgICB1cGRhdGVUb3VjaFBvaW50SW5mbyh7XG4gICAgICAgIGV2ZW50VHlwZTogJ21vdmUnXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG4gIHZhciBvblRvdWNoRW5kID0gZnVuY3Rpb24gb25Ub3VjaEVuZCgpIHtcbiAgICBpZiAoIXZpc2libGUpIHJldHVybjtcbiAgICBpZiAoaXNUb3VjaGluZykge1xuICAgICAgc2V0SXNUb3VjaGluZyhmYWxzZSk7XG4gICAgfVxuICAgIHVwZGF0ZVRvdWNoUG9pbnRJbmZvKHtcbiAgICAgIGV2ZW50VHlwZTogJ25vbmUnXG4gICAgfSk7XG4gICAgaWYgKG1pblNjYWxlID4gc2NhbGUpIHtcbiAgICAgIC8qKiBXaGVuIHRoZSBzY2FsaW5nIHJhdGlvIGlzIGxlc3MgdGhhbiB0aGUgbWluaW11bSBzY2FsaW5nIHJhdGlvLCByZXNldCB0aGUgc2NhbGluZyByYXRpbyAqL1xuICAgICAgcmV0dXJuIHVwZGF0ZVRyYW5zZm9ybSh7XG4gICAgICAgIHg6IDAsXG4gICAgICAgIHk6IDAsXG4gICAgICAgIHNjYWxlOiBtaW5TY2FsZVxuICAgICAgfSwgJ3RvdWNoWm9vbScpO1xuICAgIH1cbiAgICB2YXIgd2lkdGggPSBpbWdSZWYuY3VycmVudC5vZmZzZXRXaWR0aCAqIHNjYWxlO1xuICAgIHZhciBoZWlnaHQgPSBpbWdSZWYuY3VycmVudC5vZmZzZXRIZWlnaHQgKiBzY2FsZTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXNoYWRvd1xuICAgIHZhciBfaW1nUmVmJGN1cnJlbnQkZ2V0Qm8gPSBpbWdSZWYuY3VycmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxcbiAgICAgIGxlZnQgPSBfaW1nUmVmJGN1cnJlbnQkZ2V0Qm8ubGVmdCxcbiAgICAgIHRvcCA9IF9pbWdSZWYkY3VycmVudCRnZXRCby50b3A7XG4gICAgdmFyIGlzUm90YXRlID0gcm90YXRlICUgMTgwICE9PSAwO1xuICAgIHZhciBmaXhTdGF0ZSA9IGdldEZpeFNjYWxlRWxlVHJhbnNQb3NpdGlvbihpc1JvdGF0ZSA/IGhlaWdodCA6IHdpZHRoLCBpc1JvdGF0ZSA/IHdpZHRoIDogaGVpZ2h0LCBsZWZ0LCB0b3ApO1xuICAgIGlmIChmaXhTdGF0ZSkge1xuICAgICAgdXBkYXRlVHJhbnNmb3JtKF9vYmplY3RTcHJlYWQoe30sIGZpeFN0YXRlKSwgJ2RyYWdSZWJvdW5kJyk7XG4gICAgfVxuICB9O1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHZhciBvblRvdWNoTW92ZUxpc3RlbmVyO1xuICAgIGlmICh2aXNpYmxlICYmIG1vdmFibGUpIHtcbiAgICAgIG9uVG91Y2hNb3ZlTGlzdGVuZXIgPSBhZGRFdmVudExpc3RlbmVyKHdpbmRvdywgJ3RvdWNobW92ZScsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHJldHVybiBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9LCB7XG4gICAgICAgIHBhc3NpdmU6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBfb25Ub3VjaE1vdmVMaXN0ZW5lcjtcbiAgICAgIChfb25Ub3VjaE1vdmVMaXN0ZW5lciA9IG9uVG91Y2hNb3ZlTGlzdGVuZXIpID09PSBudWxsIHx8IF9vblRvdWNoTW92ZUxpc3RlbmVyID09PSB2b2lkIDAgfHwgX29uVG91Y2hNb3ZlTGlzdGVuZXIucmVtb3ZlKCk7XG4gICAgfTtcbiAgfSwgW3Zpc2libGUsIG1vdmFibGVdKTtcbiAgcmV0dXJuIHtcbiAgICBpc1RvdWNoaW5nOiBpc1RvdWNoaW5nLFxuICAgIG9uVG91Y2hTdGFydDogb25Ub3VjaFN0YXJ0LFxuICAgIG9uVG91Y2hNb3ZlOiBvblRvdWNoTW92ZSxcbiAgICBvblRvdWNoRW5kOiBvblRvdWNoRW5kXG4gIH07XG59IiwiaW1wb3J0IEltYWdlIGZyb20gXCIuL0ltYWdlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9JbWFnZVwiO1xuZXhwb3J0IGRlZmF1bHQgSW1hZ2U7IiwiLyoqIFNjYWxlIHRoZSByYXRpbyBiYXNlICovXG5leHBvcnQgdmFyIEJBU0VfU0NBTEVfUkFUSU8gPSAxO1xuLyoqIFRoZSBtYXhpbXVtIHpvb20gcmF0aW8gd2hlbiB0aGUgbW91c2Ugem9vbXMgaW4sIGFkanVzdGFibGUgKi9cbmV4cG9ydCB2YXIgV0hFRUxfTUFYX1NDQUxFX1JBVElPID0gMTsiLCJleHBvcnQgZnVuY3Rpb24gaXNJbWFnZVZhbGlkKHNyYykge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICB2YXIgaW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7XG4gICAgaW1nLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZShmYWxzZSk7XG4gICAgfTtcbiAgICBpbWcub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHJlc29sdmUodHJ1ZSk7XG4gICAgfTtcbiAgICBpbWcuc3JjID0gc3JjO1xuICB9KTtcbn0iLCJpbXBvcnQgX29iamVjdFNwcmVhZCBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0U3ByZWFkMlwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX2RlZmluZVByb3BlcnR5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eVwiO1xuaW1wb3J0IF90eXBlb2YgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZlwiO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgUmVhY3QsIHsgY2xvbmVFbGVtZW50LCB1c2VSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBoYXNBZGRvbiwgaGFzUHJlZml4U3VmZml4IH0gZnJvbSBcIi4vdXRpbHMvY29tbW9uVXRpbHNcIjtcbnZhciBCYXNlSW5wdXQgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiAocHJvcHMsIHJlZikge1xuICB2YXIgX3Byb3BzLCBfcHJvcHMyLCBfcHJvcHMzO1xuICB2YXIgaW5wdXRFbCA9IHByb3BzLmlucHV0RWxlbWVudCxcbiAgICBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLFxuICAgIHByZWZpeENscyA9IHByb3BzLnByZWZpeENscyxcbiAgICBwcmVmaXggPSBwcm9wcy5wcmVmaXgsXG4gICAgc3VmZml4ID0gcHJvcHMuc3VmZml4LFxuICAgIGFkZG9uQmVmb3JlID0gcHJvcHMuYWRkb25CZWZvcmUsXG4gICAgYWRkb25BZnRlciA9IHByb3BzLmFkZG9uQWZ0ZXIsXG4gICAgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lLFxuICAgIHN0eWxlID0gcHJvcHMuc3R5bGUsXG4gICAgZGlzYWJsZWQgPSBwcm9wcy5kaXNhYmxlZCxcbiAgICByZWFkT25seSA9IHByb3BzLnJlYWRPbmx5LFxuICAgIGZvY3VzZWQgPSBwcm9wcy5mb2N1c2VkLFxuICAgIHRyaWdnZXJGb2N1cyA9IHByb3BzLnRyaWdnZXJGb2N1cyxcbiAgICBhbGxvd0NsZWFyID0gcHJvcHMuYWxsb3dDbGVhcixcbiAgICB2YWx1ZSA9IHByb3BzLnZhbHVlLFxuICAgIGhhbmRsZVJlc2V0ID0gcHJvcHMuaGFuZGxlUmVzZXQsXG4gICAgaGlkZGVuID0gcHJvcHMuaGlkZGVuLFxuICAgIGNsYXNzZXMgPSBwcm9wcy5jbGFzc2VzLFxuICAgIGNsYXNzTmFtZXMgPSBwcm9wcy5jbGFzc05hbWVzLFxuICAgIGRhdGFBdHRycyA9IHByb3BzLmRhdGFBdHRycyxcbiAgICBzdHlsZXMgPSBwcm9wcy5zdHlsZXMsXG4gICAgY29tcG9uZW50cyA9IHByb3BzLmNvbXBvbmVudHMsXG4gICAgb25DbGVhciA9IHByb3BzLm9uQ2xlYXI7XG4gIHZhciBpbnB1dEVsZW1lbnQgPSBjaGlsZHJlbiAhPT0gbnVsbCAmJiBjaGlsZHJlbiAhPT0gdm9pZCAwID8gY2hpbGRyZW4gOiBpbnB1dEVsO1xuICB2YXIgQWZmaXhXcmFwcGVyQ29tcG9uZW50ID0gKGNvbXBvbmVudHMgPT09IG51bGwgfHwgY29tcG9uZW50cyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY29tcG9uZW50cy5hZmZpeFdyYXBwZXIpIHx8ICdzcGFuJztcbiAgdmFyIEdyb3VwV3JhcHBlckNvbXBvbmVudCA9IChjb21wb25lbnRzID09PSBudWxsIHx8IGNvbXBvbmVudHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbXBvbmVudHMuZ3JvdXBXcmFwcGVyKSB8fCAnc3Bhbic7XG4gIHZhciBXcmFwcGVyQ29tcG9uZW50ID0gKGNvbXBvbmVudHMgPT09IG51bGwgfHwgY29tcG9uZW50cyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY29tcG9uZW50cy53cmFwcGVyKSB8fCAnc3Bhbic7XG4gIHZhciBHcm91cEFkZG9uQ29tcG9uZW50ID0gKGNvbXBvbmVudHMgPT09IG51bGwgfHwgY29tcG9uZW50cyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY29tcG9uZW50cy5ncm91cEFkZG9uKSB8fCAnc3Bhbic7XG4gIHZhciBjb250YWluZXJSZWYgPSB1c2VSZWYobnVsbCk7XG4gIHZhciBvbklucHV0Q2xpY2sgPSBmdW5jdGlvbiBvbklucHV0Q2xpY2soZSkge1xuICAgIHZhciBfY29udGFpbmVyUmVmJGN1cnJlbnQ7XG4gICAgaWYgKChfY29udGFpbmVyUmVmJGN1cnJlbnQgPSBjb250YWluZXJSZWYuY3VycmVudCkgIT09IG51bGwgJiYgX2NvbnRhaW5lclJlZiRjdXJyZW50ICE9PSB2b2lkIDAgJiYgX2NvbnRhaW5lclJlZiRjdXJyZW50LmNvbnRhaW5zKGUudGFyZ2V0KSkge1xuICAgICAgdHJpZ2dlckZvY3VzID09PSBudWxsIHx8IHRyaWdnZXJGb2N1cyA9PT0gdm9pZCAwIHx8IHRyaWdnZXJGb2N1cygpO1xuICAgIH1cbiAgfTtcbiAgdmFyIGhhc0FmZml4ID0gaGFzUHJlZml4U3VmZml4KHByb3BzKTtcbiAgdmFyIGVsZW1lbnQgPSAvKiNfX1BVUkVfXyovY2xvbmVFbGVtZW50KGlucHV0RWxlbWVudCwge1xuICAgIHZhbHVlOiB2YWx1ZSxcbiAgICBjbGFzc05hbWU6IGNsc3goKF9wcm9wcyA9IGlucHV0RWxlbWVudC5wcm9wcykgPT09IG51bGwgfHwgX3Byb3BzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfcHJvcHMuY2xhc3NOYW1lLCAhaGFzQWZmaXggJiYgKGNsYXNzTmFtZXMgPT09IG51bGwgfHwgY2xhc3NOYW1lcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY2xhc3NOYW1lcy52YXJpYW50KSkgfHwgbnVsbFxuICB9KTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT0gUmVmID09PT09PT09PT09PT09PT09PT09PT09PSAvL1xuICB2YXIgZ3JvdXBSZWYgPSB1c2VSZWYobnVsbCk7XG4gIFJlYWN0LnVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hdGl2ZUVsZW1lbnQ6IGdyb3VwUmVmLmN1cnJlbnQgfHwgY29udGFpbmVyUmVmLmN1cnJlbnRcbiAgICB9O1xuICB9KTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT0gUHJlZml4ICYgU3VmZml4ID09PT09PT09PT09PT09PT09PSAvL1xuICBpZiAoaGFzQWZmaXgpIHtcbiAgICAvLyA9PT09PT09PT09PT09PT09PT0gQ2xlYXIgSWNvbiA9PT09PT09PT09PT09PT09PT0gLy9cbiAgICB2YXIgY2xlYXJJY29uID0gbnVsbDtcbiAgICBpZiAoYWxsb3dDbGVhcikge1xuICAgICAgdmFyIG5lZWRDbGVhciA9ICFkaXNhYmxlZCAmJiAhcmVhZE9ubHkgJiYgdmFsdWU7XG4gICAgICB2YXIgY2xlYXJJY29uQ2xzID0gXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1jbGVhci1pY29uXCIpO1xuICAgICAgdmFyIGljb25Ob2RlID0gX3R5cGVvZihhbGxvd0NsZWFyKSA9PT0gJ29iamVjdCcgJiYgYWxsb3dDbGVhciAhPT0gbnVsbCAmJiBhbGxvd0NsZWFyICE9PSB2b2lkIDAgJiYgYWxsb3dDbGVhci5jbGVhckljb24gPyBhbGxvd0NsZWFyLmNsZWFySWNvbiA6ICfinJYnO1xuICAgICAgY2xlYXJJY29uID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIiwge1xuICAgICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgICB0YWJJbmRleDogLTEsXG4gICAgICAgIG9uQ2xpY2s6IGZ1bmN0aW9uIG9uQ2xpY2soZXZlbnQpIHtcbiAgICAgICAgICBoYW5kbGVSZXNldCA9PT0gbnVsbCB8fCBoYW5kbGVSZXNldCA9PT0gdm9pZCAwIHx8IGhhbmRsZVJlc2V0KGV2ZW50KTtcbiAgICAgICAgICBvbkNsZWFyID09PSBudWxsIHx8IG9uQ2xlYXIgPT09IHZvaWQgMCB8fCBvbkNsZWFyKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRG8gbm90IHRyaWdnZXIgb25CbHVyIHdoZW4gY2xlYXIgaW5wdXRcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FudC1kZXNpZ24vYW50LWRlc2lnbi9pc3N1ZXMvMzEyMDBcbiAgICAgICAgLFxuICAgICAgICBvbk1vdXNlRG93bjogZnVuY3Rpb24gb25Nb3VzZURvd24oZSkge1xuICAgICAgICAgIHJldHVybiBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH0sXG4gICAgICAgIGNsYXNzTmFtZTogY2xzeChjbGVhckljb25DbHMsIF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoe30sIFwiXCIuY29uY2F0KGNsZWFySWNvbkNscywgXCItaGlkZGVuXCIpLCAhbmVlZENsZWFyKSwgXCJcIi5jb25jYXQoY2xlYXJJY29uQ2xzLCBcIi1oYXMtc3VmZml4XCIpLCAhIXN1ZmZpeCkpXG4gICAgICB9LCBpY29uTm9kZSk7XG4gICAgfVxuICAgIHZhciBhZmZpeFdyYXBwZXJQcmVmaXhDbHMgPSBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLWFmZml4LXdyYXBwZXJcIik7XG4gICAgdmFyIGFmZml4V3JhcHBlckNscyA9IGNsc3goYWZmaXhXcmFwcGVyUHJlZml4Q2xzLCBfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KHt9LCBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLWRpc2FibGVkXCIpLCBkaXNhYmxlZCksIFwiXCIuY29uY2F0KGFmZml4V3JhcHBlclByZWZpeENscywgXCItZGlzYWJsZWRcIiksIGRpc2FibGVkKSwgXCJcIi5jb25jYXQoYWZmaXhXcmFwcGVyUHJlZml4Q2xzLCBcIi1mb2N1c2VkXCIpLCBmb2N1c2VkKSwgXCJcIi5jb25jYXQoYWZmaXhXcmFwcGVyUHJlZml4Q2xzLCBcIi1yZWFkb25seVwiKSwgcmVhZE9ubHkpLCBcIlwiLmNvbmNhdChhZmZpeFdyYXBwZXJQcmVmaXhDbHMsIFwiLWlucHV0LXdpdGgtY2xlYXItYnRuXCIpLCBzdWZmaXggJiYgYWxsb3dDbGVhciAmJiB2YWx1ZSksIGNsYXNzZXMgPT09IG51bGwgfHwgY2xhc3NlcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY2xhc3Nlcy5hZmZpeFdyYXBwZXIsIGNsYXNzTmFtZXMgPT09IG51bGwgfHwgY2xhc3NOYW1lcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY2xhc3NOYW1lcy5hZmZpeFdyYXBwZXIsIGNsYXNzTmFtZXMgPT09IG51bGwgfHwgY2xhc3NOYW1lcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY2xhc3NOYW1lcy52YXJpYW50KTtcbiAgICB2YXIgc3VmZml4Tm9kZSA9IChzdWZmaXggfHwgYWxsb3dDbGVhcikgJiYgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtcbiAgICAgIGNsYXNzTmFtZTogY2xzeChcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLXN1ZmZpeFwiKSwgY2xhc3NOYW1lcyA9PT0gbnVsbCB8fCBjbGFzc05hbWVzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjbGFzc05hbWVzLnN1ZmZpeCksXG4gICAgICBzdHlsZTogc3R5bGVzID09PSBudWxsIHx8IHN0eWxlcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogc3R5bGVzLnN1ZmZpeFxuICAgIH0sIGNsZWFySWNvbiwgc3VmZml4KTtcbiAgICBlbGVtZW50ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQWZmaXhXcmFwcGVyQ29tcG9uZW50LCBfZXh0ZW5kcyh7XG4gICAgICBjbGFzc05hbWU6IGFmZml4V3JhcHBlckNscyxcbiAgICAgIHN0eWxlOiBzdHlsZXMgPT09IG51bGwgfHwgc3R5bGVzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzdHlsZXMuYWZmaXhXcmFwcGVyLFxuICAgICAgb25DbGljazogb25JbnB1dENsaWNrXG4gICAgfSwgZGF0YUF0dHJzID09PSBudWxsIHx8IGRhdGFBdHRycyA9PT0gdm9pZCAwID8gdm9pZCAwIDogZGF0YUF0dHJzLmFmZml4V3JhcHBlciwge1xuICAgICAgcmVmOiBjb250YWluZXJSZWZcbiAgICB9KSwgcHJlZml4ICYmIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7XG4gICAgICBjbGFzc05hbWU6IGNsc3goXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1wcmVmaXhcIiksIGNsYXNzTmFtZXMgPT09IG51bGwgfHwgY2xhc3NOYW1lcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY2xhc3NOYW1lcy5wcmVmaXgpLFxuICAgICAgc3R5bGU6IHN0eWxlcyA9PT0gbnVsbCB8fCBzdHlsZXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHN0eWxlcy5wcmVmaXhcbiAgICB9LCBwcmVmaXgpLCBlbGVtZW50LCBzdWZmaXhOb2RlKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PSBBZGRvbiA9PT09PT09PT09PT09PT09PT0gLy9cbiAgaWYgKGhhc0FkZG9uKHByb3BzKSkge1xuICAgIHZhciB3cmFwcGVyQ2xzID0gXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1ncm91cFwiKTtcbiAgICB2YXIgYWRkb25DbHMgPSBcIlwiLmNvbmNhdCh3cmFwcGVyQ2xzLCBcIi1hZGRvblwiKTtcbiAgICB2YXIgZ3JvdXBXcmFwcGVyQ2xzID0gXCJcIi5jb25jYXQod3JhcHBlckNscywgXCItd3JhcHBlclwiKTtcbiAgICB2YXIgbWVyZ2VkV3JhcHBlckNsYXNzTmFtZSA9IGNsc3goXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi13cmFwcGVyXCIpLCB3cmFwcGVyQ2xzLCBjbGFzc2VzID09PSBudWxsIHx8IGNsYXNzZXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNsYXNzZXMud3JhcHBlciwgY2xhc3NOYW1lcyA9PT0gbnVsbCB8fCBjbGFzc05hbWVzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjbGFzc05hbWVzLndyYXBwZXIpO1xuICAgIHZhciBtZXJnZWRHcm91cENsYXNzTmFtZSA9IGNsc3goZ3JvdXBXcmFwcGVyQ2xzLCBfZGVmaW5lUHJvcGVydHkoe30sIFwiXCIuY29uY2F0KGdyb3VwV3JhcHBlckNscywgXCItZGlzYWJsZWRcIiksIGRpc2FibGVkKSwgY2xhc3NlcyA9PT0gbnVsbCB8fCBjbGFzc2VzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjbGFzc2VzLmdyb3VwLCBjbGFzc05hbWVzID09PSBudWxsIHx8IGNsYXNzTmFtZXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNsYXNzTmFtZXMuZ3JvdXBXcmFwcGVyKTtcblxuICAgIC8vIE5lZWQgYW5vdGhlciB3cmFwcGVyIGZvciBjaGFuZ2luZyBkaXNwbGF5OnRhYmxlIHRvIGRpc3BsYXk6aW5saW5lLWJsb2NrXG4gICAgLy8gYW5kIHB1dCBzdHlsZSBwcm9wIGluIHdyYXBwZXJcbiAgICBlbGVtZW50ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoR3JvdXBXcmFwcGVyQ29tcG9uZW50LCB7XG4gICAgICBjbGFzc05hbWU6IG1lcmdlZEdyb3VwQ2xhc3NOYW1lLFxuICAgICAgcmVmOiBncm91cFJlZlxuICAgIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFdyYXBwZXJDb21wb25lbnQsIHtcbiAgICAgIGNsYXNzTmFtZTogbWVyZ2VkV3JhcHBlckNsYXNzTmFtZVxuICAgIH0sIGFkZG9uQmVmb3JlICYmIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEdyb3VwQWRkb25Db21wb25lbnQsIHtcbiAgICAgIGNsYXNzTmFtZTogYWRkb25DbHNcbiAgICB9LCBhZGRvbkJlZm9yZSksIGVsZW1lbnQsIGFkZG9uQWZ0ZXIgJiYgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoR3JvdXBBZGRvbkNvbXBvbmVudCwge1xuICAgICAgY2xhc3NOYW1lOiBhZGRvbkNsc1xuICAgIH0sIGFkZG9uQWZ0ZXIpKSk7XG4gIH1cblxuICAvLyBgY2xhc3NOYW1lYCBhbmQgYHN0eWxlYCBhcmUgYWx3YXlzIG9uIHRoZSByb290IGVsZW1lbnRcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQoZWxlbWVudCwge1xuICAgIGNsYXNzTmFtZTogY2xzeCgoX3Byb3BzMiA9IGVsZW1lbnQucHJvcHMpID09PSBudWxsIHx8IF9wcm9wczIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9wcm9wczIuY2xhc3NOYW1lLCBjbGFzc05hbWUpIHx8IG51bGwsXG4gICAgc3R5bGU6IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgKF9wcm9wczMgPSBlbGVtZW50LnByb3BzKSA9PT0gbnVsbCB8fCBfcHJvcHMzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfcHJvcHMzLnN0eWxlKSwgc3R5bGUpLFxuICAgIGhpZGRlbjogaGlkZGVuXG4gIH0pO1xufSk7XG5leHBvcnQgZGVmYXVsdCBCYXNlSW5wdXQ7IiwiaW1wb3J0IF9vYmplY3RTcHJlYWQgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFNwcmVhZDJcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9kZWZpbmVQcm9wZXJ0eSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHlcIjtcbmltcG9ydCBfdG9Db25zdW1hYmxlQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvQ29uc3VtYWJsZUFycmF5XCI7XG5pbXBvcnQgX3NsaWNlZFRvQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXlcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzXCI7XG52YXIgX2V4Y2x1ZGVkID0gW1wiYXV0b0NvbXBsZXRlXCIsIFwib25DaGFuZ2VcIiwgXCJvbkZvY3VzXCIsIFwib25CbHVyXCIsIFwib25QcmVzc0VudGVyXCIsIFwib25LZXlEb3duXCIsIFwib25LZXlVcFwiLCBcInByZWZpeENsc1wiLCBcImRpc2FibGVkXCIsIFwiaHRtbFNpemVcIiwgXCJjbGFzc05hbWVcIiwgXCJtYXhMZW5ndGhcIiwgXCJzdWZmaXhcIiwgXCJzaG93Q291bnRcIiwgXCJjb3VudFwiLCBcInR5cGVcIiwgXCJjbGFzc2VzXCIsIFwiY2xhc3NOYW1lc1wiLCBcInN0eWxlc1wiLCBcIm9uQ29tcG9zaXRpb25TdGFydFwiLCBcIm9uQ29tcG9zaXRpb25FbmRcIl07XG5pbXBvcnQgY2xzeCBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB1c2VNZXJnZWRTdGF0ZSBmcm9tIFwicmMtdXRpbC9lcy9ob29rcy91c2VNZXJnZWRTdGF0ZVwiO1xuaW1wb3J0IG9taXQgZnJvbSBcInJjLXV0aWwvZXMvb21pdFwiO1xuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYsIHVzZUVmZmVjdCwgdXNlSW1wZXJhdGl2ZUhhbmRsZSwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBCYXNlSW5wdXQgZnJvbSBcIi4vQmFzZUlucHV0XCI7XG5pbXBvcnQgdXNlQ291bnQgZnJvbSBcIi4vaG9va3MvdXNlQ291bnRcIjtcbmltcG9ydCB7IHJlc29sdmVPbkNoYW5nZSwgdHJpZ2dlckZvY3VzIH0gZnJvbSBcIi4vdXRpbHMvY29tbW9uVXRpbHNcIjtcbnZhciBJbnB1dCA9IC8qI19fUFVSRV9fKi9mb3J3YXJkUmVmKGZ1bmN0aW9uIChwcm9wcywgcmVmKSB7XG4gIHZhciBhdXRvQ29tcGxldGUgPSBwcm9wcy5hdXRvQ29tcGxldGUsXG4gICAgb25DaGFuZ2UgPSBwcm9wcy5vbkNoYW5nZSxcbiAgICBvbkZvY3VzID0gcHJvcHMub25Gb2N1cyxcbiAgICBvbkJsdXIgPSBwcm9wcy5vbkJsdXIsXG4gICAgb25QcmVzc0VudGVyID0gcHJvcHMub25QcmVzc0VudGVyLFxuICAgIG9uS2V5RG93biA9IHByb3BzLm9uS2V5RG93bixcbiAgICBvbktleVVwID0gcHJvcHMub25LZXlVcCxcbiAgICBfcHJvcHMkcHJlZml4Q2xzID0gcHJvcHMucHJlZml4Q2xzLFxuICAgIHByZWZpeENscyA9IF9wcm9wcyRwcmVmaXhDbHMgPT09IHZvaWQgMCA/ICdyYy1pbnB1dCcgOiBfcHJvcHMkcHJlZml4Q2xzLFxuICAgIGRpc2FibGVkID0gcHJvcHMuZGlzYWJsZWQsXG4gICAgaHRtbFNpemUgPSBwcm9wcy5odG1sU2l6ZSxcbiAgICBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUsXG4gICAgbWF4TGVuZ3RoID0gcHJvcHMubWF4TGVuZ3RoLFxuICAgIHN1ZmZpeCA9IHByb3BzLnN1ZmZpeCxcbiAgICBzaG93Q291bnQgPSBwcm9wcy5zaG93Q291bnQsXG4gICAgY291bnQgPSBwcm9wcy5jb3VudCxcbiAgICBfcHJvcHMkdHlwZSA9IHByb3BzLnR5cGUsXG4gICAgdHlwZSA9IF9wcm9wcyR0eXBlID09PSB2b2lkIDAgPyAndGV4dCcgOiBfcHJvcHMkdHlwZSxcbiAgICBjbGFzc2VzID0gcHJvcHMuY2xhc3NlcyxcbiAgICBjbGFzc05hbWVzID0gcHJvcHMuY2xhc3NOYW1lcyxcbiAgICBzdHlsZXMgPSBwcm9wcy5zdHlsZXMsXG4gICAgX29uQ29tcG9zaXRpb25TdGFydCA9IHByb3BzLm9uQ29tcG9zaXRpb25TdGFydCxcbiAgICBvbkNvbXBvc2l0aW9uRW5kID0gcHJvcHMub25Db21wb3NpdGlvbkVuZCxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHByb3BzLCBfZXhjbHVkZWQpO1xuICB2YXIgX3VzZVN0YXRlID0gdXNlU3RhdGUoZmFsc2UpLFxuICAgIF91c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUsIDIpLFxuICAgIGZvY3VzZWQgPSBfdXNlU3RhdGUyWzBdLFxuICAgIHNldEZvY3VzZWQgPSBfdXNlU3RhdGUyWzFdO1xuICB2YXIgY29tcG9zaXRpb25SZWYgPSB1c2VSZWYoZmFsc2UpO1xuICB2YXIga2V5TG9ja1JlZiA9IHVzZVJlZihmYWxzZSk7XG4gIHZhciBpbnB1dFJlZiA9IHVzZVJlZihudWxsKTtcbiAgdmFyIGhvbGRlclJlZiA9IHVzZVJlZihudWxsKTtcbiAgdmFyIGZvY3VzID0gZnVuY3Rpb24gZm9jdXMob3B0aW9uKSB7XG4gICAgaWYgKGlucHV0UmVmLmN1cnJlbnQpIHtcbiAgICAgIHRyaWdnZXJGb2N1cyhpbnB1dFJlZi5jdXJyZW50LCBvcHRpb24pO1xuICAgIH1cbiAgfTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09IFZhbHVlID09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBfdXNlTWVyZ2VkU3RhdGUgPSB1c2VNZXJnZWRTdGF0ZShwcm9wcy5kZWZhdWx0VmFsdWUsIHtcbiAgICAgIHZhbHVlOiBwcm9wcy52YWx1ZVxuICAgIH0pLFxuICAgIF91c2VNZXJnZWRTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlTWVyZ2VkU3RhdGUsIDIpLFxuICAgIHZhbHVlID0gX3VzZU1lcmdlZFN0YXRlMlswXSxcbiAgICBzZXRWYWx1ZSA9IF91c2VNZXJnZWRTdGF0ZTJbMV07XG4gIHZhciBmb3JtYXRWYWx1ZSA9IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwgPyAnJyA6IFN0cmluZyh2YWx1ZSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PSBTZWxlY3QgUmFuZ2UgPT09PT09PT09PT09PT09PT09PVxuICB2YXIgX3VzZVN0YXRlMyA9IHVzZVN0YXRlKG51bGwpLFxuICAgIF91c2VTdGF0ZTQgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUzLCAyKSxcbiAgICBzZWxlY3Rpb24gPSBfdXNlU3RhdGU0WzBdLFxuICAgIHNldFNlbGVjdGlvbiA9IF91c2VTdGF0ZTRbMV07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PSBDb3VudCA9PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgY291bnRDb25maWcgPSB1c2VDb3VudChjb3VudCwgc2hvd0NvdW50KTtcbiAgdmFyIG1lcmdlZE1heCA9IGNvdW50Q29uZmlnLm1heCB8fCBtYXhMZW5ndGg7XG4gIHZhciB2YWx1ZUxlbmd0aCA9IGNvdW50Q29uZmlnLnN0cmF0ZWd5KGZvcm1hdFZhbHVlKTtcbiAgdmFyIGlzT3V0T2ZSYW5nZSA9ICEhbWVyZ2VkTWF4ICYmIHZhbHVlTGVuZ3RoID4gbWVyZ2VkTWF4O1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09IFJlZiA9PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgX2hvbGRlclJlZiRjdXJyZW50O1xuICAgIHJldHVybiB7XG4gICAgICBmb2N1czogZm9jdXMsXG4gICAgICBibHVyOiBmdW5jdGlvbiBibHVyKCkge1xuICAgICAgICB2YXIgX2lucHV0UmVmJGN1cnJlbnQ7XG4gICAgICAgIChfaW5wdXRSZWYkY3VycmVudCA9IGlucHV0UmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9pbnB1dFJlZiRjdXJyZW50ID09PSB2b2lkIDAgfHwgX2lucHV0UmVmJGN1cnJlbnQuYmx1cigpO1xuICAgICAgfSxcbiAgICAgIHNldFNlbGVjdGlvblJhbmdlOiBmdW5jdGlvbiBzZXRTZWxlY3Rpb25SYW5nZShzdGFydCwgZW5kLCBkaXJlY3Rpb24pIHtcbiAgICAgICAgdmFyIF9pbnB1dFJlZiRjdXJyZW50MjtcbiAgICAgICAgKF9pbnB1dFJlZiRjdXJyZW50MiA9IGlucHV0UmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9pbnB1dFJlZiRjdXJyZW50MiA9PT0gdm9pZCAwIHx8IF9pbnB1dFJlZiRjdXJyZW50Mi5zZXRTZWxlY3Rpb25SYW5nZShzdGFydCwgZW5kLCBkaXJlY3Rpb24pO1xuICAgICAgfSxcbiAgICAgIHNlbGVjdDogZnVuY3Rpb24gc2VsZWN0KCkge1xuICAgICAgICB2YXIgX2lucHV0UmVmJGN1cnJlbnQzO1xuICAgICAgICAoX2lucHV0UmVmJGN1cnJlbnQzID0gaW5wdXRSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2lucHV0UmVmJGN1cnJlbnQzID09PSB2b2lkIDAgfHwgX2lucHV0UmVmJGN1cnJlbnQzLnNlbGVjdCgpO1xuICAgICAgfSxcbiAgICAgIGlucHV0OiBpbnB1dFJlZi5jdXJyZW50LFxuICAgICAgbmF0aXZlRWxlbWVudDogKChfaG9sZGVyUmVmJGN1cnJlbnQgPSBob2xkZXJSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2hvbGRlclJlZiRjdXJyZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfaG9sZGVyUmVmJGN1cnJlbnQubmF0aXZlRWxlbWVudCkgfHwgaW5wdXRSZWYuY3VycmVudFxuICAgIH07XG4gIH0pO1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmIChrZXlMb2NrUmVmLmN1cnJlbnQpIHtcbiAgICAgIGtleUxvY2tSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgIH1cbiAgICBzZXRGb2N1c2VkKGZ1bmN0aW9uIChwcmV2KSB7XG4gICAgICByZXR1cm4gcHJldiAmJiBkaXNhYmxlZCA/IGZhbHNlIDogcHJldjtcbiAgICB9KTtcbiAgfSwgW2Rpc2FibGVkXSk7XG4gIHZhciB0cmlnZ2VyQ2hhbmdlID0gZnVuY3Rpb24gdHJpZ2dlckNoYW5nZShlLCBjdXJyZW50VmFsdWUsIGluZm8pIHtcbiAgICB2YXIgY3V0VmFsdWUgPSBjdXJyZW50VmFsdWU7XG4gICAgaWYgKCFjb21wb3NpdGlvblJlZi5jdXJyZW50ICYmIGNvdW50Q29uZmlnLmV4Y2VlZEZvcm1hdHRlciAmJiBjb3VudENvbmZpZy5tYXggJiYgY291bnRDb25maWcuc3RyYXRlZ3koY3VycmVudFZhbHVlKSA+IGNvdW50Q29uZmlnLm1heCkge1xuICAgICAgY3V0VmFsdWUgPSBjb3VudENvbmZpZy5leGNlZWRGb3JtYXR0ZXIoY3VycmVudFZhbHVlLCB7XG4gICAgICAgIG1heDogY291bnRDb25maWcubWF4XG4gICAgICB9KTtcbiAgICAgIGlmIChjdXJyZW50VmFsdWUgIT09IGN1dFZhbHVlKSB7XG4gICAgICAgIHZhciBfaW5wdXRSZWYkY3VycmVudDQsIF9pbnB1dFJlZiRjdXJyZW50NTtcbiAgICAgICAgc2V0U2VsZWN0aW9uKFsoKF9pbnB1dFJlZiRjdXJyZW50NCA9IGlucHV0UmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9pbnB1dFJlZiRjdXJyZW50NCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2lucHV0UmVmJGN1cnJlbnQ0LnNlbGVjdGlvblN0YXJ0KSB8fCAwLCAoKF9pbnB1dFJlZiRjdXJyZW50NSA9IGlucHV0UmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9pbnB1dFJlZiRjdXJyZW50NSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2lucHV0UmVmJGN1cnJlbnQ1LnNlbGVjdGlvbkVuZCkgfHwgMF0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaW5mby5zb3VyY2UgPT09ICdjb21wb3NpdGlvbkVuZCcpIHtcbiAgICAgIC8vIEF2b2lkIHRyaWdnZXJpbmcgdHdpY2VcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hbnQtZGVzaWduL2FudC1kZXNpZ24vaXNzdWVzLzQ2NTg3XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHNldFZhbHVlKGN1dFZhbHVlKTtcbiAgICBpZiAoaW5wdXRSZWYuY3VycmVudCkge1xuICAgICAgcmVzb2x2ZU9uQ2hhbmdlKGlucHV0UmVmLmN1cnJlbnQsIGUsIG9uQ2hhbmdlLCBjdXRWYWx1ZSk7XG4gICAgfVxuICB9O1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmIChzZWxlY3Rpb24pIHtcbiAgICAgIHZhciBfaW5wdXRSZWYkY3VycmVudDY7XG4gICAgICAoX2lucHV0UmVmJGN1cnJlbnQ2ID0gaW5wdXRSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2lucHV0UmVmJGN1cnJlbnQ2ID09PSB2b2lkIDAgfHwgX2lucHV0UmVmJGN1cnJlbnQ2LnNldFNlbGVjdGlvblJhbmdlLmFwcGx5KF9pbnB1dFJlZiRjdXJyZW50NiwgX3RvQ29uc3VtYWJsZUFycmF5KHNlbGVjdGlvbikpO1xuICAgIH1cbiAgfSwgW3NlbGVjdGlvbl0pO1xuICB2YXIgb25JbnRlcm5hbENoYW5nZSA9IGZ1bmN0aW9uIG9uSW50ZXJuYWxDaGFuZ2UoZSkge1xuICAgIHRyaWdnZXJDaGFuZ2UoZSwgZS50YXJnZXQudmFsdWUsIHtcbiAgICAgIHNvdXJjZTogJ2NoYW5nZSdcbiAgICB9KTtcbiAgfTtcbiAgdmFyIG9uSW50ZXJuYWxDb21wb3NpdGlvbkVuZCA9IGZ1bmN0aW9uIG9uSW50ZXJuYWxDb21wb3NpdGlvbkVuZChlKSB7XG4gICAgY29tcG9zaXRpb25SZWYuY3VycmVudCA9IGZhbHNlO1xuICAgIHRyaWdnZXJDaGFuZ2UoZSwgZS5jdXJyZW50VGFyZ2V0LnZhbHVlLCB7XG4gICAgICBzb3VyY2U6ICdjb21wb3NpdGlvbkVuZCdcbiAgICB9KTtcbiAgICBvbkNvbXBvc2l0aW9uRW5kID09PSBudWxsIHx8IG9uQ29tcG9zaXRpb25FbmQgPT09IHZvaWQgMCB8fCBvbkNvbXBvc2l0aW9uRW5kKGUpO1xuICB9O1xuICB2YXIgaGFuZGxlS2V5RG93biA9IGZ1bmN0aW9uIGhhbmRsZUtleURvd24oZSkge1xuICAgIGlmIChvblByZXNzRW50ZXIgJiYgZS5rZXkgPT09ICdFbnRlcicgJiYgIWtleUxvY2tSZWYuY3VycmVudCkge1xuICAgICAga2V5TG9ja1JlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgIG9uUHJlc3NFbnRlcihlKTtcbiAgICB9XG4gICAgb25LZXlEb3duID09PSBudWxsIHx8IG9uS2V5RG93biA9PT0gdm9pZCAwIHx8IG9uS2V5RG93bihlKTtcbiAgfTtcbiAgdmFyIGhhbmRsZUtleVVwID0gZnVuY3Rpb24gaGFuZGxlS2V5VXAoZSkge1xuICAgIGlmIChlLmtleSA9PT0gJ0VudGVyJykge1xuICAgICAga2V5TG9ja1JlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgfVxuICAgIG9uS2V5VXAgPT09IG51bGwgfHwgb25LZXlVcCA9PT0gdm9pZCAwIHx8IG9uS2V5VXAoZSk7XG4gIH07XG4gIHZhciBoYW5kbGVGb2N1cyA9IGZ1bmN0aW9uIGhhbmRsZUZvY3VzKGUpIHtcbiAgICBzZXRGb2N1c2VkKHRydWUpO1xuICAgIG9uRm9jdXMgPT09IG51bGwgfHwgb25Gb2N1cyA9PT0gdm9pZCAwIHx8IG9uRm9jdXMoZSk7XG4gIH07XG4gIHZhciBoYW5kbGVCbHVyID0gZnVuY3Rpb24gaGFuZGxlQmx1cihlKSB7XG4gICAgaWYgKGtleUxvY2tSZWYuY3VycmVudCkge1xuICAgICAga2V5TG9ja1JlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgfVxuICAgIHNldEZvY3VzZWQoZmFsc2UpO1xuICAgIG9uQmx1ciA9PT0gbnVsbCB8fCBvbkJsdXIgPT09IHZvaWQgMCB8fCBvbkJsdXIoZSk7XG4gIH07XG4gIHZhciBoYW5kbGVSZXNldCA9IGZ1bmN0aW9uIGhhbmRsZVJlc2V0KGUpIHtcbiAgICBzZXRWYWx1ZSgnJyk7XG4gICAgZm9jdXMoKTtcbiAgICBpZiAoaW5wdXRSZWYuY3VycmVudCkge1xuICAgICAgcmVzb2x2ZU9uQ2hhbmdlKGlucHV0UmVmLmN1cnJlbnQsIGUsIG9uQ2hhbmdlKTtcbiAgICB9XG4gIH07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PSBJbnB1dCA9PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgb3V0T2ZSYW5nZUNscyA9IGlzT3V0T2ZSYW5nZSAmJiBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLW91dC1vZi1yYW5nZVwiKTtcbiAgdmFyIGdldElucHV0RWxlbWVudCA9IGZ1bmN0aW9uIGdldElucHV0RWxlbWVudCgpIHtcbiAgICAvLyBGaXggaHR0cHM6Ly9mYi5tZS9yZWFjdC11bmtub3duLXByb3BcbiAgICB2YXIgb3RoZXJQcm9wcyA9IG9taXQocHJvcHMsIFsncHJlZml4Q2xzJywgJ29uUHJlc3NFbnRlcicsICdhZGRvbkJlZm9yZScsICdhZGRvbkFmdGVyJywgJ3ByZWZpeCcsICdzdWZmaXgnLCAnYWxsb3dDbGVhcicsXG4gICAgLy8gSW5wdXQgZWxlbWVudHMgbXVzdCBiZSBlaXRoZXIgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQsXG4gICAgLy8gc3BlY2lmeSBlaXRoZXIgdGhlIHZhbHVlIHByb3AsIG9yIHRoZSBkZWZhdWx0VmFsdWUgcHJvcCwgYnV0IG5vdCBib3RoLlxuICAgICdkZWZhdWx0VmFsdWUnLCAnc2hvd0NvdW50JywgJ2NvdW50JywgJ2NsYXNzZXMnLCAnaHRtbFNpemUnLCAnc3R5bGVzJywgJ2NsYXNzTmFtZXMnLCAnb25DbGVhciddKTtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiLCBfZXh0ZW5kcyh7XG4gICAgICBhdXRvQ29tcGxldGU6IGF1dG9Db21wbGV0ZVxuICAgIH0sIG90aGVyUHJvcHMsIHtcbiAgICAgIG9uQ2hhbmdlOiBvbkludGVybmFsQ2hhbmdlLFxuICAgICAgb25Gb2N1czogaGFuZGxlRm9jdXMsXG4gICAgICBvbkJsdXI6IGhhbmRsZUJsdXIsXG4gICAgICBvbktleURvd246IGhhbmRsZUtleURvd24sXG4gICAgICBvbktleVVwOiBoYW5kbGVLZXlVcCxcbiAgICAgIGNsYXNzTmFtZTogY2xzeChwcmVmaXhDbHMsIF9kZWZpbmVQcm9wZXJ0eSh7fSwgXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1kaXNhYmxlZFwiKSwgZGlzYWJsZWQpLCBjbGFzc05hbWVzID09PSBudWxsIHx8IGNsYXNzTmFtZXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNsYXNzTmFtZXMuaW5wdXQpLFxuICAgICAgc3R5bGU6IHN0eWxlcyA9PT0gbnVsbCB8fCBzdHlsZXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHN0eWxlcy5pbnB1dCxcbiAgICAgIHJlZjogaW5wdXRSZWYsXG4gICAgICBzaXplOiBodG1sU2l6ZSxcbiAgICAgIHR5cGU6IHR5cGUsXG4gICAgICBvbkNvbXBvc2l0aW9uU3RhcnQ6IGZ1bmN0aW9uIG9uQ29tcG9zaXRpb25TdGFydChlKSB7XG4gICAgICAgIGNvbXBvc2l0aW9uUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICBfb25Db21wb3NpdGlvblN0YXJ0ID09PSBudWxsIHx8IF9vbkNvbXBvc2l0aW9uU3RhcnQgPT09IHZvaWQgMCB8fCBfb25Db21wb3NpdGlvblN0YXJ0KGUpO1xuICAgICAgfSxcbiAgICAgIG9uQ29tcG9zaXRpb25FbmQ6IG9uSW50ZXJuYWxDb21wb3NpdGlvbkVuZFxuICAgIH0pKTtcbiAgfTtcbiAgdmFyIGdldFN1ZmZpeCA9IGZ1bmN0aW9uIGdldFN1ZmZpeCgpIHtcbiAgICAvLyBNYXggbGVuZ3RoIHZhbHVlXG4gICAgdmFyIGhhc01heExlbmd0aCA9IE51bWJlcihtZXJnZWRNYXgpID4gMDtcbiAgICBpZiAoc3VmZml4IHx8IGNvdW50Q29uZmlnLnNob3cpIHtcbiAgICAgIHZhciBkYXRhQ291bnQgPSBjb3VudENvbmZpZy5zaG93Rm9ybWF0dGVyID8gY291bnRDb25maWcuc2hvd0Zvcm1hdHRlcih7XG4gICAgICAgIHZhbHVlOiBmb3JtYXRWYWx1ZSxcbiAgICAgICAgY291bnQ6IHZhbHVlTGVuZ3RoLFxuICAgICAgICBtYXhMZW5ndGg6IG1lcmdlZE1heFxuICAgICAgfSkgOiBcIlwiLmNvbmNhdCh2YWx1ZUxlbmd0aCkuY29uY2F0KGhhc01heExlbmd0aCA/IFwiIC8gXCIuY29uY2F0KG1lcmdlZE1heCkgOiAnJyk7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsIGNvdW50Q29uZmlnLnNob3cgJiYgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBjbHN4KFwiXCIuY29uY2F0KHByZWZpeENscywgXCItc2hvdy1jb3VudC1zdWZmaXhcIiksIF9kZWZpbmVQcm9wZXJ0eSh7fSwgXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1zaG93LWNvdW50LWhhcy1zdWZmaXhcIiksICEhc3VmZml4KSwgY2xhc3NOYW1lcyA9PT0gbnVsbCB8fCBjbGFzc05hbWVzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjbGFzc05hbWVzLmNvdW50KSxcbiAgICAgICAgc3R5bGU6IF9vYmplY3RTcHJlYWQoe30sIHN0eWxlcyA9PT0gbnVsbCB8fCBzdHlsZXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHN0eWxlcy5jb3VudClcbiAgICAgIH0sIGRhdGFDb3VudCksIHN1ZmZpeCk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9O1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT0gUmVuZGVyID09PT09PT09PT09PT09PT09PT09PT1cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEJhc2VJbnB1dCwgX2V4dGVuZHMoe30sIHJlc3QsIHtcbiAgICBwcmVmaXhDbHM6IHByZWZpeENscyxcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3NOYW1lLCBvdXRPZlJhbmdlQ2xzKSxcbiAgICBoYW5kbGVSZXNldDogaGFuZGxlUmVzZXQsXG4gICAgdmFsdWU6IGZvcm1hdFZhbHVlLFxuICAgIGZvY3VzZWQ6IGZvY3VzZWQsXG4gICAgdHJpZ2dlckZvY3VzOiBmb2N1cyxcbiAgICBzdWZmaXg6IGdldFN1ZmZpeCgpLFxuICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICBjbGFzc2VzOiBjbGFzc2VzLFxuICAgIGNsYXNzTmFtZXM6IGNsYXNzTmFtZXMsXG4gICAgc3R5bGVzOiBzdHlsZXNcbiAgfSksIGdldElucHV0RWxlbWVudCgpKTtcbn0pO1xuZXhwb3J0IGRlZmF1bHQgSW5wdXQ7IiwiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNcIjtcbmltcG9ydCBfb2JqZWN0U3ByZWFkIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyXCI7XG5pbXBvcnQgX3R5cGVvZiBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdHlwZW9mXCI7XG52YXIgX2V4Y2x1ZGVkID0gW1wic2hvd1wiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0Jztcbi8qKlxuICogQ3V0IGB2YWx1ZWAgYnkgdGhlIGBjb3VudC5tYXhgIHByb3AuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbkNvdW50UmFuZ2UodmFsdWUsIGNvdW50Q29uZmlnKSB7XG4gIGlmICghY291bnRDb25maWcubWF4KSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgdmFyIGNvdW50ID0gY291bnRDb25maWcuc3RyYXRlZ3kodmFsdWUpO1xuICByZXR1cm4gY291bnQgPD0gY291bnRDb25maWcubWF4O1xufVxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlQ291bnQoY291bnQsIHNob3dDb3VudCkge1xuICByZXR1cm4gUmVhY3QudXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG1lcmdlZENvbmZpZyA9IHt9O1xuICAgIGlmIChzaG93Q291bnQpIHtcbiAgICAgIG1lcmdlZENvbmZpZy5zaG93ID0gX3R5cGVvZihzaG93Q291bnQpID09PSAnb2JqZWN0JyAmJiBzaG93Q291bnQuZm9ybWF0dGVyID8gc2hvd0NvdW50LmZvcm1hdHRlciA6ICEhc2hvd0NvdW50O1xuICAgIH1cbiAgICBtZXJnZWRDb25maWcgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIG1lcmdlZENvbmZpZyksIGNvdW50KTtcbiAgICB2YXIgX3JlZiA9IG1lcmdlZENvbmZpZyxcbiAgICAgIHNob3cgPSBfcmVmLnNob3csXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gICAgcmV0dXJuIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgcmVzdCksIHt9LCB7XG4gICAgICBzaG93OiAhIXNob3csXG4gICAgICBzaG93Rm9ybWF0dGVyOiB0eXBlb2Ygc2hvdyA9PT0gJ2Z1bmN0aW9uJyA/IHNob3cgOiB1bmRlZmluZWQsXG4gICAgICBzdHJhdGVneTogcmVzdC5zdHJhdGVneSB8fCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlLmxlbmd0aDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSwgW2NvdW50LCBzaG93Q291bnRdKTtcbn0iLCJpbXBvcnQgQmFzZUlucHV0IGZyb20gXCIuL0Jhc2VJbnB1dFwiO1xuaW1wb3J0IElucHV0IGZyb20gXCIuL0lucHV0XCI7XG5leHBvcnQgeyBCYXNlSW5wdXQgfTtcbmV4cG9ydCBkZWZhdWx0IElucHV0OyIsImV4cG9ydCBmdW5jdGlvbiBoYXNBZGRvbihwcm9wcykge1xuICByZXR1cm4gISEocHJvcHMuYWRkb25CZWZvcmUgfHwgcHJvcHMuYWRkb25BZnRlcik7XG59XG5leHBvcnQgZnVuY3Rpb24gaGFzUHJlZml4U3VmZml4KHByb3BzKSB7XG4gIHJldHVybiAhIShwcm9wcy5wcmVmaXggfHwgcHJvcHMuc3VmZml4IHx8IHByb3BzLmFsbG93Q2xlYXIpO1xufVxuXG4vLyBUT0RPOiBJdCdzIGJldHRlciB0byB1c2UgYFByb3h5YCByZXBsYWNlIHRoZSBgZWxlbWVudC52YWx1ZWAuIEJ1dCB3ZSBzdGlsbCBuZWVkIHN1cHBvcnQgSUUxMS5cbmZ1bmN0aW9uIGNsb25lRXZlbnQoZXZlbnQsIHRhcmdldCwgdmFsdWUpIHtcbiAgLy8gQSBidWcgcmVwb3J0IGZpbGVkIG9uIFdlYktpdCdzIEJ1Z3ppbGxhIHRyYWNrZXIsIGRhdGluZyBiYWNrIHRvIDIwMDksIHNwZWNpZmljYWxseSBhZGRyZXNzZXMgdGhlIGlzc3VlIG9mIGNsb25lTm9kZSgpIG5vdCBjb3B5aW5nIGZpbGVzIG9mIDxpbnB1dCB0eXBlPVwiZmlsZVwiPiBlbGVtZW50cy5cbiAgLy8gQXMgb2YgdGhlIGxhc3QgdXBkYXRlLCB0aGlzIGJ1ZyB3YXMgc3RpbGwgbWFya2VkIGFzIFwiTkVXLFwiIGluZGljYXRpbmcgdGhhdCBpdCBtaWdodCBub3QgaGF2ZSBiZWVuIHJlc29sdmVkIHlldOKAi+KAiy5cbiAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4MTIzXG4gIHZhciBjdXJyZW50VGFyZ2V0ID0gdGFyZ2V0LmNsb25lTm9kZSh0cnVlKTtcblxuICAvLyBjbGljayBjbGVhciBpY29uXG4gIHZhciBuZXdFdmVudCA9IE9iamVjdC5jcmVhdGUoZXZlbnQsIHtcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHZhbHVlOiBjdXJyZW50VGFyZ2V0XG4gICAgfSxcbiAgICBjdXJyZW50VGFyZ2V0OiB7XG4gICAgICB2YWx1ZTogY3VycmVudFRhcmdldFxuICAgIH1cbiAgfSk7XG5cbiAgLy8gRmlsbCBkYXRhXG4gIGN1cnJlbnRUYXJnZXQudmFsdWUgPSB2YWx1ZTtcblxuICAvLyBGaWxsIHNlbGVjdGlvbi4gU29tZSB0eXBlIGxpa2UgYGVtYWlsYCBub3Qgc3VwcG9ydCBzZWxlY3Rpb25cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FudC1kZXNpZ24vYW50LWRlc2lnbi9pc3N1ZXMvNDc4MzNcbiAgaWYgKHR5cGVvZiB0YXJnZXQuc2VsZWN0aW9uU3RhcnQgPT09ICdudW1iZXInICYmIHR5cGVvZiB0YXJnZXQuc2VsZWN0aW9uRW5kID09PSAnbnVtYmVyJykge1xuICAgIGN1cnJlbnRUYXJnZXQuc2VsZWN0aW9uU3RhcnQgPSB0YXJnZXQuc2VsZWN0aW9uU3RhcnQ7XG4gICAgY3VycmVudFRhcmdldC5zZWxlY3Rpb25FbmQgPSB0YXJnZXQuc2VsZWN0aW9uRW5kO1xuICB9XG4gIGN1cnJlbnRUYXJnZXQuc2V0U2VsZWN0aW9uUmFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGFyZ2V0LnNldFNlbGVjdGlvblJhbmdlLmFwcGx5KHRhcmdldCwgYXJndW1lbnRzKTtcbiAgfTtcbiAgcmV0dXJuIG5ld0V2ZW50O1xufVxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVPbkNoYW5nZSh0YXJnZXQsIGUsIG9uQ2hhbmdlLCB0YXJnZXRWYWx1ZSkge1xuICBpZiAoIW9uQ2hhbmdlKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBldmVudCA9IGU7XG4gIGlmIChlLnR5cGUgPT09ICdjbGljaycpIHtcbiAgICAvLyBDbG9uZSBhIG5ldyB0YXJnZXQgZm9yIGV2ZW50LlxuICAgIC8vIEF2b2lkIHRoZSBmb2xsb3dpbmcgdXNhZ2UsIHRoZSBzZXRRdWVyeSBtZXRob2QgZ2V0cyB0aGUgb3JpZ2luYWwgdmFsdWUuXG4gICAgLy9cbiAgICAvLyBjb25zdCBbcXVlcnksIHNldFF1ZXJ5XSA9IFJlYWN0LnVzZVN0YXRlKCcnKTtcbiAgICAvLyA8SW5wdXRcbiAgICAvLyAgIGFsbG93Q2xlYXJcbiAgICAvLyAgIHZhbHVlPXtxdWVyeX1cbiAgICAvLyAgIG9uQ2hhbmdlPXsoZSk9PiB7XG4gICAgLy8gICAgIHNldFF1ZXJ5KChwcmV2U3RhdHVzKSA9PiBlLnRhcmdldC52YWx1ZSk7XG4gICAgLy8gICB9fVxuICAgIC8vIC8+XG5cbiAgICBldmVudCA9IGNsb25lRXZlbnQoZSwgdGFyZ2V0LCAnJyk7XG4gICAgb25DaGFuZ2UoZXZlbnQpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIFRyaWdnZXIgYnkgY29tcG9zaXRpb24gZXZlbnQsIHRoaXMgbWVhbnMgd2UgbmVlZCBmb3JjZSBjaGFuZ2UgdGhlIGlucHV0IHZhbHVlXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hbnQtZGVzaWduL2FudC1kZXNpZ24vaXNzdWVzLzQ1NzM3XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hbnQtZGVzaWduL2FudC1kZXNpZ24vaXNzdWVzLzQ2NTk4XG4gIGlmICh0YXJnZXQudHlwZSAhPT0gJ2ZpbGUnICYmIHRhcmdldFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICBldmVudCA9IGNsb25lRXZlbnQoZSwgdGFyZ2V0LCB0YXJnZXRWYWx1ZSk7XG4gICAgb25DaGFuZ2UoZXZlbnQpO1xuICAgIHJldHVybjtcbiAgfVxuICBvbkNoYW5nZShldmVudCk7XG59XG5leHBvcnQgZnVuY3Rpb24gdHJpZ2dlckZvY3VzKGVsZW1lbnQsIG9wdGlvbikge1xuICBpZiAoIWVsZW1lbnQpIHJldHVybjtcbiAgZWxlbWVudC5mb2N1cyhvcHRpb24pO1xuXG4gIC8vIFNlbGVjdGlvbiBjb250ZW50XG4gIHZhciBfcmVmID0gb3B0aW9uIHx8IHt9LFxuICAgIGN1cnNvciA9IF9yZWYuY3Vyc29yO1xuICBpZiAoY3Vyc29yKSB7XG4gICAgdmFyIGxlbiA9IGVsZW1lbnQudmFsdWUubGVuZ3RoO1xuICAgIHN3aXRjaCAoY3Vyc29yKSB7XG4gICAgICBjYXNlICdzdGFydCc6XG4gICAgICAgIGVsZW1lbnQuc2V0U2VsZWN0aW9uUmFuZ2UoMCwgMCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgZWxlbWVudC5zZXRTZWxlY3Rpb25SYW5nZShsZW4sIGxlbik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgZWxlbWVudC5zZXRTZWxlY3Rpb25SYW5nZSgwLCBsZW4pO1xuICAgIH1cbiAgfVxufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5oYXNBZGRvbiA9IGhhc0FkZG9uO1xuZXhwb3J0cy5oYXNQcmVmaXhTdWZmaXggPSBoYXNQcmVmaXhTdWZmaXg7XG5leHBvcnRzLnJlc29sdmVPbkNoYW5nZSA9IHJlc29sdmVPbkNoYW5nZTtcbmV4cG9ydHMudHJpZ2dlckZvY3VzID0gdHJpZ2dlckZvY3VzO1xuZnVuY3Rpb24gaGFzQWRkb24ocHJvcHMpIHtcbiAgcmV0dXJuICEhKHByb3BzLmFkZG9uQmVmb3JlIHx8IHByb3BzLmFkZG9uQWZ0ZXIpO1xufVxuZnVuY3Rpb24gaGFzUHJlZml4U3VmZml4KHByb3BzKSB7XG4gIHJldHVybiAhIShwcm9wcy5wcmVmaXggfHwgcHJvcHMuc3VmZml4IHx8IHByb3BzLmFsbG93Q2xlYXIpO1xufVxuXG4vLyBUT0RPOiBJdCdzIGJldHRlciB0byB1c2UgYFByb3h5YCByZXBsYWNlIHRoZSBgZWxlbWVudC52YWx1ZWAuIEJ1dCB3ZSBzdGlsbCBuZWVkIHN1cHBvcnQgSUUxMS5cbmZ1bmN0aW9uIGNsb25lRXZlbnQoZXZlbnQsIHRhcmdldCwgdmFsdWUpIHtcbiAgLy8gQSBidWcgcmVwb3J0IGZpbGVkIG9uIFdlYktpdCdzIEJ1Z3ppbGxhIHRyYWNrZXIsIGRhdGluZyBiYWNrIHRvIDIwMDksIHNwZWNpZmljYWxseSBhZGRyZXNzZXMgdGhlIGlzc3VlIG9mIGNsb25lTm9kZSgpIG5vdCBjb3B5aW5nIGZpbGVzIG9mIDxpbnB1dCB0eXBlPVwiZmlsZVwiPiBlbGVtZW50cy5cbiAgLy8gQXMgb2YgdGhlIGxhc3QgdXBkYXRlLCB0aGlzIGJ1ZyB3YXMgc3RpbGwgbWFya2VkIGFzIFwiTkVXLFwiIGluZGljYXRpbmcgdGhhdCBpdCBtaWdodCBub3QgaGF2ZSBiZWVuIHJlc29sdmVkIHlldOKAi+KAiy5cbiAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4MTIzXG4gIHZhciBjdXJyZW50VGFyZ2V0ID0gdGFyZ2V0LmNsb25lTm9kZSh0cnVlKTtcblxuICAvLyBjbGljayBjbGVhciBpY29uXG4gIHZhciBuZXdFdmVudCA9IE9iamVjdC5jcmVhdGUoZXZlbnQsIHtcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHZhbHVlOiBjdXJyZW50VGFyZ2V0XG4gICAgfSxcbiAgICBjdXJyZW50VGFyZ2V0OiB7XG4gICAgICB2YWx1ZTogY3VycmVudFRhcmdldFxuICAgIH1cbiAgfSk7XG5cbiAgLy8gRmlsbCBkYXRhXG4gIGN1cnJlbnRUYXJnZXQudmFsdWUgPSB2YWx1ZTtcblxuICAvLyBGaWxsIHNlbGVjdGlvbi4gU29tZSB0eXBlIGxpa2UgYGVtYWlsYCBub3Qgc3VwcG9ydCBzZWxlY3Rpb25cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FudC1kZXNpZ24vYW50LWRlc2lnbi9pc3N1ZXMvNDc4MzNcbiAgaWYgKHR5cGVvZiB0YXJnZXQuc2VsZWN0aW9uU3RhcnQgPT09ICdudW1iZXInICYmIHR5cGVvZiB0YXJnZXQuc2VsZWN0aW9uRW5kID09PSAnbnVtYmVyJykge1xuICAgIGN1cnJlbnRUYXJnZXQuc2VsZWN0aW9uU3RhcnQgPSB0YXJnZXQuc2VsZWN0aW9uU3RhcnQ7XG4gICAgY3VycmVudFRhcmdldC5zZWxlY3Rpb25FbmQgPSB0YXJnZXQuc2VsZWN0aW9uRW5kO1xuICB9XG4gIGN1cnJlbnRUYXJnZXQuc2V0U2VsZWN0aW9uUmFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGFyZ2V0LnNldFNlbGVjdGlvblJhbmdlLmFwcGx5KHRhcmdldCwgYXJndW1lbnRzKTtcbiAgfTtcbiAgcmV0dXJuIG5ld0V2ZW50O1xufVxuZnVuY3Rpb24gcmVzb2x2ZU9uQ2hhbmdlKHRhcmdldCwgZSwgb25DaGFuZ2UsIHRhcmdldFZhbHVlKSB7XG4gIGlmICghb25DaGFuZ2UpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIGV2ZW50ID0gZTtcbiAgaWYgKGUudHlwZSA9PT0gJ2NsaWNrJykge1xuICAgIC8vIENsb25lIGEgbmV3IHRhcmdldCBmb3IgZXZlbnQuXG4gICAgLy8gQXZvaWQgdGhlIGZvbGxvd2luZyB1c2FnZSwgdGhlIHNldFF1ZXJ5IG1ldGhvZCBnZXRzIHRoZSBvcmlnaW5hbCB2YWx1ZS5cbiAgICAvL1xuICAgIC8vIGNvbnN0IFtxdWVyeSwgc2V0UXVlcnldID0gUmVhY3QudXNlU3RhdGUoJycpO1xuICAgIC8vIDxJbnB1dFxuICAgIC8vICAgYWxsb3dDbGVhclxuICAgIC8vICAgdmFsdWU9e3F1ZXJ5fVxuICAgIC8vICAgb25DaGFuZ2U9eyhlKT0+IHtcbiAgICAvLyAgICAgc2V0UXVlcnkoKHByZXZTdGF0dXMpID0+IGUudGFyZ2V0LnZhbHVlKTtcbiAgICAvLyAgIH19XG4gICAgLy8gLz5cblxuICAgIGV2ZW50ID0gY2xvbmVFdmVudChlLCB0YXJnZXQsICcnKTtcbiAgICBvbkNoYW5nZShldmVudCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gVHJpZ2dlciBieSBjb21wb3NpdGlvbiBldmVudCwgdGhpcyBtZWFucyB3ZSBuZWVkIGZvcmNlIGNoYW5nZSB0aGUgaW5wdXQgdmFsdWVcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FudC1kZXNpZ24vYW50LWRlc2lnbi9pc3N1ZXMvNDU3MzdcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FudC1kZXNpZ24vYW50LWRlc2lnbi9pc3N1ZXMvNDY1OThcbiAgaWYgKHRhcmdldC50eXBlICE9PSAnZmlsZScgJiYgdGFyZ2V0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgIGV2ZW50ID0gY2xvbmVFdmVudChlLCB0YXJnZXQsIHRhcmdldFZhbHVlKTtcbiAgICBvbkNoYW5nZShldmVudCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIG9uQ2hhbmdlKGV2ZW50KTtcbn1cbmZ1bmN0aW9uIHRyaWdnZXJGb2N1cyhlbGVtZW50LCBvcHRpb24pIHtcbiAgaWYgKCFlbGVtZW50KSByZXR1cm47XG4gIGVsZW1lbnQuZm9jdXMob3B0aW9uKTtcblxuICAvLyBTZWxlY3Rpb24gY29udGVudFxuICB2YXIgX3JlZiA9IG9wdGlvbiB8fCB7fSxcbiAgICBjdXJzb3IgPSBfcmVmLmN1cnNvcjtcbiAgaWYgKGN1cnNvcikge1xuICAgIHZhciBsZW4gPSBlbGVtZW50LnZhbHVlLmxlbmd0aDtcbiAgICBzd2l0Y2ggKGN1cnNvcikge1xuICAgICAgY2FzZSAnc3RhcnQnOlxuICAgICAgICBlbGVtZW50LnNldFNlbGVjdGlvblJhbmdlKDAsIDApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgIGVsZW1lbnQuc2V0U2VsZWN0aW9uUmFuZ2UobGVuLCBsZW4pO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGVsZW1lbnQuc2V0U2VsZWN0aW9uUmFuZ2UoMCwgbGVuKTtcbiAgICB9XG4gIH1cbn0iLCJpbXBvcnQgTWVudSwgeyBNZW51SXRlbSB9IGZyb20gJ3JjLW1lbnUnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IE1lbnRpb25zQ29udGV4dCBmcm9tIFwiLi9NZW50aW9uc0NvbnRleHRcIjtcbi8qKlxuICogV2Ugb25seSB1c2UgTWVudSB0byBkaXNwbGF5IHRoZSBjYW5kaWRhdGUuXG4gKiBUaGUgZm9jdXMgaXMgY29udHJvbGxlZCBieSB0ZXh0YXJlYSB0byBtYWtlIGFjY2Vzc2liaWxpdHkgZWFzeS5cbiAqL1xuZnVuY3Rpb24gRHJvcGRvd25NZW51KHByb3BzKSB7XG4gIHZhciBfUmVhY3QkdXNlQ29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoTWVudGlvbnNDb250ZXh0KSxcbiAgICBub3RGb3VuZENvbnRlbnQgPSBfUmVhY3QkdXNlQ29udGV4dC5ub3RGb3VuZENvbnRlbnQsXG4gICAgYWN0aXZlSW5kZXggPSBfUmVhY3QkdXNlQ29udGV4dC5hY3RpdmVJbmRleCxcbiAgICBzZXRBY3RpdmVJbmRleCA9IF9SZWFjdCR1c2VDb250ZXh0LnNldEFjdGl2ZUluZGV4LFxuICAgIHNlbGVjdE9wdGlvbiA9IF9SZWFjdCR1c2VDb250ZXh0LnNlbGVjdE9wdGlvbixcbiAgICBvbkZvY3VzID0gX1JlYWN0JHVzZUNvbnRleHQub25Gb2N1cyxcbiAgICBvbkJsdXIgPSBfUmVhY3QkdXNlQ29udGV4dC5vbkJsdXIsXG4gICAgb25TY3JvbGwgPSBfUmVhY3QkdXNlQ29udGV4dC5vblNjcm9sbDtcbiAgdmFyIHByZWZpeENscyA9IHByb3BzLnByZWZpeENscyxcbiAgICBvcHRpb25zID0gcHJvcHMub3B0aW9ucztcbiAgdmFyIGFjdGl2ZU9wdGlvbiA9IG9wdGlvbnNbYWN0aXZlSW5kZXhdIHx8IHt9O1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTWVudSwge1xuICAgIHByZWZpeENsczogXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1tZW51XCIpLFxuICAgIGFjdGl2ZUtleTogYWN0aXZlT3B0aW9uLmtleSxcbiAgICBvblNlbGVjdDogZnVuY3Rpb24gb25TZWxlY3QoX3JlZikge1xuICAgICAgdmFyIGtleSA9IF9yZWYua2V5O1xuICAgICAgdmFyIG9wdGlvbiA9IG9wdGlvbnMuZmluZChmdW5jdGlvbiAoX3JlZjIpIHtcbiAgICAgICAgdmFyIG9wdGlvbktleSA9IF9yZWYyLmtleTtcbiAgICAgICAgcmV0dXJuIG9wdGlvbktleSA9PT0ga2V5O1xuICAgICAgfSk7XG4gICAgICBzZWxlY3RPcHRpb24ob3B0aW9uKTtcbiAgICB9LFxuICAgIG9uRm9jdXM6IG9uRm9jdXMsXG4gICAgb25CbHVyOiBvbkJsdXIsXG4gICAgb25TY3JvbGw6IG9uU2Nyb2xsXG4gIH0sIG9wdGlvbnMubWFwKGZ1bmN0aW9uIChvcHRpb24sIGluZGV4KSB7XG4gICAgdmFyIGtleSA9IG9wdGlvbi5rZXksXG4gICAgICBkaXNhYmxlZCA9IG9wdGlvbi5kaXNhYmxlZCxcbiAgICAgIGNsYXNzTmFtZSA9IG9wdGlvbi5jbGFzc05hbWUsXG4gICAgICBzdHlsZSA9IG9wdGlvbi5zdHlsZSxcbiAgICAgIGxhYmVsID0gb3B0aW9uLmxhYmVsO1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChNZW51SXRlbSwge1xuICAgICAga2V5OiBrZXksXG4gICAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZSxcbiAgICAgIHN0eWxlOiBzdHlsZSxcbiAgICAgIG9uTW91c2VFbnRlcjogZnVuY3Rpb24gb25Nb3VzZUVudGVyKCkge1xuICAgICAgICBzZXRBY3RpdmVJbmRleChpbmRleCk7XG4gICAgICB9XG4gICAgfSwgbGFiZWwpO1xuICB9KSwgIW9wdGlvbnMubGVuZ3RoICYmIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KE1lbnVJdGVtLCB7XG4gICAgZGlzYWJsZWQ6IHRydWVcbiAgfSwgbm90Rm91bmRDb250ZW50KSk7XG59XG5leHBvcnQgZGVmYXVsdCBEcm9wZG93bk1lbnU7IiwiaW1wb3J0IFRyaWdnZXIgZnJvbSAnQHJjLWNvbXBvbmVudC90cmlnZ2VyJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgRHJvcGRvd25NZW51IGZyb20gXCIuL0Ryb3Bkb3duTWVudVwiO1xudmFyIEJVSUxUX0lOX1BMQUNFTUVOVFMgPSB7XG4gIGJvdHRvbVJpZ2h0OiB7XG4gICAgcG9pbnRzOiBbJ3RsJywgJ2JyJ10sXG4gICAgb2Zmc2V0OiBbMCwgNF0sXG4gICAgb3ZlcmZsb3c6IHtcbiAgICAgIGFkanVzdFg6IDEsXG4gICAgICBhZGp1c3RZOiAxXG4gICAgfVxuICB9LFxuICBib3R0b21MZWZ0OiB7XG4gICAgcG9pbnRzOiBbJ3RyJywgJ2JsJ10sXG4gICAgb2Zmc2V0OiBbMCwgNF0sXG4gICAgb3ZlcmZsb3c6IHtcbiAgICAgIGFkanVzdFg6IDEsXG4gICAgICBhZGp1c3RZOiAxXG4gICAgfVxuICB9LFxuICB0b3BSaWdodDoge1xuICAgIHBvaW50czogWydibCcsICd0ciddLFxuICAgIG9mZnNldDogWzAsIC00XSxcbiAgICBvdmVyZmxvdzoge1xuICAgICAgYWRqdXN0WDogMSxcbiAgICAgIGFkanVzdFk6IDFcbiAgICB9XG4gIH0sXG4gIHRvcExlZnQ6IHtcbiAgICBwb2ludHM6IFsnYnInLCAndGwnXSxcbiAgICBvZmZzZXQ6IFswLCAtNF0sXG4gICAgb3ZlcmZsb3c6IHtcbiAgICAgIGFkanVzdFg6IDEsXG4gICAgICBhZGp1c3RZOiAxXG4gICAgfVxuICB9XG59O1xudmFyIEtleXdvcmRUcmlnZ2VyID0gZnVuY3Rpb24gS2V5d29yZFRyaWdnZXIocHJvcHMpIHtcbiAgdmFyIHByZWZpeENscyA9IHByb3BzLnByZWZpeENscyxcbiAgICBvcHRpb25zID0gcHJvcHMub3B0aW9ucyxcbiAgICBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLFxuICAgIHZpc2libGUgPSBwcm9wcy52aXNpYmxlLFxuICAgIHRyYW5zaXRpb25OYW1lID0gcHJvcHMudHJhbnNpdGlvbk5hbWUsXG4gICAgZ2V0UG9wdXBDb250YWluZXIgPSBwcm9wcy5nZXRQb3B1cENvbnRhaW5lcixcbiAgICBkcm9wZG93bkNsYXNzTmFtZSA9IHByb3BzLmRyb3Bkb3duQ2xhc3NOYW1lLFxuICAgIGRpcmVjdGlvbiA9IHByb3BzLmRpcmVjdGlvbixcbiAgICBwbGFjZW1lbnQgPSBwcm9wcy5wbGFjZW1lbnQ7XG4gIHZhciBkcm9wZG93blByZWZpeCA9IFwiXCIuY29uY2F0KHByZWZpeENscywgXCItZHJvcGRvd25cIik7XG4gIHZhciBkcm9wZG93bkVsZW1lbnQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChEcm9wZG93bk1lbnUsIHtcbiAgICBwcmVmaXhDbHM6IGRyb3Bkb3duUHJlZml4LFxuICAgIG9wdGlvbnM6IG9wdGlvbnNcbiAgfSk7XG4gIHZhciBkcm9wZG93blBsYWNlbWVudCA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHZhciBwb3B1cFBsYWNlbWVudDtcbiAgICBpZiAoZGlyZWN0aW9uID09PSAncnRsJykge1xuICAgICAgcG9wdXBQbGFjZW1lbnQgPSBwbGFjZW1lbnQgPT09ICd0b3AnID8gJ3RvcExlZnQnIDogJ2JvdHRvbUxlZnQnO1xuICAgIH0gZWxzZSB7XG4gICAgICBwb3B1cFBsYWNlbWVudCA9IHBsYWNlbWVudCA9PT0gJ3RvcCcgPyAndG9wUmlnaHQnIDogJ2JvdHRvbVJpZ2h0JztcbiAgICB9XG4gICAgcmV0dXJuIHBvcHVwUGxhY2VtZW50O1xuICB9LCBbZGlyZWN0aW9uLCBwbGFjZW1lbnRdKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFRyaWdnZXIsIHtcbiAgICBwcmVmaXhDbHM6IGRyb3Bkb3duUHJlZml4LFxuICAgIHBvcHVwVmlzaWJsZTogdmlzaWJsZSxcbiAgICBwb3B1cDogZHJvcGRvd25FbGVtZW50LFxuICAgIHBvcHVwUGxhY2VtZW50OiBkcm9wZG93blBsYWNlbWVudCxcbiAgICBwb3B1cFRyYW5zaXRpb25OYW1lOiB0cmFuc2l0aW9uTmFtZSxcbiAgICBidWlsdGluUGxhY2VtZW50czogQlVJTFRfSU5fUExBQ0VNRU5UUyxcbiAgICBnZXRQb3B1cENvbnRhaW5lcjogZ2V0UG9wdXBDb250YWluZXIsXG4gICAgcG9wdXBDbGFzc05hbWU6IGRyb3Bkb3duQ2xhc3NOYW1lXG4gIH0sIGNoaWxkcmVuKTtcbn07XG5leHBvcnQgZGVmYXVsdCBLZXl3b3JkVHJpZ2dlcjsiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0U3ByZWFkIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyXCI7XG5pbXBvcnQgX3NsaWNlZFRvQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXlcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzXCI7XG52YXIgX2V4Y2x1ZGVkID0gW1wicHJlZml4Q2xzXCIsIFwiY2xhc3NOYW1lXCIsIFwic3R5bGVcIiwgXCJwcmVmaXhcIiwgXCJzcGxpdFwiLCBcIm5vdEZvdW5kQ29udGVudFwiLCBcInZhbHVlXCIsIFwiZGVmYXVsdFZhbHVlXCIsIFwiY2hpbGRyZW5cIiwgXCJvcHRpb25zXCIsIFwib3BlblwiLCBcImFsbG93Q2xlYXJcIiwgXCJzaWxlbnRcIiwgXCJ2YWxpZGF0ZVNlYXJjaFwiLCBcImZpbHRlck9wdGlvblwiLCBcIm9uQ2hhbmdlXCIsIFwib25LZXlEb3duXCIsIFwib25LZXlVcFwiLCBcIm9uUHJlc3NFbnRlclwiLCBcIm9uU2VhcmNoXCIsIFwib25TZWxlY3RcIiwgXCJvbkZvY3VzXCIsIFwib25CbHVyXCIsIFwidHJhbnNpdGlvbk5hbWVcIiwgXCJwbGFjZW1lbnRcIiwgXCJkaXJlY3Rpb25cIiwgXCJnZXRQb3B1cENvbnRhaW5lclwiLCBcImRyb3Bkb3duQ2xhc3NOYW1lXCIsIFwicm93c1wiLCBcInZpc2libGVcIiwgXCJvblBvcHVwU2Nyb2xsXCJdLFxuICBfZXhjbHVkZWQyID0gW1wic3VmZml4XCIsIFwicHJlZml4Q2xzXCIsIFwiZGVmYXVsdFZhbHVlXCIsIFwidmFsdWVcIiwgXCJhbGxvd0NsZWFyXCIsIFwib25DaGFuZ2VcIiwgXCJjbGFzc05hbWVzXCIsIFwiY2xhc3NOYW1lXCIsIFwiZGlzYWJsZWRcIiwgXCJvbkNsZWFyXCJdO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBCYXNlSW5wdXQgfSBmcm9tICdyYy1pbnB1dCc7XG5pbXBvcnQgVGV4dEFyZWEgZnJvbSAncmMtdGV4dGFyZWEnO1xuaW1wb3J0IHRvQXJyYXkgZnJvbSBcInJjLXV0aWwvZXMvQ2hpbGRyZW4vdG9BcnJheVwiO1xuaW1wb3J0IHVzZU1lcmdlZFN0YXRlIGZyb20gXCJyYy11dGlsL2VzL2hvb2tzL3VzZU1lcmdlZFN0YXRlXCI7XG5pbXBvcnQgS2V5Q29kZSBmcm9tIFwicmMtdXRpbC9lcy9LZXlDb2RlXCI7XG5pbXBvcnQgd2FybmluZyBmcm9tIFwicmMtdXRpbC9lcy93YXJuaW5nXCI7XG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiwgdXNlRWZmZWN0LCB1c2VJbXBlcmF0aXZlSGFuZGxlLCB1c2VNZW1vLCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHVzZUVmZmVjdFN0YXRlIGZyb20gXCIuL2hvb2tzL3VzZUVmZmVjdFN0YXRlXCI7XG5pbXBvcnQgS2V5d29yZFRyaWdnZXIgZnJvbSBcIi4vS2V5d29yZFRyaWdnZXJcIjtcbmltcG9ydCBNZW50aW9uc0NvbnRleHQgZnJvbSBcIi4vTWVudGlvbnNDb250ZXh0XCI7XG5pbXBvcnQgT3B0aW9uIGZyb20gXCIuL09wdGlvblwiO1xuaW1wb3J0IHsgZmlsdGVyT3B0aW9uIGFzIGRlZmF1bHRGaWx0ZXJPcHRpb24sIHZhbGlkYXRlU2VhcmNoIGFzIGRlZmF1bHRWYWxpZGF0ZVNlYXJjaCwgZ2V0QmVmb3JlU2VsZWN0aW9uVGV4dCwgZ2V0TGFzdE1lYXN1cmVJbmRleCwgcmVwbGFjZVdpdGhNZWFzdXJlLCBzZXRJbnB1dFNlbGVjdGlvbiB9IGZyb20gXCIuL3V0aWxcIjtcbnZhciBJbnRlcm5hbE1lbnRpb25zID0gLyojX19QVVJFX18qL2ZvcndhcmRSZWYoZnVuY3Rpb24gKHByb3BzLCByZWYpIHtcbiAgdmFyIHByZWZpeENscyA9IHByb3BzLnByZWZpeENscyxcbiAgICBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUsXG4gICAgc3R5bGUgPSBwcm9wcy5zdHlsZSxcbiAgICBfcHJvcHMkcHJlZml4ID0gcHJvcHMucHJlZml4LFxuICAgIHByZWZpeCA9IF9wcm9wcyRwcmVmaXggPT09IHZvaWQgMCA/ICdAJyA6IF9wcm9wcyRwcmVmaXgsXG4gICAgX3Byb3BzJHNwbGl0ID0gcHJvcHMuc3BsaXQsXG4gICAgc3BsaXQgPSBfcHJvcHMkc3BsaXQgPT09IHZvaWQgMCA/ICcgJyA6IF9wcm9wcyRzcGxpdCxcbiAgICBfcHJvcHMkbm90Rm91bmRDb250ZW4gPSBwcm9wcy5ub3RGb3VuZENvbnRlbnQsXG4gICAgbm90Rm91bmRDb250ZW50ID0gX3Byb3BzJG5vdEZvdW5kQ29udGVuID09PSB2b2lkIDAgPyAnTm90IEZvdW5kJyA6IF9wcm9wcyRub3RGb3VuZENvbnRlbixcbiAgICB2YWx1ZSA9IHByb3BzLnZhbHVlLFxuICAgIGRlZmF1bHRWYWx1ZSA9IHByb3BzLmRlZmF1bHRWYWx1ZSxcbiAgICBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLFxuICAgIG9wdGlvbnMgPSBwcm9wcy5vcHRpb25zLFxuICAgIG9wZW4gPSBwcm9wcy5vcGVuLFxuICAgIGFsbG93Q2xlYXIgPSBwcm9wcy5hbGxvd0NsZWFyLFxuICAgIHNpbGVudCA9IHByb3BzLnNpbGVudCxcbiAgICBfcHJvcHMkdmFsaWRhdGVTZWFyY2ggPSBwcm9wcy52YWxpZGF0ZVNlYXJjaCxcbiAgICB2YWxpZGF0ZVNlYXJjaCA9IF9wcm9wcyR2YWxpZGF0ZVNlYXJjaCA9PT0gdm9pZCAwID8gZGVmYXVsdFZhbGlkYXRlU2VhcmNoIDogX3Byb3BzJHZhbGlkYXRlU2VhcmNoLFxuICAgIF9wcm9wcyRmaWx0ZXJPcHRpb24gPSBwcm9wcy5maWx0ZXJPcHRpb24sXG4gICAgZmlsdGVyT3B0aW9uID0gX3Byb3BzJGZpbHRlck9wdGlvbiA9PT0gdm9pZCAwID8gZGVmYXVsdEZpbHRlck9wdGlvbiA6IF9wcm9wcyRmaWx0ZXJPcHRpb24sXG4gICAgb25DaGFuZ2UgPSBwcm9wcy5vbkNoYW5nZSxcbiAgICBvbktleURvd24gPSBwcm9wcy5vbktleURvd24sXG4gICAgb25LZXlVcCA9IHByb3BzLm9uS2V5VXAsXG4gICAgb25QcmVzc0VudGVyID0gcHJvcHMub25QcmVzc0VudGVyLFxuICAgIG9uU2VhcmNoID0gcHJvcHMub25TZWFyY2gsXG4gICAgb25TZWxlY3QgPSBwcm9wcy5vblNlbGVjdCxcbiAgICBvbkZvY3VzID0gcHJvcHMub25Gb2N1cyxcbiAgICBvbkJsdXIgPSBwcm9wcy5vbkJsdXIsXG4gICAgdHJhbnNpdGlvbk5hbWUgPSBwcm9wcy50cmFuc2l0aW9uTmFtZSxcbiAgICBwbGFjZW1lbnQgPSBwcm9wcy5wbGFjZW1lbnQsXG4gICAgZGlyZWN0aW9uID0gcHJvcHMuZGlyZWN0aW9uLFxuICAgIGdldFBvcHVwQ29udGFpbmVyID0gcHJvcHMuZ2V0UG9wdXBDb250YWluZXIsXG4gICAgZHJvcGRvd25DbGFzc05hbWUgPSBwcm9wcy5kcm9wZG93bkNsYXNzTmFtZSxcbiAgICBfcHJvcHMkcm93cyA9IHByb3BzLnJvd3MsXG4gICAgcm93cyA9IF9wcm9wcyRyb3dzID09PSB2b2lkIDAgPyAxIDogX3Byb3BzJHJvd3MsXG4gICAgdmlzaWJsZSA9IHByb3BzLnZpc2libGUsXG4gICAgb25Qb3B1cFNjcm9sbCA9IHByb3BzLm9uUG9wdXBTY3JvbGwsXG4gICAgcmVzdFByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHByb3BzLCBfZXhjbHVkZWQpO1xuICB2YXIgbWVyZ2VkUHJlZml4ID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkocHJlZml4KSA/IHByZWZpeCA6IFtwcmVmaXhdO1xuICB9LCBbcHJlZml4XSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBSZWZzID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIGNvbnRhaW5lclJlZiA9IHVzZVJlZihudWxsKTtcbiAgdmFyIHRleHRhcmVhUmVmID0gdXNlUmVmKG51bGwpO1xuICB2YXIgbWVhc3VyZVJlZiA9IHVzZVJlZihudWxsKTtcbiAgdmFyIGdldFRleHRBcmVhID0gZnVuY3Rpb24gZ2V0VGV4dEFyZWEoKSB7XG4gICAgdmFyIF90ZXh0YXJlYVJlZiRjdXJyZW50O1xuICAgIHJldHVybiAoX3RleHRhcmVhUmVmJGN1cnJlbnQgPSB0ZXh0YXJlYVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfdGV4dGFyZWFSZWYkY3VycmVudCA9PT0gdm9pZCAwIHx8IChfdGV4dGFyZWFSZWYkY3VycmVudCA9IF90ZXh0YXJlYVJlZiRjdXJyZW50LnJlc2l6YWJsZVRleHRBcmVhKSA9PT0gbnVsbCB8fCBfdGV4dGFyZWFSZWYkY3VycmVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RleHRhcmVhUmVmJGN1cnJlbnQudGV4dEFyZWE7XG4gIH07XG4gIFJlYWN0LnVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIF90ZXh0YXJlYVJlZiRjdXJyZW50NDtcbiAgICByZXR1cm4ge1xuICAgICAgZm9jdXM6IGZ1bmN0aW9uIGZvY3VzKCkge1xuICAgICAgICB2YXIgX3RleHRhcmVhUmVmJGN1cnJlbnQyO1xuICAgICAgICByZXR1cm4gKF90ZXh0YXJlYVJlZiRjdXJyZW50MiA9IHRleHRhcmVhUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF90ZXh0YXJlYVJlZiRjdXJyZW50MiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RleHRhcmVhUmVmJGN1cnJlbnQyLmZvY3VzKCk7XG4gICAgICB9LFxuICAgICAgYmx1cjogZnVuY3Rpb24gYmx1cigpIHtcbiAgICAgICAgdmFyIF90ZXh0YXJlYVJlZiRjdXJyZW50MztcbiAgICAgICAgcmV0dXJuIChfdGV4dGFyZWFSZWYkY3VycmVudDMgPSB0ZXh0YXJlYVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfdGV4dGFyZWFSZWYkY3VycmVudDMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90ZXh0YXJlYVJlZiRjdXJyZW50My5ibHVyKCk7XG4gICAgICB9LFxuICAgICAgdGV4dGFyZWE6IChfdGV4dGFyZWFSZWYkY3VycmVudDQgPSB0ZXh0YXJlYVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfdGV4dGFyZWFSZWYkY3VycmVudDQgPT09IHZvaWQgMCB8fCAoX3RleHRhcmVhUmVmJGN1cnJlbnQ0ID0gX3RleHRhcmVhUmVmJGN1cnJlbnQ0LnJlc2l6YWJsZVRleHRBcmVhKSA9PT0gbnVsbCB8fCBfdGV4dGFyZWFSZWYkY3VycmVudDQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90ZXh0YXJlYVJlZiRjdXJyZW50NC50ZXh0QXJlYSxcbiAgICAgIG5hdGl2ZUVsZW1lbnQ6IGNvbnRhaW5lclJlZi5jdXJyZW50XG4gICAgfTtcbiAgfSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IFN0YXRlID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIF91c2VTdGF0ZSA9IHVzZVN0YXRlKGZhbHNlKSxcbiAgICBfdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlLCAyKSxcbiAgICBtZWFzdXJpbmcgPSBfdXNlU3RhdGUyWzBdLFxuICAgIHNldE1lYXN1cmluZyA9IF91c2VTdGF0ZTJbMV07XG4gIHZhciBfdXNlU3RhdGUzID0gdXNlU3RhdGUoJycpLFxuICAgIF91c2VTdGF0ZTQgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUzLCAyKSxcbiAgICBtZWFzdXJlVGV4dCA9IF91c2VTdGF0ZTRbMF0sXG4gICAgc2V0TWVhc3VyZVRleHQgPSBfdXNlU3RhdGU0WzFdO1xuICB2YXIgX3VzZVN0YXRlNSA9IHVzZVN0YXRlKCcnKSxcbiAgICBfdXNlU3RhdGU2ID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlNSwgMiksXG4gICAgbWVhc3VyZVByZWZpeCA9IF91c2VTdGF0ZTZbMF0sXG4gICAgc2V0TWVhc3VyZVByZWZpeCA9IF91c2VTdGF0ZTZbMV07XG4gIHZhciBfdXNlU3RhdGU3ID0gdXNlU3RhdGUoMCksXG4gICAgX3VzZVN0YXRlOCA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZTcsIDIpLFxuICAgIG1lYXN1cmVMb2NhdGlvbiA9IF91c2VTdGF0ZThbMF0sXG4gICAgc2V0TWVhc3VyZUxvY2F0aW9uID0gX3VzZVN0YXRlOFsxXTtcbiAgdmFyIF91c2VTdGF0ZTkgPSB1c2VTdGF0ZSgwKSxcbiAgICBfdXNlU3RhdGUxMCA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZTksIDIpLFxuICAgIGFjdGl2ZUluZGV4ID0gX3VzZVN0YXRlMTBbMF0sXG4gICAgc2V0QWN0aXZlSW5kZXggPSBfdXNlU3RhdGUxMFsxXTtcbiAgdmFyIF91c2VTdGF0ZTExID0gdXNlU3RhdGUoZmFsc2UpLFxuICAgIF91c2VTdGF0ZTEyID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlMTEsIDIpLFxuICAgIGlzRm9jdXMgPSBfdXNlU3RhdGUxMlswXSxcbiAgICBzZXRJc0ZvY3VzID0gX3VzZVN0YXRlMTJbMV07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IFZhbHVlID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIF91c2VNZXJnZWRTdGF0ZSA9IHVzZU1lcmdlZFN0YXRlKCcnLCB7XG4gICAgICBkZWZhdWx0VmFsdWU6IGRlZmF1bHRWYWx1ZSxcbiAgICAgIHZhbHVlOiB2YWx1ZVxuICAgIH0pLFxuICAgIF91c2VNZXJnZWRTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlTWVyZ2VkU3RhdGUsIDIpLFxuICAgIG1lcmdlZFZhbHVlID0gX3VzZU1lcmdlZFN0YXRlMlswXSxcbiAgICBzZXRNZXJnZWRWYWx1ZSA9IF91c2VNZXJnZWRTdGF0ZTJbMV07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBPcGVuID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAvLyBTeW5jIG1lYXN1cmUgZGl2IHRvcCB3aXRoIHRleHRhcmVhIGZvciByYy10cmlnZ2VyIHVzYWdlXG4gICAgaWYgKG1lYXN1cmluZyAmJiBtZWFzdXJlUmVmLmN1cnJlbnQpIHtcbiAgICAgIG1lYXN1cmVSZWYuY3VycmVudC5zY3JvbGxUb3AgPSBnZXRUZXh0QXJlYSgpLnNjcm9sbFRvcDtcbiAgICB9XG4gIH0sIFttZWFzdXJpbmddKTtcbiAgdmFyIF9SZWFjdCR1c2VNZW1vID0gUmVhY3QudXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAob3Blbikge1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIHdhcm5pbmcoZmFsc2UsICdgb3BlbmAgb2YgTWVudGlvbnMgaXMgb25seSB1c2VkIGZvciBkZWJ1ZyB1c2FnZS4gRG8gbm90IHVzZSBpbiB5b3UgcHJvZHVjdGlvbi4nKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lcmdlZFByZWZpeC5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgIHZhciBjdXJQcmVmaXggPSBtZXJnZWRQcmVmaXhbaV07XG4gICAgICAgICAgdmFyIGluZGV4ID0gbWVyZ2VkVmFsdWUubGFzdEluZGV4T2YoY3VyUHJlZml4KTtcbiAgICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIFt0cnVlLCAnJywgY3VyUHJlZml4LCBpbmRleF07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gW21lYXN1cmluZywgbWVhc3VyZVRleHQsIG1lYXN1cmVQcmVmaXgsIG1lYXN1cmVMb2NhdGlvbl07XG4gICAgfSwgW29wZW4sIG1lYXN1cmluZywgbWVyZ2VkUHJlZml4LCBtZXJnZWRWYWx1ZSwgbWVhc3VyZVRleHQsIG1lYXN1cmVQcmVmaXgsIG1lYXN1cmVMb2NhdGlvbl0pLFxuICAgIF9SZWFjdCR1c2VNZW1vMiA9IF9zbGljZWRUb0FycmF5KF9SZWFjdCR1c2VNZW1vLCA0KSxcbiAgICBtZXJnZWRNZWFzdXJpbmcgPSBfUmVhY3QkdXNlTWVtbzJbMF0sXG4gICAgbWVyZ2VkTWVhc3VyZVRleHQgPSBfUmVhY3QkdXNlTWVtbzJbMV0sXG4gICAgbWVyZ2VkTWVhc3VyZVByZWZpeCA9IF9SZWFjdCR1c2VNZW1vMlsyXSxcbiAgICBtZXJnZWRNZWFzdXJlTG9jYXRpb24gPSBfUmVhY3QkdXNlTWVtbzJbM107XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IE9wdGlvbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIGdldE9wdGlvbnMgPSBSZWFjdC51c2VDYWxsYmFjayhmdW5jdGlvbiAodGFyZ2V0TWVhc3VyZVRleHQpIHtcbiAgICB2YXIgbGlzdDtcbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIGxpc3QgPSBvcHRpb25zLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICB2YXIgX2l0ZW0ka2V5O1xuICAgICAgICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBpdGVtKSwge30sIHtcbiAgICAgICAgICBrZXk6IChfaXRlbSRrZXkgPSBpdGVtID09PSBudWxsIHx8IGl0ZW0gPT09IHZvaWQgMCA/IHZvaWQgMCA6IGl0ZW0ua2V5KSAhPT0gbnVsbCAmJiBfaXRlbSRrZXkgIT09IHZvaWQgMCA/IF9pdGVtJGtleSA6IGl0ZW0udmFsdWVcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGlzdCA9IHRvQXJyYXkoY2hpbGRyZW4pLm1hcChmdW5jdGlvbiAoX3JlZikge1xuICAgICAgICB2YXIgb3B0aW9uUHJvcHMgPSBfcmVmLnByb3BzLFxuICAgICAgICAgIGtleSA9IF9yZWYua2V5O1xuICAgICAgICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBvcHRpb25Qcm9wcyksIHt9LCB7XG4gICAgICAgICAgbGFiZWw6IG9wdGlvblByb3BzLmNoaWxkcmVuLFxuICAgICAgICAgIGtleToga2V5IHx8IG9wdGlvblByb3BzLnZhbHVlXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsaXN0LmZpbHRlcihmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICAvKiogUmV0dXJuIGFsbCByZXN1bHQgaWYgYGZpbHRlck9wdGlvbmAgaXMgZmFsc2UuICovXG4gICAgICBpZiAoZmlsdGVyT3B0aW9uID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmaWx0ZXJPcHRpb24odGFyZ2V0TWVhc3VyZVRleHQsIG9wdGlvbik7XG4gICAgfSk7XG4gIH0sIFtjaGlsZHJlbiwgb3B0aW9ucywgZmlsdGVyT3B0aW9uXSk7XG4gIHZhciBtZXJnZWRPcHRpb25zID0gUmVhY3QudXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGdldE9wdGlvbnMobWVyZ2VkTWVhc3VyZVRleHQpO1xuICB9LCBbZ2V0T3B0aW9ucywgbWVyZ2VkTWVhc3VyZVRleHRdKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBNZWFzdXJlID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBNYXJrIHRoYXQgd2Ugd2lsbCByZXNldCBpbnB1dCBzZWxlY3Rpb24gdG8gdGFyZ2V0IHBvc2l0aW9uIHdoZW4gdXNlciBzZWxlY3Qgb3B0aW9uXG4gIHZhciBvblNlbGVjdGlvbkVmZmVjdCA9IHVzZUVmZmVjdFN0YXRlKCk7XG4gIHZhciBzdGFydE1lYXN1cmUgPSBmdW5jdGlvbiBzdGFydE1lYXN1cmUobmV4dE1lYXN1cmVUZXh0LCBuZXh0TWVhc3VyZVByZWZpeCwgbmV4dE1lYXN1cmVMb2NhdGlvbikge1xuICAgIHNldE1lYXN1cmluZyh0cnVlKTtcbiAgICBzZXRNZWFzdXJlVGV4dChuZXh0TWVhc3VyZVRleHQpO1xuICAgIHNldE1lYXN1cmVQcmVmaXgobmV4dE1lYXN1cmVQcmVmaXgpO1xuICAgIHNldE1lYXN1cmVMb2NhdGlvbihuZXh0TWVhc3VyZUxvY2F0aW9uKTtcbiAgICBzZXRBY3RpdmVJbmRleCgwKTtcbiAgfTtcbiAgdmFyIHN0b3BNZWFzdXJlID0gZnVuY3Rpb24gc3RvcE1lYXN1cmUoY2FsbGJhY2spIHtcbiAgICBzZXRNZWFzdXJpbmcoZmFsc2UpO1xuICAgIHNldE1lYXN1cmVMb2NhdGlvbigwKTtcbiAgICBzZXRNZWFzdXJlVGV4dCgnJyk7XG4gICAgb25TZWxlY3Rpb25FZmZlY3QoY2FsbGJhY2spO1xuICB9O1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBDaGFuZ2UgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciB0cmlnZ2VyQ2hhbmdlID0gZnVuY3Rpb24gdHJpZ2dlckNoYW5nZShuZXh0VmFsdWUpIHtcbiAgICBzZXRNZXJnZWRWYWx1ZShuZXh0VmFsdWUpO1xuICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgfHwgb25DaGFuZ2UobmV4dFZhbHVlKTtcbiAgfTtcbiAgdmFyIG9uSW50ZXJuYWxDaGFuZ2UgPSBmdW5jdGlvbiBvbkludGVybmFsQ2hhbmdlKF9yZWYyKSB7XG4gICAgdmFyIG5leHRWYWx1ZSA9IF9yZWYyLnRhcmdldC52YWx1ZTtcbiAgICB0cmlnZ2VyQ2hhbmdlKG5leHRWYWx1ZSk7XG4gIH07XG4gIHZhciBzZWxlY3RPcHRpb24gPSBmdW5jdGlvbiBzZWxlY3RPcHRpb24ob3B0aW9uKSB7XG4gICAgdmFyIF9nZXRUZXh0QXJlYTtcbiAgICB2YXIgX29wdGlvbiR2YWx1ZSA9IG9wdGlvbi52YWx1ZSxcbiAgICAgIG1lbnRpb25WYWx1ZSA9IF9vcHRpb24kdmFsdWUgPT09IHZvaWQgMCA/ICcnIDogX29wdGlvbiR2YWx1ZTtcbiAgICB2YXIgX3JlcGxhY2VXaXRoTWVhc3VyZSA9IHJlcGxhY2VXaXRoTWVhc3VyZShtZXJnZWRWYWx1ZSwge1xuICAgICAgICBtZWFzdXJlTG9jYXRpb246IG1lcmdlZE1lYXN1cmVMb2NhdGlvbixcbiAgICAgICAgdGFyZ2V0VGV4dDogbWVudGlvblZhbHVlLFxuICAgICAgICBwcmVmaXg6IG1lcmdlZE1lYXN1cmVQcmVmaXgsXG4gICAgICAgIHNlbGVjdGlvblN0YXJ0OiAoX2dldFRleHRBcmVhID0gZ2V0VGV4dEFyZWEoKSkgPT09IG51bGwgfHwgX2dldFRleHRBcmVhID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZ2V0VGV4dEFyZWEuc2VsZWN0aW9uU3RhcnQsXG4gICAgICAgIHNwbGl0OiBzcGxpdFxuICAgICAgfSksXG4gICAgICB0ZXh0ID0gX3JlcGxhY2VXaXRoTWVhc3VyZS50ZXh0LFxuICAgICAgc2VsZWN0aW9uTG9jYXRpb24gPSBfcmVwbGFjZVdpdGhNZWFzdXJlLnNlbGVjdGlvbkxvY2F0aW9uO1xuICAgIHRyaWdnZXJDaGFuZ2UodGV4dCk7XG4gICAgc3RvcE1lYXN1cmUoZnVuY3Rpb24gKCkge1xuICAgICAgLy8gV2UgbmVlZCByZXN0b3JlIHRoZSBzZWxlY3Rpb24gcG9zaXRpb25cbiAgICAgIHNldElucHV0U2VsZWN0aW9uKGdldFRleHRBcmVhKCksIHNlbGVjdGlvbkxvY2F0aW9uKTtcbiAgICB9KTtcbiAgICBvblNlbGVjdCA9PT0gbnVsbCB8fCBvblNlbGVjdCA9PT0gdm9pZCAwIHx8IG9uU2VsZWN0KG9wdGlvbiwgbWVyZ2VkTWVhc3VyZVByZWZpeCk7XG4gIH07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gS2V5RXZlbnQgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gQ2hlY2sgaWYgaGl0IHRoZSBtZWFzdXJlIGtleXdvcmRcbiAgdmFyIG9uSW50ZXJuYWxLZXlEb3duID0gZnVuY3Rpb24gb25JbnRlcm5hbEtleURvd24oZXZlbnQpIHtcbiAgICB2YXIgd2hpY2ggPSBldmVudC53aGljaDtcbiAgICBvbktleURvd24gPT09IG51bGwgfHwgb25LZXlEb3duID09PSB2b2lkIDAgfHwgb25LZXlEb3duKGV2ZW50KTtcblxuICAgIC8vIFNraXAgaWYgbm90IG1lYXN1cmluZ1xuICAgIGlmICghbWVyZ2VkTWVhc3VyaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh3aGljaCA9PT0gS2V5Q29kZS5VUCB8fCB3aGljaCA9PT0gS2V5Q29kZS5ET1dOKSB7XG4gICAgICAvLyBDb250cm9sIGFycm93IGZ1bmN0aW9uXG4gICAgICB2YXIgb3B0aW9uTGVuID0gbWVyZ2VkT3B0aW9ucy5sZW5ndGg7XG4gICAgICB2YXIgb2Zmc2V0ID0gd2hpY2ggPT09IEtleUNvZGUuVVAgPyAtMSA6IDE7XG4gICAgICB2YXIgbmV3QWN0aXZlSW5kZXggPSAoYWN0aXZlSW5kZXggKyBvZmZzZXQgKyBvcHRpb25MZW4pICUgb3B0aW9uTGVuO1xuICAgICAgc2V0QWN0aXZlSW5kZXgobmV3QWN0aXZlSW5kZXgpO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9IGVsc2UgaWYgKHdoaWNoID09PSBLZXlDb2RlLkVTQykge1xuICAgICAgc3RvcE1lYXN1cmUoKTtcbiAgICB9IGVsc2UgaWYgKHdoaWNoID09PSBLZXlDb2RlLkVOVEVSKSB7XG4gICAgICAvLyBNZWFzdXJlIGhpdFxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIC8vIGxvYWRpbmcgc2tpcFxuICAgICAgaWYgKHNpbGVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoIW1lcmdlZE9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIHN0b3BNZWFzdXJlKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHZhciBfb3B0aW9uID0gbWVyZ2VkT3B0aW9uc1thY3RpdmVJbmRleF07XG4gICAgICBzZWxlY3RPcHRpb24oX29wdGlvbik7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBXaGVuIHRvIHN0YXJ0IG1lYXN1cmU6XG4gICAqIDEuIFdoZW4gdXNlciBwcmVzcyBgcHJlZml4YFxuICAgKiAyLiBXaGVuIG1lYXN1cmVUZXh0ICE9PSBwcmV2TWVhc3VyZVRleHRcbiAgICogIC0gSWYgbWVhc3VyZSBoaXRcbiAgICogIC0gSWYgbWVhc3VyaW5nXG4gICAqXG4gICAqIFdoZW4gdG8gc3RvcCBtZWFzdXJlOlxuICAgKiAxLiBTZWxlY3Rpb24gaXMgb3V0IG9mIHJhbmdlXG4gICAqIDIuIENvbnRhaW5zIGBzcGFjZWBcbiAgICogMy4gRVNDIG9yIHNlbGVjdCBvbmVcbiAgICovXG4gIHZhciBvbkludGVybmFsS2V5VXAgPSBmdW5jdGlvbiBvbkludGVybmFsS2V5VXAoZXZlbnQpIHtcbiAgICB2YXIga2V5ID0gZXZlbnQua2V5LFxuICAgICAgd2hpY2ggPSBldmVudC53aGljaDtcbiAgICB2YXIgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuICAgIHZhciBzZWxlY3Rpb25TdGFydFRleHQgPSBnZXRCZWZvcmVTZWxlY3Rpb25UZXh0KHRhcmdldCk7XG4gICAgdmFyIF9nZXRMYXN0TWVhc3VyZUluZGV4ID0gZ2V0TGFzdE1lYXN1cmVJbmRleChzZWxlY3Rpb25TdGFydFRleHQsIG1lcmdlZFByZWZpeCksXG4gICAgICBtZWFzdXJlSW5kZXggPSBfZ2V0TGFzdE1lYXN1cmVJbmRleC5sb2NhdGlvbixcbiAgICAgIG5leHRNZWFzdXJlUHJlZml4ID0gX2dldExhc3RNZWFzdXJlSW5kZXgucHJlZml4O1xuXG4gICAgLy8gSWYgdGhlIGNsaWVudCBpbXBsZW1lbnRzIGFuIG9uS2V5VXAgaGFuZGxlciwgY2FsbCBpdFxuICAgIG9uS2V5VXAgPT09IG51bGwgfHwgb25LZXlVcCA9PT0gdm9pZCAwIHx8IG9uS2V5VXAoZXZlbnQpO1xuXG4gICAgLy8gU2tpcCBpZiBtYXRjaCB0aGUgd2hpdGUga2V5IGxpc3RcbiAgICBpZiAoW0tleUNvZGUuRVNDLCBLZXlDb2RlLlVQLCBLZXlDb2RlLkRPV04sIEtleUNvZGUuRU5URVJdLmluZGV4T2Yod2hpY2gpICE9PSAtMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAobWVhc3VyZUluZGV4ICE9PSAtMSkge1xuICAgICAgdmFyIG5leHRNZWFzdXJlVGV4dCA9IHNlbGVjdGlvblN0YXJ0VGV4dC5zbGljZShtZWFzdXJlSW5kZXggKyBuZXh0TWVhc3VyZVByZWZpeC5sZW5ndGgpO1xuICAgICAgdmFyIHZhbGlkYXRlTWVhc3VyZSA9IHZhbGlkYXRlU2VhcmNoKG5leHRNZWFzdXJlVGV4dCwgc3BsaXQpO1xuICAgICAgdmFyIG1hdGNoT3B0aW9uID0gISFnZXRPcHRpb25zKG5leHRNZWFzdXJlVGV4dCkubGVuZ3RoO1xuICAgICAgaWYgKHZhbGlkYXRlTWVhc3VyZSkge1xuICAgICAgICAvLyBhZGRpbmcgQWx0R3JhcGggYWxzbyBmb3J0IGF6ZXJ0IGtleWJvYXJkXG4gICAgICAgIGlmIChrZXkgPT09IG5leHRNZWFzdXJlUHJlZml4IHx8IGtleSA9PT0gJ1NoaWZ0JyB8fCB3aGljaCA9PT0gS2V5Q29kZS5BTFQgfHwga2V5ID09PSAnQWx0R3JhcGgnIHx8IG1lcmdlZE1lYXN1cmluZyB8fCBuZXh0TWVhc3VyZVRleHQgIT09IG1lcmdlZE1lYXN1cmVUZXh0ICYmIG1hdGNoT3B0aW9uKSB7XG4gICAgICAgICAgc3RhcnRNZWFzdXJlKG5leHRNZWFzdXJlVGV4dCwgbmV4dE1lYXN1cmVQcmVmaXgsIG1lYXN1cmVJbmRleCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAobWVyZ2VkTWVhc3VyaW5nKSB7XG4gICAgICAgIC8vIFN0b3AgaWYgbWVhc3VyZVRleHQgaXMgaW52YWxpZGF0ZVxuICAgICAgICBzdG9wTWVhc3VyZSgpO1xuICAgICAgfVxuXG4gICAgICAvKipcbiAgICAgICAqIFdlIHdpbGwgdHJpZ2dlciBgb25TZWFyY2hgIHRvIGRldmVsb3BlciBzaW5jZSB0aGV5IG1heSB1c2UgZm9yIGFzeW5jIHVwZGF0ZS5cbiAgICAgICAqIElmIG1ldCBgc3BhY2VgIG1lYW5zIHVzZXIgZmluaXNoZWQgc2VhcmNoaW5nLlxuICAgICAgICovXG4gICAgICBpZiAob25TZWFyY2ggJiYgdmFsaWRhdGVNZWFzdXJlKSB7XG4gICAgICAgIG9uU2VhcmNoKG5leHRNZWFzdXJlVGV4dCwgbmV4dE1lYXN1cmVQcmVmaXgpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobWVyZ2VkTWVhc3VyaW5nKSB7XG4gICAgICBzdG9wTWVhc3VyZSgpO1xuICAgIH1cbiAgfTtcbiAgdmFyIG9uSW50ZXJuYWxQcmVzc0VudGVyID0gZnVuY3Rpb24gb25JbnRlcm5hbFByZXNzRW50ZXIoZXZlbnQpIHtcbiAgICBpZiAoIW1lcmdlZE1lYXN1cmluZyAmJiBvblByZXNzRW50ZXIpIHtcbiAgICAgIG9uUHJlc3NFbnRlcihldmVudCk7XG4gICAgfVxuICB9O1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT0gRm9jdXMgQmx1ciA9PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBmb2N1c1JlZiA9IHVzZVJlZigpO1xuICB2YXIgb25JbnRlcm5hbEZvY3VzID0gZnVuY3Rpb24gb25JbnRlcm5hbEZvY3VzKGV2ZW50KSB7XG4gICAgd2luZG93LmNsZWFyVGltZW91dChmb2N1c1JlZi5jdXJyZW50KTtcbiAgICBpZiAoIWlzRm9jdXMgJiYgZXZlbnQgJiYgb25Gb2N1cykge1xuICAgICAgb25Gb2N1cyhldmVudCk7XG4gICAgfVxuICAgIHNldElzRm9jdXModHJ1ZSk7XG4gIH07XG4gIHZhciBvbkludGVybmFsQmx1ciA9IGZ1bmN0aW9uIG9uSW50ZXJuYWxCbHVyKGV2ZW50KSB7XG4gICAgZm9jdXNSZWYuY3VycmVudCA9IHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIHNldElzRm9jdXMoZmFsc2UpO1xuICAgICAgc3RvcE1lYXN1cmUoKTtcbiAgICAgIG9uQmx1ciA9PT0gbnVsbCB8fCBvbkJsdXIgPT09IHZvaWQgMCB8fCBvbkJsdXIoZXZlbnQpO1xuICAgIH0sIDApO1xuICB9O1xuICB2YXIgb25Ecm9wZG93bkZvY3VzID0gZnVuY3Rpb24gb25Ecm9wZG93bkZvY3VzKCkge1xuICAgIG9uSW50ZXJuYWxGb2N1cygpO1xuICB9O1xuICB2YXIgb25Ecm9wZG93bkJsdXIgPSBmdW5jdGlvbiBvbkRyb3Bkb3duQmx1cigpIHtcbiAgICBvbkludGVybmFsQmx1cigpO1xuICB9O1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBTY3JvbGwgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgb25JbnRlcm5hbFBvcHVwU2Nyb2xsID0gZnVuY3Rpb24gb25JbnRlcm5hbFBvcHVwU2Nyb2xsKGV2ZW50KSB7XG4gICAgb25Qb3B1cFNjcm9sbCA9PT0gbnVsbCB8fCBvblBvcHVwU2Nyb2xsID09PSB2b2lkIDAgfHwgb25Qb3B1cFNjcm9sbChldmVudCk7XG4gIH07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IFJlbmRlciA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lcyhwcmVmaXhDbHMsIGNsYXNzTmFtZSksXG4gICAgc3R5bGU6IHN0eWxlLFxuICAgIHJlZjogY29udGFpbmVyUmVmXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFRleHRBcmVhLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiB0ZXh0YXJlYVJlZixcbiAgICB2YWx1ZTogbWVyZ2VkVmFsdWVcbiAgfSwgcmVzdFByb3BzLCB7XG4gICAgcm93czogcm93cyxcbiAgICBvbkNoYW5nZTogb25JbnRlcm5hbENoYW5nZSxcbiAgICBvbktleURvd246IG9uSW50ZXJuYWxLZXlEb3duLFxuICAgIG9uS2V5VXA6IG9uSW50ZXJuYWxLZXlVcCxcbiAgICBvblByZXNzRW50ZXI6IG9uSW50ZXJuYWxQcmVzc0VudGVyLFxuICAgIG9uRm9jdXM6IG9uSW50ZXJuYWxGb2N1cyxcbiAgICBvbkJsdXI6IG9uSW50ZXJuYWxCbHVyXG4gIH0pKSwgbWVyZ2VkTWVhc3VyaW5nICYmIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICByZWY6IG1lYXN1cmVSZWYsXG4gICAgY2xhc3NOYW1lOiBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLW1lYXN1cmVcIilcbiAgfSwgbWVyZ2VkVmFsdWUuc2xpY2UoMCwgbWVyZ2VkTWVhc3VyZUxvY2F0aW9uKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTWVudGlvbnNDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IHtcbiAgICAgIG5vdEZvdW5kQ29udGVudDogbm90Rm91bmRDb250ZW50LFxuICAgICAgYWN0aXZlSW5kZXg6IGFjdGl2ZUluZGV4LFxuICAgICAgc2V0QWN0aXZlSW5kZXg6IHNldEFjdGl2ZUluZGV4LFxuICAgICAgc2VsZWN0T3B0aW9uOiBzZWxlY3RPcHRpb24sXG4gICAgICBvbkZvY3VzOiBvbkRyb3Bkb3duRm9jdXMsXG4gICAgICBvbkJsdXI6IG9uRHJvcGRvd25CbHVyLFxuICAgICAgb25TY3JvbGw6IG9uSW50ZXJuYWxQb3B1cFNjcm9sbFxuICAgIH1cbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoS2V5d29yZFRyaWdnZXIsIHtcbiAgICBwcmVmaXhDbHM6IHByZWZpeENscyxcbiAgICB0cmFuc2l0aW9uTmFtZTogdHJhbnNpdGlvbk5hbWUsXG4gICAgcGxhY2VtZW50OiBwbGFjZW1lbnQsXG4gICAgZGlyZWN0aW9uOiBkaXJlY3Rpb24sXG4gICAgb3B0aW9uczogbWVyZ2VkT3B0aW9ucyxcbiAgICB2aXNpYmxlOiB0cnVlLFxuICAgIGdldFBvcHVwQ29udGFpbmVyOiBnZXRQb3B1cENvbnRhaW5lcixcbiAgICBkcm9wZG93bkNsYXNzTmFtZTogZHJvcGRvd25DbGFzc05hbWVcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIG51bGwsIG1lcmdlZE1lYXN1cmVQcmVmaXgpKSksIG1lcmdlZFZhbHVlLnNsaWNlKG1lcmdlZE1lYXN1cmVMb2NhdGlvbiArIG1lcmdlZE1lYXN1cmVQcmVmaXgubGVuZ3RoKSkpO1xufSk7XG52YXIgTWVudGlvbnMgPSAvKiNfX1BVUkVfXyovZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZjMsIHJlZikge1xuICB2YXIgc3VmZml4ID0gX3JlZjMuc3VmZml4LFxuICAgIF9yZWYzJHByZWZpeENscyA9IF9yZWYzLnByZWZpeENscyxcbiAgICBwcmVmaXhDbHMgPSBfcmVmMyRwcmVmaXhDbHMgPT09IHZvaWQgMCA/ICdyYy1tZW50aW9ucycgOiBfcmVmMyRwcmVmaXhDbHMsXG4gICAgZGVmYXVsdFZhbHVlID0gX3JlZjMuZGVmYXVsdFZhbHVlLFxuICAgIGN1c3RvbVZhbHVlID0gX3JlZjMudmFsdWUsXG4gICAgYWxsb3dDbGVhciA9IF9yZWYzLmFsbG93Q2xlYXIsXG4gICAgb25DaGFuZ2UgPSBfcmVmMy5vbkNoYW5nZSxcbiAgICBjbGFzc2VzID0gX3JlZjMuY2xhc3NOYW1lcyxcbiAgICBjbGFzc05hbWUgPSBfcmVmMy5jbGFzc05hbWUsXG4gICAgZGlzYWJsZWQgPSBfcmVmMy5kaXNhYmxlZCxcbiAgICBvbkNsZWFyID0gX3JlZjMub25DbGVhcixcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYzLCBfZXhjbHVkZWQyKTtcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBSZWYgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIGhvbGRlclJlZiA9IHVzZVJlZihudWxsKTtcbiAgdmFyIG1lbnRpb25SZWYgPSB1c2VSZWYobnVsbCk7XG4gIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIF9ob2xkZXJSZWYkY3VycmVudCwgX21lbnRpb25SZWYkY3VycmVudDtcbiAgICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBtZW50aW9uUmVmLmN1cnJlbnQpLCB7fSwge1xuICAgICAgbmF0aXZlRWxlbWVudDogKChfaG9sZGVyUmVmJGN1cnJlbnQgPSBob2xkZXJSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2hvbGRlclJlZiRjdXJyZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfaG9sZGVyUmVmJGN1cnJlbnQubmF0aXZlRWxlbWVudCkgfHwgKChfbWVudGlvblJlZiRjdXJyZW50ID0gbWVudGlvblJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfbWVudGlvblJlZiRjdXJyZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfbWVudGlvblJlZiRjdXJyZW50Lm5hdGl2ZUVsZW1lbnQpXG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBWYWx1ZSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBfdXNlTWVyZ2VkU3RhdGUzID0gdXNlTWVyZ2VkU3RhdGUoJycsIHtcbiAgICAgIGRlZmF1bHRWYWx1ZTogZGVmYXVsdFZhbHVlLFxuICAgICAgdmFsdWU6IGN1c3RvbVZhbHVlXG4gICAgfSksXG4gICAgX3VzZU1lcmdlZFN0YXRlNCA9IF9zbGljZWRUb0FycmF5KF91c2VNZXJnZWRTdGF0ZTMsIDIpLFxuICAgIG1lcmdlZFZhbHVlID0gX3VzZU1lcmdlZFN0YXRlNFswXSxcbiAgICBzZXRNZXJnZWRWYWx1ZSA9IF91c2VNZXJnZWRTdGF0ZTRbMV07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IENoYW5nZSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIHRyaWdnZXJDaGFuZ2UgPSBmdW5jdGlvbiB0cmlnZ2VyQ2hhbmdlKGN1cnJlbnRWYWx1ZSkge1xuICAgIHNldE1lcmdlZFZhbHVlKGN1cnJlbnRWYWx1ZSk7XG4gICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCB8fCBvbkNoYW5nZShjdXJyZW50VmFsdWUpO1xuICB9O1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBSZXNldCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBoYW5kbGVSZXNldCA9IGZ1bmN0aW9uIGhhbmRsZVJlc2V0KCkge1xuICAgIHRyaWdnZXJDaGFuZ2UoJycpO1xuICB9O1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQmFzZUlucHV0LCB7XG4gICAgc3VmZml4OiBzdWZmaXgsXG4gICAgcHJlZml4Q2xzOiBwcmVmaXhDbHMsXG4gICAgdmFsdWU6IG1lcmdlZFZhbHVlLFxuICAgIGFsbG93Q2xlYXI6IGFsbG93Q2xlYXIsXG4gICAgaGFuZGxlUmVzZXQ6IGhhbmRsZVJlc2V0LFxuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lLFxuICAgIGNsYXNzTmFtZXM6IGNsYXNzZXMsXG4gICAgZGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgIHJlZjogaG9sZGVyUmVmLFxuICAgIG9uQ2xlYXI6IG9uQ2xlYXJcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoSW50ZXJuYWxNZW50aW9ucywgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xhc3NlcyA9PT0gbnVsbCB8fCBjbGFzc2VzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjbGFzc2VzLm1lbnRpb25zLFxuICAgIHByZWZpeENsczogcHJlZml4Q2xzLFxuICAgIHJlZjogbWVudGlvblJlZixcbiAgICBvbkNoYW5nZTogdHJpZ2dlckNoYW5nZSxcbiAgICBkaXNhYmxlZDogZGlzYWJsZWRcbiAgfSwgcmVzdCkpKTtcbn0pO1xuTWVudGlvbnMuT3B0aW9uID0gT3B0aW9uO1xuZXhwb3J0IGRlZmF1bHQgTWVudGlvbnM7IiwiLyogdHNsaW50OmRpc2FibGU6IG5vLW9iamVjdC1saXRlcmFsLXR5cGUtYXNzZXJ0aW9uICovXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG4vLyBXZSB3aWxsIG5ldmVyIHVzZSBkZWZhdWx0LCBoZXJlIG9ubHkgdG8gZml4IFR5cGVTY3JpcHQgd2FybmluZ1xudmFyIE1lbnRpb25zQ29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KG51bGwpO1xuZXhwb3J0IGRlZmF1bHQgTWVudGlvbnNDb250ZXh0OyIsInZhciBPcHRpb24gPSBmdW5jdGlvbiBPcHRpb24oKSB7XG4gIHJldHVybiBudWxsO1xufTtcbmV4cG9ydCBkZWZhdWx0IE9wdGlvbjsiLCJpbXBvcnQgX3NsaWNlZFRvQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXlcIjtcbmltcG9ydCB7IHVzZVN0YXRlLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuLyoqXG4gKiBUcmlnZ2VyIGEgY2FsbGJhY2sgb24gc3RhdGUgY2hhbmdlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZUVmZmVjdFN0YXRlKCkge1xuICB2YXIgX3VzZVN0YXRlID0gdXNlU3RhdGUoe1xuICAgICAgaWQ6IDAsXG4gICAgICBjYWxsYmFjazogbnVsbFxuICAgIH0pLFxuICAgIF91c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUsIDIpLFxuICAgIGVmZmVjdElkID0gX3VzZVN0YXRlMlswXSxcbiAgICBzZXRFZmZlY3RJZCA9IF91c2VTdGF0ZTJbMV07XG4gIHZhciB1cGRhdGUgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICBzZXRFZmZlY3RJZChmdW5jdGlvbiAoX3JlZikge1xuICAgICAgdmFyIGlkID0gX3JlZi5pZDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlkOiBpZCArIDEsXG4gICAgICAgIGNhbGxiYWNrOiBjYWxsYmFja1xuICAgICAgfTtcbiAgICB9KTtcbiAgfSwgW10pO1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHZhciBfZWZmZWN0SWQkY2FsbGJhY2s7XG4gICAgKF9lZmZlY3RJZCRjYWxsYmFjayA9IGVmZmVjdElkLmNhbGxiYWNrKSA9PT0gbnVsbCB8fCBfZWZmZWN0SWQkY2FsbGJhY2sgPT09IHZvaWQgMCB8fCBfZWZmZWN0SWQkY2FsbGJhY2suY2FsbChlZmZlY3RJZCk7XG4gIH0sIFtlZmZlY3RJZF0pO1xuICByZXR1cm4gdXBkYXRlO1xufSIsImltcG9ydCBNZW50aW9ucyBmcm9tIFwiLi9NZW50aW9uc1wiO1xuZXhwb3J0IGRlZmF1bHQgTWVudGlvbnM7IiwiLyoqXG4gKiBDdXQgaW5wdXQgc2VsZWN0aW9uIGludG8gMiBwYXJ0IGFuZCByZXR1cm4gdGV4dCBiZWZvcmUgc2VsZWN0aW9uIHN0YXJ0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRCZWZvcmVTZWxlY3Rpb25UZXh0KGlucHV0KSB7XG4gIHZhciBzZWxlY3Rpb25TdGFydCA9IGlucHV0LnNlbGVjdGlvblN0YXJ0O1xuICByZXR1cm4gaW5wdXQudmFsdWUuc2xpY2UoMCwgc2VsZWN0aW9uU3RhcnQpO1xufVxuLyoqXG4gKiBGaW5kIHRoZSBsYXN0IG1hdGNoIHByZWZpeCBpbmRleFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFzdE1lYXN1cmVJbmRleCh0ZXh0LCBwcmVmaXgpIHtcbiAgcmV0dXJuIHByZWZpeC5yZWR1Y2UoZnVuY3Rpb24gKGxhc3RNYXRjaCwgcHJlZml4U3RyKSB7XG4gICAgdmFyIGxhc3RJbmRleCA9IHRleHQubGFzdEluZGV4T2YocHJlZml4U3RyKTtcbiAgICBpZiAobGFzdEluZGV4ID4gbGFzdE1hdGNoLmxvY2F0aW9uKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsb2NhdGlvbjogbGFzdEluZGV4LFxuICAgICAgICBwcmVmaXg6IHByZWZpeFN0clxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIGxhc3RNYXRjaDtcbiAgfSwge1xuICAgIGxvY2F0aW9uOiAtMSxcbiAgICBwcmVmaXg6ICcnXG4gIH0pO1xufVxuZnVuY3Rpb24gbG93ZXIoY2hhcikge1xuICByZXR1cm4gKGNoYXIgfHwgJycpLnRvTG93ZXJDYXNlKCk7XG59XG5mdW5jdGlvbiByZWR1Y2VUZXh0KHRleHQsIHRhcmdldFRleHQsIHNwbGl0KSB7XG4gIHZhciBmaXJzdENoYXIgPSB0ZXh0WzBdO1xuICBpZiAoIWZpcnN0Q2hhciB8fCBmaXJzdENoYXIgPT09IHNwbGl0KSB7XG4gICAgcmV0dXJuIHRleHQ7XG4gIH1cblxuICAvLyBSZXVzZSByZXN0IHRleHQgYXMgaXQgY2FuXG4gIHZhciByZXN0VGV4dCA9IHRleHQ7XG4gIHZhciB0YXJnZXRUZXh0TGVuID0gdGFyZ2V0VGV4dC5sZW5ndGg7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdGFyZ2V0VGV4dExlbjsgaSArPSAxKSB7XG4gICAgaWYgKGxvd2VyKHJlc3RUZXh0W2ldKSAhPT0gbG93ZXIodGFyZ2V0VGV4dFtpXSkpIHtcbiAgICAgIHJlc3RUZXh0ID0gcmVzdFRleHQuc2xpY2UoaSk7XG4gICAgICBicmVhaztcbiAgICB9IGVsc2UgaWYgKGkgPT09IHRhcmdldFRleHRMZW4gLSAxKSB7XG4gICAgICByZXN0VGV4dCA9IHJlc3RUZXh0LnNsaWNlKHRhcmdldFRleHRMZW4pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdFRleHQ7XG59XG5cbi8qKlxuICogUGFpbnQgdGFyZ2V0VGV4dCBpbnRvIGN1cnJlbnQgdGV4dDpcbiAqICB0ZXh0OiBsaXR0bGVAbGl0ZXN0XG4gKiAgdGFyZ2V0VGV4dDogbGlnaHRcbiAqICA9PiBsaXR0bGUgQGxpZ2h0IHRlc3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VXaXRoTWVhc3VyZSh0ZXh0LCBtZWFzdXJlQ29uZmlnKSB7XG4gIHZhciBtZWFzdXJlTG9jYXRpb24gPSBtZWFzdXJlQ29uZmlnLm1lYXN1cmVMb2NhdGlvbixcbiAgICBwcmVmaXggPSBtZWFzdXJlQ29uZmlnLnByZWZpeCxcbiAgICB0YXJnZXRUZXh0ID0gbWVhc3VyZUNvbmZpZy50YXJnZXRUZXh0LFxuICAgIHNlbGVjdGlvblN0YXJ0ID0gbWVhc3VyZUNvbmZpZy5zZWxlY3Rpb25TdGFydCxcbiAgICBzcGxpdCA9IG1lYXN1cmVDb25maWcuc3BsaXQ7XG5cbiAgLy8gQmVmb3JlIHRleHQgd2lsbCBhcHBlbmQgb25lIHNwYWNlIGlmIGhhdmUgb3RoZXIgdGV4dFxuICB2YXIgYmVmb3JlTWVhc3VyZVRleHQgPSB0ZXh0LnNsaWNlKDAsIG1lYXN1cmVMb2NhdGlvbik7XG4gIGlmIChiZWZvcmVNZWFzdXJlVGV4dFtiZWZvcmVNZWFzdXJlVGV4dC5sZW5ndGggLSBzcGxpdC5sZW5ndGhdID09PSBzcGxpdCkge1xuICAgIGJlZm9yZU1lYXN1cmVUZXh0ID0gYmVmb3JlTWVhc3VyZVRleHQuc2xpY2UoMCwgYmVmb3JlTWVhc3VyZVRleHQubGVuZ3RoIC0gc3BsaXQubGVuZ3RoKTtcbiAgfVxuICBpZiAoYmVmb3JlTWVhc3VyZVRleHQpIHtcbiAgICBiZWZvcmVNZWFzdXJlVGV4dCA9IFwiXCIuY29uY2F0KGJlZm9yZU1lYXN1cmVUZXh0KS5jb25jYXQoc3BsaXQpO1xuICB9XG5cbiAgLy8gQ3V0IGR1cGxpY2F0ZSBzdHJpbmcgd2l0aCBjdXJyZW50IHRhcmdldFRleHRcbiAgdmFyIHJlc3RUZXh0ID0gcmVkdWNlVGV4dCh0ZXh0LnNsaWNlKHNlbGVjdGlvblN0YXJ0KSwgdGFyZ2V0VGV4dC5zbGljZShzZWxlY3Rpb25TdGFydCAtIG1lYXN1cmVMb2NhdGlvbiAtIHByZWZpeC5sZW5ndGgpLCBzcGxpdCk7XG4gIGlmIChyZXN0VGV4dC5zbGljZSgwLCBzcGxpdC5sZW5ndGgpID09PSBzcGxpdCkge1xuICAgIHJlc3RUZXh0ID0gcmVzdFRleHQuc2xpY2Uoc3BsaXQubGVuZ3RoKTtcbiAgfVxuICB2YXIgY29ubmVjdGVkU3RhcnRUZXh0ID0gXCJcIi5jb25jYXQoYmVmb3JlTWVhc3VyZVRleHQpLmNvbmNhdChwcmVmaXgpLmNvbmNhdCh0YXJnZXRUZXh0KS5jb25jYXQoc3BsaXQpO1xuICByZXR1cm4ge1xuICAgIHRleHQ6IFwiXCIuY29uY2F0KGNvbm5lY3RlZFN0YXJ0VGV4dCkuY29uY2F0KHJlc3RUZXh0KSxcbiAgICBzZWxlY3Rpb25Mb2NhdGlvbjogY29ubmVjdGVkU3RhcnRUZXh0Lmxlbmd0aFxuICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIHNldElucHV0U2VsZWN0aW9uKGlucHV0LCBsb2NhdGlvbikge1xuICBpbnB1dC5zZXRTZWxlY3Rpb25SYW5nZShsb2NhdGlvbiwgbG9jYXRpb24pO1xuXG4gIC8qKlxuICAgKiBSZXNldCBjYXJldCBpbnRvIHZpZXcuXG4gICAqIFNpbmNlIHRoaXMgZnVuY3Rpb24gYWx3YXlzIGNhbGxlZCBieSB1c2VyIGNvbnRyb2wsIGl0J3Mgc2FmZSB0byBmb2N1cyBlbGVtZW50LlxuICAgKi9cbiAgaW5wdXQuYmx1cigpO1xuICBpbnB1dC5mb2N1cygpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlU2VhcmNoKHRleHQsIHNwbGl0KSB7XG4gIHJldHVybiAhc3BsaXQgfHwgdGV4dC5pbmRleE9mKHNwbGl0KSA9PT0gLTE7XG59XG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyT3B0aW9uKGlucHV0LCBfcmVmKSB7XG4gIHZhciBfcmVmJHZhbHVlID0gX3JlZi52YWx1ZSxcbiAgICB2YWx1ZSA9IF9yZWYkdmFsdWUgPT09IHZvaWQgMCA/ICcnIDogX3JlZiR2YWx1ZTtcbiAgdmFyIGxvd2VyQ2FzZSA9IGlucHV0LnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiB2YWx1ZS50b0xvd2VyQ2FzZSgpLmluZGV4T2YobG93ZXJDYXNlKSAhPT0gLTE7XG59IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBNZW51Q29udGV4dCB9IGZyb20gXCIuL2NvbnRleHQvTWVudUNvbnRleHRcIjtcbmltcG9ydCB7IHVzZU1lYXN1cmUgfSBmcm9tIFwiLi9jb250ZXh0L1BhdGhDb250ZXh0XCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBEaXZpZGVyKF9yZWYpIHtcbiAgdmFyIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIHN0eWxlID0gX3JlZi5zdHlsZTtcbiAgdmFyIF9SZWFjdCR1c2VDb250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChNZW51Q29udGV4dCksXG4gICAgcHJlZml4Q2xzID0gX1JlYWN0JHVzZUNvbnRleHQucHJlZml4Q2xzO1xuICB2YXIgbWVhc3VyZSA9IHVzZU1lYXN1cmUoKTtcbiAgaWYgKG1lYXN1cmUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaVwiLCB7XG4gICAgcm9sZTogXCJzZXBhcmF0b3JcIixcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMoXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1pdGVtLWRpdmlkZXJcIiksIGNsYXNzTmFtZSksXG4gICAgc3R5bGU6IHN0eWxlXG4gIH0pO1xufSIsImltcG9ydCBfb2JqZWN0U3ByZWFkIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBJY29uKF9yZWYpIHtcbiAgdmFyIGljb24gPSBfcmVmLmljb24sXG4gICAgcHJvcHMgPSBfcmVmLnByb3BzLFxuICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbjtcbiAgdmFyIGljb25Ob2RlO1xuICBpZiAoaWNvbiA9PT0gbnVsbCB8fCBpY29uID09PSBmYWxzZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGlmICh0eXBlb2YgaWNvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGljb25Ob2RlID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoaWNvbiwgX29iamVjdFNwcmVhZCh7fSwgcHJvcHMpKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgaWNvbiAhPT0gXCJib29sZWFuXCIpIHtcbiAgICAvLyBDb21wYXRpYmxlIGZvciBvcmlnaW4gZGVmaW5pdGlvblxuICAgIGljb25Ob2RlID0gaWNvbjtcbiAgfVxuICByZXR1cm4gaWNvbk5vZGUgfHwgY2hpbGRyZW4gfHwgbnVsbDtcbn0iLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfZGVmaW5lUHJvcGVydHkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5XCI7XG5pbXBvcnQgX29iamVjdFNwcmVhZCBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0U3ByZWFkMlwiO1xuaW1wb3J0IF90b0NvbnN1bWFibGVBcnJheSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Db25zdW1hYmxlQXJyYXlcIjtcbmltcG9ydCBfc2xpY2VkVG9BcnJheSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheVwiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNcIjtcbnZhciBfZXhjbHVkZWQgPSBbXCJwcmVmaXhDbHNcIiwgXCJyb290Q2xhc3NOYW1lXCIsIFwic3R5bGVcIiwgXCJjbGFzc05hbWVcIiwgXCJ0YWJJbmRleFwiLCBcIml0ZW1zXCIsIFwiY2hpbGRyZW5cIiwgXCJkaXJlY3Rpb25cIiwgXCJpZFwiLCBcIm1vZGVcIiwgXCJpbmxpbmVDb2xsYXBzZWRcIiwgXCJkaXNhYmxlZFwiLCBcImRpc2FibGVkT3ZlcmZsb3dcIiwgXCJzdWJNZW51T3BlbkRlbGF5XCIsIFwic3ViTWVudUNsb3NlRGVsYXlcIiwgXCJmb3JjZVN1Yk1lbnVSZW5kZXJcIiwgXCJkZWZhdWx0T3BlbktleXNcIiwgXCJvcGVuS2V5c1wiLCBcImFjdGl2ZUtleVwiLCBcImRlZmF1bHRBY3RpdmVGaXJzdFwiLCBcInNlbGVjdGFibGVcIiwgXCJtdWx0aXBsZVwiLCBcImRlZmF1bHRTZWxlY3RlZEtleXNcIiwgXCJzZWxlY3RlZEtleXNcIiwgXCJvblNlbGVjdFwiLCBcIm9uRGVzZWxlY3RcIiwgXCJpbmxpbmVJbmRlbnRcIiwgXCJtb3Rpb25cIiwgXCJkZWZhdWx0TW90aW9uc1wiLCBcInRyaWdnZXJTdWJNZW51QWN0aW9uXCIsIFwiYnVpbHRpblBsYWNlbWVudHNcIiwgXCJpdGVtSWNvblwiLCBcImV4cGFuZEljb25cIiwgXCJvdmVyZmxvd2VkSW5kaWNhdG9yXCIsIFwib3ZlcmZsb3dlZEluZGljYXRvclBvcHVwQ2xhc3NOYW1lXCIsIFwiZ2V0UG9wdXBDb250YWluZXJcIiwgXCJvbkNsaWNrXCIsIFwib25PcGVuQ2hhbmdlXCIsIFwib25LZXlEb3duXCIsIFwib3BlbkFuaW1hdGlvblwiLCBcIm9wZW5UcmFuc2l0aW9uTmFtZVwiLCBcIl9pbnRlcm5hbFJlbmRlck1lbnVJdGVtXCIsIFwiX2ludGVybmFsUmVuZGVyU3ViTWVudUl0ZW1cIiwgXCJfaW50ZXJuYWxDb21wb25lbnRzXCJdO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgT3ZlcmZsb3cgZnJvbSAncmMtb3ZlcmZsb3cnO1xuaW1wb3J0IHVzZU1lcmdlZFN0YXRlIGZyb20gXCJyYy11dGlsL2VzL2hvb2tzL3VzZU1lcmdlZFN0YXRlXCI7XG5pbXBvcnQgaXNFcXVhbCBmcm9tIFwicmMtdXRpbC9lcy9pc0VxdWFsXCI7XG5pbXBvcnQgd2FybmluZyBmcm9tIFwicmMtdXRpbC9lcy93YXJuaW5nXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VJbXBlcmF0aXZlSGFuZGxlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgZmx1c2hTeW5jIH0gZnJvbSAncmVhY3QtZG9tJztcbmltcG9ydCB7IElkQ29udGV4dCB9IGZyb20gXCIuL2NvbnRleHQvSWRDb250ZXh0XCI7XG5pbXBvcnQgTWVudUNvbnRleHRQcm92aWRlciBmcm9tIFwiLi9jb250ZXh0L01lbnVDb250ZXh0XCI7XG5pbXBvcnQgeyBQYXRoUmVnaXN0ZXJDb250ZXh0LCBQYXRoVXNlckNvbnRleHQgfSBmcm9tIFwiLi9jb250ZXh0L1BhdGhDb250ZXh0XCI7XG5pbXBvcnQgUHJpdmF0ZUNvbnRleHQgZnJvbSBcIi4vY29udGV4dC9Qcml2YXRlQ29udGV4dFwiO1xuaW1wb3J0IHsgZ2V0Rm9jdXNhYmxlRWxlbWVudHMsIHJlZnJlc2hFbGVtZW50cywgdXNlQWNjZXNzaWJpbGl0eSB9IGZyb20gXCIuL2hvb2tzL3VzZUFjY2Vzc2liaWxpdHlcIjtcbmltcG9ydCB1c2VLZXlSZWNvcmRzLCB7IE9WRVJGTE9XX0tFWSB9IGZyb20gXCIuL2hvb2tzL3VzZUtleVJlY29yZHNcIjtcbmltcG9ydCB1c2VNZW1vQ2FsbGJhY2sgZnJvbSBcIi4vaG9va3MvdXNlTWVtb0NhbGxiYWNrXCI7XG5pbXBvcnQgdXNlVVVJRCBmcm9tIFwiLi9ob29rcy91c2VVVUlEXCI7XG5pbXBvcnQgTWVudUl0ZW0gZnJvbSBcIi4vTWVudUl0ZW1cIjtcbmltcG9ydCBTdWJNZW51IGZyb20gXCIuL1N1Yk1lbnVcIjtcbmltcG9ydCB7IHBhcnNlSXRlbXMgfSBmcm9tIFwiLi91dGlscy9ub2RlVXRpbFwiO1xuaW1wb3J0IHsgd2Fybkl0ZW1Qcm9wIH0gZnJvbSBcIi4vdXRpbHMvd2FyblV0aWxcIjtcblxuLyoqXG4gKiBNZW51IG1vZGlmeSBhZnRlciByZWZhY3RvcjpcbiAqICMjIEFkZFxuICogLSBkaXNhYmxlZFxuICpcbiAqICMjIFJlbW92ZVxuICogLSBvcGVuVHJhbnNpdGlvbk5hbWVcbiAqIC0gb3BlbkFuaW1hdGlvblxuICogLSBvbkRlc3Ryb3lcbiAqIC0gc2lkZXJDb2xsYXBzZWQ6IFNlZW1zIGFudGQgZG8gbm90IHVzZSB0aGlzIHByb3AgKE5lZWQgdGVzdCBpbiBhbnRkKVxuICogLSBjb2xsYXBzZWRXaWR0aDogU2VlbXMgdGhpcyBsb2dpYyBzaG91bGQgYmUgaGFuZGxlIGJ5IGFudGQgTGF5b3V0LlNpZGVyXG4gKi9cblxuLy8gb3B0aW1pemUgZm9yIHJlbmRlclxudmFyIEVNUFRZX0xJU1QgPSBbXTtcbnZhciBNZW51ID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gKHByb3BzLCByZWYpIHtcbiAgdmFyIF9jaGlsZExpc3QkO1xuICB2YXIgX3JlZiA9IHByb3BzLFxuICAgIF9yZWYkcHJlZml4Q2xzID0gX3JlZi5wcmVmaXhDbHMsXG4gICAgcHJlZml4Q2xzID0gX3JlZiRwcmVmaXhDbHMgPT09IHZvaWQgMCA/ICdyYy1tZW51JyA6IF9yZWYkcHJlZml4Q2xzLFxuICAgIHJvb3RDbGFzc05hbWUgPSBfcmVmLnJvb3RDbGFzc05hbWUsXG4gICAgc3R5bGUgPSBfcmVmLnN0eWxlLFxuICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIF9yZWYkdGFiSW5kZXggPSBfcmVmLnRhYkluZGV4LFxuICAgIHRhYkluZGV4ID0gX3JlZiR0YWJJbmRleCA9PT0gdm9pZCAwID8gMCA6IF9yZWYkdGFiSW5kZXgsXG4gICAgaXRlbXMgPSBfcmVmLml0ZW1zLFxuICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBkaXJlY3Rpb24gPSBfcmVmLmRpcmVjdGlvbixcbiAgICBpZCA9IF9yZWYuaWQsXG4gICAgX3JlZiRtb2RlID0gX3JlZi5tb2RlLFxuICAgIG1vZGUgPSBfcmVmJG1vZGUgPT09IHZvaWQgMCA/ICd2ZXJ0aWNhbCcgOiBfcmVmJG1vZGUsXG4gICAgaW5saW5lQ29sbGFwc2VkID0gX3JlZi5pbmxpbmVDb2xsYXBzZWQsXG4gICAgZGlzYWJsZWQgPSBfcmVmLmRpc2FibGVkLFxuICAgIGRpc2FibGVkT3ZlcmZsb3cgPSBfcmVmLmRpc2FibGVkT3ZlcmZsb3csXG4gICAgX3JlZiRzdWJNZW51T3BlbkRlbGF5ID0gX3JlZi5zdWJNZW51T3BlbkRlbGF5LFxuICAgIHN1Yk1lbnVPcGVuRGVsYXkgPSBfcmVmJHN1Yk1lbnVPcGVuRGVsYXkgPT09IHZvaWQgMCA/IDAuMSA6IF9yZWYkc3ViTWVudU9wZW5EZWxheSxcbiAgICBfcmVmJHN1Yk1lbnVDbG9zZURlbGEgPSBfcmVmLnN1Yk1lbnVDbG9zZURlbGF5LFxuICAgIHN1Yk1lbnVDbG9zZURlbGF5ID0gX3JlZiRzdWJNZW51Q2xvc2VEZWxhID09PSB2b2lkIDAgPyAwLjEgOiBfcmVmJHN1Yk1lbnVDbG9zZURlbGEsXG4gICAgZm9yY2VTdWJNZW51UmVuZGVyID0gX3JlZi5mb3JjZVN1Yk1lbnVSZW5kZXIsXG4gICAgZGVmYXVsdE9wZW5LZXlzID0gX3JlZi5kZWZhdWx0T3BlbktleXMsXG4gICAgb3BlbktleXMgPSBfcmVmLm9wZW5LZXlzLFxuICAgIGFjdGl2ZUtleSA9IF9yZWYuYWN0aXZlS2V5LFxuICAgIGRlZmF1bHRBY3RpdmVGaXJzdCA9IF9yZWYuZGVmYXVsdEFjdGl2ZUZpcnN0LFxuICAgIF9yZWYkc2VsZWN0YWJsZSA9IF9yZWYuc2VsZWN0YWJsZSxcbiAgICBzZWxlY3RhYmxlID0gX3JlZiRzZWxlY3RhYmxlID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiRzZWxlY3RhYmxlLFxuICAgIF9yZWYkbXVsdGlwbGUgPSBfcmVmLm11bHRpcGxlLFxuICAgIG11bHRpcGxlID0gX3JlZiRtdWx0aXBsZSA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJG11bHRpcGxlLFxuICAgIGRlZmF1bHRTZWxlY3RlZEtleXMgPSBfcmVmLmRlZmF1bHRTZWxlY3RlZEtleXMsXG4gICAgc2VsZWN0ZWRLZXlzID0gX3JlZi5zZWxlY3RlZEtleXMsXG4gICAgb25TZWxlY3QgPSBfcmVmLm9uU2VsZWN0LFxuICAgIG9uRGVzZWxlY3QgPSBfcmVmLm9uRGVzZWxlY3QsXG4gICAgX3JlZiRpbmxpbmVJbmRlbnQgPSBfcmVmLmlubGluZUluZGVudCxcbiAgICBpbmxpbmVJbmRlbnQgPSBfcmVmJGlubGluZUluZGVudCA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJGlubGluZUluZGVudCxcbiAgICBtb3Rpb24gPSBfcmVmLm1vdGlvbixcbiAgICBkZWZhdWx0TW90aW9ucyA9IF9yZWYuZGVmYXVsdE1vdGlvbnMsXG4gICAgX3JlZiR0cmlnZ2VyU3ViTWVudUFjID0gX3JlZi50cmlnZ2VyU3ViTWVudUFjdGlvbixcbiAgICB0cmlnZ2VyU3ViTWVudUFjdGlvbiA9IF9yZWYkdHJpZ2dlclN1Yk1lbnVBYyA9PT0gdm9pZCAwID8gJ2hvdmVyJyA6IF9yZWYkdHJpZ2dlclN1Yk1lbnVBYyxcbiAgICBidWlsdGluUGxhY2VtZW50cyA9IF9yZWYuYnVpbHRpblBsYWNlbWVudHMsXG4gICAgaXRlbUljb24gPSBfcmVmLml0ZW1JY29uLFxuICAgIGV4cGFuZEljb24gPSBfcmVmLmV4cGFuZEljb24sXG4gICAgX3JlZiRvdmVyZmxvd2VkSW5kaWNhID0gX3JlZi5vdmVyZmxvd2VkSW5kaWNhdG9yLFxuICAgIG92ZXJmbG93ZWRJbmRpY2F0b3IgPSBfcmVmJG92ZXJmbG93ZWRJbmRpY2EgPT09IHZvaWQgMCA/ICcuLi4nIDogX3JlZiRvdmVyZmxvd2VkSW5kaWNhLFxuICAgIG92ZXJmbG93ZWRJbmRpY2F0b3JQb3B1cENsYXNzTmFtZSA9IF9yZWYub3ZlcmZsb3dlZEluZGljYXRvclBvcHVwQ2xhc3NOYW1lLFxuICAgIGdldFBvcHVwQ29udGFpbmVyID0gX3JlZi5nZXRQb3B1cENvbnRhaW5lcixcbiAgICBvbkNsaWNrID0gX3JlZi5vbkNsaWNrLFxuICAgIG9uT3BlbkNoYW5nZSA9IF9yZWYub25PcGVuQ2hhbmdlLFxuICAgIG9uS2V5RG93biA9IF9yZWYub25LZXlEb3duLFxuICAgIG9wZW5BbmltYXRpb24gPSBfcmVmLm9wZW5BbmltYXRpb24sXG4gICAgb3BlblRyYW5zaXRpb25OYW1lID0gX3JlZi5vcGVuVHJhbnNpdGlvbk5hbWUsXG4gICAgX2ludGVybmFsUmVuZGVyTWVudUl0ZW0gPSBfcmVmLl9pbnRlcm5hbFJlbmRlck1lbnVJdGVtLFxuICAgIF9pbnRlcm5hbFJlbmRlclN1Yk1lbnVJdGVtID0gX3JlZi5faW50ZXJuYWxSZW5kZXJTdWJNZW51SXRlbSxcbiAgICBfaW50ZXJuYWxDb21wb25lbnRzID0gX3JlZi5faW50ZXJuYWxDb21wb25lbnRzLFxuICAgIHJlc3RQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgX1JlYWN0JHVzZU1lbW8gPSBSZWFjdC51c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBbcGFyc2VJdGVtcyhjaGlsZHJlbiwgaXRlbXMsIEVNUFRZX0xJU1QsIF9pbnRlcm5hbENvbXBvbmVudHMsIHByZWZpeENscyksIHBhcnNlSXRlbXMoY2hpbGRyZW4sIGl0ZW1zLCBFTVBUWV9MSVNULCB7fSwgcHJlZml4Q2xzKV07XG4gICAgfSwgW2NoaWxkcmVuLCBpdGVtcywgX2ludGVybmFsQ29tcG9uZW50c10pLFxuICAgIF9SZWFjdCR1c2VNZW1vMiA9IF9zbGljZWRUb0FycmF5KF9SZWFjdCR1c2VNZW1vLCAyKSxcbiAgICBjaGlsZExpc3QgPSBfUmVhY3QkdXNlTWVtbzJbMF0sXG4gICAgbWVhc3VyZUNoaWxkTGlzdCA9IF9SZWFjdCR1c2VNZW1vMlsxXTtcbiAgdmFyIF9SZWFjdCR1c2VTdGF0ZSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKSxcbiAgICBfUmVhY3QkdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX1JlYWN0JHVzZVN0YXRlLCAyKSxcbiAgICBtb3VudGVkID0gX1JlYWN0JHVzZVN0YXRlMlswXSxcbiAgICBzZXRNb3VudGVkID0gX1JlYWN0JHVzZVN0YXRlMlsxXTtcbiAgdmFyIGNvbnRhaW5lclJlZiA9IFJlYWN0LnVzZVJlZigpO1xuICB2YXIgdXVpZCA9IHVzZVVVSUQoaWQpO1xuICB2YXIgaXNSdGwgPSBkaXJlY3Rpb24gPT09ICdydGwnO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT0gV2FybiA9PT09PT09PT09PT09PT09PT09PT09PT09XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgd2FybmluZyghb3BlbkFuaW1hdGlvbiAmJiAhb3BlblRyYW5zaXRpb25OYW1lLCAnYG9wZW5BbmltYXRpb25gIGFuZCBgb3BlblRyYW5zaXRpb25OYW1lYCBpcyByZW1vdmVkLiBQbGVhc2UgdXNlIGBtb3Rpb25gIG9yIGBkZWZhdWx0TW90aW9uYCBpbnN0ZWFkLicpO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PSBPcGVuID09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIF91c2VNZXJnZWRTdGF0ZSA9IHVzZU1lcmdlZFN0YXRlKGRlZmF1bHRPcGVuS2V5cywge1xuICAgICAgdmFsdWU6IG9wZW5LZXlzLFxuICAgICAgcG9zdFN0YXRlOiBmdW5jdGlvbiBwb3N0U3RhdGUoa2V5cykge1xuICAgICAgICByZXR1cm4ga2V5cyB8fCBFTVBUWV9MSVNUO1xuICAgICAgfVxuICAgIH0pLFxuICAgIF91c2VNZXJnZWRTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlTWVyZ2VkU3RhdGUsIDIpLFxuICAgIG1lcmdlZE9wZW5LZXlzID0gX3VzZU1lcmdlZFN0YXRlMlswXSxcbiAgICBzZXRNZXJnZWRPcGVuS2V5cyA9IF91c2VNZXJnZWRTdGF0ZTJbMV07XG5cbiAgLy8gUmVhY3QgMTggd2lsbCBtZXJnZSBtb3VzZSBldmVudCB3aGljaCBtZWFucyB3ZSBvcGVuIGtleSB3aWxsIG5vdCBzeW5jXG4gIC8vIHJlZjogaHR0cHM6Ly9naXRodWIuY29tL2FudC1kZXNpZ24vYW50LWRlc2lnbi9pc3N1ZXMvMzg4MThcbiAgdmFyIHRyaWdnZXJPcGVuS2V5cyA9IGZ1bmN0aW9uIHRyaWdnZXJPcGVuS2V5cyhrZXlzKSB7XG4gICAgdmFyIGZvcmNlRmx1c2ggPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZhbHNlO1xuICAgIGZ1bmN0aW9uIGRvVXBkYXRlKCkge1xuICAgICAgc2V0TWVyZ2VkT3BlbktleXMoa2V5cyk7XG4gICAgICBvbk9wZW5DaGFuZ2UgPT09IG51bGwgfHwgb25PcGVuQ2hhbmdlID09PSB2b2lkIDAgfHwgb25PcGVuQ2hhbmdlKGtleXMpO1xuICAgIH1cbiAgICBpZiAoZm9yY2VGbHVzaCkge1xuICAgICAgZmx1c2hTeW5jKGRvVXBkYXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZG9VcGRhdGUoKTtcbiAgICB9XG4gIH07XG5cbiAgLy8gPj4+Pj4gQ2FjaGUgJiBSZXNldCBvcGVuIGtleXMgd2hlbiBpbmxpbmVDb2xsYXBzZWQgY2hhbmdlZFxuICB2YXIgX1JlYWN0JHVzZVN0YXRlMyA9IFJlYWN0LnVzZVN0YXRlKG1lcmdlZE9wZW5LZXlzKSxcbiAgICBfUmVhY3QkdXNlU3RhdGU0ID0gX3NsaWNlZFRvQXJyYXkoX1JlYWN0JHVzZVN0YXRlMywgMiksXG4gICAgaW5saW5lQ2FjaGVPcGVuS2V5cyA9IF9SZWFjdCR1c2VTdGF0ZTRbMF0sXG4gICAgc2V0SW5saW5lQ2FjaGVPcGVuS2V5cyA9IF9SZWFjdCR1c2VTdGF0ZTRbMV07XG4gIHZhciBtb3VudFJlZiA9IFJlYWN0LnVzZVJlZihmYWxzZSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PSBNb2RlID09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIF9SZWFjdCR1c2VNZW1vMyA9IFJlYWN0LnVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKChtb2RlID09PSAnaW5saW5lJyB8fCBtb2RlID09PSAndmVydGljYWwnKSAmJiBpbmxpbmVDb2xsYXBzZWQpIHtcbiAgICAgICAgcmV0dXJuIFsndmVydGljYWwnLCBpbmxpbmVDb2xsYXBzZWRdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFttb2RlLCBmYWxzZV07XG4gICAgfSwgW21vZGUsIGlubGluZUNvbGxhcHNlZF0pLFxuICAgIF9SZWFjdCR1c2VNZW1vNCA9IF9zbGljZWRUb0FycmF5KF9SZWFjdCR1c2VNZW1vMywgMiksXG4gICAgbWVyZ2VkTW9kZSA9IF9SZWFjdCR1c2VNZW1vNFswXSxcbiAgICBtZXJnZWRJbmxpbmVDb2xsYXBzZWQgPSBfUmVhY3QkdXNlTWVtbzRbMV07XG4gIHZhciBpc0lubGluZU1vZGUgPSBtZXJnZWRNb2RlID09PSAnaW5saW5lJztcbiAgdmFyIF9SZWFjdCR1c2VTdGF0ZTUgPSBSZWFjdC51c2VTdGF0ZShtZXJnZWRNb2RlKSxcbiAgICBfUmVhY3QkdXNlU3RhdGU2ID0gX3NsaWNlZFRvQXJyYXkoX1JlYWN0JHVzZVN0YXRlNSwgMiksXG4gICAgaW50ZXJuYWxNb2RlID0gX1JlYWN0JHVzZVN0YXRlNlswXSxcbiAgICBzZXRJbnRlcm5hbE1vZGUgPSBfUmVhY3QkdXNlU3RhdGU2WzFdO1xuICB2YXIgX1JlYWN0JHVzZVN0YXRlNyA9IFJlYWN0LnVzZVN0YXRlKG1lcmdlZElubGluZUNvbGxhcHNlZCksXG4gICAgX1JlYWN0JHVzZVN0YXRlOCA9IF9zbGljZWRUb0FycmF5KF9SZWFjdCR1c2VTdGF0ZTcsIDIpLFxuICAgIGludGVybmFsSW5saW5lQ29sbGFwc2VkID0gX1JlYWN0JHVzZVN0YXRlOFswXSxcbiAgICBzZXRJbnRlcm5hbElubGluZUNvbGxhcHNlZCA9IF9SZWFjdCR1c2VTdGF0ZThbMV07XG4gIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgc2V0SW50ZXJuYWxNb2RlKG1lcmdlZE1vZGUpO1xuICAgIHNldEludGVybmFsSW5saW5lQ29sbGFwc2VkKG1lcmdlZElubGluZUNvbGxhcHNlZCk7XG4gICAgaWYgKCFtb3VudFJlZi5jdXJyZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIFN5bmNocm9ub3VzbHkgdXBkYXRlIE1lcmdlZE9wZW5LZXlzXG4gICAgaWYgKGlzSW5saW5lTW9kZSkge1xuICAgICAgc2V0TWVyZ2VkT3BlbktleXMoaW5saW5lQ2FjaGVPcGVuS2V5cyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRyaWdnZXIgb3BlbiBldmVudCBpbiBjYXNlIGl0cyBpbiBjb250cm9sXG4gICAgICB0cmlnZ2VyT3BlbktleXMoRU1QVFlfTElTVCk7XG4gICAgfVxuICB9LCBbbWVyZ2VkTW9kZSwgbWVyZ2VkSW5saW5lQ29sbGFwc2VkXSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PSBSZXNwb25zaXZlID09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIF9SZWFjdCR1c2VTdGF0ZTkgPSBSZWFjdC51c2VTdGF0ZSgwKSxcbiAgICBfUmVhY3QkdXNlU3RhdGUxMCA9IF9zbGljZWRUb0FycmF5KF9SZWFjdCR1c2VTdGF0ZTksIDIpLFxuICAgIGxhc3RWaXNpYmxlSW5kZXggPSBfUmVhY3QkdXNlU3RhdGUxMFswXSxcbiAgICBzZXRMYXN0VmlzaWJsZUluZGV4ID0gX1JlYWN0JHVzZVN0YXRlMTBbMV07XG4gIHZhciBhbGxWaXNpYmxlID0gbGFzdFZpc2libGVJbmRleCA+PSBjaGlsZExpc3QubGVuZ3RoIC0gMSB8fCBpbnRlcm5hbE1vZGUgIT09ICdob3Jpem9udGFsJyB8fCBkaXNhYmxlZE92ZXJmbG93O1xuXG4gIC8vIENhY2hlXG4gIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGlzSW5saW5lTW9kZSkge1xuICAgICAgc2V0SW5saW5lQ2FjaGVPcGVuS2V5cyhtZXJnZWRPcGVuS2V5cyk7XG4gICAgfVxuICB9LCBbbWVyZ2VkT3BlbktleXNdKTtcbiAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBtb3VudFJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgbW91bnRSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgIH07XG4gIH0sIFtdKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09IFBhdGggPT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgX3VzZUtleVJlY29yZHMgPSB1c2VLZXlSZWNvcmRzKCksXG4gICAgcmVnaXN0ZXJQYXRoID0gX3VzZUtleVJlY29yZHMucmVnaXN0ZXJQYXRoLFxuICAgIHVucmVnaXN0ZXJQYXRoID0gX3VzZUtleVJlY29yZHMudW5yZWdpc3RlclBhdGgsXG4gICAgcmVmcmVzaE92ZXJmbG93S2V5cyA9IF91c2VLZXlSZWNvcmRzLnJlZnJlc2hPdmVyZmxvd0tleXMsXG4gICAgaXNTdWJQYXRoS2V5ID0gX3VzZUtleVJlY29yZHMuaXNTdWJQYXRoS2V5LFxuICAgIGdldEtleVBhdGggPSBfdXNlS2V5UmVjb3Jkcy5nZXRLZXlQYXRoLFxuICAgIGdldEtleXMgPSBfdXNlS2V5UmVjb3Jkcy5nZXRLZXlzLFxuICAgIGdldFN1YlBhdGhLZXlzID0gX3VzZUtleVJlY29yZHMuZ2V0U3ViUGF0aEtleXM7XG4gIHZhciByZWdpc3RlclBhdGhDb250ZXh0ID0gUmVhY3QudXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlZ2lzdGVyUGF0aDogcmVnaXN0ZXJQYXRoLFxuICAgICAgdW5yZWdpc3RlclBhdGg6IHVucmVnaXN0ZXJQYXRoXG4gICAgfTtcbiAgfSwgW3JlZ2lzdGVyUGF0aCwgdW5yZWdpc3RlclBhdGhdKTtcbiAgdmFyIHBhdGhVc2VyQ29udGV4dCA9IFJlYWN0LnVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpc1N1YlBhdGhLZXk6IGlzU3ViUGF0aEtleVxuICAgIH07XG4gIH0sIFtpc1N1YlBhdGhLZXldKTtcbiAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICByZWZyZXNoT3ZlcmZsb3dLZXlzKGFsbFZpc2libGUgPyBFTVBUWV9MSVNUIDogY2hpbGRMaXN0LnNsaWNlKGxhc3RWaXNpYmxlSW5kZXggKyAxKS5tYXAoZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICByZXR1cm4gY2hpbGQua2V5O1xuICAgIH0pKTtcbiAgfSwgW2xhc3RWaXNpYmxlSW5kZXgsIGFsbFZpc2libGVdKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT0gQWN0aXZlID09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgX3VzZU1lcmdlZFN0YXRlMyA9IHVzZU1lcmdlZFN0YXRlKGFjdGl2ZUtleSB8fCBkZWZhdWx0QWN0aXZlRmlyc3QgJiYgKChfY2hpbGRMaXN0JCA9IGNoaWxkTGlzdFswXSkgPT09IG51bGwgfHwgX2NoaWxkTGlzdCQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jaGlsZExpc3QkLmtleSksIHtcbiAgICAgIHZhbHVlOiBhY3RpdmVLZXlcbiAgICB9KSxcbiAgICBfdXNlTWVyZ2VkU3RhdGU0ID0gX3NsaWNlZFRvQXJyYXkoX3VzZU1lcmdlZFN0YXRlMywgMiksXG4gICAgbWVyZ2VkQWN0aXZlS2V5ID0gX3VzZU1lcmdlZFN0YXRlNFswXSxcbiAgICBzZXRNZXJnZWRBY3RpdmVLZXkgPSBfdXNlTWVyZ2VkU3RhdGU0WzFdO1xuICB2YXIgb25BY3RpdmUgPSB1c2VNZW1vQ2FsbGJhY2soZnVuY3Rpb24gKGtleSkge1xuICAgIHNldE1lcmdlZEFjdGl2ZUtleShrZXkpO1xuICB9KTtcbiAgdmFyIG9uSW5hY3RpdmUgPSB1c2VNZW1vQ2FsbGJhY2soZnVuY3Rpb24gKCkge1xuICAgIHNldE1lcmdlZEFjdGl2ZUtleSh1bmRlZmluZWQpO1xuICB9KTtcbiAgdXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbGlzdDogY29udGFpbmVyUmVmLmN1cnJlbnQsXG4gICAgICBmb2N1czogZnVuY3Rpb24gZm9jdXMob3B0aW9ucykge1xuICAgICAgICB2YXIgX2NoaWxkTGlzdCRmaW5kO1xuICAgICAgICB2YXIga2V5cyA9IGdldEtleXMoKTtcbiAgICAgICAgdmFyIF9yZWZyZXNoRWxlbWVudHMgPSByZWZyZXNoRWxlbWVudHMoa2V5cywgdXVpZCksXG4gICAgICAgICAgZWxlbWVudHMgPSBfcmVmcmVzaEVsZW1lbnRzLmVsZW1lbnRzLFxuICAgICAgICAgIGtleTJlbGVtZW50ID0gX3JlZnJlc2hFbGVtZW50cy5rZXkyZWxlbWVudCxcbiAgICAgICAgICBlbGVtZW50MmtleSA9IF9yZWZyZXNoRWxlbWVudHMuZWxlbWVudDJrZXk7XG4gICAgICAgIHZhciBmb2N1c2FibGVFbGVtZW50cyA9IGdldEZvY3VzYWJsZUVsZW1lbnRzKGNvbnRhaW5lclJlZi5jdXJyZW50LCBlbGVtZW50cyk7XG4gICAgICAgIHZhciBzaG91bGRGb2N1c0tleSA9IG1lcmdlZEFjdGl2ZUtleSAhPT0gbnVsbCAmJiBtZXJnZWRBY3RpdmVLZXkgIT09IHZvaWQgMCA/IG1lcmdlZEFjdGl2ZUtleSA6IGZvY3VzYWJsZUVsZW1lbnRzWzBdID8gZWxlbWVudDJrZXkuZ2V0KGZvY3VzYWJsZUVsZW1lbnRzWzBdKSA6IChfY2hpbGRMaXN0JGZpbmQgPSBjaGlsZExpc3QuZmluZChmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICAgIHJldHVybiAhbm9kZS5wcm9wcy5kaXNhYmxlZDtcbiAgICAgICAgfSkpID09PSBudWxsIHx8IF9jaGlsZExpc3QkZmluZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2NoaWxkTGlzdCRmaW5kLmtleTtcbiAgICAgICAgdmFyIGVsZW1lbnRUb0ZvY3VzID0ga2V5MmVsZW1lbnQuZ2V0KHNob3VsZEZvY3VzS2V5KTtcbiAgICAgICAgaWYgKHNob3VsZEZvY3VzS2V5ICYmIGVsZW1lbnRUb0ZvY3VzKSB7XG4gICAgICAgICAgdmFyIF9lbGVtZW50VG9Gb2N1cyRmb2N1cztcbiAgICAgICAgICBlbGVtZW50VG9Gb2N1cyA9PT0gbnVsbCB8fCBlbGVtZW50VG9Gb2N1cyA9PT0gdm9pZCAwIHx8IChfZWxlbWVudFRvRm9jdXMkZm9jdXMgPSBlbGVtZW50VG9Gb2N1cy5mb2N1cykgPT09IG51bGwgfHwgX2VsZW1lbnRUb0ZvY3VzJGZvY3VzID09PSB2b2lkIDAgfHwgX2VsZW1lbnRUb0ZvY3VzJGZvY3VzLmNhbGwoZWxlbWVudFRvRm9jdXMsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09IFNlbGVjdCA9PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gPj4+Pj4gU2VsZWN0IGtleXNcbiAgdmFyIF91c2VNZXJnZWRTdGF0ZTUgPSB1c2VNZXJnZWRTdGF0ZShkZWZhdWx0U2VsZWN0ZWRLZXlzIHx8IFtdLCB7XG4gICAgICB2YWx1ZTogc2VsZWN0ZWRLZXlzLFxuICAgICAgLy8gTGVnYWN5IGNvbnZlcnQga2V5IHRvIGFycmF5XG4gICAgICBwb3N0U3RhdGU6IGZ1bmN0aW9uIHBvc3RTdGF0ZShrZXlzKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGtleXMpKSB7XG4gICAgICAgICAgcmV0dXJuIGtleXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleXMgPT09IG51bGwgfHwga2V5cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuIEVNUFRZX0xJU1Q7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtrZXlzXTtcbiAgICAgIH1cbiAgICB9KSxcbiAgICBfdXNlTWVyZ2VkU3RhdGU2ID0gX3NsaWNlZFRvQXJyYXkoX3VzZU1lcmdlZFN0YXRlNSwgMiksXG4gICAgbWVyZ2VkU2VsZWN0S2V5cyA9IF91c2VNZXJnZWRTdGF0ZTZbMF0sXG4gICAgc2V0TWVyZ2VkU2VsZWN0S2V5cyA9IF91c2VNZXJnZWRTdGF0ZTZbMV07XG5cbiAgLy8gPj4+Pj4gVHJpZ2dlciBzZWxlY3RcbiAgdmFyIHRyaWdnZXJTZWxlY3Rpb24gPSBmdW5jdGlvbiB0cmlnZ2VyU2VsZWN0aW9uKGluZm8pIHtcbiAgICBpZiAoc2VsZWN0YWJsZSkge1xuICAgICAgLy8gSW5zZXJ0IG9yIFJlbW92ZVxuICAgICAgdmFyIHRhcmdldEtleSA9IGluZm8ua2V5O1xuICAgICAgdmFyIGV4aXN0ID0gbWVyZ2VkU2VsZWN0S2V5cy5pbmNsdWRlcyh0YXJnZXRLZXkpO1xuICAgICAgdmFyIG5ld1NlbGVjdEtleXM7XG4gICAgICBpZiAobXVsdGlwbGUpIHtcbiAgICAgICAgaWYgKGV4aXN0KSB7XG4gICAgICAgICAgbmV3U2VsZWN0S2V5cyA9IG1lcmdlZFNlbGVjdEtleXMuZmlsdGVyKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIHJldHVybiBrZXkgIT09IHRhcmdldEtleTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZXdTZWxlY3RLZXlzID0gW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShtZXJnZWRTZWxlY3RLZXlzKSwgW3RhcmdldEtleV0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdTZWxlY3RLZXlzID0gW3RhcmdldEtleV07XG4gICAgICB9XG4gICAgICBzZXRNZXJnZWRTZWxlY3RLZXlzKG5ld1NlbGVjdEtleXMpO1xuXG4gICAgICAvLyBUcmlnZ2VyIGV2ZW50XG4gICAgICB2YXIgc2VsZWN0SW5mbyA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgaW5mbyksIHt9LCB7XG4gICAgICAgIHNlbGVjdGVkS2V5czogbmV3U2VsZWN0S2V5c1xuICAgICAgfSk7XG4gICAgICBpZiAoZXhpc3QpIHtcbiAgICAgICAgb25EZXNlbGVjdCA9PT0gbnVsbCB8fCBvbkRlc2VsZWN0ID09PSB2b2lkIDAgfHwgb25EZXNlbGVjdChzZWxlY3RJbmZvKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9uU2VsZWN0ID09PSBudWxsIHx8IG9uU2VsZWN0ID09PSB2b2lkIDAgfHwgb25TZWxlY3Qoc2VsZWN0SW5mbyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gV2hhdGV2ZXIgc2VsZWN0YWJsZSwgYWx3YXlzIGNsb3NlIGl0XG4gICAgaWYgKCFtdWx0aXBsZSAmJiBtZXJnZWRPcGVuS2V5cy5sZW5ndGggJiYgaW50ZXJuYWxNb2RlICE9PSAnaW5saW5lJykge1xuICAgICAgdHJpZ2dlck9wZW5LZXlzKEVNUFRZX0xJU1QpO1xuICAgIH1cbiAgfTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09IE9wZW4gPT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvKipcbiAgICogQ2xpY2sgZm9yIGl0ZW0uIFN1Yk1lbnUgZG8gbm90IGhhdmUgc2VsZWN0aW9uIHN0YXR1c1xuICAgKi9cbiAgdmFyIG9uSW50ZXJuYWxDbGljayA9IHVzZU1lbW9DYWxsYmFjayhmdW5jdGlvbiAoaW5mbykge1xuICAgIG9uQ2xpY2sgPT09IG51bGwgfHwgb25DbGljayA9PT0gdm9pZCAwIHx8IG9uQ2xpY2sod2Fybkl0ZW1Qcm9wKGluZm8pKTtcbiAgICB0cmlnZ2VyU2VsZWN0aW9uKGluZm8pO1xuICB9KTtcbiAgdmFyIG9uSW50ZXJuYWxPcGVuQ2hhbmdlID0gdXNlTWVtb0NhbGxiYWNrKGZ1bmN0aW9uIChrZXksIG9wZW4pIHtcbiAgICB2YXIgbmV3T3BlbktleXMgPSBtZXJnZWRPcGVuS2V5cy5maWx0ZXIoZnVuY3Rpb24gKGspIHtcbiAgICAgIHJldHVybiBrICE9PSBrZXk7XG4gICAgfSk7XG4gICAgaWYgKG9wZW4pIHtcbiAgICAgIG5ld09wZW5LZXlzLnB1c2goa2V5KTtcbiAgICB9IGVsc2UgaWYgKGludGVybmFsTW9kZSAhPT0gJ2lubGluZScpIHtcbiAgICAgIC8vIFdlIG5lZWQgZmluZCBhbGwgcmVsYXRlZCBwb3B1cCB0byBjbG9zZVxuICAgICAgdmFyIHN1YlBhdGhLZXlzID0gZ2V0U3ViUGF0aEtleXMoa2V5KTtcbiAgICAgIG5ld09wZW5LZXlzID0gbmV3T3BlbktleXMuZmlsdGVyKGZ1bmN0aW9uIChrKSB7XG4gICAgICAgIHJldHVybiAhc3ViUGF0aEtleXMuaGFzKGspO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICghaXNFcXVhbChtZXJnZWRPcGVuS2V5cywgbmV3T3BlbktleXMsIHRydWUpKSB7XG4gICAgICB0cmlnZ2VyT3BlbktleXMobmV3T3BlbktleXMsIHRydWUpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT0gQWNjZXNzaWJpbGl0eSA9PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIHRyaWdnZXJBY2Nlc3NpYmlsaXR5T3BlbiA9IGZ1bmN0aW9uIHRyaWdnZXJBY2Nlc3NpYmlsaXR5T3BlbihrZXksIG9wZW4pIHtcbiAgICB2YXIgbmV4dE9wZW4gPSBvcGVuICE9PSBudWxsICYmIG9wZW4gIT09IHZvaWQgMCA/IG9wZW4gOiAhbWVyZ2VkT3BlbktleXMuaW5jbHVkZXMoa2V5KTtcbiAgICBvbkludGVybmFsT3BlbkNoYW5nZShrZXksIG5leHRPcGVuKTtcbiAgfTtcbiAgdmFyIG9uSW50ZXJuYWxLZXlEb3duID0gdXNlQWNjZXNzaWJpbGl0eShpbnRlcm5hbE1vZGUsIG1lcmdlZEFjdGl2ZUtleSwgaXNSdGwsIHV1aWQsIGNvbnRhaW5lclJlZiwgZ2V0S2V5cywgZ2V0S2V5UGF0aCwgc2V0TWVyZ2VkQWN0aXZlS2V5LCB0cmlnZ2VyQWNjZXNzaWJpbGl0eU9wZW4sIG9uS2V5RG93bik7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09IEVmZmVjdCA9PT09PT09PT09PT09PT09PT09PT09PT1cbiAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBzZXRNb3VudGVkKHRydWUpO1xuICB9LCBbXSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT0gQ29udGV4dCA9PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIHByaXZhdGVDb250ZXh0ID0gUmVhY3QudXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIF9pbnRlcm5hbFJlbmRlck1lbnVJdGVtOiBfaW50ZXJuYWxSZW5kZXJNZW51SXRlbSxcbiAgICAgIF9pbnRlcm5hbFJlbmRlclN1Yk1lbnVJdGVtOiBfaW50ZXJuYWxSZW5kZXJTdWJNZW51SXRlbVxuICAgIH07XG4gIH0sIFtfaW50ZXJuYWxSZW5kZXJNZW51SXRlbSwgX2ludGVybmFsUmVuZGVyU3ViTWVudUl0ZW1dKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT0gUmVuZGVyID09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8vID4+Pj4+IENoaWxkcmVuXG4gIHZhciB3cmFwcGVkQ2hpbGRMaXN0ID0gaW50ZXJuYWxNb2RlICE9PSAnaG9yaXpvbnRhbCcgfHwgZGlzYWJsZWRPdmVyZmxvdyA/IGNoaWxkTGlzdCA6XG4gIC8vIE5lZWQgd3JhcCBmb3Igb3ZlcmZsb3cgZHJvcGRvd24gdGhhdCBkbyBub3QgcmVzcG9uc2UgZm9yIG9wZW5cbiAgY2hpbGRMaXN0Lm1hcChmdW5jdGlvbiAoY2hpbGQsIGluZGV4KSB7XG4gICAgcmV0dXJuIChcbiAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgIC8vIEFsd2F5cyB3cmFwIHByb3ZpZGVyIHRvIGF2b2lkIHN1YiBub2RlIHJlLW1vdW50XG4gICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KE1lbnVDb250ZXh0UHJvdmlkZXIsIHtcbiAgICAgICAga2V5OiBjaGlsZC5rZXksXG4gICAgICAgIG92ZXJmbG93RGlzYWJsZWQ6IGluZGV4ID4gbGFzdFZpc2libGVJbmRleFxuICAgICAgfSwgY2hpbGQpXG4gICAgKTtcbiAgfSk7XG5cbiAgLy8gPj4+Pj4gQ29udGFpbmVyXG4gIHZhciBjb250YWluZXIgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChPdmVyZmxvdywgX2V4dGVuZHMoe1xuICAgIGlkOiBpZCxcbiAgICByZWY6IGNvbnRhaW5lclJlZixcbiAgICBwcmVmaXhDbHM6IFwiXCIuY29uY2F0KHByZWZpeENscywgXCItb3ZlcmZsb3dcIiksXG4gICAgY29tcG9uZW50OiBcInVsXCIsXG4gICAgaXRlbUNvbXBvbmVudDogTWVudUl0ZW0sXG4gICAgY2xhc3NOYW1lOiBjbGFzc05hbWVzKHByZWZpeENscywgXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1yb290XCIpLCBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLVwiKS5jb25jYXQoaW50ZXJuYWxNb2RlKSwgY2xhc3NOYW1lLCBfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KHt9LCBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLWlubGluZS1jb2xsYXBzZWRcIiksIGludGVybmFsSW5saW5lQ29sbGFwc2VkKSwgXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1ydGxcIiksIGlzUnRsKSwgcm9vdENsYXNzTmFtZSksXG4gICAgZGlyOiBkaXJlY3Rpb24sXG4gICAgc3R5bGU6IHN0eWxlLFxuICAgIHJvbGU6IFwibWVudVwiLFxuICAgIHRhYkluZGV4OiB0YWJJbmRleCxcbiAgICBkYXRhOiB3cmFwcGVkQ2hpbGRMaXN0LFxuICAgIHJlbmRlclJhd0l0ZW06IGZ1bmN0aW9uIHJlbmRlclJhd0l0ZW0obm9kZSkge1xuICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfSxcbiAgICByZW5kZXJSYXdSZXN0OiBmdW5jdGlvbiByZW5kZXJSYXdSZXN0KG9taXRJdGVtcykge1xuICAgICAgLy8gV2UgdXNlIG9yaWdpbiBsaXN0IHNpbmNlIHdyYXBwZWQgbGlzdCB1c2UgY29udGV4dCB0byBwcmV2ZW50IG9wZW5cbiAgICAgIHZhciBsZW4gPSBvbWl0SXRlbXMubGVuZ3RoO1xuICAgICAgdmFyIG9yaWdpbk9taXRJdGVtcyA9IGxlbiA/IGNoaWxkTGlzdC5zbGljZSgtbGVuKSA6IG51bGw7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoU3ViTWVudSwge1xuICAgICAgICBldmVudEtleTogT1ZFUkZMT1dfS0VZLFxuICAgICAgICB0aXRsZTogb3ZlcmZsb3dlZEluZGljYXRvcixcbiAgICAgICAgZGlzYWJsZWQ6IGFsbFZpc2libGUsXG4gICAgICAgIGludGVybmFsUG9wdXBDbG9zZTogbGVuID09PSAwLFxuICAgICAgICBwb3B1cENsYXNzTmFtZTogb3ZlcmZsb3dlZEluZGljYXRvclBvcHVwQ2xhc3NOYW1lXG4gICAgICB9LCBvcmlnaW5PbWl0SXRlbXMpO1xuICAgIH0sXG4gICAgbWF4Q291bnQ6IGludGVybmFsTW9kZSAhPT0gJ2hvcml6b250YWwnIHx8IGRpc2FibGVkT3ZlcmZsb3cgPyBPdmVyZmxvdy5JTlZBTElEQVRFIDogT3ZlcmZsb3cuUkVTUE9OU0lWRSxcbiAgICBzc3I6IFwiZnVsbFwiLFxuICAgIFwiZGF0YS1tZW51LWxpc3RcIjogdHJ1ZSxcbiAgICBvblZpc2libGVDaGFuZ2U6IGZ1bmN0aW9uIG9uVmlzaWJsZUNoYW5nZShuZXdMYXN0SW5kZXgpIHtcbiAgICAgIHNldExhc3RWaXNpYmxlSW5kZXgobmV3TGFzdEluZGV4KTtcbiAgICB9LFxuICAgIG9uS2V5RG93bjogb25JbnRlcm5hbEtleURvd25cbiAgfSwgcmVzdFByb3BzKSk7XG5cbiAgLy8gPj4+Pj4gUmVuZGVyXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChQcml2YXRlQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBwcml2YXRlQ29udGV4dFxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJZENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogdXVpZFxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChNZW51Q29udGV4dFByb3ZpZGVyLCB7XG4gICAgcHJlZml4Q2xzOiBwcmVmaXhDbHMsXG4gICAgcm9vdENsYXNzTmFtZTogcm9vdENsYXNzTmFtZSxcbiAgICBtb2RlOiBpbnRlcm5hbE1vZGUsXG4gICAgb3BlbktleXM6IG1lcmdlZE9wZW5LZXlzLFxuICAgIHJ0bDogaXNSdGxcbiAgICAvLyBEaXNhYmxlZFxuICAgICxcbiAgICBkaXNhYmxlZDogZGlzYWJsZWRcbiAgICAvLyBNb3Rpb25cbiAgICAsXG4gICAgbW90aW9uOiBtb3VudGVkID8gbW90aW9uIDogbnVsbCxcbiAgICBkZWZhdWx0TW90aW9uczogbW91bnRlZCA/IGRlZmF1bHRNb3Rpb25zIDogbnVsbFxuICAgIC8vIEFjdGl2ZVxuICAgICxcbiAgICBhY3RpdmVLZXk6IG1lcmdlZEFjdGl2ZUtleSxcbiAgICBvbkFjdGl2ZTogb25BY3RpdmUsXG4gICAgb25JbmFjdGl2ZTogb25JbmFjdGl2ZVxuICAgIC8vIFNlbGVjdGlvblxuICAgICxcbiAgICBzZWxlY3RlZEtleXM6IG1lcmdlZFNlbGVjdEtleXNcbiAgICAvLyBMZXZlbFxuICAgICxcbiAgICBpbmxpbmVJbmRlbnQ6IGlubGluZUluZGVudFxuICAgIC8vIFBvcHVwXG4gICAgLFxuICAgIHN1Yk1lbnVPcGVuRGVsYXk6IHN1Yk1lbnVPcGVuRGVsYXksXG4gICAgc3ViTWVudUNsb3NlRGVsYXk6IHN1Yk1lbnVDbG9zZURlbGF5LFxuICAgIGZvcmNlU3ViTWVudVJlbmRlcjogZm9yY2VTdWJNZW51UmVuZGVyLFxuICAgIGJ1aWx0aW5QbGFjZW1lbnRzOiBidWlsdGluUGxhY2VtZW50cyxcbiAgICB0cmlnZ2VyU3ViTWVudUFjdGlvbjogdHJpZ2dlclN1Yk1lbnVBY3Rpb24sXG4gICAgZ2V0UG9wdXBDb250YWluZXI6IGdldFBvcHVwQ29udGFpbmVyXG4gICAgLy8gSWNvblxuICAgICxcbiAgICBpdGVtSWNvbjogaXRlbUljb24sXG4gICAgZXhwYW5kSWNvbjogZXhwYW5kSWNvblxuICAgIC8vIEV2ZW50c1xuICAgICxcbiAgICBvbkl0ZW1DbGljazogb25JbnRlcm5hbENsaWNrLFxuICAgIG9uT3BlbkNoYW5nZTogb25JbnRlcm5hbE9wZW5DaGFuZ2VcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUGF0aFVzZXJDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IHBhdGhVc2VyQ29udGV4dFxuICB9LCBjb250YWluZXIpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgc3R5bGU6IHtcbiAgICAgIGRpc3BsYXk6ICdub25lJ1xuICAgIH0sXG4gICAgXCJhcmlhLWhpZGRlblwiOiB0cnVlXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFBhdGhSZWdpc3RlckNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogcmVnaXN0ZXJQYXRoQ29udGV4dFxuICB9LCBtZWFzdXJlQ2hpbGRMaXN0KSkpKSk7XG59KTtcbmV4cG9ydCBkZWZhdWx0IE1lbnU7IiwiaW1wb3J0IF9kZWZpbmVQcm9wZXJ0eSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHlcIjtcbmltcG9ydCBfb2JqZWN0U3ByZWFkIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyXCI7XG5pbXBvcnQgX3RvQ29uc3VtYWJsZUFycmF5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b0NvbnN1bWFibGVBcnJheVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc1wiO1xuaW1wb3J0IF9jbGFzc0NhbGxDaGVjayBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY2xhc3NDYWxsQ2hlY2tcIjtcbmltcG9ydCBfY3JlYXRlQ2xhc3MgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NyZWF0ZUNsYXNzXCI7XG5pbXBvcnQgX2luaGVyaXRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c1wiO1xuaW1wb3J0IF9jcmVhdGVTdXBlciBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY3JlYXRlU3VwZXJcIjtcbnZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcImF0dHJpYnV0ZVwiLCBcImVsZW1lbnRSZWZcIl0sXG4gIF9leGNsdWRlZDIgPSBbXCJzdHlsZVwiLCBcImNsYXNzTmFtZVwiLCBcImV2ZW50S2V5XCIsIFwid2FybktleVwiLCBcImRpc2FibGVkXCIsIFwiaXRlbUljb25cIiwgXCJjaGlsZHJlblwiLCBcInJvbGVcIiwgXCJvbk1vdXNlRW50ZXJcIiwgXCJvbk1vdXNlTGVhdmVcIiwgXCJvbkNsaWNrXCIsIFwib25LZXlEb3duXCIsIFwib25Gb2N1c1wiXSxcbiAgX2V4Y2x1ZGVkMyA9IFtcImFjdGl2ZVwiXTtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IE92ZXJmbG93IGZyb20gJ3JjLW92ZXJmbG93JztcbmltcG9ydCBLZXlDb2RlIGZyb20gXCJyYy11dGlsL2VzL0tleUNvZGVcIjtcbmltcG9ydCBvbWl0IGZyb20gXCJyYy11dGlsL2VzL29taXRcIjtcbmltcG9ydCB7IHVzZUNvbXBvc2VSZWYgfSBmcm9tIFwicmMtdXRpbC9lcy9yZWZcIjtcbmltcG9ydCB3YXJuaW5nIGZyb20gXCJyYy11dGlsL2VzL3dhcm5pbmdcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZU1lbnVJZCB9IGZyb20gXCIuL2NvbnRleHQvSWRDb250ZXh0XCI7XG5pbXBvcnQgeyBNZW51Q29udGV4dCB9IGZyb20gXCIuL2NvbnRleHQvTWVudUNvbnRleHRcIjtcbmltcG9ydCB7IHVzZUZ1bGxQYXRoLCB1c2VNZWFzdXJlIH0gZnJvbSBcIi4vY29udGV4dC9QYXRoQ29udGV4dFwiO1xuaW1wb3J0IFByaXZhdGVDb250ZXh0IGZyb20gXCIuL2NvbnRleHQvUHJpdmF0ZUNvbnRleHRcIjtcbmltcG9ydCB1c2VBY3RpdmUgZnJvbSBcIi4vaG9va3MvdXNlQWN0aXZlXCI7XG5pbXBvcnQgdXNlRGlyZWN0aW9uU3R5bGUgZnJvbSBcIi4vaG9va3MvdXNlRGlyZWN0aW9uU3R5bGVcIjtcbmltcG9ydCBJY29uIGZyb20gXCIuL0ljb25cIjtcbmltcG9ydCB7IHdhcm5JdGVtUHJvcCB9IGZyb20gXCIuL3V0aWxzL3dhcm5VdGlsXCI7XG4vLyBTaW5jZSBNZW51IGV2ZW50IHByb3ZpZGUgdGhlIGBpbmZvLml0ZW1gIHdoaWNoIHBvaW50IHRvIHRoZSBNZW51SXRlbSBub2RlIGluc3RhbmNlLlxuLy8gV2UgaGF2ZSB0byB1c2UgY2xhc3MgY29tcG9uZW50IGhlcmUuXG4vLyBUaGlzIHNob3VsZCBiZSByZW1vdmVkIGZyb20gZG9jICYgYXBpIGluIGZ1dHVyZS5cbnZhciBMZWdhY3lNZW51SXRlbSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoTGVnYWN5TWVudUl0ZW0sIF9SZWFjdCRDb21wb25lbnQpO1xuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKExlZ2FjeU1lbnVJdGVtKTtcbiAgZnVuY3Rpb24gTGVnYWN5TWVudUl0ZW0oKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIExlZ2FjeU1lbnVJdGVtKTtcbiAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cbiAgX2NyZWF0ZUNsYXNzKExlZ2FjeU1lbnVJdGVtLCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgdGl0bGUgPSBfdGhpcyRwcm9wcy50aXRsZSxcbiAgICAgICAgYXR0cmlidXRlID0gX3RoaXMkcHJvcHMuYXR0cmlidXRlLFxuICAgICAgICBlbGVtZW50UmVmID0gX3RoaXMkcHJvcHMuZWxlbWVudFJlZixcbiAgICAgICAgcmVzdFByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzLCBfZXhjbHVkZWQpO1xuXG4gICAgICAvLyBIZXJlIHRoZSBwcm9wcyBhcmUgZXZlbnR1YWxseSBwYXNzZWQgdG8gdGhlIERPTSBlbGVtZW50LlxuICAgICAgLy8gUmVhY3QgZG9lcyBub3QgcmVjb2duaXplIG5vbi1zdGFuZGFyZCBhdHRyaWJ1dGVzLlxuICAgICAgLy8gVGhlcmVmb3JlLCByZW1vdmUgdGhlIHByb3BzIHRoYXQgaXMgbm90IHVzZWQgaGVyZS5cbiAgICAgIC8vIHJlZjogaHR0cHM6Ly9naXRodWIuY29tL2FudC1kZXNpZ24vYW50LWRlc2lnbi9pc3N1ZXMvNDEzOTVcbiAgICAgIHZhciBwYXNzZWRQcm9wcyA9IG9taXQocmVzdFByb3BzLCBbJ2V2ZW50S2V5JywgJ3BvcHVwQ2xhc3NOYW1lJywgJ3BvcHVwT2Zmc2V0JywgJ29uVGl0bGVDbGljayddKTtcbiAgICAgIHdhcm5pbmcoIWF0dHJpYnV0ZSwgJ2BhdHRyaWJ1dGVgIG9mIE1lbnUuSXRlbSBpcyBkZXByZWNhdGVkLiBQbGVhc2UgcGFzcyBhdHRyaWJ1dGUgZGlyZWN0bHkuJyk7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoT3ZlcmZsb3cuSXRlbSwgX2V4dGVuZHMoe30sIGF0dHJpYnV0ZSwge1xuICAgICAgICB0aXRsZTogdHlwZW9mIHRpdGxlID09PSAnc3RyaW5nJyA/IHRpdGxlIDogdW5kZWZpbmVkXG4gICAgICB9LCBwYXNzZWRQcm9wcywge1xuICAgICAgICByZWY6IGVsZW1lbnRSZWZcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1dKTtcbiAgcmV0dXJuIExlZ2FjeU1lbnVJdGVtO1xufShSZWFjdC5Db21wb25lbnQpO1xuLyoqXG4gKiBSZWFsIE1lbnUgSXRlbSBjb21wb25lbnRcbiAqL1xudmFyIEludGVybmFsTWVudUl0ZW0gPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiAocHJvcHMsIHJlZikge1xuICB2YXIgc3R5bGUgPSBwcm9wcy5zdHlsZSxcbiAgICBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUsXG4gICAgZXZlbnRLZXkgPSBwcm9wcy5ldmVudEtleSxcbiAgICB3YXJuS2V5ID0gcHJvcHMud2FybktleSxcbiAgICBkaXNhYmxlZCA9IHByb3BzLmRpc2FibGVkLFxuICAgIGl0ZW1JY29uID0gcHJvcHMuaXRlbUljb24sXG4gICAgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbixcbiAgICByb2xlID0gcHJvcHMucm9sZSxcbiAgICBvbk1vdXNlRW50ZXIgPSBwcm9wcy5vbk1vdXNlRW50ZXIsXG4gICAgb25Nb3VzZUxlYXZlID0gcHJvcHMub25Nb3VzZUxlYXZlLFxuICAgIG9uQ2xpY2sgPSBwcm9wcy5vbkNsaWNrLFxuICAgIG9uS2V5RG93biA9IHByb3BzLm9uS2V5RG93bixcbiAgICBvbkZvY3VzID0gcHJvcHMub25Gb2N1cyxcbiAgICByZXN0UHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMocHJvcHMsIF9leGNsdWRlZDIpO1xuICB2YXIgZG9tRGF0YUlkID0gdXNlTWVudUlkKGV2ZW50S2V5KTtcbiAgdmFyIF9SZWFjdCR1c2VDb250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChNZW51Q29udGV4dCksXG4gICAgcHJlZml4Q2xzID0gX1JlYWN0JHVzZUNvbnRleHQucHJlZml4Q2xzLFxuICAgIG9uSXRlbUNsaWNrID0gX1JlYWN0JHVzZUNvbnRleHQub25JdGVtQ2xpY2ssXG4gICAgY29udGV4dERpc2FibGVkID0gX1JlYWN0JHVzZUNvbnRleHQuZGlzYWJsZWQsXG4gICAgb3ZlcmZsb3dEaXNhYmxlZCA9IF9SZWFjdCR1c2VDb250ZXh0Lm92ZXJmbG93RGlzYWJsZWQsXG4gICAgY29udGV4dEl0ZW1JY29uID0gX1JlYWN0JHVzZUNvbnRleHQuaXRlbUljb24sXG4gICAgc2VsZWN0ZWRLZXlzID0gX1JlYWN0JHVzZUNvbnRleHQuc2VsZWN0ZWRLZXlzLFxuICAgIG9uQWN0aXZlID0gX1JlYWN0JHVzZUNvbnRleHQub25BY3RpdmU7XG4gIHZhciBfUmVhY3QkdXNlQ29udGV4dDIgPSBSZWFjdC51c2VDb250ZXh0KFByaXZhdGVDb250ZXh0KSxcbiAgICBfaW50ZXJuYWxSZW5kZXJNZW51SXRlbSA9IF9SZWFjdCR1c2VDb250ZXh0Mi5faW50ZXJuYWxSZW5kZXJNZW51SXRlbTtcbiAgdmFyIGl0ZW1DbHMgPSBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLWl0ZW1cIik7XG4gIHZhciBsZWdhY3lNZW51SXRlbVJlZiA9IFJlYWN0LnVzZVJlZigpO1xuICB2YXIgZWxlbWVudFJlZiA9IFJlYWN0LnVzZVJlZigpO1xuICB2YXIgbWVyZ2VkRGlzYWJsZWQgPSBjb250ZXh0RGlzYWJsZWQgfHwgZGlzYWJsZWQ7XG4gIHZhciBtZXJnZWRFbGVSZWYgPSB1c2VDb21wb3NlUmVmKHJlZiwgZWxlbWVudFJlZik7XG4gIHZhciBjb25uZWN0ZWRLZXlzID0gdXNlRnVsbFBhdGgoZXZlbnRLZXkpO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IFdhcm4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybktleSkge1xuICAgIHdhcm5pbmcoZmFsc2UsICdNZW51SXRlbSBzaG91bGQgbm90IGxlYXZlIHVuZGVmaW5lZCBga2V5YC4nKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09IEluZm8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIGdldEV2ZW50SW5mbyA9IGZ1bmN0aW9uIGdldEV2ZW50SW5mbyhlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGtleTogZXZlbnRLZXksXG4gICAgICAvLyBOb3RlOiBGb3IgbGVnYWN5IGNvZGUgaXMgcmV2ZXJzZWQgd2hpY2ggbm90IGxpa2Ugb3RoZXIgYW50ZCBjb21wb25lbnRcbiAgICAgIGtleVBhdGg6IF90b0NvbnN1bWFibGVBcnJheShjb25uZWN0ZWRLZXlzKS5yZXZlcnNlKCksXG4gICAgICBpdGVtOiBsZWdhY3lNZW51SXRlbVJlZi5jdXJyZW50LFxuICAgICAgZG9tRXZlbnQ6IGVcbiAgICB9O1xuICB9O1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09IEljb24gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIG1lcmdlZEl0ZW1JY29uID0gaXRlbUljb24gfHwgY29udGV4dEl0ZW1JY29uO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT0gQWN0aXZlID09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIF91c2VBY3RpdmUgPSB1c2VBY3RpdmUoZXZlbnRLZXksIG1lcmdlZERpc2FibGVkLCBvbk1vdXNlRW50ZXIsIG9uTW91c2VMZWF2ZSksXG4gICAgYWN0aXZlID0gX3VzZUFjdGl2ZS5hY3RpdmUsXG4gICAgYWN0aXZlUHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3VzZUFjdGl2ZSwgX2V4Y2x1ZGVkMyk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PSBTZWxlY3QgPT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgc2VsZWN0ZWQgPSBzZWxlY3RlZEtleXMuaW5jbHVkZXMoZXZlbnRLZXkpO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PSBEaXJlY3Rpb25TdHlsZSA9PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIGRpcmVjdGlvblN0eWxlID0gdXNlRGlyZWN0aW9uU3R5bGUoY29ubmVjdGVkS2V5cy5sZW5ndGgpO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT0gRXZlbnRzID09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIG9uSW50ZXJuYWxDbGljayA9IGZ1bmN0aW9uIG9uSW50ZXJuYWxDbGljayhlKSB7XG4gICAgaWYgKG1lcmdlZERpc2FibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBpbmZvID0gZ2V0RXZlbnRJbmZvKGUpO1xuICAgIG9uQ2xpY2sgPT09IG51bGwgfHwgb25DbGljayA9PT0gdm9pZCAwIHx8IG9uQ2xpY2sod2Fybkl0ZW1Qcm9wKGluZm8pKTtcbiAgICBvbkl0ZW1DbGljayhpbmZvKTtcbiAgfTtcbiAgdmFyIG9uSW50ZXJuYWxLZXlEb3duID0gZnVuY3Rpb24gb25JbnRlcm5hbEtleURvd24oZSkge1xuICAgIG9uS2V5RG93biA9PT0gbnVsbCB8fCBvbktleURvd24gPT09IHZvaWQgMCB8fCBvbktleURvd24oZSk7XG4gICAgaWYgKGUud2hpY2ggPT09IEtleUNvZGUuRU5URVIpIHtcbiAgICAgIHZhciBpbmZvID0gZ2V0RXZlbnRJbmZvKGUpO1xuXG4gICAgICAvLyBMZWdhY3kuIEtleSB3aWxsIGFsc28gdHJpZ2dlciBjbGljayBldmVudFxuICAgICAgb25DbGljayA9PT0gbnVsbCB8fCBvbkNsaWNrID09PSB2b2lkIDAgfHwgb25DbGljayh3YXJuSXRlbVByb3AoaW5mbykpO1xuICAgICAgb25JdGVtQ2xpY2soaW5mbyk7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBVc2VkIGZvciBhY2Nlc3NpYmlsaXR5LiBIZWxwZXIgd2lsbCBmb2N1cyBlbGVtZW50IHdpdGhvdXQga2V5IGJvYXJkLlxuICAgKiBXZSBzaG91bGQgbWFudWFsbHkgdHJpZ2dlciBhbiBhY3RpdmVcbiAgICovXG4gIHZhciBvbkludGVybmFsRm9jdXMgPSBmdW5jdGlvbiBvbkludGVybmFsRm9jdXMoZSkge1xuICAgIG9uQWN0aXZlKGV2ZW50S2V5KTtcbiAgICBvbkZvY3VzID09PSBudWxsIHx8IG9uRm9jdXMgPT09IHZvaWQgMCB8fCBvbkZvY3VzKGUpO1xuICB9O1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT0gUmVuZGVyID09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIG9wdGlvblJvbGVQcm9wcyA9IHt9O1xuICBpZiAocHJvcHMucm9sZSA9PT0gJ29wdGlvbicpIHtcbiAgICBvcHRpb25Sb2xlUHJvcHNbJ2FyaWEtc2VsZWN0ZWQnXSA9IHNlbGVjdGVkO1xuICB9XG4gIHZhciByZW5kZXJOb2RlID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTGVnYWN5TWVudUl0ZW0sIF9leHRlbmRzKHtcbiAgICByZWY6IGxlZ2FjeU1lbnVJdGVtUmVmLFxuICAgIGVsZW1lbnRSZWY6IG1lcmdlZEVsZVJlZixcbiAgICByb2xlOiByb2xlID09PSBudWxsID8gJ25vbmUnIDogcm9sZSB8fCAnbWVudWl0ZW0nLFxuICAgIHRhYkluZGV4OiBkaXNhYmxlZCA/IG51bGwgOiAtMSxcbiAgICBcImRhdGEtbWVudS1pZFwiOiBvdmVyZmxvd0Rpc2FibGVkICYmIGRvbURhdGFJZCA/IG51bGwgOiBkb21EYXRhSWRcbiAgfSwgb21pdChyZXN0UHJvcHMsIFsnZXh0cmEnXSksIGFjdGl2ZVByb3BzLCBvcHRpb25Sb2xlUHJvcHMsIHtcbiAgICBjb21wb25lbnQ6IFwibGlcIixcbiAgICBcImFyaWEtZGlzYWJsZWRcIjogZGlzYWJsZWQsXG4gICAgc3R5bGU6IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgZGlyZWN0aW9uU3R5bGUpLCBzdHlsZSksXG4gICAgY2xhc3NOYW1lOiBjbGFzc05hbWVzKGl0ZW1DbHMsIF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KHt9LCBcIlwiLmNvbmNhdChpdGVtQ2xzLCBcIi1hY3RpdmVcIiksIGFjdGl2ZSksIFwiXCIuY29uY2F0KGl0ZW1DbHMsIFwiLXNlbGVjdGVkXCIpLCBzZWxlY3RlZCksIFwiXCIuY29uY2F0KGl0ZW1DbHMsIFwiLWRpc2FibGVkXCIpLCBtZXJnZWREaXNhYmxlZCksIGNsYXNzTmFtZSksXG4gICAgb25DbGljazogb25JbnRlcm5hbENsaWNrLFxuICAgIG9uS2V5RG93bjogb25JbnRlcm5hbEtleURvd24sXG4gICAgb25Gb2N1czogb25JbnRlcm5hbEZvY3VzXG4gIH0pLCBjaGlsZHJlbiwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoSWNvbiwge1xuICAgIHByb3BzOiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHByb3BzKSwge30sIHtcbiAgICAgIGlzU2VsZWN0ZWQ6IHNlbGVjdGVkXG4gICAgfSksXG4gICAgaWNvbjogbWVyZ2VkSXRlbUljb25cbiAgfSkpO1xuICBpZiAoX2ludGVybmFsUmVuZGVyTWVudUl0ZW0pIHtcbiAgICByZW5kZXJOb2RlID0gX2ludGVybmFsUmVuZGVyTWVudUl0ZW0ocmVuZGVyTm9kZSwgcHJvcHMsIHtcbiAgICAgIHNlbGVjdGVkOiBzZWxlY3RlZFxuICAgIH0pO1xuICB9XG4gIHJldHVybiByZW5kZXJOb2RlO1xufSk7XG5mdW5jdGlvbiBNZW51SXRlbShwcm9wcywgcmVmKSB7XG4gIHZhciBldmVudEtleSA9IHByb3BzLmV2ZW50S2V5O1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09IFJlY29yZCBLZXlQYXRoID09PT09PT09PT09PT09PT09PT09XG4gIHZhciBtZWFzdXJlID0gdXNlTWVhc3VyZSgpO1xuICB2YXIgY29ubmVjdGVkS2V5UGF0aCA9IHVzZUZ1bGxQYXRoKGV2ZW50S2V5KTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAobWVhc3VyZSkge1xuICAgICAgbWVhc3VyZS5yZWdpc3RlclBhdGgoZXZlbnRLZXksIGNvbm5lY3RlZEtleVBhdGgpO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbWVhc3VyZS51bnJlZ2lzdGVyUGF0aChldmVudEtleSwgY29ubmVjdGVkS2V5UGF0aCk7XG4gICAgICB9O1xuICAgIH1cbiAgfSwgW2Nvbm5lY3RlZEtleVBhdGhdKTtcbiAgaWYgKG1lYXN1cmUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PSBSZW5kZXIgPT09PT09PT09PT09PT09PT09PT09PT09XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJbnRlcm5hbE1lbnVJdGVtLCBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICByZWY6IHJlZlxuICB9KSk7XG59XG5leHBvcnQgZGVmYXVsdCAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihNZW51SXRlbSk7IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc1wiO1xudmFyIF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcInRpdGxlXCIsIFwiZXZlbnRLZXlcIiwgXCJjaGlsZHJlblwiXTtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IG9taXQgZnJvbSBcInJjLXV0aWwvZXMvb21pdFwiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgTWVudUNvbnRleHQgfSBmcm9tIFwiLi9jb250ZXh0L01lbnVDb250ZXh0XCI7XG5pbXBvcnQgeyB1c2VGdWxsUGF0aCwgdXNlTWVhc3VyZSB9IGZyb20gXCIuL2NvbnRleHQvUGF0aENvbnRleHRcIjtcbmltcG9ydCB7IHBhcnNlQ2hpbGRyZW4gfSBmcm9tIFwiLi91dGlscy9jb21tb25VdGlsXCI7XG52YXIgSW50ZXJuYWxNZW51SXRlbUdyb3VwID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gKHByb3BzLCByZWYpIHtcbiAgdmFyIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSxcbiAgICB0aXRsZSA9IHByb3BzLnRpdGxlLFxuICAgIGV2ZW50S2V5ID0gcHJvcHMuZXZlbnRLZXksXG4gICAgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbixcbiAgICByZXN0UHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMocHJvcHMsIF9leGNsdWRlZCk7XG4gIHZhciBfUmVhY3QkdXNlQ29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoTWVudUNvbnRleHQpLFxuICAgIHByZWZpeENscyA9IF9SZWFjdCR1c2VDb250ZXh0LnByZWZpeENscztcbiAgdmFyIGdyb3VwUHJlZml4Q2xzID0gXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1pdGVtLWdyb3VwXCIpO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaVwiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgcm9sZTogXCJwcmVzZW50YXRpb25cIlxuICB9LCByZXN0UHJvcHMsIHtcbiAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKGUpIHtcbiAgICAgIHJldHVybiBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH0sXG4gICAgY2xhc3NOYW1lOiBjbGFzc05hbWVzKGdyb3VwUHJlZml4Q2xzLCBjbGFzc05hbWUpXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgcm9sZTogXCJwcmVzZW50YXRpb25cIixcbiAgICBjbGFzc05hbWU6IFwiXCIuY29uY2F0KGdyb3VwUHJlZml4Q2xzLCBcIi10aXRsZVwiKSxcbiAgICB0aXRsZTogdHlwZW9mIHRpdGxlID09PSAnc3RyaW5nJyA/IHRpdGxlIDogdW5kZWZpbmVkXG4gIH0sIHRpdGxlKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ1bFwiLCB7XG4gICAgcm9sZTogXCJncm91cFwiLFxuICAgIGNsYXNzTmFtZTogXCJcIi5jb25jYXQoZ3JvdXBQcmVmaXhDbHMsIFwiLWxpc3RcIilcbiAgfSwgY2hpbGRyZW4pKTtcbn0pO1xudmFyIE1lbnVJdGVtR3JvdXAgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiAocHJvcHMsIHJlZikge1xuICB2YXIgZXZlbnRLZXkgPSBwcm9wcy5ldmVudEtleSxcbiAgICBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuO1xuICB2YXIgY29ubmVjdGVkS2V5UGF0aCA9IHVzZUZ1bGxQYXRoKGV2ZW50S2V5KTtcbiAgdmFyIGNoaWxkTGlzdCA9IHBhcnNlQ2hpbGRyZW4oY2hpbGRyZW4sIGNvbm5lY3RlZEtleVBhdGgpO1xuICB2YXIgbWVhc3VyZSA9IHVzZU1lYXN1cmUoKTtcbiAgaWYgKG1lYXN1cmUpIHtcbiAgICByZXR1cm4gY2hpbGRMaXN0O1xuICB9XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJbnRlcm5hbE1lbnVJdGVtR3JvdXAsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZlxuICB9LCBvbWl0KHByb3BzLCBbJ3dhcm5LZXknXSkpLCBjaGlsZExpc3QpO1xufSk7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBNZW51SXRlbUdyb3VwLmRpc3BsYXlOYW1lID0gJ01lbnVJdGVtR3JvdXAnO1xufVxuZXhwb3J0IGRlZmF1bHQgTWVudUl0ZW1Hcm91cDsiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0U3ByZWFkIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyXCI7XG5pbXBvcnQgX3NsaWNlZFRvQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXlcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBDU1NNb3Rpb24gZnJvbSAncmMtbW90aW9uJztcbmltcG9ydCB7IGdldE1vdGlvbiB9IGZyb20gXCIuLi91dGlscy9tb3Rpb25VdGlsXCI7XG5pbXBvcnQgTWVudUNvbnRleHRQcm92aWRlciwgeyBNZW51Q29udGV4dCB9IGZyb20gXCIuLi9jb250ZXh0L01lbnVDb250ZXh0XCI7XG5pbXBvcnQgU3ViTWVudUxpc3QgZnJvbSBcIi4vU3ViTWVudUxpc3RcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIElubGluZVN1Yk1lbnVMaXN0KF9yZWYpIHtcbiAgdmFyIGlkID0gX3JlZi5pZCxcbiAgICBvcGVuID0gX3JlZi5vcGVuLFxuICAgIGtleVBhdGggPSBfcmVmLmtleVBhdGgsXG4gICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuO1xuICB2YXIgZml4ZWRNb2RlID0gJ2lubGluZSc7XG4gIHZhciBfUmVhY3QkdXNlQ29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoTWVudUNvbnRleHQpLFxuICAgIHByZWZpeENscyA9IF9SZWFjdCR1c2VDb250ZXh0LnByZWZpeENscyxcbiAgICBmb3JjZVN1Yk1lbnVSZW5kZXIgPSBfUmVhY3QkdXNlQ29udGV4dC5mb3JjZVN1Yk1lbnVSZW5kZXIsXG4gICAgbW90aW9uID0gX1JlYWN0JHVzZUNvbnRleHQubW90aW9uLFxuICAgIGRlZmF1bHRNb3Rpb25zID0gX1JlYWN0JHVzZUNvbnRleHQuZGVmYXVsdE1vdGlvbnMsXG4gICAgbW9kZSA9IF9SZWFjdCR1c2VDb250ZXh0Lm1vZGU7XG5cbiAgLy8gQWx3YXlzIHVzZSBsYXRlc3QgbW9kZSBjaGVja1xuICB2YXIgc2FtZU1vZGVSZWYgPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuICBzYW1lTW9kZVJlZi5jdXJyZW50ID0gbW9kZSA9PT0gZml4ZWRNb2RlO1xuXG4gIC8vIFdlIHJlY29yZCBgZGVzdHJveWAgbWFyayBoZXJlIHNpbmNlIHdoZW4gbW9kZSBjaGFuZ2UgZnJvbSBgaW5saW5lYCB0byBvdGhlcnMuXG4gIC8vIFRoZSBpbmxpbmUgbGlzdCBzaG91bGQgcmVtb3ZlIHdoZW4gbW90aW9uIGVuZC5cbiAgdmFyIF9SZWFjdCR1c2VTdGF0ZSA9IFJlYWN0LnVzZVN0YXRlKCFzYW1lTW9kZVJlZi5jdXJyZW50KSxcbiAgICBfUmVhY3QkdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX1JlYWN0JHVzZVN0YXRlLCAyKSxcbiAgICBkZXN0cm95ID0gX1JlYWN0JHVzZVN0YXRlMlswXSxcbiAgICBzZXREZXN0cm95ID0gX1JlYWN0JHVzZVN0YXRlMlsxXTtcbiAgdmFyIG1lcmdlZE9wZW4gPSBzYW1lTW9kZVJlZi5jdXJyZW50ID8gb3BlbiA6IGZhbHNlO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBFZmZlY3QgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFJlc2V0IGRlc3Ryb3kgc3RhdGUgd2hlbiBtb2RlIGNoYW5nZSBiYWNrXG4gIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHNhbWVNb2RlUmVmLmN1cnJlbnQpIHtcbiAgICAgIHNldERlc3Ryb3koZmFsc2UpO1xuICAgIH1cbiAgfSwgW21vZGVdKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gUmVuZGVyID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgbWVyZ2VkTW90aW9uID0gX29iamVjdFNwcmVhZCh7fSwgZ2V0TW90aW9uKGZpeGVkTW9kZSwgbW90aW9uLCBkZWZhdWx0TW90aW9ucykpO1xuXG4gIC8vIE5vIG5lZWQgYXBwZWFyIHNpbmNlIG5lc3QgaW5saW5lQ29sbGFwc2UgY2hhbmdlZFxuICBpZiAoa2V5UGF0aC5sZW5ndGggPiAxKSB7XG4gICAgbWVyZ2VkTW90aW9uLm1vdGlvbkFwcGVhciA9IGZhbHNlO1xuICB9XG5cbiAgLy8gSGlkZSBpbmxpbmUgbGlzdCB3aGVuIG1vZGUgY2hhbmdlZCBhbmQgbW90aW9uIGVuZFxuICB2YXIgb3JpZ2luT25WaXNpYmxlQ2hhbmdlZCA9IG1lcmdlZE1vdGlvbi5vblZpc2libGVDaGFuZ2VkO1xuICBtZXJnZWRNb3Rpb24ub25WaXNpYmxlQ2hhbmdlZCA9IGZ1bmN0aW9uIChuZXdWaXNpYmxlKSB7XG4gICAgaWYgKCFzYW1lTW9kZVJlZi5jdXJyZW50ICYmICFuZXdWaXNpYmxlKSB7XG4gICAgICBzZXREZXN0cm95KHRydWUpO1xuICAgIH1cbiAgICByZXR1cm4gb3JpZ2luT25WaXNpYmxlQ2hhbmdlZCA9PT0gbnVsbCB8fCBvcmlnaW5PblZpc2libGVDaGFuZ2VkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcmlnaW5PblZpc2libGVDaGFuZ2VkKG5ld1Zpc2libGUpO1xuICB9O1xuICBpZiAoZGVzdHJveSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChNZW51Q29udGV4dFByb3ZpZGVyLCB7XG4gICAgbW9kZTogZml4ZWRNb2RlLFxuICAgIGxvY2tlZDogIXNhbWVNb2RlUmVmLmN1cnJlbnRcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQ1NTTW90aW9uLCBfZXh0ZW5kcyh7XG4gICAgdmlzaWJsZTogbWVyZ2VkT3BlblxuICB9LCBtZXJnZWRNb3Rpb24sIHtcbiAgICBmb3JjZVJlbmRlcjogZm9yY2VTdWJNZW51UmVuZGVyLFxuICAgIHJlbW92ZU9uTGVhdmU6IGZhbHNlLFxuICAgIGxlYXZlZENsYXNzTmFtZTogXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1oaWRkZW5cIilcbiAgfSksIGZ1bmN0aW9uIChfcmVmMikge1xuICAgIHZhciBtb3Rpb25DbGFzc05hbWUgPSBfcmVmMi5jbGFzc05hbWUsXG4gICAgICBtb3Rpb25TdHlsZSA9IF9yZWYyLnN0eWxlO1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChTdWJNZW51TGlzdCwge1xuICAgICAgaWQ6IGlkLFxuICAgICAgY2xhc3NOYW1lOiBtb3Rpb25DbGFzc05hbWUsXG4gICAgICBzdHlsZTogbW90aW9uU3R5bGVcbiAgICB9LCBjaGlsZHJlbik7XG4gIH0pKTtcbn0iLCJpbXBvcnQgX2RlZmluZVByb3BlcnR5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eVwiO1xuaW1wb3J0IF9vYmplY3RTcHJlYWQgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFNwcmVhZDJcIjtcbmltcG9ydCBfc2xpY2VkVG9BcnJheSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheVwiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFRyaWdnZXIgZnJvbSAnQHJjLWNvbXBvbmVudC90cmlnZ2VyJztcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHJhZiBmcm9tIFwicmMtdXRpbC9lcy9yYWZcIjtcbmltcG9ydCB7IE1lbnVDb250ZXh0IH0gZnJvbSBcIi4uL2NvbnRleHQvTWVudUNvbnRleHRcIjtcbmltcG9ydCB7IHBsYWNlbWVudHMsIHBsYWNlbWVudHNSdGwgfSBmcm9tIFwiLi4vcGxhY2VtZW50c1wiO1xuaW1wb3J0IHsgZ2V0TW90aW9uIH0gZnJvbSBcIi4uL3V0aWxzL21vdGlvblV0aWxcIjtcbnZhciBwb3B1cFBsYWNlbWVudE1hcCA9IHtcbiAgaG9yaXpvbnRhbDogJ2JvdHRvbUxlZnQnLFxuICB2ZXJ0aWNhbDogJ3JpZ2h0VG9wJyxcbiAgJ3ZlcnRpY2FsLWxlZnQnOiAncmlnaHRUb3AnLFxuICAndmVydGljYWwtcmlnaHQnOiAnbGVmdFRvcCdcbn07XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBQb3B1cFRyaWdnZXIoX3JlZikge1xuICB2YXIgcHJlZml4Q2xzID0gX3JlZi5wcmVmaXhDbHMsXG4gICAgdmlzaWJsZSA9IF9yZWYudmlzaWJsZSxcbiAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgcG9wdXAgPSBfcmVmLnBvcHVwLFxuICAgIHBvcHVwU3R5bGUgPSBfcmVmLnBvcHVwU3R5bGUsXG4gICAgcG9wdXBDbGFzc05hbWUgPSBfcmVmLnBvcHVwQ2xhc3NOYW1lLFxuICAgIHBvcHVwT2Zmc2V0ID0gX3JlZi5wb3B1cE9mZnNldCxcbiAgICBkaXNhYmxlZCA9IF9yZWYuZGlzYWJsZWQsXG4gICAgbW9kZSA9IF9yZWYubW9kZSxcbiAgICBvblZpc2libGVDaGFuZ2UgPSBfcmVmLm9uVmlzaWJsZUNoYW5nZTtcbiAgdmFyIF9SZWFjdCR1c2VDb250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChNZW51Q29udGV4dCksXG4gICAgZ2V0UG9wdXBDb250YWluZXIgPSBfUmVhY3QkdXNlQ29udGV4dC5nZXRQb3B1cENvbnRhaW5lcixcbiAgICBydGwgPSBfUmVhY3QkdXNlQ29udGV4dC5ydGwsXG4gICAgc3ViTWVudU9wZW5EZWxheSA9IF9SZWFjdCR1c2VDb250ZXh0LnN1Yk1lbnVPcGVuRGVsYXksXG4gICAgc3ViTWVudUNsb3NlRGVsYXkgPSBfUmVhY3QkdXNlQ29udGV4dC5zdWJNZW51Q2xvc2VEZWxheSxcbiAgICBidWlsdGluUGxhY2VtZW50cyA9IF9SZWFjdCR1c2VDb250ZXh0LmJ1aWx0aW5QbGFjZW1lbnRzLFxuICAgIHRyaWdnZXJTdWJNZW51QWN0aW9uID0gX1JlYWN0JHVzZUNvbnRleHQudHJpZ2dlclN1Yk1lbnVBY3Rpb24sXG4gICAgZm9yY2VTdWJNZW51UmVuZGVyID0gX1JlYWN0JHVzZUNvbnRleHQuZm9yY2VTdWJNZW51UmVuZGVyLFxuICAgIHJvb3RDbGFzc05hbWUgPSBfUmVhY3QkdXNlQ29udGV4dC5yb290Q2xhc3NOYW1lLFxuICAgIG1vdGlvbiA9IF9SZWFjdCR1c2VDb250ZXh0Lm1vdGlvbixcbiAgICBkZWZhdWx0TW90aW9ucyA9IF9SZWFjdCR1c2VDb250ZXh0LmRlZmF1bHRNb3Rpb25zO1xuICB2YXIgX1JlYWN0JHVzZVN0YXRlID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpLFxuICAgIF9SZWFjdCR1c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfUmVhY3QkdXNlU3RhdGUsIDIpLFxuICAgIGlubmVyVmlzaWJsZSA9IF9SZWFjdCR1c2VTdGF0ZTJbMF0sXG4gICAgc2V0SW5uZXJWaXNpYmxlID0gX1JlYWN0JHVzZVN0YXRlMlsxXTtcbiAgdmFyIHBsYWNlbWVudCA9IHJ0bCA/IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgcGxhY2VtZW50c1J0bCksIGJ1aWx0aW5QbGFjZW1lbnRzKSA6IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgcGxhY2VtZW50cyksIGJ1aWx0aW5QbGFjZW1lbnRzKTtcbiAgdmFyIHBvcHVwUGxhY2VtZW50ID0gcG9wdXBQbGFjZW1lbnRNYXBbbW9kZV07XG4gIHZhciB0YXJnZXRNb3Rpb24gPSBnZXRNb3Rpb24obW9kZSwgbW90aW9uLCBkZWZhdWx0TW90aW9ucyk7XG4gIHZhciB0YXJnZXRNb3Rpb25SZWYgPSBSZWFjdC51c2VSZWYodGFyZ2V0TW90aW9uKTtcbiAgaWYgKG1vZGUgIT09ICdpbmxpbmUnKSB7XG4gICAgLyoqXG4gICAgICogUG9wdXBUcmlnZ2VyIGlzIG9ubHkgdXNlZCBmb3IgdmVydGljYWwgYW5kIGhvcml6b250YWwgdHlwZXMuXG4gICAgICogV2hlbiBjb2xsYXBzZWQgaXMgdW5mb2xkZWQsIHRoZSBpbmxpbmUgYW5pbWF0aW9uIHdpbGwgZGVzdHJveSB0aGUgdmVydGljYWwgYW5pbWF0aW9uLlxuICAgICAqL1xuICAgIHRhcmdldE1vdGlvblJlZi5jdXJyZW50ID0gdGFyZ2V0TW90aW9uO1xuICB9XG4gIHZhciBtZXJnZWRNb3Rpb24gPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHRhcmdldE1vdGlvblJlZi5jdXJyZW50KSwge30sIHtcbiAgICBsZWF2ZWRDbGFzc05hbWU6IFwiXCIuY29uY2F0KHByZWZpeENscywgXCItaGlkZGVuXCIpLFxuICAgIHJlbW92ZU9uTGVhdmU6IGZhbHNlLFxuICAgIG1vdGlvbkFwcGVhcjogdHJ1ZVxuICB9KTtcblxuICAvLyBEZWxheSB0byBjaGFuZ2UgdmlzaWJsZVxuICB2YXIgdmlzaWJsZVJlZiA9IFJlYWN0LnVzZVJlZigpO1xuICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHZpc2libGVSZWYuY3VycmVudCA9IHJhZihmdW5jdGlvbiAoKSB7XG4gICAgICBzZXRJbm5lclZpc2libGUodmlzaWJsZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJhZi5jYW5jZWwodmlzaWJsZVJlZi5jdXJyZW50KTtcbiAgICB9O1xuICB9LCBbdmlzaWJsZV0pO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVHJpZ2dlciwge1xuICAgIHByZWZpeENsczogcHJlZml4Q2xzLFxuICAgIHBvcHVwQ2xhc3NOYW1lOiBjbGFzc05hbWVzKFwiXCIuY29uY2F0KHByZWZpeENscywgXCItcG9wdXBcIiksIF9kZWZpbmVQcm9wZXJ0eSh7fSwgXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1ydGxcIiksIHJ0bCksIHBvcHVwQ2xhc3NOYW1lLCByb290Q2xhc3NOYW1lKSxcbiAgICBzdHJldGNoOiBtb2RlID09PSAnaG9yaXpvbnRhbCcgPyAnbWluV2lkdGgnIDogbnVsbCxcbiAgICBnZXRQb3B1cENvbnRhaW5lcjogZ2V0UG9wdXBDb250YWluZXIsXG4gICAgYnVpbHRpblBsYWNlbWVudHM6IHBsYWNlbWVudCxcbiAgICBwb3B1cFBsYWNlbWVudDogcG9wdXBQbGFjZW1lbnQsXG4gICAgcG9wdXBWaXNpYmxlOiBpbm5lclZpc2libGUsXG4gICAgcG9wdXA6IHBvcHVwLFxuICAgIHBvcHVwU3R5bGU6IHBvcHVwU3R5bGUsXG4gICAgcG9wdXBBbGlnbjogcG9wdXBPZmZzZXQgJiYge1xuICAgICAgb2Zmc2V0OiBwb3B1cE9mZnNldFxuICAgIH0sXG4gICAgYWN0aW9uOiBkaXNhYmxlZCA/IFtdIDogW3RyaWdnZXJTdWJNZW51QWN0aW9uXSxcbiAgICBtb3VzZUVudGVyRGVsYXk6IHN1Yk1lbnVPcGVuRGVsYXksXG4gICAgbW91c2VMZWF2ZURlbGF5OiBzdWJNZW51Q2xvc2VEZWxheSxcbiAgICBvblBvcHVwVmlzaWJsZUNoYW5nZTogb25WaXNpYmxlQ2hhbmdlLFxuICAgIGZvcmNlUmVuZGVyOiBmb3JjZVN1Yk1lbnVSZW5kZXIsXG4gICAgcG9wdXBNb3Rpb246IG1lcmdlZE1vdGlvbixcbiAgICBmcmVzaDogdHJ1ZVxuICB9LCBjaGlsZHJlbik7XG59IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc1wiO1xudmFyIF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcImNoaWxkcmVuXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBNZW51Q29udGV4dCB9IGZyb20gXCIuLi9jb250ZXh0L01lbnVDb250ZXh0XCI7XG52YXIgSW50ZXJuYWxTdWJNZW51TGlzdCA9IGZ1bmN0aW9uIEludGVybmFsU3ViTWVudUxpc3QoX3JlZiwgcmVmKSB7XG4gIHZhciBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgcmVzdFByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBfUmVhY3QkdXNlQ29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoTWVudUNvbnRleHQpLFxuICAgIHByZWZpeENscyA9IF9SZWFjdCR1c2VDb250ZXh0LnByZWZpeENscyxcbiAgICBtb2RlID0gX1JlYWN0JHVzZUNvbnRleHQubW9kZSxcbiAgICBydGwgPSBfUmVhY3QkdXNlQ29udGV4dC5ydGw7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInVsXCIsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMocHJlZml4Q2xzLCBydGwgJiYgXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1ydGxcIiksIFwiXCIuY29uY2F0KHByZWZpeENscywgXCItc3ViXCIpLCBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLVwiKS5jb25jYXQobW9kZSA9PT0gJ2lubGluZScgPyAnaW5saW5lJyA6ICd2ZXJ0aWNhbCcpLCBjbGFzc05hbWUpLFxuICAgIHJvbGU6IFwibWVudVwiXG4gIH0sIHJlc3RQcm9wcywge1xuICAgIFwiZGF0YS1tZW51LWxpc3RcIjogdHJ1ZSxcbiAgICByZWY6IHJlZlxuICB9KSwgY2hpbGRyZW4pO1xufTtcbnZhciBTdWJNZW51TGlzdCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKEludGVybmFsU3ViTWVudUxpc3QpO1xuU3ViTWVudUxpc3QuZGlzcGxheU5hbWUgPSAnU3ViTWVudUxpc3QnO1xuZXhwb3J0IGRlZmF1bHQgU3ViTWVudUxpc3Q7IiwiaW1wb3J0IF9kZWZpbmVQcm9wZXJ0eSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHlcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RTcHJlYWQgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFNwcmVhZDJcIjtcbmltcG9ydCBfc2xpY2VkVG9BcnJheSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheVwiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNcIjtcbnZhciBfZXhjbHVkZWQgPSBbXCJzdHlsZVwiLCBcImNsYXNzTmFtZVwiLCBcInRpdGxlXCIsIFwiZXZlbnRLZXlcIiwgXCJ3YXJuS2V5XCIsIFwiZGlzYWJsZWRcIiwgXCJpbnRlcm5hbFBvcHVwQ2xvc2VcIiwgXCJjaGlsZHJlblwiLCBcIml0ZW1JY29uXCIsIFwiZXhwYW5kSWNvblwiLCBcInBvcHVwQ2xhc3NOYW1lXCIsIFwicG9wdXBPZmZzZXRcIiwgXCJwb3B1cFN0eWxlXCIsIFwib25DbGlja1wiLCBcIm9uTW91c2VFbnRlclwiLCBcIm9uTW91c2VMZWF2ZVwiLCBcIm9uVGl0bGVDbGlja1wiLCBcIm9uVGl0bGVNb3VzZUVudGVyXCIsIFwib25UaXRsZU1vdXNlTGVhdmVcIl0sXG4gIF9leGNsdWRlZDIgPSBbXCJhY3RpdmVcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBPdmVyZmxvdyBmcm9tICdyYy1vdmVyZmxvdyc7XG5pbXBvcnQgd2FybmluZyBmcm9tIFwicmMtdXRpbC9lcy93YXJuaW5nXCI7XG5pbXBvcnQgU3ViTWVudUxpc3QgZnJvbSBcIi4vU3ViTWVudUxpc3RcIjtcbmltcG9ydCB7IHBhcnNlQ2hpbGRyZW4gfSBmcm9tIFwiLi4vdXRpbHMvY29tbW9uVXRpbFwiO1xuaW1wb3J0IE1lbnVDb250ZXh0UHJvdmlkZXIsIHsgTWVudUNvbnRleHQgfSBmcm9tIFwiLi4vY29udGV4dC9NZW51Q29udGV4dFwiO1xuaW1wb3J0IHVzZU1lbW9DYWxsYmFjayBmcm9tIFwiLi4vaG9va3MvdXNlTWVtb0NhbGxiYWNrXCI7XG5pbXBvcnQgUG9wdXBUcmlnZ2VyIGZyb20gXCIuL1BvcHVwVHJpZ2dlclwiO1xuaW1wb3J0IEljb24gZnJvbSBcIi4uL0ljb25cIjtcbmltcG9ydCB1c2VBY3RpdmUgZnJvbSBcIi4uL2hvb2tzL3VzZUFjdGl2ZVwiO1xuaW1wb3J0IHsgd2Fybkl0ZW1Qcm9wIH0gZnJvbSBcIi4uL3V0aWxzL3dhcm5VdGlsXCI7XG5pbXBvcnQgdXNlRGlyZWN0aW9uU3R5bGUgZnJvbSBcIi4uL2hvb2tzL3VzZURpcmVjdGlvblN0eWxlXCI7XG5pbXBvcnQgSW5saW5lU3ViTWVudUxpc3QgZnJvbSBcIi4vSW5saW5lU3ViTWVudUxpc3RcIjtcbmltcG9ydCB7IFBhdGhUcmFja2VyQ29udGV4dCwgUGF0aFVzZXJDb250ZXh0LCB1c2VGdWxsUGF0aCwgdXNlTWVhc3VyZSB9IGZyb20gXCIuLi9jb250ZXh0L1BhdGhDb250ZXh0XCI7XG5pbXBvcnQgeyB1c2VNZW51SWQgfSBmcm9tIFwiLi4vY29udGV4dC9JZENvbnRleHRcIjtcbmltcG9ydCBQcml2YXRlQ29udGV4dCBmcm9tIFwiLi4vY29udGV4dC9Qcml2YXRlQ29udGV4dFwiO1xudmFyIEludGVybmFsU3ViTWVudSA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIChwcm9wcywgcmVmKSB7XG4gIHZhciBzdHlsZSA9IHByb3BzLnN0eWxlLFxuICAgIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSxcbiAgICB0aXRsZSA9IHByb3BzLnRpdGxlLFxuICAgIGV2ZW50S2V5ID0gcHJvcHMuZXZlbnRLZXksXG4gICAgd2FybktleSA9IHByb3BzLndhcm5LZXksXG4gICAgZGlzYWJsZWQgPSBwcm9wcy5kaXNhYmxlZCxcbiAgICBpbnRlcm5hbFBvcHVwQ2xvc2UgPSBwcm9wcy5pbnRlcm5hbFBvcHVwQ2xvc2UsXG4gICAgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbixcbiAgICBpdGVtSWNvbiA9IHByb3BzLml0ZW1JY29uLFxuICAgIGV4cGFuZEljb24gPSBwcm9wcy5leHBhbmRJY29uLFxuICAgIHBvcHVwQ2xhc3NOYW1lID0gcHJvcHMucG9wdXBDbGFzc05hbWUsXG4gICAgcG9wdXBPZmZzZXQgPSBwcm9wcy5wb3B1cE9mZnNldCxcbiAgICBwb3B1cFN0eWxlID0gcHJvcHMucG9wdXBTdHlsZSxcbiAgICBvbkNsaWNrID0gcHJvcHMub25DbGljayxcbiAgICBvbk1vdXNlRW50ZXIgPSBwcm9wcy5vbk1vdXNlRW50ZXIsXG4gICAgb25Nb3VzZUxlYXZlID0gcHJvcHMub25Nb3VzZUxlYXZlLFxuICAgIG9uVGl0bGVDbGljayA9IHByb3BzLm9uVGl0bGVDbGljayxcbiAgICBvblRpdGxlTW91c2VFbnRlciA9IHByb3BzLm9uVGl0bGVNb3VzZUVudGVyLFxuICAgIG9uVGl0bGVNb3VzZUxlYXZlID0gcHJvcHMub25UaXRsZU1vdXNlTGVhdmUsXG4gICAgcmVzdFByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHByb3BzLCBfZXhjbHVkZWQpO1xuICB2YXIgZG9tRGF0YUlkID0gdXNlTWVudUlkKGV2ZW50S2V5KTtcbiAgdmFyIF9SZWFjdCR1c2VDb250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChNZW51Q29udGV4dCksXG4gICAgcHJlZml4Q2xzID0gX1JlYWN0JHVzZUNvbnRleHQucHJlZml4Q2xzLFxuICAgIG1vZGUgPSBfUmVhY3QkdXNlQ29udGV4dC5tb2RlLFxuICAgIG9wZW5LZXlzID0gX1JlYWN0JHVzZUNvbnRleHQub3BlbktleXMsXG4gICAgY29udGV4dERpc2FibGVkID0gX1JlYWN0JHVzZUNvbnRleHQuZGlzYWJsZWQsXG4gICAgb3ZlcmZsb3dEaXNhYmxlZCA9IF9SZWFjdCR1c2VDb250ZXh0Lm92ZXJmbG93RGlzYWJsZWQsXG4gICAgYWN0aXZlS2V5ID0gX1JlYWN0JHVzZUNvbnRleHQuYWN0aXZlS2V5LFxuICAgIHNlbGVjdGVkS2V5cyA9IF9SZWFjdCR1c2VDb250ZXh0LnNlbGVjdGVkS2V5cyxcbiAgICBjb250ZXh0SXRlbUljb24gPSBfUmVhY3QkdXNlQ29udGV4dC5pdGVtSWNvbixcbiAgICBjb250ZXh0RXhwYW5kSWNvbiA9IF9SZWFjdCR1c2VDb250ZXh0LmV4cGFuZEljb24sXG4gICAgb25JdGVtQ2xpY2sgPSBfUmVhY3QkdXNlQ29udGV4dC5vbkl0ZW1DbGljayxcbiAgICBvbk9wZW5DaGFuZ2UgPSBfUmVhY3QkdXNlQ29udGV4dC5vbk9wZW5DaGFuZ2UsXG4gICAgb25BY3RpdmUgPSBfUmVhY3QkdXNlQ29udGV4dC5vbkFjdGl2ZTtcbiAgdmFyIF9SZWFjdCR1c2VDb250ZXh0MiA9IFJlYWN0LnVzZUNvbnRleHQoUHJpdmF0ZUNvbnRleHQpLFxuICAgIF9pbnRlcm5hbFJlbmRlclN1Yk1lbnVJdGVtID0gX1JlYWN0JHVzZUNvbnRleHQyLl9pbnRlcm5hbFJlbmRlclN1Yk1lbnVJdGVtO1xuICB2YXIgX1JlYWN0JHVzZUNvbnRleHQzID0gUmVhY3QudXNlQ29udGV4dChQYXRoVXNlckNvbnRleHQpLFxuICAgIGlzU3ViUGF0aEtleSA9IF9SZWFjdCR1c2VDb250ZXh0My5pc1N1YlBhdGhLZXk7XG4gIHZhciBjb25uZWN0ZWRQYXRoID0gdXNlRnVsbFBhdGgoKTtcbiAgdmFyIHN1Yk1lbnVQcmVmaXhDbHMgPSBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLXN1Ym1lbnVcIik7XG4gIHZhciBtZXJnZWREaXNhYmxlZCA9IGNvbnRleHREaXNhYmxlZCB8fCBkaXNhYmxlZDtcbiAgdmFyIGVsZW1lbnRSZWYgPSBSZWFjdC51c2VSZWYoKTtcbiAgdmFyIHBvcHVwUmVmID0gUmVhY3QudXNlUmVmKCk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gV2FybiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuS2V5KSB7XG4gICAgd2FybmluZyhmYWxzZSwgJ1N1Yk1lbnUgc2hvdWxkIG5vdCBsZWF2ZSB1bmRlZmluZWQgYGtleWAuJyk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBJY29uID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBtZXJnZWRJdGVtSWNvbiA9IGl0ZW1JY29uICE9PSBudWxsICYmIGl0ZW1JY29uICE9PSB2b2lkIDAgPyBpdGVtSWNvbiA6IGNvbnRleHRJdGVtSWNvbjtcbiAgdmFyIG1lcmdlZEV4cGFuZEljb24gPSBleHBhbmRJY29uICE9PSBudWxsICYmIGV4cGFuZEljb24gIT09IHZvaWQgMCA/IGV4cGFuZEljb24gOiBjb250ZXh0RXhwYW5kSWNvbjtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBPcGVuID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBvcmlnaW5PcGVuID0gb3BlbktleXMuaW5jbHVkZXMoZXZlbnRLZXkpO1xuICB2YXIgb3BlbiA9ICFvdmVyZmxvd0Rpc2FibGVkICYmIG9yaWdpbk9wZW47XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBTZWxlY3QgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgY2hpbGRyZW5TZWxlY3RlZCA9IGlzU3ViUGF0aEtleShzZWxlY3RlZEtleXMsIGV2ZW50S2V5KTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IEFjdGl2ZSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBfdXNlQWN0aXZlID0gdXNlQWN0aXZlKGV2ZW50S2V5LCBtZXJnZWREaXNhYmxlZCwgb25UaXRsZU1vdXNlRW50ZXIsIG9uVGl0bGVNb3VzZUxlYXZlKSxcbiAgICBhY3RpdmUgPSBfdXNlQWN0aXZlLmFjdGl2ZSxcbiAgICBhY3RpdmVQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdXNlQWN0aXZlLCBfZXhjbHVkZWQyKTtcblxuICAvLyBGYWxsYmFjayBvZiBhY3RpdmUgY2hlY2sgdG8gYXZvaWQgaG92ZXIgb24gbWVudSB0aXRsZSBvciBkaXNhYmxlZCBpdGVtXG4gIHZhciBfUmVhY3QkdXNlU3RhdGUgPSBSZWFjdC51c2VTdGF0ZShmYWxzZSksXG4gICAgX1JlYWN0JHVzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF9SZWFjdCR1c2VTdGF0ZSwgMiksXG4gICAgY2hpbGRyZW5BY3RpdmUgPSBfUmVhY3QkdXNlU3RhdGUyWzBdLFxuICAgIHNldENoaWxkcmVuQWN0aXZlID0gX1JlYWN0JHVzZVN0YXRlMlsxXTtcbiAgdmFyIHRyaWdnZXJDaGlsZHJlbkFjdGl2ZSA9IGZ1bmN0aW9uIHRyaWdnZXJDaGlsZHJlbkFjdGl2ZShuZXdBY3RpdmUpIHtcbiAgICBpZiAoIW1lcmdlZERpc2FibGVkKSB7XG4gICAgICBzZXRDaGlsZHJlbkFjdGl2ZShuZXdBY3RpdmUpO1xuICAgIH1cbiAgfTtcbiAgdmFyIG9uSW50ZXJuYWxNb3VzZUVudGVyID0gZnVuY3Rpb24gb25JbnRlcm5hbE1vdXNlRW50ZXIoZG9tRXZlbnQpIHtcbiAgICB0cmlnZ2VyQ2hpbGRyZW5BY3RpdmUodHJ1ZSk7XG4gICAgb25Nb3VzZUVudGVyID09PSBudWxsIHx8IG9uTW91c2VFbnRlciA9PT0gdm9pZCAwIHx8IG9uTW91c2VFbnRlcih7XG4gICAgICBrZXk6IGV2ZW50S2V5LFxuICAgICAgZG9tRXZlbnQ6IGRvbUV2ZW50XG4gICAgfSk7XG4gIH07XG4gIHZhciBvbkludGVybmFsTW91c2VMZWF2ZSA9IGZ1bmN0aW9uIG9uSW50ZXJuYWxNb3VzZUxlYXZlKGRvbUV2ZW50KSB7XG4gICAgdHJpZ2dlckNoaWxkcmVuQWN0aXZlKGZhbHNlKTtcbiAgICBvbk1vdXNlTGVhdmUgPT09IG51bGwgfHwgb25Nb3VzZUxlYXZlID09PSB2b2lkIDAgfHwgb25Nb3VzZUxlYXZlKHtcbiAgICAgIGtleTogZXZlbnRLZXksXG4gICAgICBkb21FdmVudDogZG9tRXZlbnRcbiAgICB9KTtcbiAgfTtcbiAgdmFyIG1lcmdlZEFjdGl2ZSA9IFJlYWN0LnVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIGlmIChhY3RpdmUpIHtcbiAgICAgIHJldHVybiBhY3RpdmU7XG4gICAgfVxuICAgIGlmIChtb2RlICE9PSAnaW5saW5lJykge1xuICAgICAgcmV0dXJuIGNoaWxkcmVuQWN0aXZlIHx8IGlzU3ViUGF0aEtleShbYWN0aXZlS2V5XSwgZXZlbnRLZXkpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sIFttb2RlLCBhY3RpdmUsIGFjdGl2ZUtleSwgY2hpbGRyZW5BY3RpdmUsIGV2ZW50S2V5LCBpc1N1YlBhdGhLZXldKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PSBEaXJlY3Rpb25TdHlsZSA9PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgZGlyZWN0aW9uU3R5bGUgPSB1c2VEaXJlY3Rpb25TdHlsZShjb25uZWN0ZWRQYXRoLmxlbmd0aCk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBFdmVudHMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyA+Pj4+IFRpdGxlIGNsaWNrXG4gIHZhciBvbkludGVybmFsVGl0bGVDbGljayA9IGZ1bmN0aW9uIG9uSW50ZXJuYWxUaXRsZUNsaWNrKGUpIHtcbiAgICAvLyBTa2lwIGlmIGRpc2FibGVkXG4gICAgaWYgKG1lcmdlZERpc2FibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIG9uVGl0bGVDbGljayA9PT0gbnVsbCB8fCBvblRpdGxlQ2xpY2sgPT09IHZvaWQgMCB8fCBvblRpdGxlQ2xpY2soe1xuICAgICAga2V5OiBldmVudEtleSxcbiAgICAgIGRvbUV2ZW50OiBlXG4gICAgfSk7XG5cbiAgICAvLyBUcmlnZ2VyIG9wZW4gYnkgY2xpY2sgd2hlbiBtb2RlIGlzIGBpbmxpbmVgXG4gICAgaWYgKG1vZGUgPT09ICdpbmxpbmUnKSB7XG4gICAgICBvbk9wZW5DaGFuZ2UoZXZlbnRLZXksICFvcmlnaW5PcGVuKTtcbiAgICB9XG4gIH07XG5cbiAgLy8gPj4+PiBDb250ZXh0IGZvciBjaGlsZHJlbiBjbGlja1xuICB2YXIgb25NZXJnZWRJdGVtQ2xpY2sgPSB1c2VNZW1vQ2FsbGJhY2soZnVuY3Rpb24gKGluZm8pIHtcbiAgICBvbkNsaWNrID09PSBudWxsIHx8IG9uQ2xpY2sgPT09IHZvaWQgMCB8fCBvbkNsaWNrKHdhcm5JdGVtUHJvcChpbmZvKSk7XG4gICAgb25JdGVtQ2xpY2soaW5mbyk7XG4gIH0pO1xuXG4gIC8vID4+Pj4+IFZpc2libGUgY2hhbmdlXG4gIHZhciBvblBvcHVwVmlzaWJsZUNoYW5nZSA9IGZ1bmN0aW9uIG9uUG9wdXBWaXNpYmxlQ2hhbmdlKG5ld1Zpc2libGUpIHtcbiAgICBpZiAobW9kZSAhPT0gJ2lubGluZScpIHtcbiAgICAgIG9uT3BlbkNoYW5nZShldmVudEtleSwgbmV3VmlzaWJsZSk7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBVc2VkIGZvciBhY2Nlc3NpYmlsaXR5LiBIZWxwZXIgd2lsbCBmb2N1cyBlbGVtZW50IHdpdGhvdXQga2V5IGJvYXJkLlxuICAgKiBXZSBzaG91bGQgbWFudWFsbHkgdHJpZ2dlciBhbiBhY3RpdmVcbiAgICovXG4gIHZhciBvbkludGVybmFsRm9jdXMgPSBmdW5jdGlvbiBvbkludGVybmFsRm9jdXMoKSB7XG4gICAgb25BY3RpdmUoZXZlbnRLZXkpO1xuICB9O1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gUmVuZGVyID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIHBvcHVwSWQgPSBkb21EYXRhSWQgJiYgXCJcIi5jb25jYXQoZG9tRGF0YUlkLCBcIi1wb3B1cFwiKTtcbiAgdmFyIGV4cGFuZEljb25Ob2RlID0gUmVhY3QudXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEljb24sIHtcbiAgICAgIGljb246IG1vZGUgIT09ICdob3Jpem9udGFsJyA/IG1lcmdlZEV4cGFuZEljb24gOiB1bmRlZmluZWQsXG4gICAgICBwcm9wczogX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBwcm9wcyksIHt9LCB7XG4gICAgICAgIGlzT3Blbjogb3BlbixcbiAgICAgICAgLy8gW0xlZ2FjeV0gTm90IHN1cmUgd2h5IG5lZWQgdGhpcyBtYXJrXG4gICAgICAgIGlzU3ViTWVudTogdHJ1ZVxuICAgICAgfSlcbiAgICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImlcIiwge1xuICAgICAgY2xhc3NOYW1lOiBcIlwiLmNvbmNhdChzdWJNZW51UHJlZml4Q2xzLCBcIi1hcnJvd1wiKVxuICAgIH0pKTtcbiAgfSwgW21vZGUsIG1lcmdlZEV4cGFuZEljb24sIHByb3BzLCBvcGVuLCBzdWJNZW51UHJlZml4Q2xzXSk7XG5cbiAgLy8gPj4+Pj4gVGl0bGVcbiAgdmFyIHRpdGxlTm9kZSA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICByb2xlOiBcIm1lbnVpdGVtXCIsXG4gICAgc3R5bGU6IGRpcmVjdGlvblN0eWxlLFxuICAgIGNsYXNzTmFtZTogXCJcIi5jb25jYXQoc3ViTWVudVByZWZpeENscywgXCItdGl0bGVcIiksXG4gICAgdGFiSW5kZXg6IG1lcmdlZERpc2FibGVkID8gbnVsbCA6IC0xLFxuICAgIHJlZjogZWxlbWVudFJlZixcbiAgICB0aXRsZTogdHlwZW9mIHRpdGxlID09PSAnc3RyaW5nJyA/IHRpdGxlIDogbnVsbCxcbiAgICBcImRhdGEtbWVudS1pZFwiOiBvdmVyZmxvd0Rpc2FibGVkICYmIGRvbURhdGFJZCA/IG51bGwgOiBkb21EYXRhSWQsXG4gICAgXCJhcmlhLWV4cGFuZGVkXCI6IG9wZW4sXG4gICAgXCJhcmlhLWhhc3BvcHVwXCI6IHRydWUsXG4gICAgXCJhcmlhLWNvbnRyb2xzXCI6IHBvcHVwSWQsXG4gICAgXCJhcmlhLWRpc2FibGVkXCI6IG1lcmdlZERpc2FibGVkLFxuICAgIG9uQ2xpY2s6IG9uSW50ZXJuYWxUaXRsZUNsaWNrLFxuICAgIG9uRm9jdXM6IG9uSW50ZXJuYWxGb2N1c1xuICB9LCBhY3RpdmVQcm9wcyksIHRpdGxlLCBleHBhbmRJY29uTm9kZSk7XG5cbiAgLy8gQ2FjaGUgbW9kZSBpZiBpdCBjaGFuZ2UgdG8gYGlubGluZWAgd2hpY2ggZG8gbm90IGhhdmUgcG9wdXAgbW90aW9uXG4gIHZhciB0cmlnZ2VyTW9kZVJlZiA9IFJlYWN0LnVzZVJlZihtb2RlKTtcbiAgaWYgKG1vZGUgIT09ICdpbmxpbmUnICYmIGNvbm5lY3RlZFBhdGgubGVuZ3RoID4gMSkge1xuICAgIHRyaWdnZXJNb2RlUmVmLmN1cnJlbnQgPSAndmVydGljYWwnO1xuICB9IGVsc2Uge1xuICAgIHRyaWdnZXJNb2RlUmVmLmN1cnJlbnQgPSBtb2RlO1xuICB9XG4gIGlmICghb3ZlcmZsb3dEaXNhYmxlZCkge1xuICAgIHZhciB0cmlnZ2VyTW9kZSA9IHRyaWdnZXJNb2RlUmVmLmN1cnJlbnQ7XG5cbiAgICAvLyBTdGlsbCB3cmFwIHdpdGggVHJpZ2dlciBoZXJlIHNpbmNlIHdlIG5lZWQgYXZvaWQgcmVhY3QgcmUtbW91bnQgZG9tIG5vZGVcbiAgICAvLyBXaGljaCBtYWtlcyBtb3Rpb24gZmFpbGVkXG4gICAgdGl0bGVOb2RlID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUG9wdXBUcmlnZ2VyLCB7XG4gICAgICBtb2RlOiB0cmlnZ2VyTW9kZSxcbiAgICAgIHByZWZpeENsczogc3ViTWVudVByZWZpeENscyxcbiAgICAgIHZpc2libGU6ICFpbnRlcm5hbFBvcHVwQ2xvc2UgJiYgb3BlbiAmJiBtb2RlICE9PSAnaW5saW5lJyxcbiAgICAgIHBvcHVwQ2xhc3NOYW1lOiBwb3B1cENsYXNzTmFtZSxcbiAgICAgIHBvcHVwT2Zmc2V0OiBwb3B1cE9mZnNldCxcbiAgICAgIHBvcHVwU3R5bGU6IHBvcHVwU3R5bGUsXG4gICAgICBwb3B1cDogLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTWVudUNvbnRleHRQcm92aWRlclxuICAgICAgLy8gU3BlY2lhbCBoYW5kbGUgb2YgaG9yaXpvbnRhbCBtb2RlXG4gICAgICAsIHtcbiAgICAgICAgbW9kZTogdHJpZ2dlck1vZGUgPT09ICdob3Jpem9udGFsJyA/ICd2ZXJ0aWNhbCcgOiB0cmlnZ2VyTW9kZVxuICAgICAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoU3ViTWVudUxpc3QsIHtcbiAgICAgICAgaWQ6IHBvcHVwSWQsXG4gICAgICAgIHJlZjogcG9wdXBSZWZcbiAgICAgIH0sIGNoaWxkcmVuKSksXG4gICAgICBkaXNhYmxlZDogbWVyZ2VkRGlzYWJsZWQsXG4gICAgICBvblZpc2libGVDaGFuZ2U6IG9uUG9wdXBWaXNpYmxlQ2hhbmdlXG4gICAgfSwgdGl0bGVOb2RlKTtcbiAgfVxuXG4gIC8vID4+Pj4+IExpc3Qgbm9kZVxuICB2YXIgbGlzdE5vZGUgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChPdmVyZmxvdy5JdGVtLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgcm9sZTogXCJub25lXCJcbiAgfSwgcmVzdFByb3BzLCB7XG4gICAgY29tcG9uZW50OiBcImxpXCIsXG4gICAgc3R5bGU6IHN0eWxlLFxuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lcyhzdWJNZW51UHJlZml4Q2xzLCBcIlwiLmNvbmNhdChzdWJNZW51UHJlZml4Q2xzLCBcIi1cIikuY29uY2F0KG1vZGUpLCBjbGFzc05hbWUsIF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eSh7fSwgXCJcIi5jb25jYXQoc3ViTWVudVByZWZpeENscywgXCItb3BlblwiKSwgb3BlbiksIFwiXCIuY29uY2F0KHN1Yk1lbnVQcmVmaXhDbHMsIFwiLWFjdGl2ZVwiKSwgbWVyZ2VkQWN0aXZlKSwgXCJcIi5jb25jYXQoc3ViTWVudVByZWZpeENscywgXCItc2VsZWN0ZWRcIiksIGNoaWxkcmVuU2VsZWN0ZWQpLCBcIlwiLmNvbmNhdChzdWJNZW51UHJlZml4Q2xzLCBcIi1kaXNhYmxlZFwiKSwgbWVyZ2VkRGlzYWJsZWQpKSxcbiAgICBvbk1vdXNlRW50ZXI6IG9uSW50ZXJuYWxNb3VzZUVudGVyLFxuICAgIG9uTW91c2VMZWF2ZTogb25JbnRlcm5hbE1vdXNlTGVhdmVcbiAgfSksIHRpdGxlTm9kZSwgIW92ZXJmbG93RGlzYWJsZWQgJiYgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoSW5saW5lU3ViTWVudUxpc3QsIHtcbiAgICBpZDogcG9wdXBJZCxcbiAgICBvcGVuOiBvcGVuLFxuICAgIGtleVBhdGg6IGNvbm5lY3RlZFBhdGhcbiAgfSwgY2hpbGRyZW4pKTtcbiAgaWYgKF9pbnRlcm5hbFJlbmRlclN1Yk1lbnVJdGVtKSB7XG4gICAgbGlzdE5vZGUgPSBfaW50ZXJuYWxSZW5kZXJTdWJNZW51SXRlbShsaXN0Tm9kZSwgcHJvcHMsIHtcbiAgICAgIHNlbGVjdGVkOiBjaGlsZHJlblNlbGVjdGVkLFxuICAgICAgYWN0aXZlOiBtZXJnZWRBY3RpdmUsXG4gICAgICBvcGVuOiBvcGVuLFxuICAgICAgZGlzYWJsZWQ6IG1lcmdlZERpc2FibGVkXG4gICAgfSk7XG4gIH1cblxuICAvLyA+Pj4+PiBSZW5kZXJcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KE1lbnVDb250ZXh0UHJvdmlkZXIsIHtcbiAgICBvbkl0ZW1DbGljazogb25NZXJnZWRJdGVtQ2xpY2ssXG4gICAgbW9kZTogbW9kZSA9PT0gJ2hvcml6b250YWwnID8gJ3ZlcnRpY2FsJyA6IG1vZGUsXG4gICAgaXRlbUljb246IG1lcmdlZEl0ZW1JY29uLFxuICAgIGV4cGFuZEljb246IG1lcmdlZEV4cGFuZEljb25cbiAgfSwgbGlzdE5vZGUpO1xufSk7XG52YXIgU3ViTWVudSA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIChwcm9wcywgcmVmKSB7XG4gIHZhciBldmVudEtleSA9IHByb3BzLmV2ZW50S2V5LFxuICAgIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW47XG4gIHZhciBjb25uZWN0ZWRLZXlQYXRoID0gdXNlRnVsbFBhdGgoZXZlbnRLZXkpO1xuICB2YXIgY2hpbGRMaXN0ID0gcGFyc2VDaGlsZHJlbihjaGlsZHJlbiwgY29ubmVjdGVkS2V5UGF0aCk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT0gUmVjb3JkIEtleVBhdGggPT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIG1lYXN1cmUgPSB1c2VNZWFzdXJlKCk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKG1lYXN1cmUpIHtcbiAgICAgIG1lYXN1cmUucmVnaXN0ZXJQYXRoKGV2ZW50S2V5LCBjb25uZWN0ZWRLZXlQYXRoKTtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIG1lYXN1cmUudW5yZWdpc3RlclBhdGgoZXZlbnRLZXksIGNvbm5lY3RlZEtleVBhdGgpO1xuICAgICAgfTtcbiAgICB9XG4gIH0sIFtjb25uZWN0ZWRLZXlQYXRoXSk7XG4gIHZhciByZW5kZXJOb2RlO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PSBSZW5kZXIgPT09PT09PT09PT09PT09PT09PT09PT09XG4gIGlmIChtZWFzdXJlKSB7XG4gICAgcmVuZGVyTm9kZSA9IGNoaWxkTGlzdDtcbiAgfSBlbHNlIHtcbiAgICByZW5kZXJOb2RlID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoSW50ZXJuYWxTdWJNZW51LCBfZXh0ZW5kcyh7XG4gICAgICByZWY6IHJlZlxuICAgIH0sIHByb3BzKSwgY2hpbGRMaXN0KTtcbiAgfVxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUGF0aFRyYWNrZXJDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IGNvbm5lY3RlZEtleVBhdGhcbiAgfSwgcmVuZGVyTm9kZSk7XG59KTtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIFN1Yk1lbnUuZGlzcGxheU5hbWUgPSAnU3ViTWVudSc7XG59XG5leHBvcnQgZGVmYXVsdCBTdWJNZW51OyIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmV4cG9ydCB2YXIgSWRDb250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUNvbnRleHQobnVsbCk7XG5leHBvcnQgZnVuY3Rpb24gZ2V0TWVudUlkKHV1aWQsIGV2ZW50S2V5KSB7XG4gIGlmICh1dWlkID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gXCJcIi5jb25jYXQodXVpZCwgXCItXCIpLmNvbmNhdChldmVudEtleSk7XG59XG5cbi8qKlxuICogR2V0IGBkYXRhLW1lbnUtaWRgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VNZW51SWQoZXZlbnRLZXkpIHtcbiAgdmFyIGlkID0gUmVhY3QudXNlQ29udGV4dChJZENvbnRleHQpO1xuICByZXR1cm4gZ2V0TWVudUlkKGlkLCBldmVudEtleSk7XG59IiwiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNcIjtcbmltcG9ydCBfb2JqZWN0U3ByZWFkIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyXCI7XG52YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJsb2NrZWRcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdXNlTWVtbyBmcm9tIFwicmMtdXRpbC9lcy9ob29rcy91c2VNZW1vXCI7XG5pbXBvcnQgaXNFcXVhbCBmcm9tIFwicmMtdXRpbC9lcy9pc0VxdWFsXCI7XG5leHBvcnQgdmFyIE1lbnVDb250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUNvbnRleHQobnVsbCk7XG5mdW5jdGlvbiBtZXJnZVByb3BzKG9yaWdpbiwgdGFyZ2V0KSB7XG4gIHZhciBjbG9uZSA9IF9vYmplY3RTcHJlYWQoe30sIG9yaWdpbik7XG4gIE9iamVjdC5rZXlzKHRhcmdldCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIHZhbHVlID0gdGFyZ2V0W2tleV07XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNsb25lW2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gY2xvbmU7XG59XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBJbmhlcml0YWJsZUNvbnRleHRQcm92aWRlcihfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgbG9ja2VkID0gX3JlZi5sb2NrZWQsXG4gICAgcmVzdFByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBjb250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChNZW51Q29udGV4dCk7XG4gIHZhciBpbmhlcml0YWJsZUNvbnRleHQgPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbWVyZ2VQcm9wcyhjb250ZXh0LCByZXN0UHJvcHMpO1xuICB9LCBbY29udGV4dCwgcmVzdFByb3BzXSwgZnVuY3Rpb24gKHByZXYsIG5leHQpIHtcbiAgICByZXR1cm4gIWxvY2tlZCAmJiAocHJldlswXSAhPT0gbmV4dFswXSB8fCAhaXNFcXVhbChwcmV2WzFdLCBuZXh0WzFdLCB0cnVlKSk7XG4gIH0pO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTWVudUNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogaW5oZXJpdGFibGVDb250ZXh0XG4gIH0sIGNoaWxkcmVuKTtcbn0iLCJpbXBvcnQgX3RvQ29uc3VtYWJsZUFycmF5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b0NvbnN1bWFibGVBcnJheVwiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xudmFyIEVtcHR5TGlzdCA9IFtdO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09IFBhdGggUmVnaXN0ZXIgPT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgdmFyIFBhdGhSZWdpc3RlckNvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlQ29udGV4dChudWxsKTtcbmV4cG9ydCBmdW5jdGlvbiB1c2VNZWFzdXJlKCkge1xuICByZXR1cm4gUmVhY3QudXNlQ29udGV4dChQYXRoUmVnaXN0ZXJDb250ZXh0KTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PSBQYXRoIFRyYWNrZXIgPT09PT09PT09PT09PT09PT09PT09PT09PT1cbmV4cG9ydCB2YXIgUGF0aFRyYWNrZXJDb250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUNvbnRleHQoRW1wdHlMaXN0KTtcbmV4cG9ydCBmdW5jdGlvbiB1c2VGdWxsUGF0aChldmVudEtleSkge1xuICB2YXIgcGFyZW50S2V5UGF0aCA9IFJlYWN0LnVzZUNvbnRleHQoUGF0aFRyYWNrZXJDb250ZXh0KTtcbiAgcmV0dXJuIFJlYWN0LnVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBldmVudEtleSAhPT0gdW5kZWZpbmVkID8gW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShwYXJlbnRLZXlQYXRoKSwgW2V2ZW50S2V5XSkgOiBwYXJlbnRLZXlQYXRoO1xuICB9LCBbcGFyZW50S2V5UGF0aCwgZXZlbnRLZXldKTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09IFBhdGggVXNlciA9PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IHZhciBQYXRoVXNlckNvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlQ29udGV4dChudWxsKTsiLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG52YXIgUHJpdmF0ZUNvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlQ29udGV4dCh7fSk7XG5leHBvcnQgZGVmYXVsdCBQcml2YXRlQ29udGV4dDsiLCJpbXBvcnQgX2RlZmluZVByb3BlcnR5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eVwiO1xuaW1wb3J0IHsgZ2V0Rm9jdXNOb2RlTGlzdCB9IGZyb20gXCJyYy11dGlsL2VzL0RvbS9mb2N1c1wiO1xuaW1wb3J0IEtleUNvZGUgZnJvbSBcInJjLXV0aWwvZXMvS2V5Q29kZVwiO1xuaW1wb3J0IHJhZiBmcm9tIFwicmMtdXRpbC9lcy9yYWZcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGdldE1lbnVJZCB9IGZyb20gXCIuLi9jb250ZXh0L0lkQ29udGV4dFwiO1xuLy8gZGVzdHJ1Y3QgdG8gcmVkdWNlIG1pbmlmeSBzaXplXG52YXIgTEVGVCA9IEtleUNvZGUuTEVGVCxcbiAgUklHSFQgPSBLZXlDb2RlLlJJR0hULFxuICBVUCA9IEtleUNvZGUuVVAsXG4gIERPV04gPSBLZXlDb2RlLkRPV04sXG4gIEVOVEVSID0gS2V5Q29kZS5FTlRFUixcbiAgRVNDID0gS2V5Q29kZS5FU0MsXG4gIEhPTUUgPSBLZXlDb2RlLkhPTUUsXG4gIEVORCA9IEtleUNvZGUuRU5EO1xudmFyIEFycm93S2V5cyA9IFtVUCwgRE9XTiwgTEVGVCwgUklHSFRdO1xuZnVuY3Rpb24gZ2V0T2Zmc2V0KG1vZGUsIGlzUm9vdExldmVsLCBpc1J0bCwgd2hpY2gpIHtcbiAgdmFyIF9vZmZzZXRzO1xuICB2YXIgcHJldiA9ICdwcmV2JztcbiAgdmFyIG5leHQgPSAnbmV4dCc7XG4gIHZhciBjaGlsZHJlbiA9ICdjaGlsZHJlbic7XG4gIHZhciBwYXJlbnQgPSAncGFyZW50JztcblxuICAvLyBJbmxpbmUgZW50ZXIgaXMgc3BlY2lhbCB0aGF0IHdlIHVzZSB1bmlxdWUgb3BlcmF0aW9uXG4gIGlmIChtb2RlID09PSAnaW5saW5lJyAmJiB3aGljaCA9PT0gRU5URVIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaW5saW5lVHJpZ2dlcjogdHJ1ZVxuICAgIH07XG4gIH1cbiAgdmFyIGlubGluZSA9IF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoe30sIFVQLCBwcmV2KSwgRE9XTiwgbmV4dCk7XG4gIHZhciBob3Jpem9udGFsID0gX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KHt9LCBMRUZULCBpc1J0bCA/IG5leHQgOiBwcmV2KSwgUklHSFQsIGlzUnRsID8gcHJldiA6IG5leHQpLCBET1dOLCBjaGlsZHJlbiksIEVOVEVSLCBjaGlsZHJlbik7XG4gIHZhciB2ZXJ0aWNhbCA9IF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KHt9LCBVUCwgcHJldiksIERPV04sIG5leHQpLCBFTlRFUiwgY2hpbGRyZW4pLCBFU0MsIHBhcmVudCksIExFRlQsIGlzUnRsID8gY2hpbGRyZW4gOiBwYXJlbnQpLCBSSUdIVCwgaXNSdGwgPyBwYXJlbnQgOiBjaGlsZHJlbik7XG4gIHZhciBvZmZzZXRzID0ge1xuICAgIGlubGluZTogaW5saW5lLFxuICAgIGhvcml6b250YWw6IGhvcml6b250YWwsXG4gICAgdmVydGljYWw6IHZlcnRpY2FsLFxuICAgIGlubGluZVN1YjogaW5saW5lLFxuICAgIGhvcml6b250YWxTdWI6IHZlcnRpY2FsLFxuICAgIHZlcnRpY2FsU3ViOiB2ZXJ0aWNhbFxuICB9O1xuICB2YXIgdHlwZSA9IChfb2Zmc2V0cyA9IG9mZnNldHNbXCJcIi5jb25jYXQobW9kZSkuY29uY2F0KGlzUm9vdExldmVsID8gJycgOiAnU3ViJyldKSA9PT0gbnVsbCB8fCBfb2Zmc2V0cyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29mZnNldHNbd2hpY2hdO1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIHByZXY6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBvZmZzZXQ6IC0xLFxuICAgICAgICBzaWJsaW5nOiB0cnVlXG4gICAgICB9O1xuICAgIGNhc2UgbmV4dDpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG9mZnNldDogMSxcbiAgICAgICAgc2libGluZzogdHJ1ZVxuICAgICAgfTtcbiAgICBjYXNlIHBhcmVudDpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG9mZnNldDogLTEsXG4gICAgICAgIHNpYmxpbmc6IGZhbHNlXG4gICAgICB9O1xuICAgIGNhc2UgY2hpbGRyZW46XG4gICAgICByZXR1cm4ge1xuICAgICAgICBvZmZzZXQ6IDEsXG4gICAgICAgIHNpYmxpbmc6IGZhbHNlXG4gICAgICB9O1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuZnVuY3Rpb24gZmluZENvbnRhaW5lclVMKGVsZW1lbnQpIHtcbiAgdmFyIGN1cnJlbnQgPSBlbGVtZW50O1xuICB3aGlsZSAoY3VycmVudCkge1xuICAgIGlmIChjdXJyZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1tZW51LWxpc3QnKSkge1xuICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgfVxuICAgIGN1cnJlbnQgPSBjdXJyZW50LnBhcmVudEVsZW1lbnQ7XG4gIH1cblxuICAvLyBOb3JtYWxseSBzaG91bGQgbm90IHJlYWNoIHRoaXMgbGluZVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBGaW5kIGZvY3VzZWQgZWxlbWVudCB3aXRoaW4gZWxlbWVudCBzZXQgcHJvdmlkZWRcbiAqL1xuZnVuY3Rpb24gZ2V0Rm9jdXNFbGVtZW50KGFjdGl2ZUVsZW1lbnQsIGVsZW1lbnRzKSB7XG4gIHZhciBjdXJyZW50ID0gYWN0aXZlRWxlbWVudCB8fCBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICB3aGlsZSAoY3VycmVudCkge1xuICAgIGlmIChlbGVtZW50cy5oYXMoY3VycmVudCkpIHtcbiAgICAgIHJldHVybiBjdXJyZW50O1xuICAgIH1cbiAgICBjdXJyZW50ID0gY3VycmVudC5wYXJlbnRFbGVtZW50O1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIEdldCBmb2N1c2FibGUgZWxlbWVudHMgZnJvbSB0aGUgZWxlbWVudCBzZXQgdW5kZXIgcHJvdmlkZWQgY29udGFpbmVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb2N1c2FibGVFbGVtZW50cyhjb250YWluZXIsIGVsZW1lbnRzKSB7XG4gIHZhciBsaXN0ID0gZ2V0Rm9jdXNOb2RlTGlzdChjb250YWluZXIsIHRydWUpO1xuICByZXR1cm4gbGlzdC5maWx0ZXIoZnVuY3Rpb24gKGVsZSkge1xuICAgIHJldHVybiBlbGVtZW50cy5oYXMoZWxlKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBnZXROZXh0Rm9jdXNFbGVtZW50KHBhcmVudFF1ZXJ5Q29udGFpbmVyLCBlbGVtZW50cywgZm9jdXNNZW51RWxlbWVudCkge1xuICB2YXIgb2Zmc2V0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiAxO1xuICAvLyBLZXkgb24gdGhlIG1lbnUgaXRlbSB3aWxsIG5vdCBnZXQgdmFsaWRhdGUgcGFyZW50IGNvbnRhaW5lclxuICBpZiAoIXBhcmVudFF1ZXJ5Q29udGFpbmVyKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBMaXN0IGN1cnJlbnQgbGV2ZWwgbWVudSBpdGVtIGVsZW1lbnRzXG4gIHZhciBzYW1lTGV2ZWxGb2N1c2FibGVNZW51RWxlbWVudExpc3QgPSBnZXRGb2N1c2FibGVFbGVtZW50cyhwYXJlbnRRdWVyeUNvbnRhaW5lciwgZWxlbWVudHMpO1xuXG4gIC8vIEZpbmQgbmV4dCBmb2N1cyBpbmRleFxuICB2YXIgY291bnQgPSBzYW1lTGV2ZWxGb2N1c2FibGVNZW51RWxlbWVudExpc3QubGVuZ3RoO1xuICB2YXIgZm9jdXNJbmRleCA9IHNhbWVMZXZlbEZvY3VzYWJsZU1lbnVFbGVtZW50TGlzdC5maW5kSW5kZXgoZnVuY3Rpb24gKGVsZSkge1xuICAgIHJldHVybiBmb2N1c01lbnVFbGVtZW50ID09PSBlbGU7XG4gIH0pO1xuICBpZiAob2Zmc2V0IDwgMCkge1xuICAgIGlmIChmb2N1c0luZGV4ID09PSAtMSkge1xuICAgICAgZm9jdXNJbmRleCA9IGNvdW50IC0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9jdXNJbmRleCAtPSAxO1xuICAgIH1cbiAgfSBlbHNlIGlmIChvZmZzZXQgPiAwKSB7XG4gICAgZm9jdXNJbmRleCArPSAxO1xuICB9XG4gIGZvY3VzSW5kZXggPSAoZm9jdXNJbmRleCArIGNvdW50KSAlIGNvdW50O1xuXG4gIC8vIEZvY3VzIG1lbnUgaXRlbVxuICByZXR1cm4gc2FtZUxldmVsRm9jdXNhYmxlTWVudUVsZW1lbnRMaXN0W2ZvY3VzSW5kZXhdO1xufVxuZXhwb3J0IHZhciByZWZyZXNoRWxlbWVudHMgPSBmdW5jdGlvbiByZWZyZXNoRWxlbWVudHMoa2V5cywgaWQpIHtcbiAgdmFyIGVsZW1lbnRzID0gbmV3IFNldCgpO1xuICB2YXIga2V5MmVsZW1lbnQgPSBuZXcgTWFwKCk7XG4gIHZhciBlbGVtZW50MmtleSA9IG5ldyBNYXAoKTtcbiAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJbZGF0YS1tZW51LWlkPSdcIi5jb25jYXQoZ2V0TWVudUlkKGlkLCBrZXkpLCBcIiddXCIpKTtcbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgZWxlbWVudHMuYWRkKGVsZW1lbnQpO1xuICAgICAgZWxlbWVudDJrZXkuc2V0KGVsZW1lbnQsIGtleSk7XG4gICAgICBrZXkyZWxlbWVudC5zZXQoa2V5LCBlbGVtZW50KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGVsZW1lbnRzOiBlbGVtZW50cyxcbiAgICBrZXkyZWxlbWVudDoga2V5MmVsZW1lbnQsXG4gICAgZWxlbWVudDJrZXk6IGVsZW1lbnQya2V5XG4gIH07XG59O1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUFjY2Vzc2liaWxpdHkobW9kZSwgYWN0aXZlS2V5LCBpc1J0bCwgaWQsIGNvbnRhaW5lclJlZiwgZ2V0S2V5cywgZ2V0S2V5UGF0aCwgdHJpZ2dlckFjdGl2ZUtleSwgdHJpZ2dlckFjY2Vzc2liaWxpdHlPcGVuLCBvcmlnaW5PbktleURvd24pIHtcbiAgdmFyIHJhZlJlZiA9IFJlYWN0LnVzZVJlZigpO1xuICB2YXIgYWN0aXZlUmVmID0gUmVhY3QudXNlUmVmKCk7XG4gIGFjdGl2ZVJlZi5jdXJyZW50ID0gYWN0aXZlS2V5O1xuICB2YXIgY2xlYW5SYWYgPSBmdW5jdGlvbiBjbGVhblJhZigpIHtcbiAgICByYWYuY2FuY2VsKHJhZlJlZi5jdXJyZW50KTtcbiAgfTtcbiAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgY2xlYW5SYWYoKTtcbiAgICB9O1xuICB9LCBbXSk7XG4gIHJldHVybiBmdW5jdGlvbiAoZSkge1xuICAgIHZhciB3aGljaCA9IGUud2hpY2g7XG4gICAgaWYgKFtdLmNvbmNhdChBcnJvd0tleXMsIFtFTlRFUiwgRVNDLCBIT01FLCBFTkRdKS5pbmNsdWRlcyh3aGljaCkpIHtcbiAgICAgIHZhciBrZXlzID0gZ2V0S2V5cygpO1xuICAgICAgdmFyIHJlZnJlc2hlZEVsZW1lbnRzID0gcmVmcmVzaEVsZW1lbnRzKGtleXMsIGlkKTtcbiAgICAgIHZhciBfcmVmcmVzaGVkRWxlbWVudHMgPSByZWZyZXNoZWRFbGVtZW50cyxcbiAgICAgICAgZWxlbWVudHMgPSBfcmVmcmVzaGVkRWxlbWVudHMuZWxlbWVudHMsXG4gICAgICAgIGtleTJlbGVtZW50ID0gX3JlZnJlc2hlZEVsZW1lbnRzLmtleTJlbGVtZW50LFxuICAgICAgICBlbGVtZW50MmtleSA9IF9yZWZyZXNoZWRFbGVtZW50cy5lbGVtZW50MmtleTtcblxuICAgICAgLy8gRmlyc3Qgd2Ugc2hvdWxkIGZpbmQgY3VycmVudCBmb2N1c2VkIE1lbnVJdGVtL1N1Yk1lbnUgZWxlbWVudFxuICAgICAgdmFyIGFjdGl2ZUVsZW1lbnQgPSBrZXkyZWxlbWVudC5nZXQoYWN0aXZlS2V5KTtcbiAgICAgIHZhciBmb2N1c01lbnVFbGVtZW50ID0gZ2V0Rm9jdXNFbGVtZW50KGFjdGl2ZUVsZW1lbnQsIGVsZW1lbnRzKTtcbiAgICAgIHZhciBmb2N1c01lbnVLZXkgPSBlbGVtZW50MmtleS5nZXQoZm9jdXNNZW51RWxlbWVudCk7XG4gICAgICB2YXIgb2Zmc2V0T2JqID0gZ2V0T2Zmc2V0KG1vZGUsIGdldEtleVBhdGgoZm9jdXNNZW51S2V5LCB0cnVlKS5sZW5ndGggPT09IDEsIGlzUnRsLCB3aGljaCk7XG5cbiAgICAgIC8vIFNvbWUgbW9kZSBkbyBub3QgaGF2ZSBmdWxseSBhcnJvdyBvcGVyYXRpb24gbGlrZSBpbmxpbmVcbiAgICAgIGlmICghb2Zmc2V0T2JqICYmIHdoaWNoICE9PSBIT01FICYmIHdoaWNoICE9PSBFTkQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBBcnJvdyBwcmV2ZW50IGRlZmF1bHQgdG8gYXZvaWQgcGFnZSBzY3JvbGxcbiAgICAgIGlmIChBcnJvd0tleXMuaW5jbHVkZXMod2hpY2gpIHx8IFtIT01FLCBFTkRdLmluY2x1ZGVzKHdoaWNoKSkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9XG4gICAgICB2YXIgdHJ5Rm9jdXMgPSBmdW5jdGlvbiB0cnlGb2N1cyhtZW51RWxlbWVudCkge1xuICAgICAgICBpZiAobWVudUVsZW1lbnQpIHtcbiAgICAgICAgICB2YXIgZm9jdXNUYXJnZXRFbGVtZW50ID0gbWVudUVsZW1lbnQ7XG5cbiAgICAgICAgICAvLyBGb2N1cyB0byBsaW5rIGluc3RlYWQgb2YgbWVudSBpdGVtIGlmIHBvc3NpYmxlXG4gICAgICAgICAgdmFyIGxpbmsgPSBtZW51RWxlbWVudC5xdWVyeVNlbGVjdG9yKCdhJyk7XG4gICAgICAgICAgaWYgKGxpbmsgIT09IG51bGwgJiYgbGluayAhPT0gdm9pZCAwICYmIGxpbmsuZ2V0QXR0cmlidXRlKCdocmVmJykpIHtcbiAgICAgICAgICAgIGZvY3VzVGFyZ2V0RWxlbWVudCA9IGxpbms7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciB0YXJnZXRLZXkgPSBlbGVtZW50MmtleS5nZXQobWVudUVsZW1lbnQpO1xuICAgICAgICAgIHRyaWdnZXJBY3RpdmVLZXkodGFyZ2V0S2V5KTtcblxuICAgICAgICAgIC8qKlxuICAgICAgICAgICAqIERvIG5vdCBgdXNlRWZmZWN0YCBoZXJlIHNpbmNlIGB0cnlGb2N1c2AgbWF5IHRyaWdnZXIgYXN5bmNcbiAgICAgICAgICAgKiB3aGljaCBtYWtlcyBSZWFjdCBzeW5jIHVwZGF0ZSB0aGUgYGFjdGl2ZUtleWBcbiAgICAgICAgICAgKiB0aGF0IGZvcmNlIHJlbmRlciBiZWZvcmUgYHVzZVJlZmAgc2V0IHRoZSBuZXh0IGFjdGl2ZUtleVxuICAgICAgICAgICAqL1xuICAgICAgICAgIGNsZWFuUmFmKCk7XG4gICAgICAgICAgcmFmUmVmLmN1cnJlbnQgPSByYWYoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKGFjdGl2ZVJlZi5jdXJyZW50ID09PSB0YXJnZXRLZXkpIHtcbiAgICAgICAgICAgICAgZm9jdXNUYXJnZXRFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBpZiAoW0hPTUUsIEVORF0uaW5jbHVkZXMod2hpY2gpIHx8IG9mZnNldE9iai5zaWJsaW5nIHx8ICFmb2N1c01lbnVFbGVtZW50KSB7XG4gICAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09IFNpYmxpbmcgPT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgICAgLy8gRmluZCB3YWxrYWJsZSBmb2N1cyBtZW51IGVsZW1lbnQgY29udGFpbmVyXG4gICAgICAgIHZhciBwYXJlbnRRdWVyeUNvbnRhaW5lcjtcbiAgICAgICAgaWYgKCFmb2N1c01lbnVFbGVtZW50IHx8IG1vZGUgPT09ICdpbmxpbmUnKSB7XG4gICAgICAgICAgcGFyZW50UXVlcnlDb250YWluZXIgPSBjb250YWluZXJSZWYuY3VycmVudDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwYXJlbnRRdWVyeUNvbnRhaW5lciA9IGZpbmRDb250YWluZXJVTChmb2N1c01lbnVFbGVtZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEdldCBuZXh0IGZvY3VzIGVsZW1lbnRcbiAgICAgICAgdmFyIHRhcmdldEVsZW1lbnQ7XG4gICAgICAgIHZhciBmb2N1c2FibGVFbGVtZW50cyA9IGdldEZvY3VzYWJsZUVsZW1lbnRzKHBhcmVudFF1ZXJ5Q29udGFpbmVyLCBlbGVtZW50cyk7XG4gICAgICAgIGlmICh3aGljaCA9PT0gSE9NRSkge1xuICAgICAgICAgIHRhcmdldEVsZW1lbnQgPSBmb2N1c2FibGVFbGVtZW50c1swXTtcbiAgICAgICAgfSBlbHNlIGlmICh3aGljaCA9PT0gRU5EKSB7XG4gICAgICAgICAgdGFyZ2V0RWxlbWVudCA9IGZvY3VzYWJsZUVsZW1lbnRzW2ZvY3VzYWJsZUVsZW1lbnRzLmxlbmd0aCAtIDFdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRhcmdldEVsZW1lbnQgPSBnZXROZXh0Rm9jdXNFbGVtZW50KHBhcmVudFF1ZXJ5Q29udGFpbmVyLCBlbGVtZW50cywgZm9jdXNNZW51RWxlbWVudCwgb2Zmc2V0T2JqLm9mZnNldCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRm9jdXMgbWVudSBpdGVtXG4gICAgICAgIHRyeUZvY3VzKHRhcmdldEVsZW1lbnQpO1xuXG4gICAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09IElubGluZVRyaWdnZXIgPT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgIH0gZWxzZSBpZiAob2Zmc2V0T2JqLmlubGluZVRyaWdnZXIpIHtcbiAgICAgICAgLy8gSW5saW5lIHRyaWdnZXIgbm8gbmVlZCBzd2l0Y2ggdG8gc3ViIG1lbnUgaXRlbVxuICAgICAgICB0cmlnZ2VyQWNjZXNzaWJpbGl0eU9wZW4oZm9jdXNNZW51S2V5KTtcbiAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09IExldmVsID09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgICAgfSBlbHNlIGlmIChvZmZzZXRPYmoub2Zmc2V0ID4gMCkge1xuICAgICAgICB0cmlnZ2VyQWNjZXNzaWJpbGl0eU9wZW4oZm9jdXNNZW51S2V5LCB0cnVlKTtcbiAgICAgICAgY2xlYW5SYWYoKTtcbiAgICAgICAgcmFmUmVmLmN1cnJlbnQgPSByYWYoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIC8vIEFzeW5jIHNob3VsZCByZXN5bmMgZWxlbWVudHNcbiAgICAgICAgICByZWZyZXNoZWRFbGVtZW50cyA9IHJlZnJlc2hFbGVtZW50cyhrZXlzLCBpZCk7XG4gICAgICAgICAgdmFyIGNvbnRyb2xJZCA9IGZvY3VzTWVudUVsZW1lbnQuZ2V0QXR0cmlidXRlKCdhcmlhLWNvbnRyb2xzJyk7XG4gICAgICAgICAgdmFyIHN1YlF1ZXJ5Q29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoY29udHJvbElkKTtcblxuICAgICAgICAgIC8vIEdldCBzdWIgZm9jdXNhYmxlIG1lbnUgaXRlbVxuICAgICAgICAgIHZhciB0YXJnZXRFbGVtZW50ID0gZ2V0TmV4dEZvY3VzRWxlbWVudChzdWJRdWVyeUNvbnRhaW5lciwgcmVmcmVzaGVkRWxlbWVudHMuZWxlbWVudHMpO1xuXG4gICAgICAgICAgLy8gRm9jdXMgbWVudSBpdGVtXG4gICAgICAgICAgdHJ5Rm9jdXModGFyZ2V0RWxlbWVudCk7XG4gICAgICAgIH0sIDUpO1xuICAgICAgfSBlbHNlIGlmIChvZmZzZXRPYmoub2Zmc2V0IDwgMCkge1xuICAgICAgICB2YXIga2V5UGF0aCA9IGdldEtleVBhdGgoZm9jdXNNZW51S2V5LCB0cnVlKTtcbiAgICAgICAgdmFyIHBhcmVudEtleSA9IGtleVBhdGhba2V5UGF0aC5sZW5ndGggLSAyXTtcbiAgICAgICAgdmFyIHBhcmVudE1lbnVFbGVtZW50ID0ga2V5MmVsZW1lbnQuZ2V0KHBhcmVudEtleSk7XG5cbiAgICAgICAgLy8gRm9jdXMgbWVudSBpdGVtXG4gICAgICAgIHRyaWdnZXJBY2Nlc3NpYmlsaXR5T3BlbihwYXJlbnRLZXksIGZhbHNlKTtcbiAgICAgICAgdHJ5Rm9jdXMocGFyZW50TWVudUVsZW1lbnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFBhc3Mgb3JpZ2luIGtleSBkb3duIGV2ZW50XG4gICAgb3JpZ2luT25LZXlEb3duID09PSBudWxsIHx8IG9yaWdpbk9uS2V5RG93biA9PT0gdm9pZCAwIHx8IG9yaWdpbk9uS2V5RG93bihlKTtcbiAgfTtcbn0iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBNZW51Q29udGV4dCB9IGZyb20gXCIuLi9jb250ZXh0L01lbnVDb250ZXh0XCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VBY3RpdmUoZXZlbnRLZXksIGRpc2FibGVkLCBvbk1vdXNlRW50ZXIsIG9uTW91c2VMZWF2ZSkge1xuICB2YXIgX1JlYWN0JHVzZUNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KE1lbnVDb250ZXh0KSxcbiAgICBhY3RpdmVLZXkgPSBfUmVhY3QkdXNlQ29udGV4dC5hY3RpdmVLZXksXG4gICAgb25BY3RpdmUgPSBfUmVhY3QkdXNlQ29udGV4dC5vbkFjdGl2ZSxcbiAgICBvbkluYWN0aXZlID0gX1JlYWN0JHVzZUNvbnRleHQub25JbmFjdGl2ZTtcbiAgdmFyIHJldCA9IHtcbiAgICBhY3RpdmU6IGFjdGl2ZUtleSA9PT0gZXZlbnRLZXlcbiAgfTtcblxuICAvLyBTa2lwIHdoZW4gZGlzYWJsZWRcbiAgaWYgKCFkaXNhYmxlZCkge1xuICAgIHJldC5vbk1vdXNlRW50ZXIgPSBmdW5jdGlvbiAoZG9tRXZlbnQpIHtcbiAgICAgIG9uTW91c2VFbnRlciA9PT0gbnVsbCB8fCBvbk1vdXNlRW50ZXIgPT09IHZvaWQgMCB8fCBvbk1vdXNlRW50ZXIoe1xuICAgICAgICBrZXk6IGV2ZW50S2V5LFxuICAgICAgICBkb21FdmVudDogZG9tRXZlbnRcbiAgICAgIH0pO1xuICAgICAgb25BY3RpdmUoZXZlbnRLZXkpO1xuICAgIH07XG4gICAgcmV0Lm9uTW91c2VMZWF2ZSA9IGZ1bmN0aW9uIChkb21FdmVudCkge1xuICAgICAgb25Nb3VzZUxlYXZlID09PSBudWxsIHx8IG9uTW91c2VMZWF2ZSA9PT0gdm9pZCAwIHx8IG9uTW91c2VMZWF2ZSh7XG4gICAgICAgIGtleTogZXZlbnRLZXksXG4gICAgICAgIGRvbUV2ZW50OiBkb21FdmVudFxuICAgICAgfSk7XG4gICAgICBvbkluYWN0aXZlKGV2ZW50S2V5KTtcbiAgICB9O1xuICB9XG4gIHJldHVybiByZXQ7XG59IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgTWVudUNvbnRleHQgfSBmcm9tIFwiLi4vY29udGV4dC9NZW51Q29udGV4dFwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlRGlyZWN0aW9uU3R5bGUobGV2ZWwpIHtcbiAgdmFyIF9SZWFjdCR1c2VDb250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChNZW51Q29udGV4dCksXG4gICAgbW9kZSA9IF9SZWFjdCR1c2VDb250ZXh0Lm1vZGUsXG4gICAgcnRsID0gX1JlYWN0JHVzZUNvbnRleHQucnRsLFxuICAgIGlubGluZUluZGVudCA9IF9SZWFjdCR1c2VDb250ZXh0LmlubGluZUluZGVudDtcbiAgaWYgKG1vZGUgIT09ICdpbmxpbmUnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgdmFyIGxlbiA9IGxldmVsO1xuICByZXR1cm4gcnRsID8ge1xuICAgIHBhZGRpbmdSaWdodDogbGVuICogaW5saW5lSW5kZW50XG4gIH0gOiB7XG4gICAgcGFkZGluZ0xlZnQ6IGxlbiAqIGlubGluZUluZGVudFxuICB9O1xufSIsImltcG9ydCBfdG9Db25zdW1hYmxlQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvQ29uc3VtYWJsZUFycmF5XCI7XG5pbXBvcnQgX3NsaWNlZFRvQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXlcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZVJlZiwgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgd2FybmluZyBmcm9tIFwicmMtdXRpbC9lcy93YXJuaW5nXCI7XG5pbXBvcnQgeyBuZXh0U2xpY2UgfSBmcm9tIFwiLi4vdXRpbHMvdGltZVV0aWxcIjtcbnZhciBQQVRIX1NQTElUID0gJ19fUkNfVVRJTF9QQVRIX1NQTElUX18nO1xudmFyIGdldFBhdGhTdHIgPSBmdW5jdGlvbiBnZXRQYXRoU3RyKGtleVBhdGgpIHtcbiAgcmV0dXJuIGtleVBhdGguam9pbihQQVRIX1NQTElUKTtcbn07XG52YXIgZ2V0UGF0aEtleXMgPSBmdW5jdGlvbiBnZXRQYXRoS2V5cyhrZXlQYXRoU3RyKSB7XG4gIHJldHVybiBrZXlQYXRoU3RyLnNwbGl0KFBBVEhfU1BMSVQpO1xufTtcbmV4cG9ydCB2YXIgT1ZFUkZMT1dfS0VZID0gJ3JjLW1lbnUtbW9yZSc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VLZXlSZWNvcmRzKCkge1xuICB2YXIgX1JlYWN0JHVzZVN0YXRlID0gUmVhY3QudXNlU3RhdGUoe30pLFxuICAgIF9SZWFjdCR1c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfUmVhY3QkdXNlU3RhdGUsIDIpLFxuICAgIGludGVybmFsRm9yY2VVcGRhdGUgPSBfUmVhY3QkdXNlU3RhdGUyWzFdO1xuICB2YXIga2V5MnBhdGhSZWYgPSB1c2VSZWYobmV3IE1hcCgpKTtcbiAgdmFyIHBhdGgya2V5UmVmID0gdXNlUmVmKG5ldyBNYXAoKSk7XG4gIHZhciBfUmVhY3QkdXNlU3RhdGUzID0gUmVhY3QudXNlU3RhdGUoW10pLFxuICAgIF9SZWFjdCR1c2VTdGF0ZTQgPSBfc2xpY2VkVG9BcnJheShfUmVhY3QkdXNlU3RhdGUzLCAyKSxcbiAgICBvdmVyZmxvd0tleXMgPSBfUmVhY3QkdXNlU3RhdGU0WzBdLFxuICAgIHNldE92ZXJmbG93S2V5cyA9IF9SZWFjdCR1c2VTdGF0ZTRbMV07XG4gIHZhciB1cGRhdGVSZWYgPSB1c2VSZWYoMCk7XG4gIHZhciBkZXN0cm95UmVmID0gdXNlUmVmKGZhbHNlKTtcbiAgdmFyIGZvcmNlVXBkYXRlID0gZnVuY3Rpb24gZm9yY2VVcGRhdGUoKSB7XG4gICAgaWYgKCFkZXN0cm95UmVmLmN1cnJlbnQpIHtcbiAgICAgIGludGVybmFsRm9yY2VVcGRhdGUoe30pO1xuICAgIH1cbiAgfTtcbiAgdmFyIHJlZ2lzdGVyUGF0aCA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChrZXksIGtleVBhdGgpIHtcbiAgICAvLyBXYXJuaW5nIGZvciBpbnZhbGlkYXRlIG9yIGR1cGxpY2F0ZWQgYGtleWBcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgd2FybmluZygha2V5MnBhdGhSZWYuY3VycmVudC5oYXMoa2V5KSwgXCJEdXBsaWNhdGVkIGtleSAnXCIuY29uY2F0KGtleSwgXCInIHVzZWQgaW4gTWVudSBieSBwYXRoIFtcIikuY29uY2F0KGtleVBhdGguam9pbignID4gJyksIFwiXVwiKSk7XG4gICAgfVxuXG4gICAgLy8gRmlsbCBtYXBcbiAgICB2YXIgY29ubmVjdGVkUGF0aCA9IGdldFBhdGhTdHIoa2V5UGF0aCk7XG4gICAgcGF0aDJrZXlSZWYuY3VycmVudC5zZXQoY29ubmVjdGVkUGF0aCwga2V5KTtcbiAgICBrZXkycGF0aFJlZi5jdXJyZW50LnNldChrZXksIGNvbm5lY3RlZFBhdGgpO1xuICAgIHVwZGF0ZVJlZi5jdXJyZW50ICs9IDE7XG4gICAgdmFyIGlkID0gdXBkYXRlUmVmLmN1cnJlbnQ7XG4gICAgbmV4dFNsaWNlKGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChpZCA9PT0gdXBkYXRlUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgZm9yY2VVcGRhdGUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSwgW10pO1xuICB2YXIgdW5yZWdpc3RlclBhdGggPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoa2V5LCBrZXlQYXRoKSB7XG4gICAgdmFyIGNvbm5lY3RlZFBhdGggPSBnZXRQYXRoU3RyKGtleVBhdGgpO1xuICAgIHBhdGgya2V5UmVmLmN1cnJlbnQuZGVsZXRlKGNvbm5lY3RlZFBhdGgpO1xuICAgIGtleTJwYXRoUmVmLmN1cnJlbnQuZGVsZXRlKGtleSk7XG4gIH0sIFtdKTtcbiAgdmFyIHJlZnJlc2hPdmVyZmxvd0tleXMgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoa2V5cykge1xuICAgIHNldE92ZXJmbG93S2V5cyhrZXlzKTtcbiAgfSwgW10pO1xuICB2YXIgZ2V0S2V5UGF0aCA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChldmVudEtleSwgaW5jbHVkZU92ZXJmbG93KSB7XG4gICAgdmFyIGZ1bGxQYXRoID0ga2V5MnBhdGhSZWYuY3VycmVudC5nZXQoZXZlbnRLZXkpIHx8ICcnO1xuICAgIHZhciBrZXlzID0gZ2V0UGF0aEtleXMoZnVsbFBhdGgpO1xuICAgIGlmIChpbmNsdWRlT3ZlcmZsb3cgJiYgb3ZlcmZsb3dLZXlzLmluY2x1ZGVzKGtleXNbMF0pKSB7XG4gICAgICBrZXlzLnVuc2hpZnQoT1ZFUkZMT1dfS0VZKTtcbiAgICB9XG4gICAgcmV0dXJuIGtleXM7XG4gIH0sIFtvdmVyZmxvd0tleXNdKTtcbiAgdmFyIGlzU3ViUGF0aEtleSA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChwYXRoS2V5cywgZXZlbnRLZXkpIHtcbiAgICByZXR1cm4gcGF0aEtleXMuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICByZXR1cm4gaXRlbSAhPT0gdW5kZWZpbmVkO1xuICAgIH0pLnNvbWUoZnVuY3Rpb24gKHBhdGhLZXkpIHtcbiAgICAgIHZhciBwYXRoS2V5TGlzdCA9IGdldEtleVBhdGgocGF0aEtleSwgdHJ1ZSk7XG4gICAgICByZXR1cm4gcGF0aEtleUxpc3QuaW5jbHVkZXMoZXZlbnRLZXkpO1xuICAgIH0pO1xuICB9LCBbZ2V0S2V5UGF0aF0pO1xuICB2YXIgZ2V0S2V5cyA9IGZ1bmN0aW9uIGdldEtleXMoKSB7XG4gICAgdmFyIGtleXMgPSBfdG9Db25zdW1hYmxlQXJyYXkoa2V5MnBhdGhSZWYuY3VycmVudC5rZXlzKCkpO1xuICAgIGlmIChvdmVyZmxvd0tleXMubGVuZ3RoKSB7XG4gICAgICBrZXlzLnB1c2goT1ZFUkZMT1dfS0VZKTtcbiAgICB9XG4gICAgcmV0dXJuIGtleXM7XG4gIH07XG5cbiAgLyoqXG4gICAqIEZpbmQgY3VycmVudCBrZXkgcmVsYXRlZCBjaGlsZCBwYXRoIGtleXNcbiAgICovXG4gIHZhciBnZXRTdWJQYXRoS2V5cyA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgY29ubmVjdGVkUGF0aCA9IFwiXCIuY29uY2F0KGtleTJwYXRoUmVmLmN1cnJlbnQuZ2V0KGtleSkpLmNvbmNhdChQQVRIX1NQTElUKTtcbiAgICB2YXIgcGF0aEtleXMgPSBuZXcgU2V0KCk7XG4gICAgX3RvQ29uc3VtYWJsZUFycmF5KHBhdGgya2V5UmVmLmN1cnJlbnQua2V5cygpKS5mb3JFYWNoKGZ1bmN0aW9uIChwYXRoS2V5KSB7XG4gICAgICBpZiAocGF0aEtleS5zdGFydHNXaXRoKGNvbm5lY3RlZFBhdGgpKSB7XG4gICAgICAgIHBhdGhLZXlzLmFkZChwYXRoMmtleVJlZi5jdXJyZW50LmdldChwYXRoS2V5KSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHBhdGhLZXlzO1xuICB9LCBbXSk7XG4gIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIGRlc3Ryb3lSZWYuY3VycmVudCA9IHRydWU7XG4gICAgfTtcbiAgfSwgW10pO1xuICByZXR1cm4ge1xuICAgIC8vIFJlZ2lzdGVyXG4gICAgcmVnaXN0ZXJQYXRoOiByZWdpc3RlclBhdGgsXG4gICAgdW5yZWdpc3RlclBhdGg6IHVucmVnaXN0ZXJQYXRoLFxuICAgIHJlZnJlc2hPdmVyZmxvd0tleXM6IHJlZnJlc2hPdmVyZmxvd0tleXMsXG4gICAgLy8gVXRpbFxuICAgIGlzU3ViUGF0aEtleTogaXNTdWJQYXRoS2V5LFxuICAgIGdldEtleVBhdGg6IGdldEtleVBhdGgsXG4gICAgZ2V0S2V5czogZ2V0S2V5cyxcbiAgICBnZXRTdWJQYXRoS2V5czogZ2V0U3ViUGF0aEtleXNcbiAgfTtcbn0iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbi8qKlxuICogQ2FjaGUgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBhbHdheXMgcmV0dXJuIHNhbWUgcmVmIGluc3RlYWQuXG4gKiBUaGlzIGlzIHVzZWQgZm9yIGNvbnRleHQgb3B0aW1pemF0aW9uLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VNZW1vQ2FsbGJhY2soZnVuYykge1xuICB2YXIgZnVuUmVmID0gUmVhY3QudXNlUmVmKGZ1bmMpO1xuICBmdW5SZWYuY3VycmVudCA9IGZ1bmM7XG4gIHZhciBjYWxsYmFjayA9IFJlYWN0LnVzZUNhbGxiYWNrKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgX2Z1blJlZiRjdXJyZW50O1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG4gICAgcmV0dXJuIChfZnVuUmVmJGN1cnJlbnQgPSBmdW5SZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2Z1blJlZiRjdXJyZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZnVuUmVmJGN1cnJlbnQuY2FsbC5hcHBseShfZnVuUmVmJGN1cnJlbnQsIFtmdW5SZWZdLmNvbmNhdChhcmdzKSk7XG4gIH0sIFtdKTtcbiAgcmV0dXJuIGZ1bmMgPyBjYWxsYmFjayA6IHVuZGVmaW5lZDtcbn0iLCJpbXBvcnQgX3NsaWNlZFRvQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXlcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB1c2VNZXJnZWRTdGF0ZSBmcm9tIFwicmMtdXRpbC9lcy9ob29rcy91c2VNZXJnZWRTdGF0ZVwiO1xudmFyIHVuaXF1ZVByZWZpeCA9IE1hdGgucmFuZG9tKCkudG9GaXhlZCg1KS50b1N0cmluZygpLnNsaWNlKDIpO1xudmFyIGludGVybmFsSWQgPSAwO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlVVVJRChpZCkge1xuICB2YXIgX3VzZU1lcmdlZFN0YXRlID0gdXNlTWVyZ2VkU3RhdGUoaWQsIHtcbiAgICAgIHZhbHVlOiBpZFxuICAgIH0pLFxuICAgIF91c2VNZXJnZWRTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlTWVyZ2VkU3RhdGUsIDIpLFxuICAgIHV1aWQgPSBfdXNlTWVyZ2VkU3RhdGUyWzBdLFxuICAgIHNldFVVSUQgPSBfdXNlTWVyZ2VkU3RhdGUyWzFdO1xuICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGludGVybmFsSWQgKz0gMTtcbiAgICB2YXIgbmV3SWQgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Rlc3QnID8gJ3Rlc3QnIDogXCJcIi5jb25jYXQodW5pcXVlUHJlZml4LCBcIi1cIikuY29uY2F0KGludGVybmFsSWQpO1xuICAgIHNldFVVSUQoXCJyYy1tZW51LXV1aWQtXCIuY29uY2F0KG5ld0lkKSk7XG4gIH0sIFtdKTtcbiAgcmV0dXJuIHV1aWQ7XG59IiwiaW1wb3J0IE1lbnUgZnJvbSBcIi4vTWVudVwiO1xuaW1wb3J0IE1lbnVJdGVtIGZyb20gXCIuL01lbnVJdGVtXCI7XG5pbXBvcnQgU3ViTWVudSBmcm9tIFwiLi9TdWJNZW51XCI7XG5pbXBvcnQgTWVudUl0ZW1Hcm91cCBmcm9tIFwiLi9NZW51SXRlbUdyb3VwXCI7XG5pbXBvcnQgeyB1c2VGdWxsUGF0aCB9IGZyb20gXCIuL2NvbnRleHQvUGF0aENvbnRleHRcIjtcbmltcG9ydCBEaXZpZGVyIGZyb20gXCIuL0RpdmlkZXJcIjtcbmV4cG9ydCB7IFN1Yk1lbnUsIE1lbnVJdGVtIGFzIEl0ZW0sIE1lbnVJdGVtLCBNZW51SXRlbUdyb3VwLCBNZW51SXRlbUdyb3VwIGFzIEl0ZW1Hcm91cCwgRGl2aWRlciwgLyoqIEBwcml2YXRlIE9ubHkgdXNlZCBmb3IgYW50ZCBpbnRlcm5hbC4gRG8gbm90IHVzZSBpbiB5b3VyIHByb2R1Y3Rpb24uICovXG51c2VGdWxsUGF0aCB9O1xudmFyIEV4cG9ydE1lbnUgPSBNZW51O1xuRXhwb3J0TWVudS5JdGVtID0gTWVudUl0ZW07XG5FeHBvcnRNZW51LlN1Yk1lbnUgPSBTdWJNZW51O1xuRXhwb3J0TWVudS5JdGVtR3JvdXAgPSBNZW51SXRlbUdyb3VwO1xuRXhwb3J0TWVudS5EaXZpZGVyID0gRGl2aWRlcjtcbmV4cG9ydCBkZWZhdWx0IEV4cG9ydE1lbnU7IiwidmFyIGF1dG9BZGp1c3RPdmVyZmxvdyA9IHtcbiAgYWRqdXN0WDogMSxcbiAgYWRqdXN0WTogMVxufTtcbmV4cG9ydCB2YXIgcGxhY2VtZW50cyA9IHtcbiAgdG9wTGVmdDoge1xuICAgIHBvaW50czogWydibCcsICd0bCddLFxuICAgIG92ZXJmbG93OiBhdXRvQWRqdXN0T3ZlcmZsb3dcbiAgfSxcbiAgdG9wUmlnaHQ6IHtcbiAgICBwb2ludHM6IFsnYnInLCAndHInXSxcbiAgICBvdmVyZmxvdzogYXV0b0FkanVzdE92ZXJmbG93XG4gIH0sXG4gIGJvdHRvbUxlZnQ6IHtcbiAgICBwb2ludHM6IFsndGwnLCAnYmwnXSxcbiAgICBvdmVyZmxvdzogYXV0b0FkanVzdE92ZXJmbG93XG4gIH0sXG4gIGJvdHRvbVJpZ2h0OiB7XG4gICAgcG9pbnRzOiBbJ3RyJywgJ2JyJ10sXG4gICAgb3ZlcmZsb3c6IGF1dG9BZGp1c3RPdmVyZmxvd1xuICB9LFxuICBsZWZ0VG9wOiB7XG4gICAgcG9pbnRzOiBbJ3RyJywgJ3RsJ10sXG4gICAgb3ZlcmZsb3c6IGF1dG9BZGp1c3RPdmVyZmxvd1xuICB9LFxuICBsZWZ0Qm90dG9tOiB7XG4gICAgcG9pbnRzOiBbJ2JyJywgJ2JsJ10sXG4gICAgb3ZlcmZsb3c6IGF1dG9BZGp1c3RPdmVyZmxvd1xuICB9LFxuICByaWdodFRvcDoge1xuICAgIHBvaW50czogWyd0bCcsICd0ciddLFxuICAgIG92ZXJmbG93OiBhdXRvQWRqdXN0T3ZlcmZsb3dcbiAgfSxcbiAgcmlnaHRCb3R0b206IHtcbiAgICBwb2ludHM6IFsnYmwnLCAnYnInXSxcbiAgICBvdmVyZmxvdzogYXV0b0FkanVzdE92ZXJmbG93XG4gIH1cbn07XG5leHBvcnQgdmFyIHBsYWNlbWVudHNSdGwgPSB7XG4gIHRvcExlZnQ6IHtcbiAgICBwb2ludHM6IFsnYmwnLCAndGwnXSxcbiAgICBvdmVyZmxvdzogYXV0b0FkanVzdE92ZXJmbG93XG4gIH0sXG4gIHRvcFJpZ2h0OiB7XG4gICAgcG9pbnRzOiBbJ2JyJywgJ3RyJ10sXG4gICAgb3ZlcmZsb3c6IGF1dG9BZGp1c3RPdmVyZmxvd1xuICB9LFxuICBib3R0b21MZWZ0OiB7XG4gICAgcG9pbnRzOiBbJ3RsJywgJ2JsJ10sXG4gICAgb3ZlcmZsb3c6IGF1dG9BZGp1c3RPdmVyZmxvd1xuICB9LFxuICBib3R0b21SaWdodDoge1xuICAgIHBvaW50czogWyd0cicsICdiciddLFxuICAgIG92ZXJmbG93OiBhdXRvQWRqdXN0T3ZlcmZsb3dcbiAgfSxcbiAgcmlnaHRUb3A6IHtcbiAgICBwb2ludHM6IFsndHInLCAndGwnXSxcbiAgICBvdmVyZmxvdzogYXV0b0FkanVzdE92ZXJmbG93XG4gIH0sXG4gIHJpZ2h0Qm90dG9tOiB7XG4gICAgcG9pbnRzOiBbJ2JyJywgJ2JsJ10sXG4gICAgb3ZlcmZsb3c6IGF1dG9BZGp1c3RPdmVyZmxvd1xuICB9LFxuICBsZWZ0VG9wOiB7XG4gICAgcG9pbnRzOiBbJ3RsJywgJ3RyJ10sXG4gICAgb3ZlcmZsb3c6IGF1dG9BZGp1c3RPdmVyZmxvd1xuICB9LFxuICBsZWZ0Qm90dG9tOiB7XG4gICAgcG9pbnRzOiBbJ2JsJywgJ2JyJ10sXG4gICAgb3ZlcmZsb3c6IGF1dG9BZGp1c3RPdmVyZmxvd1xuICB9XG59O1xuZXhwb3J0IGRlZmF1bHQgcGxhY2VtZW50czsiLCJpbXBvcnQgX3RvQ29uc3VtYWJsZUFycmF5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b0NvbnN1bWFibGVBcnJheVwiO1xuaW1wb3J0IHRvQXJyYXkgZnJvbSBcInJjLXV0aWwvZXMvQ2hpbGRyZW4vdG9BcnJheVwiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQ2hpbGRyZW4oY2hpbGRyZW4sIGtleVBhdGgpIHtcbiAgcmV0dXJuIHRvQXJyYXkoY2hpbGRyZW4pLm1hcChmdW5jdGlvbiAoY2hpbGQsIGluZGV4KSB7XG4gICAgaWYgKCAvKiNfX1BVUkVfXyovUmVhY3QuaXNWYWxpZEVsZW1lbnQoY2hpbGQpKSB7XG4gICAgICB2YXIgX2V2ZW50S2V5LCBfY2hpbGQkcHJvcHM7XG4gICAgICB2YXIga2V5ID0gY2hpbGQua2V5O1xuICAgICAgdmFyIGV2ZW50S2V5ID0gKF9ldmVudEtleSA9IChfY2hpbGQkcHJvcHMgPSBjaGlsZC5wcm9wcykgPT09IG51bGwgfHwgX2NoaWxkJHByb3BzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfY2hpbGQkcHJvcHMuZXZlbnRLZXkpICE9PSBudWxsICYmIF9ldmVudEtleSAhPT0gdm9pZCAwID8gX2V2ZW50S2V5IDoga2V5O1xuICAgICAgdmFyIGVtcHR5S2V5ID0gZXZlbnRLZXkgPT09IG51bGwgfHwgZXZlbnRLZXkgPT09IHVuZGVmaW5lZDtcbiAgICAgIGlmIChlbXB0eUtleSkge1xuICAgICAgICBldmVudEtleSA9IFwidG1wX2tleS1cIi5jb25jYXQoW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShrZXlQYXRoKSwgW2luZGV4XSkuam9pbignLScpKTtcbiAgICAgIH1cbiAgICAgIHZhciBjbG9uZVByb3BzID0ge1xuICAgICAgICBrZXk6IGV2ZW50S2V5LFxuICAgICAgICBldmVudEtleTogZXZlbnRLZXlcbiAgICAgIH07XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBlbXB0eUtleSkge1xuICAgICAgICBjbG9uZVByb3BzLndhcm5LZXkgPSB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGQsIGNsb25lUHJvcHMpO1xuICAgIH1cbiAgICByZXR1cm4gY2hpbGQ7XG4gIH0pO1xufSIsImV4cG9ydCBmdW5jdGlvbiBnZXRNb3Rpb24obW9kZSwgbW90aW9uLCBkZWZhdWx0TW90aW9ucykge1xuICBpZiAobW90aW9uKSB7XG4gICAgcmV0dXJuIG1vdGlvbjtcbiAgfVxuICBpZiAoZGVmYXVsdE1vdGlvbnMpIHtcbiAgICByZXR1cm4gZGVmYXVsdE1vdGlvbnNbbW9kZV0gfHwgZGVmYXVsdE1vdGlvbnMub3RoZXI7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn0iLCJpbXBvcnQgX29iamVjdFNwcmVhZCBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0U3ByZWFkMlwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc1wiO1xuaW1wb3J0IF90eXBlb2YgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZlwiO1xudmFyIF9leGNsdWRlZCA9IFtcImxhYmVsXCIsIFwiY2hpbGRyZW5cIiwgXCJrZXlcIiwgXCJ0eXBlXCIsIFwiZXh0cmFcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgRGl2aWRlciBmcm9tIFwiLi4vRGl2aWRlclwiO1xuaW1wb3J0IE1lbnVJdGVtIGZyb20gXCIuLi9NZW51SXRlbVwiO1xuaW1wb3J0IE1lbnVJdGVtR3JvdXAgZnJvbSBcIi4uL01lbnVJdGVtR3JvdXBcIjtcbmltcG9ydCBTdWJNZW51IGZyb20gXCIuLi9TdWJNZW51XCI7XG5pbXBvcnQgeyBwYXJzZUNoaWxkcmVuIH0gZnJvbSBcIi4vY29tbW9uVXRpbFwiO1xuZnVuY3Rpb24gY29udmVydEl0ZW1zVG9Ob2RlcyhsaXN0LCBjb21wb25lbnRzLCBwcmVmaXhDbHMpIHtcbiAgdmFyIE1lcmdlZE1lbnVJdGVtID0gY29tcG9uZW50cy5pdGVtLFxuICAgIE1lcmdlZE1lbnVJdGVtR3JvdXAgPSBjb21wb25lbnRzLmdyb3VwLFxuICAgIE1lcmdlZFN1Yk1lbnUgPSBjb21wb25lbnRzLnN1Ym1lbnUsXG4gICAgTWVyZ2VkRGl2aWRlciA9IGNvbXBvbmVudHMuZGl2aWRlcjtcbiAgcmV0dXJuIChsaXN0IHx8IFtdKS5tYXAoZnVuY3Rpb24gKG9wdCwgaW5kZXgpIHtcbiAgICBpZiAob3B0ICYmIF90eXBlb2Yob3B0KSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHZhciBfcmVmID0gb3B0LFxuICAgICAgICBsYWJlbCA9IF9yZWYubGFiZWwsXG4gICAgICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgICAga2V5ID0gX3JlZi5rZXksXG4gICAgICAgIHR5cGUgPSBfcmVmLnR5cGUsXG4gICAgICAgIGV4dHJhID0gX3JlZi5leHRyYSxcbiAgICAgICAgcmVzdFByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gICAgICB2YXIgbWVyZ2VkS2V5ID0ga2V5ICE9PSBudWxsICYmIGtleSAhPT0gdm9pZCAwID8ga2V5IDogXCJ0bXAtXCIuY29uY2F0KGluZGV4KTtcblxuICAgICAgLy8gTWVudUl0ZW1Hcm91cCAmIFN1Yk1lbnVJdGVtXG4gICAgICBpZiAoY2hpbGRyZW4gfHwgdHlwZSA9PT0gJ2dyb3VwJykge1xuICAgICAgICBpZiAodHlwZSA9PT0gJ2dyb3VwJykge1xuICAgICAgICAgIC8vIEdyb3VwXG4gICAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KE1lcmdlZE1lbnVJdGVtR3JvdXAsIF9leHRlbmRzKHtcbiAgICAgICAgICAgIGtleTogbWVyZ2VkS2V5XG4gICAgICAgICAgfSwgcmVzdFByb3BzLCB7XG4gICAgICAgICAgICB0aXRsZTogbGFiZWxcbiAgICAgICAgICB9KSwgY29udmVydEl0ZW1zVG9Ob2RlcyhjaGlsZHJlbiwgY29tcG9uZW50cywgcHJlZml4Q2xzKSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdWIgTWVudVxuICAgICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTWVyZ2VkU3ViTWVudSwgX2V4dGVuZHMoe1xuICAgICAgICAgIGtleTogbWVyZ2VkS2V5XG4gICAgICAgIH0sIHJlc3RQcm9wcywge1xuICAgICAgICAgIHRpdGxlOiBsYWJlbFxuICAgICAgICB9KSwgY29udmVydEl0ZW1zVG9Ob2RlcyhjaGlsZHJlbiwgY29tcG9uZW50cywgcHJlZml4Q2xzKSk7XG4gICAgICB9XG5cbiAgICAgIC8vIE1lbnVJdGVtICYgRGl2aWRlclxuICAgICAgaWYgKHR5cGUgPT09ICdkaXZpZGVyJykge1xuICAgICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTWVyZ2VkRGl2aWRlciwgX2V4dGVuZHMoe1xuICAgICAgICAgIGtleTogbWVyZ2VkS2V5XG4gICAgICAgIH0sIHJlc3RQcm9wcykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KE1lcmdlZE1lbnVJdGVtLCBfZXh0ZW5kcyh7XG4gICAgICAgIGtleTogbWVyZ2VkS2V5XG4gICAgICB9LCByZXN0UHJvcHMsIHtcbiAgICAgICAgZXh0cmE6IGV4dHJhXG4gICAgICB9KSwgbGFiZWwsICghIWV4dHJhIHx8IGV4dHJhID09PSAwKSAmJiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge1xuICAgICAgICBjbGFzc05hbWU6IFwiXCIuY29uY2F0KHByZWZpeENscywgXCItaXRlbS1leHRyYVwiKVxuICAgICAgfSwgZXh0cmEpKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH0pLmZpbHRlcihmdW5jdGlvbiAob3B0KSB7XG4gICAgcmV0dXJuIG9wdDtcbiAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VJdGVtcyhjaGlsZHJlbiwgaXRlbXMsIGtleVBhdGgsIGNvbXBvbmVudHMsIHByZWZpeENscykge1xuICB2YXIgY2hpbGROb2RlcyA9IGNoaWxkcmVuO1xuICB2YXIgbWVyZ2VkQ29tcG9uZW50cyA9IF9vYmplY3RTcHJlYWQoe1xuICAgIGRpdmlkZXI6IERpdmlkZXIsXG4gICAgaXRlbTogTWVudUl0ZW0sXG4gICAgZ3JvdXA6IE1lbnVJdGVtR3JvdXAsXG4gICAgc3VibWVudTogU3ViTWVudVxuICB9LCBjb21wb25lbnRzKTtcbiAgaWYgKGl0ZW1zKSB7XG4gICAgY2hpbGROb2RlcyA9IGNvbnZlcnRJdGVtc1RvTm9kZXMoaXRlbXMsIG1lcmdlZENvbXBvbmVudHMsIHByZWZpeENscyk7XG4gIH1cbiAgcmV0dXJuIHBhcnNlQ2hpbGRyZW4oY2hpbGROb2Rlcywga2V5UGF0aCk7XG59IiwiZXhwb3J0IGZ1bmN0aW9uIG5leHRTbGljZShjYWxsYmFjaykge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBQcm9taXNlLnJlc29sdmUoKS50aGVuKGNhbGxiYWNrKTtcbn0iLCJpbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc1wiO1xudmFyIF9leGNsdWRlZCA9IFtcIml0ZW1cIl07XG5pbXBvcnQgd2FybmluZyBmcm9tIFwicmMtdXRpbC9lcy93YXJuaW5nXCI7XG5cbi8qKlxuICogYG9uQ2xpY2tgIGV2ZW50IHJldHVybiBgaW5mby5pdGVtYCB3aGljaCBwb2ludCB0byByZWFjdCBub2RlIGRpcmVjdGx5LlxuICogV2Ugc2hvdWxkIHdhcm5pbmcgdGhpcyBzaW5jZSBpdCB3aWxsIG5vdCB3b3JrIG9uIEZDLlxuICovXG5leHBvcnQgZnVuY3Rpb24gd2Fybkl0ZW1Qcm9wKF9yZWYpIHtcbiAgdmFyIGl0ZW0gPSBfcmVmLml0ZW0sXG4gICAgcmVzdEluZm8gPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlc3RJbmZvLCAnaXRlbScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHdhcm5pbmcoZmFsc2UsICdgaW5mby5pdGVtYCBpcyBkZXByZWNhdGVkIHNpbmNlIHdlIHdpbGwgbW92ZSB0byBmdW5jdGlvbiBjb21wb25lbnQgdGhhdCBub3QgcHJvdmlkZXMgUmVhY3QgTm9kZSBpbnN0YW5jZSBpbiBmdXR1cmUuJyk7XG4gICAgICByZXR1cm4gaXRlbTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdEluZm87XG59IiwiaW1wb3J0IF9kZWZpbmVQcm9wZXJ0eSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHlcIjtcbmltcG9ydCBfb2JqZWN0U3ByZWFkIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyXCI7XG5pbXBvcnQgX3NsaWNlZFRvQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXlcIjtcbmltcG9ydCBfdHlwZW9mIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2ZcIjtcbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L2RlZmF1bHQtcHJvcHMtbWF0Y2gtcHJvcC10eXBlcywgcmVhY3Qvbm8tbXVsdGktY29tcCwgcmVhY3QvcHJvcC10eXBlcyAqL1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgZmluZERPTU5vZGUgZnJvbSBcInJjLXV0aWwvZXMvRG9tL2ZpbmRET01Ob2RlXCI7XG5pbXBvcnQgeyBmaWxsUmVmLCBnZXROb2RlUmVmLCBzdXBwb3J0UmVmIH0gZnJvbSBcInJjLXV0aWwvZXMvcmVmXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBDb250ZXh0IH0gZnJvbSBcIi4vY29udGV4dFwiO1xuaW1wb3J0IERvbVdyYXBwZXIgZnJvbSBcIi4vRG9tV3JhcHBlclwiO1xuaW1wb3J0IHVzZVN0YXR1cyBmcm9tIFwiLi9ob29rcy91c2VTdGF0dXNcIjtcbmltcG9ydCB7IGlzQWN0aXZlIH0gZnJvbSBcIi4vaG9va3MvdXNlU3RlcFF1ZXVlXCI7XG5pbXBvcnQgeyBTVEFUVVNfTk9ORSwgU1RFUF9QUkVQQVJFLCBTVEVQX1NUQVJUIH0gZnJvbSBcIi4vaW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBnZXRUcmFuc2l0aW9uTmFtZSwgc3VwcG9ydFRyYW5zaXRpb24gfSBmcm9tIFwiLi91dGlsL21vdGlvblwiO1xuLyoqXG4gKiBgdHJhbnNpdGlvblN1cHBvcnRgIGlzIHVzZWQgZm9yIG5vbmUgdHJhbnNpdGlvbiB0ZXN0IGNhc2UuXG4gKiBEZWZhdWx0IHdlIHVzZSBicm93c2VyIHRyYW5zaXRpb24gZXZlbnQgc3VwcG9ydCBjaGVjay5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbkNTU01vdGlvbihjb25maWcpIHtcbiAgdmFyIHRyYW5zaXRpb25TdXBwb3J0ID0gY29uZmlnO1xuICBpZiAoX3R5cGVvZihjb25maWcpID09PSAnb2JqZWN0Jykge1xuICAgIHRyYW5zaXRpb25TdXBwb3J0ID0gY29uZmlnLnRyYW5zaXRpb25TdXBwb3J0O1xuICB9XG4gIGZ1bmN0aW9uIGlzU3VwcG9ydFRyYW5zaXRpb24ocHJvcHMsIGNvbnRleHRNb3Rpb24pIHtcbiAgICByZXR1cm4gISEocHJvcHMubW90aW9uTmFtZSAmJiB0cmFuc2l0aW9uU3VwcG9ydCAmJiBjb250ZXh0TW90aW9uICE9PSBmYWxzZSk7XG4gIH1cbiAgdmFyIENTU01vdGlvbiA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIChwcm9wcywgcmVmKSB7XG4gICAgdmFyIF9wcm9wcyR2aXNpYmxlID0gcHJvcHMudmlzaWJsZSxcbiAgICAgIHZpc2libGUgPSBfcHJvcHMkdmlzaWJsZSA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9wcm9wcyR2aXNpYmxlLFxuICAgICAgX3Byb3BzJHJlbW92ZU9uTGVhdmUgPSBwcm9wcy5yZW1vdmVPbkxlYXZlLFxuICAgICAgcmVtb3ZlT25MZWF2ZSA9IF9wcm9wcyRyZW1vdmVPbkxlYXZlID09PSB2b2lkIDAgPyB0cnVlIDogX3Byb3BzJHJlbW92ZU9uTGVhdmUsXG4gICAgICBmb3JjZVJlbmRlciA9IHByb3BzLmZvcmNlUmVuZGVyLFxuICAgICAgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbixcbiAgICAgIG1vdGlvbk5hbWUgPSBwcm9wcy5tb3Rpb25OYW1lLFxuICAgICAgbGVhdmVkQ2xhc3NOYW1lID0gcHJvcHMubGVhdmVkQ2xhc3NOYW1lLFxuICAgICAgZXZlbnRQcm9wcyA9IHByb3BzLmV2ZW50UHJvcHM7XG4gICAgdmFyIF9SZWFjdCR1c2VDb250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChDb250ZXh0KSxcbiAgICAgIGNvbnRleHRNb3Rpb24gPSBfUmVhY3QkdXNlQ29udGV4dC5tb3Rpb247XG4gICAgdmFyIHN1cHBvcnRNb3Rpb24gPSBpc1N1cHBvcnRUcmFuc2l0aW9uKHByb3BzLCBjb250ZXh0TW90aW9uKTtcblxuICAgIC8vIFJlZiB0byB0aGUgcmVhY3Qgbm9kZSwgaXQgbWF5IGJlIGEgSFRNTEVsZW1lbnRcbiAgICB2YXIgbm9kZVJlZiA9IHVzZVJlZigpO1xuICAgIC8vIFJlZiB0byB0aGUgZG9tIHdyYXBwZXIgaW4gY2FzZSByZWYgY2FuIG5vdCBwYXNzIHRvIEhUTUxFbGVtZW50XG4gICAgdmFyIHdyYXBwZXJOb2RlUmVmID0gdXNlUmVmKCk7XG4gICAgZnVuY3Rpb24gZ2V0RG9tRWxlbWVudCgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIEhlcmUgd2UncmUgYXZvaWRpbmcgY2FsbCBmb3IgZmluZERPTU5vZGUgc2luY2UgaXQncyBkZXByZWNhdGVkXG4gICAgICAgIC8vIGluIHN0cmljdCBtb2RlLiBXZSdyZSBjYWxsaW5nIGl0IG9ubHkgd2hlbiBub2RlIHJlZiBpcyBub3RcbiAgICAgICAgLy8gYW4gaW5zdGFuY2Ugb2YgRE9NIEhUTUxFbGVtZW50LiBPdGhlcndpc2UgdXNlXG4gICAgICAgIC8vIGZpbmRET01Ob2RlIGFzIGEgZmluYWwgcmVzb3J0XG4gICAgICAgIHJldHVybiBub2RlUmVmLmN1cnJlbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCA/IG5vZGVSZWYuY3VycmVudCA6IGZpbmRET01Ob2RlKHdyYXBwZXJOb2RlUmVmLmN1cnJlbnQpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBPbmx5IGhhcHBlbiB3aGVuIGBtb3Rpb25EZWFkbGluZWAgdHJpZ2dlciBidXQgZWxlbWVudCByZW1vdmVkLlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gICAgdmFyIF91c2VTdGF0dXMgPSB1c2VTdGF0dXMoc3VwcG9ydE1vdGlvbiwgdmlzaWJsZSwgZ2V0RG9tRWxlbWVudCwgcHJvcHMpLFxuICAgICAgX3VzZVN0YXR1czIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdHVzLCA0KSxcbiAgICAgIHN0YXR1cyA9IF91c2VTdGF0dXMyWzBdLFxuICAgICAgc3RhdHVzU3RlcCA9IF91c2VTdGF0dXMyWzFdLFxuICAgICAgc3RhdHVzU3R5bGUgPSBfdXNlU3RhdHVzMlsyXSxcbiAgICAgIG1lcmdlZFZpc2libGUgPSBfdXNlU3RhdHVzMlszXTtcblxuICAgIC8vIFJlY29yZCB3aGV0aGVyIGNvbnRlbnQgaGFzIHJlbmRlcmVkXG4gICAgLy8gV2lsbCByZXR1cm4gbnVsbCBmb3IgdW4tcmVuZGVyZWQgZXZlbiB3aGVuIGByZW1vdmVPbkxlYXZlPXtmYWxzZX1gXG4gICAgdmFyIHJlbmRlcmVkUmVmID0gUmVhY3QudXNlUmVmKG1lcmdlZFZpc2libGUpO1xuICAgIGlmIChtZXJnZWRWaXNpYmxlKSB7XG4gICAgICByZW5kZXJlZFJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09IFJlZnMgPT09PT09PT09PT09PT09PT09PT09PVxuICAgIHZhciBzZXROb2RlUmVmID0gUmVhY3QudXNlQ2FsbGJhY2soZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgIG5vZGVSZWYuY3VycmVudCA9IG5vZGU7XG4gICAgICBmaWxsUmVmKHJlZiwgbm9kZSk7XG4gICAgfSwgW3JlZl0pO1xuXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09IFJlbmRlciA9PT09PT09PT09PT09PT09PT09PT1cbiAgICB2YXIgbW90aW9uQ2hpbGRyZW47XG4gICAgdmFyIG1lcmdlZFByb3BzID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBldmVudFByb3BzKSwge30sIHtcbiAgICAgIHZpc2libGU6IHZpc2libGVcbiAgICB9KTtcbiAgICBpZiAoIWNoaWxkcmVuKSB7XG4gICAgICAvLyBObyBjaGlsZHJlblxuICAgICAgbW90aW9uQ2hpbGRyZW4gPSBudWxsO1xuICAgIH0gZWxzZSBpZiAoc3RhdHVzID09PSBTVEFUVVNfTk9ORSkge1xuICAgICAgLy8gU3RhYmxlIGNoaWxkcmVuXG4gICAgICBpZiAobWVyZ2VkVmlzaWJsZSkge1xuICAgICAgICBtb3Rpb25DaGlsZHJlbiA9IGNoaWxkcmVuKF9vYmplY3RTcHJlYWQoe30sIG1lcmdlZFByb3BzKSwgc2V0Tm9kZVJlZik7XG4gICAgICB9IGVsc2UgaWYgKCFyZW1vdmVPbkxlYXZlICYmIHJlbmRlcmVkUmVmLmN1cnJlbnQgJiYgbGVhdmVkQ2xhc3NOYW1lKSB7XG4gICAgICAgIG1vdGlvbkNoaWxkcmVuID0gY2hpbGRyZW4oX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBtZXJnZWRQcm9wcyksIHt9LCB7XG4gICAgICAgICAgY2xhc3NOYW1lOiBsZWF2ZWRDbGFzc05hbWVcbiAgICAgICAgfSksIHNldE5vZGVSZWYpO1xuICAgICAgfSBlbHNlIGlmIChmb3JjZVJlbmRlciB8fCAhcmVtb3ZlT25MZWF2ZSAmJiAhbGVhdmVkQ2xhc3NOYW1lKSB7XG4gICAgICAgIG1vdGlvbkNoaWxkcmVuID0gY2hpbGRyZW4oX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBtZXJnZWRQcm9wcyksIHt9LCB7XG4gICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgIGRpc3BsYXk6ICdub25lJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSksIHNldE5vZGVSZWYpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbW90aW9uQ2hpbGRyZW4gPSBudWxsO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJbiBtb3Rpb25cbiAgICAgIHZhciBzdGF0dXNTdWZmaXg7XG4gICAgICBpZiAoc3RhdHVzU3RlcCA9PT0gU1RFUF9QUkVQQVJFKSB7XG4gICAgICAgIHN0YXR1c1N1ZmZpeCA9ICdwcmVwYXJlJztcbiAgICAgIH0gZWxzZSBpZiAoaXNBY3RpdmUoc3RhdHVzU3RlcCkpIHtcbiAgICAgICAgc3RhdHVzU3VmZml4ID0gJ2FjdGl2ZSc7XG4gICAgICB9IGVsc2UgaWYgKHN0YXR1c1N0ZXAgPT09IFNURVBfU1RBUlQpIHtcbiAgICAgICAgc3RhdHVzU3VmZml4ID0gJ3N0YXJ0JztcbiAgICAgIH1cbiAgICAgIHZhciBtb3Rpb25DbHMgPSBnZXRUcmFuc2l0aW9uTmFtZShtb3Rpb25OYW1lLCBcIlwiLmNvbmNhdChzdGF0dXMsIFwiLVwiKS5jb25jYXQoc3RhdHVzU3VmZml4KSk7XG4gICAgICBtb3Rpb25DaGlsZHJlbiA9IGNoaWxkcmVuKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgbWVyZ2VkUHJvcHMpLCB7fSwge1xuICAgICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMoZ2V0VHJhbnNpdGlvbk5hbWUobW90aW9uTmFtZSwgc3RhdHVzKSwgX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eSh7fSwgbW90aW9uQ2xzLCBtb3Rpb25DbHMgJiYgc3RhdHVzU3VmZml4KSwgbW90aW9uTmFtZSwgdHlwZW9mIG1vdGlvbk5hbWUgPT09ICdzdHJpbmcnKSksXG4gICAgICAgIHN0eWxlOiBzdGF0dXNTdHlsZVxuICAgICAgfSksIHNldE5vZGVSZWYpO1xuICAgIH1cblxuICAgIC8vIEF1dG8gaW5qZWN0IHJlZiBpZiBjaGlsZCBub2RlIG5vdCBoYXZlIGByZWZgIHByb3BzXG4gICAgaWYgKCAvKiNfX1BVUkVfXyovUmVhY3QuaXNWYWxpZEVsZW1lbnQobW90aW9uQ2hpbGRyZW4pICYmIHN1cHBvcnRSZWYobW90aW9uQ2hpbGRyZW4pKSB7XG4gICAgICB2YXIgb3JpZ2luTm9kZVJlZiA9IGdldE5vZGVSZWYobW90aW9uQ2hpbGRyZW4pO1xuICAgICAgaWYgKCFvcmlnaW5Ob2RlUmVmKSB7XG4gICAgICAgIG1vdGlvbkNoaWxkcmVuID0gLyojX19QVVJFX18qL1JlYWN0LmNsb25lRWxlbWVudChtb3Rpb25DaGlsZHJlbiwge1xuICAgICAgICAgIHJlZjogc2V0Tm9kZVJlZlxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KERvbVdyYXBwZXIsIHtcbiAgICAgIHJlZjogd3JhcHBlck5vZGVSZWZcbiAgICB9LCBtb3Rpb25DaGlsZHJlbik7XG4gIH0pO1xuICBDU1NNb3Rpb24uZGlzcGxheU5hbWUgPSAnQ1NTTW90aW9uJztcbiAgcmV0dXJuIENTU01vdGlvbjtcbn1cbmV4cG9ydCBkZWZhdWx0IGdlbkNTU01vdGlvbihzdXBwb3J0VHJhbnNpdGlvbik7IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc1wiO1xuaW1wb3J0IF9vYmplY3RTcHJlYWQgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFNwcmVhZDJcIjtcbmltcG9ydCBfY2xhc3NDYWxsQ2hlY2sgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NsYXNzQ2FsbENoZWNrXCI7XG5pbXBvcnQgX2NyZWF0ZUNsYXNzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jcmVhdGVDbGFzc1wiO1xuaW1wb3J0IF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2Fzc2VydFRoaXNJbml0aWFsaXplZFwiO1xuaW1wb3J0IF9pbmhlcml0cyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNcIjtcbmltcG9ydCBfY3JlYXRlU3VwZXIgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NyZWF0ZVN1cGVyXCI7XG5pbXBvcnQgX2RlZmluZVByb3BlcnR5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eVwiO1xudmFyIF9leGNsdWRlZCA9IFtcImNvbXBvbmVudFwiLCBcImNoaWxkcmVuXCIsIFwib25WaXNpYmxlQ2hhbmdlZFwiLCBcIm9uQWxsUmVtb3ZlZFwiXSxcbiAgX2V4Y2x1ZGVkMiA9IFtcInN0YXR1c1wiXTtcbi8qIGVzbGludCByZWFjdC9wcm9wLXR5cGVzOiAwICovXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgT3JpZ2luQ1NTTW90aW9uIGZyb20gXCIuL0NTU01vdGlvblwiO1xuaW1wb3J0IHsgZGlmZktleXMsIHBhcnNlS2V5cywgU1RBVFVTX0FERCwgU1RBVFVTX0tFRVAsIFNUQVRVU19SRU1PVkUsIFNUQVRVU19SRU1PVkVEIH0gZnJvbSBcIi4vdXRpbC9kaWZmXCI7XG5pbXBvcnQgeyBzdXBwb3J0VHJhbnNpdGlvbiB9IGZyb20gXCIuL3V0aWwvbW90aW9uXCI7XG52YXIgTU9USU9OX1BST1BfTkFNRVMgPSBbJ2V2ZW50UHJvcHMnLCAndmlzaWJsZScsICdjaGlsZHJlbicsICdtb3Rpb25OYW1lJywgJ21vdGlvbkFwcGVhcicsICdtb3Rpb25FbnRlcicsICdtb3Rpb25MZWF2ZScsICdtb3Rpb25MZWF2ZUltbWVkaWF0ZWx5JywgJ21vdGlvbkRlYWRsaW5lJywgJ3JlbW92ZU9uTGVhdmUnLCAnbGVhdmVkQ2xhc3NOYW1lJywgJ29uQXBwZWFyUHJlcGFyZScsICdvbkFwcGVhclN0YXJ0JywgJ29uQXBwZWFyQWN0aXZlJywgJ29uQXBwZWFyRW5kJywgJ29uRW50ZXJTdGFydCcsICdvbkVudGVyQWN0aXZlJywgJ29uRW50ZXJFbmQnLCAnb25MZWF2ZVN0YXJ0JywgJ29uTGVhdmVBY3RpdmUnLCAnb25MZWF2ZUVuZCddO1xuLyoqXG4gKiBHZW5lcmF0ZSBhIENTU01vdGlvbkxpc3QgY29tcG9uZW50IHdpdGggY29uZmlnXG4gKiBAcGFyYW0gdHJhbnNpdGlvblN1cHBvcnQgTm8gbmVlZCBzaW5jZSBDU1NNb3Rpb25MaXN0IG5vIGxvbmdlciBkZXBlbmRzIG9uIHRyYW5zaXRpb24gc3VwcG9ydFxuICogQHBhcmFtIENTU01vdGlvbiBDU1NNb3Rpb24gY29tcG9uZW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5DU1NNb3Rpb25MaXN0KHRyYW5zaXRpb25TdXBwb3J0KSB7XG4gIHZhciBDU1NNb3Rpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IE9yaWdpbkNTU01vdGlvbjtcbiAgdmFyIENTU01vdGlvbkxpc3QgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgICBfaW5oZXJpdHMoQ1NTTW90aW9uTGlzdCwgX1JlYWN0JENvbXBvbmVudCk7XG4gICAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihDU1NNb3Rpb25MaXN0KTtcbiAgICBmdW5jdGlvbiBDU1NNb3Rpb25MaXN0KCkge1xuICAgICAgdmFyIF90aGlzO1xuICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIENTU01vdGlvbkxpc3QpO1xuICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICB9XG4gICAgICBfdGhpcyA9IF9zdXBlci5jYWxsLmFwcGx5KF9zdXBlciwgW3RoaXNdLmNvbmNhdChhcmdzKSk7XG4gICAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic3RhdGVcIiwge1xuICAgICAgICBrZXlFbnRpdGllczogW11cbiAgICAgIH0pO1xuICAgICAgLy8gWm9tYmllSjogUmV0dXJuIHRoZSBjb3VudCBvZiByZXN0IGtleXMuIEl0J3Mgc2FmZSB0byByZWZhY3RvciBpZiBuZWVkIG1vcmUgaW5mby5cbiAgICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJyZW1vdmVLZXlcIiwgZnVuY3Rpb24gKHJlbW92ZUtleSkge1xuICAgICAgICBfdGhpcy5zZXRTdGF0ZShmdW5jdGlvbiAocHJldlN0YXRlKSB7XG4gICAgICAgICAgdmFyIG5leHRLZXlFbnRpdGllcyA9IHByZXZTdGF0ZS5rZXlFbnRpdGllcy5tYXAoZnVuY3Rpb24gKGVudGl0eSkge1xuICAgICAgICAgICAgaWYgKGVudGl0eS5rZXkgIT09IHJlbW92ZUtleSkgcmV0dXJuIGVudGl0eTtcbiAgICAgICAgICAgIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGVudGl0eSksIHt9LCB7XG4gICAgICAgICAgICAgIHN0YXR1czogU1RBVFVTX1JFTU9WRURcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBrZXlFbnRpdGllczogbmV4dEtleUVudGl0aWVzXG4gICAgICAgICAgfTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHZhciBrZXlFbnRpdGllcyA9IF90aGlzLnN0YXRlLmtleUVudGl0aWVzO1xuICAgICAgICAgIHZhciByZXN0S2V5c0NvdW50ID0ga2V5RW50aXRpZXMuZmlsdGVyKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICAgICAgICB2YXIgc3RhdHVzID0gX3JlZi5zdGF0dXM7XG4gICAgICAgICAgICByZXR1cm4gc3RhdHVzICE9PSBTVEFUVVNfUkVNT1ZFRDtcbiAgICAgICAgICB9KS5sZW5ndGg7XG4gICAgICAgICAgaWYgKHJlc3RLZXlzQ291bnQgPT09IDAgJiYgX3RoaXMucHJvcHMub25BbGxSZW1vdmVkKSB7XG4gICAgICAgICAgICBfdGhpcy5wcm9wcy5vbkFsbFJlbW92ZWQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIF9jcmVhdGVDbGFzcyhDU1NNb3Rpb25MaXN0LCBbe1xuICAgICAga2V5OiBcInJlbmRlclwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG4gICAgICAgIHZhciBrZXlFbnRpdGllcyA9IHRoaXMuc3RhdGUua2V5RW50aXRpZXM7XG4gICAgICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY29tcG9uZW50ID0gX3RoaXMkcHJvcHMuY29tcG9uZW50LFxuICAgICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMuY2hpbGRyZW4sXG4gICAgICAgICAgX29uVmlzaWJsZUNoYW5nZWQgPSBfdGhpcyRwcm9wcy5vblZpc2libGVDaGFuZ2VkLFxuICAgICAgICAgIG9uQWxsUmVtb3ZlZCA9IF90aGlzJHByb3BzLm9uQWxsUmVtb3ZlZCxcbiAgICAgICAgICByZXN0UHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMsIF9leGNsdWRlZCk7XG4gICAgICAgIHZhciBDb21wb25lbnQgPSBjb21wb25lbnQgfHwgUmVhY3QuRnJhZ21lbnQ7XG4gICAgICAgIHZhciBtb3Rpb25Qcm9wcyA9IHt9O1xuICAgICAgICBNT1RJT05fUFJPUF9OQU1FUy5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgICAgICAgbW90aW9uUHJvcHNbcHJvcF0gPSByZXN0UHJvcHNbcHJvcF07XG4gICAgICAgICAgZGVsZXRlIHJlc3RQcm9wc1twcm9wXTtcbiAgICAgICAgfSk7XG4gICAgICAgIGRlbGV0ZSByZXN0UHJvcHMua2V5cztcbiAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KENvbXBvbmVudCwgcmVzdFByb3BzLCBrZXlFbnRpdGllcy5tYXAoZnVuY3Rpb24gKF9yZWYyLCBpbmRleCkge1xuICAgICAgICAgIHZhciBzdGF0dXMgPSBfcmVmMi5zdGF0dXMsXG4gICAgICAgICAgICBldmVudFByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYyLCBfZXhjbHVkZWQyKTtcbiAgICAgICAgICB2YXIgdmlzaWJsZSA9IHN0YXR1cyA9PT0gU1RBVFVTX0FERCB8fCBzdGF0dXMgPT09IFNUQVRVU19LRUVQO1xuICAgICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChDU1NNb3Rpb24sIF9leHRlbmRzKHt9LCBtb3Rpb25Qcm9wcywge1xuICAgICAgICAgICAga2V5OiBldmVudFByb3BzLmtleSxcbiAgICAgICAgICAgIHZpc2libGU6IHZpc2libGUsXG4gICAgICAgICAgICBldmVudFByb3BzOiBldmVudFByb3BzLFxuICAgICAgICAgICAgb25WaXNpYmxlQ2hhbmdlZDogZnVuY3Rpb24gb25WaXNpYmxlQ2hhbmdlZChjaGFuZ2VkVmlzaWJsZSkge1xuICAgICAgICAgICAgICBfb25WaXNpYmxlQ2hhbmdlZCA9PT0gbnVsbCB8fCBfb25WaXNpYmxlQ2hhbmdlZCA9PT0gdm9pZCAwIHx8IF9vblZpc2libGVDaGFuZ2VkKGNoYW5nZWRWaXNpYmxlLCB7XG4gICAgICAgICAgICAgICAga2V5OiBldmVudFByb3BzLmtleVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgaWYgKCFjaGFuZ2VkVmlzaWJsZSkge1xuICAgICAgICAgICAgICAgIF90aGlzMi5yZW1vdmVLZXkoZXZlbnRQcm9wcy5rZXkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksIGZ1bmN0aW9uIChwcm9wcywgcmVmKSB7XG4gICAgICAgICAgICByZXR1cm4gY2hpbGRyZW4oX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBwcm9wcyksIHt9LCB7XG4gICAgICAgICAgICAgIGluZGV4OiBpbmRleFxuICAgICAgICAgICAgfSksIHJlZik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICB9XSwgW3tcbiAgICAgIGtleTogXCJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHNcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoX3JlZjMsIF9yZWY0KSB7XG4gICAgICAgIHZhciBrZXlzID0gX3JlZjMua2V5cztcbiAgICAgICAgdmFyIGtleUVudGl0aWVzID0gX3JlZjQua2V5RW50aXRpZXM7XG4gICAgICAgIHZhciBwYXJzZWRLZXlPYmplY3RzID0gcGFyc2VLZXlzKGtleXMpO1xuICAgICAgICB2YXIgbWl4ZWRLZXlFbnRpdGllcyA9IGRpZmZLZXlzKGtleUVudGl0aWVzLCBwYXJzZWRLZXlPYmplY3RzKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBrZXlFbnRpdGllczogbWl4ZWRLZXlFbnRpdGllcy5maWx0ZXIoZnVuY3Rpb24gKGVudGl0eSkge1xuICAgICAgICAgICAgdmFyIHByZXZFbnRpdHkgPSBrZXlFbnRpdGllcy5maW5kKGZ1bmN0aW9uIChfcmVmNSkge1xuICAgICAgICAgICAgICB2YXIga2V5ID0gX3JlZjUua2V5O1xuICAgICAgICAgICAgICByZXR1cm4gZW50aXR5LmtleSA9PT0ga2V5O1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIFJlbW92ZSBpZiBhbHJlYWR5IG1hcmsgYXMgcmVtb3ZlZFxuICAgICAgICAgICAgaWYgKHByZXZFbnRpdHkgJiYgcHJldkVudGl0eS5zdGF0dXMgPT09IFNUQVRVU19SRU1PVkVEICYmIGVudGl0eS5zdGF0dXMgPT09IFNUQVRVU19SRU1PVkUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfSlcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XSk7XG4gICAgcmV0dXJuIENTU01vdGlvbkxpc3Q7XG4gIH0oUmVhY3QuQ29tcG9uZW50KTtcbiAgX2RlZmluZVByb3BlcnR5KENTU01vdGlvbkxpc3QsIFwiZGVmYXVsdFByb3BzXCIsIHtcbiAgICBjb21wb25lbnQ6ICdkaXYnXG4gIH0pO1xuICByZXR1cm4gQ1NTTW90aW9uTGlzdDtcbn1cbmV4cG9ydCBkZWZhdWx0IGdlbkNTU01vdGlvbkxpc3Qoc3VwcG9ydFRyYW5zaXRpb24pOyIsImltcG9ydCBfY2xhc3NDYWxsQ2hlY2sgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NsYXNzQ2FsbENoZWNrXCI7XG5pbXBvcnQgX2NyZWF0ZUNsYXNzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jcmVhdGVDbGFzc1wiO1xuaW1wb3J0IF9pbmhlcml0cyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNcIjtcbmltcG9ydCBfY3JlYXRlU3VwZXIgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NyZWF0ZVN1cGVyXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG52YXIgRG9tV3JhcHBlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoRG9tV3JhcHBlciwgX1JlYWN0JENvbXBvbmVudCk7XG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoRG9tV3JhcHBlcik7XG4gIGZ1bmN0aW9uIERvbVdyYXBwZXIoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIERvbVdyYXBwZXIpO1xuICAgIHJldHVybiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuICBfY3JlYXRlQ2xhc3MoRG9tV3JhcHBlciwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BzLmNoaWxkcmVuO1xuICAgIH1cbiAgfV0pO1xuICByZXR1cm4gRG9tV3JhcHBlcjtcbn0oUmVhY3QuQ29tcG9uZW50KTtcbmV4cG9ydCBkZWZhdWx0IERvbVdyYXBwZXI7IiwiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNcIjtcbnZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmV4cG9ydCB2YXIgQ29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KHt9KTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIE1vdGlvblByb3ZpZGVyKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBwcm9wc1xuICB9LCBjaGlsZHJlbik7XG59IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgYW5pbWF0aW9uRW5kTmFtZSwgdHJhbnNpdGlvbkVuZE5hbWUgfSBmcm9tIFwiLi4vdXRpbC9tb3Rpb25cIjtcbmV4cG9ydCBkZWZhdWx0IChmdW5jdGlvbiAob25JbnRlcm5hbE1vdGlvbkVuZCkge1xuICB2YXIgY2FjaGVFbGVtZW50UmVmID0gdXNlUmVmKCk7XG5cbiAgLy8gUmVtb3ZlIGV2ZW50c1xuICBmdW5jdGlvbiByZW1vdmVNb3Rpb25FdmVudHMoZWxlbWVudCkge1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodHJhbnNpdGlvbkVuZE5hbWUsIG9uSW50ZXJuYWxNb3Rpb25FbmQpO1xuICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGFuaW1hdGlvbkVuZE5hbWUsIG9uSW50ZXJuYWxNb3Rpb25FbmQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFBhdGNoIGV2ZW50c1xuICBmdW5jdGlvbiBwYXRjaE1vdGlvbkV2ZW50cyhlbGVtZW50KSB7XG4gICAgaWYgKGNhY2hlRWxlbWVudFJlZi5jdXJyZW50ICYmIGNhY2hlRWxlbWVudFJlZi5jdXJyZW50ICE9PSBlbGVtZW50KSB7XG4gICAgICByZW1vdmVNb3Rpb25FdmVudHMoY2FjaGVFbGVtZW50UmVmLmN1cnJlbnQpO1xuICAgIH1cbiAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50ICE9PSBjYWNoZUVsZW1lbnRSZWYuY3VycmVudCkge1xuICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKHRyYW5zaXRpb25FbmROYW1lLCBvbkludGVybmFsTW90aW9uRW5kKTtcbiAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihhbmltYXRpb25FbmROYW1lLCBvbkludGVybmFsTW90aW9uRW5kKTtcblxuICAgICAgLy8gU2F2ZSBhcyBjYWNoZSBpbiBjYXNlIGRvbSByZW1vdmVkIHRyaWdnZXIgYnkgYG1vdGlvbkRlYWRsaW5lYFxuICAgICAgY2FjaGVFbGVtZW50UmVmLmN1cnJlbnQgPSBlbGVtZW50O1xuICAgIH1cbiAgfVxuXG4gIC8vIENsZWFuIHVwIHdoZW4gcmVtb3ZlZFxuICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICByZW1vdmVNb3Rpb25FdmVudHMoY2FjaGVFbGVtZW50UmVmLmN1cnJlbnQpO1xuICAgIH07XG4gIH0sIFtdKTtcbiAgcmV0dXJuIFtwYXRjaE1vdGlvbkV2ZW50cywgcmVtb3ZlTW90aW9uRXZlbnRzXTtcbn0pOyIsImltcG9ydCBjYW5Vc2VEb20gZnJvbSBcInJjLXV0aWwvZXMvRG9tL2NhblVzZURvbVwiO1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VMYXlvdXRFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5cbi8vIEl0J3Mgc2FmZSB0byB1c2UgYHVzZUxheW91dEVmZmVjdGAgYnV0IHRoZSB3YXJuaW5nIGlzIGFubm95aW5nXG52YXIgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCA9IGNhblVzZURvbSgpID8gdXNlTGF5b3V0RWZmZWN0IDogdXNlRWZmZWN0O1xuZXhwb3J0IGRlZmF1bHQgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdDsiLCJpbXBvcnQgcmFmIGZyb20gXCJyYy11dGlsL2VzL3JhZlwiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuZXhwb3J0IGRlZmF1bHQgKGZ1bmN0aW9uICgpIHtcbiAgdmFyIG5leHRGcmFtZVJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgZnVuY3Rpb24gY2FuY2VsTmV4dEZyYW1lKCkge1xuICAgIHJhZi5jYW5jZWwobmV4dEZyYW1lUmVmLmN1cnJlbnQpO1xuICB9XG4gIGZ1bmN0aW9uIG5leHRGcmFtZShjYWxsYmFjaykge1xuICAgIHZhciBkZWxheSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogMjtcbiAgICBjYW5jZWxOZXh0RnJhbWUoKTtcbiAgICB2YXIgbmV4dEZyYW1lSWQgPSByYWYoZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKGRlbGF5IDw9IDEpIHtcbiAgICAgICAgY2FsbGJhY2soe1xuICAgICAgICAgIGlzQ2FuY2VsZWQ6IGZ1bmN0aW9uIGlzQ2FuY2VsZWQoKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dEZyYW1lSWQgIT09IG5leHRGcmFtZVJlZi5jdXJyZW50O1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXh0RnJhbWUoY2FsbGJhY2ssIGRlbGF5IC0gMSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgbmV4dEZyYW1lUmVmLmN1cnJlbnQgPSBuZXh0RnJhbWVJZDtcbiAgfVxuICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBjYW5jZWxOZXh0RnJhbWUoKTtcbiAgICB9O1xuICB9LCBbXSk7XG4gIHJldHVybiBbbmV4dEZyYW1lLCBjYW5jZWxOZXh0RnJhbWVdO1xufSk7IiwiaW1wb3J0IF9vYmplY3RTcHJlYWQgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFNwcmVhZDJcIjtcbmltcG9ydCBfZGVmaW5lUHJvcGVydHkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5XCI7XG5pbXBvcnQgX3NsaWNlZFRvQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXlcIjtcbmltcG9ydCB7IHVzZUV2ZW50IH0gZnJvbSAncmMtdXRpbCc7XG5pbXBvcnQgdXNlU3RhdGUgZnJvbSBcInJjLXV0aWwvZXMvaG9va3MvdXNlU3RhdGVcIjtcbmltcG9ydCB1c2VTeW5jU3RhdGUgZnJvbSBcInJjLXV0aWwvZXMvaG9va3MvdXNlU3luY1N0YXRlXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFNUQVRVU19BUFBFQVIsIFNUQVRVU19FTlRFUiwgU1RBVFVTX0xFQVZFLCBTVEFUVVNfTk9ORSwgU1RFUF9BQ1RJVkUsIFNURVBfUFJFUEFSRSwgU1RFUF9QUkVQQVJFRCwgU1RFUF9TVEFSVCB9IGZyb20gXCIuLi9pbnRlcmZhY2VcIjtcbmltcG9ydCB1c2VEb21Nb3Rpb25FdmVudHMgZnJvbSBcIi4vdXNlRG9tTW90aW9uRXZlbnRzXCI7XG5pbXBvcnQgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCBmcm9tIFwiLi91c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0XCI7XG5pbXBvcnQgdXNlU3RlcFF1ZXVlLCB7IERvU3RlcCwgaXNBY3RpdmUsIFNraXBTdGVwIH0gZnJvbSBcIi4vdXNlU3RlcFF1ZXVlXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VTdGF0dXMoc3VwcG9ydE1vdGlvbiwgdmlzaWJsZSwgZ2V0RWxlbWVudCwgX3JlZikge1xuICB2YXIgX3JlZiRtb3Rpb25FbnRlciA9IF9yZWYubW90aW9uRW50ZXIsXG4gICAgbW90aW9uRW50ZXIgPSBfcmVmJG1vdGlvbkVudGVyID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiRtb3Rpb25FbnRlcixcbiAgICBfcmVmJG1vdGlvbkFwcGVhciA9IF9yZWYubW90aW9uQXBwZWFyLFxuICAgIG1vdGlvbkFwcGVhciA9IF9yZWYkbW90aW9uQXBwZWFyID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiRtb3Rpb25BcHBlYXIsXG4gICAgX3JlZiRtb3Rpb25MZWF2ZSA9IF9yZWYubW90aW9uTGVhdmUsXG4gICAgbW90aW9uTGVhdmUgPSBfcmVmJG1vdGlvbkxlYXZlID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiRtb3Rpb25MZWF2ZSxcbiAgICBtb3Rpb25EZWFkbGluZSA9IF9yZWYubW90aW9uRGVhZGxpbmUsXG4gICAgbW90aW9uTGVhdmVJbW1lZGlhdGVseSA9IF9yZWYubW90aW9uTGVhdmVJbW1lZGlhdGVseSxcbiAgICBvbkFwcGVhclByZXBhcmUgPSBfcmVmLm9uQXBwZWFyUHJlcGFyZSxcbiAgICBvbkVudGVyUHJlcGFyZSA9IF9yZWYub25FbnRlclByZXBhcmUsXG4gICAgb25MZWF2ZVByZXBhcmUgPSBfcmVmLm9uTGVhdmVQcmVwYXJlLFxuICAgIG9uQXBwZWFyU3RhcnQgPSBfcmVmLm9uQXBwZWFyU3RhcnQsXG4gICAgb25FbnRlclN0YXJ0ID0gX3JlZi5vbkVudGVyU3RhcnQsXG4gICAgb25MZWF2ZVN0YXJ0ID0gX3JlZi5vbkxlYXZlU3RhcnQsXG4gICAgb25BcHBlYXJBY3RpdmUgPSBfcmVmLm9uQXBwZWFyQWN0aXZlLFxuICAgIG9uRW50ZXJBY3RpdmUgPSBfcmVmLm9uRW50ZXJBY3RpdmUsXG4gICAgb25MZWF2ZUFjdGl2ZSA9IF9yZWYub25MZWF2ZUFjdGl2ZSxcbiAgICBvbkFwcGVhckVuZCA9IF9yZWYub25BcHBlYXJFbmQsXG4gICAgb25FbnRlckVuZCA9IF9yZWYub25FbnRlckVuZCxcbiAgICBvbkxlYXZlRW5kID0gX3JlZi5vbkxlYXZlRW5kLFxuICAgIG9uVmlzaWJsZUNoYW5nZWQgPSBfcmVmLm9uVmlzaWJsZUNoYW5nZWQ7XG4gIC8vIFVzZWQgZm9yIG91dGVyIHJlbmRlciB1c2FnZSB0byBhdm9pZCBgdmlzaWJsZTogZmFsc2UgJiBzdGF0dXM6IG5vbmVgIHRvIHJlbmRlciBub3RoaW5nXG4gIHZhciBfdXNlU3RhdGUgPSB1c2VTdGF0ZSgpLFxuICAgIF91c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUsIDIpLFxuICAgIGFzeW5jVmlzaWJsZSA9IF91c2VTdGF0ZTJbMF0sXG4gICAgc2V0QXN5bmNWaXNpYmxlID0gX3VzZVN0YXRlMlsxXTtcbiAgdmFyIF91c2VTeW5jU3RhdGUgPSB1c2VTeW5jU3RhdGUoU1RBVFVTX05PTkUpLFxuICAgIF91c2VTeW5jU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN5bmNTdGF0ZSwgMiksXG4gICAgZ2V0U3RhdHVzID0gX3VzZVN5bmNTdGF0ZTJbMF0sXG4gICAgc2V0U3RhdHVzID0gX3VzZVN5bmNTdGF0ZTJbMV07XG4gIHZhciBfdXNlU3RhdGUzID0gdXNlU3RhdGUobnVsbCksXG4gICAgX3VzZVN0YXRlNCA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZTMsIDIpLFxuICAgIHN0eWxlID0gX3VzZVN0YXRlNFswXSxcbiAgICBzZXRTdHlsZSA9IF91c2VTdGF0ZTRbMV07XG4gIHZhciBjdXJyZW50U3RhdHVzID0gZ2V0U3RhdHVzKCk7XG4gIHZhciBtb3VudGVkUmVmID0gdXNlUmVmKGZhbHNlKTtcbiAgdmFyIGRlYWRsaW5lUmVmID0gdXNlUmVmKG51bGwpO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PSBEb20gTm9kZSA9PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgZnVuY3Rpb24gZ2V0RG9tRWxlbWVudCgpIHtcbiAgICByZXR1cm4gZ2V0RWxlbWVudCgpO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT0gTW90aW9uIEVuZCA9PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgYWN0aXZlUmVmID0gdXNlUmVmKGZhbHNlKTtcblxuICAvKipcbiAgICogQ2xlYW4gdXAgc3RhdHVzICYgc3R5bGVcbiAgICovXG4gIGZ1bmN0aW9uIHVwZGF0ZU1vdGlvbkVuZFN0YXR1cygpIHtcbiAgICBzZXRTdGF0dXMoU1RBVFVTX05PTkUpO1xuICAgIHNldFN0eWxlKG51bGwsIHRydWUpO1xuICB9XG4gIHZhciBvbkludGVybmFsTW90aW9uRW5kID0gdXNlRXZlbnQoZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgdmFyIHN0YXR1cyA9IGdldFN0YXR1cygpO1xuICAgIC8vIERvIG5vdGhpbmcgc2luY2Ugbm90IGluIGFueSB0cmFuc2l0aW9uIHN0YXR1cy5cbiAgICAvLyBUaGlzIG1heSBoYXBwZW4gd2hlbiBgbW90aW9uRGVhZGxpbmVgIHRyaWdnZXIuXG4gICAgaWYgKHN0YXR1cyA9PT0gU1RBVFVTX05PTkUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIGVsZW1lbnQgPSBnZXREb21FbGVtZW50KCk7XG4gICAgaWYgKGV2ZW50ICYmICFldmVudC5kZWFkbGluZSAmJiBldmVudC50YXJnZXQgIT09IGVsZW1lbnQpIHtcbiAgICAgIC8vIGV2ZW50IGV4aXN0c1xuICAgICAgLy8gbm90IGluaXRpYXRlZCBieSBkZWFkbGluZVxuICAgICAgLy8gdHJhbnNpdGlvbkVuZCBub3QgZmlyZWQgYnkgaW5uZXIgZWxlbWVudHNcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIGN1cnJlbnRBY3RpdmUgPSBhY3RpdmVSZWYuY3VycmVudDtcbiAgICB2YXIgY2FuRW5kO1xuICAgIGlmIChzdGF0dXMgPT09IFNUQVRVU19BUFBFQVIgJiYgY3VycmVudEFjdGl2ZSkge1xuICAgICAgY2FuRW5kID0gb25BcHBlYXJFbmQgPT09IG51bGwgfHwgb25BcHBlYXJFbmQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQXBwZWFyRW5kKGVsZW1lbnQsIGV2ZW50KTtcbiAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PT0gU1RBVFVTX0VOVEVSICYmIGN1cnJlbnRBY3RpdmUpIHtcbiAgICAgIGNhbkVuZCA9IG9uRW50ZXJFbmQgPT09IG51bGwgfHwgb25FbnRlckVuZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25FbnRlckVuZChlbGVtZW50LCBldmVudCk7XG4gICAgfSBlbHNlIGlmIChzdGF0dXMgPT09IFNUQVRVU19MRUFWRSAmJiBjdXJyZW50QWN0aXZlKSB7XG4gICAgICBjYW5FbmQgPSBvbkxlYXZlRW5kID09PSBudWxsIHx8IG9uTGVhdmVFbmQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uTGVhdmVFbmQoZWxlbWVudCwgZXZlbnQpO1xuICAgIH1cblxuICAgIC8vIE9ubHkgdXBkYXRlIHN0YXR1cyB3aGVuIGBjYW5FbmRgIGFuZCBub3QgZGVzdHJveWVkXG4gICAgaWYgKGN1cnJlbnRBY3RpdmUgJiYgY2FuRW5kICE9PSBmYWxzZSkge1xuICAgICAgdXBkYXRlTW90aW9uRW5kU3RhdHVzKCk7XG4gICAgfVxuICB9KTtcbiAgdmFyIF91c2VEb21Nb3Rpb25FdmVudHMgPSB1c2VEb21Nb3Rpb25FdmVudHMob25JbnRlcm5hbE1vdGlvbkVuZCksXG4gICAgX3VzZURvbU1vdGlvbkV2ZW50czIgPSBfc2xpY2VkVG9BcnJheShfdXNlRG9tTW90aW9uRXZlbnRzLCAxKSxcbiAgICBwYXRjaE1vdGlvbkV2ZW50cyA9IF91c2VEb21Nb3Rpb25FdmVudHMyWzBdO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09IFN0ZXAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIGdldEV2ZW50SGFuZGxlcnMgPSBmdW5jdGlvbiBnZXRFdmVudEhhbmRsZXJzKHRhcmdldFN0YXR1cykge1xuICAgIHN3aXRjaCAodGFyZ2V0U3RhdHVzKSB7XG4gICAgICBjYXNlIFNUQVRVU19BUFBFQVI6XG4gICAgICAgIHJldHVybiBfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eSh7fSwgU1RFUF9QUkVQQVJFLCBvbkFwcGVhclByZXBhcmUpLCBTVEVQX1NUQVJULCBvbkFwcGVhclN0YXJ0KSwgU1RFUF9BQ1RJVkUsIG9uQXBwZWFyQWN0aXZlKTtcbiAgICAgIGNhc2UgU1RBVFVTX0VOVEVSOlxuICAgICAgICByZXR1cm4gX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoe30sIFNURVBfUFJFUEFSRSwgb25FbnRlclByZXBhcmUpLCBTVEVQX1NUQVJULCBvbkVudGVyU3RhcnQpLCBTVEVQX0FDVElWRSwgb25FbnRlckFjdGl2ZSk7XG4gICAgICBjYXNlIFNUQVRVU19MRUFWRTpcbiAgICAgICAgcmV0dXJuIF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KHt9LCBTVEVQX1BSRVBBUkUsIG9uTGVhdmVQcmVwYXJlKSwgU1RFUF9TVEFSVCwgb25MZWF2ZVN0YXJ0KSwgU1RFUF9BQ1RJVkUsIG9uTGVhdmVBY3RpdmUpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgfTtcbiAgdmFyIGV2ZW50SGFuZGxlcnMgPSBSZWFjdC51c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZ2V0RXZlbnRIYW5kbGVycyhjdXJyZW50U3RhdHVzKTtcbiAgfSwgW2N1cnJlbnRTdGF0dXNdKTtcbiAgdmFyIF91c2VTdGVwUXVldWUgPSB1c2VTdGVwUXVldWUoY3VycmVudFN0YXR1cywgIXN1cHBvcnRNb3Rpb24sIGZ1bmN0aW9uIChuZXdTdGVwKSB7XG4gICAgICAvLyBPbmx5IHByZXBhcmUgc3RlcCBjYW4gYmUgc2tpcFxuICAgICAgaWYgKG5ld1N0ZXAgPT09IFNURVBfUFJFUEFSRSkge1xuICAgICAgICB2YXIgb25QcmVwYXJlID0gZXZlbnRIYW5kbGVyc1tTVEVQX1BSRVBBUkVdO1xuICAgICAgICBpZiAoIW9uUHJlcGFyZSkge1xuICAgICAgICAgIHJldHVybiBTa2lwU3RlcDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb25QcmVwYXJlKGdldERvbUVsZW1lbnQoKSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFJlc3Qgc3RlcCBpcyBzeW5jIHVwZGF0ZVxuICAgICAgaWYgKHN0ZXAgaW4gZXZlbnRIYW5kbGVycykge1xuICAgICAgICB2YXIgX2V2ZW50SGFuZGxlcnMkc3RlcDtcbiAgICAgICAgc2V0U3R5bGUoKChfZXZlbnRIYW5kbGVycyRzdGVwID0gZXZlbnRIYW5kbGVyc1tzdGVwXSkgPT09IG51bGwgfHwgX2V2ZW50SGFuZGxlcnMkc3RlcCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2V2ZW50SGFuZGxlcnMkc3RlcC5jYWxsKGV2ZW50SGFuZGxlcnMsIGdldERvbUVsZW1lbnQoKSwgbnVsbCkpIHx8IG51bGwpO1xuICAgICAgfVxuICAgICAgaWYgKHN0ZXAgPT09IFNURVBfQUNUSVZFICYmIGN1cnJlbnRTdGF0dXMgIT09IFNUQVRVU19OT05FKSB7XG4gICAgICAgIC8vIFBhdGNoIGV2ZW50cyB3aGVuIG1vdGlvbiBuZWVkZWRcbiAgICAgICAgcGF0Y2hNb3Rpb25FdmVudHMoZ2V0RG9tRWxlbWVudCgpKTtcbiAgICAgICAgaWYgKG1vdGlvbkRlYWRsaW5lID4gMCkge1xuICAgICAgICAgIGNsZWFyVGltZW91dChkZWFkbGluZVJlZi5jdXJyZW50KTtcbiAgICAgICAgICBkZWFkbGluZVJlZi5jdXJyZW50ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBvbkludGVybmFsTW90aW9uRW5kKHtcbiAgICAgICAgICAgICAgZGVhZGxpbmU6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0sIG1vdGlvbkRlYWRsaW5lKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHN0ZXAgPT09IFNURVBfUFJFUEFSRUQpIHtcbiAgICAgICAgdXBkYXRlTW90aW9uRW5kU3RhdHVzKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gRG9TdGVwO1xuICAgIH0pLFxuICAgIF91c2VTdGVwUXVldWUyID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0ZXBRdWV1ZSwgMiksXG4gICAgc3RhcnRTdGVwID0gX3VzZVN0ZXBRdWV1ZTJbMF0sXG4gICAgc3RlcCA9IF91c2VTdGVwUXVldWUyWzFdO1xuICB2YXIgYWN0aXZlID0gaXNBY3RpdmUoc3RlcCk7XG4gIGFjdGl2ZVJlZi5jdXJyZW50ID0gYWN0aXZlO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT0gU3RhdHVzID09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIHZpc2libGVSZWYgPSB1c2VSZWYobnVsbCk7XG5cbiAgLy8gVXBkYXRlIHdpdGggbmV3IHN0YXR1c1xuICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAvLyBXaGVuIHVzZSBTdXNwZW5zZSwgdGhlIGB2aXNpYmxlYCB3aWxsIHJlcGVhdCB0cmlnZ2VyLFxuICAgIC8vIEJ1dCBub3QgcmVhbCBjaGFuZ2Ugb2YgdGhlIGB2aXNpYmxlYCwgd2UgbmVlZCB0byBza2lwIGl0LlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hbnQtZGVzaWduL2FudC1kZXNpZ24vaXNzdWVzLzQ0Mzc5XG4gICAgaWYgKG1vdW50ZWRSZWYuY3VycmVudCAmJiB2aXNpYmxlUmVmLmN1cnJlbnQgPT09IHZpc2libGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc2V0QXN5bmNWaXNpYmxlKHZpc2libGUpO1xuICAgIHZhciBpc01vdW50ZWQgPSBtb3VudGVkUmVmLmN1cnJlbnQ7XG4gICAgbW91bnRlZFJlZi5jdXJyZW50ID0gdHJ1ZTtcblxuICAgIC8vIGlmICghc3VwcG9ydE1vdGlvbikge1xuICAgIC8vICAgcmV0dXJuO1xuICAgIC8vIH1cblxuICAgIHZhciBuZXh0U3RhdHVzO1xuXG4gICAgLy8gQXBwZWFyXG4gICAgaWYgKCFpc01vdW50ZWQgJiYgdmlzaWJsZSAmJiBtb3Rpb25BcHBlYXIpIHtcbiAgICAgIG5leHRTdGF0dXMgPSBTVEFUVVNfQVBQRUFSO1xuICAgIH1cblxuICAgIC8vIEVudGVyXG4gICAgaWYgKGlzTW91bnRlZCAmJiB2aXNpYmxlICYmIG1vdGlvbkVudGVyKSB7XG4gICAgICBuZXh0U3RhdHVzID0gU1RBVFVTX0VOVEVSO1xuICAgIH1cblxuICAgIC8vIExlYXZlXG4gICAgaWYgKGlzTW91bnRlZCAmJiAhdmlzaWJsZSAmJiBtb3Rpb25MZWF2ZSB8fCAhaXNNb3VudGVkICYmIG1vdGlvbkxlYXZlSW1tZWRpYXRlbHkgJiYgIXZpc2libGUgJiYgbW90aW9uTGVhdmUpIHtcbiAgICAgIG5leHRTdGF0dXMgPSBTVEFUVVNfTEVBVkU7XG4gICAgfVxuICAgIHZhciBuZXh0RXZlbnRIYW5kbGVycyA9IGdldEV2ZW50SGFuZGxlcnMobmV4dFN0YXR1cyk7XG5cbiAgICAvLyBVcGRhdGUgdG8gbmV4dCBzdGF0dXNcbiAgICBpZiAobmV4dFN0YXR1cyAmJiAoc3VwcG9ydE1vdGlvbiB8fCBuZXh0RXZlbnRIYW5kbGVyc1tTVEVQX1BSRVBBUkVdKSkge1xuICAgICAgc2V0U3RhdHVzKG5leHRTdGF0dXMpO1xuICAgICAgc3RhcnRTdGVwKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFNldCBiYWNrIGluIGNhc2Ugbm8gbW90aW9uIGJ1dCBwcmV2IHN0YXR1cyBoYXMgcHJlcGFyZSBzdGVwXG4gICAgICBzZXRTdGF0dXMoU1RBVFVTX05PTkUpO1xuICAgIH1cbiAgICB2aXNpYmxlUmVmLmN1cnJlbnQgPSB2aXNpYmxlO1xuICB9LCBbdmlzaWJsZV0pO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT0gRWZmZWN0ID09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUmVzZXQgd2hlbiBtb3Rpb24gY2hhbmdlZFxuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmIChcbiAgICAvLyBDYW5jZWwgYXBwZWFyXG4gICAgY3VycmVudFN0YXR1cyA9PT0gU1RBVFVTX0FQUEVBUiAmJiAhbW90aW9uQXBwZWFyIHx8XG4gICAgLy8gQ2FuY2VsIGVudGVyXG4gICAgY3VycmVudFN0YXR1cyA9PT0gU1RBVFVTX0VOVEVSICYmICFtb3Rpb25FbnRlciB8fFxuICAgIC8vIENhbmNlbCBsZWF2ZVxuICAgIGN1cnJlbnRTdGF0dXMgPT09IFNUQVRVU19MRUFWRSAmJiAhbW90aW9uTGVhdmUpIHtcbiAgICAgIHNldFN0YXR1cyhTVEFUVVNfTk9ORSk7XG4gICAgfVxuICB9LCBbbW90aW9uQXBwZWFyLCBtb3Rpb25FbnRlciwgbW90aW9uTGVhdmVdKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgbW91bnRlZFJlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICBjbGVhclRpbWVvdXQoZGVhZGxpbmVSZWYuY3VycmVudCk7XG4gICAgfTtcbiAgfSwgW10pO1xuXG4gIC8vIFRyaWdnZXIgYG9uVmlzaWJsZUNoYW5nZWRgXG4gIHZhciBmaXJzdE1vdW50Q2hhbmdlUmVmID0gUmVhY3QudXNlUmVmKGZhbHNlKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAvLyBbdmlzaWJsZSAmIG1vdGlvbiBub3QgZW5kXSA9PiBbIXZpc2libGUgJiBtb3Rpb24gZW5kXSBzdGlsbCBuZWVkIHRyaWdnZXIgb25WaXNpYmxlQ2hhbmdlZFxuICAgIGlmIChhc3luY1Zpc2libGUpIHtcbiAgICAgIGZpcnN0TW91bnRDaGFuZ2VSZWYuY3VycmVudCA9IHRydWU7XG4gICAgfVxuICAgIGlmIChhc3luY1Zpc2libGUgIT09IHVuZGVmaW5lZCAmJiBjdXJyZW50U3RhdHVzID09PSBTVEFUVVNfTk9ORSkge1xuICAgICAgLy8gU2tpcCBmaXJzdCByZW5kZXIgaXMgaW52aXNpYmxlIHNpbmNlIGl0J3Mgbm90aGluZyBjaGFuZ2VkXG4gICAgICBpZiAoZmlyc3RNb3VudENoYW5nZVJlZi5jdXJyZW50IHx8IGFzeW5jVmlzaWJsZSkge1xuICAgICAgICBvblZpc2libGVDaGFuZ2VkID09PSBudWxsIHx8IG9uVmlzaWJsZUNoYW5nZWQgPT09IHZvaWQgMCB8fCBvblZpc2libGVDaGFuZ2VkKGFzeW5jVmlzaWJsZSk7XG4gICAgICB9XG4gICAgICBmaXJzdE1vdW50Q2hhbmdlUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgIH1cbiAgfSwgW2FzeW5jVmlzaWJsZSwgY3VycmVudFN0YXR1c10pO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT0gU3R5bGVzID09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIG1lcmdlZFN0eWxlID0gc3R5bGU7XG4gIGlmIChldmVudEhhbmRsZXJzW1NURVBfUFJFUEFSRV0gJiYgc3RlcCA9PT0gU1RFUF9TVEFSVCkge1xuICAgIG1lcmdlZFN0eWxlID0gX29iamVjdFNwcmVhZCh7XG4gICAgICB0cmFuc2l0aW9uOiAnbm9uZSdcbiAgICB9LCBtZXJnZWRTdHlsZSk7XG4gIH1cbiAgcmV0dXJuIFtjdXJyZW50U3RhdHVzLCBzdGVwLCBtZXJnZWRTdHlsZSwgYXN5bmNWaXNpYmxlICE9PSBudWxsICYmIGFzeW5jVmlzaWJsZSAhPT0gdm9pZCAwID8gYXN5bmNWaXNpYmxlIDogdmlzaWJsZV07XG59IiwiaW1wb3J0IF9zbGljZWRUb0FycmF5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zbGljZWRUb0FycmF5XCI7XG5pbXBvcnQgdXNlU3RhdGUgZnJvbSBcInJjLXV0aWwvZXMvaG9va3MvdXNlU3RhdGVcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFNURVBfQUNUSVZBVEVELCBTVEVQX0FDVElWRSwgU1RFUF9OT05FLCBTVEVQX1BSRVBBUkUsIFNURVBfUFJFUEFSRUQsIFNURVBfU1RBUlQgfSBmcm9tIFwiLi4vaW50ZXJmYWNlXCI7XG5pbXBvcnQgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCBmcm9tIFwiLi91c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0XCI7XG5pbXBvcnQgdXNlTmV4dEZyYW1lIGZyb20gXCIuL3VzZU5leHRGcmFtZVwiO1xudmFyIEZVTExfU1RFUF9RVUVVRSA9IFtTVEVQX1BSRVBBUkUsIFNURVBfU1RBUlQsIFNURVBfQUNUSVZFLCBTVEVQX0FDVElWQVRFRF07XG52YXIgU0lNUExFX1NURVBfUVVFVUUgPSBbU1RFUF9QUkVQQVJFLCBTVEVQX1BSRVBBUkVEXTtcblxuLyoqIFNraXAgY3VycmVudCBzdGVwICovXG5leHBvcnQgdmFyIFNraXBTdGVwID0gZmFsc2U7XG4vKiogQ3VycmVudCBzdGVwIHNob3VsZCBiZSB1cGRhdGUgaW4gKi9cbmV4cG9ydCB2YXIgRG9TdGVwID0gdHJ1ZTtcbmV4cG9ydCBmdW5jdGlvbiBpc0FjdGl2ZShzdGVwKSB7XG4gIHJldHVybiBzdGVwID09PSBTVEVQX0FDVElWRSB8fCBzdGVwID09PSBTVEVQX0FDVElWQVRFRDtcbn1cbmV4cG9ydCBkZWZhdWx0IChmdW5jdGlvbiAoc3RhdHVzLCBwcmVwYXJlT25seSwgY2FsbGJhY2spIHtcbiAgdmFyIF91c2VTdGF0ZSA9IHVzZVN0YXRlKFNURVBfTk9ORSksXG4gICAgX3VzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZSwgMiksXG4gICAgc3RlcCA9IF91c2VTdGF0ZTJbMF0sXG4gICAgc2V0U3RlcCA9IF91c2VTdGF0ZTJbMV07XG4gIHZhciBfdXNlTmV4dEZyYW1lID0gdXNlTmV4dEZyYW1lKCksXG4gICAgX3VzZU5leHRGcmFtZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlTmV4dEZyYW1lLCAyKSxcbiAgICBuZXh0RnJhbWUgPSBfdXNlTmV4dEZyYW1lMlswXSxcbiAgICBjYW5jZWxOZXh0RnJhbWUgPSBfdXNlTmV4dEZyYW1lMlsxXTtcbiAgZnVuY3Rpb24gc3RhcnRRdWV1ZSgpIHtcbiAgICBzZXRTdGVwKFNURVBfUFJFUEFSRSwgdHJ1ZSk7XG4gIH1cbiAgdmFyIFNURVBfUVVFVUUgPSBwcmVwYXJlT25seSA/IFNJTVBMRV9TVEVQX1FVRVVFIDogRlVMTF9TVEVQX1FVRVVFO1xuICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoc3RlcCAhPT0gU1RFUF9OT05FICYmIHN0ZXAgIT09IFNURVBfQUNUSVZBVEVEKSB7XG4gICAgICB2YXIgaW5kZXggPSBTVEVQX1FVRVVFLmluZGV4T2Yoc3RlcCk7XG4gICAgICB2YXIgbmV4dFN0ZXAgPSBTVEVQX1FVRVVFW2luZGV4ICsgMV07XG4gICAgICB2YXIgcmVzdWx0ID0gY2FsbGJhY2soc3RlcCk7XG4gICAgICBpZiAocmVzdWx0ID09PSBTa2lwU3RlcCkge1xuICAgICAgICAvLyBTa2lwIHdoZW4gbm8gbmVlZGVkXG4gICAgICAgIHNldFN0ZXAobmV4dFN0ZXAsIHRydWUpO1xuICAgICAgfSBlbHNlIGlmIChuZXh0U3RlcCkge1xuICAgICAgICAvLyBEbyBhcyBmcmFtZSBmb3Igc3RlcCB1cGRhdGVcbiAgICAgICAgbmV4dEZyYW1lKGZ1bmN0aW9uIChpbmZvKSB7XG4gICAgICAgICAgZnVuY3Rpb24gZG9OZXh0KCkge1xuICAgICAgICAgICAgLy8gU2tpcCBzaW5jZSBjdXJyZW50IHF1ZXVlIGlzIG9vZFxuICAgICAgICAgICAgaWYgKGluZm8uaXNDYW5jZWxlZCgpKSByZXR1cm47XG4gICAgICAgICAgICBzZXRTdGVwKG5leHRTdGVwLCB0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgZG9OZXh0KCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIE9ubHkgcHJvbWlzZSBzaG91bGQgYmUgYXN5bmNcbiAgICAgICAgICAgIFByb21pc2UucmVzb2x2ZShyZXN1bHQpLnRoZW4oZG9OZXh0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSwgW3N0YXR1cywgc3RlcF0pO1xuICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBjYW5jZWxOZXh0RnJhbWUoKTtcbiAgICB9O1xuICB9LCBbXSk7XG4gIHJldHVybiBbc3RhcnRRdWV1ZSwgc3RlcF07XG59KTsiLCJpbXBvcnQgQ1NTTW90aW9uIGZyb20gXCIuL0NTU01vdGlvblwiO1xuaW1wb3J0IENTU01vdGlvbkxpc3QgZnJvbSBcIi4vQ1NTTW90aW9uTGlzdFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQcm92aWRlciB9IGZyb20gXCIuL2NvbnRleHRcIjtcbmV4cG9ydCB7IENTU01vdGlvbkxpc3QgfTtcbmV4cG9ydCBkZWZhdWx0IENTU01vdGlvbjsiLCJleHBvcnQgdmFyIFNUQVRVU19OT05FID0gJ25vbmUnO1xuZXhwb3J0IHZhciBTVEFUVVNfQVBQRUFSID0gJ2FwcGVhcic7XG5leHBvcnQgdmFyIFNUQVRVU19FTlRFUiA9ICdlbnRlcic7XG5leHBvcnQgdmFyIFNUQVRVU19MRUFWRSA9ICdsZWF2ZSc7XG5leHBvcnQgdmFyIFNURVBfTk9ORSA9ICdub25lJztcbmV4cG9ydCB2YXIgU1RFUF9QUkVQQVJFID0gJ3ByZXBhcmUnO1xuZXhwb3J0IHZhciBTVEVQX1NUQVJUID0gJ3N0YXJ0JztcbmV4cG9ydCB2YXIgU1RFUF9BQ1RJVkUgPSAnYWN0aXZlJztcbmV4cG9ydCB2YXIgU1RFUF9BQ1RJVkFURUQgPSAnZW5kJztcbi8qKlxuICogVXNlZCBmb3IgZGlzYWJsZWQgbW90aW9uIGNhc2UuXG4gKiBQcmVwYXJlIHN0YWdlIHdpbGwgc3RpbGwgd29yayBidXQgc3RhcnQgJiBhY3RpdmUgd2lsbCBiZSBza2lwcGVkLlxuICovXG5leHBvcnQgdmFyIFNURVBfUFJFUEFSRUQgPSAncHJlcGFyZWQnOyIsImltcG9ydCBfb2JqZWN0U3ByZWFkIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyXCI7XG5pbXBvcnQgX3R5cGVvZiBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdHlwZW9mXCI7XG5leHBvcnQgdmFyIFNUQVRVU19BREQgPSAnYWRkJztcbmV4cG9ydCB2YXIgU1RBVFVTX0tFRVAgPSAna2VlcCc7XG5leHBvcnQgdmFyIFNUQVRVU19SRU1PVkUgPSAncmVtb3ZlJztcbmV4cG9ydCB2YXIgU1RBVFVTX1JFTU9WRUQgPSAncmVtb3ZlZCc7XG5leHBvcnQgZnVuY3Rpb24gd3JhcEtleVRvT2JqZWN0KGtleSkge1xuICB2YXIga2V5T2JqO1xuICBpZiAoa2V5ICYmIF90eXBlb2Yoa2V5KSA9PT0gJ29iamVjdCcgJiYgJ2tleScgaW4ga2V5KSB7XG4gICAga2V5T2JqID0ga2V5O1xuICB9IGVsc2Uge1xuICAgIGtleU9iaiA9IHtcbiAgICAgIGtleToga2V5XG4gICAgfTtcbiAgfVxuICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBrZXlPYmopLCB7fSwge1xuICAgIGtleTogU3RyaW5nKGtleU9iai5rZXkpXG4gIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlS2V5cygpIHtcbiAgdmFyIGtleXMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IFtdO1xuICByZXR1cm4ga2V5cy5tYXAod3JhcEtleVRvT2JqZWN0KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBkaWZmS2V5cygpIHtcbiAgdmFyIHByZXZLZXlzID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBbXTtcbiAgdmFyIGN1cnJlbnRLZXlzID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBbXTtcbiAgdmFyIGxpc3QgPSBbXTtcbiAgdmFyIGN1cnJlbnRJbmRleCA9IDA7XG4gIHZhciBjdXJyZW50TGVuID0gY3VycmVudEtleXMubGVuZ3RoO1xuICB2YXIgcHJldktleU9iamVjdHMgPSBwYXJzZUtleXMocHJldktleXMpO1xuICB2YXIgY3VycmVudEtleU9iamVjdHMgPSBwYXJzZUtleXMoY3VycmVudEtleXMpO1xuXG4gIC8vIENoZWNrIHByZXYga2V5cyB0byBpbnNlcnQgb3Iga2VlcFxuICBwcmV2S2V5T2JqZWN0cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXlPYmopIHtcbiAgICB2YXIgaGl0ID0gZmFsc2U7XG4gICAgZm9yICh2YXIgaSA9IGN1cnJlbnRJbmRleDsgaSA8IGN1cnJlbnRMZW47IGkgKz0gMSkge1xuICAgICAgdmFyIGN1cnJlbnRLZXlPYmogPSBjdXJyZW50S2V5T2JqZWN0c1tpXTtcbiAgICAgIGlmIChjdXJyZW50S2V5T2JqLmtleSA9PT0ga2V5T2JqLmtleSkge1xuICAgICAgICAvLyBOZXcgYWRkZWQga2V5cyBzaG91bGQgYWRkIGJlZm9yZSBjdXJyZW50IGtleVxuICAgICAgICBpZiAoY3VycmVudEluZGV4IDwgaSkge1xuICAgICAgICAgIGxpc3QgPSBsaXN0LmNvbmNhdChjdXJyZW50S2V5T2JqZWN0cy5zbGljZShjdXJyZW50SW5kZXgsIGkpLm1hcChmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBvYmopLCB7fSwge1xuICAgICAgICAgICAgICBzdGF0dXM6IFNUQVRVU19BRERcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pKTtcbiAgICAgICAgICBjdXJyZW50SW5kZXggPSBpO1xuICAgICAgICB9XG4gICAgICAgIGxpc3QucHVzaChfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGN1cnJlbnRLZXlPYmopLCB7fSwge1xuICAgICAgICAgIHN0YXR1czogU1RBVFVTX0tFRVBcbiAgICAgICAgfSkpO1xuICAgICAgICBjdXJyZW50SW5kZXggKz0gMTtcbiAgICAgICAgaGl0ID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSWYgbm90IGhpdCwgaXQgbWVhbnMga2V5IGlzIHJlbW92ZWRcbiAgICBpZiAoIWhpdCkge1xuICAgICAgbGlzdC5wdXNoKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwga2V5T2JqKSwge30sIHtcbiAgICAgICAgc3RhdHVzOiBTVEFUVVNfUkVNT1ZFXG4gICAgICB9KSk7XG4gICAgfVxuICB9KTtcblxuICAvLyBBZGQgcmVzdCB0byB0aGUgbGlzdFxuICBpZiAoY3VycmVudEluZGV4IDwgY3VycmVudExlbikge1xuICAgIGxpc3QgPSBsaXN0LmNvbmNhdChjdXJyZW50S2V5T2JqZWN0cy5zbGljZShjdXJyZW50SW5kZXgpLm1hcChmdW5jdGlvbiAob2JqKSB7XG4gICAgICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBvYmopLCB7fSwge1xuICAgICAgICBzdGF0dXM6IFNUQVRVU19BRERcbiAgICAgIH0pO1xuICAgIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXJnZSBzYW1lIGtleSB3aGVuIGl0IHJlbW92ZSBhbmQgYWRkIGFnYWluOlxuICAgKiAgICBbMSAtIGFkZCwgMiAtIGtlZXAsIDEgLSByZW1vdmVdIC0+IFsxIC0ga2VlcCwgMiAtIGtlZXBdXG4gICAqL1xuICB2YXIga2V5cyA9IHt9O1xuICBsaXN0LmZvckVhY2goZnVuY3Rpb24gKF9yZWYpIHtcbiAgICB2YXIga2V5ID0gX3JlZi5rZXk7XG4gICAga2V5c1trZXldID0gKGtleXNba2V5XSB8fCAwKSArIDE7XG4gIH0pO1xuICB2YXIgZHVwbGljYXRlZEtleXMgPSBPYmplY3Qua2V5cyhrZXlzKS5maWx0ZXIoZnVuY3Rpb24gKGtleSkge1xuICAgIHJldHVybiBrZXlzW2tleV0gPiAxO1xuICB9KTtcbiAgZHVwbGljYXRlZEtleXMuZm9yRWFjaChmdW5jdGlvbiAobWF0Y2hLZXkpIHtcbiAgICAvLyBSZW1vdmUgYFNUQVRVU19SRU1PVkVgIG5vZGUuXG4gICAgbGlzdCA9IGxpc3QuZmlsdGVyKGZ1bmN0aW9uIChfcmVmMikge1xuICAgICAgdmFyIGtleSA9IF9yZWYyLmtleSxcbiAgICAgICAgc3RhdHVzID0gX3JlZjIuc3RhdHVzO1xuICAgICAgcmV0dXJuIGtleSAhPT0gbWF0Y2hLZXkgfHwgc3RhdHVzICE9PSBTVEFUVVNfUkVNT1ZFO1xuICAgIH0pO1xuXG4gICAgLy8gVXBkYXRlIGBTVEFUVVNfQUREYCB0byBgU1RBVFVTX0tFRVBgXG4gICAgbGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICBpZiAobm9kZS5rZXkgPT09IG1hdGNoS2V5KSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICBub2RlLnN0YXR1cyA9IFNUQVRVU19LRUVQO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIGxpc3Q7XG59IiwiaW1wb3J0IF90eXBlb2YgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZlwiO1xuaW1wb3J0IGNhblVzZURPTSBmcm9tIFwicmMtdXRpbC9lcy9Eb20vY2FuVXNlRG9tXCI7XG4vLyA9PT09PT09PT09PT09PT09PSBUcmFuc2l0aW9uID09PT09PT09PT09PT09PT09XG4vLyBFdmVudCB3cmFwcGVyLiBDb3B5IGZyb20gcmVhY3Qgc291cmNlIGNvZGVcbmZ1bmN0aW9uIG1ha2VQcmVmaXhNYXAoc3R5bGVQcm9wLCBldmVudE5hbWUpIHtcbiAgdmFyIHByZWZpeGVzID0ge307XG4gIHByZWZpeGVzW3N0eWxlUHJvcC50b0xvd2VyQ2FzZSgpXSA9IGV2ZW50TmFtZS50b0xvd2VyQ2FzZSgpO1xuICBwcmVmaXhlc1tcIldlYmtpdFwiLmNvbmNhdChzdHlsZVByb3ApXSA9IFwid2Via2l0XCIuY29uY2F0KGV2ZW50TmFtZSk7XG4gIHByZWZpeGVzW1wiTW96XCIuY29uY2F0KHN0eWxlUHJvcCldID0gXCJtb3pcIi5jb25jYXQoZXZlbnROYW1lKTtcbiAgcHJlZml4ZXNbXCJtc1wiLmNvbmNhdChzdHlsZVByb3ApXSA9IFwiTVNcIi5jb25jYXQoZXZlbnROYW1lKTtcbiAgcHJlZml4ZXNbXCJPXCIuY29uY2F0KHN0eWxlUHJvcCldID0gXCJvXCIuY29uY2F0KGV2ZW50TmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgcmV0dXJuIHByZWZpeGVzO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFZlbmRvclByZWZpeGVzKGRvbVN1cHBvcnQsIHdpbikge1xuICB2YXIgcHJlZml4ZXMgPSB7XG4gICAgYW5pbWF0aW9uZW5kOiBtYWtlUHJlZml4TWFwKCdBbmltYXRpb24nLCAnQW5pbWF0aW9uRW5kJyksXG4gICAgdHJhbnNpdGlvbmVuZDogbWFrZVByZWZpeE1hcCgnVHJhbnNpdGlvbicsICdUcmFuc2l0aW9uRW5kJylcbiAgfTtcbiAgaWYgKGRvbVN1cHBvcnQpIHtcbiAgICBpZiAoISgnQW5pbWF0aW9uRXZlbnQnIGluIHdpbikpIHtcbiAgICAgIGRlbGV0ZSBwcmVmaXhlcy5hbmltYXRpb25lbmQuYW5pbWF0aW9uO1xuICAgIH1cbiAgICBpZiAoISgnVHJhbnNpdGlvbkV2ZW50JyBpbiB3aW4pKSB7XG4gICAgICBkZWxldGUgcHJlZml4ZXMudHJhbnNpdGlvbmVuZC50cmFuc2l0aW9uO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcHJlZml4ZXM7XG59XG52YXIgdmVuZG9yUHJlZml4ZXMgPSBnZXRWZW5kb3JQcmVmaXhlcyhjYW5Vc2VET00oKSwgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cgOiB7fSk7XG52YXIgc3R5bGUgPSB7fTtcbmlmIChjYW5Vc2VET00oKSkge1xuICB2YXIgX2RvY3VtZW50JGNyZWF0ZUVsZW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIHN0eWxlID0gX2RvY3VtZW50JGNyZWF0ZUVsZW1lLnN0eWxlO1xufVxudmFyIHByZWZpeGVkRXZlbnROYW1lcyA9IHt9O1xuZXhwb3J0IGZ1bmN0aW9uIGdldFZlbmRvclByZWZpeGVkRXZlbnROYW1lKGV2ZW50TmFtZSkge1xuICBpZiAocHJlZml4ZWRFdmVudE5hbWVzW2V2ZW50TmFtZV0pIHtcbiAgICByZXR1cm4gcHJlZml4ZWRFdmVudE5hbWVzW2V2ZW50TmFtZV07XG4gIH1cbiAgdmFyIHByZWZpeE1hcCA9IHZlbmRvclByZWZpeGVzW2V2ZW50TmFtZV07XG4gIGlmIChwcmVmaXhNYXApIHtcbiAgICB2YXIgc3R5bGVQcm9wTGlzdCA9IE9iamVjdC5rZXlzKHByZWZpeE1hcCk7XG4gICAgdmFyIGxlbiA9IHN0eWxlUHJvcExpc3QubGVuZ3RoO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDEpIHtcbiAgICAgIHZhciBzdHlsZVByb3AgPSBzdHlsZVByb3BMaXN0W2ldO1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwcmVmaXhNYXAsIHN0eWxlUHJvcCkgJiYgc3R5bGVQcm9wIGluIHN0eWxlKSB7XG4gICAgICAgIHByZWZpeGVkRXZlbnROYW1lc1tldmVudE5hbWVdID0gcHJlZml4TWFwW3N0eWxlUHJvcF07XG4gICAgICAgIHJldHVybiBwcmVmaXhlZEV2ZW50TmFtZXNbZXZlbnROYW1lXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuICcnO1xufVxudmFyIGludGVybmFsQW5pbWF0aW9uRW5kTmFtZSA9IGdldFZlbmRvclByZWZpeGVkRXZlbnROYW1lKCdhbmltYXRpb25lbmQnKTtcbnZhciBpbnRlcm5hbFRyYW5zaXRpb25FbmROYW1lID0gZ2V0VmVuZG9yUHJlZml4ZWRFdmVudE5hbWUoJ3RyYW5zaXRpb25lbmQnKTtcbmV4cG9ydCB2YXIgc3VwcG9ydFRyYW5zaXRpb24gPSAhIShpbnRlcm5hbEFuaW1hdGlvbkVuZE5hbWUgJiYgaW50ZXJuYWxUcmFuc2l0aW9uRW5kTmFtZSk7XG5leHBvcnQgdmFyIGFuaW1hdGlvbkVuZE5hbWUgPSBpbnRlcm5hbEFuaW1hdGlvbkVuZE5hbWUgfHwgJ2FuaW1hdGlvbmVuZCc7XG5leHBvcnQgdmFyIHRyYW5zaXRpb25FbmROYW1lID0gaW50ZXJuYWxUcmFuc2l0aW9uRW5kTmFtZSB8fCAndHJhbnNpdGlvbmVuZCc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0VHJhbnNpdGlvbk5hbWUodHJhbnNpdGlvbk5hbWUsIHRyYW5zaXRpb25UeXBlKSB7XG4gIGlmICghdHJhbnNpdGlvbk5hbWUpIHJldHVybiBudWxsO1xuICBpZiAoX3R5cGVvZih0cmFuc2l0aW9uTmFtZSkgPT09ICdvYmplY3QnKSB7XG4gICAgdmFyIHR5cGUgPSB0cmFuc2l0aW9uVHlwZS5yZXBsYWNlKC8tXFx3L2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgcmV0dXJuIG1hdGNoWzFdLnRvVXBwZXJDYXNlKCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRyYW5zaXRpb25OYW1lW3R5cGVdO1xuICB9XG4gIHJldHVybiBcIlwiLmNvbmNhdCh0cmFuc2l0aW9uTmFtZSwgXCItXCIpLmNvbmNhdCh0cmFuc2l0aW9uVHlwZSk7XG59IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX2RlZmluZVByb3BlcnR5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eVwiO1xuaW1wb3J0IF90eXBlb2YgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZlwiO1xuaW1wb3J0IF9zbGljZWRUb0FycmF5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zbGljZWRUb0FycmF5XCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBLZXlDb2RlIGZyb20gXCJyYy11dGlsL2VzL0tleUNvZGVcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBwaWNrQXR0cnMgZnJvbSBcInJjLXV0aWwvZXMvcGlja0F0dHJzXCI7XG52YXIgTm90aWZ5ID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gKHByb3BzLCByZWYpIHtcbiAgdmFyIHByZWZpeENscyA9IHByb3BzLnByZWZpeENscyxcbiAgICBzdHlsZSA9IHByb3BzLnN0eWxlLFxuICAgIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSxcbiAgICBfcHJvcHMkZHVyYXRpb24gPSBwcm9wcy5kdXJhdGlvbixcbiAgICBkdXJhdGlvbiA9IF9wcm9wcyRkdXJhdGlvbiA9PT0gdm9pZCAwID8gNC41IDogX3Byb3BzJGR1cmF0aW9uLFxuICAgIHNob3dQcm9ncmVzcyA9IHByb3BzLnNob3dQcm9ncmVzcyxcbiAgICBfcHJvcHMkcGF1c2VPbkhvdmVyID0gcHJvcHMucGF1c2VPbkhvdmVyLFxuICAgIHBhdXNlT25Ib3ZlciA9IF9wcm9wcyRwYXVzZU9uSG92ZXIgPT09IHZvaWQgMCA/IHRydWUgOiBfcHJvcHMkcGF1c2VPbkhvdmVyLFxuICAgIGV2ZW50S2V5ID0gcHJvcHMuZXZlbnRLZXksXG4gICAgY29udGVudCA9IHByb3BzLmNvbnRlbnQsXG4gICAgY2xvc2FibGUgPSBwcm9wcy5jbG9zYWJsZSxcbiAgICBfcHJvcHMkY2xvc2VJY29uID0gcHJvcHMuY2xvc2VJY29uLFxuICAgIGNsb3NlSWNvbiA9IF9wcm9wcyRjbG9zZUljb24gPT09IHZvaWQgMCA/ICd4JyA6IF9wcm9wcyRjbG9zZUljb24sXG4gICAgZGl2UHJvcHMgPSBwcm9wcy5wcm9wcyxcbiAgICBvbkNsaWNrID0gcHJvcHMub25DbGljayxcbiAgICBvbk5vdGljZUNsb3NlID0gcHJvcHMub25Ob3RpY2VDbG9zZSxcbiAgICB0aW1lcyA9IHByb3BzLnRpbWVzLFxuICAgIGZvcmNlZEhvdmVyaW5nID0gcHJvcHMuaG92ZXJpbmc7XG4gIHZhciBfUmVhY3QkdXNlU3RhdGUgPSBSZWFjdC51c2VTdGF0ZShmYWxzZSksXG4gICAgX1JlYWN0JHVzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF9SZWFjdCR1c2VTdGF0ZSwgMiksXG4gICAgaG92ZXJpbmcgPSBfUmVhY3QkdXNlU3RhdGUyWzBdLFxuICAgIHNldEhvdmVyaW5nID0gX1JlYWN0JHVzZVN0YXRlMlsxXTtcbiAgdmFyIF9SZWFjdCR1c2VTdGF0ZTMgPSBSZWFjdC51c2VTdGF0ZSgwKSxcbiAgICBfUmVhY3QkdXNlU3RhdGU0ID0gX3NsaWNlZFRvQXJyYXkoX1JlYWN0JHVzZVN0YXRlMywgMiksXG4gICAgcGVyY2VudCA9IF9SZWFjdCR1c2VTdGF0ZTRbMF0sXG4gICAgc2V0UGVyY2VudCA9IF9SZWFjdCR1c2VTdGF0ZTRbMV07XG4gIHZhciBfUmVhY3QkdXNlU3RhdGU1ID0gUmVhY3QudXNlU3RhdGUoMCksXG4gICAgX1JlYWN0JHVzZVN0YXRlNiA9IF9zbGljZWRUb0FycmF5KF9SZWFjdCR1c2VTdGF0ZTUsIDIpLFxuICAgIHNwZW50VGltZSA9IF9SZWFjdCR1c2VTdGF0ZTZbMF0sXG4gICAgc2V0U3BlbnRUaW1lID0gX1JlYWN0JHVzZVN0YXRlNlsxXTtcbiAgdmFyIG1lcmdlZEhvdmVyaW5nID0gZm9yY2VkSG92ZXJpbmcgfHwgaG92ZXJpbmc7XG4gIHZhciBtZXJnZWRTaG93UHJvZ3Jlc3MgPSBkdXJhdGlvbiA+IDAgJiYgc2hvd1Byb2dyZXNzO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PSBDbG9zZSA9PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBvbkludGVybmFsQ2xvc2UgPSBmdW5jdGlvbiBvbkludGVybmFsQ2xvc2UoKSB7XG4gICAgb25Ob3RpY2VDbG9zZShldmVudEtleSk7XG4gIH07XG4gIHZhciBvbkNsb3NlS2V5RG93biA9IGZ1bmN0aW9uIG9uQ2xvc2VLZXlEb3duKGUpIHtcbiAgICBpZiAoZS5rZXkgPT09ICdFbnRlcicgfHwgZS5jb2RlID09PSAnRW50ZXInIHx8IGUua2V5Q29kZSA9PT0gS2V5Q29kZS5FTlRFUikge1xuICAgICAgb25JbnRlcm5hbENsb3NlKCk7XG4gICAgfVxuICB9O1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PSBFZmZlY3QgPT09PT09PT09PT09PT09PT09PT09PT09XG4gIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFtZXJnZWRIb3ZlcmluZyAmJiBkdXJhdGlvbiA+IDApIHtcbiAgICAgIHZhciBzdGFydCA9IERhdGUubm93KCkgLSBzcGVudFRpbWU7XG4gICAgICB2YXIgdGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBvbkludGVybmFsQ2xvc2UoKTtcbiAgICAgIH0sIGR1cmF0aW9uICogMTAwMCAtIHNwZW50VGltZSk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAocGF1c2VPbkhvdmVyKSB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICB9XG4gICAgICAgIHNldFNwZW50VGltZShEYXRlLm5vdygpIC0gc3RhcnQpO1xuICAgICAgfTtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICB9LCBbZHVyYXRpb24sIG1lcmdlZEhvdmVyaW5nLCB0aW1lc10pO1xuICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmICghbWVyZ2VkSG92ZXJpbmcgJiYgbWVyZ2VkU2hvd1Byb2dyZXNzICYmIChwYXVzZU9uSG92ZXIgfHwgc3BlbnRUaW1lID09PSAwKSkge1xuICAgICAgdmFyIHN0YXJ0ID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgICB2YXIgYW5pbWF0aW9uRnJhbWU7XG4gICAgICB2YXIgY2FsY3VsYXRlID0gZnVuY3Rpb24gY2FsY3VsYXRlKCkge1xuICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShhbmltYXRpb25GcmFtZSk7XG4gICAgICAgIGFuaW1hdGlvbkZyYW1lID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICh0aW1lc3RhbXApIHtcbiAgICAgICAgICB2YXIgcnVudGltZSA9IHRpbWVzdGFtcCArIHNwZW50VGltZSAtIHN0YXJ0O1xuICAgICAgICAgIHZhciBwcm9ncmVzcyA9IE1hdGgubWluKHJ1bnRpbWUgLyAoZHVyYXRpb24gKiAxMDAwKSwgMSk7XG4gICAgICAgICAgc2V0UGVyY2VudChwcm9ncmVzcyAqIDEwMCk7XG4gICAgICAgICAgaWYgKHByb2dyZXNzIDwgMSkge1xuICAgICAgICAgICAgY2FsY3VsYXRlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjYWxjdWxhdGUoKTtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChwYXVzZU9uSG92ZXIpIHtcbiAgICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShhbmltYXRpb25GcmFtZSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgfSwgW2R1cmF0aW9uLCBzcGVudFRpbWUsIG1lcmdlZEhvdmVyaW5nLCBtZXJnZWRTaG93UHJvZ3Jlc3MsIHRpbWVzXSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09IENsb3NhYmxlID09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgY2xvc2FibGVPYmogPSBSZWFjdC51c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoX3R5cGVvZihjbG9zYWJsZSkgPT09ICdvYmplY3QnICYmIGNsb3NhYmxlICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gY2xvc2FibGU7XG4gICAgfVxuICAgIGlmIChjbG9zYWJsZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY2xvc2VJY29uOiBjbG9zZUljb25cbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7fTtcbiAgfSwgW2Nsb3NhYmxlLCBjbG9zZUljb25dKTtcbiAgdmFyIGFyaWFQcm9wcyA9IHBpY2tBdHRycyhjbG9zYWJsZU9iaiwgdHJ1ZSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09IFByb2dyZXNzID09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgdmFsaWRQZXJjZW50ID0gMTAwIC0gKCFwZXJjZW50IHx8IHBlcmNlbnQgPCAwID8gMCA6IHBlcmNlbnQgPiAxMDAgPyAxMDAgOiBwZXJjZW50KTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT0gUmVuZGVyID09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgbm90aWNlUHJlZml4Q2xzID0gXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1ub3RpY2VcIik7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCBfZXh0ZW5kcyh7fSwgZGl2UHJvcHMsIHtcbiAgICByZWY6IHJlZixcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMobm90aWNlUHJlZml4Q2xzLCBjbGFzc05hbWUsIF9kZWZpbmVQcm9wZXJ0eSh7fSwgXCJcIi5jb25jYXQobm90aWNlUHJlZml4Q2xzLCBcIi1jbG9zYWJsZVwiKSwgY2xvc2FibGUpKSxcbiAgICBzdHlsZTogc3R5bGUsXG4gICAgb25Nb3VzZUVudGVyOiBmdW5jdGlvbiBvbk1vdXNlRW50ZXIoZSkge1xuICAgICAgdmFyIF9kaXZQcm9wcyRvbk1vdXNlRW50ZTtcbiAgICAgIHNldEhvdmVyaW5nKHRydWUpO1xuICAgICAgZGl2UHJvcHMgPT09IG51bGwgfHwgZGl2UHJvcHMgPT09IHZvaWQgMCB8fCAoX2RpdlByb3BzJG9uTW91c2VFbnRlID0gZGl2UHJvcHMub25Nb3VzZUVudGVyKSA9PT0gbnVsbCB8fCBfZGl2UHJvcHMkb25Nb3VzZUVudGUgPT09IHZvaWQgMCB8fCBfZGl2UHJvcHMkb25Nb3VzZUVudGUuY2FsbChkaXZQcm9wcywgZSk7XG4gICAgfSxcbiAgICBvbk1vdXNlTGVhdmU6IGZ1bmN0aW9uIG9uTW91c2VMZWF2ZShlKSB7XG4gICAgICB2YXIgX2RpdlByb3BzJG9uTW91c2VMZWF2O1xuICAgICAgc2V0SG92ZXJpbmcoZmFsc2UpO1xuICAgICAgZGl2UHJvcHMgPT09IG51bGwgfHwgZGl2UHJvcHMgPT09IHZvaWQgMCB8fCAoX2RpdlByb3BzJG9uTW91c2VMZWF2ID0gZGl2UHJvcHMub25Nb3VzZUxlYXZlKSA9PT0gbnVsbCB8fCBfZGl2UHJvcHMkb25Nb3VzZUxlYXYgPT09IHZvaWQgMCB8fCBfZGl2UHJvcHMkb25Nb3VzZUxlYXYuY2FsbChkaXZQcm9wcywgZSk7XG4gICAgfSxcbiAgICBvbkNsaWNrOiBvbkNsaWNrXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgY2xhc3NOYW1lOiBcIlwiLmNvbmNhdChub3RpY2VQcmVmaXhDbHMsIFwiLWNvbnRlbnRcIilcbiAgfSwgY29udGVudCksIGNsb3NhYmxlICYmIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiYVwiLCBfZXh0ZW5kcyh7XG4gICAgdGFiSW5kZXg6IDAsXG4gICAgY2xhc3NOYW1lOiBcIlwiLmNvbmNhdChub3RpY2VQcmVmaXhDbHMsIFwiLWNsb3NlXCIpLFxuICAgIG9uS2V5RG93bjogb25DbG9zZUtleURvd24sXG4gICAgXCJhcmlhLWxhYmVsXCI6IFwiQ2xvc2VcIlxuICB9LCBhcmlhUHJvcHMsIHtcbiAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKGUpIHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBvbkludGVybmFsQ2xvc2UoKTtcbiAgICB9XG4gIH0pLCBjbG9zYWJsZU9iai5jbG9zZUljb24pLCBtZXJnZWRTaG93UHJvZ3Jlc3MgJiYgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwcm9ncmVzc1wiLCB7XG4gICAgY2xhc3NOYW1lOiBcIlwiLmNvbmNhdChub3RpY2VQcmVmaXhDbHMsIFwiLXByb2dyZXNzXCIpLFxuICAgIG1heDogXCIxMDBcIixcbiAgICB2YWx1ZTogdmFsaWRQZXJjZW50XG4gIH0sIHZhbGlkUGVyY2VudCArICclJykpO1xufSk7XG5leHBvcnQgZGVmYXVsdCBOb3RpZnk7IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX3RvQ29uc3VtYWJsZUFycmF5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b0NvbnN1bWFibGVBcnJheVwiO1xuaW1wb3J0IF9vYmplY3RTcHJlYWQgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFNwcmVhZDJcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzXCI7XG5pbXBvcnQgX2RlZmluZVByb3BlcnR5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eVwiO1xuaW1wb3J0IF9zbGljZWRUb0FycmF5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zbGljZWRUb0FycmF5XCI7XG52YXIgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwic3R5bGVcIiwgXCJjbGFzc05hbWVzXCIsIFwic3R5bGVzXCJdO1xuaW1wb3J0IFJlYWN0LCB7IHVzZUNvbnRleHQsIHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBjbHN4IGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgQ1NTTW90aW9uTGlzdCB9IGZyb20gJ3JjLW1vdGlvbic7XG5pbXBvcnQgTm90aWNlIGZyb20gXCIuL05vdGljZVwiO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uQ29udGV4dCB9IGZyb20gXCIuL05vdGlmaWNhdGlvblByb3ZpZGVyXCI7XG5pbXBvcnQgdXNlU3RhY2sgZnJvbSBcIi4vaG9va3MvdXNlU3RhY2tcIjtcbnZhciBOb3RpY2VMaXN0ID0gZnVuY3Rpb24gTm90aWNlTGlzdChwcm9wcykge1xuICB2YXIgY29uZmlnTGlzdCA9IHByb3BzLmNvbmZpZ0xpc3QsXG4gICAgcGxhY2VtZW50ID0gcHJvcHMucGxhY2VtZW50LFxuICAgIHByZWZpeENscyA9IHByb3BzLnByZWZpeENscyxcbiAgICBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUsXG4gICAgc3R5bGUgPSBwcm9wcy5zdHlsZSxcbiAgICBtb3Rpb24gPSBwcm9wcy5tb3Rpb24sXG4gICAgb25BbGxOb3RpY2VSZW1vdmVkID0gcHJvcHMub25BbGxOb3RpY2VSZW1vdmVkLFxuICAgIG9uTm90aWNlQ2xvc2UgPSBwcm9wcy5vbk5vdGljZUNsb3NlLFxuICAgIHN0YWNrQ29uZmlnID0gcHJvcHMuc3RhY2s7XG4gIHZhciBfdXNlQ29udGV4dCA9IHVzZUNvbnRleHQoTm90aWZpY2F0aW9uQ29udGV4dCksXG4gICAgY3R4Q2xzID0gX3VzZUNvbnRleHQuY2xhc3NOYW1lcztcbiAgdmFyIGRpY3RSZWYgPSB1c2VSZWYoe30pO1xuICB2YXIgX3VzZVN0YXRlID0gdXNlU3RhdGUobnVsbCksXG4gICAgX3VzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZSwgMiksXG4gICAgbGF0ZXN0Tm90aWNlID0gX3VzZVN0YXRlMlswXSxcbiAgICBzZXRMYXRlc3ROb3RpY2UgPSBfdXNlU3RhdGUyWzFdO1xuICB2YXIgX3VzZVN0YXRlMyA9IHVzZVN0YXRlKFtdKSxcbiAgICBfdXNlU3RhdGU0ID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlMywgMiksXG4gICAgaG92ZXJLZXlzID0gX3VzZVN0YXRlNFswXSxcbiAgICBzZXRIb3ZlcktleXMgPSBfdXNlU3RhdGU0WzFdO1xuICB2YXIga2V5cyA9IGNvbmZpZ0xpc3QubWFwKGZ1bmN0aW9uIChjb25maWcpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29uZmlnOiBjb25maWcsXG4gICAgICBrZXk6IFN0cmluZyhjb25maWcua2V5KVxuICAgIH07XG4gIH0pO1xuICB2YXIgX3VzZVN0YWNrID0gdXNlU3RhY2soc3RhY2tDb25maWcpLFxuICAgIF91c2VTdGFjazIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhY2ssIDIpLFxuICAgIHN0YWNrID0gX3VzZVN0YWNrMlswXSxcbiAgICBfdXNlU3RhY2syJCA9IF91c2VTdGFjazJbMV0sXG4gICAgb2Zmc2V0ID0gX3VzZVN0YWNrMiQub2Zmc2V0LFxuICAgIHRocmVzaG9sZCA9IF91c2VTdGFjazIkLnRocmVzaG9sZCxcbiAgICBnYXAgPSBfdXNlU3RhY2syJC5nYXA7XG4gIHZhciBleHBhbmRlZCA9IHN0YWNrICYmIChob3ZlcktleXMubGVuZ3RoID4gMCB8fCBrZXlzLmxlbmd0aCA8PSB0aHJlc2hvbGQpO1xuICB2YXIgcGxhY2VtZW50TW90aW9uID0gdHlwZW9mIG1vdGlvbiA9PT0gJ2Z1bmN0aW9uJyA/IG1vdGlvbihwbGFjZW1lbnQpIDogbW90aW9uO1xuXG4gIC8vIENsZWFuIGhvdmVyIGtleVxuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmIChzdGFjayAmJiBob3ZlcktleXMubGVuZ3RoID4gMSkge1xuICAgICAgc2V0SG92ZXJLZXlzKGZ1bmN0aW9uIChwcmV2KSB7XG4gICAgICAgIHJldHVybiBwcmV2LmZpbHRlcihmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgcmV0dXJuIGtleXMuc29tZShmdW5jdGlvbiAoX3JlZikge1xuICAgICAgICAgICAgdmFyIGRhdGFLZXkgPSBfcmVmLmtleTtcbiAgICAgICAgICAgIHJldHVybiBrZXkgPT09IGRhdGFLZXk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9LCBbaG92ZXJLZXlzLCBrZXlzLCBzdGFja10pO1xuXG4gIC8vIEZvcmNlIHVwZGF0ZSBsYXRlc3Qgbm90aWNlXG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIF9rZXlzO1xuICAgIGlmIChzdGFjayAmJiBkaWN0UmVmLmN1cnJlbnRbKF9rZXlzID0ga2V5c1trZXlzLmxlbmd0aCAtIDFdKSA9PT0gbnVsbCB8fCBfa2V5cyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2tleXMua2V5XSkge1xuICAgICAgdmFyIF9rZXlzMjtcbiAgICAgIHNldExhdGVzdE5vdGljZShkaWN0UmVmLmN1cnJlbnRbKF9rZXlzMiA9IGtleXNba2V5cy5sZW5ndGggLSAxXSkgPT09IG51bGwgfHwgX2tleXMyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfa2V5czIua2V5XSk7XG4gICAgfVxuICB9LCBba2V5cywgc3RhY2tdKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KENTU01vdGlvbkxpc3QsIF9leHRlbmRzKHtcbiAgICBrZXk6IHBsYWNlbWVudCxcbiAgICBjbGFzc05hbWU6IGNsc3gocHJlZml4Q2xzLCBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLVwiKS5jb25jYXQocGxhY2VtZW50KSwgY3R4Q2xzID09PSBudWxsIHx8IGN0eENscyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY3R4Q2xzLmxpc3QsIGNsYXNzTmFtZSwgX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eSh7fSwgXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1zdGFja1wiKSwgISFzdGFjayksIFwiXCIuY29uY2F0KHByZWZpeENscywgXCItc3RhY2stZXhwYW5kZWRcIiksIGV4cGFuZGVkKSksXG4gICAgc3R5bGU6IHN0eWxlLFxuICAgIGtleXM6IGtleXMsXG4gICAgbW90aW9uQXBwZWFyOiB0cnVlXG4gIH0sIHBsYWNlbWVudE1vdGlvbiwge1xuICAgIG9uQWxsUmVtb3ZlZDogZnVuY3Rpb24gb25BbGxSZW1vdmVkKCkge1xuICAgICAgb25BbGxOb3RpY2VSZW1vdmVkKHBsYWNlbWVudCk7XG4gICAgfVxuICB9KSwgZnVuY3Rpb24gKF9yZWYyLCBub2RlUmVmKSB7XG4gICAgdmFyIGNvbmZpZyA9IF9yZWYyLmNvbmZpZyxcbiAgICAgIG1vdGlvbkNsYXNzTmFtZSA9IF9yZWYyLmNsYXNzTmFtZSxcbiAgICAgIG1vdGlvblN0eWxlID0gX3JlZjIuc3R5bGUsXG4gICAgICBtb3Rpb25JbmRleCA9IF9yZWYyLmluZGV4O1xuICAgIHZhciBfcmVmMyA9IGNvbmZpZyxcbiAgICAgIGtleSA9IF9yZWYzLmtleSxcbiAgICAgIHRpbWVzID0gX3JlZjMudGltZXM7XG4gICAgdmFyIHN0cktleSA9IFN0cmluZyhrZXkpO1xuICAgIHZhciBfcmVmNCA9IGNvbmZpZyxcbiAgICAgIGNvbmZpZ0NsYXNzTmFtZSA9IF9yZWY0LmNsYXNzTmFtZSxcbiAgICAgIGNvbmZpZ1N0eWxlID0gX3JlZjQuc3R5bGUsXG4gICAgICBjb25maWdDbGFzc05hbWVzID0gX3JlZjQuY2xhc3NOYW1lcyxcbiAgICAgIGNvbmZpZ1N0eWxlcyA9IF9yZWY0LnN0eWxlcyxcbiAgICAgIHJlc3RDb25maWcgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZjQsIF9leGNsdWRlZCk7XG4gICAgdmFyIGRhdGFJbmRleCA9IGtleXMuZmluZEluZGV4KGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICByZXR1cm4gaXRlbS5rZXkgPT09IHN0cktleTtcbiAgICB9KTtcblxuICAgIC8vIElmIGRhdGFJbmRleCBpcyAtMSwgdGhhdCBtZWFucyB0aGlzIG5vdGljZSBoYXMgYmVlbiByZW1vdmVkIGluIGRhdGEsIGJ1dCBzdGlsbCBpbiBkb21cbiAgICAvLyBTaG91bGQgbWludXMgKG1vdGlvbkluZGV4IC0gMSkgdG8gZ2V0IHRoZSBjb3JyZWN0IGluZGV4IGJlY2F1c2Uga2V5cy5sZW5ndGggaXMgbm90IHRoZSBzYW1lIGFzIGRvbSBsZW5ndGhcbiAgICB2YXIgc3RhY2tTdHlsZSA9IHt9O1xuICAgIGlmIChzdGFjaykge1xuICAgICAgdmFyIGluZGV4ID0ga2V5cy5sZW5ndGggLSAxIC0gKGRhdGFJbmRleCA+IC0xID8gZGF0YUluZGV4IDogbW90aW9uSW5kZXggLSAxKTtcbiAgICAgIHZhciB0cmFuc2Zvcm1YID0gcGxhY2VtZW50ID09PSAndG9wJyB8fCBwbGFjZW1lbnQgPT09ICdib3R0b20nID8gJy01MCUnIDogJzAnO1xuICAgICAgaWYgKGluZGV4ID4gMCkge1xuICAgICAgICB2YXIgX2RpY3RSZWYkY3VycmVudCRzdHJLLCBfZGljdFJlZiRjdXJyZW50JHN0cksyLCBfZGljdFJlZiRjdXJyZW50JHN0ckszO1xuICAgICAgICBzdGFja1N0eWxlLmhlaWdodCA9IGV4cGFuZGVkID8gKF9kaWN0UmVmJGN1cnJlbnQkc3RySyA9IGRpY3RSZWYuY3VycmVudFtzdHJLZXldKSA9PT0gbnVsbCB8fCBfZGljdFJlZiRjdXJyZW50JHN0cksgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kaWN0UmVmJGN1cnJlbnQkc3RySy5vZmZzZXRIZWlnaHQgOiBsYXRlc3ROb3RpY2UgPT09IG51bGwgfHwgbGF0ZXN0Tm90aWNlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBsYXRlc3ROb3RpY2Uub2Zmc2V0SGVpZ2h0O1xuXG4gICAgICAgIC8vIFRyYW5zZm9ybVxuICAgICAgICB2YXIgdmVydGljYWxPZmZzZXQgPSAwO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGluZGV4OyBpKyspIHtcbiAgICAgICAgICB2YXIgX2RpY3RSZWYkY3VycmVudCRrZXlzO1xuICAgICAgICAgIHZlcnRpY2FsT2Zmc2V0ICs9ICgoX2RpY3RSZWYkY3VycmVudCRrZXlzID0gZGljdFJlZi5jdXJyZW50W2tleXNba2V5cy5sZW5ndGggLSAxIC0gaV0ua2V5XSkgPT09IG51bGwgfHwgX2RpY3RSZWYkY3VycmVudCRrZXlzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZGljdFJlZiRjdXJyZW50JGtleXMub2Zmc2V0SGVpZ2h0KSArIGdhcDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdHJhbnNmb3JtWSA9IChleHBhbmRlZCA/IHZlcnRpY2FsT2Zmc2V0IDogaW5kZXggKiBvZmZzZXQpICogKHBsYWNlbWVudC5zdGFydHNXaXRoKCd0b3AnKSA/IDEgOiAtMSk7XG4gICAgICAgIHZhciBzY2FsZVggPSAhZXhwYW5kZWQgJiYgbGF0ZXN0Tm90aWNlICE9PSBudWxsICYmIGxhdGVzdE5vdGljZSAhPT0gdm9pZCAwICYmIGxhdGVzdE5vdGljZS5vZmZzZXRXaWR0aCAmJiAoX2RpY3RSZWYkY3VycmVudCRzdHJLMiA9IGRpY3RSZWYuY3VycmVudFtzdHJLZXldKSAhPT0gbnVsbCAmJiBfZGljdFJlZiRjdXJyZW50JHN0cksyICE9PSB2b2lkIDAgJiYgX2RpY3RSZWYkY3VycmVudCRzdHJLMi5vZmZzZXRXaWR0aCA/ICgobGF0ZXN0Tm90aWNlID09PSBudWxsIHx8IGxhdGVzdE5vdGljZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogbGF0ZXN0Tm90aWNlLm9mZnNldFdpZHRoKSAtIG9mZnNldCAqIDIgKiAoaW5kZXggPCAzID8gaW5kZXggOiAzKSkgLyAoKF9kaWN0UmVmJGN1cnJlbnQkc3RySzMgPSBkaWN0UmVmLmN1cnJlbnRbc3RyS2V5XSkgPT09IG51bGwgfHwgX2RpY3RSZWYkY3VycmVudCRzdHJLMyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2RpY3RSZWYkY3VycmVudCRzdHJLMy5vZmZzZXRXaWR0aCkgOiAxO1xuICAgICAgICBzdGFja1N0eWxlLnRyYW5zZm9ybSA9IFwidHJhbnNsYXRlM2QoXCIuY29uY2F0KHRyYW5zZm9ybVgsIFwiLCBcIikuY29uY2F0KHRyYW5zZm9ybVksIFwicHgsIDApIHNjYWxlWChcIikuY29uY2F0KHNjYWxlWCwgXCIpXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhY2tTdHlsZS50cmFuc2Zvcm0gPSBcInRyYW5zbGF0ZTNkKFwiLmNvbmNhdCh0cmFuc2Zvcm1YLCBcIiwgMCwgMClcIik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICByZWY6IG5vZGVSZWYsXG4gICAgICBjbGFzc05hbWU6IGNsc3goXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1ub3RpY2Utd3JhcHBlclwiKSwgbW90aW9uQ2xhc3NOYW1lLCBjb25maWdDbGFzc05hbWVzID09PSBudWxsIHx8IGNvbmZpZ0NsYXNzTmFtZXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbmZpZ0NsYXNzTmFtZXMud3JhcHBlciksXG4gICAgICBzdHlsZTogX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIG1vdGlvblN0eWxlKSwgc3RhY2tTdHlsZSksIGNvbmZpZ1N0eWxlcyA9PT0gbnVsbCB8fCBjb25maWdTdHlsZXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbmZpZ1N0eWxlcy53cmFwcGVyKSxcbiAgICAgIG9uTW91c2VFbnRlcjogZnVuY3Rpb24gb25Nb3VzZUVudGVyKCkge1xuICAgICAgICByZXR1cm4gc2V0SG92ZXJLZXlzKGZ1bmN0aW9uIChwcmV2KSB7XG4gICAgICAgICAgcmV0dXJuIHByZXYuaW5jbHVkZXMoc3RyS2V5KSA/IHByZXYgOiBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KHByZXYpLCBbc3RyS2V5XSk7XG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIG9uTW91c2VMZWF2ZTogZnVuY3Rpb24gb25Nb3VzZUxlYXZlKCkge1xuICAgICAgICByZXR1cm4gc2V0SG92ZXJLZXlzKGZ1bmN0aW9uIChwcmV2KSB7XG4gICAgICAgICAgcmV0dXJuIHByZXYuZmlsdGVyKGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgICByZXR1cm4gayAhPT0gc3RyS2V5O1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChOb3RpY2UsIF9leHRlbmRzKHt9LCByZXN0Q29uZmlnLCB7XG4gICAgICByZWY6IGZ1bmN0aW9uIHJlZihub2RlKSB7XG4gICAgICAgIGlmIChkYXRhSW5kZXggPiAtMSkge1xuICAgICAgICAgIGRpY3RSZWYuY3VycmVudFtzdHJLZXldID0gbm9kZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZWxldGUgZGljdFJlZi5jdXJyZW50W3N0cktleV07XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBwcmVmaXhDbHM6IHByZWZpeENscyxcbiAgICAgIGNsYXNzTmFtZXM6IGNvbmZpZ0NsYXNzTmFtZXMsXG4gICAgICBzdHlsZXM6IGNvbmZpZ1N0eWxlcyxcbiAgICAgIGNsYXNzTmFtZTogY2xzeChjb25maWdDbGFzc05hbWUsIGN0eENscyA9PT0gbnVsbCB8fCBjdHhDbHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGN0eENscy5ub3RpY2UpLFxuICAgICAgc3R5bGU6IGNvbmZpZ1N0eWxlLFxuICAgICAgdGltZXM6IHRpbWVzLFxuICAgICAga2V5OiBrZXksXG4gICAgICBldmVudEtleToga2V5LFxuICAgICAgb25Ob3RpY2VDbG9zZTogb25Ob3RpY2VDbG9zZSxcbiAgICAgIGhvdmVyaW5nOiBzdGFjayAmJiBob3ZlcktleXMubGVuZ3RoID4gMFxuICAgIH0pKSk7XG4gIH0pO1xufTtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIE5vdGljZUxpc3QuZGlzcGxheU5hbWUgPSAnTm90aWNlTGlzdCc7XG59XG5leHBvcnQgZGVmYXVsdCBOb3RpY2VMaXN0OyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5leHBvcnQgdmFyIE5vdGlmaWNhdGlvbkNvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlQ29udGV4dCh7fSk7XG52YXIgTm90aWZpY2F0aW9uUHJvdmlkZXIgPSBmdW5jdGlvbiBOb3RpZmljYXRpb25Qcm92aWRlcihfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgY2xhc3NOYW1lcyA9IF9yZWYuY2xhc3NOYW1lcztcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KE5vdGlmaWNhdGlvbkNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZToge1xuICAgICAgY2xhc3NOYW1lczogY2xhc3NOYW1lc1xuICAgIH1cbiAgfSwgY2hpbGRyZW4pO1xufTtcbmV4cG9ydCBkZWZhdWx0IE5vdGlmaWNhdGlvblByb3ZpZGVyOyIsImltcG9ydCBfb2JqZWN0U3ByZWFkIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyXCI7XG5pbXBvcnQgX3RvQ29uc3VtYWJsZUFycmF5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b0NvbnN1bWFibGVBcnJheVwiO1xuaW1wb3J0IF9zbGljZWRUb0FycmF5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zbGljZWRUb0FycmF5XCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjcmVhdGVQb3J0YWwgfSBmcm9tICdyZWFjdC1kb20nO1xuaW1wb3J0IE5vdGljZUxpc3QgZnJvbSBcIi4vTm90aWNlTGlzdFwiO1xuLy8gYW50LW5vdGlmaWNhdGlvbiBhbnQtbm90aWZpY2F0aW9uLXRvcFJpZ2h0XG52YXIgTm90aWZpY2F0aW9ucyA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIChwcm9wcywgcmVmKSB7XG4gIHZhciBfcHJvcHMkcHJlZml4Q2xzID0gcHJvcHMucHJlZml4Q2xzLFxuICAgIHByZWZpeENscyA9IF9wcm9wcyRwcmVmaXhDbHMgPT09IHZvaWQgMCA/ICdyYy1ub3RpZmljYXRpb24nIDogX3Byb3BzJHByZWZpeENscyxcbiAgICBjb250YWluZXIgPSBwcm9wcy5jb250YWluZXIsXG4gICAgbW90aW9uID0gcHJvcHMubW90aW9uLFxuICAgIG1heENvdW50ID0gcHJvcHMubWF4Q291bnQsXG4gICAgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lLFxuICAgIHN0eWxlID0gcHJvcHMuc3R5bGUsXG4gICAgb25BbGxSZW1vdmVkID0gcHJvcHMub25BbGxSZW1vdmVkLFxuICAgIHN0YWNrID0gcHJvcHMuc3RhY2ssXG4gICAgcmVuZGVyTm90aWZpY2F0aW9ucyA9IHByb3BzLnJlbmRlck5vdGlmaWNhdGlvbnM7XG4gIHZhciBfUmVhY3QkdXNlU3RhdGUgPSBSZWFjdC51c2VTdGF0ZShbXSksXG4gICAgX1JlYWN0JHVzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF9SZWFjdCR1c2VTdGF0ZSwgMiksXG4gICAgY29uZmlnTGlzdCA9IF9SZWFjdCR1c2VTdGF0ZTJbMF0sXG4gICAgc2V0Q29uZmlnTGlzdCA9IF9SZWFjdCR1c2VTdGF0ZTJbMV07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09IENsb3NlID09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIG9uTm90aWNlQ2xvc2UgPSBmdW5jdGlvbiBvbk5vdGljZUNsb3NlKGtleSkge1xuICAgIHZhciBfY29uZmlnJG9uQ2xvc2U7XG4gICAgLy8gVHJpZ2dlciBjbG9zZSBldmVudFxuICAgIHZhciBjb25maWcgPSBjb25maWdMaXN0LmZpbmQoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHJldHVybiBpdGVtLmtleSA9PT0ga2V5O1xuICAgIH0pO1xuICAgIGNvbmZpZyA9PT0gbnVsbCB8fCBjb25maWcgPT09IHZvaWQgMCB8fCAoX2NvbmZpZyRvbkNsb3NlID0gY29uZmlnLm9uQ2xvc2UpID09PSBudWxsIHx8IF9jb25maWckb25DbG9zZSA9PT0gdm9pZCAwIHx8IF9jb25maWckb25DbG9zZS5jYWxsKGNvbmZpZyk7XG4gICAgc2V0Q29uZmlnTGlzdChmdW5jdGlvbiAobGlzdCkge1xuICAgICAgcmV0dXJuIGxpc3QuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIHJldHVybiBpdGVtLmtleSAhPT0ga2V5O1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PSBSZWZzID09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgUmVhY3QudXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb3BlbjogZnVuY3Rpb24gb3Blbihjb25maWcpIHtcbiAgICAgICAgc2V0Q29uZmlnTGlzdChmdW5jdGlvbiAobGlzdCkge1xuICAgICAgICAgIHZhciBjbG9uZSA9IF90b0NvbnN1bWFibGVBcnJheShsaXN0KTtcblxuICAgICAgICAgIC8vIFJlcGxhY2UgaWYgZXhpc3RcbiAgICAgICAgICB2YXIgaW5kZXggPSBjbG9uZS5maW5kSW5kZXgoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtLmtleSA9PT0gY29uZmlnLmtleTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB2YXIgaW5uZXJDb25maWcgPSBfb2JqZWN0U3ByZWFkKHt9LCBjb25maWcpO1xuICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgICB2YXIgX2xpc3QkaW5kZXg7XG4gICAgICAgICAgICBpbm5lckNvbmZpZy50aW1lcyA9ICgoKF9saXN0JGluZGV4ID0gbGlzdFtpbmRleF0pID09PSBudWxsIHx8IF9saXN0JGluZGV4ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfbGlzdCRpbmRleC50aW1lcykgfHwgMCkgKyAxO1xuICAgICAgICAgICAgY2xvbmVbaW5kZXhdID0gaW5uZXJDb25maWc7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlubmVyQ29uZmlnLnRpbWVzID0gMDtcbiAgICAgICAgICAgIGNsb25lLnB1c2goaW5uZXJDb25maWcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobWF4Q291bnQgPiAwICYmIGNsb25lLmxlbmd0aCA+IG1heENvdW50KSB7XG4gICAgICAgICAgICBjbG9uZSA9IGNsb25lLnNsaWNlKC1tYXhDb3VudCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBjbG9uZTtcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgY2xvc2U6IGZ1bmN0aW9uIGNsb3NlKGtleSkge1xuICAgICAgICBvbk5vdGljZUNsb3NlKGtleSk7XG4gICAgICB9LFxuICAgICAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgICAgc2V0Q29uZmlnTGlzdChbXSk7XG4gICAgICB9XG4gICAgfTtcbiAgfSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PSBQbGFjZW1lbnRzID09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIF9SZWFjdCR1c2VTdGF0ZTMgPSBSZWFjdC51c2VTdGF0ZSh7fSksXG4gICAgX1JlYWN0JHVzZVN0YXRlNCA9IF9zbGljZWRUb0FycmF5KF9SZWFjdCR1c2VTdGF0ZTMsIDIpLFxuICAgIHBsYWNlbWVudHMgPSBfUmVhY3QkdXNlU3RhdGU0WzBdLFxuICAgIHNldFBsYWNlbWVudHMgPSBfUmVhY3QkdXNlU3RhdGU0WzFdO1xuICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHZhciBuZXh0UGxhY2VtZW50cyA9IHt9O1xuICAgIGNvbmZpZ0xpc3QuZm9yRWFjaChmdW5jdGlvbiAoY29uZmlnKSB7XG4gICAgICB2YXIgX2NvbmZpZyRwbGFjZW1lbnQgPSBjb25maWcucGxhY2VtZW50LFxuICAgICAgICBwbGFjZW1lbnQgPSBfY29uZmlnJHBsYWNlbWVudCA9PT0gdm9pZCAwID8gJ3RvcFJpZ2h0JyA6IF9jb25maWckcGxhY2VtZW50O1xuICAgICAgaWYgKHBsYWNlbWVudCkge1xuICAgICAgICBuZXh0UGxhY2VtZW50c1twbGFjZW1lbnRdID0gbmV4dFBsYWNlbWVudHNbcGxhY2VtZW50XSB8fCBbXTtcbiAgICAgICAgbmV4dFBsYWNlbWVudHNbcGxhY2VtZW50XS5wdXNoKGNvbmZpZyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBGaWxsIGV4aXN0IHBsYWNlbWVudHMgdG8gYXZvaWQgZW1wdHkgbGlzdCBjYXVzaW5nIHJlbW92ZSB3aXRob3V0IG1vdGlvblxuICAgIE9iamVjdC5rZXlzKHBsYWNlbWVudHMpLmZvckVhY2goZnVuY3Rpb24gKHBsYWNlbWVudCkge1xuICAgICAgbmV4dFBsYWNlbWVudHNbcGxhY2VtZW50XSA9IG5leHRQbGFjZW1lbnRzW3BsYWNlbWVudF0gfHwgW107XG4gICAgfSk7XG4gICAgc2V0UGxhY2VtZW50cyhuZXh0UGxhY2VtZW50cyk7XG4gIH0sIFtjb25maWdMaXN0XSk7XG5cbiAgLy8gQ2xlYW4gdXAgY29udGFpbmVyIGlmIGFsbCBub3RpY2VzIGZhZGUgb3V0XG4gIHZhciBvbkFsbE5vdGljZVJlbW92ZWQgPSBmdW5jdGlvbiBvbkFsbE5vdGljZVJlbW92ZWQocGxhY2VtZW50KSB7XG4gICAgc2V0UGxhY2VtZW50cyhmdW5jdGlvbiAob3JpZ2luUGxhY2VtZW50cykge1xuICAgICAgdmFyIGNsb25lID0gX29iamVjdFNwcmVhZCh7fSwgb3JpZ2luUGxhY2VtZW50cyk7XG4gICAgICB2YXIgbGlzdCA9IGNsb25lW3BsYWNlbWVudF0gfHwgW107XG4gICAgICBpZiAoIWxpc3QubGVuZ3RoKSB7XG4gICAgICAgIGRlbGV0ZSBjbG9uZVtwbGFjZW1lbnRdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH0pO1xuICB9O1xuXG4gIC8vIEVmZmVjdCB0ZWxsIHRoYXQgcGxhY2VtZW50cyBpcyBlbXB0eSBub3dcbiAgdmFyIGVtcHR5UmVmID0gUmVhY3QudXNlUmVmKGZhbHNlKTtcbiAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoT2JqZWN0LmtleXMocGxhY2VtZW50cykubGVuZ3RoID4gMCkge1xuICAgICAgZW1wdHlSZWYuY3VycmVudCA9IHRydWU7XG4gICAgfSBlbHNlIGlmIChlbXB0eVJlZi5jdXJyZW50KSB7XG4gICAgICAvLyBUcmlnZ2VyIG9ubHkgd2hlbiBmcm9tIGV4aXN0IHRvIGVtcHR5XG4gICAgICBvbkFsbFJlbW92ZWQgPT09IG51bGwgfHwgb25BbGxSZW1vdmVkID09PSB2b2lkIDAgfHwgb25BbGxSZW1vdmVkKCk7XG4gICAgICBlbXB0eVJlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgfVxuICB9LCBbcGxhY2VtZW50c10pO1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT0gUmVuZGVyID09PT09PT09PT09PT09PT09PT09PT09PVxuICBpZiAoIWNvbnRhaW5lcikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHZhciBwbGFjZW1lbnRMaXN0ID0gT2JqZWN0LmtleXMocGxhY2VtZW50cyk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovY3JlYXRlUG9ydGFsKCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCwgcGxhY2VtZW50TGlzdC5tYXAoZnVuY3Rpb24gKHBsYWNlbWVudCkge1xuICAgIHZhciBwbGFjZW1lbnRDb25maWdMaXN0ID0gcGxhY2VtZW50c1twbGFjZW1lbnRdO1xuICAgIHZhciBsaXN0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTm90aWNlTGlzdCwge1xuICAgICAga2V5OiBwbGFjZW1lbnQsXG4gICAgICBjb25maWdMaXN0OiBwbGFjZW1lbnRDb25maWdMaXN0LFxuICAgICAgcGxhY2VtZW50OiBwbGFjZW1lbnQsXG4gICAgICBwcmVmaXhDbHM6IHByZWZpeENscyxcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lID09PSBudWxsIHx8IGNsYXNzTmFtZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogY2xhc3NOYW1lKHBsYWNlbWVudCksXG4gICAgICBzdHlsZTogc3R5bGUgPT09IG51bGwgfHwgc3R5bGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHN0eWxlKHBsYWNlbWVudCksXG4gICAgICBtb3Rpb246IG1vdGlvbixcbiAgICAgIG9uTm90aWNlQ2xvc2U6IG9uTm90aWNlQ2xvc2UsXG4gICAgICBvbkFsbE5vdGljZVJlbW92ZWQ6IG9uQWxsTm90aWNlUmVtb3ZlZCxcbiAgICAgIHN0YWNrOiBzdGFja1xuICAgIH0pO1xuICAgIHJldHVybiByZW5kZXJOb3RpZmljYXRpb25zID8gcmVuZGVyTm90aWZpY2F0aW9ucyhsaXN0LCB7XG4gICAgICBwcmVmaXhDbHM6IHByZWZpeENscyxcbiAgICAgIGtleTogcGxhY2VtZW50XG4gICAgfSkgOiBsaXN0O1xuICB9KSksIGNvbnRhaW5lcik7XG59KTtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIE5vdGlmaWNhdGlvbnMuZGlzcGxheU5hbWUgPSAnTm90aWZpY2F0aW9ucyc7XG59XG5leHBvcnQgZGVmYXVsdCBOb3RpZmljYXRpb25zOyIsImltcG9ydCBfdG9Db25zdW1hYmxlQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvQ29uc3VtYWJsZUFycmF5XCI7XG5pbXBvcnQgX3NsaWNlZFRvQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXlcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzXCI7XG52YXIgX2V4Y2x1ZGVkID0gW1wiZ2V0Q29udGFpbmVyXCIsIFwibW90aW9uXCIsIFwicHJlZml4Q2xzXCIsIFwibWF4Q291bnRcIiwgXCJjbGFzc05hbWVcIiwgXCJzdHlsZVwiLCBcIm9uQWxsUmVtb3ZlZFwiLCBcInN0YWNrXCIsIFwicmVuZGVyTm90aWZpY2F0aW9uc1wiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBOb3RpZmljYXRpb25zIGZyb20gXCIuLi9Ob3RpZmljYXRpb25zXCI7XG52YXIgZGVmYXVsdEdldENvbnRhaW5lciA9IGZ1bmN0aW9uIGRlZmF1bHRHZXRDb250YWluZXIoKSB7XG4gIHJldHVybiBkb2N1bWVudC5ib2R5O1xufTtcbnZhciB1bmlxdWVLZXkgPSAwO1xuZnVuY3Rpb24gbWVyZ2VDb25maWcoKSB7XG4gIHZhciBjbG9uZSA9IHt9O1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgb2JqTGlzdCA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICBvYmpMaXN0W19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG4gIG9iakxpc3QuZm9yRWFjaChmdW5jdGlvbiAob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgT2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgdmFyIHZhbCA9IG9ialtrZXldO1xuICAgICAgICBpZiAodmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjbG9uZVtrZXldID0gdmFsO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gY2xvbmU7XG59XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VOb3RpZmljYXRpb24oKSB7XG4gIHZhciByb290Q29uZmlnID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgdmFyIF9yb290Q29uZmlnJGdldENvbnRhaSA9IHJvb3RDb25maWcuZ2V0Q29udGFpbmVyLFxuICAgIGdldENvbnRhaW5lciA9IF9yb290Q29uZmlnJGdldENvbnRhaSA9PT0gdm9pZCAwID8gZGVmYXVsdEdldENvbnRhaW5lciA6IF9yb290Q29uZmlnJGdldENvbnRhaSxcbiAgICBtb3Rpb24gPSByb290Q29uZmlnLm1vdGlvbixcbiAgICBwcmVmaXhDbHMgPSByb290Q29uZmlnLnByZWZpeENscyxcbiAgICBtYXhDb3VudCA9IHJvb3RDb25maWcubWF4Q291bnQsXG4gICAgY2xhc3NOYW1lID0gcm9vdENvbmZpZy5jbGFzc05hbWUsXG4gICAgc3R5bGUgPSByb290Q29uZmlnLnN0eWxlLFxuICAgIG9uQWxsUmVtb3ZlZCA9IHJvb3RDb25maWcub25BbGxSZW1vdmVkLFxuICAgIHN0YWNrID0gcm9vdENvbmZpZy5zdGFjayxcbiAgICByZW5kZXJOb3RpZmljYXRpb25zID0gcm9vdENvbmZpZy5yZW5kZXJOb3RpZmljYXRpb25zLFxuICAgIHNoYXJlQ29uZmlnID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHJvb3RDb25maWcsIF9leGNsdWRlZCk7XG4gIHZhciBfUmVhY3QkdXNlU3RhdGUgPSBSZWFjdC51c2VTdGF0ZSgpLFxuICAgIF9SZWFjdCR1c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfUmVhY3QkdXNlU3RhdGUsIDIpLFxuICAgIGNvbnRhaW5lciA9IF9SZWFjdCR1c2VTdGF0ZTJbMF0sXG4gICAgc2V0Q29udGFpbmVyID0gX1JlYWN0JHVzZVN0YXRlMlsxXTtcbiAgdmFyIG5vdGlmaWNhdGlvbnNSZWYgPSBSZWFjdC51c2VSZWYoKTtcbiAgdmFyIGNvbnRleHRIb2xkZXIgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChOb3RpZmljYXRpb25zLCB7XG4gICAgY29udGFpbmVyOiBjb250YWluZXIsXG4gICAgcmVmOiBub3RpZmljYXRpb25zUmVmLFxuICAgIHByZWZpeENsczogcHJlZml4Q2xzLFxuICAgIG1vdGlvbjogbW90aW9uLFxuICAgIG1heENvdW50OiBtYXhDb3VudCxcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZSxcbiAgICBzdHlsZTogc3R5bGUsXG4gICAgb25BbGxSZW1vdmVkOiBvbkFsbFJlbW92ZWQsXG4gICAgc3RhY2s6IHN0YWNrLFxuICAgIHJlbmRlck5vdGlmaWNhdGlvbnM6IHJlbmRlck5vdGlmaWNhdGlvbnNcbiAgfSk7XG4gIHZhciBfUmVhY3QkdXNlU3RhdGUzID0gUmVhY3QudXNlU3RhdGUoW10pLFxuICAgIF9SZWFjdCR1c2VTdGF0ZTQgPSBfc2xpY2VkVG9BcnJheShfUmVhY3QkdXNlU3RhdGUzLCAyKSxcbiAgICB0YXNrUXVldWUgPSBfUmVhY3QkdXNlU3RhdGU0WzBdLFxuICAgIHNldFRhc2tRdWV1ZSA9IF9SZWFjdCR1c2VTdGF0ZTRbMV07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PSBSZWZzID09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIGFwaSA9IFJlYWN0LnVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBvcGVuOiBmdW5jdGlvbiBvcGVuKGNvbmZpZykge1xuICAgICAgICB2YXIgbWVyZ2VkQ29uZmlnID0gbWVyZ2VDb25maWcoc2hhcmVDb25maWcsIGNvbmZpZyk7XG4gICAgICAgIGlmIChtZXJnZWRDb25maWcua2V5ID09PSBudWxsIHx8IG1lcmdlZENvbmZpZy5rZXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIG1lcmdlZENvbmZpZy5rZXkgPSBcInJjLW5vdGlmaWNhdGlvbi1cIi5jb25jYXQodW5pcXVlS2V5KTtcbiAgICAgICAgICB1bmlxdWVLZXkgKz0gMTtcbiAgICAgICAgfVxuICAgICAgICBzZXRUYXNrUXVldWUoZnVuY3Rpb24gKHF1ZXVlKSB7XG4gICAgICAgICAgcmV0dXJuIFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkocXVldWUpLCBbe1xuICAgICAgICAgICAgdHlwZTogJ29wZW4nLFxuICAgICAgICAgICAgY29uZmlnOiBtZXJnZWRDb25maWdcbiAgICAgICAgICB9XSk7XG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIGNsb3NlOiBmdW5jdGlvbiBjbG9zZShrZXkpIHtcbiAgICAgICAgc2V0VGFza1F1ZXVlKGZ1bmN0aW9uIChxdWV1ZSkge1xuICAgICAgICAgIHJldHVybiBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KHF1ZXVlKSwgW3tcbiAgICAgICAgICAgIHR5cGU6ICdjbG9zZScsXG4gICAgICAgICAgICBrZXk6IGtleVxuICAgICAgICAgIH1dKTtcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgICAgc2V0VGFza1F1ZXVlKGZ1bmN0aW9uIChxdWV1ZSkge1xuICAgICAgICAgIHJldHVybiBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KHF1ZXVlKSwgW3tcbiAgICAgICAgICAgIHR5cGU6ICdkZXN0cm95J1xuICAgICAgICAgIH1dKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgfSwgW10pO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09IENvbnRhaW5lciA9PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFJlYWN0IDE4IHNob3VsZCBhbGwgaW4gZWZmZWN0IHRoYXQgd2Ugd2lsbCBjaGVjayBjb250YWluZXIgaW4gZWFjaCByZW5kZXJcbiAgLy8gV2hpY2ggbWVhbnMgZ2V0Q29udGFpbmVyIHNob3VsZCBiZSBzdGFibGUuXG4gIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgc2V0Q29udGFpbmVyKGdldENvbnRhaW5lcigpKTtcbiAgfSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09IEVmZmVjdCA9PT09PT09PT09PT09PT09PT09PT09PT1cbiAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAvLyBGbHVzaCB0YXNrIHdoZW4gbm9kZSByZWFkeVxuICAgIGlmIChub3RpZmljYXRpb25zUmVmLmN1cnJlbnQgJiYgdGFza1F1ZXVlLmxlbmd0aCkge1xuICAgICAgdGFza1F1ZXVlLmZvckVhY2goZnVuY3Rpb24gKHRhc2spIHtcbiAgICAgICAgc3dpdGNoICh0YXNrLnR5cGUpIHtcbiAgICAgICAgICBjYXNlICdvcGVuJzpcbiAgICAgICAgICAgIG5vdGlmaWNhdGlvbnNSZWYuY3VycmVudC5vcGVuKHRhc2suY29uZmlnKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2Nsb3NlJzpcbiAgICAgICAgICAgIG5vdGlmaWNhdGlvbnNSZWYuY3VycmVudC5jbG9zZSh0YXNrLmtleSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdkZXN0cm95JzpcbiAgICAgICAgICAgIG5vdGlmaWNhdGlvbnNSZWYuY3VycmVudC5kZXN0cm95KCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hbnQtZGVzaWduL2FudC1kZXNpZ24vaXNzdWVzLzUyNTkwXG4gICAgICAvLyBSZWFjdCBgc3RhcnRUcmFuc2l0aW9uYCB3aWxsIHJ1biBvbmNlIGB1c2VFZmZlY3RgIGJ1dCBtYW55IHRpbWVzIGBzZXRTdGF0ZWAsXG4gICAgICAvLyBTbyBgc2V0VGFza1F1ZXVlYCB3aXRoIGZpbHRlcmVkIGFycmF5IHdpbGwgY2F1c2UgaW5maW5pdGUgbG9vcC5cbiAgICAgIC8vIFdlIGNhY2hlIHRoZSBmaXJzdCBtYXRjaCBxdWV1ZSBpbnN0ZWFkLlxuICAgICAgdmFyIG9yaVRhc2tRdWV1ZTtcbiAgICAgIHZhciB0Z3RUYXNrUXVldWU7XG5cbiAgICAgIC8vIFJlYWN0IDE3IHdpbGwgbWl4IG9yZGVyIG9mIGVmZmVjdCAmIHNldFN0YXRlIGluIGFzeW5jXG4gICAgICAvLyAtIG9wZW46IHNldFN0YXRlWzBdXG4gICAgICAvLyAtIGVmZmVjdFswXVxuICAgICAgLy8gLSBvcGVuOiBzZXRTdGF0ZVsxXVxuICAgICAgLy8gLSBlZmZlY3Qgc2V0U3RhdGUoW10pICogaGVyZSB3aWxsIGNsZWFuIHVwIFswLCAxXSBpbiBSZWFjdCAxN1xuICAgICAgc2V0VGFza1F1ZXVlKGZ1bmN0aW9uIChvcmlRdWV1ZSkge1xuICAgICAgICBpZiAob3JpVGFza1F1ZXVlICE9PSBvcmlRdWV1ZSB8fCAhdGd0VGFza1F1ZXVlKSB7XG4gICAgICAgICAgb3JpVGFza1F1ZXVlID0gb3JpUXVldWU7XG4gICAgICAgICAgdGd0VGFza1F1ZXVlID0gb3JpUXVldWUuZmlsdGVyKGZ1bmN0aW9uICh0YXNrKSB7XG4gICAgICAgICAgICByZXR1cm4gIXRhc2tRdWV1ZS5pbmNsdWRlcyh0YXNrKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGd0VGFza1F1ZXVlO1xuICAgICAgfSk7XG4gICAgfVxuICB9LCBbdGFza1F1ZXVlXSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09IFJldHVybiA9PT09PT09PT09PT09PT09PT09PT09PT1cbiAgcmV0dXJuIFthcGksIGNvbnRleHRIb2xkZXJdO1xufSIsImltcG9ydCBfdHlwZW9mIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2ZcIjtcbnZhciBERUZBVUxUX09GRlNFVCA9IDg7XG52YXIgREVGQVVMVF9USFJFU0hPTEQgPSAzO1xudmFyIERFRkFVTFRfR0FQID0gMTY7XG52YXIgdXNlU3RhY2sgPSBmdW5jdGlvbiB1c2VTdGFjayhjb25maWcpIHtcbiAgdmFyIHJlc3VsdCA9IHtcbiAgICBvZmZzZXQ6IERFRkFVTFRfT0ZGU0VULFxuICAgIHRocmVzaG9sZDogREVGQVVMVF9USFJFU0hPTEQsXG4gICAgZ2FwOiBERUZBVUxUX0dBUFxuICB9O1xuICBpZiAoY29uZmlnICYmIF90eXBlb2YoY29uZmlnKSA9PT0gJ29iamVjdCcpIHtcbiAgICB2YXIgX2NvbmZpZyRvZmZzZXQsIF9jb25maWckdGhyZXNob2xkLCBfY29uZmlnJGdhcDtcbiAgICByZXN1bHQub2Zmc2V0ID0gKF9jb25maWckb2Zmc2V0ID0gY29uZmlnLm9mZnNldCkgIT09IG51bGwgJiYgX2NvbmZpZyRvZmZzZXQgIT09IHZvaWQgMCA/IF9jb25maWckb2Zmc2V0IDogREVGQVVMVF9PRkZTRVQ7XG4gICAgcmVzdWx0LnRocmVzaG9sZCA9IChfY29uZmlnJHRocmVzaG9sZCA9IGNvbmZpZy50aHJlc2hvbGQpICE9PSBudWxsICYmIF9jb25maWckdGhyZXNob2xkICE9PSB2b2lkIDAgPyBfY29uZmlnJHRocmVzaG9sZCA6IERFRkFVTFRfVEhSRVNIT0xEO1xuICAgIHJlc3VsdC5nYXAgPSAoX2NvbmZpZyRnYXAgPSBjb25maWcuZ2FwKSAhPT0gbnVsbCAmJiBfY29uZmlnJGdhcCAhPT0gdm9pZCAwID8gX2NvbmZpZyRnYXAgOiBERUZBVUxUX0dBUDtcbiAgfVxuICByZXR1cm4gWyEhY29uZmlnLCByZXN1bHRdO1xufTtcbmV4cG9ydCBkZWZhdWx0IHVzZVN0YWNrOyIsImltcG9ydCB1c2VOb3RpZmljYXRpb24gZnJvbSBcIi4vaG9va3MvdXNlTm90aWZpY2F0aW9uXCI7XG5pbXBvcnQgTm90aWNlIGZyb20gXCIuL05vdGljZVwiO1xuaW1wb3J0IE5vdGlmaWNhdGlvblByb3ZpZGVyIGZyb20gXCIuL05vdGlmaWNhdGlvblByb3ZpZGVyXCI7XG5leHBvcnQgeyB1c2VOb3RpZmljYXRpb24sIE5vdGljZSwgTm90aWZpY2F0aW9uUHJvdmlkZXIgfTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=