payload
Version:
Node, React and MongoDB Headless CMS and Application Framework
207 lines (206 loc) • 30.2 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "Routes", {
enumerable: true,
get: function() {
return Routes;
}
});
const _react = /*#__PURE__*/ _interop_require_wildcard(require("react"));
const _reacti18next = require("react-i18next");
const _reactrouterdom = require("react-router-dom");
const _api = require("../../../api");
const _Loading = require("../../elements/Loading");
const _StayLoggedIn = /*#__PURE__*/ _interop_require_default(require("../../modals/StayLoggedIn"));
const _Default = /*#__PURE__*/ _interop_require_default(require("../../templates/Default"));
const _ActionsProvider = require("../../utilities/ActionsProvider");
const _Auth = require("../../utilities/Auth");
const _Config = require("../../utilities/Config");
const _DocumentInfo = require("../../utilities/DocumentInfo");
const _Locale = require("../../utilities/Locale");
const _NotFound = /*#__PURE__*/ _interop_require_default(require("../NotFound"));
const _Unauthorized = /*#__PURE__*/ _interop_require_default(require("../Unauthorized"));
const _collections = require("./collections");
const _custom = require("./custom");
const _globals = require("./globals");
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;
}
// @ts-expect-error Just TypeScript being broken // TODO: Open TypeScript issue
const Dashboard = /*#__PURE__*/ (0, _react.lazy)(()=>Promise.resolve().then(()=>/*#__PURE__*/ _interop_require_wildcard(require("../Dashboard"))));
// @ts-expect-error Just TypeScript being broken // TODO: Open TypeScript issue
const ForgotPassword = /*#__PURE__*/ (0, _react.lazy)(()=>Promise.resolve().then(()=>/*#__PURE__*/ _interop_require_wildcard(require("../ForgotPassword"))));
// @ts-expect-error Just TypeScript being broken // TODO: Open TypeScript issue
const Login = /*#__PURE__*/ (0, _react.lazy)(()=>Promise.resolve().then(()=>/*#__PURE__*/ _interop_require_wildcard(require("../Login"))));
// @ts-expect-error Just TypeScript being broken // TODO: Open TypeScript issue
const Logout = /*#__PURE__*/ (0, _react.lazy)(()=>Promise.resolve().then(()=>/*#__PURE__*/ _interop_require_wildcard(require("../Logout"))));
// @ts-expect-error Just TypeScript being broken // TODO: Open TypeScript issue
const Verify = /*#__PURE__*/ (0, _react.lazy)(()=>Promise.resolve().then(()=>/*#__PURE__*/ _interop_require_wildcard(require("../Verify"))));
// @ts-expect-error Just TypeScript being broken // TODO: Open TypeScript issue
const CreateFirstUser = /*#__PURE__*/ (0, _react.lazy)(()=>Promise.resolve().then(()=>/*#__PURE__*/ _interop_require_wildcard(require("../CreateFirstUser"))));
// @ts-expect-error Just TypeScript being broken // TODO: Open TypeScript issue
const ResetPassword = /*#__PURE__*/ (0, _react.lazy)(()=>Promise.resolve().then(()=>/*#__PURE__*/ _interop_require_wildcard(require("../ResetPassword"))));
// @ts-expect-error Just TypeScript being broken // TODO: Open TypeScript issue
const Account = /*#__PURE__*/ (0, _react.lazy)(()=>Promise.resolve().then(()=>/*#__PURE__*/ _interop_require_wildcard(require("../Account"))));
const Routes = ()=>{
const [initialized, setInitialized] = (0, _react.useState)(null);
const { permissions, refreshCookie, user } = (0, _Auth.useAuth)();
const { i18n } = (0, _reacti18next.useTranslation)();
const { code: locale } = (0, _Locale.useLocale)();
const canAccessAdmin = permissions?.canAccessAdmin;
const config = (0, _Config.useConfig)();
const { admin: { inactivityRoute: logoutInactivityRoute, logoutRoute, user: userSlug }, collections, globals, routes } = config;
const isLoadingUser = Boolean(typeof user === 'undefined' || user && typeof canAccessAdmin === 'undefined');
const userCollection = collections.find(({ slug })=>slug === userSlug);
(0, _react.useEffect)(()=>{
if (userCollection && !userCollection?.auth?.disableLocalStrategy) {
const { slug } = userCollection;
_api.requests.get(`${routes.api}/${slug}/init`, {
headers: {
'Accept-Language': i18n.language
}
}).then((res)=>res.json().then((data)=>{
if (data && 'initialized' in data) {
setInitialized(data.initialized);
}
}));
} else {
setInitialized(true);
}
}, [
i18n.language,
routes,
userCollection
]);
return /*#__PURE__*/ _react.default.createElement(_react.Suspense, {
fallback: /*#__PURE__*/ _react.default.createElement(_Loading.LoadingOverlayToggle, {
name: "route-suspense",
show: true
})
}, /*#__PURE__*/ _react.default.createElement(_Loading.LoadingOverlayToggle, {
name: "route-loader",
show: isLoadingUser
}), /*#__PURE__*/ _react.default.createElement(_reactrouterdom.Route, {
path: routes.admin,
render: ({ match })=>{
if (initialized === false) {
return /*#__PURE__*/ _react.default.createElement(_reactrouterdom.Switch, null, /*#__PURE__*/ _react.default.createElement(_reactrouterdom.Route, {
path: `${match.url}/create-first-user`
}, /*#__PURE__*/ _react.default.createElement(CreateFirstUser, {
setInitialized: setInitialized
})), /*#__PURE__*/ _react.default.createElement(_reactrouterdom.Route, null, /*#__PURE__*/ _react.default.createElement(_reactrouterdom.Redirect, {
to: `${match.url}/create-first-user`
})));
}
if (initialized === true && !isLoadingUser) {
return /*#__PURE__*/ _react.default.createElement(_reactrouterdom.Switch, null, /*#__PURE__*/ _react.default.createElement(_reactrouterdom.Route, {
path: `${match.url}/create-first-user`
}, /*#__PURE__*/ _react.default.createElement(_reactrouterdom.Redirect, {
to: `${match.url}/`
})), (0, _custom.customRoutes)({
canAccessAdmin,
config,
match,
user
}), /*#__PURE__*/ _react.default.createElement(_reactrouterdom.Route, {
path: `${match.url}/login`
}, /*#__PURE__*/ _react.default.createElement(Login, null)), /*#__PURE__*/ _react.default.createElement(_reactrouterdom.Route, {
path: `${match.url}${logoutRoute}`
}, /*#__PURE__*/ _react.default.createElement(Logout, null)), /*#__PURE__*/ _react.default.createElement(_reactrouterdom.Route, {
path: `${match.url}${logoutInactivityRoute}`
}, /*#__PURE__*/ _react.default.createElement(Logout, {
inactivity: true
})), !userCollection?.auth?.disableLocalStrategy && /*#__PURE__*/ _react.default.createElement(_reactrouterdom.Route, {
path: `${match.url}/forgot`
}, /*#__PURE__*/ _react.default.createElement(ForgotPassword, null)), !userCollection?.auth?.disableLocalStrategy && /*#__PURE__*/ _react.default.createElement(_reactrouterdom.Route, {
path: `${match.url}/reset/:token`
}, /*#__PURE__*/ _react.default.createElement(ResetPassword, null)), collections.map((collection)=>{
if (collection?.auth?.verify && !collection.auth.disableLocalStrategy) {
return /*#__PURE__*/ _react.default.createElement(_reactrouterdom.Route, {
exact: true,
key: `${collection.slug}-verify`,
path: `${match.url}/${collection.slug}/verify/:token`
}, /*#__PURE__*/ _react.default.createElement(Verify, {
collection: collection
}));
}
return null;
}), /*#__PURE__*/ _react.default.createElement(_reactrouterdom.Route, null, user ? /*#__PURE__*/ _react.default.createElement(_react.Fragment, null, canAccessAdmin && /*#__PURE__*/ _react.default.createElement(_ActionsProvider.ActionsProvider, null, /*#__PURE__*/ _react.default.createElement(_Default.default, null, /*#__PURE__*/ _react.default.createElement(_reactrouterdom.Switch, null, /*#__PURE__*/ _react.default.createElement(_reactrouterdom.Route, {
exact: true,
path: `${match.url}/`
}, /*#__PURE__*/ _react.default.createElement(Dashboard, null)), /*#__PURE__*/ _react.default.createElement(_reactrouterdom.Route, {
path: `${match.url}/account`
}, /*#__PURE__*/ _react.default.createElement(_DocumentInfo.DocumentInfoProvider, {
collection: collections.find(({ slug })=>slug === userSlug),
id: user.id
}, /*#__PURE__*/ _react.default.createElement(Account, null))), (0, _collections.collectionRoutes)({
collections,
match,
permissions,
user
}), (0, _globals.globalRoutes)({
globals,
locale,
match,
permissions,
user
}), /*#__PURE__*/ _react.default.createElement(_reactrouterdom.Route, {
path: `${match.url}*`
}, /*#__PURE__*/ _react.default.createElement(_NotFound.default, null))))), canAccessAdmin === false && /*#__PURE__*/ _react.default.createElement(_Unauthorized.default, null)) : /*#__PURE__*/ _react.default.createElement(_reactrouterdom.Redirect, {
to: `${match.url}/login${window.location.pathname.startsWith(routes.admin) ? `?redirect=${encodeURIComponent(window.location.pathname.replace(routes.admin, ''))}` : ''}`
})), /*#__PURE__*/ _react.default.createElement(_reactrouterdom.Route, {
path: `${match.url}*`
}, /*#__PURE__*/ _react.default.createElement(_NotFound.default, null)));
}
return null;
}
}), /*#__PURE__*/ _react.default.createElement(_StayLoggedIn.default, {
refreshCookie: refreshCookie
}));
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hZG1pbi9jb21wb25lbnRzL3ZpZXdzL1JvdXRlcy9pbmRleC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IEZyYWdtZW50LCBTdXNwZW5zZSwgbGF6eSwgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICdyZWFjdC1pMThuZXh0J1xuaW1wb3J0IHsgUmVkaXJlY3QsIFJvdXRlLCBTd2l0Y2ggfSBmcm9tICdyZWFjdC1yb3V0ZXItZG9tJ1xuXG5pbXBvcnQgeyByZXF1ZXN0cyB9IGZyb20gJy4uLy4uLy4uL2FwaSdcbmltcG9ydCB7IExvYWRpbmdPdmVybGF5VG9nZ2xlIH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvTG9hZGluZydcbmltcG9ydCBTdGF5TG9nZ2VkSW4gZnJvbSAnLi4vLi4vbW9kYWxzL1N0YXlMb2dnZWRJbidcbmltcG9ydCBEZWZhdWx0VGVtcGxhdGUgZnJvbSAnLi4vLi4vdGVtcGxhdGVzL0RlZmF1bHQnXG5pbXBvcnQgeyBBY3Rpb25zUHJvdmlkZXIgfSBmcm9tICcuLi8uLi91dGlsaXRpZXMvQWN0aW9uc1Byb3ZpZGVyJ1xuaW1wb3J0IHsgdXNlQXV0aCB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9BdXRoJ1xuaW1wb3J0IHsgdXNlQ29uZmlnIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL0NvbmZpZydcbmltcG9ydCB7IERvY3VtZW50SW5mb1Byb3ZpZGVyIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL0RvY3VtZW50SW5mbydcbmltcG9ydCB7IHVzZUxvY2FsZSB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9Mb2NhbGUnXG5pbXBvcnQgTm90Rm91bmQgZnJvbSAnLi4vTm90Rm91bmQnXG5pbXBvcnQgVW5hdXRob3JpemVkIGZyb20gJy4uL1VuYXV0aG9yaXplZCdcbmltcG9ydCB7IGNvbGxlY3Rpb25Sb3V0ZXMgfSBmcm9tICcuL2NvbGxlY3Rpb25zJ1xuaW1wb3J0IHsgY3VzdG9tUm91dGVzIH0gZnJvbSAnLi9jdXN0b20nXG5pbXBvcnQgeyBnbG9iYWxSb3V0ZXMgfSBmcm9tICcuL2dsb2JhbHMnXG5cbi8vIEB0cy1leHBlY3QtZXJyb3IgSnVzdCBUeXBlU2NyaXB0IGJlaW5nIGJyb2tlbiAvLyBUT0RPOiBPcGVuIFR5cGVTY3JpcHQgaXNzdWVcbmNvbnN0IERhc2hib2FyZCA9IGxhenkoKCkgPT4gaW1wb3J0KCcuLi9EYXNoYm9hcmQnKSlcbi8vIEB0cy1leHBlY3QtZXJyb3IgSnVzdCBUeXBlU2NyaXB0IGJlaW5nIGJyb2tlbiAvLyBUT0RPOiBPcGVuIFR5cGVTY3JpcHQgaXNzdWVcbmNvbnN0IEZvcmdvdFBhc3N3b3JkID0gbGF6eSgoKSA9PiBpbXBvcnQoJy4uL0ZvcmdvdFBhc3N3b3JkJykpXG4vLyBAdHMtZXhwZWN0LWVycm9yIEp1c3QgVHlwZVNjcmlwdCBiZWluZyBicm9rZW4gLy8gVE9ETzogT3BlbiBUeXBlU2NyaXB0IGlzc3VlXG5jb25zdCBMb2dpbiA9IGxhenkoKCkgPT4gaW1wb3J0KCcuLi9Mb2dpbicpKVxuLy8gQHRzLWV4cGVjdC1lcnJvciBKdXN0IFR5cGVTY3JpcHQgYmVpbmcgYnJva2VuIC8vIFRPRE86IE9wZW4gVHlwZVNjcmlwdCBpc3N1ZVxuY29uc3QgTG9nb3V0ID0gbGF6eSgoKSA9PiBpbXBvcnQoJy4uL0xvZ291dCcpKVxuLy8gQHRzLWV4cGVjdC1lcnJvciBKdXN0IFR5cGVTY3JpcHQgYmVpbmcgYnJva2VuIC8vIFRPRE86IE9wZW4gVHlwZVNjcmlwdCBpc3N1ZVxuY29uc3QgVmVyaWZ5ID0gbGF6eSgoKSA9PiBpbXBvcnQoJy4uL1ZlcmlmeScpKVxuLy8gQHRzLWV4cGVjdC1lcnJvciBKdXN0IFR5cGVTY3JpcHQgYmVpbmcgYnJva2VuIC8vIFRPRE86IE9wZW4gVHlwZVNjcmlwdCBpc3N1ZVxuY29uc3QgQ3JlYXRlRmlyc3RVc2VyID0gbGF6eSgoKSA9PiBpbXBvcnQoJy4uL0NyZWF0ZUZpcnN0VXNlcicpKVxuLy8gQHRzLWV4cGVjdC1lcnJvciBKdXN0IFR5cGVTY3JpcHQgYmVpbmcgYnJva2VuIC8vIFRPRE86IE9wZW4gVHlwZVNjcmlwdCBpc3N1ZVxuY29uc3QgUmVzZXRQYXNzd29yZCA9IGxhenkoKCkgPT4gaW1wb3J0KCcuLi9SZXNldFBhc3N3b3JkJykpXG4vLyBAdHMtZXhwZWN0LWVycm9yIEp1c3QgVHlwZVNjcmlwdCBiZWluZyBicm9rZW4gLy8gVE9ETzogT3BlbiBUeXBlU2NyaXB0IGlzc3VlXG5jb25zdCBBY2NvdW50ID0gbGF6eSgoKSA9PiBpbXBvcnQoJy4uL0FjY291bnQnKSlcblxuZXhwb3J0IGNvbnN0IFJvdXRlczogUmVhY3QuRkMgPSAoKSA9PiB7XG4gIGNvbnN0IFtpbml0aWFsaXplZCwgc2V0SW5pdGlhbGl6ZWRdID0gdXNlU3RhdGU8Ym9vbGVhbiB8IG51bGw+KG51bGwpXG4gIGNvbnN0IHsgcGVybWlzc2lvbnMsIHJlZnJlc2hDb29raWUsIHVzZXIgfSA9IHVzZUF1dGgoKVxuICBjb25zdCB7IGkxOG4gfSA9IHVzZVRyYW5zbGF0aW9uKClcbiAgY29uc3QgeyBjb2RlOiBsb2NhbGUgfSA9IHVzZUxvY2FsZSgpXG5cbiAgY29uc3QgY2FuQWNjZXNzQWRtaW4gPSBwZXJtaXNzaW9ucz8uY2FuQWNjZXNzQWRtaW5cblxuICBjb25zdCBjb25maWcgPSB1c2VDb25maWcoKVxuXG4gIGNvbnN0IHtcbiAgICBhZG1pbjogeyBpbmFjdGl2aXR5Um91dGU6IGxvZ291dEluYWN0aXZpdHlSb3V0ZSwgbG9nb3V0Um91dGUsIHVzZXI6IHVzZXJTbHVnIH0sXG4gICAgY29sbGVjdGlvbnMsXG4gICAgZ2xvYmFscyxcbiAgICByb3V0ZXMsXG4gIH0gPSBjb25maWdcblxuICBjb25zdCBpc0xvYWRpbmdVc2VyID0gQm9vbGVhbihcbiAgICB0eXBlb2YgdXNlciA9PT0gJ3VuZGVmaW5lZCcgfHwgKHVzZXIgJiYgdHlwZW9mIGNhbkFjY2Vzc0FkbWluID09PSAndW5kZWZpbmVkJyksXG4gIClcblxuICBjb25zdCB1c2VyQ29sbGVjdGlvbiA9IGNvbGxlY3Rpb25zLmZpbmQoKHsgc2x1ZyB9KSA9PiBzbHVnID09PSB1c2VyU2x1ZylcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh1c2VyQ29sbGVjdGlvbiAmJiAhdXNlckNvbGxlY3Rpb24/LmF1dGg/LmRpc2FibGVMb2NhbFN0cmF0ZWd5KSB7XG4gICAgICBjb25zdCB7IHNsdWcgfSA9IHVzZXJDb2xsZWN0aW9uXG5cbiAgICAgIHJlcXVlc3RzXG4gICAgICAgIC5nZXQoYCR7cm91dGVzLmFwaX0vJHtzbHVnfS9pbml0YCwge1xuICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICdBY2NlcHQtTGFuZ3VhZ2UnOiBpMThuLmxhbmd1YWdlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICAgIC50aGVuKChyZXMpID0+XG4gICAgICAgICAgcmVzLmpzb24oKS50aGVuKChkYXRhKSA9PiB7XG4gICAgICAgICAgICBpZiAoZGF0YSAmJiAnaW5pdGlhbGl6ZWQnIGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgc2V0SW5pdGlhbGl6ZWQoZGF0YS5pbml0aWFsaXplZClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSxcbiAgICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICBzZXRJbml0aWFsaXplZCh0cnVlKVxuICAgIH1cbiAgfSwgW2kxOG4ubGFuZ3VhZ2UsIHJvdXRlcywgdXNlckNvbGxlY3Rpb25dKVxuXG4gIHJldHVybiAoXG4gICAgPFN1c3BlbnNlIGZhbGxiYWNrPXs8TG9hZGluZ092ZXJsYXlUb2dnbGUgbmFtZT1cInJvdXRlLXN1c3BlbnNlXCIgc2hvdyAvPn0+XG4gICAgICA8TG9hZGluZ092ZXJsYXlUb2dnbGUgbmFtZT1cInJvdXRlLWxvYWRlclwiIHNob3c9e2lzTG9hZGluZ1VzZXJ9IC8+XG4gICAgICA8Um91dGVcbiAgICAgICAgcGF0aD17cm91dGVzLmFkbWlufVxuICAgICAgICByZW5kZXI9eyh7IG1hdGNoIH0pID0+IHtcbiAgICAgICAgICBpZiAoaW5pdGlhbGl6ZWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8U3dpdGNoPlxuICAgICAgICAgICAgICAgIDxSb3V0ZSBwYXRoPXtgJHttYXRjaC51cmx9L2NyZWF0ZS1maXJzdC11c2VyYH0+XG4gICAgICAgICAgICAgICAgICA8Q3JlYXRlRmlyc3RVc2VyIHNldEluaXRpYWxpemVkPXtzZXRJbml0aWFsaXplZH0gLz5cbiAgICAgICAgICAgICAgICA8L1JvdXRlPlxuICAgICAgICAgICAgICAgIDxSb3V0ZT5cbiAgICAgICAgICAgICAgICAgIDxSZWRpcmVjdCB0bz17YCR7bWF0Y2gudXJsfS9jcmVhdGUtZmlyc3QtdXNlcmB9IC8+XG4gICAgICAgICAgICAgICAgPC9Sb3V0ZT5cbiAgICAgICAgICAgICAgPC9Td2l0Y2g+XG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGluaXRpYWxpemVkID09PSB0cnVlICYmICFpc0xvYWRpbmdVc2VyKSB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8U3dpdGNoPlxuICAgICAgICAgICAgICAgIDxSb3V0ZSBwYXRoPXtgJHttYXRjaC51cmx9L2NyZWF0ZS1maXJzdC11c2VyYH0+XG4gICAgICAgICAgICAgICAgICA8UmVkaXJlY3QgdG89e2Ake21hdGNoLnVybH0vYH0gLz5cbiAgICAgICAgICAgICAgICA8L1JvdXRlPlxuICAgICAgICAgICAgICAgIHtjdXN0b21Sb3V0ZXMoe1xuICAgICAgICAgICAgICAgICAgY2FuQWNjZXNzQWRtaW4sXG4gICAgICAgICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICAgICAgICBtYXRjaCxcbiAgICAgICAgICAgICAgICAgIHVzZXIsXG4gICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgPFJvdXRlIHBhdGg9e2Ake21hdGNoLnVybH0vbG9naW5gfT5cbiAgICAgICAgICAgICAgICAgIDxMb2dpbiAvPlxuICAgICAgICAgICAgICAgIDwvUm91dGU+XG4gICAgICAgICAgICAgICAgPFJvdXRlIHBhdGg9e2Ake21hdGNoLnVybH0ke2xvZ291dFJvdXRlfWB9PlxuICAgICAgICAgICAgICAgICAgPExvZ291dCAvPlxuICAgICAgICAgICAgICAgIDwvUm91dGU+XG4gICAgICAgICAgICAgICAgPFJvdXRlIHBhdGg9e2Ake21hdGNoLnVybH0ke2xvZ291dEluYWN0aXZpdHlSb3V0ZX1gfT5cbiAgICAgICAgICAgICAgICAgIDxMb2dvdXQgaW5hY3Rpdml0eSAvPlxuICAgICAgICAgICAgICAgIDwvUm91dGU+XG4gICAgICAgICAgICAgICAgeyF1c2VyQ29sbGVjdGlvbj8uYXV0aD8uZGlzYWJsZUxvY2FsU3RyYXRlZ3kgJiYgKFxuICAgICAgICAgICAgICAgICAgPFJvdXRlIHBhdGg9e2Ake21hdGNoLnVybH0vZm9yZ290YH0+XG4gICAgICAgICAgICAgICAgICAgIDxGb3Jnb3RQYXNzd29yZCAvPlxuICAgICAgICAgICAgICAgICAgPC9Sb3V0ZT5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIHshdXNlckNvbGxlY3Rpb24/LmF1dGg/LmRpc2FibGVMb2NhbFN0cmF0ZWd5ICYmIChcbiAgICAgICAgICAgICAgICAgIDxSb3V0ZSBwYXRoPXtgJHttYXRjaC51cmx9L3Jlc2V0Lzp0b2tlbmB9PlxuICAgICAgICAgICAgICAgICAgICA8UmVzZXRQYXNzd29yZCAvPlxuICAgICAgICAgICAgICAgICAgPC9Sb3V0ZT5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIHtjb2xsZWN0aW9ucy5tYXAoKGNvbGxlY3Rpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChjb2xsZWN0aW9uPy5hdXRoPy52ZXJpZnkgJiYgIWNvbGxlY3Rpb24uYXV0aC5kaXNhYmxlTG9jYWxTdHJhdGVneSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgIDxSb3V0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgZXhhY3RcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleT17YCR7Y29sbGVjdGlvbi5zbHVnfS12ZXJpZnlgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcGF0aD17YCR7bWF0Y2gudXJsfS8ke2NvbGxlY3Rpb24uc2x1Z30vdmVyaWZ5Lzp0b2tlbmB9XG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFZlcmlmeSBjb2xsZWN0aW9uPXtjb2xsZWN0aW9ufSAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvUm91dGU+XG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgPFJvdXRlPlxuICAgICAgICAgICAgICAgICAge3VzZXIgPyAoXG4gICAgICAgICAgICAgICAgICAgIDxGcmFnbWVudD5cbiAgICAgICAgICAgICAgICAgICAgICB7Y2FuQWNjZXNzQWRtaW4gJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgPEFjdGlvbnNQcm92aWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPERlZmF1bHRUZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U3dpdGNoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFJvdXRlIGV4YWN0IHBhdGg9e2Ake21hdGNoLnVybH0vYH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxEYXNoYm9hcmQgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvUm91dGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Um91dGUgcGF0aD17YCR7bWF0Y2gudXJsfS9hY2NvdW50YH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxEb2N1bWVudEluZm9Qcm92aWRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb249e2NvbGxlY3Rpb25zLmZpbmQoKHsgc2x1ZyB9KSA9PiBzbHVnID09PSB1c2VyU2x1Zyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e3VzZXIuaWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QWNjb3VudCAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0RvY3VtZW50SW5mb1Byb3ZpZGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Sb3V0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjb2xsZWN0aW9uUm91dGVzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbGVjdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJtaXNzaW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2dsb2JhbFJvdXRlcyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2gsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcm1pc3Npb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Um91dGUgcGF0aD17YCR7bWF0Y2gudXJsfSpgfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPE5vdEZvdW5kIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1JvdXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvU3dpdGNoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L0RlZmF1bHRUZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvQWN0aW9uc1Byb3ZpZGVyPlxuICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAge2NhbkFjY2Vzc0FkbWluID09PSBmYWxzZSAmJiA8VW5hdXRob3JpemVkIC8+fVxuICAgICAgICAgICAgICAgICAgICA8L0ZyYWdtZW50PlxuICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgPFJlZGlyZWN0XG4gICAgICAgICAgICAgICAgICAgICAgdG89e2Ake21hdGNoLnVybH0vbG9naW4ke1xuICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLnN0YXJ0c1dpdGgocm91dGVzLmFkbWluKVxuICAgICAgICAgICAgICAgICAgICAgICAgICA/IGA/cmVkaXJlY3Q9JHtlbmNvZGVVUklDb21wb25lbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUucmVwbGFjZShyb3V0ZXMuYWRtaW4sICcnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApfWBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnJ1xuICAgICAgICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L1JvdXRlPlxuICAgICAgICAgICAgICAgIDxSb3V0ZSBwYXRoPXtgJHttYXRjaC51cmx9KmB9PlxuICAgICAgICAgICAgICAgICAgPE5vdEZvdW5kIC8+XG4gICAgICAgICAgICAgICAgPC9Sb3V0ZT5cbiAgICAgICAgICAgICAgPC9Td2l0Y2g+XG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgfX1cbiAgICAgIC8+XG4gICAgICA8U3RheUxvZ2dlZEluIHJlZnJlc2hDb29raWU9e3JlZnJlc2hDb29raWV9IC8+XG4gICAgPC9TdXNwZW5zZT5cbiAgKVxufVxuIl0sIm5hbWVzIjpbIlJvdXRlcyIsIkRhc2hib2FyZCIsImxhenkiLCJGb3Jnb3RQYXNzd29yZCIsIkxvZ2luIiwiTG9nb3V0IiwiVmVyaWZ5IiwiQ3JlYXRlRmlyc3RVc2VyIiwiUmVzZXRQYXNzd29yZCIsIkFjY291bnQiLCJpbml0aWFsaXplZCIsInNldEluaXRpYWxpemVkIiwidXNlU3RhdGUiLCJwZXJtaXNzaW9ucyIsInJlZnJlc2hDb29raWUiLCJ1c2VyIiwidXNlQXV0aCIsImkxOG4iLCJ1c2VUcmFuc2xhdGlvbiIsImNvZGUiLCJsb2NhbGUiLCJ1c2VMb2NhbGUiLCJjYW5BY2Nlc3NBZG1pbiIsImNvbmZpZyIsInVzZUNvbmZpZyIsImFkbWluIiwiaW5hY3Rpdml0eVJvdXRlIiwibG9nb3V0SW5hY3Rpdml0eVJvdXRlIiwibG9nb3V0Um91dGUiLCJ1c2VyU2x1ZyIsImNvbGxlY3Rpb25zIiwiZ2xvYmFscyIsInJvdXRlcyIsImlzTG9hZGluZ1VzZXIiLCJCb29sZWFuIiwidXNlckNvbGxlY3Rpb24iLCJmaW5kIiwic2x1ZyIsInVzZUVmZmVjdCIsImF1dGgiLCJkaXNhYmxlTG9jYWxTdHJhdGVneSIsInJlcXVlc3RzIiwiZ2V0IiwiYXBpIiwiaGVhZGVycyIsImxhbmd1YWdlIiwidGhlbiIsInJlcyIsImpzb24iLCJkYXRhIiwiU3VzcGVuc2UiLCJmYWxsYmFjayIsIkxvYWRpbmdPdmVybGF5VG9nZ2xlIiwibmFtZSIsInNob3ciLCJSb3V0ZSIsInBhdGgiLCJyZW5kZXIiLCJtYXRjaCIsIlN3aXRjaCIsInVybCIsIlJlZGlyZWN0IiwidG8iLCJjdXN0b21Sb3V0ZXMiLCJpbmFjdGl2aXR5IiwibWFwIiwiY29sbGVjdGlvbiIsInZlcmlmeSIsImV4YWN0Iiwia2V5IiwiRnJhZ21lbnQiLCJBY3Rpb25zUHJvdmlkZXIiLCJEZWZhdWx0VGVtcGxhdGUiLCJEb2N1bWVudEluZm9Qcm92aWRlciIsImlkIiwiY29sbGVjdGlvblJvdXRlcyIsImdsb2JhbFJvdXRlcyIsIk5vdEZvdW5kIiwiVW5hdXRob3JpemVkIiwid2luZG93IiwibG9jYXRpb24iLCJwYXRobmFtZSIsInN0YXJ0c1dpdGgiLCJlbmNvZGVVUklDb21wb25lbnQiLCJyZXBsYWNlIiwiU3RheUxvZ2dlZEluIl0sIm1hcHBpbmdzIjoiOzs7OytCQW9DYUE7OztlQUFBQTs7OytEQXBDd0Q7OEJBQ3RDO2dDQUNTO3FCQUVmO3lCQUNZO3FFQUNaO2dFQUNHO2lDQUNJO3NCQUNSO3dCQUNFOzhCQUNXO3dCQUNYO2lFQUNMO3FFQUNJOzZCQUNRO3dCQUNKO3lCQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUU3QiwrRUFBK0U7QUFDL0UsTUFBTUMsMEJBQVlDLElBQUFBLFdBQUksRUFBQyxJQUFNLG1FQUFBLFFBQU87QUFDcEMsK0VBQStFO0FBQy9FLE1BQU1DLCtCQUFpQkQsSUFBQUEsV0FBSSxFQUFDLElBQU0sbUVBQUEsUUFBTztBQUN6QywrRUFBK0U7QUFDL0UsTUFBTUUsc0JBQVFGLElBQUFBLFdBQUksRUFBQyxJQUFNLG1FQUFBLFFBQU87QUFDaEMsK0VBQStFO0FBQy9FLE1BQU1HLHVCQUFTSCxJQUFBQSxXQUFJLEVBQUMsSUFBTSxtRUFBQSxRQUFPO0FBQ2pDLCtFQUErRTtBQUMvRSxNQUFNSSx1QkFBU0osSUFBQUEsV0FBSSxFQUFDLElBQU0sbUVBQUEsUUFBTztBQUNqQywrRUFBK0U7QUFDL0UsTUFBTUssZ0NBQWtCTCxJQUFBQSxXQUFJLEVBQUMsSUFBTSxtRUFBQSxRQUFPO0FBQzFDLCtFQUErRTtBQUMvRSxNQUFNTSw4QkFBZ0JOLElBQUFBLFdBQUksRUFBQyxJQUFNLG1FQUFBLFFBQU87QUFDeEMsK0VBQStFO0FBQy9FLE1BQU1PLHdCQUFVUCxJQUFBQSxXQUFJLEVBQUMsSUFBTSxtRUFBQSxRQUFPO0FBRTNCLE1BQU1GLFNBQW1CO0lBQzlCLE1BQU0sQ0FBQ1UsYUFBYUMsZUFBZSxHQUFHQyxJQUFBQSxlQUFRLEVBQWlCO0lBQy9ELE1BQU0sRUFBRUMsV0FBVyxFQUFFQyxhQUFhLEVBQUVDLElBQUksRUFBRSxHQUFHQyxJQUFBQSxhQUFPO0lBQ3BELE1BQU0sRUFBRUMsSUFBSSxFQUFFLEdBQUdDLElBQUFBLDRCQUFjO0lBQy9CLE1BQU0sRUFBRUMsTUFBTUMsTUFBTSxFQUFFLEdBQUdDLElBQUFBLGlCQUFTO0lBRWxDLE1BQU1DLGlCQUFpQlQsYUFBYVM7SUFFcEMsTUFBTUMsU0FBU0MsSUFBQUEsaUJBQVM7SUFFeEIsTUFBTSxFQUNKQyxPQUFPLEVBQUVDLGlCQUFpQkMscUJBQXFCLEVBQUVDLFdBQVcsRUFBRWIsTUFBTWMsUUFBUSxFQUFFLEVBQzlFQyxXQUFXLEVBQ1hDLE9BQU8sRUFDUEMsTUFBTSxFQUNQLEdBQUdUO0lBRUosTUFBTVUsZ0JBQWdCQyxRQUNwQixPQUFPbkIsU0FBUyxlQUFnQkEsUUFBUSxPQUFPTyxtQkFBbUI7SUFHcEUsTUFBTWEsaUJBQWlCTCxZQUFZTSxJQUFJLENBQUMsQ0FBQyxFQUFFQyxJQUFJLEVBQUUsR0FBS0EsU0FBU1I7SUFFL0RTLElBQUFBLGdCQUFTLEVBQUM7UUFDUixJQUFJSCxrQkFBa0IsQ0FBQ0EsZ0JBQWdCSSxNQUFNQyxzQkFBc0I7WUFDakUsTUFBTSxFQUFFSCxJQUFJLEVBQUUsR0FBR0Y7WUFFakJNLGFBQVEsQ0FDTEMsR0FBRyxDQUFDLENBQUMsRUFBRVYsT0FBT1csR0FBRyxDQUFDLENBQUMsRUFBRU4sS0FBSyxLQUFLLENBQUMsRUFBRTtnQkFDakNPLFNBQVM7b0JBQ1AsbUJBQW1CM0IsS0FBSzRCLFFBQVE7Z0JBQ2xDO1lBQ0YsR0FDQ0MsSUFBSSxDQUFDLENBQUNDLE1BQ0xBLElBQUlDLElBQUksR0FBR0YsSUFBSSxDQUFDLENBQUNHO29CQUNmLElBQUlBLFFBQVEsaUJBQWlCQSxNQUFNO3dCQUNqQ3RDLGVBQWVzQyxLQUFLdkMsV0FBVztvQkFDakM7Z0JBQ0Y7UUFFTixPQUFPO1lBQ0xDLGVBQWU7UUFDakI7SUFDRixHQUFHO1FBQUNNLEtBQUs0QixRQUFRO1FBQUViO1FBQVFHO0tBQWU7SUFFMUMscUJBQ0UsNkJBQUNlLGVBQVE7UUFBQ0Msd0JBQVUsNkJBQUNDLDZCQUFvQjtZQUFDQyxNQUFLO1lBQWlCQyxNQUFBQTs7cUJBQzlELDZCQUFDRiw2QkFBb0I7UUFBQ0MsTUFBSztRQUFlQyxNQUFNckI7c0JBQ2hELDZCQUFDc0IscUJBQUs7UUFDSkMsTUFBTXhCLE9BQU9QLEtBQUs7UUFDbEJnQyxRQUFRLENBQUMsRUFBRUMsS0FBSyxFQUFFO1lBQ2hCLElBQUloRCxnQkFBZ0IsT0FBTztnQkFDekIscUJBQ0UsNkJBQUNpRCxzQkFBTSxzQkFDTCw2QkFBQ0oscUJBQUs7b0JBQUNDLE1BQU0sQ0FBQyxFQUFFRSxNQUFNRSxHQUFHLENBQUMsa0JBQWtCLENBQUM7aUNBQzNDLDZCQUFDckQ7b0JBQWdCSSxnQkFBZ0JBO21DQUVuQyw2QkFBQzRDLHFCQUFLLHNCQUNKLDZCQUFDTSx3QkFBUTtvQkFBQ0MsSUFBSSxDQUFDLEVBQUVKLE1BQU1FLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQzs7WUFJdEQ7WUFFQSxJQUFJbEQsZ0JBQWdCLFFBQVEsQ0FBQ3VCLGVBQWU7Z0JBQzFDLHFCQUNFLDZCQUFDMEIsc0JBQU0sc0JBQ0wsNkJBQUNKLHFCQUFLO29CQUFDQyxNQUFNLENBQUMsRUFBRUUsTUFBTUUsR0FBRyxDQUFDLGtCQUFrQixDQUFDO2lDQUMzQyw2QkFBQ0Msd0JBQVE7b0JBQUNDLElBQUksQ0FBQyxFQUFFSixNQUFNRSxHQUFHLENBQUMsQ0FBQyxDQUFDO3FCQUU5QkcsSUFBQUEsb0JBQVksRUFBQztvQkFDWnpDO29CQUNBQztvQkFDQW1DO29CQUNBM0M7Z0JBQ0Ysa0JBQ0EsNkJBQUN3QyxxQkFBSztvQkFBQ0MsTUFBTSxDQUFDLEVBQUVFLE1BQU1FLEdBQUcsQ0FBQyxNQUFNLENBQUM7aUNBQy9CLDZCQUFDeEQsNkJBRUgsNkJBQUNtRCxxQkFBSztvQkFBQ0MsTUFBTSxDQUFDLEVBQUVFLE1BQU1FLEdBQUcsQ0FBQyxFQUFFaEMsWUFBWSxDQUFDO2lDQUN2Qyw2QkFBQ3ZCLDhCQUVILDZCQUFDa0QscUJBQUs7b0JBQUNDLE1BQU0sQ0FBQyxFQUFFRSxNQUFNRSxHQUFHLENBQUMsRUFBRWpDLHNCQUFzQixDQUFDO2lDQUNqRCw2QkFBQ3RCO29CQUFPMkQsWUFBQUE7cUJBRVQsQ0FBQzdCLGdCQUFnQkksTUFBTUMsc0NBQ3RCLDZCQUFDZSxxQkFBSztvQkFBQ0MsTUFBTSxDQUFDLEVBQUVFLE1BQU1FLEdBQUcsQ0FBQyxPQUFPLENBQUM7aUNBQ2hDLDZCQUFDekQsd0JBR0osQ0FBQ2dDLGdCQUFnQkksTUFBTUMsc0NBQ3RCLDZCQUFDZSxxQkFBSztvQkFBQ0MsTUFBTSxDQUFDLEVBQUVFLE1BQU1FLEdBQUcsQ0FBQyxhQUFhLENBQUM7aUNBQ3RDLDZCQUFDcEQsdUJBR0pzQixZQUFZbUMsR0FBRyxDQUFDLENBQUNDO29CQUNoQixJQUFJQSxZQUFZM0IsTUFBTTRCLFVBQVUsQ0FBQ0QsV0FBVzNCLElBQUksQ0FBQ0Msb0JBQW9CLEVBQUU7d0JBQ3JFLHFCQUNFLDZCQUFDZSxxQkFBSzs0QkFDSmEsT0FBQUE7NEJBQ0FDLEtBQUssQ0FBQyxFQUFFSCxXQUFXN0IsSUFBSSxDQUFDLE9BQU8sQ0FBQzs0QkFDaENtQixNQUFNLENBQUMsRUFBRUUsTUFBTUUsR0FBRyxDQUFDLENBQUMsRUFBRU0sV0FBVzdCLElBQUksQ0FBQyxjQUFjLENBQUM7eUNBRXJELDZCQUFDL0I7NEJBQU80RCxZQUFZQTs7b0JBRzFCO29CQUNBLE9BQU87Z0JBQ1Qsa0JBQ0EsNkJBQUNYLHFCQUFLLFFBQ0h4QyxxQkFDQyw2QkFBQ3VELGVBQVEsUUFDTmhELGdDQUNDLDZCQUFDaUQsZ0NBQWUsc0JBQ2QsNkJBQUNDLGdCQUFlLHNCQUNkLDZCQUFDYixzQkFBTSxzQkFDTCw2QkFBQ0oscUJBQUs7b0JBQUNhLE9BQUFBO29CQUFNWixNQUFNLENBQUMsRUFBRUUsTUFBTUUsR0FBRyxDQUFDLENBQUMsQ0FBQztpQ0FDaEMsNkJBQUMzRCxpQ0FFSCw2QkFBQ3NELHFCQUFLO29CQUFDQyxNQUFNLENBQUMsRUFBRUUsTUFBTUUsR0FBRyxDQUFDLFFBQVEsQ0FBQztpQ0FDakMsNkJBQUNhLGtDQUFvQjtvQkFDbkJQLFlBQVlwQyxZQUFZTSxJQUFJLENBQUMsQ0FBQyxFQUFFQyxJQUFJLEVBQUUsR0FBS0EsU0FBU1I7b0JBQ3BENkMsSUFBSTNELEtBQUsyRCxFQUFFO2lDQUVYLDZCQUFDakUsa0JBR0prRSxJQUFBQSw2QkFBZ0IsRUFBQztvQkFDaEI3QztvQkFDQTRCO29CQUNBN0M7b0JBQ0FFO2dCQUNGLElBQ0M2RCxJQUFBQSxxQkFBWSxFQUFDO29CQUNaN0M7b0JBQ0FYO29CQUNBc0M7b0JBQ0E3QztvQkFDQUU7Z0JBQ0Ysa0JBQ0EsNkJBQUN3QyxxQkFBSztvQkFBQ0MsTUFBTSxDQUFDLEVBQUVFLE1BQU1FLEdBQUcsQ0FBQyxDQUFDLENBQUM7aUNBQzFCLDZCQUFDaUIsaUJBQVEsYUFNbEJ2RCxtQkFBbUIsdUJBQVMsNkJBQUN3RCxxQkFBWSx5QkFHNUMsNkJBQUNqQix3QkFBUTtvQkFDUEMsSUFBSSxDQUFDLEVBQUVKLE1BQU1FLEdBQUcsQ0FBQyxNQUFNLEVBQ3JCbUIsT0FBT0MsUUFBUSxDQUFDQyxRQUFRLENBQUNDLFVBQVUsQ0FBQ2xELE9BQU9QLEtBQUssSUFDNUMsQ0FBQyxVQUFVLEVBQUUwRCxtQkFDWEosT0FBT0MsUUFBUSxDQUFDQyxRQUFRLENBQUNHLE9BQU8sQ0FBQ3BELE9BQU9QLEtBQUssRUFBRSxLQUMvQyxDQUFDLEdBQ0gsR0FDTCxDQUFDO21DQUlSLDZCQUFDOEIscUJBQUs7b0JBQUNDLE1BQU0sQ0FBQyxFQUFFRSxNQUFNRSxHQUFHLENBQUMsQ0FBQyxDQUFDO2lDQUMxQiw2QkFBQ2lCLGlCQUFRO1lBSWpCO1lBRUEsT0FBTztRQUNUO3NCQUVGLDZCQUFDUSxxQkFBWTtRQUFDdkUsZUFBZUE7O0FBR25DIn0=