payload
Version:
Node, React and MongoDB Headless CMS and Application Framework
220 lines (219 loc) • 22.1 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "default", {
enumerable: true,
get: function() {
return _default;
}
});
const _modal = require("@faceless-ui/modal");
const _react = /*#__PURE__*/ _interop_require_wildcard(require("react"));
const _reacti18next = require("react-i18next");
const _reactrouterdom = require("react-router-dom");
const _reacttoastify = require("react-toastify");
const _getTranslation = require("../../../../utilities/getTranslation");
const _api = require("../../../api");
const _context = require("../../forms/Form/context");
const _Minimal = /*#__PURE__*/ _interop_require_default(require("../../templates/Minimal"));
const _Config = require("../../utilities/Config");
const _Button = /*#__PURE__*/ _interop_require_default(require("../Button"));
const _PopupButtonList = /*#__PURE__*/ _interop_require_wildcard(require("../Popup/PopupButtonList"));
require("./index.scss");
function _interop_require_default(obj) {
return obj && obj.__esModule ? obj : {
default: obj
};
}
function _getRequireWildcardCache(nodeInterop) {
if (typeof WeakMap !== "function") return null;
var cacheBabelInterop = new WeakMap();
var cacheNodeInterop = new WeakMap();
return (_getRequireWildcardCache = function(nodeInterop) {
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
})(nodeInterop);
}
function _interop_require_wildcard(obj, nodeInterop) {
if (!nodeInterop && obj && obj.__esModule) {
return obj;
}
if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
return {
default: obj
};
}
var cache = _getRequireWildcardCache(nodeInterop);
if (cache && cache.has(obj)) {
return cache.get(obj);
}
var newObj = {
__proto__: null
};
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
for(var key in obj){
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
if (desc && (desc.get || desc.set)) {
Object.defineProperty(newObj, key, desc);
} else {
newObj[key] = obj[key];
}
}
}
newObj.default = obj;
if (cache) {
cache.set(obj, newObj);
}
return newObj;
}
const baseClass = 'duplicate';
const Duplicate = ({ id, collection, slug })=>{
const { push } = (0, _reactrouterdom.useHistory)();
const modified = (0, _context.useFormModified)();
const { toggleModal } = (0, _modal.useModal)();
const { setModified } = (0, _context.useForm)();
const { localization, routes: { api }, serverURL } = (0, _Config.useConfig)();
const { routes: { admin } } = (0, _Config.useConfig)();
const [hasClicked, setHasClicked] = (0, _react.useState)(false);
const { i18n, t } = (0, _reacti18next.useTranslation)('general');
const modalSlug = `duplicate-${id}`;
const handleClick = (0, _react.useCallback)(async (override = false)=>{
setHasClicked(true);
if (modified && !override) {
toggleModal(modalSlug);
return;
}
const saveDocument = async ({ id, duplicateID = '', locale = '' })=>{
const response = await _api.requests.get(`${serverURL}${api}/${slug}/${id}`, {
headers: {
'Accept-Language': i18n.language
},
params: {
depth: 0,
draft: true,
'fallback-locale': 'none',
locale
}
});
let data = await response.json();
if (typeof collection.admin.hooks?.beforeDuplicate === 'function') {
data = await collection.admin.hooks.beforeDuplicate({
collection,
data,
locale
});
}
if (!duplicateID) {
if ('createdAt' in data) delete data.createdAt;
if ('updatedAt' in data) delete data.updatedAt;
}
const result = await _api.requests[duplicateID ? 'patch' : 'post'](`${serverURL}${api}/${slug}/${duplicateID}?locale=${locale}&fallback-locale=none`, {
body: JSON.stringify(data),
headers: {
'Accept-Language': i18n.language,
'Content-Type': 'application/json'
}
});
const json = await result.json();
if (result.status === 201 || result.status === 200) {
return json.doc.id;
}
// only show the error if this is the initial request failing
if (!duplicateID) {
json.errors.forEach((error)=>_reacttoastify.toast.error(error.message));
}
return null;
};
let duplicateID;
let abort = false;
const localeErrors = [];
if (localization) {
await localization.localeCodes.reduce(async (priorLocalePatch, locale)=>{
await priorLocalePatch;
if (abort) return;
const localeResult = await saveDocument({
id,
duplicateID,
locale
});
duplicateID = localeResult || duplicateID;
if (duplicateID && !localeResult) {
localeErrors.push(locale);
}
if (!duplicateID) {
abort = true;
}
}, Promise.resolve());
} else {
duplicateID = await saveDocument({
id
});
}
if (!duplicateID) {
// document was not saved, error toast was displayed
return;
}
_reacttoastify.toast.success(t('successfullyDuplicated', {
label: (0, _getTranslation.getTranslation)(collection.labels.singular, i18n)
}), {
autoClose: 3000
});
if (localeErrors.length > 0) {
_reacttoastify.toast.error(`
${t('error:localesNotSaved', {
count: localeErrors.length
})}
${localeErrors.join(', ')}
`, {
autoClose: 5000
});
}
setModified(false);
setTimeout(()=>{
push({
pathname: `${admin}/collections/${slug}/${duplicateID}`
});
}, 10);
}, [
modified,
localization,
t,
i18n,
collection,
setModified,
toggleModal,
modalSlug,
serverURL,
api,
slug,
id,
push,
admin
]);
const confirm = (0, _react.useCallback)(async ()=>{
setHasClicked(false);
await handleClick(true);
}, [
handleClick
]);
return /*#__PURE__*/ _react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/ _react.default.createElement(_PopupButtonList.Button, {
id: "action-duplicate",
onClick: ()=>handleClick(false)
}, t('duplicate')), modified && hasClicked && /*#__PURE__*/ _react.default.createElement(_modal.Modal, {
className: `${baseClass}__modal`,
slug: modalSlug
}, /*#__PURE__*/ _react.default.createElement(_Minimal.default, {
className: `${baseClass}__modal-template`
}, /*#__PURE__*/ _react.default.createElement("h1", null, t('confirmDuplication')), /*#__PURE__*/ _react.default.createElement("p", null, t('unsavedChangesDuplicate')), /*#__PURE__*/ _react.default.createElement(_Button.default, {
buttonStyle: "secondary",
id: "confirm-cancel",
onClick: ()=>toggleModal(modalSlug),
type: "button"
}, t('cancel')), /*#__PURE__*/ _react.default.createElement(_Button.default, {
id: "confirm-duplicate",
onClick: confirm
}, t('duplicateWithoutSaving')))));
};
const _default = Duplicate;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hZG1pbi9jb21wb25lbnRzL2VsZW1lbnRzL0R1cGxpY2F0ZURvY3VtZW50L2luZGV4LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNb2RhbCwgdXNlTW9kYWwgfSBmcm9tICdAZmFjZWxlc3MtdWkvbW9kYWwnXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnXG5pbXBvcnQgeyB1c2VIaXN0b3J5IH0gZnJvbSAncmVhY3Qtcm91dGVyLWRvbSdcbmltcG9ydCB7IHRvYXN0IH0gZnJvbSAncmVhY3QtdG9hc3RpZnknXG5cbmltcG9ydCB0eXBlIHsgUHJvcHMgfSBmcm9tICcuL3R5cGVzJ1xuXG5pbXBvcnQgeyBnZXRUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uLy4uLy4uL3V0aWxpdGllcy9nZXRUcmFuc2xhdGlvbidcbmltcG9ydCB7IHJlcXVlc3RzIH0gZnJvbSAnLi4vLi4vLi4vYXBpJ1xuaW1wb3J0IHsgdXNlRm9ybSwgdXNlRm9ybU1vZGlmaWVkIH0gZnJvbSAnLi4vLi4vZm9ybXMvRm9ybS9jb250ZXh0J1xuaW1wb3J0IE1pbmltYWxUZW1wbGF0ZSBmcm9tICcuLi8uLi90ZW1wbGF0ZXMvTWluaW1hbCdcbmltcG9ydCB7IHVzZUNvbmZpZyB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9Db25maWcnXG5pbXBvcnQgQnV0dG9uIGZyb20gJy4uL0J1dHRvbidcbmltcG9ydCAqIGFzIFBvcHVwTGlzdCBmcm9tICcuLi9Qb3B1cC9Qb3B1cEJ1dHRvbkxpc3QnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuY29uc3QgYmFzZUNsYXNzID0gJ2R1cGxpY2F0ZSdcblxuY29uc3QgRHVwbGljYXRlOiBSZWFjdC5GQzxQcm9wcz4gPSAoeyBpZCwgY29sbGVjdGlvbiwgc2x1ZyB9KSA9PiB7XG4gIGNvbnN0IHsgcHVzaCB9ID0gdXNlSGlzdG9yeSgpXG4gIGNvbnN0IG1vZGlmaWVkID0gdXNlRm9ybU1vZGlmaWVkKClcbiAgY29uc3QgeyB0b2dnbGVNb2RhbCB9ID0gdXNlTW9kYWwoKVxuICBjb25zdCB7IHNldE1vZGlmaWVkIH0gPSB1c2VGb3JtKClcbiAgY29uc3Qge1xuICAgIGxvY2FsaXphdGlvbixcbiAgICByb3V0ZXM6IHsgYXBpIH0sXG4gICAgc2VydmVyVVJMLFxuICB9ID0gdXNlQ29uZmlnKClcbiAgY29uc3Qge1xuICAgIHJvdXRlczogeyBhZG1pbiB9LFxuICB9ID0gdXNlQ29uZmlnKClcbiAgY29uc3QgW2hhc0NsaWNrZWQsIHNldEhhc0NsaWNrZWRdID0gdXNlU3RhdGU8Ym9vbGVhbj4oZmFsc2UpXG4gIGNvbnN0IHsgaTE4biwgdCB9ID0gdXNlVHJhbnNsYXRpb24oJ2dlbmVyYWwnKVxuXG4gIGNvbnN0IG1vZGFsU2x1ZyA9IGBkdXBsaWNhdGUtJHtpZH1gXG5cbiAgY29uc3QgaGFuZGxlQ2xpY2sgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAob3ZlcnJpZGUgPSBmYWxzZSkgPT4ge1xuICAgICAgc2V0SGFzQ2xpY2tlZCh0cnVlKVxuXG4gICAgICBpZiAobW9kaWZpZWQgJiYgIW92ZXJyaWRlKSB7XG4gICAgICAgIHRvZ2dsZU1vZGFsKG1vZGFsU2x1ZylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNhdmVEb2N1bWVudCA9IGFzeW5jICh7XG4gICAgICAgIGlkLFxuICAgICAgICBkdXBsaWNhdGVJRCA9ICcnLFxuICAgICAgICBsb2NhbGUgPSAnJyxcbiAgICAgIH0pOiBQcm9taXNlPG51bGwgfCBzdHJpbmc+ID0+IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0cy5nZXQoYCR7c2VydmVyVVJMfSR7YXBpfS8ke3NsdWd9LyR7aWR9YCwge1xuICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICdBY2NlcHQtTGFuZ3VhZ2UnOiBpMThuLmxhbmd1YWdlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICBkZXB0aDogMCxcbiAgICAgICAgICAgIGRyYWZ0OiB0cnVlLFxuICAgICAgICAgICAgJ2ZhbGxiYWNrLWxvY2FsZSc6ICdub25lJyxcbiAgICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgICBsZXQgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKVxuXG4gICAgICAgIGlmICh0eXBlb2YgY29sbGVjdGlvbi5hZG1pbi5ob29rcz8uYmVmb3JlRHVwbGljYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgZGF0YSA9IGF3YWl0IGNvbGxlY3Rpb24uYWRtaW4uaG9va3MuYmVmb3JlRHVwbGljYXRlKHtcbiAgICAgICAgICAgIGNvbGxlY3Rpb24sXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWR1cGxpY2F0ZUlEKSB7XG4gICAgICAgICAgaWYgKCdjcmVhdGVkQXQnIGluIGRhdGEpIGRlbGV0ZSBkYXRhLmNyZWF0ZWRBdFxuICAgICAgICAgIGlmICgndXBkYXRlZEF0JyBpbiBkYXRhKSBkZWxldGUgZGF0YS51cGRhdGVkQXRcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlcXVlc3RzW2R1cGxpY2F0ZUlEID8gJ3BhdGNoJyA6ICdwb3N0J10oXG4gICAgICAgICAgYCR7c2VydmVyVVJMfSR7YXBpfS8ke3NsdWd9LyR7ZHVwbGljYXRlSUR9P2xvY2FsZT0ke2xvY2FsZX0mZmFsbGJhY2stbG9jYWxlPW5vbmVgLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KGRhdGEpLFxuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAnQWNjZXB0LUxhbmd1YWdlJzogaTE4bi5sYW5ndWFnZSxcbiAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgKVxuICAgICAgICBjb25zdCBqc29uID0gYXdhaXQgcmVzdWx0Lmpzb24oKVxuXG4gICAgICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSAyMDEgfHwgcmVzdWx0LnN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgcmV0dXJuIGpzb24uZG9jLmlkXG4gICAgICAgIH1cblxuICAgICAgICAvLyBvbmx5IHNob3cgdGhlIGVycm9yIGlmIHRoaXMgaXMgdGhlIGluaXRpYWwgcmVxdWVzdCBmYWlsaW5nXG4gICAgICAgIGlmICghZHVwbGljYXRlSUQpIHtcbiAgICAgICAgICBqc29uLmVycm9ycy5mb3JFYWNoKChlcnJvcikgPT4gdG9hc3QuZXJyb3IoZXJyb3IubWVzc2FnZSkpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH1cblxuICAgICAgbGV0IGR1cGxpY2F0ZUlEOiBzdHJpbmdcbiAgICAgIGxldCBhYm9ydCA9IGZhbHNlXG4gICAgICBjb25zdCBsb2NhbGVFcnJvcnMgPSBbXVxuXG4gICAgICBpZiAobG9jYWxpemF0aW9uKSB7XG4gICAgICAgIGF3YWl0IGxvY2FsaXphdGlvbi5sb2NhbGVDb2Rlcy5yZWR1Y2UoYXN5bmMgKHByaW9yTG9jYWxlUGF0Y2gsIGxvY2FsZSkgPT4ge1xuICAgICAgICAgIGF3YWl0IHByaW9yTG9jYWxlUGF0Y2hcbiAgICAgICAgICBpZiAoYWJvcnQpIHJldHVyblxuICAgICAgICAgIGNvbnN0IGxvY2FsZVJlc3VsdCA9IGF3YWl0IHNhdmVEb2N1bWVudCh7XG4gICAgICAgICAgICBpZCxcbiAgICAgICAgICAgIGR1cGxpY2F0ZUlELFxuICAgICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgZHVwbGljYXRlSUQgPSBsb2NhbGVSZXN1bHQgfHwgZHVwbGljYXRlSURcbiAgICAgICAgICBpZiAoZHVwbGljYXRlSUQgJiYgIWxvY2FsZVJlc3VsdCkge1xuICAgICAgICAgICAgbG9jYWxlRXJyb3JzLnB1c2gobG9jYWxlKVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIWR1cGxpY2F0ZUlEKSB7XG4gICAgICAgICAgICBhYm9ydCA9IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH0sIFByb21pc2UucmVzb2x2ZSgpKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZHVwbGljYXRlSUQgPSBhd2FpdCBzYXZlRG9jdW1lbnQoeyBpZCB9KVxuICAgICAgfVxuXG4gICAgICBpZiAoIWR1cGxpY2F0ZUlEKSB7XG4gICAgICAgIC8vIGRvY3VtZW50IHdhcyBub3Qgc2F2ZWQsIGVycm9yIHRvYXN0IHdhcyBkaXNwbGF5ZWRcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHRvYXN0LnN1Y2Nlc3MoXG4gICAgICAgIHQoJ3N1Y2Nlc3NmdWxseUR1cGxpY2F0ZWQnLCB7IGxhYmVsOiBnZXRUcmFuc2xhdGlvbihjb2xsZWN0aW9uLmxhYmVscy5zaW5ndWxhciwgaTE4bikgfSksXG4gICAgICAgIHsgYXV0b0Nsb3NlOiAzMDAwIH0sXG4gICAgICApXG5cbiAgICAgIGlmIChsb2NhbGVFcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICB0b2FzdC5lcnJvcihcbiAgICAgICAgICBgXG4gICAgICAgICAgJHt0KCdlcnJvcjpsb2NhbGVzTm90U2F2ZWQnLCB7IGNvdW50OiBsb2NhbGVFcnJvcnMubGVuZ3RoIH0pfVxuICAgICAgICAgICR7bG9jYWxlRXJyb3JzLmpvaW4oJywgJyl9XG4gICAgICAgICAgYCxcbiAgICAgICAgICB7IGF1dG9DbG9zZTogNTAwMCB9LFxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIHNldE1vZGlmaWVkKGZhbHNlKVxuXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgcHVzaCh7XG4gICAgICAgICAgcGF0aG5hbWU6IGAke2FkbWlufS9jb2xsZWN0aW9ucy8ke3NsdWd9LyR7ZHVwbGljYXRlSUR9YCxcbiAgICAgICAgfSlcbiAgICAgIH0sIDEwKVxuICAgIH0sXG4gICAgW1xuICAgICAgbW9kaWZpZWQsXG4gICAgICBsb2NhbGl6YXRpb24sXG4gICAgICB0LFxuICAgICAgaTE4bixcbiAgICAgIGNvbGxlY3Rpb24sXG4gICAgICBzZXRNb2RpZmllZCxcbiAgICAgIHRvZ2dsZU1vZGFsLFxuICAgICAgbW9kYWxTbHVnLFxuICAgICAgc2VydmVyVVJMLFxuICAgICAgYXBpLFxuICAgICAgc2x1ZyxcbiAgICAgIGlkLFxuICAgICAgcHVzaCxcbiAgICAgIGFkbWluLFxuICAgIF0sXG4gIClcblxuICBjb25zdCBjb25maXJtID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIHNldEhhc0NsaWNrZWQoZmFsc2UpXG4gICAgYXdhaXQgaGFuZGxlQ2xpY2sodHJ1ZSlcbiAgfSwgW2hhbmRsZUNsaWNrXSlcblxuICByZXR1cm4gKFxuICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgIDxQb3B1cExpc3QuQnV0dG9uIGlkPVwiYWN0aW9uLWR1cGxpY2F0ZVwiIG9uQ2xpY2s9eygpID0+IGhhbmRsZUNsaWNrKGZhbHNlKX0+XG4gICAgICAgIHt0KCdkdXBsaWNhdGUnKX1cbiAgICAgIDwvUG9wdXBMaXN0LkJ1dHRvbj5cbiAgICAgIHttb2RpZmllZCAmJiBoYXNDbGlja2VkICYmIChcbiAgICAgICAgPE1vZGFsIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fbW9kYWxgfSBzbHVnPXttb2RhbFNsdWd9PlxuICAgICAgICAgIDxNaW5pbWFsVGVtcGxhdGUgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19tb2RhbC10ZW1wbGF0ZWB9PlxuICAgICAgICAgICAgPGgxPnt0KCdjb25maXJtRHVwbGljYXRpb24nKX08L2gxPlxuICAgICAgICAgICAgPHA+e3QoJ3Vuc2F2ZWRDaGFuZ2VzRHVwbGljYXRlJyl9PC9wPlxuICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICBidXR0b25TdHlsZT1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICAgIGlkPVwiY29uZmlybS1jYW5jZWxcIlxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB0b2dnbGVNb2RhbChtb2RhbFNsdWcpfVxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3QoJ2NhbmNlbCcpfVxuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICA8QnV0dG9uIGlkPVwiY29uZmlybS1kdXBsaWNhdGVcIiBvbkNsaWNrPXtjb25maXJtfT5cbiAgICAgICAgICAgICAge3QoJ2R1cGxpY2F0ZVdpdGhvdXRTYXZpbmcnKX1cbiAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgIDwvTWluaW1hbFRlbXBsYXRlPlxuICAgICAgICA8L01vZGFsPlxuICAgICAgKX1cbiAgICA8L1JlYWN0LkZyYWdtZW50PlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IER1cGxpY2F0ZVxuIl0sIm5hbWVzIjpbImJhc2VDbGFzcyIsIkR1cGxpY2F0ZSIsImlkIiwiY29sbGVjdGlvbiIsInNsdWciLCJwdXNoIiwidXNlSGlzdG9yeSIsIm1vZGlmaWVkIiwidXNlRm9ybU1vZGlmaWVkIiwidG9nZ2xlTW9kYWwiLCJ1c2VNb2RhbCIsInNldE1vZGlmaWVkIiwidXNlRm9ybSIsImxvY2FsaXphdGlvbiIsInJvdXRlcyIsImFwaSIsInNlcnZlclVSTCIsInVzZUNvbmZpZyIsImFkbWluIiwiaGFzQ2xpY2tlZCIsInNldEhhc0NsaWNrZWQiLCJ1c2VTdGF0ZSIsImkxOG4iLCJ0IiwidXNlVHJhbnNsYXRpb24iLCJtb2RhbFNsdWciLCJoYW5kbGVDbGljayIsInVzZUNhbGxiYWNrIiwib3ZlcnJpZGUiLCJzYXZlRG9jdW1lbnQiLCJkdXBsaWNhdGVJRCIsImxvY2FsZSIsInJlc3BvbnNlIiwicmVxdWVzdHMiLCJnZXQiLCJoZWFkZXJzIiwibGFuZ3VhZ2UiLCJwYXJhbXMiLCJkZXB0aCIsImRyYWZ0IiwiZGF0YSIsImpzb24iLCJob29rcyIsImJlZm9yZUR1cGxpY2F0ZSIsImNyZWF0ZWRBdCIsInVwZGF0ZWRBdCIsInJlc3VsdCIsImJvZHkiLCJKU09OIiwic3RyaW5naWZ5Iiwic3RhdHVzIiwiZG9jIiwiZXJyb3JzIiwiZm9yRWFjaCIsImVycm9yIiwidG9hc3QiLCJtZXNzYWdlIiwiYWJvcnQiLCJsb2NhbGVFcnJvcnMiLCJsb2NhbGVDb2RlcyIsInJlZHVjZSIsInByaW9yTG9jYWxlUGF0Y2giLCJsb2NhbGVSZXN1bHQiLCJQcm9taXNlIiwicmVzb2x2ZSIsInN1Y2Nlc3MiLCJsYWJlbCIsImdldFRyYW5zbGF0aW9uIiwibGFiZWxzIiwic2luZ3VsYXIiLCJhdXRvQ2xvc2UiLCJsZW5ndGgiLCJjb3VudCIsImpvaW4iLCJzZXRUaW1lb3V0IiwicGF0aG5hbWUiLCJjb25maXJtIiwiUmVhY3QiLCJGcmFnbWVudCIsIlBvcHVwTGlzdCIsIkJ1dHRvbiIsIm9uQ2xpY2siLCJNb2RhbCIsImNsYXNzTmFtZSIsIk1pbmltYWxUZW1wbGF0ZSIsImgxIiwicCIsImJ1dHRvblN0eWxlIiwidHlwZSJdLCJtYXBwaW5ncyI6Ijs7OzsrQkE0TUE7OztlQUFBOzs7dUJBNU1nQzsrREFDYTs4QkFDZDtnQ0FDSjsrQkFDTDtnQ0FJUztxQkFDTjt5QkFDZ0I7Z0VBQ2I7d0JBQ0Y7K0RBQ1A7eUVBQ1E7UUFDcEI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRVAsTUFBTUEsWUFBWTtBQUVsQixNQUFNQyxZQUE2QixDQUFDLEVBQUVDLEVBQUUsRUFBRUMsVUFBVSxFQUFFQyxJQUFJLEVBQUU7SUFDMUQsTUFBTSxFQUFFQyxJQUFJLEVBQUUsR0FBR0MsSUFBQUEsMEJBQVU7SUFDM0IsTUFBTUMsV0FBV0MsSUFBQUEsd0JBQWU7SUFDaEMs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