UNPKG

payload

Version:

Node, React and MongoDB Headless CMS and Application Framework

228 lines (227 loc) • 23.1 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "default", { enumerable: true, get: function() { return _default; } }); const _qs = /*#__PURE__*/ _interop_require_default(require("qs")); const _react = /*#__PURE__*/ _interop_require_wildcard(require("react")); const _reacti18next = require("react-i18next"); const _reactrouterdom = require("react-router-dom"); const _usePayloadAPI = /*#__PURE__*/ _interop_require_default(require("../../../../hooks/usePayloadAPI")); const _buildStateFromSchema = /*#__PURE__*/ _interop_require_default(require("../../../forms/Form/buildStateFromSchema")); const _fieldtypes = require("../../../forms/field-types"); const _Auth = require("../../../utilities/Auth"); const _Config = require("../../../utilities/Config"); const _DocumentInfo = require("../../../utilities/DocumentInfo"); const _EditDepth = require("../../../utilities/EditDepth"); const _FormQueryParams = require("../../../utilities/FormQueryParams"); const _Locale = require("../../../utilities/Locale"); const _RenderCustomComponent = /*#__PURE__*/ _interop_require_default(require("../../../utilities/RenderCustomComponent")); const _NotFound = /*#__PURE__*/ _interop_require_default(require("../../NotFound")); const _Default = /*#__PURE__*/ _interop_require_default(require("./Default")); const _formatFields = /*#__PURE__*/ _interop_require_default(require("./formatFields")); 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 EditView = (props)=>{ const { collection: incomingCollection, isEditing } = props; const { slug: collectionSlug, admin: { components: { views: { Edit } = {} } = {} } = {} } = incomingCollection; const [fields] = (0, _react.useState)(()=>(0, _formatFields.default)(incomingCollection, isEditing)); const [collection] = (0, _react.useState)(()=>({ ...incomingCollection, fields })); const [redirect, setRedirect] = (0, _react.useState)(); const [formQueryParams, setFormQueryParams] = (0, _react.useState)({ depth: 0, 'fallback-locale': 'null', locale: '', uploadEdits: undefined }); const formattedQueryParams = _qs.default.stringify(formQueryParams); const { code: locale } = (0, _Locale.useLocale)(); const config = (0, _Config.useConfig)(); const { routes: { admin, api }, serverURL } = config; const { params: { id } = {} } = (0, _reactrouterdom.useRouteMatch)(); const history = (0, _reactrouterdom.useHistory)(); const [internalState, setInternalState] = (0, _react.useState)(); const [updatedAt, setUpdatedAt] = (0, _react.useState)(); const { permissions, user } = (0, _Auth.useAuth)(); const userRef = (0, _react.useRef)(user); const { docPermissions, getDocPermissions, getDocPreferences, getVersions } = (0, _DocumentInfo.useDocumentInfo)(); const { t } = (0, _reacti18next.useTranslation)('general'); const [{ data, isError, isLoading: isLoadingData }] = (0, _usePayloadAPI.default)(isEditing ? `${serverURL}${api}/${collectionSlug}/${id}` : '', { initialData: null, initialParams: { depth: 0, draft: 'true', 'fallback-locale': 'null' } }); const buildState = (0, _react.useCallback)(async (doc, overrides)=>{ const preferences = await getDocPreferences(); const state = await (0, _buildStateFromSchema.default)({ id, config, data: doc || {}, fieldSchema: overrides?.fieldSchema, locale, operation: 'update', preferences, t, user: userRef.current, ...overrides }); setInternalState(state); }, [ getDocPreferences, id, locale, t, config ]); const onSave = (0, _react.useCallback)(async (json)=>{ getVersions(); getDocPermissions(); setUpdatedAt(json?.doc?.updatedAt); if (!isEditing) { setRedirect(`${admin}/collections/${collection.slug}/${json?.doc?.id}`); } else { buildState(json.doc, { fieldSchema: collection.fields }); setFormQueryParams((params)=>({ ...params, uploadEdits: undefined })); } }, [ admin, getVersions, isEditing, buildState, getDocPermissions, collection ]); (0, _react.useEffect)(()=>{ if (fields && (isEditing ? data : true)) { const awaitInternalState = async ()=>{ setUpdatedAt(data?.updatedAt); buildState(data, { fieldSchema: fields, operation: isEditing ? 'update' : 'create' }); }; awaitInternalState(); } }, [ isEditing, data, buildState, fields ]); (0, _react.useEffect)(()=>{ if (redirect) { history.push(redirect); } }, [ history, redirect ]); (0, _react.useEffect)(()=>{ setFormQueryParams((params)=>({ ...params, locale: locale })); }, [ locale ]); if (isError) { return /*#__PURE__*/ _react.default.createElement(_NotFound.default, { marginTop: "large" }); } const apiURL = `${serverURL}${api}/${collectionSlug}/${id}?locale=${locale}${collection.versions.drafts ? '&draft=true' : ''}`; const action = `${serverURL}${api}/${collectionSlug}${isEditing ? `/${id}` : ''}?${formattedQueryParams}`; const hasSavePermission = isEditing && docPermissions?.update?.permission || !isEditing && docPermissions?.create?.permission; const isLoading = !internalState || !docPermissions || isLoadingData; const componentProps = { id, action, apiURL, canAccessAdmin: permissions?.canAccessAdmin, collection, data, fieldTypes: _fieldtypes.fieldTypes, hasSavePermission, internalState, isEditing, isLoading, onSave, permissions: docPermissions, updatedAt: updatedAt || data?.updatedAt, user }; return /*#__PURE__*/ _react.default.createElement(_EditDepth.EditDepthContext.Provider, { value: 1 }, /*#__PURE__*/ _react.default.createElement(_FormQueryParams.FormQueryParams.Provider, { value: { formQueryParams, setFormQueryParams } }, /*#__PURE__*/ _react.default.createElement(_RenderCustomComponent.default, { CustomComponent: typeof Edit === 'function' ? Edit : undefined, DefaultComponent: _Default.default, componentProps: componentProps }))); }; const _default = EditView; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hZG1pbi9jb21wb25lbnRzL3ZpZXdzL2NvbGxlY3Rpb25zL0VkaXQvaW5kZXgudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBxdWVyeVN0cmluZyBmcm9tICdxcydcbmltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnXG5pbXBvcnQgeyB1c2VIaXN0b3J5LCB1c2VSb3V0ZU1hdGNoIH0gZnJvbSAncmVhY3Qtcm91dGVyLWRvbSdcblxuaW1wb3J0IHR5cGUgeyBDb2xsZWN0aW9uUGVybWlzc2lvbiB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2F1dGgnXG5pbXBvcnQgdHlwZSB7IEZpZWxkcyB9IGZyb20gJy4uLy4uLy4uL2Zvcm1zL0Zvcm0vdHlwZXMnXG5pbXBvcnQgdHlwZSB7IFF1ZXJ5UGFyYW1UeXBlcyB9IGZyb20gJy4uLy4uLy4uL3V0aWxpdGllcy9Gb3JtUXVlcnlQYXJhbXMnXG5pbXBvcnQgdHlwZSB7IERlZmF1bHRFZGl0Vmlld1Byb3BzIH0gZnJvbSAnLi9EZWZhdWx0J1xuaW1wb3J0IHR5cGUgeyBJbmRleFByb3BzIH0gZnJvbSAnLi90eXBlcydcblxuaW1wb3J0IHVzZVBheWxvYWRBUEkgZnJvbSAnLi4vLi4vLi4vLi4vaG9va3MvdXNlUGF5bG9hZEFQSSdcbmltcG9ydCBidWlsZFN0YXRlRnJvbVNjaGVtYSBmcm9tICcuLi8uLi8uLi9mb3Jtcy9Gb3JtL2J1aWxkU3RhdGVGcm9tU2NoZW1hJ1xuaW1wb3J0IHsgZmllbGRUeXBlcyB9IGZyb20gJy4uLy4uLy4uL2Zvcm1zL2ZpZWxkLXR5cGVzJ1xuaW1wb3J0IHsgdXNlQXV0aCB9IGZyb20gJy4uLy4uLy4uL3V0aWxpdGllcy9BdXRoJ1xuaW1wb3J0IHsgdXNlQ29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vdXRpbGl0aWVzL0NvbmZpZydcbmltcG9ydCB7IHVzZURvY3VtZW50SW5mbyB9IGZyb20gJy4uLy4uLy4uL3V0aWxpdGllcy9Eb2N1bWVudEluZm8nXG5pbXBvcnQgeyBFZGl0RGVwdGhDb250ZXh0IH0gZnJvbSAnLi4vLi4vLi4vdXRpbGl0aWVzL0VkaXREZXB0aCdcbmltcG9ydCB7IEZvcm1RdWVyeVBhcmFtcyB9IGZyb20gJy4uLy4uLy4uL3V0aWxpdGllcy9Gb3JtUXVlcnlQYXJhbXMnXG5pbXBvcnQgeyB1c2VMb2NhbGUgfSBmcm9tICcuLi8uLi8uLi91dGlsaXRpZXMvTG9jYWxlJ1xuaW1wb3J0IFJlbmRlckN1c3RvbUNvbXBvbmVudCBmcm9tICcuLi8uLi8uLi91dGlsaXRpZXMvUmVuZGVyQ3VzdG9tQ29tcG9uZW50J1xuaW1wb3J0IE5vdEZvdW5kIGZyb20gJy4uLy4uL05vdEZvdW5kJ1xuaW1wb3J0IERlZmF1bHRFZGl0IGZyb20gJy4vRGVmYXVsdCdcbmltcG9ydCBmb3JtYXRGaWVsZHMgZnJvbSAnLi9mb3JtYXRGaWVsZHMnXG5cbmNvbnN0IEVkaXRWaWV3OiBSZWFjdC5GQzxJbmRleFByb3BzPiA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7IGNvbGxlY3Rpb246IGluY29taW5nQ29sbGVjdGlvbiwgaXNFZGl0aW5nIH0gPSBwcm9wc1xuXG4gIGNvbnN0IHsgc2x1ZzogY29sbGVjdGlvblNsdWcsIGFkbWluOiB7IGNvbXBvbmVudHM6IHsgdmlld3M6IHsgRWRpdCB9ID0ge30gfSA9IHt9IH0gPSB7fSB9ID1cbiAgICBpbmNvbWluZ0NvbGxlY3Rpb25cblxuICBjb25zdCBbZmllbGRzXSA9IHVzZVN0YXRlKCgpID0+IGZvcm1hdEZpZWxkcyhpbmNvbWluZ0NvbGxlY3Rpb24sIGlzRWRpdGluZykpXG4gIGNvbnN0IFtjb2xsZWN0aW9uXSA9IHVzZVN0YXRlKCgpID0+ICh7IC4uLmluY29taW5nQ29sbGVjdGlvbiwgZmllbGRzIH0pKVxuICBjb25zdCBbcmVkaXJlY3QsIHNldFJlZGlyZWN0XSA9IHVzZVN0YXRlPHN0cmluZz4oKVxuICBjb25zdCBbZm9ybVF1ZXJ5UGFyYW1zLCBzZXRGb3JtUXVlcnlQYXJhbXNdID0gdXNlU3RhdGU8UXVlcnlQYXJhbVR5cGVzPih7XG4gICAgZGVwdGg6IDAsXG4gICAgJ2ZhbGxiYWNrLWxvY2FsZSc6ICdudWxsJyxcbiAgICBsb2NhbGU6ICcnLFxuICAgIHVwbG9hZEVkaXRzOiB1bmRlZmluZWQsXG4gIH0pXG5cbiAgY29uc3QgZm9ybWF0dGVkUXVlcnlQYXJhbXMgPSBxdWVyeVN0cmluZy5zdHJpbmdpZnkoZm9ybVF1ZXJ5UGFyYW1zKVxuXG4gIGNvbnN0IHsgY29kZTogbG9jYWxlIH0gPSB1c2VMb2NhbGUoKVxuXG4gIGNvbnN0IGNvbmZpZyA9IHVzZUNvbmZpZygpXG4gIGNvbnN0IHtcbiAgICByb3V0ZXM6IHsgYWRtaW4sIGFwaSB9LFxuICAgIHNlcnZlclVSTCxcbiAgfSA9IGNvbmZpZ1xuXG4gIGNvbnN0IHsgcGFyYW1zOiB7IGlkIH0gPSB7fSB9ID0gdXNlUm91dGVNYXRjaDxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PigpXG4gIGNvbnN0IGhpc3RvcnkgPSB1c2VIaXN0b3J5KClcbiAgY29uc3QgW2ludGVybmFsU3RhdGUsIHNldEludGVybmFsU3RhdGVdID0gdXNlU3RhdGU8RmllbGRzPigpXG4gIGNvbnN0IFt1cGRhdGVkQXQsIHNldFVwZGF0ZWRBdF0gPSB1c2VTdGF0ZTxzdHJpbmc+KClcbiAgY29uc3QgeyBwZXJtaXNzaW9ucywgdXNlciB9ID0gdXNlQXV0aCgpXG4gIGNvbnN0IHVzZXJSZWYgPSB1c2VSZWYodXNlcilcbiAgY29uc3QgeyBkb2NQZXJtaXNzaW9ucywgZ2V0RG9jUGVybWlzc2lvbnMsIGdldERvY1ByZWZlcmVuY2VzLCBnZXRWZXJzaW9ucyB9ID0gdXNlRG9jdW1lbnRJbmZvKClcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbignZ2VuZXJhbCcpXG5cbiAgY29uc3QgW3sgZGF0YSwgaXNFcnJvciwgaXNMb2FkaW5nOiBpc0xvYWRpbmdEYXRhIH1dID0gdXNlUGF5bG9hZEFQSShcbiAgICBpc0VkaXRpbmcgPyBgJHtzZXJ2ZXJVUkx9JHthcGl9LyR7Y29sbGVjdGlvblNsdWd9LyR7aWR9YCA6ICcnLFxuICAgIHsgaW5pdGlhbERhdGE6IG51bGwsIGluaXRpYWxQYXJhbXM6IHsgZGVwdGg6IDAsIGRyYWZ0OiAndHJ1ZScsICdmYWxsYmFjay1sb2NhbGUnOiAnbnVsbCcgfSB9LFxuICApXG5cbiAgY29uc3QgYnVpbGRTdGF0ZSA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChkb2MsIG92ZXJyaWRlcz86IFBhcnRpYWw8UGFyYW1ldGVyczx0eXBlb2YgYnVpbGRTdGF0ZUZyb21TY2hlbWE+WzBdPikgPT4ge1xuICAgICAgY29uc3QgcHJlZmVyZW5jZXMgPSBhd2FpdCBnZXREb2NQcmVmZXJlbmNlcygpXG5cbiAgICAgIGNvbnN0IHN0YXRlID0gYXdhaXQgYnVpbGRTdGF0ZUZyb21TY2hlbWEoe1xuICAgICAgICBpZCxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICBkYXRhOiBkb2MgfHwge30sXG4gICAgICAgIGZpZWxkU2NoZW1hOiBvdmVycmlkZXM/LmZpZWxkU2NoZW1hLFxuICAgICAgICBsb2NhbGUsXG4gICAgICAgIG9wZXJhdGlvbjogJ3VwZGF0ZScsXG4gICAgICAgIHByZWZlcmVuY2VzLFxuICAgICAgICB0LFxuICAgICAgICB1c2VyOiB1c2VyUmVmLmN1cnJlbnQsXG4gICAgICAgIC4uLm92ZXJyaWRlcyxcbiAgICAgIH0pXG5cbiAgICAgIHNldEludGVybmFsU3RhdGUoc3RhdGUpXG4gICAgfSxcbiAgICBbZ2V0RG9jUHJlZmVyZW5jZXMsIGlkLCBsb2NhbGUsIHQsIGNvbmZpZ10sXG4gIClcblxuICBjb25zdCBvblNhdmUgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAoanNvbjogeyBkb2MgfSkgPT4ge1xuICAgICAgZ2V0VmVyc2lvbnMoKVxuICAgICAgZ2V0RG9jUGVybWlzc2lvbnMoKVxuICAgICAgc2V0VXBkYXRlZEF0KGpzb24/LmRvYz8udXBkYXRlZEF0KVxuICAgICAgaWYgKCFpc0VkaXRpbmcpIHtcbiAgICAgICAgc2V0UmVkaXJlY3QoYCR7YWRtaW59L2NvbGxlY3Rpb25zLyR7Y29sbGVjdGlvbi5zbHVnfS8ke2pzb24/LmRvYz8uaWR9YClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJ1aWxkU3RhdGUoanNvbi5kb2MsIHtcbiAgICAgICAgICBmaWVsZFNjaGVtYTogY29sbGVjdGlvbi5maWVsZHMsXG4gICAgICAgIH0pXG4gICAgICAgIHNldEZvcm1RdWVyeVBhcmFtcygocGFyYW1zKSA9PiAoe1xuICAgICAgICAgIC4uLnBhcmFtcyxcbiAgICAgICAgICB1cGxvYWRFZGl0czogdW5kZWZpbmVkLFxuICAgICAgICB9KSlcbiAgICAgIH1cbiAgICB9LFxuICAgIFthZG1pbiwgZ2V0VmVyc2lvbnMsIGlzRWRpdGluZywgYnVpbGRTdGF0ZSwgZ2V0RG9jUGVybWlzc2lvbnMsIGNvbGxlY3Rpb25dLFxuICApXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoZmllbGRzICYmIChpc0VkaXRpbmcgPyBkYXRhIDogdHJ1ZSkpIHtcbiAgICAgIGNvbnN0IGF3YWl0SW50ZXJuYWxTdGF0ZSA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgc2V0VXBkYXRlZEF0KGRhdGE/LnVwZGF0ZWRBdClcbiAgICAgICAgYnVpbGRTdGF0ZShkYXRhLCB7XG4gICAgICAgICAgZmllbGRTY2hlbWE6IGZpZWxkcyxcbiAgICAgICAgICBvcGVyYXRpb246IGlzRWRpdGluZyA/ICd1cGRhdGUnIDogJ2NyZWF0ZScsXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGF3YWl0SW50ZXJuYWxTdGF0ZSgpXG4gICAgfVxuICB9LCBbaXNFZGl0aW5nLCBkYXRhLCBidWlsZFN0YXRlLCBmaWVsZHNdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHJlZGlyZWN0KSB7XG4gICAgICBoaXN0b3J5LnB1c2gocmVkaXJlY3QpXG4gICAgfVxuICB9LCBbaGlzdG9yeSwgcmVkaXJlY3RdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0Rm9ybVF1ZXJ5UGFyYW1zKChwYXJhbXMpID0+ICh7XG4gICAgICAuLi5wYXJhbXMsXG4gICAgICBsb2NhbGU6IGxvY2FsZSxcbiAgICB9KSlcbiAgfSwgW2xvY2FsZV0pXG5cbiAgaWYgKGlzRXJyb3IpIHtcbiAgICByZXR1cm4gPE5vdEZvdW5kIG1hcmdpblRvcD1cImxhcmdlXCIgLz5cbiAgfVxuXG4gIGNvbnN0IGFwaVVSTCA9IGAke3NlcnZlclVSTH0ke2FwaX0vJHtjb2xsZWN0aW9uU2x1Z30vJHtpZH0/bG9jYWxlPSR7bG9jYWxlfSR7XG4gICAgY29sbGVjdGlvbi52ZXJzaW9ucy5kcmFmdHMgPyAnJmRyYWZ0PXRydWUnIDogJydcbiAgfWBcblxuICBjb25zdCBhY3Rpb24gPSBgJHtzZXJ2ZXJVUkx9JHthcGl9LyR7Y29sbGVjdGlvblNsdWd9JHtcbiAgICBpc0VkaXRpbmcgPyBgLyR7aWR9YCA6ICcnXG4gIH0/JHtmb3JtYXR0ZWRRdWVyeVBhcmFtc31gXG5cbiAgY29uc3QgaGFzU2F2ZVBlcm1pc3Npb24gPVxuICAgIChpc0VkaXRpbmcgJiYgZG9jUGVybWlzc2lvbnM/LnVwZGF0ZT8ucGVybWlzc2lvbikgfHxcbiAgICAoIWlzRWRpdGluZyAmJiAoZG9jUGVybWlzc2lvbnMgYXMgQ29sbGVjdGlvblBlcm1pc3Npb24pPy5jcmVhdGU/LnBlcm1pc3Npb24pXG5cbiAgY29uc3QgaXNMb2FkaW5nID0gIWludGVybmFsU3RhdGUgfHwgIWRvY1Blcm1pc3Npb25zIHx8IGlzTG9hZGluZ0RhdGFcblxuICBjb25zdCBjb21wb25lbnRQcm9wczogRGVmYXVsdEVkaXRWaWV3UHJvcHMgPSB7XG4gICAgaWQsXG4gICAgYWN0aW9uLFxuICAgIGFwaVVSTCxcbiAgICBjYW5BY2Nlc3NBZG1pbjogcGVybWlzc2lvbnM/LmNhbkFjY2Vzc0FkbWluLFxuICAgIGNvbGxlY3Rpb24sXG4gICAgZGF0YSxcbiAgICBmaWVsZFR5cGVzLFxuICAgIGhhc1NhdmVQZXJtaXNzaW9uLFxuICAgIGludGVybmFsU3RhdGUsXG4gICAgaXNFZGl0aW5nLFxuICAgIGlzTG9hZGluZyxcbiAgICBvblNhdmUsXG4gICAgcGVybWlzc2lvbnM6IGRvY1Blcm1pc3Npb25zIGFzIENvbGxlY3Rpb25QZXJtaXNzaW9uLFxuICAgIHVwZGF0ZWRBdDogdXBkYXRlZEF0IHx8IGRhdGE/LnVwZGF0ZWRBdCxcbiAgICB1c2VyLFxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8RWRpdERlcHRoQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17MX0+XG4gICAgICA8Rm9ybVF1ZXJ5UGFyYW1zLlByb3ZpZGVyIHZhbHVlPXt7IGZvcm1RdWVyeVBhcmFtcywgc2V0Rm9ybVF1ZXJ5UGFyYW1zIH19PlxuICAgICAgICA8UmVuZGVyQ3VzdG9tQ29tcG9uZW50XG4gICAgICAgICAgQ3VzdG9tQ29tcG9uZW50PXt0eXBlb2YgRWRpdCA9PT0gJ2Z1bmN0aW9uJyA/IEVkaXQgOiB1bmRlZmluZWR9XG4gICAgICAgICAgRGVmYXVsdENvbXBvbmVudD17RGVmYXVsdEVkaXR9XG4gICAgICAgICAgY29tcG9uZW50UHJvcHM9e2NvbXBvbmVudFByb3BzfVxuICAgICAgICAvPlxuICAgICAgPC9Gb3JtUXVlcnlQYXJhbXMuUHJvdmlkZXI+XG4gICAgPC9FZGl0RGVwdGhDb250ZXh0LlByb3ZpZGVyPlxuICApXG59XG5leHBvcnQgZGVmYXVsdCBFZGl0Vmlld1xuIl0sIm5hbWVzIjpbIkVkaXRWaWV3IiwicHJvcHMiLCJjb2xsZWN0aW9uIiwiaW5jb21pbmdDb2xsZWN0aW9uIiwiaXNFZGl0aW5nIiwic2x1ZyIsImNvbGxlY3Rpb25TbHVnIiwiYWRtaW4iLCJjb21wb25lbnRzIiwidmlld3MiLCJFZGl0IiwiZmllbGRzIiwidXNlU3RhdGUiLCJmb3JtYXRGaWVsZHMiLCJyZWRpcmVjdCIsInNldFJlZGlyZWN0IiwiZm9ybVF1ZXJ5UGFyYW1zIiwic2V0Rm9ybVF1ZXJ5UGFyYW1zIiwiZGVwdGgiLCJsb2NhbGUiLCJ1cGxvYWRFZGl0cyIsInVuZGVmaW5lZCIsImZvcm1hdHRlZFF1ZXJ5UGFyYW1zIiwicXVlcnlTdHJpbmciLCJzdHJpbmdpZnkiLCJjb2RlIiwidXNlTG9jYWxlIiwiY29uZmlnIiwidXNlQ29uZmlnIiwicm91dGVzIiwiYXBpIiwic2VydmVyVVJMIiwicGFyYW1zIiwiaWQiLCJ1c2VSb3V0ZU1hdGNoIiwiaGlzdG9yeSIsInVzZUhpc3RvcnkiLCJpbnRlcm5hbFN0YXRlIiwic2V0SW50ZXJuYWxTdGF0ZSIsInVwZGF0ZWRBdCIsInNldFVwZGF0ZWRBdCIsInBlcm1pc3Npb25zIiwidXNlciIsInVzZUF1dGgiLCJ1c2VyUmVmIiwidXNlUmVmIiwiZG9jUGVybWlzc2lvbnMiLCJnZXREb2NQZXJtaXNzaW9ucyIsImdldERvY1ByZWZlcmVuY2VzIiwiZ2V0VmVyc2lvbnMiLCJ1c2VEb2N1bWVudEluZm8iLCJ0IiwidXNlVHJhbnNsYXRpb24iLCJkYXRhIiwiaXNFcnJvciIsImlzTG9hZGluZyIsImlzTG9hZGluZ0RhdGEiLCJ1c2VQYXlsb2FkQVBJIiwiaW5pdGlhbERhdGEiLCJpbml0aWFsUGFyYW1zIiwiZHJhZnQiLCJidWlsZFN0YXRlIiwidXNlQ2FsbGJhY2siLCJkb2MiLCJvdmVycmlkZXMiLCJwcmVmZXJlbmNlcyIsInN0YXRlIiwiYnVpbGRTdGF0ZUZyb21TY2hlbWEiLCJmaWVsZFNjaGVtYSIsIm9wZXJhdGlvbiIsImN1cnJlbnQiLCJvblNhdmUiLCJqc29uIiwidXNlRWZmZWN0IiwiYXdhaXRJbnRlcm5hbFN0YXRlIiwicHVzaCIsIk5vdEZvdW5kIiwibWFyZ2luVG9wIiwiYXBpVVJMIiwidmVyc2lvbnMiLCJkcmFmdHMiLCJhY3Rpb24iLCJoYXNTYXZlUGVybWlzc2lvbiIsInVwZGF0ZSIsInBlcm1pc3Npb24iLCJjcmVhdGUiLCJjb21wb25lbnRQcm9wcyIsImNhbkFjY2Vzc0FkbWluIiwiZmllbGRUeXBlcyIsIkVkaXREZXB0aENvbnRleHQiLCJQcm92aWRlciIsInZhbHVlIiwiRm9ybVF1ZXJ5UGFyYW1zIiwiUmVuZGVyQ3VzdG9tQ29tcG9uZW50IiwiQ3VzdG9tQ29tcG9uZW50IiwiRGVmYXVsdENvbXBvbmVudCIsIkRlZmF1bHRFZGl0Il0sIm1hcHBpbmdzIjoiOzs7OytCQXNMQTs7O2VBQUE7OzsyREF0THdCOytEQUN3Qzs4QkFDakM7Z0NBQ1c7c0VBUWhCOzZFQUNPOzRCQUNOO3NCQUNIO3dCQUNFOzhCQUNNOzJCQUNDO2lDQUNEO3dCQUNOOzhFQUNRO2lFQUNiO2dFQUNHO3FFQUNDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUV6QixNQUFNQSxXQUFpQyxDQUFDQztJQUN0QyxNQUFNLEVBQUVDLFlBQVlDLGtCQUFrQixFQUFFQyxTQUFTLEVBQUUsR0FBR0g7SUFFdEQsTUFBTSxFQUFFSSxNQUFNQyxjQUFjLEVBQUVDLE9BQU8sRUFBRUMsWUFBWSxFQUFFQyxPQUFPLEVBQUVDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUN2RlA7SUFFRixNQUFNLENBQUNRLE9BQU8sR0FBR0MsSUFBQUEsZUFBUSxFQUFDLElBQU1DLElBQUFBLHFCQUFZLEVBQUNWLG9CQUFvQkM7SUFDakUsTUFBTSxDQUFDRixXQUFXLEdBQUdVLElBQUFBLGVBQVEsRUFBQyxJQUFPLENBQUE7WUFBRSxHQUFHVCxrQkFBa0I7WUFBRVE7UUFBTyxDQUFBO0lBQ3JFLE1BQU0sQ0FBQ0csVUFBVUMsWUFBWSxHQUFHSCxJQUFBQSxlQUFRO0lBQ3hDLE1BQU0sQ0FBQ0ksaUJBQWlCQyxtQkFBbUIsR0FBR0wsSUFBQUEsZUFBUSxFQUFrQjtRQUN0RU0sT0FBTztRQUNQLG1CQUFtQjtRQUNuQkMsUUFBUTtRQUNSQyxhQUFhQztJQUNmO0lBRUEsTUFBTUMsdUJBQXVCQyxXQUFXLENBQUNDLFNBQVMsQ0FB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