Watchit App
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/package-lock.json b/package-lock.json
index 5d01a3d9d..ecdbbc188 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,13 +1,14 @@
{
"name": "watchit",
- "version": "2.2.0-beta.7",
+ "version": "2.2.0-beta.12",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "watchit",
- "version": "2.2.0-beta.7",
+ "version": "2.2.0-beta.12",
"dependencies": {
+ "@emailjs/browser": "^4.4.1",
"@helia/unixfs": "^4.0.1",
"@hookform/resolvers": "^3.1.1",
"@iconify/react": "^4.1.1",
@@ -2372,6 +2373,15 @@
"@noble/ciphers": "^1.0.0"
}
},
+ "node_modules/@emailjs/browser": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/@emailjs/browser/-/browser-4.4.1.tgz",
+ "integrity": "sha512-DGSlP9sPvyFba3to2A50kDtZ+pXVp/0rhmqs2LmbMS3I5J8FSOgLwzY2Xb4qfKlOVHh29EAutLYwe5yuEZmEFg==",
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
"node_modules/@emotion/babel-plugin": {
"version": "11.13.5",
"resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.13.5.tgz",
diff --git a/package.json b/package.json
index 4df88f4b1..02479319f 100644
--- a/package.json
+++ b/package.json
@@ -2,7 +2,7 @@
"name": "watchit",
"author": "Watchit",
"type": "module",
- "version": "2.2.0-beta.11",
+ "version": "2.2.0-beta.12",
"description": "Open videos everywhere",
"email": "info@watchit.movie",
"private": true,
@@ -43,6 +43,7 @@
]
},
"dependencies": {
+ "@emailjs/browser": "^4.4.1",
"@helia/unixfs": "^4.0.1",
"@hookform/resolvers": "^3.1.1",
"@iconify/react": "^4.1.1",
diff --git a/src/App.tsx b/src/App.tsx
index 11e710f58..844e0cd6d 100644
--- a/src/App.tsx
+++ b/src/App.tsx
@@ -98,20 +98,20 @@ export default function App() {
themeStretch: false,
}}
>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/auth/context/web3Auth/config/web3AuthSettings.ts b/src/auth/context/web3Auth/config/web3AuthSettings.ts
index e90a222e9..4491d963a 100644
--- a/src/auth/context/web3Auth/config/web3AuthSettings.ts
+++ b/src/auth/context/web3Auth/config/web3AuthSettings.ts
@@ -122,6 +122,7 @@ export function web3AuthFactory(): Web3Auth {
});
const web3AuthOptions: Web3AuthOptions = {
+ sessionTime: 60 * 60 * 24 * 30, // 30 days
privateKeyProvider,
accountAbstractionProvider,
chainConfig: chain.polygonAmoy,
diff --git a/src/components/animate/motion-lazy.tsx b/src/components/animate/motion-lazy.tsx
index 5f2f9a367..60e8d8054 100644
--- a/src/components/animate/motion-lazy.tsx
+++ b/src/components/animate/motion-lazy.tsx
@@ -2,7 +2,7 @@ import { LazyMotion, m } from 'framer-motion';
// ----------------------------------------------------------------------
-// eslint-disable-next-line import/extensions
+// @ts-ignore
const loadFeatures = () => import('./features.js').then((res) => res.default);
type Props = {
diff --git a/src/components/avatar/avatar.tsx b/src/components/avatar/avatar.tsx
new file mode 100644
index 000000000..e00be6143
--- /dev/null
+++ b/src/components/avatar/avatar.tsx
@@ -0,0 +1,23 @@
+// @mui
+import Avatar from '@mui/material/Avatar';
+import {FC} from "react";
+import {dicebear} from "@src/utils/dicebear.ts";
+
+interface AvatarProfileProps {
+ src: string;
+ alt?: string;
+ sx?: any;
+ [x: string]: any;
+}
+
+const AvatarProfile: FC = ({ src, alt, sx, ...other }) => {
+
+ //Check if src is a valid URL starting with http or https; if not, use the dicebear API to generate a random avatar
+ if (!src.startsWith('http') && !src.startsWith('https')) { src = dicebear(src) }
+
+ return (
+
+ )
+}
+
+export default AvatarProfile;
diff --git a/src/components/avatar/index.ts b/src/components/avatar/index.ts
new file mode 100644
index 000000000..6295197ce
--- /dev/null
+++ b/src/components/avatar/index.ts
@@ -0,0 +1 @@
+export * from '@src/components/avatar';
diff --git a/src/components/carousel/variants/carousel-main.tsx b/src/components/carousel/variants/carousel-main.tsx
index de4d73d45..8a13e60fd 100644
--- a/src/components/carousel/variants/carousel-main.tsx
+++ b/src/components/carousel/variants/carousel-main.tsx
@@ -15,9 +15,7 @@ import { varFade } from '@src/components/animate';
import Carousel, { CarouselDots, useCarousel } from '@src/components/carousel/index';
import { IconFlagFilled, IconPlayerPlay } from '@tabler/icons-react';
import Stack from '@mui/material/Stack';
-
// @ts-ignore
-// eslint-disable-next-line import/no-extraneous-dependencies
import { type Post } from '@lens-protocol/api-bindings/dist/declarations/src/lens/graphql/generated';
import { paths } from '@src/routes/paths.ts';
import { useRouter } from '@src/routes/hooks';
diff --git a/src/components/login-modal/modal.tsx b/src/components/login-modal/modal.tsx
index 16bd6eea6..12fb355ad 100644
--- a/src/components/login-modal/modal.tsx
+++ b/src/components/login-modal/modal.tsx
@@ -1,5 +1,5 @@
// REACT IMPORTS
-import React, { useEffect, useState } from 'react';
+import React, { useCallback, useEffect, useState } from 'react';
// MUI IMPORTS
import { Backdrop, Box, Fade, Modal } from '@mui/material';
@@ -13,9 +13,12 @@ import { ProfileSelectView } from '@src/components/login-modal/profile-select-vi
import { ProfileFormView } from '@src/components/login-modal/profile-form-view.tsx';
import { WatchitLoader } from '../watchit-loader';
import { useDispatch, useSelector } from 'react-redux';
-import { closeLoginModal } from '@redux/auth';
+import {closeLoginModal, setEmail} from '@redux/auth';
import { notifySuccess } from '@notifications/internal-notifications.ts';
import { SUCCESS } from '@notifications/success.ts';
+// @ts-ignore
+import {type AuthUserInfo} from "@web3auth/auth/dist/types/utils/interfaces";
+import useReferrals from '@src/hooks/use-referrals.ts';
// ----------------------------------------------------------------------
@@ -35,6 +38,7 @@ export const LoginModal: React.FC = ({ open, onClose }) => {
const sessionData = useSelector((state: any) => state.auth.session);
const { execute: logoutExecute } = useLogout();
const { execute: loginExecute, error } = useLogin();
+ const { acceptOrCreateInvitationForUser } = useReferrals();
const dispatch = useDispatch();
useEffect(() => {
@@ -45,6 +49,9 @@ export const LoginModal: React.FC = ({ open, onClose }) => {
method: 'eth_accounts',
});
+ // Obtain user info from the provider to get the email
+ await w3.getUserInfo().then((r:Partial) => dispatch(setEmail(r?.email)));
+
if (accounts && accounts.length > 0) {
setAddress(accounts[0]);
}
@@ -66,6 +73,12 @@ export const LoginModal: React.FC = ({ open, onClose }) => {
await w3?.connect();
setView('profile');
setLoading(false);
+
+ // Once the user is authenticated, store the session expiration
+ const sessionTimeMs = 60 * 60 * 24 * 30 * 1000; // 30 days
+ const expirationTimestamp = Date.now() + sessionTimeMs;
+ localStorage.setItem("sessionExpiration", expirationTimestamp.toString());
+
} catch (err) {
onClose();
w3?.loginModal.closeModal();
@@ -76,10 +89,11 @@ export const LoginModal: React.FC = ({ open, onClose }) => {
}
}, [open, view, w3.connected]);
- const handleProfileCreateSuccess = () => {
+ const handleProfileCreateSuccess = useCallback(() => {
+ acceptOrCreateInvitationForUser();
notifySuccess(SUCCESS.PROFILE_CREATED_SUCCESSFULLY);
dispatch(closeLoginModal());
- };
+ }, []);
const handleLogin = async (profile?: Profile) => {
if (!profile || !address) return;
@@ -100,6 +114,12 @@ export const LoginModal: React.FC = ({ open, onClose }) => {
setAddress('');
};
+ const handleBackdropClick = () => {
+ if (view === 'profile') {
+ onClose();
+ }
+ };
+
return (
<>
= ({ open, onClose }) => {
onClose={onClose}
closeAfterTransition
BackdropComponent={Backdrop}
- BackdropProps={{ timeout: 500, onClick: () => {} }}
+ BackdropProps={{ timeout: 500, onClick: handleBackdropClick }}
>
= ({
username: Yup.string()
.min(5, 'Username must be at least 5 characters')
.required('Username is required'),
- name: Yup.string().required('Name is required'),
- bio: Yup.string().required('Bio is required'),
+ name: Yup.string().min(3, 'Name must be at least 3 characters').required('Name is required'),
+ bio: Yup.string().min(10, 'Bio must be at least 10 characters').required('Bio is required'),
socialLinks: Yup.object({
twitter: Yup.string().url('Enter a valid URL'),
instagram: Yup.string().url('Enter a valid URL'),
@@ -378,12 +378,12 @@ export const ProfileFormView: React.FC = ({
}}
/>
{/* Avatar */}
- profileImageInputRef.current?.click()}
diff --git a/src/components/og-meta-tags.tsx b/src/components/og-meta-tags.tsx
new file mode 100644
index 000000000..8a4b8fdef
--- /dev/null
+++ b/src/components/og-meta-tags.tsx
@@ -0,0 +1,48 @@
+import { Helmet } from 'react-helmet-async';
+import { PropsWithChildren } from 'react';
+import { GLOBAL_CONSTANTS } from '@src/config-global.ts';
+
+interface OgMetaTagsProps {
+ title: string;
+ description: string;
+ image?: string;
+ url: string;
+ type?: string; // e.g. "website", "article", "profile", ...
+ twitterCard?: string; // default usually "summary_large_image"
+ siteName?: string; // optional: e.g. "Watchit App"
+}
+
+export function OgMetaTags({
+ title,
+ description,
+ image = GLOBAL_CONSTANTS.LOGO_URL,
+ url,
+ type = 'website',
+ twitterCard = 'summary_large_image',
+ siteName,
+ children
+ }: PropsWithChildren) {
+ return (
+ <>
+
+ {/* HTML Title (Also used in browser tab) */}
+ {title}
+
+ {/* Open Graph / Facebook */}
+
+ {siteName && }
+
+
+
+
+
+ {/* Twitter */}
+
+
+
+
+
+ {children}
+ >
+ );
+}
diff --git a/src/components/openable-text/openable-text.tsx b/src/components/openable-text/openable-text.tsx
index 913219969..8e91a7d85 100644
--- a/src/components/openable-text/openable-text.tsx
+++ b/src/components/openable-text/openable-text.tsx
@@ -1,23 +1,27 @@
import { FC } from 'react';
import { Tooltip, IconButton, Typography, Stack } from '@mui/material';
import { Icon } from '@iconify/react';
+import { SxProps } from '@mui/system';
+import { Theme } from '@mui/material/styles/createTheme';
const openIcon = 'mdi:open-in-new';
interface OpenableTextProps {
label: string;
url: string;
+ sx?: SxProps;
+ labelSx?: SxProps;
}
-const OpenableText: FC = ({ label, url }) => {
+const OpenableText: FC = ({ label, url, sx, labelSx }) => {
const handleOpen = () => {
window.open(url, '_blank');
};
return (
-
- {label}
-
+
+ {label}
+
diff --git a/src/components/poster/variants/poster-creators.tsx b/src/components/poster/variants/poster-creators.tsx
index f9eb885a9..c08b326da 100644
--- a/src/components/poster/variants/poster-creators.tsx
+++ b/src/components/poster/variants/poster-creators.tsx
@@ -8,8 +8,9 @@ import { paths } from '@src/routes/paths.ts';
import { TrendingTopicsType } from '@src/sections/explore/view.tsx';
import Box from '@mui/material/Box';
import Card from '@mui/material/Card';
-import Avatar from '@mui/material/Avatar';
import ListItemText from '@mui/material/ListItemText';
+import AvatarProfile from "@src/components/avatar/avatar.tsx";
+import {dicebear} from "@src/utils/dicebear.ts";
const randomImages = [
'https://storage.needpix.com/rsynced_images/banner-header-1449745071UBW.jpg',
@@ -77,9 +78,9 @@ const PosterCreators = ({ id }: TrendingTopicsType) => {
p: (theme) => theme.spacing(0, 2, 1, 2),
}}
>
-
diff --git a/src/components/poster/variants/poster-top-titles.tsx b/src/components/poster/variants/poster-top-titles.tsx
index 6702cf93d..86d44168e 100644
--- a/src/components/poster/variants/poster-top-titles.tsx
+++ b/src/components/poster/variants/poster-top-titles.tsx
@@ -17,6 +17,7 @@ import { openLoginModal } from '@redux/auth';
import { ReadResult } from '@lens-protocol/react/dist/declarations/src/helpers/reads';
import { useDispatch, useSelector } from 'react-redux';
import { addBookmark, removeBookmark } from '@redux/bookmark';
+import {dicebear} from "@src/utils/dicebear.ts";
// ----------------------------------------------------------------------
@@ -171,8 +172,7 @@ const PosterTopTitles = ({ post }: { post: any }) => {
ratio={'1/1'}
style={{ width: '20px', height: '20px', borderRadius: '50%' }}
src={
- (post?.by?.metadata?.picture as any)?.optimized?.uri ??
- `https://api.dicebear.com/9.x/bottts-neutral/svg?seed=${post?.by?.id}`
+ post?.by?.metadata?.picture?.optimized?.uri ?? dicebear(post?.by?.id)
}
/>
{post?.by?.metadata?.displayName ?? post?.by?.handle?.localName}
diff --git a/src/components/publication-detail-main.tsx b/src/components/publication-detail-main.tsx
index c31e05ae4..6466a10ad 100644
--- a/src/components/publication-detail-main.tsx
+++ b/src/components/publication-detail-main.tsx
@@ -6,7 +6,6 @@ import Box from '@mui/material/Box';
import Card from '@mui/material/Card';
import Stack from '@mui/material/Stack';
import Button from '@mui/material/Button';
-import Avatar from '@mui/material/Avatar';
import Dialog from '@mui/material/Dialog';
import Divider from '@mui/material/Divider';
import MenuItem from '@mui/material/MenuItem';
@@ -59,6 +58,8 @@ import { openLoginModal } from '@redux/auth';
import { useDispatch, useSelector } from 'react-redux';
import { addBookmark, removeBookmark } from '@redux/bookmark';
import { useNotificationPayload } from '@src/hooks/use-notification-payload.ts';
+import {dicebear} from "@src/utils/dicebear.ts";
+import AvatarProfile from "@src/components/avatar/avatar.tsx";
// ----------------------------------------------------------------------
@@ -114,8 +115,7 @@ export default function PublicationDetailMain({
id: post.by.id,
displayName: post?.by?.metadata?.displayName,
avatar:
- (post?.by?.metadata?.picture as any)?.optimized?.uri ??
- `https://api.dicebear.com/9.x/bottts-neutral/svg?seed=${post?.by?.id}`,
+ post?.by?.metadata?.picture?.optimized?.uri ?? dicebear(post?.by?.id),
},
{
rawDescription: `${sessionData?.profile?.metadata?.displayName} liked ${post?.metadata?.title}`,
@@ -217,10 +217,9 @@ export default function PublicationDetailMain({
sx={{ display: 'flex', alignItems: 'center', cursor: 'pointer' }}
onClick={goToProfile}
>
-
) : (
diff --git a/src/components/should-login/withAuth.tsx b/src/components/should-login/withAuth.tsx
index 93916f63f..4d8cf61bd 100644
--- a/src/components/should-login/withAuth.tsx
+++ b/src/components/should-login/withAuth.tsx
@@ -1,10 +1,16 @@
import React from 'react';
import { useSelector } from 'react-redux';
import ShouldLogin from '@src/components/should-login/should-login';
+import { LoadingScreen } from '@src/components/loading-screen';
const withAuth = (WrappedComponent: React.ComponentType, icon: string, subtitle: string) => {
return (props: any) => {
const sessionData = useSelector((state: any) => state.auth.session);
+ const loading = useSelector((state: any) => state.auth.isSessionLoading);
+
+ if (loading) {
+ return ;
+ }
if (!sessionData?.authenticated) {
return ;
diff --git a/src/components/subscribe-profile-modal.tsx b/src/components/subscribe-profile-modal.tsx
index 7b6bc525e..c5d8d0b67 100644
--- a/src/components/subscribe-profile-modal.tsx
+++ b/src/components/subscribe-profile-modal.tsx
@@ -40,6 +40,7 @@ import { GLOBAL_CONSTANTS } from '@src/config-global.ts';
import { notifyError, notifySuccess } from '@notifications/internal-notifications.ts';
import { SUCCESS } from '@notifications/success.ts';
import { ERRORS } from '@notifications/errors.ts';
+import {dicebear} from "@src/utils/dicebear.ts";
// ----------------------------------------------------------------------
@@ -176,8 +177,7 @@ export const SubscribeProfileModal = ({
id: profile.id,
displayName: profile?.metadata?.displayName ?? 'no name',
avatar:
- (profile?.metadata?.picture as any)?.optimized?.uri ??
- `https://api.dicebear.com/9.x/bottts-neutral/svg?seed=${profile?.id}`,
+ (profile?.metadata?.picture as any)?.optimized?.uri ??dicebear(profile?.id)
},
{
durationDays,
diff --git a/src/components/table/table-pagination-custom.tsx b/src/components/table/table-pagination-custom.tsx
index 4a8f0c1b4..24dcbed59 100644
--- a/src/components/table/table-pagination-custom.tsx
+++ b/src/components/table/table-pagination-custom.tsx
@@ -21,7 +21,7 @@ export default function TablePaginationCustom({
...other
}: Props & TablePaginationProps) {
return (
-
+ = ({ address }) => {
+ // Use the useIsVerified hook to check if the user is verified
+ const { isVerified, loading } = useIsVerified(address);
+
+ // While loading, do not render anything
+ if (loading) return null;
+
+ // If the user is not verified, do not render the badge
+ if (!isVerified) return null;
+
+ return ;
+};
+
+export default BadgeVerified;
diff --git a/src/components/user-item/index.tsx b/src/components/user-item/index.tsx
index 48ccaad91..feefbf50e 100644
--- a/src/components/user-item/index.tsx
+++ b/src/components/user-item/index.tsx
@@ -1,7 +1,6 @@
// MUI IMPORTS
import Box from '@mui/material/Box';
import Card from '@mui/material/Card';
-import Avatar from '@mui/material/Avatar';
import { Theme } from '@mui/material/styles';
import { SxProps } from '@mui/system/styleFunctionSx';
import ListItemText from '@mui/material/ListItemText';
@@ -17,6 +16,11 @@ import { paths } from '../../routes/paths';
import { useRouter } from '@src/routes/hooks';
import FollowUnfollowButton from '@src/components/follow-unfollow-button.tsx';
import { useSelector } from 'react-redux';
+import AvatarProfile from "@src/components/avatar/avatar.tsx";
+import {FC} from "react";
+import Typography from "@mui/material/Typography";
+import BadgeVerified from "@src/components/user-item/BadgeVerified.tsx";
+import { Address } from 'viem';
// ----------------------------------------------------------------------
@@ -92,11 +96,8 @@ export const UserItem = ({
p: (theme) => theme.spacing(0, 2, 1, 2),
}}
>
- }
secondary={
<>{profile?.id !== sessionData?.profile?.id ? profile?.id : 'This is you!'}>
}
@@ -144,3 +145,30 @@ export const UserItem = ({
>
);
};
+
+interface UserNameAndBadgeProps {
+ name: string;
+ address: Address;
+}
+
+export const UserNameAndBadge : FC = ({ name, address}) => {
+ return (
+
+
+ {name}
+
+
+
+
+
+ );
+}
diff --git a/src/components/video-player/video-player.tsx b/src/components/video-player/video-player.tsx
index 3b4ea2a46..2bdca4791 100644
--- a/src/components/video-player/video-player.tsx
+++ b/src/components/video-player/video-player.tsx
@@ -45,7 +45,6 @@ export const VideoPlayer: FC = ({ src, titleMovie, onBack, sho
useEffect(() => {
if (player.current) {
if (isHLSProvider(player.current.provider)) {
- console.log('tune provider config');
player.current.provider.config = {
debug: false,
autoStartLoad: true,
diff --git a/src/components/watchit-loader/index.tsx b/src/components/watchit-loader/index.tsx
index 989c62022..0eb9004a8 100644
--- a/src/components/watchit-loader/index.tsx
+++ b/src/components/watchit-loader/index.tsx
@@ -1,6 +1,5 @@
import { FC, useEffect, useRef } from 'react';
import Box from '@mui/material/Box';
-// eslint-disable-next-line import/no-extraneous-dependencies
import Lottie, { LottieRefCurrentProps } from 'lottie-react';
import watchitLogo from '@src/assets/animations/watchit-spinner.json';
diff --git a/src/config-global.ts b/src/config-global.ts
index 12d284ce6..90e469987 100644
--- a/src/config-global.ts
+++ b/src/config-global.ts
@@ -27,6 +27,8 @@ export const GLOBAL_CONSTANTS = {
OKLINK_API_KEY: process.env.VITE_OKLINK_API_KEY || import.meta.env.VITE_OKLINK_API_KEY || '',
RIGHT_POLICY_AUTHORIZER:
process.env.VITE_RIGHT_POLICY_AUTHORIZER || import.meta.env.VITE_RIGHT_POLICY_AUTHORIZER || '',
+ ACCESS_MANAGER_ADDRESS:
+ process.env.VITE_ACCESS_MANAGER_ADDRESS || import.meta.env.VITE_ACCESS_MANAGER_ADDRESS || '',
SENTRY_AUTH_TOKEN:
process.env.VITE_SENTRY_AUTH_TOKEN || import.meta.env.VITE_SENTRY_AUTH_TOKEN || '',
SENTRY_DNS: process.env.VITE_SENTRY_DNS || import.meta.env.VITE_SENTRY_DNS || '',
@@ -41,6 +43,12 @@ export const GLOBAL_CONSTANTS = {
process.env.VITE_SUPABASE_API_KEY || import.meta.env.VITE_SUPABASE_API_KEY || '',
ENVIRONMENT: process.env.NODE_ENV || import.meta.env.VITE_ENVIRONMENT || 'development',
INFURA_API_KEY: process.env.VITE_INFURA_API_KEY || import.meta.env.VITE_INFURA_API_KEY || '',
+ EMAIL_API_KEY: process.env.VITE_EMAILJS_PUBLIC_KEY || import.meta.env.VITE_EMAILJS_PUBLIC_KEY || '',
+ EMAIL_SERVICE_ID: process.env.VITE_EMAILJS_SERVICE_ID || import.meta.env.VITE_EMAILJS_SERVICE_ID || '',
+ EMAIL_TEMPLATE_ID: process.env.VITE_EMAILJS_TEMPLATE_ID || import.meta.env.VITE_EMAILJS_TEMPLATE_ID || '',
+ SENDER_EMAIL: process.env.VITE_SENDER_EMAIL || import.meta.env.VITE_SENDER_EMAIL || '',
+ BASE_URL: process.env.VITE_BASE_URL || import.meta.env.VITE_BASE_URL || '',
+ LOGO_URL: process.env.VITE_LOGO_URL || import.meta.env.VITE_LOGO_URL || '',
};
export const MAPBOX_API = import.meta.env.VITE_MAPBOX_API || '';
diff --git a/src/config/abi/AccessManager.json b/src/config/abi/AccessManager.json
new file mode 100644
index 000000000..8254e3308
--- /dev/null
+++ b/src/config/abi/AccessManager.json
@@ -0,0 +1 @@
+{"abi":[{"type":"function","name":"ADMIN_ROLE","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"PUBLIC_ROLE","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"UPGRADE_INTERFACE_VERSION","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"canCall","inputs":[{"name":"caller","type":"address","internalType":"address"},{"name":"target","type":"address","internalType":"address"},{"name":"selector","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"immediate","type":"bool","internalType":"bool"},{"name":"delay","type":"uint32","internalType":"uint32"}],"stateMutability":"view"},{"type":"function","name":"cancel","inputs":[{"name":"caller","type":"address","internalType":"address"},{"name":"target","type":"address","internalType":"address"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"uint32","internalType":"uint32"}],"stateMutability":"nonpayable"},{"type":"function","name":"consumeScheduledOp","inputs":[{"name":"caller","type":"address","internalType":"address"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"execute","inputs":[{"name":"target","type":"address","internalType":"address"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"uint32","internalType":"uint32"}],"stateMutability":"payable"},{"type":"function","name":"expiration","inputs":[],"outputs":[{"name":"","type":"uint32","internalType":"uint32"}],"stateMutability":"view"},{"type":"function","name":"getAccess","inputs":[{"name":"roleId","type":"uint64","internalType":"uint64"},{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"since","type":"uint48","internalType":"uint48"},{"name":"currentDelay","type":"uint32","internalType":"uint32"},{"name":"pendingDelay","type":"uint32","internalType":"uint32"},{"name":"effect","type":"uint48","internalType":"uint48"}],"stateMutability":"view"},{"type":"function","name":"getNonce","inputs":[{"name":"id","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"uint32","internalType":"uint32"}],"stateMutability":"view"},{"type":"function","name":"getRoleAdmin","inputs":[{"name":"roleId","type":"uint64","internalType":"uint64"}],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"getRoleGrantDelay","inputs":[{"name":"roleId","type":"uint64","internalType":"uint64"}],"outputs":[{"name":"","type":"uint32","internalType":"uint32"}],"stateMutability":"view"},{"type":"function","name":"getRoleGuardian","inputs":[{"name":"roleId","type":"uint64","internalType":"uint64"}],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"getSchedule","inputs":[{"name":"id","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"uint48","internalType":"uint48"}],"stateMutability":"view"},{"type":"function","name":"getTargetAdminDelay","inputs":[{"name":"target","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint32","internalType":"uint32"}],"stateMutability":"view"},{"type":"function","name":"getTargetFunctionRole","inputs":[{"name":"target","type":"address","internalType":"address"},{"name":"selector","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"grantRole","inputs":[{"name":"roleId","type":"uint64","internalType":"uint64"},{"name":"account","type":"address","internalType":"address"},{"name":"executionDelay","type":"uint32","internalType":"uint32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"hasRole","inputs":[{"name":"roleId","type":"uint64","internalType":"uint64"},{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"isMember","type":"bool","internalType":"bool"},{"name":"executionDelay","type":"uint32","internalType":"uint32"}],"stateMutability":"view"},{"type":"function","name":"hashOperation","inputs":[{"name":"caller","type":"address","internalType":"address"},{"name":"target","type":"address","internalType":"address"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"initialAdmin","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"isTargetClosed","inputs":[{"name":"target","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"labelRole","inputs":[{"name":"roleId","type":"uint64","internalType":"uint64"},{"name":"label","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"minSetback","inputs":[],"outputs":[{"name":"","type":"uint32","internalType":"uint32"}],"stateMutability":"view"},{"type":"function","name":"multicall","inputs":[{"name":"data","type":"bytes[]","internalType":"bytes[]"}],"outputs":[{"name":"results","type":"bytes[]","internalType":"bytes[]"}],"stateMutability":"nonpayable"},{"type":"function","name":"proxiableUUID","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"renounceRole","inputs":[{"name":"roleId","type":"uint64","internalType":"uint64"},{"name":"callerConfirmation","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeRole","inputs":[{"name":"roleId","type":"uint64","internalType":"uint64"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"schedule","inputs":[{"name":"target","type":"address","internalType":"address"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"when","type":"uint48","internalType":"uint48"}],"outputs":[{"name":"operationId","type":"bytes32","internalType":"bytes32"},{"name":"nonce","type":"uint32","internalType":"uint32"}],"stateMutability":"nonpayable"},{"type":"function","name":"setGrantDelay","inputs":[{"name":"roleId","type":"uint64","internalType":"uint64"},{"name":"newDelay","type":"uint32","internalType":"uint32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setRoleAdmin","inputs":[{"name":"roleId","type":"uint64","internalType":"uint64"},{"name":"admin","type":"uint64","internalType":"uint64"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setRoleGuardian","inputs":[{"name":"roleId","type":"uint64","internalType":"uint64"},{"name":"guardian","type":"uint64","internalType":"uint64"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setTargetAdminDelay","inputs":[{"name":"target","type":"address","internalType":"address"},{"name":"newDelay","type":"uint32","internalType":"uint32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setTargetClosed","inputs":[{"name":"target","type":"address","internalType":"address"},{"name":"closed","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setTargetFunctionRole","inputs":[{"name":"target","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"},{"name":"roleId","type":"uint64","internalType":"uint64"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"updateAuthority","inputs":[{"name":"target","type":"address","internalType":"address"},{"name":"newAuthority","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"upgradeToAndCall","inputs":[{"name":"newImplementation","type":"address","internalType":"address"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"OperationCanceled","inputs":[{"name":"operationId","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"nonce","type":"uint32","indexed":true,"internalType":"uint32"}],"anonymous":false},{"type":"event","name":"OperationExecuted","inputs":[{"name":"operationId","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"nonce","type":"uint32","indexed":true,"internalType":"uint32"}],"anonymous":false},{"type":"event","name":"OperationScheduled","inputs":[{"name":"operationId","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"nonce","type":"uint32","indexed":true,"internalType":"uint32"},{"name":"schedule","type":"uint48","indexed":false,"internalType":"uint48"},{"name":"caller","type":"address","indexed":false,"internalType":"address"},{"name":"target","type":"address","indexed":false,"internalType":"address"},{"name":"data","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"RoleAdminChanged","inputs":[{"name":"roleId","type":"uint64","indexed":true,"internalType":"uint64"},{"name":"admin","type":"uint64","indexed":true,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"RoleGrantDelayChanged","inputs":[{"name":"roleId","type":"uint64","indexed":true,"internalType":"uint64"},{"name":"delay","type":"uint32","indexed":false,"internalType":"uint32"},{"name":"since","type":"uint48","indexed":false,"internalType":"uint48"}],"anonymous":false},{"type":"event","name":"RoleGranted","inputs":[{"name":"roleId","type":"uint64","indexed":true,"internalType":"uint64"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"delay","type":"uint32","indexed":false,"internalType":"uint32"},{"name":"since","type":"uint48","indexed":false,"internalType":"uint48"},{"name":"newMember","type":"bool","indexed":false,"internalType":"bool"}],"anonymous":false},{"type":"event","name":"RoleGuardianChanged","inputs":[{"name":"roleId","type":"uint64","indexed":true,"internalType":"uint64"},{"name":"guardian","type":"uint64","indexed":true,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"RoleLabel","inputs":[{"name":"roleId","type":"uint64","indexed":true,"internalType":"uint64"},{"name":"label","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"RoleRevoked","inputs":[{"name":"roleId","type":"uint64","indexed":true,"internalType":"uint64"},{"name":"account","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"TargetAdminDelayUpdated","inputs":[{"name":"target","type":"address","indexed":true,"internalType":"address"},{"name":"delay","type":"uint32","indexed":false,"internalType":"uint32"},{"name":"since","type":"uint48","indexed":false,"internalType":"uint48"}],"anonymous":false},{"type":"event","name":"TargetClosed","inputs":[{"name":"target","type":"address","indexed":true,"internalType":"address"},{"name":"closed","type":"bool","indexed":false,"internalType":"bool"}],"anonymous":false},{"type":"event","name":"TargetFunctionRoleUpdated","inputs":[{"name":"target","type":"address","indexed":true,"internalType":"address"},{"name":"selector","type":"bytes4","indexed":false,"internalType":"bytes4"},{"name":"roleId","type":"uint64","indexed":true,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"Upgraded","inputs":[{"name":"implementation","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"error","name":"AccessManagerAlreadyScheduled","inputs":[{"name":"operationId","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"AccessManagerBadConfirmation","inputs":[]},{"type":"error","name":"AccessManagerExpired","inputs":[{"name":"operationId","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"AccessManagerInvalidInitialAdmin","inputs":[{"name":"initialAdmin","type":"address","internalType":"address"}]},{"type":"error","name":"AccessManagerLockedRole","inputs":[{"name":"roleId","type":"uint64","internalType":"uint64"}]},{"type":"error","name":"AccessManagerNotReady","inputs":[{"name":"operationId","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"AccessManagerNotScheduled","inputs":[{"name":"operationId","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"AccessManagerUnauthorizedAccount","inputs":[{"name":"msgsender","type":"address","internalType":"address"},{"name":"roleId","type":"uint64","internalType":"uint64"}]},{"type":"error","name":"AccessManagerUnauthorizedCall","inputs":[{"name":"caller","type":"address","internalType":"address"},{"name":"target","type":"address","internalType":"address"},{"name":"selector","type":"bytes4","internalType":"bytes4"}]},{"type":"error","name":"AccessManagerUnauthorizedCancel","inputs":[{"name":"msgsender","type":"address","internalType":"address"},{"name":"caller","type":"address","internalType":"address"},{"name":"target","type":"address","internalType":"address"},{"name":"selector","type":"bytes4","internalType":"bytes4"}]},{"type":"error","name":"AccessManagerUnauthorizedConsume","inputs":[{"name":"target","type":"address","internalType":"address"}]},{"type":"error","name":"AddressEmptyCode","inputs":[{"name":"target","type":"address","internalType":"address"}]},{"type":"error","name":"ERC1967InvalidImplementation","inputs":[{"name":"implementation","type":"address","internalType":"address"}]},{"type":"error","name":"ERC1967NonPayable","inputs":[]},{"type":"error","name":"FailedCall","inputs":[]},{"type":"error","name":"InsufficientBalance","inputs":[{"name":"balance","type":"uint256","internalType":"uint256"},{"name":"needed","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidInitialization","inputs":[]},{"type":"error","name":"NotInitializing","inputs":[]},{"type":"error","name":"SafeCastOverflowedUintDowncast","inputs":[{"name":"bits","type":"uint8","internalType":"uint8"},{"name":"value","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"UUPSUnauthorizedCallContext","inputs":[]},{"type":"error","name":"UUPSUnsupportedProxiableUUID","inputs":[{"name":"slot","type":"bytes32","internalType":"bytes32"}]}],"bytecode":{"object":"0x60a0806040523460295730608052613fa9908161002e823960805181818161166a01526118430152f35b5f80fdfe60806040526004361015610011575f80fd5b5f803560e01c806308d6122d146121c25780630b0a93ba1461218d57806312be87271461216a578063167bd3951461208d57806318ff183c14611fcc5780631cff79cd14611e1e57806325c471a014611dcf5780633078f11414611d7457806330cae18714611c855780633adc277a14611c565780633ca7c02a14611c335780634136a33c14611be15780634665096d14611bc35780634c1da1e214611b915780634f1ef286146117e557806352962952146116e257806352d1902d14611642578063530dd456146115cc5780636d5115bd1461152457806375b238fc14611508578063853551b81461145f57806394c7d7ee146112fd578063a166aa8914611287578063a64d95ce146110e2578063abd9bd2a146110bd578063ac9650d814610e7e578063ad3cb1cc14610e1d578063b700961314610dc0578063b7d2b16214610d8d578063c4d66de814610952578063cc1b6c8114610934578063d1f856ee146108eb578063d22b5989146107a8578063d6bb62c61461054f578063f801a6981461021e5763fe0776f5146101a6575f80fd5b3461021b57604060031936011261021b576101bf612379565b6101c7612325565b903373ffffffffffffffffffffffffffffffffffffffff8316036101f357906101ef916134c8565b5080f35b6004837f5f159e63000000000000000000000000000000000000000000000000000000008152fd5b80fd5b503461021b57606060031936011261021b57610238612302565b9060243567ffffffffffffffff811161054b576102599036906004016123a7565b919060443565ffffffffffff81168091036105475761027a84838733612c2f565b905061029663ffffffff61028d42613f2b565b92168092612aef565b9015801561052c575b6104b6579065ffffffffffff80921690818082119118021816906102c584828733612800565b938484527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad0260205265ffffffffffff60408520541680151590816104a5575b5061047957604095849361046a87947f82a2da5dee54ea8021c6545b4444620291e07ee83be6dd57edb175062715f3b494868b99527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad02602052600163ffffffff8a8a205460301c160163ffffffff81169989898c9b527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad0260205281812065ffffffffffff88167fffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000008254161790558981527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad0260205220907fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff69ffffffff00000000000083549260301b16911617905573ffffffffffffffffffffffffffffffffffffffff8b519586958652336020870152168b8501526080606085015260808401916127c2565b0390a382519182526020820152f35b602484867f813e9459000000000000000000000000000000000000000000000000000000008252600452fd5b6104af9150613494565b155f610304565b6064847fffffffff000000000000000000000000000000000000000000000000000000008873ffffffffffffffffffffffffffffffffffffffff6104fa8a89612c83565b917f81c6f24b000000000000000000000000000000000000000000000000000000008552336004521660245216604452fd5b50811515801561029f575065ffffffffffff8116821061029f565b8280fd5b5080fd5b503461021b576105779061056236612533565b61056f8183949793612c83565b928685612800565b918284527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad0260205265ffffffffffff604085205416155f146105df57602484847f60a299b0000000000000000000000000000000000000000000000000000000008252600452fd5b73ffffffffffffffffffffffffffffffffffffffff16903382036106b5575b5050602092508082527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad028352604082207fffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000081541690558082527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad02835263ffffffff604083205460301c1680917fbd9ac67a6e2f6463b80927326310338bcbb4bdb7936ce1365ea3e01067e7b9f76040519480a38152f35b73ffffffffffffffffffffffffffffffffffffffff6106d333612a1c565b509516948585527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad006020527fffffffff000000000000000000000000000000000000000000000000000000006040862092169182865260205261074c3361074767ffffffffffffffff6040892054166125e3565b612ab1565b509015908161079f575b50156105fe576084925084604051927f3fe2751c000000000000000000000000000000000000000000000000000000008452336004850152602484015260448301526064820152fd5b9050155f610756565b503461021b57604060031936011261021b576107c2612302565b7fa56b76017453f399ec2327ba00375dbfb1fd070ff854341ad6191e6a2e2de19c73ffffffffffffffffffffffffffffffffffffffff610800612426565b92610809612b3a565b16918284527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad00602052610853816dffffffffffffffffffffffffffff600160408820015416613dd4565b91908486527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad006020526dffffffffffffffffffffffffffff6001604088200191167fffffffffffffffffffffffffffffffffffff00000000000000000000000000008254161790556108e56040519283928390929165ffffffffffff60209163ffffffff604085019616845216910152565b0390a280f35b503461021b57604060031936011261021b57610916610908612379565b610910612325565b90612ab1565b60408051921515835263ffffffff91909116602083015290f35b0390f35b503461021b578060031936011261021b576020604051620697808152f35b503461021b57602060031936011261021b5761096c612302565b907ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00549160ff8360401c16159267ffffffffffffffff811680159081610d85575b6001149081610d7b575b159081610d72575b50610d4a578360017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008316177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055610cf5575b50610a1b613ed4565b610a23613ed4565b610a2b613ed4565b73ffffffffffffffffffffffffffffffffffffffff811615610cc957610a5090612ea7565b5080610c9c575060025f8181527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad016020527fe6aabd1bffdac7ba79de73a083ff79c0386fd48083f0d75b92292f7b67eddc2f80547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000169055907f1fd6dd7631312dfac2205b52913f99de03b4d7e381d5d27d3dbfe0713e6e63408280a360045f8181527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad016020527f0f09c9d7c70962ea814c91d9e26c48598a93bd106bce4571a625a947ad8b815b80547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000169055907f1fd6dd7631312dfac2205b52913f99de03b4d7e381d5d27d3dbfe0713e6e63408280a360035f527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad01602052600160405f200160017fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000825416179055600160037f1fd6dd7631312dfac2205b52913f99de03b4d7e381d5d27d3dbfe0713e6e63405f80a3610c0957005b7fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b807f1871a90c00000000000000000000000000000000000000000000000000000000602492526002600452fd5b6024827f0813ada200000000000000000000000000000000000000000000000000000000815280600452fd5b7fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001668010000000000000001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00555f610a12565b6004837ff92ee8a9000000000000000000000000000000000000000000000000000000008152fd5b9050155f6109bf565b303b1591506109b7565b8591506109ad565b503461021b57604060031936011261021b576101ef610daa612379565b610db2612325565b90610dbb612b3a565b6134c8565b503461021b57606060031936011261021b57610dda612302565b610de2612325565b604435917fffffffff0000000000000000000000000000000000000000000000000000000083168303610e195761091693506128cf565b8380fd5b503461021b578060031936011261021b5750610930604051610e40604082612482565b600581527f352e302e3000000000000000000000000000000000000000000000000000000060208201526040519182916020835260208301906125a0565b503461021b57602060031936011261021b5760043567ffffffffffffffff811161054b57610eb0903690600401612348565b906020604051610ec08282612482565b848152818101917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101368437610ef685612876565b93610f046040519586612482565b8585527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0610f3187612876565b01875b8181106110ae57505086907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301915b87811015611031578060051b8201358381121561102d5782019081359167ffffffffffffffff83116110295785018a833603821361021b578061100d9289610ff96001978b8e6040519483869484860198893784019083820190898252519283915e0101858152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282612482565b5190305af4611006612e78565b9030613d3b565b611017828a61288e565b52611022818961288e565b5001610f66565b8a80fd5b8980fd5b83898860405191838301848452825180915260408401948060408360051b870101940192955b8287106110645785850386f35b90919293828061109e837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08a6001960301865288516125a0565b9601920196019592919092611057565b60608782018501528301610f34565b503461021b5760206110da6110d136612533565b92919091612800565b604051908152f35b503461021b57604060031936011261021b576110fc612379565b611104612426565b61110c612b3a565b67ffffffffffffffff82169167ffffffffffffffff831461125b57818160016111a97ffeb69018ee8b8fd50ea86348f1267d07673379f72cffdeccec63853ee8ce8b48956dffffffffffffffffffffffffffff8361119e6111e39867ffffffffffffffff165f527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad0160205260405f2090565b015460801c16613dd4565b94909267ffffffffffffffff165f527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad0160205260405f2090565b01907fffff0000000000000000000000000000ffffffffffffffffffffffffffffffff7dffffffffffffffffffffffffffff0000000000000000000000000000000083549260801b1691161790556108e56040519283928390929165ffffffffffff60209163ffffffff604085019616845216910152565b602484847f1871a90c000000000000000000000000000000000000000000000000000000008252600452fd5b503461021b57602060031936011261021b5760206112f36112a6612302565b73ffffffffffffffffffffffffffffffffffffffff165f527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad0060205260ff600160405f20015460701c1690565b6040519015158152f35b503461021b5761130c366123d5565b916040517f8fb36037000000000000000000000000000000000000000000000000000000008152602081600481335afa9081156114545785916113d5575b507fffffffff000000000000000000000000000000000000000000000000000000007f8fb36037000000000000000000000000000000000000000000000000000000009116036113a957916113a4916101ef933390612800565b612cb1565b6024847f320ff74800000000000000000000000000000000000000000000000000000000815233600452fd5b90506020813d60201161144c575b816113f060209383612482565b8101031261144857517fffffffff0000000000000000000000000000000000000000000000000000000081168103611448577fffffffff0000000000000000000000000000000000000000000000000000000061134a565b8480fd5b3d91506113e3565b6040513d87823e3d90fd5b503461021b57604060031936011261021b57611479612379565b6024359067ffffffffffffffff8211610547576114a367ffffffffffffffff9236906004016123a7565b9290916114ae612b3a565b1691821580156114f7575b61125b57907f1256f5b5ecb89caec12db449738f2fbcd1ba5806cf38f35413f4e5c15bf6a450916108e56040519283926020845260208401916127c2565b5067ffffffffffffffff83146114b9565b503461021b578060031936011261021b57602090604051908152f35b503461021b57604060031936011261021b5761153e612302565b602435907fffffffff000000000000000000000000000000000000000000000000000000008216809203610547578267ffffffffffffffff9273ffffffffffffffffffffffffffffffffffffffff604093602096501682527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad0085528282209082528452205416604051908152f35b503461021b57602060031936011261021b57602067ffffffffffffffff600161162d6115f6612379565b67ffffffffffffffff165f527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad0160205260405f2090565b01541667ffffffffffffffff60405191168152f35b503461021b578060031936011261021b5773ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001630036116ba5760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b807fe07c8dba0000000000000000000000000000000000000000000000000000000060049252fd5b503461021b57604060031936011261021b576116fc612379565b611704612390565b61170c612b3a565b67ffffffffffffffff821691821580156117d4575b61125b5790600161176c67ffffffffffffffff9367ffffffffffffffff165f527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad0160205260405f2090565b0180547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff6fffffffffffffffff00000000000000008460401b16911617905516907f7a8059630b897b5de4c08ade69f8b90c3ead1f8596d62d10b6c4d14a0afb4ae28380a380f35b5067ffffffffffffffff8314611721565b50604060031936011261021b576117fa612302565b9060243567ffffffffffffffff811161054b573660238201121561054b5761182c9036906024816004013591016124fd565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803014908115611b4f575b50611b275761187c33612a1c565b5015611aa45773ffffffffffffffffffffffffffffffffffffffff831690604051937f52d1902d000000000000000000000000000000000000000000000000000000008552602085600481865afa80958596611a70575b5061190457602484847f4c9c8ce3000000000000000000000000000000000000000000000000000000008252600452fd5b9091847f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8103611a455750813b15611a1a57807fffffffffffffffffffffffff00000000000000000000000000000000000000007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416177f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b8480a281518390156119e757808360206101ef95519101845af46119e1612e78565b91613d3b565b505050346119f25780f35b807fb398979f0000000000000000000000000000000000000000000000000000000060049252fd5b7f4c9c8ce3000000000000000000000000000000000000000000000000000000008452600452602483fd5b7faa1d49a4000000000000000000000000000000000000000000000000000000008552600452602484fd5b9095506020813d602011611a9c575b81611a8c60209383612482565b810103126114485751945f6118d3565b3d9150611a7f565b60846040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4f6e6c792061646d696e2063616e20617574686f72697a65207468652075706760448201527f72616465000000000000000000000000000000000000000000000000000000006064820152fd5b6004827fe07c8dba000000000000000000000000000000000000000000000000000000008152fd5b905073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541614155f61186e565b503461021b57602060031936011261021b576020611bb5611bb0612302565b612766565b63ffffffff60405191168152f35b503461021b578060031936011261021b57602060405162093a808152f35b503461021b57602060031936011261021b5763ffffffff604060209260043581527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad028452205460301c16604051908152f35b503461021b578060031936011261021b57602060405167ffffffffffffffff8152f35b503461021b57602060031936011261021b576020611c7560043561271d565b65ffffffffffff60405191168152f35b503461021b57604060031936011261021b57611c9f612379565b611ca7612390565b611caf612b3a565b67ffffffffffffffff82169182158015611d63575b61125b57906001611d0f67ffffffffffffffff9367ffffffffffffffff165f527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad0160205260405f2090565b018282167fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000082541617905516907f1fd6dd7631312dfac2205b52913f99de03b4d7e381d5d27d3dbfe0713e6e63408380a380f35b5067ffffffffffffffff8314611cc4565b503461021b57604060031936011261021b57608063ffffffff65ffffffffffff81611dae611da0612379565b611da8612325565b90612691565b93929590918560405197168752166020860152166040840152166060820152f35b503461021b57606060031936011261021b57611de9612379565b611df1612325565b906044359063ffffffff82168203610e19576101ef92611e0f612b3a565b611e1882612632565b91613158565b50611e28366123d5565b9091611e3682848333612c2f565b93901580611fbe575b611f7a57611e4f83828433612800565b63ffffffff86951615801590611f61575b611f4b575b50611ec9907f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad035493611ea0611e9a8284612c83565b85612e20565b7f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad035536916124fd565b344710611f1b5790846020958387611eea9551910134855af16119e1612e78565b507f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad035563ffffffff60405191168152f35b604485477fcf47918100000000000000000000000000000000000000000000000000000000825260045234602452fd5b611ec9919450611f5a90612cb1565b9390611e65565b5065ffffffffffff611f728261271d565b161515611e60565b849173ffffffffffffffffffffffffffffffffffffffff6104fa6064957fffffffff0000000000000000000000000000000000000000000000000000000094612c83565b5063ffffffff841615611e3f565b503461208957604060031936011261208957611fe6612302565b73ffffffffffffffffffffffffffffffffffffffff612003612325565b9161200c612b3a565b1690813b156120895773ffffffffffffffffffffffffffffffffffffffff60245f928360405195869485937f7a9e5e4b0000000000000000000000000000000000000000000000000000000085521660048401525af1801561207e57612070575080f35b61207c91505f90612482565b005b6040513d5f823e3d90fd5b5f80fd5b34612089576040600319360112612089576120a6612302565b6024359081151580920361208957602073ffffffffffffffffffffffffffffffffffffffff7f90d4e7bb7e5d933792b3562e1741306f8be94837e1348dacef9b6f1df56eb138926120f5612b3a565b1692835f527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad008252600160405f200180547fffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffff6eff00000000000000000000000000008460701b169116179055604051908152a2005b34612089576020600319360112612089576020611bb5612188612379565b612632565b346120895760206003193601126120895760206121b06121ab612379565b6125e3565b67ffffffffffffffff60405191168152f35b34612089576060600319360112612089576121db612302565b60243567ffffffffffffffff8111612089576121fb903690600401612348565b91906044359067ffffffffffffffff82168092036120895761221e939293612b3a565b73ffffffffffffffffffffffffffffffffffffffff5f9416935b8381101561207c578060051b820135907fffffffff0000000000000000000000000000000000000000000000000000000082168092036120895783867f9ea6790c7dadfd01c9f8b9762b3682607af2c7e79e05a9f9fdf5580dde9491516020600195835f527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad00825260405f20815f52825260405f20857fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000825416179055604051908152a301612238565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361208957565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361208957565b9181601f840112156120895782359167ffffffffffffffff8311612089576020808501948460051b01011161208957565b6004359067ffffffffffffffff8216820361208957565b6024359067ffffffffffffffff8216820361208957565b9181601f840112156120895782359167ffffffffffffffff8311612089576020838186019501011161208957565b9060406003198301126120895760043573ffffffffffffffffffffffffffffffffffffffff8116810361208957916024359067ffffffffffffffff821161208957612422916004016123a7565b9091565b6024359063ffffffff8216820361208957565b6040810190811067ffffffffffffffff82111761245557604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761245557604052565b67ffffffffffffffff811161245557601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b929192612509826124c3565b916125176040519384612482565b829481845281830111612089578281602093845f960137010152565b60606003198201126120895760043573ffffffffffffffffffffffffffffffffffffffff81168103612089579160243573ffffffffffffffffffffffffffffffffffffffff8116810361208957916044359067ffffffffffffffff821161208957612422916004016123a7565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b600161262967ffffffffffffffff9267ffffffffffffffff165f527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad0160205260405f2090565b015460401c1690565b6dffffffffffffffffffffffffffff600161268161268c9367ffffffffffffffff165f527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad0160205260405f2090565b015460801c16613457565b505090565b9073ffffffffffffffffffffffffffffffffffffffff6126ea65ffffffffffff949367ffffffffffffffff165f527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad0160205260405f2090565b91165f5260205260405f2054906127136dffffffffffffffffffffffffffff8360301c16613457565b9490931693909291565b5f527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad0260205265ffffffffffff60405f20541661275981613494565b1561276357505f90565b90565b73ffffffffffffffffffffffffffffffffffffffff165f527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad0060205261268c6dffffffffffffffffffffffffffff600160405f20015416613457565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe093818652868601375f8582860101520116010190565b929061284473ffffffffffffffffffffffffffffffffffffffff936128709360405195869481602087019916895216604085015260608085015260808401916127c2565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282612482565b51902090565b67ffffffffffffffff81116124555760051b60200190565b80518210156128a25760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b9190916129238373ffffffffffffffffffffffffffffffffffffffff165f527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad0060205260ff600160405f20015460701c1690565b15612931575050505f905f90565b73ffffffffffffffffffffffffffffffffffffffff81163003612981575061297b907f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad035492612e20565b14905f90565b9073ffffffffffffffffffffffffffffffffffffffff612a0293165f527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad006020527fffffffff0000000000000000000000000000000000000000000000000000000060405f2091165f5260205267ffffffffffffffff60405f205416612ab1565b919015612a155763ffffffff8216159190565b5f91508190565b73ffffffffffffffffffffffffffffffffffffffff165f9081527f7b4501b7c347294b6ab7642a0f3ba6ad26efef1601fdfb1d54a7ff5bc6709097602052604090205465ffffffffffff81169190612a869060301c6dffffffffffffffffffffffffffff16613457565b509092801515915081612a9857509190565b905065ffffffffffff612aaa42613f2b565b1610159190565b67ffffffffffffffff81811603612acb5750506001905f90565b65ffffffffffff9291612add91612691565b505092168015159081612a9857509190565b9065ffffffffffff8091169116019065ffffffffffff8211612b0d57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b612b4436336135dc565b9015612b4d5750565b63ffffffff16612b9c5767ffffffffffffffff612b6936613752565b5090507ff07e038f000000000000000000000000000000000000000000000000000000005f52336004521660245260445ffd5b612c2c6040516020810190338252306040820152606080820152612c2481602060808201368152365f838301375f8236830101527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f3601160101037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282612482565b519020612cb1565b50565b9092919073ffffffffffffffffffffffffffffffffffffffff84163003612c5a5761242293506136eb565b9192906004841015612c7057505050505f905f90565b61242293612c7d91612c83565b916128cf565b9060041161208957357fffffffff000000000000000000000000000000000000000000000000000000001690565b5f8181527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad026020526040902054909190603081901c63ffffffff169065ffffffffffff1680612d2657837f60a299b0000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b65ffffffffffff612d3642613f2b565b16811115612d6a57837f18cb6b7a000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b612d779093919293613494565b612df5578190805f527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad0260205260405f207fffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000081541690557f76a2a46953689d4861a5d3f6ed883ad7e6af674a21f8e162707159fc9dde614d5f80a390565b7f78a5d6e4000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b907fffffffff000000000000000000000000000000000000000000000000000000006040519173ffffffffffffffffffffffffffffffffffffffff602084019416845216604082015260408152612870606082612482565b3d15612ea2573d90612e89826124c3565b91612e976040519384612482565b82523d5f602084013e565b606090565b73ffffffffffffffffffffffffffffffffffffffff81165f9081527f7b4501b7c347294b6ab7642a0f3ba6ad26efef1601fdfb1d54a7ff5bc6709097602052604090205465ffffffffffff1615908115613047575f7ff98448b987f1428e0e230e1f3c6e2ce15b5693eaf31827fbd0b1ec4b424ae7cf606073ffffffffffffffffffffffffffffffffffffffff612f4684612f4142613f2b565b612aef565b94613027604051612f5681612439565b65ffffffffffff881681526dffffffffffffffffffffffffffff602082018881528880527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad01602052604089208686168a5260205265ffffffffffff8060408b20945116167fffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000084541617835551167fffffffffffffffffffffffff0000000000000000000000000000ffffffffffff73ffffffffffffffffffffffffffff00000000000083549260301b169116179055565b65ffffffffffff604051968688521660208701528660408701521693a390565b73ffffffffffffffffffffffffffffffffffffffff8181165f9081527f7b4501b7c347294b6ab7642a0f3ba6ad26efef1601fdfb1d54a7ff5bc670909760205260408120546131539391927ff98448b987f1428e0e230e1f3c6e2ce15b5693eaf31827fbd0b1ec4b424ae7cf926060926130d590869060301c6dffffffffffffffffffffffffffff16613e6c565b96908680527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad0160205260408720848416885260205260408720907fffffffffffffffffffffffff0000000000000000000000000000ffffffffffff73ffffffffffffffffffffffffffff00000000000083549260301b169116179055565b613027565b9092919267ffffffffffffffff82169167ffffffffffffffff831461342b5773ffffffffffffffffffffffffffffffffffffffff7ff98448b987f1428e0e230e1f3c6e2ce15b5693eaf31827fbd0b1ec4b424ae7cf9265ffffffffffff836131f360609567ffffffffffffffff165f527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad0160205260405f2090565b8484165f526020528160405f2054161598895f1461332f576132286133119163ffffffff61322042613f2b565b911690612aef565b916dffffffffffffffffffffffffffff8a6132926040519361324985612439565b878716855263ffffffff602086019316835267ffffffffffffffff165f527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad0160205260405f2090565b8888165f52602052858060405f20945116167fffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000084541617835551167fffffffffffffffffffffffff0000000000000000000000000000ffffffffffff73ffffffffffffffffffffffffffff00000000000083549260301b169116179055565b63ffffffff604051981688521660208701528660408701521693a390565b50613426816133726133d59367ffffffffffffffff165f527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad0160205260405f2090565b8686165f5260205261339b8a6dffffffffffffffffffffffffffff60405f205460301c16613e6c565b93909167ffffffffffffffff165f527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad0160205260405f2090565b8686165f5260205260405f20907fffffffffffffffffffffffff0000000000000000000000000000ffffffffffff73ffffffffffffffffffffffffffff00000000000083549260301b169116179055565b613311565b827f1871a90c000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b61346042613f2b565b63ffffffff82169165ffffffffffff604082901c811692168211613488575090915f91508190565b60201c63ffffffff1692565b65ffffffffffff62093a8091160165ffffffffffff8111612b0d5765ffffffffffff806134c042613f2b565b169116111590565b67ffffffffffffffff81169167ffffffffffffffff831461342b5761351e8267ffffffffffffffff165f527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad0160205260405f2090565b73ffffffffffffffffffffffffffffffffffffffff82165f5260205265ffffffffffff60405f205416156135d55761359c73ffffffffffffffffffffffffffffffffffffffff9267ffffffffffffffff165f527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad0160205260405f2090565b8282165f526020525f604081205516907ff229baa593af28c41b1d16b748cd7688f0c83aaf92d4be41c44005defe84c1665f80a3600190565b5050505f90565b9060048110613645573073ffffffffffffffffffffffffffffffffffffffff8316146136935761360c905f613a5d565b9290911580613656575b61364d5761362391612ab1565b90156136455763ffffffff808093169116908180821191180218169081159190565b50505f905f90565b5050505f905f90565b50305f9081527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad00602052604090206001015460701c60ff16613616565b9050600411612089577f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad035461297b5f357fffffffff000000000000000000000000000000000000000000000000000000001630612e20565b91906004821061364d573073ffffffffffffffffffffffffffffffffffffffff84161461371c579061360c91613a5d565b6137269250612c83565b61297b7f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad03549130612e20565b5f9060048110613a535780600411612089577fffffffff000000000000000000000000000000000000000000000000000000005f3516907f853551b80000000000000000000000000000000000000000000000000000000082148015613a2a575b8015613a01575b80156139d8575b80156139af575b6139a3577f18ff183c000000000000000000000000000000000000000000000000000000008214801561397a575b8015613951575b613915577f25c471a000000000000000000000000000000000000000000000000000000000821480156138ec575b61387757503082527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad006020526040822090825260205267ffffffffffffffff6040822054169181929190565b905060241161021b578061021b575060043567ffffffffffffffff811681036120895760016138e067ffffffffffffffff9267ffffffffffffffff165f527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad0160205260405f2090565b01541690600191905f90565b507fb7d2b16200000000000000000000000000000000000000000000000000000000821461382b565b9150506024116120895760043573ffffffffffffffffffffffffffffffffffffffff81168091036120895761394990612766565b6001915f9190565b507f08d6122d0000000000000000000000000000000000000000000000000000000082146137fd565b507f167bd3950000000000000000000000000000000000000000000000000000000082146137f6565b5050506001905f905f90565b507fd22b59890000000000000000000000000000000000000000000000000000000082146137c8565b507fa64d95ce0000000000000000000000000000000000000000000000000000000082146137c1565b507f529629520000000000000000000000000000000000000000000000000000000082146137ba565b507f30cae1870000000000000000000000000000000000000000000000000000000082146137b3565b50505f905f905f90565b60048210613a53577fffffffff00000000000000000000000000000000000000000000000000000000613a908383612c83565b16917f853551b80000000000000000000000000000000000000000000000000000000083148015613d12575b8015613ce9575b8015613cc0575b8015613c97575b6139a3577f18ff183c0000000000000000000000000000000000000000000000000000000083148015613c6e575b8015613c45575b613c10577f25c471a00000000000000000000000000000000000000000000000000000000083148015613be7575b613b82575050305f527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad0060205260405f20905f5260205267ffffffffffffffff60405f205416905f91905f90565b909150602411612089576004013567ffffffffffffffff811681036120895760016138e067ffffffffffffffff9267ffffffffffffffff165f527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad0160205260405f2090565b507fb7d2b162000000000000000000000000000000000000000000000000000000008314613b34565b909150602411612089576004013573ffffffffffffffffffffffffffffffffffffffff81168091036120895761394990612766565b507f08d6122d000000000000000000000000000000000000000000000000000000008314613b06565b507f167bd395000000000000000000000000000000000000000000000000000000008314613aff565b507fd22b5989000000000000000000000000000000000000000000000000000000008314613ad1565b507fa64d95ce000000000000000000000000000000000000000000000000000000008314613aca565b507f52962952000000000000000000000000000000000000000000000000000000008314613ac3565b507f30cae187000000000000000000000000000000000000000000000000000000008314613abc565b90613d785750805115613d5057805190602001fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580613dcb575b613d89575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b15613d81565b613de563ffffffff91939293613457565b505092168063ffffffff84168181115f14613e52570363ffffffff8111612b0d57613e3363ffffffff8067ffffffff00000000935b16806206978011816206978018021816612f4142613f2b565b9360201b166dffffffffffff00000000000000008460401b1617179190565b505067ffffffff00000000613e3363ffffffff805f613e1a565b613e7d63ffffffff91939293613457565b505092168063ffffffff84168181115f14613ebb570363ffffffff8111612b0d57613e3363ffffffff67ffffffff00000000925b16612f4142613f2b565b505067ffffffff00000000613e3363ffffffff5f613eb1565b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c1615613f0357565b7fd7e6bcf8000000000000000000000000000000000000000000000000000000005f5260045ffd5b65ffffffffffff8111613f435765ffffffffffff1690565b7f6dfcc650000000000000000000000000000000000000000000000000000000005f52603060045260245260445ffdfea2646970667358221220c0abd5032d446d7babecb00bbe69337c4e4b8a98c6b67fdd87abe147f6ba4a8864736f6c634300081a0033","sourceMap":"574:1559:0:-:0;;;;;;;1171:4:96;1163:13;;574:1559:0;;;;;;1163:13:96;574:1559:0;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x60806040526004361015610011575f80fd5b5f803560e01c806308d6122d146121c25780630b0a93ba1461218d57806312be87271461216a578063167bd3951461208d57806318ff183c14611fcc5780631cff79cd14611e1e57806325c471a014611dcf5780633078f11414611d7457806330cae18714611c855780633adc277a14611c565780633ca7c02a14611c335780634136a33c14611be15780634665096d14611bc35780634c1da1e214611b915780634f1ef286146117e557806352962952146116e257806352d1902d14611642578063530dd456146115cc5780636d5115bd1461152457806375b238fc14611508578063853551b81461145f57806394c7d7ee146112fd578063a166aa8914611287578063a64d95ce146110e2578063abd9bd2a146110bd578063ac9650d814610e7e578063ad3cb1cc14610e1d578063b700961314610dc0578063b7d2b16214610d8d578063c4d66de814610952578063cc1b6c8114610934578063d1f856ee146108eb578063d22b5989146107a8578063d6bb62c61461054f578063f801a6981461021e5763fe0776f5146101a6575f80fd5b3461021b57604060031936011261021b576101bf612379565b6101c7612325565b903373ffffffffffffffffffffffffffffffffffffffff8316036101f357906101ef916134c8565b5080f35b6004837f5f159e63000000000000000000000000000000000000000000000000000000008152fd5b80fd5b503461021b57606060031936011261021b57610238612302565b9060243567ffffffffffffffff811161054b576102599036906004016123a7565b919060443565ffffffffffff81168091036105475761027a84838733612c2f565b905061029663ffffffff61028d42613f2b565b92168092612aef565b9015801561052c575b6104b6579065ffffffffffff80921690818082119118021816906102c584828733612800565b938484527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad0260205265ffffffffffff60408520541680151590816104a5575b5061047957604095849361046a87947f82a2da5dee54ea8021c6545b4444620291e07ee83be6dd57edb175062715f3b494868b99527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad02602052600163ffffffff8a8a205460301c160163ffffffff81169989898c9b527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad0260205281812065ffffffffffff88167fffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000008254161790558981527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad0260205220907fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff69ffffffff00000000000083549260301b16911617905573ffffffffffffffffffffffffffffffffffffffff8b519586958652336020870152168b8501526080606085015260808401916127c2565b0390a382519182526020820152f35b602484867f813e9459000000000000000000000000000000000000000000000000000000008252600452fd5b6104af9150613494565b155f610304565b6064847fffffffff000000000000000000000000000000000000000000000000000000008873ffffffffffffffffffffffffffffffffffffffff6104fa8a89612c83565b917f81c6f24b000000000000000000000000000000000000000000000000000000008552336004521660245216604452fd5b50811515801561029f575065ffffffffffff8116821061029f565b8280fd5b5080fd5b503461021b576105779061056236612533565b61056f8183949793612c83565b928685612800565b918284527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad0260205265ffffffffffff604085205416155f146105df57602484847f60a299b0000000000000000000000000000000000000000000000000000000008252600452fd5b73ffffffffffffffffffffffffffffffffffffffff16903382036106b5575b5050602092508082527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad028352604082207fffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000081541690558082527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad02835263ffffffff604083205460301c1680917fbd9ac67a6e2f6463b80927326310338bcbb4bdb7936ce1365ea3e01067e7b9f76040519480a38152f35b73ffffffffffffffffffffffffffffffffffffffff6106d333612a1c565b509516948585527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad006020527fffffffff000000000000000000000000000000000000000000000000000000006040862092169182865260205261074c3361074767ffffffffffffffff6040892054166125e3565b612ab1565b509015908161079f575b50156105fe576084925084604051927f3fe2751c000000000000000000000000000000000000000000000000000000008452336004850152602484015260448301526064820152fd5b9050155f610756565b503461021b57604060031936011261021b576107c2612302565b7fa56b76017453f399ec2327ba00375dbfb1fd070ff854341ad6191e6a2e2de19c73ffffffffffffffffffffffffffffffffffffffff610800612426565b92610809612b3a565b16918284527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad00602052610853816dffffffffffffffffffffffffffff600160408820015416613dd4565b91908486527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad006020526dffffffffffffffffffffffffffff6001604088200191167fffffffffffffffffffffffffffffffffffff00000000000000000000000000008254161790556108e56040519283928390929165ffffffffffff60209163ffffffff604085019616845216910152565b0390a280f35b503461021b57604060031936011261021b57610916610908612379565b610910612325565b90612ab1565b60408051921515835263ffffffff91909116602083015290f35b0390f35b503461021b578060031936011261021b576020604051620697808152f35b503461021b57602060031936011261021b5761096c612302565b907ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00549160ff8360401c16159267ffffffffffffffff811680159081610d85575b6001149081610d7b575b159081610d72575b50610d4a578360017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008316177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055610cf5575b50610a1b613ed4565b610a23613ed4565b610a2b613ed4565b73ffffffffffffffffffffffffffffffffffffffff811615610cc957610a5090612ea7565b5080610c9c575060025f8181527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad016020527fe6aabd1bffdac7ba79de73a083ff79c0386fd48083f0d75b92292f7b67eddc2f80547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000169055907f1fd6dd7631312dfac2205b52913f99de03b4d7e381d5d27d3dbfe0713e6e63408280a360045f8181527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad016020527f0f09c9d7c70962ea814c91d9e26c48598a93bd106bce4571a625a947ad8b815b80547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000169055907f1fd6dd7631312dfac2205b52913f99de03b4d7e381d5d27d3dbfe0713e6e63408280a360035f527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad01602052600160405f200160017fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000825416179055600160037f1fd6dd7631312dfac2205b52913f99de03b4d7e381d5d27d3dbfe0713e6e63405f80a3610c0957005b7fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b807f1871a90c00000000000000000000000000000000000000000000000000000000602492526002600452fd5b6024827f0813ada200000000000000000000000000000000000000000000000000000000815280600452fd5b7fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001668010000000000000001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00555f610a12565b6004837ff92ee8a9000000000000000000000000000000000000000000000000000000008152fd5b9050155f6109bf565b303b1591506109b7565b8591506109ad565b503461021b57604060031936011261021b576101ef610daa612379565b610db2612325565b90610dbb612b3a565b6134c8565b503461021b57606060031936011261021b57610dda612302565b610de2612325565b604435917fffffffff0000000000000000000000000000000000000000000000000000000083168303610e195761091693506128cf565b8380fd5b503461021b578060031936011261021b5750610930604051610e40604082612482565b600581527f352e302e3000000000000000000000000000000000000000000000000000000060208201526040519182916020835260208301906125a0565b503461021b57602060031936011261021b5760043567ffffffffffffffff811161054b57610eb0903690600401612348565b906020604051610ec08282612482565b848152818101917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101368437610ef685612876565b93610f046040519586612482565b8585527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0610f3187612876565b01875b8181106110ae57505086907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301915b87811015611031578060051b8201358381121561102d5782019081359167ffffffffffffffff83116110295785018a833603821361021b578061100d9289610ff96001978b8e6040519483869484860198893784019083820190898252519283915e0101858152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282612482565b5190305af4611006612e78565b9030613d3b565b611017828a61288e565b52611022818961288e565b5001610f66565b8a80fd5b8980fd5b83898860405191838301848452825180915260408401948060408360051b870101940192955b8287106110645785850386f35b90919293828061109e837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08a6001960301865288516125a0565b9601920196019592919092611057565b60608782018501528301610f34565b503461021b5760206110da6110d136612533565b92919091612800565b604051908152f35b503461021b57604060031936011261021b576110fc612379565b611104612426565b61110c612b3a565b67ffffffffffffffff82169167ffffffffffffffff831461125b57818160016111a97ffeb69018ee8b8fd50ea86348f1267d07673379f72cffdeccec63853ee8ce8b48956dffffffffffffffffffffffffffff8361119e6111e39867ffffffffffffffff165f527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad0160205260405f2090565b015460801c16613dd4565b94909267ffffffffffffffff165f527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad0160205260405f2090565b01907fffff0000000000000000000000000000ffffffffffffffffffffffffffffffff7dffffffffffffffffffffffffffff0000000000000000000000000000000083549260801b1691161790556108e56040519283928390929165ffffffffffff60209163ffffffff604085019616845216910152565b602484847f1871a90c000000000000000000000000000000000000000000000000000000008252600452fd5b503461021b57602060031936011261021b5760206112f36112a6612302565b73ffffffffffffffffffffffffffffffffffffffff165f527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad0060205260ff600160405f20015460701c1690565b6040519015158152f35b503461021b5761130c366123d5565b916040517f8fb36037000000000000000000000000000000000000000000000000000000008152602081600481335afa9081156114545785916113d5575b507fffffffff000000000000000000000000000000000000000000000000000000007f8fb36037000000000000000000000000000000000000000000000000000000009116036113a957916113a4916101ef933390612800565b612cb1565b6024847f320ff74800000000000000000000000000000000000000000000000000000000815233600452fd5b90506020813d60201161144c575b816113f060209383612482565b8101031261144857517fffffffff0000000000000000000000000000000000000000000000000000000081168103611448577fffffffff0000000000000000000000000000000000000000000000000000000061134a565b8480fd5b3d91506113e3565b6040513d87823e3d90fd5b503461021b57604060031936011261021b57611479612379565b6024359067ffffffffffffffff8211610547576114a367ffffffffffffffff9236906004016123a7565b9290916114ae612b3a565b1691821580156114f7575b61125b57907f1256f5b5ecb89caec12db449738f2fbcd1ba5806cf38f35413f4e5c15bf6a450916108e56040519283926020845260208401916127c2565b5067ffffffffffffffff83146114b9565b503461021b578060031936011261021b57602090604051908152f35b503461021b57604060031936011261021b5761153e612302565b602435907fffffffff000000000000000000000000000000000000000000000000000000008216809203610547578267ffffffffffffffff9273ffffffffffffffffffffffffffffffffffffffff604093602096501682527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad0085528282209082528452205416604051908152f35b503461021b57602060031936011261021b57602067ffffffffffffffff600161162d6115f6612379565b67ffffffffffffffff165f527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad0160205260405f2090565b01541667ffffffffffffffff60405191168152f35b503461021b578060031936011261021b5773ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001630036116ba5760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b807fe07c8dba0000000000000000000000000000000000000000000000000000000060049252fd5b503461021b57604060031936011261021b576116fc612379565b611704612390565b61170c612b3a565b67ffffffffffffffff821691821580156117d4575b61125b5790600161176c67ffffffffffffffff9367ffffffffffffffff165f527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad0160205260405f2090565b0180547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff6fffffffffffffffff00000000000000008460401b16911617905516907f7a8059630b897b5de4c08ade69f8b90c3ead1f8596d62d10b6c4d14a0afb4ae28380a380f35b5067ffffffffffffffff8314611721565b50604060031936011261021b576117fa612302565b9060243567ffffffffffffffff811161054b573660238201121561054b5761182c9036906024816004013591016124fd565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803014908115611b4f575b50611b275761187c33612a1c565b5015611aa45773ffffffffffffffffffffffffffffffffffffffff831690604051937f52d1902d000000000000000000000000000000000000000000000000000000008552602085600481865afa80958596611a70575b5061190457602484847f4c9c8ce3000000000000000000000000000000000000000000000000000000008252600452fd5b9091847f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8103611a455750813b15611a1a57807fffffffffffffffffffffffff00000000000000000000000000000000000000007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416177f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b8480a281518390156119e757808360206101ef95519101845af46119e1612e78565b91613d3b565b505050346119f25780f35b807fb398979f0000000000000000000000000000000000000000000000000000000060049252fd5b7f4c9c8ce3000000000000000000000000000000000000000000000000000000008452600452602483fd5b7faa1d49a4000000000000000000000000000000000000000000000000000000008552600452602484fd5b9095506020813d602011611a9c575b81611a8c60209383612482565b810103126114485751945f6118d3565b3d9150611a7f565b60846040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4f6e6c792061646d696e2063616e20617574686f72697a65207468652075706760448201527f72616465000000000000000000000000000000000000000000000000000000006064820152fd5b6004827fe07c8dba000000000000000000000000000000000000000000000000000000008152fd5b905073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541614155f61186e565b503461021b57602060031936011261021b576020611bb5611bb0612302565b612766565b63ffffffff60405191168152f35b503461021b578060031936011261021b57602060405162093a808152f35b503461021b57602060031936011261021b5763ffffffff604060209260043581527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad028452205460301c16604051908152f35b503461021b578060031936011261021b57602060405167ffffffffffffffff8152f35b503461021b57602060031936011261021b576020611c7560043561271d565b65ffffffffffff60405191168152f35b503461021b57604060031936011261021b57611c9f612379565b611ca7612390565b611caf612b3a565b67ffffffffffffffff82169182158015611d63575b61125b57906001611d0f67ffffffffffffffff9367ffffffffffffffff165f527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad0160205260405f2090565b018282167fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000082541617905516907f1fd6dd7631312dfac2205b52913f99de03b4d7e381d5d27d3dbfe0713e6e63408380a380f35b5067ffffffffffffffff8314611cc4565b503461021b57604060031936011261021b57608063ffffffff65ffffffffffff81611dae611da0612379565b611da8612325565b90612691565b93929590918560405197168752166020860152166040840152166060820152f35b503461021b57606060031936011261021b57611de9612379565b611df1612325565b906044359063ffffffff82168203610e19576101ef92611e0f612b3a565b611e1882612632565b91613158565b50611e28366123d5565b9091611e3682848333612c2f565b93901580611fbe575b611f7a57611e4f83828433612800565b63ffffffff86951615801590611f61575b611f4b575b50611ec9907f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad035493611ea0611e9a8284612c83565b85612e20565b7f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad035536916124fd565b344710611f1b5790846020958387611eea9551910134855af16119e1612e78565b507f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad035563ffffffff60405191168152f35b604485477fcf47918100000000000000000000000000000000000000000000000000000000825260045234602452fd5b611ec9919450611f5a90612cb1565b9390611e65565b5065ffffffffffff611f728261271d565b161515611e60565b849173ffffffffffffffffffffffffffffffffffffffff6104fa6064957fffffffff0000000000000000000000000000000000000000000000000000000094612c83565b5063ffffffff841615611e3f565b503461208957604060031936011261208957611fe6612302565b73ffffffffffffffffffffffffffffffffffffffff612003612325565b9161200c612b3a565b1690813b156120895773ffffffffffffffffffffffffffffffffffffffff60245f928360405195869485937f7a9e5e4b0000000000000000000000000000000000000000000000000000000085521660048401525af1801561207e57612070575080f35b61207c91505f90612482565b005b6040513d5f823e3d90fd5b5f80fd5b34612089576040600319360112612089576120a6612302565b6024359081151580920361208957602073ffffffffffffffffffffffffffffffffffffffff7f90d4e7bb7e5d933792b3562e1741306f8be94837e1348dacef9b6f1df56eb138926120f5612b3a565b1692835f527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad008252600160405f200180547fffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffff6eff00000000000000000000000000008460701b169116179055604051908152a2005b34612089576020600319360112612089576020611bb5612188612379565b612632565b346120895760206003193601126120895760206121b06121ab612379565b6125e3565b67ffffffffffffffff60405191168152f35b34612089576060600319360112612089576121db612302565b60243567ffffffffffffffff8111612089576121fb903690600401612348565b91906044359067ffffffffffffffff82168092036120895761221e939293612b3a565b73ffffffffffffffffffffffffffffffffffffffff5f9416935b8381101561207c578060051b820135907fffffffff0000000000000000000000000000000000000000000000000000000082168092036120895783867f9ea6790c7dadfd01c9f8b9762b3682607af2c7e79e05a9f9fdf5580dde9491516020600195835f527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad00825260405f20815f52825260405f20857fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000825416179055604051908152a301612238565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361208957565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361208957565b9181601f840112156120895782359167ffffffffffffffff8311612089576020808501948460051b01011161208957565b6004359067ffffffffffffffff8216820361208957565b6024359067ffffffffffffffff8216820361208957565b9181601f840112156120895782359167ffffffffffffffff8311612089576020838186019501011161208957565b9060406003198301126120895760043573ffffffffffffffffffffffffffffffffffffffff8116810361208957916024359067ffffffffffffffff821161208957612422916004016123a7565b9091565b6024359063ffffffff8216820361208957565b6040810190811067ffffffffffffffff82111761245557604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761245557604052565b67ffffffffffffffff811161245557601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b929192612509826124c3565b916125176040519384612482565b829481845281830111612089578281602093845f960137010152565b60606003198201126120895760043573ffffffffffffffffffffffffffffffffffffffff81168103612089579160243573ffffffffffffffffffffffffffffffffffffffff8116810361208957916044359067ffffffffffffffff821161208957612422916004016123a7565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b600161262967ffffffffffffffff9267ffffffffffffffff165f527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad0160205260405f2090565b015460401c1690565b6dffffffffffffffffffffffffffff600161268161268c9367ffffffffffffffff165f527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad0160205260405f2090565b015460801c16613457565b505090565b9073ffffffffffffffffffffffffffffffffffffffff6126ea65ffffffffffff949367ffffffffffffffff165f527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad0160205260405f2090565b91165f5260205260405f2054906127136dffffffffffffffffffffffffffff8360301c16613457565b9490931693909291565b5f527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad0260205265ffffffffffff60405f20541661275981613494565b1561276357505f90565b90565b73ffffffffffffffffffffffffffffffffffffffff165f527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad0060205261268c6dffffffffffffffffffffffffffff600160405f20015416613457565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe093818652868601375f8582860101520116010190565b929061284473ffffffffffffffffffffffffffffffffffffffff936128709360405195869481602087019916895216604085015260608085015260808401916127c2565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282612482565b51902090565b67ffffffffffffffff81116124555760051b60200190565b80518210156128a25760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b9190916129238373ffffffffffffffffffffffffffffffffffffffff165f527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad0060205260ff600160405f20015460701c1690565b15612931575050505f905f90565b73ffffffffffffffffffffffffffffffffffffffff81163003612981575061297b907f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad035492612e20565b14905f90565b9073ffffffffffffffffffffffffffffffffffffffff612a0293165f527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad006020527fffffffff0000000000000000000000000000000000000000000000000000000060405f2091165f5260205267ffffffffffffffff60405f205416612ab1565b919015612a155763ffffffff8216159190565b5f91508190565b73ffffffffffffffffffffffffffffffffffffffff165f9081527f7b4501b7c347294b6ab7642a0f3ba6ad26efef1601fdfb1d54a7ff5bc6709097602052604090205465ffffffffffff81169190612a869060301c6dffffffffffffffffffffffffffff16613457565b509092801515915081612a9857509190565b905065ffffffffffff612aaa42613f2b565b1610159190565b67ffffffffffffffff81811603612acb5750506001905f90565b65ffffffffffff9291612add91612691565b505092168015159081612a9857509190565b9065ffffffffffff8091169116019065ffffffffffff8211612b0d57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b612b4436336135dc565b9015612b4d5750565b63ffffffff16612b9c5767ffffffffffffffff612b6936613752565b5090507ff07e038f000000000000000000000000000000000000000000000000000000005f52336004521660245260445ffd5b612c2c6040516020810190338252306040820152606080820152612c2481602060808201368152365f838301375f8236830101527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f3601160101037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282612482565b519020612cb1565b50565b9092919073ffffffffffffffffffffffffffffffffffffffff84163003612c5a5761242293506136eb565b9192906004841015612c7057505050505f905f90565b61242293612c7d91612c83565b916128cf565b9060041161208957357fffffffff000000000000000000000000000000000000000000000000000000001690565b5f8181527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad026020526040902054909190603081901c63ffffffff169065ffffffffffff1680612d2657837f60a299b0000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b65ffffffffffff612d3642613f2b565b16811115612d6a57837f18cb6b7a000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b612d779093919293613494565b612df5578190805f527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad0260205260405f207fffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000081541690557f76a2a46953689d4861a5d3f6ed883ad7e6af674a21f8e162707159fc9dde614d5f80a390565b7f78a5d6e4000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b907fffffffff000000000000000000000000000000000000000000000000000000006040519173ffffffffffffffffffffffffffffffffffffffff602084019416845216604082015260408152612870606082612482565b3d15612ea2573d90612e89826124c3565b91612e976040519384612482565b82523d5f602084013e565b606090565b73ffffffffffffffffffffffffffffffffffffffff81165f9081527f7b4501b7c347294b6ab7642a0f3ba6ad26efef1601fdfb1d54a7ff5bc6709097602052604090205465ffffffffffff1615908115613047575f7ff98448b987f1428e0e230e1f3c6e2ce15b5693eaf31827fbd0b1ec4b424ae7cf606073ffffffffffffffffffffffffffffffffffffffff612f4684612f4142613f2b565b612aef565b94613027604051612f5681612439565b65ffffffffffff881681526dffffffffffffffffffffffffffff602082018881528880527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad01602052604089208686168a5260205265ffffffffffff8060408b20945116167fffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000084541617835551167fffffffffffffffffffffffff0000000000000000000000000000ffffffffffff73ffffffffffffffffffffffffffff00000000000083549260301b169116179055565b65ffffffffffff604051968688521660208701528660408701521693a390565b73ffffffffffffffffffffffffffffffffffffffff8181165f9081527f7b4501b7c347294b6ab7642a0f3ba6ad26efef1601fdfb1d54a7ff5bc670909760205260408120546131539391927ff98448b987f1428e0e230e1f3c6e2ce15b5693eaf31827fbd0b1ec4b424ae7cf926060926130d590869060301c6dffffffffffffffffffffffffffff16613e6c565b96908680527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad0160205260408720848416885260205260408720907fffffffffffffffffffffffff0000000000000000000000000000ffffffffffff73ffffffffffffffffffffffffffff00000000000083549260301b169116179055565b613027565b9092919267ffffffffffffffff82169167ffffffffffffffff831461342b5773ffffffffffffffffffffffffffffffffffffffff7ff98448b987f1428e0e230e1f3c6e2ce15b5693eaf31827fbd0b1ec4b424ae7cf9265ffffffffffff836131f360609567ffffffffffffffff165f527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad0160205260405f2090565b8484165f526020528160405f2054161598895f1461332f576132286133119163ffffffff61322042613f2b565b911690612aef565b916dffffffffffffffffffffffffffff8a6132926040519361324985612439565b878716855263ffffffff602086019316835267ffffffffffffffff165f527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad0160205260405f2090565b8888165f52602052858060405f20945116167fffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000084541617835551167fffffffffffffffffffffffff0000000000000000000000000000ffffffffffff73ffffffffffffffffffffffffffff00000000000083549260301b169116179055565b63ffffffff604051981688521660208701528660408701521693a390565b50613426816133726133d59367ffffffffffffffff165f527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad0160205260405f2090565b8686165f5260205261339b8a6dffffffffffffffffffffffffffff60405f205460301c16613e6c565b93909167ffffffffffffffff165f527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad0160205260405f2090565b8686165f5260205260405f20907fffffffffffffffffffffffff0000000000000000000000000000ffffffffffff73ffffffffffffffffffffffffffff00000000000083549260301b169116179055565b613311565b827f1871a90c000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b61346042613f2b565b63ffffffff82169165ffffffffffff604082901c811692168211613488575090915f91508190565b60201c63ffffffff1692565b65ffffffffffff62093a8091160165ffffffffffff8111612b0d5765ffffffffffff806134c042613f2b565b169116111590565b67ffffffffffffffff81169167ffffffffffffffff831461342b5761351e8267ffffffffffffffff165f527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad0160205260405f2090565b73ffffffffffffffffffffffffffffffffffffffff82165f5260205265ffffffffffff60405f205416156135d55761359c73ffffffffffffffffffffffffffffffffffffffff9267ffffffffffffffff165f527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad0160205260405f2090565b8282165f526020525f604081205516907ff229baa593af28c41b1d16b748cd7688f0c83aaf92d4be41c44005defe84c1665f80a3600190565b5050505f90565b9060048110613645573073ffffffffffffffffffffffffffffffffffffffff8316146136935761360c905f613a5d565b9290911580613656575b61364d5761362391612ab1565b90156136455763ffffffff808093169116908180821191180218169081159190565b50505f905f90565b5050505f905f90565b50305f9081527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad00602052604090206001015460701c60ff16613616565b9050600411612089577f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad035461297b5f357fffffffff000000000000000000000000000000000000000000000000000000001630612e20565b91906004821061364d573073ffffffffffffffffffffffffffffffffffffffff84161461371c579061360c91613a5d565b6137269250612c83565b61297b7f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad03549130612e20565b5f9060048110613a535780600411612089577fffffffff000000000000000000000000000000000000000000000000000000005f3516907f853551b80000000000000000000000000000000000000000000000000000000082148015613a2a575b8015613a01575b80156139d8575b80156139af575b6139a3577f18ff183c000000000000000000000000000000000000000000000000000000008214801561397a575b8015613951575b613915577f25c471a000000000000000000000000000000000000000000000000000000000821480156138ec575b61387757503082527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad006020526040822090825260205267ffffffffffffffff6040822054169181929190565b905060241161021b578061021b575060043567ffffffffffffffff811681036120895760016138e067ffffffffffffffff9267ffffffffffffffff165f527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad0160205260405f2090565b01541690600191905f90565b507fb7d2b16200000000000000000000000000000000000000000000000000000000821461382b565b9150506024116120895760043573ffffffffffffffffffffffffffffffffffffffff81168091036120895761394990612766565b6001915f9190565b507f08d6122d0000000000000000000000000000000000000000000000000000000082146137fd565b507f167bd3950000000000000000000000000000000000000000000000000000000082146137f6565b5050506001905f905f90565b507fd22b59890000000000000000000000000000000000000000000000000000000082146137c8565b507fa64d95ce0000000000000000000000000000000000000000000000000000000082146137c1565b507f529629520000000000000000000000000000000000000000000000000000000082146137ba565b507f30cae1870000000000000000000000000000000000000000000000000000000082146137b3565b50505f905f905f90565b60048210613a53577fffffffff00000000000000000000000000000000000000000000000000000000613a908383612c83565b16917f853551b80000000000000000000000000000000000000000000000000000000083148015613d12575b8015613ce9575b8015613cc0575b8015613c97575b6139a3577f18ff183c0000000000000000000000000000000000000000000000000000000083148015613c6e575b8015613c45575b613c10577f25c471a00000000000000000000000000000000000000000000000000000000083148015613be7575b613b82575050305f527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad0060205260405f20905f5260205267ffffffffffffffff60405f205416905f91905f90565b909150602411612089576004013567ffffffffffffffff811681036120895760016138e067ffffffffffffffff9267ffffffffffffffff165f527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad0160205260405f2090565b507fb7d2b162000000000000000000000000000000000000000000000000000000008314613b34565b909150602411612089576004013573ffffffffffffffffffffffffffffffffffffffff81168091036120895761394990612766565b507f08d6122d000000000000000000000000000000000000000000000000000000008314613b06565b507f167bd395000000000000000000000000000000000000000000000000000000008314613aff565b507fd22b5989000000000000000000000000000000000000000000000000000000008314613ad1565b507fa64d95ce000000000000000000000000000000000000000000000000000000008314613aca565b507f52962952000000000000000000000000000000000000000000000000000000008314613ac3565b507f30cae187000000000000000000000000000000000000000000000000000000008314613abc565b90613d785750805115613d5057805190602001fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580613dcb575b613d89575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b15613d81565b613de563ffffffff91939293613457565b505092168063ffffffff84168181115f14613e52570363ffffffff8111612b0d57613e3363ffffffff8067ffffffff00000000935b16806206978011816206978018021816612f4142613f2b565b9360201b166dffffffffffff00000000000000008460401b1617179190565b505067ffffffff00000000613e3363ffffffff805f613e1a565b613e7d63ffffffff91939293613457565b505092168063ffffffff84168181115f14613ebb570363ffffffff8111612b0d57613e3363ffffffff67ffffffff00000000925b16612f4142613f2b565b505067ffffffff00000000613e3363ffffffff5f613eb1565b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c1615613f0357565b7fd7e6bcf8000000000000000000000000000000000000000000000000000000005f5260045ffd5b65ffffffffffff8111613f435765ffffffffffff1690565b7f6dfcc650000000000000000000000000000000000000000000000000000000005f52603060045260245260445ffdfea2646970667358221220c0abd5032d446d7babecb00bbe69337c4e4b8a98c6b67fdd87abe147f6ba4a8864736f6c634300081a0033","sourceMap":"574:1559:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3256:31:154;574:1559:0;3256:31:154;;;574:1559:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;574:1559:0;-1:-1:-1;;;574:1559:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;574:1559:0;;;;;;;:::i;:::-;;;:::i;:::-;966:10:99;;574:1559:0;;;12337:34:94;12333:102;;12444:39;;;;:::i;:::-;;574:1559:0;;12333:102:94;574:1559:0;12394:30:94;;;;;574:1559:0;;;;;;;;;-1:-1:-1;;574:1559:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;20367:38:94;966:10:99;;;;20367:38:94;:::i;:::-;837:15:177;;20433:26:94;574:1559:0;819:34:177;837:15;819:34;:::i;:::-;574:1559:0;;20433:26:94;;;:::i;:::-;20566:12;;:44;;;;574:1559:0;20562:149:94;;574:1559:0;;;;;3281:5:171;;;;;3066;;574:1559:0;3060:42:171;574:1559:0;966:10:99;20927:35:94;966:10:99;;;;20927:35:94;:::i;:::-;574:1559:0;;;;21796:12:94;574:1559:0;;;;;;;;21845:18:94;;;:48;;;;574:1559:0;21841:128:94;;;574:1559:0;;;;;;;21287:66:94;574:1559:0;;;;;21796:12:94;574:1559:0;;21160:1:94;574:1559:0;;;;;;;;;;;;;;;;;;21796:12:94;574:1559:0;;;;;;;;;;;;;;;;;;21796:12:94;574:1559:0;;;;;;;;;;;;;;;;;;;;;;;;;966:10:99;574:1559:0;;;;;;;;;;;;;;;;;;;:::i;:::-;21287:66:94;;;574:1559:0;;;;;;;;;;21841:128:94;574:1559:0;21916:42:94;;;;;574:1559:0;;21916:42:94;21845:48;21868:25;;;;:::i;:::-;21867:26;21845:48;;;20562:149;574:1559:0;20679:20:94;574:1559:0;20679:20:94;574:1559:0;20679:20:94;;;;:::i;:::-;20633:67;;;;966:10:99;574:1559:0;;;;;;;;20633:67:94;20566:44;20583:8;;;;:26;;20566:44;20583:26;574:1559:0;;;;20595:14:94;;20566:44;;574:1559:0;;;;;;;;;;;;;23892:35:94;574:1559:0;;;;:::i;:::-;23839:20:94;;;;;;;:::i;:::-;23892:35;;;;:::i;:::-;574:1559:0;;;;23941:12:94;574:1559:0;;;;;;;;23941:40:94;23937:616;574:1559:0;;;;24004:38:94;;;;;574:1559:0;;24004:38:94;23937:616;574:1559:0;;966:10:99;;24063:19:94;;24059:494;;23937:616;;;574:1559:0;23937:616:94;;574:1559:0;;;23941:12:94;574:1559:0;;;;;;;;;;;;;;23941:12:94;574:1559:0;;;;;;;;;;;;24715:37:94;574:1559:0;;24715:37:94;;;574:1559:0;;;24059:494:94;574:1559:0;24250:30:94;966:10:99;24250:30:94;:::i;:::-;574:1559:0;;;;;;;6760:71:94;574:1559:0;;;;;;;;;;;;;;24316:76:94;966:10:99;24324:56:94;574:1559:0;;;;;;24324:56:94;:::i;:::-;24316:76;:::i;:::-;24410:8;;;:23;;;;24059:494;24406:137;;24059:494;24406:137;24460:68;574:1559:0;;;;;24460:68:94;;;;966:10:99;574:1559:0;24460:68:94;;574:1559:0;;;;;;;;;;;;;24460:68:94;24410:23;24422:11;;;24410:23;;;574:1559:0;;;;;;-1:-1:-1;;574:1559:0;;;;;;;:::i;:::-;18555:49:94;574:1559:0;;;:::i;:::-;7025:72:94;;;:::i;:::-;574:1559:0;;;;;6760:71:94;574:1559:0;;18475:64:94;574:1559:0;;18475:29:94;574:1559:0;;;18475:29:94;574:1559:0;;18475:64:94;:::i;:::-;574:1559:0;;;;;6760:71:94;574:1559:0;;;18475:29:94;574:1559:0;;;18434:29:94;574:1559:0;;;;;;;;;18555:49:94;574:1559:0;;18555:49:94;;;;574:1559:0;;;;;;;;;;;;;;;;;;;18555:49:94;;;;574:1559:0;;;;;;;;-1:-1:-1;;574:1559:0;;;;;;;;:::i;:::-;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;574:1559:0;;;;;;;;8921:6:94;574:1559:0;;;;;;;;;-1:-1:-1;;574:1559:0;;;;;;;:::i;:::-;;8837:64:95;574:1559:0;;;;;;;4301:16:95;574:1559:0;;;;4726:16:95;;:34;;;;574:1559:0;4805:1:95;4790:16;:50;;;;574:1559:0;4855:13:95;:30;;;;574:1559:0;4851:91:95;;;574:1559:0;4805:1:95;574:1559:0;;;;8837:64:95;574:1559:0;4979:67:95;;574:1559:0;6893:76:95;;;:::i;:::-;;;:::i;:::-;;;:::i;:::-;574:1559:0;;;7475:26:94;7471:108;;7661:42;;;:::i;:::-;;15507:45;15503:114;;-1:-1:-1;574:1559:0;-1:-1:-1;574:1559:0;;;16308:8:94;574:1559:0;;15627:22:94;574:1559:0;;;;;;-1:-1:-1;15673:31:94;-1:-1:-1;;15673:31:94;574:1559:0;-1:-1:-1;574:1559:0;;;16308:8:94;574:1559:0;;15627:22:94;574:1559:0;;;;;;-1:-1:-1;15673:31:94;-1:-1:-1;;15673:31:94;574:1559:0;-1:-1:-1;574:1559:0;16308:8:94;574:1559:0;;4805:1:95;574:1559:0;-1:-1:-1;574:1559:0;15627:22:94;4805:1:95;574:1559:0;;;;;;;4805:1:95;574:1559:0;15673:31:94;-1:-1:-1;15673:31:94;;5066:101:95;;574:1559:0;5066:101:95;574:1559:0;8837:64:95;574:1559:0;;8837:64:95;574:1559:0;5142:14:95;574:1559:0;;;4805:1:95;574:1559:0;;5142:14:95;574:1559:0;15503:114:94;15575:31;;574:1559:0;15575:31:94;;574:1559:0;;;15575:31:94;7471:108;574:1559:0;7524:44:94;;;;574:1559:0;;;7524:44:94;4979:67:95;574:1559:0;;;;8837:64:95;574:1559:0;4979:67:95;;;4851:91;574:1559:0;4908:23:95;;;;;4855:30;4872:13;;;4855:30;;;4790:50;4818:4;4810:25;:30;;-1:-1:-1;4790:50:95;;4726:34;;;-1:-1:-1;4726:34:95;;574:1559:0;;;;;;-1:-1:-1;;574:1559:0;;;;;12167:28:94;574:1559:0;;:::i;:::-;;;:::i;:::-;7025:72:94;;;:::i;:::-;12167:28;:::i;574:1559:0:-;;;;;;-1:-1:-1;;574:1559:0;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;574:1559:0;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;574:1559:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;1806:13:100;;;574:1559:0;;;;;;1801:155:100;1838:3;1821:15;;;;;;574:1559:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4091:55:154;574:1559:0;;;1627:26:100;574:1559:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4049:25:154;1907:4:100;;4049:25:154;;;;:::i;:::-;1907:4:100;;4091:55:154;:::i;:::-;1857:88:100;;;;:::i;:::-;;;;;;:::i;:::-;;574:1559:0;1806:13:100;;574:1559:0;;;;;;;;1821:15:100;;;;574:1559:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1627:26:100;574:1559:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;574:1559:0;;;;;;;:::i;:::-;;;:::i;:::-;7025:72:94;;:::i;:::-;574:1559:0;;;16707:21:94;574:1559:0;16707:21:94;;16703:90;;16866:16;;:8;:62;16944:47;16866:16;574:1559:0;16866:16:94;;16827;16866;574:1559:0;;;;16308:8:94;574:1559:0;;;;;;;16866:16:94;:27;574:1559:0;;;;16866:62:94;:::i;:::-;16827:16;;;574:1559:0;;;;16308:8:94;574:1559:0;;;;;;;16827:16:94;:27;574:1559:0;;;;;;;;;;;;;;16944:47:94;574:1559:0;;16944:47:94;;;;574:1559:0;;;;;;;;;;;;;;;;;;;16703:90:94;574:1559:0;16751:31:94;;;;;574:1559:0;;16751:31:94;574:1559:0;;;;;;-1:-1:-1;;574:1559:0;;;;;;;;;:::i;:::-;;;-1:-1:-1;574:1559:0;6760:71:94;574:1559:0;;;9136:25:94;574:1559:0;-1:-1:-1;574:1559:0;9136:25:94;574:1559:0;;;;8975:193:94;;574:1559:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;24956:47:94;;;966:10:99;574:1559:0;966:10:99;;24956:47:94;;;;;;;;;;;574:1559:0;;;;;;24956:97:94;24952:175;;966:10:99;25156:35:94;966:10:99;25136:56:94;966:10:99;;25156:35:94;;:::i;:::-;25136:56;:::i;24952:175::-;574:1559:0;25076:40:94;;;;966:10:99;574:1559:0;;25076:40:94;24956:47;;;;;;;;;;;;;;;;;:::i;:::-;;;574:1559:0;;;;;;;;;;;;;24956:47:94;;574:1559:0;;;;24956:47:94;;;-1:-1:-1;24956:47:94;;;574:1559:0;;;;;;;;;;;;;;;-1:-1:-1;;574:1559:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;7025:72:94;;;;;:::i;:::-;574:1559:0;11647:20:94;;;:45;;;;574:1559:0;11643:114:94;;574:1559:0;11771:24:94;574:1559:0;;;;;;;;;;;;;;;:::i;11647:45:94:-;11671:21;574:1559:0;11671:21:94;;11647:45;;574:1559:0;;;;;;-1:-1:-1;;574:1559:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;574:1559:0;;;;;;;:::i;:::-;;;;;;;;;;;;9396:18:94;574:1559:0;9396:18:94;574:1559:0;;9396:18:94;574:1559:0;9396:18:94;574:1559:0;;;;6760:71:94;574:1559:0;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;574:1559:0;;;;;;;9896:8:94;:16;574:1559:0;;:::i;:::-;;;;;16308:8:94;574:1559:0;;;;;;;9896:16:94;:22;574:1559:0;;;;;;;;;;;;;;;;-1:-1:-1;;574:1559:0;;;;;;5115:6:96;574:1559:0;5106:4:96;5098:23;5094:145;;574:1559:0;;;811:66:133;574:1559:0;;;5094:145:96;5199:29;;574:1559:0;5199:29:96;;;574:1559:0;;;;;;-1:-1:-1;;574:1559:0;;;;;;;:::i;:::-;;;:::i;:::-;7025:72:94;;:::i;:::-;574:1559:0;;;16188:20:94;;;:45;;;;574:1559:0;16184:114:94;;16308:16;:8;:16;574:1559:0;16308:16:94;574:1559:0;;;;16308:8:94;574:1559:0;;;;;;;16308:16:94;:25;574:1559:0;;;;;;;;;;;;;;16360:37:94;;;;;574:1559:0;;16188:45:94;16212:21;574:1559:0;16212:21:94;;16188:45;;574:1559:0;;;-1:-1:-1;;574:1559:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4692:6:96;574:1559:0;4683:4:96;;4675:23;:120;;;;;574:1559:0;4658:251:96;;;1969:33:0;1991:10;1969:33;:::i;:::-;574:1559;;;;;;;;;;6156:52:96;574:1559:0;6156:52:96;;574:1559:0;6156:52:96;574:1559:0;6156:52:96;;;;;;;;;;574:1559:0;-1:-1:-1;6152:437:96;;574:1559:0;6518:60:96;;;;;574:1559:0;;6518:60:96;6152:437;6250:40;;;811:66:133;6250:40:96;;6246:120;;1748:29:133;;;:34;1744:119;;574:1559:0;;811:66:133;574:1559:0;;;811:66:133;574:1559:0;2407:36:133;;;;574:1559:0;;;;2458:15:133;:11;;4049:25:154;;574:1559:0;4091:55:154;4049:25;;;;;;;;;:::i;:::-;4091:55;;:::i;2454:148:133:-;6163:9;;;;6159:70;;574:1559:0;;6159:70:133;6199:19;;574:1559:0;6199:19:133;;;1744:119;1805:47;;;574:1559:0;;;1805:47:133;;6246:120:96;6317:34;;;574:1559:0;;;6317:34:96;;6156:52;;;;574:1559:0;6156:52:96;;574:1559:0;6156:52:96;;;;;;574:1559:0;6156:52:96;;;:::i;:::-;;;574:1559:0;;;;;6156:52:96;;;;;;;-1:-1:-1;6156:52:96;;574:1559:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;4658:251:96;574:1559:0;4869:29:96;;;;;4675:120;574:1559:0;;;811:66:133;574:1559:0;;4753:42:96;;4675:120;;;574:1559:0;;;;;;-1:-1:-1;;574:1559:0;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;;574:1559:0;;;;;;;;8790:7:94;574:1559:0;;;;;;;;;-1:-1:-1;;574:1559:0;;;;;;;;;;;;;19920:12:94;574:1559:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;574:1559:0;;;;;;;;5902:16:94;574:1559:0;;;;;;;;;-1:-1:-1;;574:1559:0;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;;574:1559:0;;;;;;;:::i;:::-;;;:::i;:::-;7025:72:94;;:::i;:::-;574:1559:0;;;15507:20:94;;;:45;;;;574:1559:0;15503:114:94;;15627:16;:8;:16;574:1559:0;15627:16:94;574:1559:0;;;;16308:8:94;574:1559:0;;;;;;;15627:16:94;:22;574:1559:0;;;;;;;;;;;15673:31:94;;;;;574:1559:0;;15507:45:94;15531:21;574:1559:0;15531:21:94;;15507:45;;574:1559:0;;;;;;-1:-1:-1;;574:1559:0;;;;;;;;;;;;:::i;:::-;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;574:1559:0;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;11957:70:94;7025:72;;;:::i;:::-;11985:25;;;:::i;:::-;11957:70;;:::i;574:1559:0:-;;;;;:::i;:::-;966:10:99;;22573:38:94;966:10:99;;;;22573:38:94;:::i;:::-;22671:10;;;:26;;;574:1559:0;22667:131:94;;22830:35;966:10:99;;;;22830:35:94;:::i;:::-;574:1559:0;22875:12:94;574:1559:0;;23067:12:94;;;:45;;;574:1559:0;23063:116:94;;574:1559:0;;;;23271:14:94;574:1559:0;23337:20:94;23312:46;23337:20;;;;:::i;:::-;23312:46;;:::i;:::-;23271:14;574:1559:0;;;;:::i;:::-;23437:9:94;3086:21:154;:29;3082:123;;3256:31;;;;;;3304:55;3256:31;;;;23437:9:94;3256:31:154;;;;;:::i;3304:55::-;;23271:14:94;574:1559:0;;;;;;;;;3082:123:154;574:1559:0;3165:21:154;;3138:56;;;574:1559:0;;23437:9:94;574:1559:0;;3138:56:154;23063:116:94;574:1559:0;23136:32:94;;;;;;:::i;:::-;23063:116;;;;23067:45;23083:24;574:1559:0;23083:24:94;;;:::i;:::-;574:1559:0;23083:29:94;;23067:45;;22667:131;22766:20;;574:1559:0;22766:20:94;574:1559:0;22766:20:94;574:1559:0;22766:20:94;;:::i;22671:26::-;574:1559:0;;;;22685:12:94;22671:26;;574:1559:0;;;;;;-1:-1:-1;;574:1559:0;;;;;;;:::i;:::-;;;;:::i;:::-;7025:72:94;;;:::i;:::-;574:1559:0;26626:49:94;;;;;;574:1559:0;;;;;;;26626:49:94;;;;;574:1559:0;26626:49:94;;574:1559:0;;26626:49:94;;574:1559:0;26626:49:94;;;;;;;;574:1559:0;;;26626:49:94;;;;574:1559:0;26626:49:94;;:::i;:::-;574:1559:0;26626:49:94;574:1559:0;;;;;;;;;26626:49:94;574:1559:0;;;;;;;;-1:-1:-1;;574:1559:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;19275:28:94;7025:72;;;:::i;:::-;574:1559:0;;;;;6760:71:94;574:1559:0;;19226:25:94;574:1559:0;;;19226:25:94;574:1559:0;;;;;;;;;;;;;;;;;;19275:28:94;574:1559:0;;;;;;-1:-1:-1;;574:1559:0;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;-1:-1:-1;;574:1559:0;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;;574:1559:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;7025:72:94;;;;;:::i;:::-;574:1559:0;;;;17320:124:94;17362:3;17340:20;;;;;;574:1559:0;;;;;;;;;;;;;;;;;17850:51:94;574:1559:0;;;;;;6760:71:94;574:1559:0;;;;;;;;;;;;;;;;;;;;;;;;;;17850:51:94;574:1559:0;17325:13:94;;574:1559:0;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;574:1559:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;-1:-1:-1;574:1559:0;;;;;-1:-1:-1;574:1559:0;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;574:1559:0;;;;;;:::o;:::-;;-1:-1:-1;;574:1559:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;574:1559:0;;;;;;;;;;;:::o;9966:195:94:-;10129:8;:16;574:1559:0;9966:195:94;574:1559:0;;;;16308:8:94;574:1559:0;;;;;;;10129:16:94;:25;574:1559:0;;;;9966:195:94;:::o;10202:205::-;574:1559:0;10367:8:94;:16;3696:14:177;10202:205:94;574:1559:0;;;;16308:8:94;574:1559:0;;;;;;;10367:16:94;:27;574:1559:0;;;;3696:14:177;:::i;:::-;10360:40:94;;10202:205;:::o;10448:479::-;;574:1559:0;10724:16:94;574:1559:0;10448:479:94;;574:1559:0;;;;16308:8:94;574:1559:0;;;;;;;10724:16:94;:33;574:1559:0;-1:-1:-1;574:1559:0;;;;-1:-1:-1;574:1559:0;;;10837:22:94;574:1559:0;;;;;10837:22:94;:::i;:::-;574:1559:0;;;;;;;;10448:479:94:o;19471:255::-;-1:-1:-1;574:1559:0;19639:12:94;574:1559:0;;;;-1:-1:-1;574:1559:0;;;19682:21:94;;;:::i;:::-;:37;;;;-1:-1:-1;19471:255:94;:::o;19682:37::-;19471:255;:::o;9485:210::-;574:1559:0;;-1:-1:-1;574:1559:0;6760:71:94;574:1559:0;;3696:14:177;574:1559:0;9653:29:94;574:1559:0;-1:-1:-1;574:1559:0;9653:29:94;574:1559:0;;3696:14:177;:::i;574:1559:0:-;;;;;;;;;;;;;;;-1:-1:-1;574:1559:0;;;;;;;;;;;:::o;26181:181:94:-;;;574:1559:0;;26181:181:94;26322:32;26181:181;574:1559:0;;26322:32:94;;;;;;;574:1559:0;;;;;;;;;;;;;;;;;;;:::i;:::-;26322:32:94;;;;;;;;:::i;:::-;574:1559:0;26312:43:94;;26181:181;:::o;574:1559:0:-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;7871:802:94;;;;8040:22;;574:1559:0;;-1:-1:-1;574:1559:0;6760:71:94;574:1559:0;;;9136:25:94;574:1559:0;-1:-1:-1;574:1559:0;9136:25:94;574:1559:0;;;;8975:193:94;;8040:22;;;;8078:17;;;8086:5;8078:17;8086:5;8078:17;:::o;8036:631::-;574:1559:0;;;8134:4:94;8116:23;8134:4;;574:1559:0;31950:34:94;574:1559:0;31932:14:94;574:1559:0;31950:34:94;;:::i;:::-;31932:52;8374:42;-1:-1:-1;8374:42:94;:::o;8112:555::-;574:1559:0;;8555:23:94;574:1559:0;;-1:-1:-1;574:1559:0;6760:71:94;574:1559:0;;;;-1:-1:-1;574:1559:0;;;-1:-1:-1;574:1559:0;;;;;-1:-1:-1;574:1559:0;;;8555:23:94;:::i;:::-;8599:57;;;;;574:1559:0;;;8611:17:94;8592:64;;:::o;8599:57::-;-1:-1:-1;;;;;8592:64:94:o;10968:418::-;574:1559:0;;11116:264:94;574:1559:0;;;;;;;;;;;;;;;10837:22:94;;574:1559:0;;;;10837:22:94;:::i;:::-;-1:-1:-1;10870:50:94;;11301:17;;;;-1:-1:-1;11301:17:94;:53;;11293:76;;10968:418;:::o;11301:53::-;837:15:177;;574:1559:0;819:34:177;837:15;819:34;:::i;:::-;574:1559:0;-1:-1:-1;11322:32:94;11293:76;10968:418;:::o;:::-;574:1559:0;;;;11120:21:94;574:1559:0;;11157:16:94;;11165:4;11157:16;11171:1;11157:16;:::o;11116:264::-;574:1559:0;11253:26:94;;;;;:::i;:::-;574:1559:0;;;;11301:17:94;;;:53;;;;11293:76;;;:::o;574:1559:0:-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;27036:503:94;27154:32;1073:8:99;966:10;27154:32:94;:::i;:::-;27200:10;;27196:337;;27036:503;:::o;27196:337::-;574:1559:0;;;;;27288:33:94;1073:8:99;27288:33:94;:::i;:::-;27346:54;;;;-1:-1:-1;27346:54:94;966:10:99;27346:54:94;574:1559:0;;;;;-1:-1:-1;27346:54:94;27226:297;27439:69;574:1559:0;;26322:32:94;;;966:10:99;;574:1559:0;;27489:4:94;574:1559:0;;;;;;;;;26322:32:94;574:1559:0;;;;;1073:8:99;574:1559:0;;1073:8:99;-1:-1:-1;574:1559:0;;;;-1:-1:-1;1073:8:99;;574:1559:0;;;;;;1073:8:99;574:1559:0;;;;26322:32:94;;;;;;;;:::i;:::-;574:1559:0;26312:43:94;;27439:69;:::i;:::-;;27036:503::o;30054:378::-;;;;;574:1559:0;;;30247:4:94;30229:23;30247:4;;30275:26;;;;:::i;30225:201::-;30339:76;;;30353:1;30339:15;;30353:1;;;30339:76;;;;-1:-1:-1;30339:76:94;-1:-1:-1;30332:83:94;:::o;30339:76::-;30370:45;30394:20;;;;:::i;:::-;30370:45;;:::i;32339:116::-;;32445:1;574:1559:0;;;;;;;32339:116:94:o;25389:751::-;-1:-1:-1;574:1559:0;;;25571:12:94;574:1559:0;;;;;;25389:751:94;;;574:1559:0;;;;;;;;;25677:14:94;;;25714:38;;-1:-1:-1;25714:38:94;;574:1559:0;;-1:-1:-1;25714:38:94;25673:294;574:1559:0;819:34:177;837:15;819:34;:::i;:::-;574:1559:0;25773:28:94;;574:1559:0;;;25824:34:94;;-1:-1:-1;25824:34:94;;574:1559:0;;-1:-1:-1;25824:34:94;25769:198;25879:21;;;;;;;:::i;:::-;25875:92;;25769:198;;574:1559:0;-1:-1:-1;574:1559:0;25571:12:94;574:1559:0;;;-1:-1:-1;574:1559:0;;;;;;;26073:37:94;-1:-1:-1;26073:37:94;;25389:751;:::o;25875:92::-;25923:33;-1:-1:-1;25923:33:94;;574:1559:0;;-1:-1:-1;25923:33:94;32529:153;;574:1559:0;;;32646:28:94;574:1559:0;32646:28:94;;;574:1559:0;;;;;;;;;;32646:28:94;;;;;;:::i;574:1559:0:-;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;-1:-1:-1;574:1559:0;;;;:::o;:::-;;;:::o;13188:1138:94:-;574:1559:0;;;-1:-1:-1;574:1559:0;;;;;;;;;;;;13548:44:94;;13625:591;;;;-1:-1:-1;14231:62:94;574:1559:0;;13662:29:94;837:15:177;819:34;837:15;819:34;:::i;:::-;13662:29:94;:::i;:::-;574:1559:0;;;;;;;:::i;:::-;;;;;;;;13741:55:94;;574:1559:0;;;;;;16308:8:94;574:1559:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14231:62:94;;13188:1138;:::o;13625:591::-;574:1559:0;;;;-1:-1:-1;574:1559:0;;;;;;;;;;14039:166:94;;-1:-1:-1;;14231:62:94;;574:1559:0;;14090:115:94;;-1:-1:-1;;574:1559:0;;;;14090:115:94;:::i;:::-;14040:16;;574:1559:0;;;16308:8:94;574:1559:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14039:166:94;13625:591;;13188:1138;;;;;574:1559:0;;;13435:21:94;574:1559:0;13435:21:94;;13431:90;;574:1559:0;14231:62:94;13548:16;574:1559:0;13548:16:94;;574:1559:0;13548:16:94;574:1559:0;;;;16308:8:94;574:1559:0;;;;;;;13548:16:94;574:1559:0;;;-1:-1:-1;574:1559:0;;;;;-1:-1:-1;574:1559:0;;;13548:44:94;13602:12;13625:591;;;;;13662:29;574:1559:0;837:15:177;574:1559:0;819:34:177;837:15;819:34;:::i;:::-;574:1559:0;;13662:29:94;;:::i;:::-;574:1559:0;;;13705:16:94;574:1559:0;;;;;;:::i;:::-;;;;;;;13741:55:94;;;574:1559:0;;;;;;;;16308:8:94;574:1559:0;;;;;;;13705:16:94;574:1559:0;;;-1:-1:-1;574:1559:0;;;;;;-1:-1:-1;574:1559:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14231:62:94;;13188:1138;:::o;13625:591::-;14090:16;14039:166;14090:16;;14040;14090;574:1559:0;;;;16308:8:94;574:1559:0;;;;;;;14090:16:94;574:1559:0;;;-1:-1:-1;574:1559:0;;;14090:115:94;574:1559:0;;;-1:-1:-1;574:1559:0;;;;;14090:115:94;:::i;:::-;14040:16;;;574:1559:0;;;;16308:8:94;574:1559:0;;;;;;;14040:16:94;574:1559:0;;;-1:-1:-1;574:1559:0;;;;-1:-1:-1;574:1559:0;;;;;;;;;;;;;;;;14039:166:94;13625:591;;13431:90;13479:31;;;;;574:1559:0;;13479:31:94;;3393:159:177;819:34;837:15;819:34;:::i;:::-;574:1559:0;;;;;4807:2:177;574:1559:0;;;;;;;3092:19:177;;574:1559:0;;-1:-1:-1;3092:76:177;;-1:-1:-1;;;;;3393:159:177:o;3092:76::-;4771:2;574:1559:0;;;;3393:159:177:o;32095:134:94:-;574:1559:0;;32095:134:94;574:1559:0;;;;;;;;837:15:177;819:34;837:15;819:34;:::i;:::-;574:1559:0;;;32178:44:94;;32095:134;:::o;14587:473::-;574:1559:0;;;14755:21:94;574:1559:0;14755:21:94;;14751:90;;14855:16;;574:1559:0;;;;16308:8:94;574:1559:0;;;;;;;14855:16:94;574:1559:0;;;-1:-1:-1;574:1559:0;;;;;-1:-1:-1;574:1559:0;;;14855:44:94;14851:87;;14955:16;574:1559:0;14955:16:94;574:1559:0;;;;16308:8:94;574:1559:0;;;;;;;14955:16:94;574:1559:0;;;-1:-1:-1;574:1559:0;;;;;;;;;15004:28:94;;574:1559:0;15004:28:94;;14855:8;14587:473;:::o;14851:87::-;14915:12;;;574:1559:0;14915:12:94;:::o;30536:1107::-;;30675:1;30661:15;;30657:63;;30752:4;574:1559:0;;;30734:23:94;30730:334;;31137:27;;1073:8:99;31137:27:94;:::i;:::-;31244:16;;;;:49;;;30536:1107;31240:97;;31386:23;;;:::i;:::-;31423:7;;31419:55;;574:1559:0;;;;;;;3281:5:171;;;;;3066;;574:1559:0;3060:42:171;574:1559:0;31618:10:94;;;31610:26;30536:1107;:::o;31419:55::-;31446:17;;1073:8:99;31446:17:94;1073:8:99;31446:17:94;:::o;31240:97::-;31309:17;;;1073:8:99;31309:17:94;1073:8:99;31309:17:94;:::o;31244:49::-;-1:-1:-1;30752:4:94;-1:-1:-1;574:1559:0;;;6760:71:94;574:1559:0;;;;;9136:25:94;;574:1559:0;;;;;31244:49:94;;30730:334;31028:20;;30675:1;574:1559:0;;;31932:14:94;574:1559:0;31950:34:94;1073:8:99;574:1559:0;;;30752:4:94;31950:34;:::i;30536:1107::-;;;30675:1;30661:15;;30657:63;;30752:4;574:1559:0;;;30734:23:94;30730:334;;31137:27;;;;:::i;30730:334::-;31028:20;;;;:::i;:::-;31950:34;31932:14;574:1559:0;30752:4:94;;31950:34;:::i;27945:1678::-;1073:8:99;28112:15:94;28126:1;28112:15;;28108:66;;574:1559:0;28126:1:94;574:1559:0;;;;1073:8:99;574:1559:0;;28342:35:94;574:1559:0;28342:35:94;;:89;;;;27945:1678;28342:146;;;;27945:1678;28342:201;;;;27945:1678;28342:262;;;;27945:1678;28325:343;;574:1559:0;28775:41:94;;:98;;;;27945:1678;28775:161;;;;27945:1678;28758:414;;574:1559:0;29291:35:94;;:75;;;;27945:1678;29287:254;;29596:4;;574:1559:0;;6760:71:94;574:1559:0;;;;;;;;;;;;;;;;29551:65:94;;;;27945:1678;:::o;29287:254::-;574:1559:0;;29462:4:94;574:1559:0;;;;;;;28126:1:94;574:1559:0;;;;;;;;9896:8:94;:16;574:1559:0;29506:20:94;574:1559:0;;;;16308:8:94;574:1559:0;;;;;;;9896:16:94;:22;574:1559:0;;29492:38:94;29500:4;29492:38;;-1:-1:-1;29492:38:94;:::o;29291:75::-;29330:36;574:1559:0;29330:36:94;;29291:75;;28758:414;574:1559:0;;;29042:4:94;574:1559:0;;;28126:1:94;574:1559:0;;;;;;;;;29088:27:94;;;:::i;:::-;29137:4;29129:32;-1:-1:-1;29129:32:94;;:::o;28775:161::-;28889:47;574:1559:0;28889:47:94;;28775:161;;:98;28832:41;574:1559:0;28832:41:94;;28775:98;;28325:343;28629:28;;;28637:4;28629:28;1073:8:99;28629:28:94;1073:8:99;28629:28:94;:::o;28342:262::-;28559:45;574:1559:0;28559:45:94;;28342:262;;:201;28504:39;574:1559:0;28504:39:94;;28342:201;;:146;28447:41;574:1559:0;28447:41:94;;28342:146;;:89;28393:38;574:1559:0;28393:38:94;;28342:89;;28108:66;28143:20;;1073:8:99;28143:20:94;1073:8:99;28143:20:94;1073:8:99;28143:20:94;:::o;27945:1678::-;28126:1;28112:15;;28108:66;;574:1559:0;28202:20:94;;;;:::i;:::-;574:1559:0;28342:35:94;574:1559:0;28342:35:94;;:89;;;;27945:1678;28342:146;;;;27945:1678;28342:201;;;;27945:1678;28342:262;;;;27945:1678;28325:343;;574:1559:0;28775:41:94;;:98;;;;27945:1678;28775:161;;;;27945:1678;28758:414;;574:1559:0;29291:35:94;;:75;;;;27945:1678;29287:254;;29596:4;;;-1:-1:-1;574:1559:0;6760:71:94;574:1559:0;;;-1:-1:-1;574:1559:0;;-1:-1:-1;574:1559:0;;;;;-1:-1:-1;574:1559:0;;;29551:65:94;-1:-1:-1;29551:65:94;;-1:-1:-1;27945:1678:94;:::o;29287:254::-;29452:15;;;29462:4;574:1559:0;;;28126:1:94;574:1559:0;;;;;;;;;9896:8:94;:16;574:1559:0;29506:20:94;574:1559:0;;;;16308:8:94;574:1559:0;;;;;;;29291:75:94;29330:36;574:1559:0;29330:36:94;;29291:75;;28758:414;29032:15;;;29042:4;574:1559:0;;;28126:1:94;574:1559:0;;;;;;;;;;29088:27:94;;;:::i;28775:161::-;28889:47;574:1559:0;28889:47:94;;28775:161;;:98;28832:41;574:1559:0;28832:41:94;;28775:98;;28342:262;28559:45;574:1559:0;28559:45:94;;28342:262;;:201;28504:39;574:1559:0;28504:39:94;;28342:201;;:146;28447:41;574:1559:0;28447:41:94;;28342:146;;:89;28393:38;574:1559:0;28393:38:94;;28342:89;;4421:582:154;;4593:8;;-1:-1:-1;574:1559:0;;5674:21:154;:17;;5799:158;;;;;;5670:354;5994:19;5694:1;5994:19;;5694:1;5994:19;4589:408;574:1559:0;;4841:22:154;:49;;;4589:408;4837:119;;4969:17;;:::o;4837:119::-;574:1559:0;4917:24:154;;4862:1;4917:24;574:1559:0;4917:24:154;574:1559:0;;4862:1:154;4917:24;4841:49;4867:18;;;:23;4841:49;;4033:390:177;3696:14;574:1559:0;4033:390:177;;;;3696:14;:::i;:::-;574:1559:0;;;;;;;;4279:16:177;;;:39;574:1559:0;;;;;;;;;4339:21:177;574:1559:0;4279:39:177;574:1559:0;4279:39:177;;574:1559:0;3281:5:171;574:1559:0;3281:5:171;3066;574:1559:0;3066:5:171;574:1559:0;3060:42:171;574:1559:0;819:34:177;837:15;819:34;:::i;4339:21::-;574:1559:0;5120:2:177;574:1559:0;;;;5089:2:177;574:1559:0;;5069:54:177;574:1559:0;4370:46:177;4033:390;:::o;4279:39::-;;;574:1559:0;4339:21:177;574:1559:0;4279:39:177;-1:-1:-1;4279:39:177;;4033:390;3696:14;574:1559:0;4033:390:177;;;;3696:14;:::i;:::-;574:1559:0;;;;;;;;4279:16:177;;;:39;574:1559:0;;;;;;;;;4339:21:177;574:1559:0;;4279:39:177;;574:1559:0;819:34:177;837:15;819:34;:::i;4279:39::-;;;574:1559:0;4339:21:177;574:1559:0;;4279:39:177;;7084:141:95;574:1559:0;8837:64:95;574:1559:0;;;;7150:18:95;7146:73;;7084:141::o;7146:73::-;7191:17;-1:-1:-1;7191:17:95;;-1:-1:-1;7191:17:95;14296:213:172;574:1559:0;14374:24:172;;14370:103;;574:1559:0;;14296:213:172;:::o;14370:103::-;14421:41;;;14452:2;14421:41;574:1559:0;;;;14421:41:172;","linkReferences":{},"immutableReferences":{"50749":[{"start":5738,"length":32},{"start":6211,"length":32}]}},"methodIdentifiers":{"ADMIN_ROLE()":"75b238fc","PUBLIC_ROLE()":"3ca7c02a","UPGRADE_INTERFACE_VERSION()":"ad3cb1cc","canCall(address,address,bytes4)":"b7009613","cancel(address,address,bytes)":"d6bb62c6","consumeScheduledOp(address,bytes)":"94c7d7ee","execute(address,bytes)":"1cff79cd","expiration()":"4665096d","getAccess(uint64,address)":"3078f114","getNonce(bytes32)":"4136a33c","getRoleAdmin(uint64)":"530dd456","getRoleGrantDelay(uint64)":"12be8727","getRoleGuardian(uint64)":"0b0a93ba","getSchedule(bytes32)":"3adc277a","getTargetAdminDelay(address)":"4c1da1e2","getTargetFunctionRole(address,bytes4)":"6d5115bd","grantRole(uint64,address,uint32)":"25c471a0","hasRole(uint64,address)":"d1f856ee","hashOperation(address,address,bytes)":"abd9bd2a","initialize(address)":"c4d66de8","isTargetClosed(address)":"a166aa89","labelRole(uint64,string)":"853551b8","minSetback()":"cc1b6c81","multicall(bytes[])":"ac9650d8","proxiableUUID()":"52d1902d","renounceRole(uint64,address)":"fe0776f5","revokeRole(uint64,address)":"b7d2b162","schedule(address,bytes,uint48)":"f801a698","setGrantDelay(uint64,uint32)":"a64d95ce","setRoleAdmin(uint64,uint64)":"30cae187","setRoleGuardian(uint64,uint64)":"52962952","setTargetAdminDelay(address,uint32)":"d22b5989","setTargetClosed(address,bool)":"167bd395","setTargetFunctionRole(address,bytes4[],uint64)":"08d6122d","updateAuthority(address,address)":"18ff183c","upgradeToAndCall(address,bytes)":"4f1ef286"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"operationId\",\"type\":\"bytes32\"}],\"name\":\"AccessManagerAlreadyScheduled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AccessManagerBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"operationId\",\"type\":\"bytes32\"}],\"name\":\"AccessManagerExpired\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialAdmin\",\"type\":\"address\"}],\"name\":\"AccessManagerInvalidInitialAdmin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"roleId\",\"type\":\"uint64\"}],\"name\":\"AccessManagerLockedRole\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"operationId\",\"type\":\"bytes32\"}],\"name\":\"AccessManagerNotReady\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"operationId\",\"type\":\"bytes32\"}],\"name\":\"AccessManagerNotScheduled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"msgsender\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"roleId\",\"type\":\"uint64\"}],\"name\":\"AccessManagerUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"AccessManagerUnauthorizedCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"msgsender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"AccessManagerUnauthorizedCancel\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AccessManagerUnauthorizedConsume\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC1967NonPayable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"bits\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintDowncast\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"operationId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"}],\"name\":\"OperationCanceled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"operationId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"}],\"name\":\"OperationExecuted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"operationId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint48\",\"name\":\"schedule\",\"type\":\"uint48\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"OperationScheduled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"roleId\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"admin\",\"type\":\"uint64\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"roleId\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"delay\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint48\",\"name\":\"since\",\"type\":\"uint48\"}],\"name\":\"RoleGrantDelayChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"roleId\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"delay\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint48\",\"name\":\"since\",\"type\":\"uint48\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"newMember\",\"type\":\"bool\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"roleId\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"guardian\",\"type\":\"uint64\"}],\"name\":\"RoleGuardianChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"roleId\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"label\",\"type\":\"string\"}],\"name\":\"RoleLabel\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"roleId\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"delay\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint48\",\"name\":\"since\",\"type\":\"uint48\"}],\"name\":\"TargetAdminDelayUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"closed\",\"type\":\"bool\"}],\"name\":\"TargetClosed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"roleId\",\"type\":\"uint64\"}],\"name\":\"TargetFunctionRoleUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PUBLIC_ROLE\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UPGRADE_INTERFACE_VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"canCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"immediate\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"delay\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"cancel\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"consumeScheduledOp\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"execute\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"expiration\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"roleId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"getAccess\",\"outputs\":[{\"internalType\":\"uint48\",\"name\":\"since\",\"type\":\"uint48\"},{\"internalType\":\"uint32\",\"name\":\"currentDelay\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"pendingDelay\",\"type\":\"uint32\"},{\"internalType\":\"uint48\",\"name\":\"effect\",\"type\":\"uint48\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"}],\"name\":\"getNonce\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"roleId\",\"type\":\"uint64\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"roleId\",\"type\":\"uint64\"}],\"name\":\"getRoleGrantDelay\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"roleId\",\"type\":\"uint64\"}],\"name\":\"getRoleGuardian\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"}],\"name\":\"getSchedule\",\"outputs\":[{\"internalType\":\"uint48\",\"name\":\"\",\"type\":\"uint48\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"getTargetAdminDelay\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getTargetFunctionRole\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"roleId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"executionDelay\",\"type\":\"uint32\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"roleId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isMember\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"executionDelay\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"hashOperation\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialAdmin\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"isTargetClosed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"roleId\",\"type\":\"uint64\"},{\"internalType\":\"string\",\"name\":\"label\",\"type\":\"string\"}],\"name\":\"labelRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minSetback\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"data\",\"type\":\"bytes[]\"}],\"name\":\"multicall\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"results\",\"type\":\"bytes[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"roleId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"callerConfirmation\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"roleId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint48\",\"name\":\"when\",\"type\":\"uint48\"}],\"name\":\"schedule\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"operationId\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"roleId\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"newDelay\",\"type\":\"uint32\"}],\"name\":\"setGrantDelay\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"roleId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"admin\",\"type\":\"uint64\"}],\"name\":\"setRoleAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"roleId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"guardian\",\"type\":\"uint64\"}],\"name\":\"setRoleGuardian\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"newDelay\",\"type\":\"uint32\"}],\"name\":\"setTargetAdminDelay\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"closed\",\"type\":\"bool\"}],\"name\":\"setTargetClosed\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"},{\"internalType\":\"uint64\",\"name\":\"roleId\",\"type\":\"uint64\"}],\"name\":\"setTargetFunctionRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newAuthority\",\"type\":\"address\"}],\"name\":\"updateAuthority\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Manages roles and permissions across the protocol.\",\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"ERC1967InvalidImplementation(address)\":[{\"details\":\"The `implementation` of the proxy is invalid.\"}],\"ERC1967NonPayable()\":[{\"details\":\"An upgrade function sees `msg.value > 0` that may be lost.\"}],\"FailedCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"InsufficientBalance(uint256,uint256)\":[{\"details\":\"The ETH balance of the account is not enough to perform the operation.\"}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"SafeCastOverflowedUintDowncast(uint8,uint256)\":[{\"details\":\"Value doesn't fit in an uint of `bits` size.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"OperationCanceled(bytes32,uint32)\":{\"details\":\"A scheduled operation was canceled.\"},\"OperationExecuted(bytes32,uint32)\":{\"details\":\"A scheduled operation was executed.\"},\"OperationScheduled(bytes32,uint32,uint48,address,address,bytes)\":{\"details\":\"A delayed operation was scheduled.\"},\"RoleAdminChanged(uint64,uint64)\":{\"details\":\"Role acting as admin over a given `roleId` is updated.\"},\"RoleGrantDelayChanged(uint64,uint32,uint48)\":{\"details\":\"Grant delay for a given `roleId` will be updated to `delay` when `since` is reached.\"},\"RoleGranted(uint64,address,uint32,uint48,bool)\":{\"details\":\"Emitted when `account` is granted `roleId`. NOTE: The meaning of the `since` argument depends on the `newMember` argument. If the role is granted to a new member, the `since` argument indicates when the account becomes a member of the role, otherwise it indicates the execution delay for this account and roleId is updated.\"},\"RoleGuardianChanged(uint64,uint64)\":{\"details\":\"Role acting as guardian over a given `roleId` is updated.\"},\"RoleLabel(uint64,string)\":{\"details\":\"Informational labelling for a roleId.\"},\"RoleRevoked(uint64,address)\":{\"details\":\"Emitted when `account` membership or `roleId` is revoked. Unlike granting, revoking is instantaneous.\"},\"TargetAdminDelayUpdated(address,uint32,uint48)\":{\"details\":\"Admin delay for a given `target` will be updated to `delay` when `since` is reached.\"},\"TargetClosed(address,bool)\":{\"details\":\"Target mode is updated (true = closed, false = open).\"},\"TargetFunctionRoleUpdated(address,bytes4,uint64)\":{\"details\":\"Role required to invoke `selector` on `target` is updated to `roleId`.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{\"canCall(address,address,bytes4)\":{\"details\":\"Check if an address (`caller`) is authorised to call a given function on a given contract directly (with no restriction). Additionally, it returns the delay needed to perform the call indirectly through the {schedule} & {execute} workflow. This function is usually called by the targeted contract to control immediate execution of restricted functions. Therefore we only return true if the call can be performed without any delay. If the call is subject to a previously set delay (not zero), then the function should return false and the caller should schedule the operation for future execution. If `immediate` is true, the delay can be disregarded and the operation can be immediately executed, otherwise the operation can be executed if and only if delay is greater than 0. NOTE: The IAuthority interface does not include the `uint32` delay. This is an extension of that interface that is backward compatible. Some contracts may thus ignore the second return argument. In that case they will fail to identify the indirect workflow, and will consider calls that require a delay to be forbidden. NOTE: This function does not report the permissions of the admin functions in the manager itself. These are defined by the {AccessManager} documentation.\"},\"cancel(address,address,bytes)\":{\"details\":\"Cancel a scheduled (delayed) operation. Returns the nonce that identifies the previously scheduled operation that is cancelled. Requirements: - the caller must be the proposer, a guardian of the targeted function, or a global admin Emits a {OperationCanceled} event.\"},\"consumeScheduledOp(address,bytes)\":{\"details\":\"Consume a scheduled operation targeting the caller. If such an operation exists, mark it as consumed (emit an {OperationExecuted} event and clean the state). Otherwise, throw an error. This is useful for contract that want to enforce that calls targeting them were scheduled on the manager, with all the verifications that it implies. Emit a {OperationExecuted} event.\"},\"execute(address,bytes)\":{\"details\":\"Execute a function that is delay restricted, provided it was properly scheduled beforehand, or the execution delay is 0. Returns the nonce that identifies the previously scheduled operation that is executed, or 0 if the operation wasn't previously scheduled (if the caller doesn't have an execution delay). Emits an {OperationExecuted} event only if the call was scheduled and delayed.\"},\"expiration()\":{\"details\":\"Expiration delay for scheduled proposals. Defaults to 1 week. IMPORTANT: Avoid overriding the expiration with 0. Otherwise every contract proposal will be expired immediately, disabling any scheduling usage.\"},\"getAccess(uint64,address)\":{\"details\":\"Get the access details for a given account for a given role. These details include the timepoint at which membership becomes active, and the delay applied to all operation by this user that requires this permission level. Returns: [0] Timestamp at which the account membership becomes valid. 0 means role is not granted. [1] Current execution delay for the account. [2] Pending execution delay for the account. [3] Timestamp at which the pending execution delay will become active. 0 means no delay update is scheduled.\"},\"getNonce(bytes32)\":{\"details\":\"Return the nonce for the latest scheduled operation with a given id. Returns 0 if the operation has never been scheduled.\"},\"getRoleAdmin(uint64)\":{\"details\":\"Get the id of the role that acts as an admin for the given role. The admin permission is required to grant the role, revoke the role and update the execution delay to execute an operation that is restricted to this role.\"},\"getRoleGrantDelay(uint64)\":{\"details\":\"Get the role current grant delay. Its value may change at any point without an event emitted following a call to {setGrantDelay}. Changes to this value, including effect timepoint are notified in advance by the {RoleGrantDelayChanged} event.\"},\"getRoleGuardian(uint64)\":{\"details\":\"Get the role that acts as a guardian for a given role. The guardian permission allows canceling operations that have been scheduled under the role.\"},\"getSchedule(bytes32)\":{\"details\":\"Return the timepoint at which a scheduled operation will be ready for execution. This returns 0 if the operation is not yet scheduled, has expired, was executed, or was canceled.\"},\"getTargetAdminDelay(address)\":{\"details\":\"Get the admin delay for a target contract. Changes to contract configuration are subject to this delay.\"},\"getTargetFunctionRole(address,bytes4)\":{\"details\":\"Get the role required to call a function.\"},\"grantRole(uint64,address,uint32)\":{\"details\":\"Add `account` to `roleId`, or change its execution delay. This gives the account the authorization to call any function that is restricted to this role. An optional execution delay (in seconds) can be set. If that delay is non 0, the user is required to schedule any operation that is restricted to members of this role. The user will only be able to execute the operation after the delay has passed, before it has expired. During this period, admin and guardians can cancel the operation (see {cancel}). If the account has already been granted this role, the execution delay will be updated. This update is not immediate and follows the delay rules. For example, if a user currently has a delay of 3 hours, and this is called to reduce that delay to 1 hour, the new delay will take some time to take effect, enforcing that any operation executed in the 3 hours that follows this update was indeed scheduled before this update. Requirements: - the caller must be an admin for the role (see {getRoleAdmin}) - granted role must not be the `PUBLIC_ROLE` Emits a {RoleGranted} event.\"},\"hasRole(uint64,address)\":{\"details\":\"Check if a given account currently has the permission level corresponding to a given role. Note that this permission might be associated with an execution delay. {getAccess} can provide more details.\"},\"hashOperation(address,address,bytes)\":{\"details\":\"Hashing function for delayed operations.\"},\"isTargetClosed(address)\":{\"details\":\"Get whether the contract is closed disabling any access. Otherwise role permissions are applied. NOTE: When the manager itself is closed, admin functions are still accessible to avoid locking the contract.\"},\"labelRole(uint64,string)\":{\"details\":\"Give a label to a role, for improved role discoverability by UIs. Requirements: - the caller must be a global admin Emits a {RoleLabel} event.\"},\"minSetback()\":{\"details\":\"Minimum setback for all delay updates, with the exception of execution delays. It can be increased without setback (and reset via {revokeRole} in the case event of an accidental increase). Defaults to 5 days.\"},\"multicall(bytes[])\":{\"custom:oz-upgrades-unsafe-allow-reachable\":\"delegatecall\",\"details\":\"Receives and executes a batch of function calls on this contract.\"},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC-1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\"},\"renounceRole(uint64,address)\":{\"details\":\"Renounce role permissions for the calling account with immediate effect. If the sender is not in the role this call has no effect. Requirements: - the caller must be `callerConfirmation`. Emits a {RoleRevoked} event if the account had the role.\"},\"revokeRole(uint64,address)\":{\"details\":\"Remove an account from a role, with immediate effect. If the account does not have the role, this call has no effect. Requirements: - the caller must be an admin for the role (see {getRoleAdmin}) - revoked role must not be the `PUBLIC_ROLE` Emits a {RoleRevoked} event if the account had the role.\"},\"schedule(address,bytes,uint48)\":{\"details\":\"Schedule a delayed operation for future execution, and return the operation identifier. It is possible to choose the timestamp at which the operation becomes executable as long as it satisfies the execution delays required for the caller. The special value zero will automatically set the earliest possible time. Returns the `operationId` that was scheduled. Since this value is a hash of the parameters, it can reoccur when the same parameters are used; if this is relevant, the returned `nonce` can be used to uniquely identify this scheduled operation from other occurrences of the same `operationId` in invocations of {execute} and {cancel}. Emits a {OperationScheduled} event. NOTE: It is not possible to concurrently schedule more than one operation with the same `target` and `data`. If this is necessary, a random byte can be appended to `data` to act as a salt that will be ignored by the target contract if it is using standard Solidity ABI encoding.\"},\"setGrantDelay(uint64,uint32)\":{\"details\":\"Update the delay for granting a `roleId`. Requirements: - the caller must be a global admin Emits a {RoleGrantDelayChanged} event.\"},\"setRoleAdmin(uint64,uint64)\":{\"details\":\"Change admin role for a given role. Requirements: - the caller must be a global admin Emits a {RoleAdminChanged} event\"},\"setRoleGuardian(uint64,uint64)\":{\"details\":\"Change guardian role for a given role. Requirements: - the caller must be a global admin Emits a {RoleGuardianChanged} event\"},\"setTargetAdminDelay(address,uint32)\":{\"details\":\"Set the delay for changing the configuration of a given target contract. Requirements: - the caller must be a global admin Emits a {TargetAdminDelayUpdated} event.\"},\"setTargetClosed(address,bool)\":{\"details\":\"Set the closed flag for a contract. Closing the manager itself won't disable access to admin methods to avoid locking the contract. Requirements: - the caller must be a global admin Emits a {TargetClosed} event.\"},\"setTargetFunctionRole(address,bytes4[],uint64)\":{\"details\":\"Set the role required to call functions identified by the `selectors` in the `target` contract. Requirements: - the caller must be a global admin Emits a {TargetFunctionRoleUpdated} event per selector.\"},\"updateAuthority(address,address)\":{\"details\":\"Changes the authority of a target managed by this manager instance. Requirements: - the caller must be a global admin\"},\"upgradeToAndCall(address,bytes)\":{\"custom:oz-upgrades-unsafe-allow-reachable\":\"delegatecall\",\"details\":\"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event.\"}},\"title\":\"AccessManager\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"initialize(address)\":{\"notice\":\"Initializes the proxy state.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/access/AccessManager.sol\":\"AccessManager\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":20000},\"remappings\":[\":@ethereum-attestation-service/=node_modules/@ethereum-attestation-service/\",\":@ethsign/=node_modules/@ethsign/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":@synaps3/=contracts/\",\":ds-test/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\",\":hardhat/=node_modules/hardhat/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":solady/=lib/solady/src/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\"],\"viaIR\":true},\"sources\":{\"contracts/access/AccessManager.sol\":{\"keccak256\":\"0x88327ca2680d386f41a1e05046fc5ddd4a5570d1ca5464db223f85275a44d8ca\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fda1a516c41db99a0abdcc57f48b0f6edc4814d7677d0273c03823d57f3cde26\",\"dweb:/ipfs/QmRimeUiTcKrQAqwTdquZCKd1aYN5FS5B1y24P24uLQsHd\"]},\"contracts/core/primitives/Constants.sol\":{\"keccak256\":\"0xd3dac9b10f88534046b904f281588f0293fa603ec5c68ffeeaf64eec88ebe65e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d9dddce59781d9a41c012aeff533cca898b1553924f09edf192d0f534f4cc4a1\",\"dweb:/ipfs/QmdKPss1KNAneMGaTXqQSWraN1s6MDCHkMgetn5BVxzXn3\"]},\"node_modules/@openzeppelin/contracts-upgradeable/access/manager/AccessManagerUpgradeable.sol\":{\"keccak256\":\"0xc36716750a9095416ede9775ee8ae19f13794406a297c0dccd6146268bd36d74\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://595c9227d490558d1666e32609ac6677ba4fff7187cb539c3bb2c9a3e8b63b27\",\"dweb:/ipfs/QmZgoM4Rj7NuY8pfQ9pCvpKTrk5ZJ6Sdbf8XMsSVsvwMk5\"]},\"node_modules/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"node_modules/@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol\":{\"keccak256\":\"0xf72d3b11f41fccbbdcacd121f994daab8267ccfceb1fb4f247e4ba274c169d27\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e46ee40ddc9e2009176ce5d76aa2c046fd68f2ed52d02d77db191365b7c5b2e\",\"dweb:/ipfs/QmZnxgPmCCHosdvbh4J65uTaFYeGtZGzQ1sXRdeh1y68Zr\"]},\"node_modules/@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9\",\"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV\"]},\"node_modules/@openzeppelin/contracts-upgradeable/utils/MulticallUpgradeable.sol\":{\"keccak256\":\"0x1545b1796f0b94f811d95b8b208c0668dacfc7768247d22b63161a47c4c5ef4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a1dccf7856b960b2ed7565906b457812ad8d29a15d403f17702ac7e090680300\",\"dweb:/ipfs/QmUqqibiekFv84mdq7zeyRF56mLJbFyFUxWKTrz8Twzkpn\"]},\"node_modules/@openzeppelin/contracts/access/manager/IAccessManaged.sol\":{\"keccak256\":\"0xaba93d42cd70e1418782951132d97b31ddce5f50ad81090884b6d0e41caac9d6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b110886f83e3e98a11255a3b56790322e8d83e513304dde71299406685fc6694\",\"dweb:/ipfs/QmPwroS7MUUk1EmsvaJqU6aarhQ8ewJtJMg7xxmTsaxZEv\"]},\"node_modules/@openzeppelin/contracts/access/manager/IAccessManager.sol\":{\"keccak256\":\"0x9be2d08a326515805bc9cf6315b7953f8d1ebe88abf48c2d645fb1fa8211a0e2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e750d656e37efaefbb2300051ec2c4c725db266c5ff89bc985f7ecb8d214c4f4\",\"dweb:/ipfs/QmT51FsZes2n2nrLLh3d8YkBYKY43CtwScZxixcLGzL9r6\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC1967.sol\":{\"keccak256\":\"0xb25a4f11fa80c702bf5cd85adec90e6f6f507f32f4a8e6f5dbc31e8c10029486\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6917f8a323e7811f041aecd4d9fd6e92455a6fba38a797ac6f6e208c7912b79d\",\"dweb:/ipfs/QmShuYv55wYHGi4EFkDB8QfF7ZCHoKk2efyz3AWY1ExSq7\"]},\"node_modules/@openzeppelin/contracts/interfaces/draft-IERC1822.sol\":{\"keccak256\":\"0xc42facb5094f2f35f066a7155bda23545e39a3156faef3ddc00185544443ba7d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d3b36282ab029b46bd082619a308a2ea11c309967b9425b7b7a6eb0b0c1c3196\",\"dweb:/ipfs/QmP2YVfDB2FoREax3vJu7QhDnyYRMw52WPrCD4vdT2kuDA\"]},\"node_modules/@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0x911c3346ee26afe188f3b9dc267ef62a7ccf940aba1afa963e3922f0ca3d8a06\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://04539f4419e44a831807d7203375d2bc6a733da256efd02e51290f5d5015218c\",\"dweb:/ipfs/QmPZ97gsAAgaMRPiE2WJfkzRsudQnW5tPAvMgGj1jcTJtR\"]},\"node_modules/@openzeppelin/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa\",\"dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM\"]},\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23\",\"dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb\"]},\"node_modules/@openzeppelin/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]},\"node_modules/@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"node_modules/@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]},\"node_modules/@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xa00be322d7db5786750ce0ac7e2f5b633ac30a5ed5fa1ced1e74acfc19acecea\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c84e822f87cbdc4082533b626667b6928715bb2b1e8e7eb96954cebb9e38c8d\",\"dweb:/ipfs/QmZmy9dgxLTerBAQDuuHqbL6EpgRxddqgv5KmwpXYVbKz1\"]},\"node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"node_modules/@openzeppelin/contracts/utils/types/Time.sol\":{\"keccak256\":\"0x36776530f012618bc7526ceb28e77b85e582cb12d9b9466a71d4bd6bf952e4cc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f867d046908497287d8a67643dd5d7e38c4027af4ab0a74ffbe1d6790c383c6\",\"dweb:/ipfs/QmQ7s9gMP1nkwThFmoDifnGgpUMsMe5q5ZrAxGDsNnRGza\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"bytes32","name":"operationId","type":"bytes32"}],"type":"error","name":"AccessManagerAlreadyScheduled"},{"inputs":[],"type":"error","name":"AccessManagerBadConfirmation"},{"inputs":[{"internalType":"bytes32","name":"operationId","type":"bytes32"}],"type":"error","name":"AccessManagerExpired"},{"inputs":[{"internalType":"address","name":"initialAdmin","type":"address"}],"type":"error","name":"AccessManagerInvalidInitialAdmin"},{"inputs":[{"internalType":"uint64","name":"roleId","type":"uint64"}],"type":"error","name":"AccessManagerLockedRole"},{"inputs":[{"internalType":"bytes32","name":"operationId","type":"bytes32"}],"type":"error","name":"AccessManagerNotReady"},{"inputs":[{"internalType":"bytes32","name":"operationId","type":"bytes32"}],"type":"error","name":"AccessManagerNotScheduled"},{"inputs":[{"internalType":"address","name":"msgsender","type":"address"},{"internalType":"uint64","name":"roleId","type":"uint64"}],"type":"error","name":"AccessManagerUnauthorizedAccount"},{"inputs":[{"internalType":"address","name":"caller","type":"address"},{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes4","name":"selector","type":"bytes4"}],"type":"error","name":"AccessManagerUnauthorizedCall"},{"inputs":[{"internalType":"address","name":"msgsender","type":"address"},{"internalType":"address","name":"caller","type":"address"},{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes4","name":"selector","type":"bytes4"}],"type":"error","name":"AccessManagerUnauthorizedCancel"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"type":"error","name":"AccessManagerUnauthorizedConsume"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"type":"error","name":"AddressEmptyCode"},{"inputs":[{"internalType":"address","name":"implementation","type":"address"}],"type":"error","name":"ERC1967InvalidImplementation"},{"inputs":[],"type":"error","name":"ERC1967NonPayable"},{"inputs":[],"type":"error","name":"FailedCall"},{"inputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"type":"error","name":"InsufficientBalance"},{"inputs":[],"type":"error","name":"InvalidInitialization"},{"inputs":[],"type":"error","name":"NotInitializing"},{"inputs":[{"internalType":"uint8","name":"bits","type":"uint8"},{"internalType":"uint256","name":"value","type":"uint256"}],"type":"error","name":"SafeCastOverflowedUintDowncast"},{"inputs":[],"type":"error","name":"UUPSUnauthorizedCallContext"},{"inputs":[{"internalType":"bytes32","name":"slot","type":"bytes32"}],"type":"error","name":"UUPSUnsupportedProxiableUUID"},{"inputs":[{"internalType":"uint64","name":"version","type":"uint64","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"operationId","type":"bytes32","indexed":true},{"internalType":"uint32","name":"nonce","type":"uint32","indexed":true}],"type":"event","name":"OperationCanceled","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"operationId","type":"bytes32","indexed":true},{"internalType":"uint32","name":"nonce","type":"uint32","indexed":true}],"type":"event","name":"OperationExecuted","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"operationId","type":"bytes32","indexed":true},{"internalType":"uint32","name":"nonce","type":"uint32","indexed":true},{"internalType":"uint48","name":"schedule","type":"uint48","indexed":false},{"internalType":"address","name":"caller","type":"address","indexed":false},{"internalType":"address","name":"target","type":"address","indexed":false},{"internalType":"bytes","name":"data","type":"bytes","indexed":false}],"type":"event","name":"OperationScheduled","anonymous":false},{"inputs":[{"internalType":"uint64","name":"roleId","type":"uint64","indexed":true},{"internalType":"uint64","name":"admin","type":"uint64","indexed":true}],"type":"event","name":"RoleAdminChanged","anonymous":false},{"inputs":[{"internalType":"uint64","name":"roleId","type":"uint64","indexed":true},{"internalType":"uint32","name":"delay","type":"uint32","indexed":false},{"internalType":"uint48","name":"since","type":"uint48","indexed":false}],"type":"event","name":"RoleGrantDelayChanged","anonymous":false},{"inputs":[{"internalType":"uint64","name":"roleId","type":"uint64","indexed":true},{"internalType":"address","name":"account","type":"address","indexed":true},{"internalType":"uint32","name":"delay","type":"uint32","indexed":false},{"internalType":"uint48","name":"since","type":"uint48","indexed":false},{"internalType":"bool","name":"newMember","type":"bool","indexed":false}],"type":"event","name":"RoleGranted","anonymous":false},{"inputs":[{"internalType":"uint64","name":"roleId","type":"uint64","indexed":true},{"internalType":"uint64","name":"guardian","type":"uint64","indexed":true}],"type":"event","name":"RoleGuardianChanged","anonymous":false},{"inputs":[{"internalType":"uint64","name":"roleId","type":"uint64","indexed":true},{"internalType":"string","name":"label","type":"string","indexed":false}],"type":"event","name":"RoleLabel","anonymous":false},{"inputs":[{"internalType":"uint64","name":"roleId","type":"uint64","indexed":true},{"internalType":"address","name":"account","type":"address","indexed":true}],"type":"event","name":"RoleRevoked","anonymous":false},{"inputs":[{"internalType":"address","name":"target","type":"address","indexed":true},{"internalType":"uint32","name":"delay","type":"uint32","indexed":false},{"internalType":"uint48","name":"since","type":"uint48","indexed":false}],"type":"event","name":"TargetAdminDelayUpdated","anonymous":false},{"inputs":[{"internalType":"address","name":"target","type":"address","indexed":true},{"internalType":"bool","name":"closed","type":"bool","indexed":false}],"type":"event","name":"TargetClosed","anonymous":false},{"inputs":[{"internalType":"address","name":"target","type":"address","indexed":true},{"internalType":"bytes4","name":"selector","type":"bytes4","indexed":false},{"internalType":"uint64","name":"roleId","type":"uint64","indexed":true}],"type":"event","name":"TargetFunctionRoleUpdated","anonymous":false},{"inputs":[{"internalType":"address","name":"implementation","type":"address","indexed":true}],"type":"event","name":"Upgraded","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"ADMIN_ROLE","outputs":[{"internalType":"uint64","name":"","type":"uint64"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"PUBLIC_ROLE","outputs":[{"internalType":"uint64","name":"","type":"uint64"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"UPGRADE_INTERFACE_VERSION","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"address","name":"caller","type":"address"},{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes4","name":"selector","type":"bytes4"}],"stateMutability":"view","type":"function","name":"canCall","outputs":[{"internalType":"bool","name":"immediate","type":"bool"},{"internalType":"uint32","name":"delay","type":"uint32"}]},{"inputs":[{"internalType":"address","name":"caller","type":"address"},{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"cancel","outputs":[{"internalType":"uint32","name":"","type":"uint32"}]},{"inputs":[{"internalType":"address","name":"caller","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"consumeScheduledOp"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"payable","type":"function","name":"execute","outputs":[{"internalType":"uint32","name":"","type":"uint32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"expiration","outputs":[{"internalType":"uint32","name":"","type":"uint32"}]},{"inputs":[{"internalType":"uint64","name":"roleId","type":"uint64"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"getAccess","outputs":[{"internalType":"uint48","name":"since","type":"uint48"},{"internalType":"uint32","name":"currentDelay","type":"uint32"},{"internalType":"uint32","name":"pendingDelay","type":"uint32"},{"internalType":"uint48","name":"effect","type":"uint48"}]},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"}],"stateMutability":"view","type":"function","name":"getNonce","outputs":[{"internalType":"uint32","name":"","type":"uint32"}]},{"inputs":[{"internalType":"uint64","name":"roleId","type":"uint64"}],"stateMutability":"view","type":"function","name":"getRoleAdmin","outputs":[{"internalType":"uint64","name":"","type":"uint64"}]},{"inputs":[{"internalType":"uint64","name":"roleId","type":"uint64"}],"stateMutability":"view","type":"function","name":"getRoleGrantDelay","outputs":[{"internalType":"uint32","name":"","type":"uint32"}]},{"inputs":[{"internalType":"uint64","name":"roleId","type":"uint64"}],"stateMutability":"view","type":"function","name":"getRoleGuardian","outputs":[{"internalType":"uint64","name":"","type":"uint64"}]},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"}],"stateMutability":"view","type":"function","name":"getSchedule","outputs":[{"internalType":"uint48","name":"","type":"uint48"}]},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"stateMutability":"view","type":"function","name":"getTargetAdminDelay","outputs":[{"internalType":"uint32","name":"","type":"uint32"}]},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes4","name":"selector","type":"bytes4"}],"stateMutability":"view","type":"function","name":"getTargetFunctionRole","outputs":[{"internalType":"uint64","name":"","type":"uint64"}]},{"inputs":[{"internalType":"uint64","name":"roleId","type":"uint64"},{"internalType":"address","name":"account","type":"address"},{"internalType":"uint32","name":"executionDelay","type":"uint32"}],"stateMutability":"nonpayable","type":"function","name":"grantRole"},{"inputs":[{"internalType":"uint64","name":"roleId","type":"uint64"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"hasRole","outputs":[{"internalType":"bool","name":"isMember","type":"bool"},{"internalType":"uint32","name":"executionDelay","type":"uint32"}]},{"inputs":[{"internalType":"address","name":"caller","type":"address"},{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"view","type":"function","name":"hashOperation","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"address","name":"initialAdmin","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"stateMutability":"view","type":"function","name":"isTargetClosed","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"uint64","name":"roleId","type":"uint64"},{"internalType":"string","name":"label","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"labelRole"},{"inputs":[],"stateMutability":"view","type":"function","name":"minSetback","outputs":[{"internalType":"uint32","name":"","type":"uint32"}]},{"inputs":[{"internalType":"bytes[]","name":"data","type":"bytes[]"}],"stateMutability":"nonpayable","type":"function","name":"multicall","outputs":[{"internalType":"bytes[]","name":"results","type":"bytes[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"proxiableUUID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"uint64","name":"roleId","type":"uint64"},{"internalType":"address","name":"callerConfirmation","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"renounceRole"},{"inputs":[{"internalType":"uint64","name":"roleId","type":"uint64"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeRole"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint48","name":"when","type":"uint48"}],"stateMutability":"nonpayable","type":"function","name":"schedule","outputs":[{"internalType":"bytes32","name":"operationId","type":"bytes32"},{"internalType":"uint32","name":"nonce","type":"uint32"}]},{"inputs":[{"internalType":"uint64","name":"roleId","type":"uint64"},{"internalType":"uint32","name":"newDelay","type":"uint32"}],"stateMutability":"nonpayable","type":"function","name":"setGrantDelay"},{"inputs":[{"internalType":"uint64","name":"roleId","type":"uint64"},{"internalType":"uint64","name":"admin","type":"uint64"}],"stateMutability":"nonpayable","type":"function","name":"setRoleAdmin"},{"inputs":[{"internalType":"uint64","name":"roleId","type":"uint64"},{"internalType":"uint64","name":"guardian","type":"uint64"}],"stateMutability":"nonpayable","type":"function","name":"setRoleGuardian"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint32","name":"newDelay","type":"uint32"}],"stateMutability":"nonpayable","type":"function","name":"setTargetAdminDelay"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bool","name":"closed","type":"bool"}],"stateMutability":"nonpayable","type":"function","name":"setTargetClosed"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"},{"internalType":"uint64","name":"roleId","type":"uint64"}],"stateMutability":"nonpayable","type":"function","name":"setTargetFunctionRole"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"address","name":"newAuthority","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"updateAuthority"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"payable","type":"function","name":"upgradeToAndCall"}],"devdoc":{"kind":"dev","methods":{"canCall(address,address,bytes4)":{"details":"Check if an address (`caller`) is authorised to call a given function on a given contract directly (with no restriction). Additionally, it returns the delay needed to perform the call indirectly through the {schedule} & {execute} workflow. This function is usually called by the targeted contract to control immediate execution of restricted functions. Therefore we only return true if the call can be performed without any delay. If the call is subject to a previously set delay (not zero), then the function should return false and the caller should schedule the operation for future execution. If `immediate` is true, the delay can be disregarded and the operation can be immediately executed, otherwise the operation can be executed if and only if delay is greater than 0. NOTE: The IAuthority interface does not include the `uint32` delay. This is an extension of that interface that is backward compatible. Some contracts may thus ignore the second return argument. In that case they will fail to identify the indirect workflow, and will consider calls that require a delay to be forbidden. NOTE: This function does not report the permissions of the admin functions in the manager itself. These are defined by the {AccessManager} documentation."},"cancel(address,address,bytes)":{"details":"Cancel a scheduled (delayed) operation. Returns the nonce that identifies the previously scheduled operation that is cancelled. Requirements: - the caller must be the proposer, a guardian of the targeted function, or a global admin Emits a {OperationCanceled} event."},"consumeScheduledOp(address,bytes)":{"details":"Consume a scheduled operation targeting the caller. If such an operation exists, mark it as consumed (emit an {OperationExecuted} event and clean the state). Otherwise, throw an error. This is useful for contract that want to enforce that calls targeting them were scheduled on the manager, with all the verifications that it implies. Emit a {OperationExecuted} event."},"execute(address,bytes)":{"details":"Execute a function that is delay restricted, provided it was properly scheduled beforehand, or the execution delay is 0. Returns the nonce that identifies the previously scheduled operation that is executed, or 0 if the operation wasn't previously scheduled (if the caller doesn't have an execution delay). Emits an {OperationExecuted} event only if the call was scheduled and delayed."},"expiration()":{"details":"Expiration delay for scheduled proposals. Defaults to 1 week. IMPORTANT: Avoid overriding the expiration with 0. Otherwise every contract proposal will be expired immediately, disabling any scheduling usage."},"getAccess(uint64,address)":{"details":"Get the access details for a given account for a given role. These details include the timepoint at which membership becomes active, and the delay applied to all operation by this user that requires this permission level. Returns: [0] Timestamp at which the account membership becomes valid. 0 means role is not granted. [1] Current execution delay for the account. [2] Pending execution delay for the account. [3] Timestamp at which the pending execution delay will become active. 0 means no delay update is scheduled."},"getNonce(bytes32)":{"details":"Return the nonce for the latest scheduled operation with a given id. Returns 0 if the operation has never been scheduled."},"getRoleAdmin(uint64)":{"details":"Get the id of the role that acts as an admin for the given role. The admin permission is required to grant the role, revoke the role and update the execution delay to execute an operation that is restricted to this role."},"getRoleGrantDelay(uint64)":{"details":"Get the role current grant delay. Its value may change at any point without an event emitted following a call to {setGrantDelay}. Changes to this value, including effect timepoint are notified in advance by the {RoleGrantDelayChanged} event."},"getRoleGuardian(uint64)":{"details":"Get the role that acts as a guardian for a given role. The guardian permission allows canceling operations that have been scheduled under the role."},"getSchedule(bytes32)":{"details":"Return the timepoint at which a scheduled operation will be ready for execution. This returns 0 if the operation is not yet scheduled, has expired, was executed, or was canceled."},"getTargetAdminDelay(address)":{"details":"Get the admin delay for a target contract. Changes to contract configuration are subject to this delay."},"getTargetFunctionRole(address,bytes4)":{"details":"Get the role required to call a function."},"grantRole(uint64,address,uint32)":{"details":"Add `account` to `roleId`, or change its execution delay. This gives the account the authorization to call any function that is restricted to this role. An optional execution delay (in seconds) can be set. If that delay is non 0, the user is required to schedule any operation that is restricted to members of this role. The user will only be able to execute the operation after the delay has passed, before it has expired. During this period, admin and guardians can cancel the operation (see {cancel}). If the account has already been granted this role, the execution delay will be updated. This update is not immediate and follows the delay rules. For example, if a user currently has a delay of 3 hours, and this is called to reduce that delay to 1 hour, the new delay will take some time to take effect, enforcing that any operation executed in the 3 hours that follows this update was indeed scheduled before this update. Requirements: - the caller must be an admin for the role (see {getRoleAdmin}) - granted role must not be the `PUBLIC_ROLE` Emits a {RoleGranted} event."},"hasRole(uint64,address)":{"details":"Check if a given account currently has the permission level corresponding to a given role. Note that this permission might be associated with an execution delay. {getAccess} can provide more details."},"hashOperation(address,address,bytes)":{"details":"Hashing function for delayed operations."},"isTargetClosed(address)":{"details":"Get whether the contract is closed disabling any access. Otherwise role permissions are applied. NOTE: When the manager itself is closed, admin functions are still accessible to avoid locking the contract."},"labelRole(uint64,string)":{"details":"Give a label to a role, for improved role discoverability by UIs. Requirements: - the caller must be a global admin Emits a {RoleLabel} event."},"minSetback()":{"details":"Minimum setback for all delay updates, with the exception of execution delays. It can be increased without setback (and reset via {revokeRole} in the case event of an accidental increase). Defaults to 5 days."},"multicall(bytes[])":{"custom:oz-upgrades-unsafe-allow-reachable":"delegatecall","details":"Receives and executes a batch of function calls on this contract."},"proxiableUUID()":{"details":"Implementation of the ERC-1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier."},"renounceRole(uint64,address)":{"details":"Renounce role permissions for the calling account with immediate effect. If the sender is not in the role this call has no effect. Requirements: - the caller must be `callerConfirmation`. Emits a {RoleRevoked} event if the account had the role."},"revokeRole(uint64,address)":{"details":"Remove an account from a role, with immediate effect. If the account does not have the role, this call has no effect. Requirements: - the caller must be an admin for the role (see {getRoleAdmin}) - revoked role must not be the `PUBLIC_ROLE` Emits a {RoleRevoked} event if the account had the role."},"schedule(address,bytes,uint48)":{"details":"Schedule a delayed operation for future execution, and return the operation identifier. It is possible to choose the timestamp at which the operation becomes executable as long as it satisfies the execution delays required for the caller. The special value zero will automatically set the earliest possible time. Returns the `operationId` that was scheduled. Since this value is a hash of the parameters, it can reoccur when the same parameters are used; if this is relevant, the returned `nonce` can be used to uniquely identify this scheduled operation from other occurrences of the same `operationId` in invocations of {execute} and {cancel}. Emits a {OperationScheduled} event. NOTE: It is not possible to concurrently schedule more than one operation with the same `target` and `data`. If this is necessary, a random byte can be appended to `data` to act as a salt that will be ignored by the target contract if it is using standard Solidity ABI encoding."},"setGrantDelay(uint64,uint32)":{"details":"Update the delay for granting a `roleId`. Requirements: - the caller must be a global admin Emits a {RoleGrantDelayChanged} event."},"setRoleAdmin(uint64,uint64)":{"details":"Change admin role for a given role. Requirements: - the caller must be a global admin Emits a {RoleAdminChanged} event"},"setRoleGuardian(uint64,uint64)":{"details":"Change guardian role for a given role. Requirements: - the caller must be a global admin Emits a {RoleGuardianChanged} event"},"setTargetAdminDelay(address,uint32)":{"details":"Set the delay for changing the configuration of a given target contract. Requirements: - the caller must be a global admin Emits a {TargetAdminDelayUpdated} event."},"setTargetClosed(address,bool)":{"details":"Set the closed flag for a contract. Closing the manager itself won't disable access to admin methods to avoid locking the contract. Requirements: - the caller must be a global admin Emits a {TargetClosed} event."},"setTargetFunctionRole(address,bytes4[],uint64)":{"details":"Set the role required to call functions identified by the `selectors` in the `target` contract. Requirements: - the caller must be a global admin Emits a {TargetFunctionRoleUpdated} event per selector."},"updateAuthority(address,address)":{"details":"Changes the authority of a target managed by this manager instance. Requirements: - the caller must be a global admin"},"upgradeToAndCall(address,bytes)":{"custom:oz-upgrades-unsafe-allow-reachable":"delegatecall","details":"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event."}},"version":1},"userdoc":{"kind":"user","methods":{"initialize(address)":{"notice":"Initializes the proxy state."}},"version":1}},"settings":{"remappings":["@ethereum-attestation-service/=node_modules/@ethereum-attestation-service/","@ethsign/=node_modules/@ethsign/","@openzeppelin/=node_modules/@openzeppelin/","@synaps3/=contracts/","ds-test/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/lib/ds-test/src/","forge-std/=lib/forge-std/src/","hardhat/=node_modules/hardhat/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","solady/=lib/solady/src/","solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/"],"optimizer":{"enabled":true,"runs":20000},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"contracts/access/AccessManager.sol":"AccessManager"},"evmVersion":"cancun","libraries":{},"viaIR":true},"sources":{"contracts/access/AccessManager.sol":{"keccak256":"0x88327ca2680d386f41a1e05046fc5ddd4a5570d1ca5464db223f85275a44d8ca","urls":["bzz-raw://fda1a516c41db99a0abdcc57f48b0f6edc4814d7677d0273c03823d57f3cde26","dweb:/ipfs/QmRimeUiTcKrQAqwTdquZCKd1aYN5FS5B1y24P24uLQsHd"],"license":"MIT"},"contracts/core/primitives/Constants.sol":{"keccak256":"0xd3dac9b10f88534046b904f281588f0293fa603ec5c68ffeeaf64eec88ebe65e","urls":["bzz-raw://d9dddce59781d9a41c012aeff533cca898b1553924f09edf192d0f534f4cc4a1","dweb:/ipfs/QmdKPss1KNAneMGaTXqQSWraN1s6MDCHkMgetn5BVxzXn3"],"license":"MIT"},"node_modules/@openzeppelin/contracts-upgradeable/access/manager/AccessManagerUpgradeable.sol":{"keccak256":"0xc36716750a9095416ede9775ee8ae19f13794406a297c0dccd6146268bd36d74","urls":["bzz-raw://595c9227d490558d1666e32609ac6677ba4fff7187cb539c3bb2c9a3e8b63b27","dweb:/ipfs/QmZgoM4Rj7NuY8pfQ9pCvpKTrk5ZJ6Sdbf8XMsSVsvwMk5"],"license":"MIT"},"node_modules/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol":{"keccak256":"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b","urls":["bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609","dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM"],"license":"MIT"},"node_modules/@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol":{"keccak256":"0xf72d3b11f41fccbbdcacd121f994daab8267ccfceb1fb4f247e4ba274c169d27","urls":["bzz-raw://1e46ee40ddc9e2009176ce5d76aa2c046fd68f2ed52d02d77db191365b7c5b2e","dweb:/ipfs/QmZnxgPmCCHosdvbh4J65uTaFYeGtZGzQ1sXRdeh1y68Zr"],"license":"MIT"},"node_modules/@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol":{"keccak256":"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397","urls":["bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9","dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV"],"license":"MIT"},"node_modules/@openzeppelin/contracts-upgradeable/utils/MulticallUpgradeable.sol":{"keccak256":"0x1545b1796f0b94f811d95b8b208c0668dacfc7768247d22b63161a47c4c5ef4e","urls":["bzz-raw://a1dccf7856b960b2ed7565906b457812ad8d29a15d403f17702ac7e090680300","dweb:/ipfs/QmUqqibiekFv84mdq7zeyRF56mLJbFyFUxWKTrz8Twzkpn"],"license":"MIT"},"node_modules/@openzeppelin/contracts/access/manager/IAccessManaged.sol":{"keccak256":"0xaba93d42cd70e1418782951132d97b31ddce5f50ad81090884b6d0e41caac9d6","urls":["bzz-raw://b110886f83e3e98a11255a3b56790322e8d83e513304dde71299406685fc6694","dweb:/ipfs/QmPwroS7MUUk1EmsvaJqU6aarhQ8ewJtJMg7xxmTsaxZEv"],"license":"MIT"},"node_modules/@openzeppelin/contracts/access/manager/IAccessManager.sol":{"keccak256":"0x9be2d08a326515805bc9cf6315b7953f8d1ebe88abf48c2d645fb1fa8211a0e2","urls":["bzz-raw://e750d656e37efaefbb2300051ec2c4c725db266c5ff89bc985f7ecb8d214c4f4","dweb:/ipfs/QmT51FsZes2n2nrLLh3d8YkBYKY43CtwScZxixcLGzL9r6"],"license":"MIT"},"node_modules/@openzeppelin/contracts/interfaces/IERC1967.sol":{"keccak256":"0xb25a4f11fa80c702bf5cd85adec90e6f6f507f32f4a8e6f5dbc31e8c10029486","urls":["bzz-raw://6917f8a323e7811f041aecd4d9fd6e92455a6fba38a797ac6f6e208c7912b79d","dweb:/ipfs/QmShuYv55wYHGi4EFkDB8QfF7ZCHoKk2efyz3AWY1ExSq7"],"license":"MIT"},"node_modules/@openzeppelin/contracts/interfaces/draft-IERC1822.sol":{"keccak256":"0xc42facb5094f2f35f066a7155bda23545e39a3156faef3ddc00185544443ba7d","urls":["bzz-raw://d3b36282ab029b46bd082619a308a2ea11c309967b9425b7b7a6eb0b0c1c3196","dweb:/ipfs/QmP2YVfDB2FoREax3vJu7QhDnyYRMw52WPrCD4vdT2kuDA"],"license":"MIT"},"node_modules/@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol":{"keccak256":"0x911c3346ee26afe188f3b9dc267ef62a7ccf940aba1afa963e3922f0ca3d8a06","urls":["bzz-raw://04539f4419e44a831807d7203375d2bc6a733da256efd02e51290f5d5015218c","dweb:/ipfs/QmPZ97gsAAgaMRPiE2WJfkzRsudQnW5tPAvMgGj1jcTJtR"],"license":"MIT"},"node_modules/@openzeppelin/contracts/proxy/beacon/IBeacon.sol":{"keccak256":"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c","urls":["bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa","dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM"],"license":"MIT"},"node_modules/@openzeppelin/contracts/utils/Address.sol":{"keccak256":"0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5","urls":["bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23","dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb"],"license":"MIT"},"node_modules/@openzeppelin/contracts/utils/Errors.sol":{"keccak256":"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123","urls":["bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf","dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB"],"license":"MIT"},"node_modules/@openzeppelin/contracts/utils/Panic.sol":{"keccak256":"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a","urls":["bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a","dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG"],"license":"MIT"},"node_modules/@openzeppelin/contracts/utils/StorageSlot.sol":{"keccak256":"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97","urls":["bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b","dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM"],"license":"MIT"},"node_modules/@openzeppelin/contracts/utils/math/Math.sol":{"keccak256":"0xa00be322d7db5786750ce0ac7e2f5b633ac30a5ed5fa1ced1e74acfc19acecea","urls":["bzz-raw://6c84e822f87cbdc4082533b626667b6928715bb2b1e8e7eb96954cebb9e38c8d","dweb:/ipfs/QmZmy9dgxLTerBAQDuuHqbL6EpgRxddqgv5KmwpXYVbKz1"],"license":"MIT"},"node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol":{"keccak256":"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54","urls":["bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8","dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy"],"license":"MIT"},"node_modules/@openzeppelin/contracts/utils/types/Time.sol":{"keccak256":"0x36776530f012618bc7526ceb28e77b85e582cb12d9b9466a71d4bd6bf952e4cc","urls":["bzz-raw://9f867d046908497287d8a67643dd5d7e38c4027af4ab0a74ffbe1d6790c383c6","dweb:/ipfs/QmQ7s9gMP1nkwThFmoDifnGgpUMsMe5q5ZrAxGDsNnRGza"],"license":"MIT"}},"version":1},"storageLayout":{"storage":[],"types":{}},"ast":{"absolutePath":"contracts/access/AccessManager.sol","id":78,"exportedSymbols":{"AccessManager":[77],"AccessManagerUpgradeable":[50475],"C":[2476],"Initializable":[50729],"UUPSUpgradeable":[50911]},"nodeType":"SourceUnit","src":"32:2102:0","nodes":[{"id":1,"nodeType":"PragmaDirective","src":"32:23:0","nodes":[],"literals":["solidity","0.8",".26"]},{"id":3,"nodeType":"ImportDirective","src":"57:98:0","nodes":[],"absolutePath":"node_modules/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol","file":"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol","nameLocation":"-1:-1:-1","scope":78,"sourceUnit":50730,"symbolAliases":[{"foreign":{"id":2,"name":"Initializable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50729,"src":"66:13:0","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":5,"nodeType":"ImportDirective","src":"156:102:0","nodes":[],"absolutePath":"node_modules/@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol","nameLocation":"-1:-1:-1","scope":78,"sourceUnit":50912,"symbolAliases":[{"foreign":{"id":4,"name":"UUPSUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50911,"src":"165:15:0","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":7,"nodeType":"ImportDirective","src":"304:123:0","nodes":[],"absolutePath":"node_modules/@openzeppelin/contracts-upgradeable/access/manager/AccessManagerUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/access/manager/AccessManagerUpgradeable.sol","nameLocation":"-1:-1:-1","scope":78,"sourceUnit":50476,"symbolAliases":[{"foreign":{"id":6,"name":"AccessManagerUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50475,"src":"313:24:0","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":9,"nodeType":"ImportDirective","src":"428:59:0","nodes":[],"absolutePath":"contracts/core/primitives/Constants.sol","file":"@synaps3/core/primitives/Constants.sol","nameLocation":"-1:-1:-1","scope":78,"sourceUnit":2477,"symbolAliases":[{"foreign":{"id":8,"name":"C","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2476,"src":"437:1:0","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":77,"nodeType":"ContractDefinition","src":"574:1559:0","nodes":[{"id":54,"nodeType":"FunctionDefinition","src":"708:1055:0","nodes":[],"body":{"id":53,"nodeType":"Block","src":"778:985:0","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":25,"name":"__UUPSUpgradeable_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50783,"src":"788:22:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":26,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"788:24:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27,"nodeType":"ExpressionStatement","src":"788:24:0"},{"expression":{"arguments":[{"id":29,"name":"initialAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19,"src":"843:12:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":28,"name":"__AccessManager_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48497,"src":"822:20:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":30,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"822:34:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":31,"nodeType":"ExpressionStatement","src":"822:34:0"},{"expression":{"arguments":[{"expression":{"id":33,"name":"C","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2476,"src":"1630:1:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_C_$2476_$","typeString":"type(library C)"}},"id":34,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1632:8:0","memberName":"MOD_ROLE","nodeType":"MemberAccess","referencedDeclaration":2464,"src":"1630:10:0","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"expression":{"id":35,"name":"C","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2476,"src":"1642:1:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_C_$2476_$","typeString":"type(library C)"}},"id":36,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1644:10:0","memberName":"ADMIN_ROLE","nodeType":"MemberAccess","referencedDeclaration":2458,"src":"1642:12:0","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_uint64","typeString":"uint64"}],"id":32,"name":"_setRoleAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49190,"src":"1616:13:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint64_$_t_uint64_$returns$__$","typeString":"function (uint64,uint64)"}},"id":37,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1616:39:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":38,"nodeType":"ExpressionStatement","src":"1616:39:0"},{"expression":{"arguments":[{"expression":{"id":40,"name":"C","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2476,"src":"1679:1:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_C_$2476_$","typeString":"type(library C)"}},"id":41,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1681:8:0","memberName":"OPS_ROLE","nodeType":"MemberAccess","referencedDeclaration":2470,"src":"1679:10:0","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"expression":{"id":42,"name":"C","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2476,"src":"1691:1:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_C_$2476_$","typeString":"type(library C)"}},"id":43,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1693:10:0","memberName":"ADMIN_ROLE","nodeType":"MemberAccess","referencedDeclaration":2458,"src":"1691:12:0","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_uint64","typeString":"uint64"}],"id":39,"name":"_setRoleAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49190,"src":"1665:13:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint64_$_t_uint64_$returns$__$","typeString":"function (uint64,uint64)"}},"id":44,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1665:39:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":45,"nodeType":"ExpressionStatement","src":"1665:39:0"},{"expression":{"arguments":[{"expression":{"id":47,"name":"C","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2476,"src":"1728:1:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_C_$2476_$","typeString":"type(library C)"}},"id":48,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1730:13:0","memberName":"VERIFIED_ROLE","nodeType":"MemberAccess","referencedDeclaration":2467,"src":"1728:15:0","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"expression":{"id":49,"name":"C","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2476,"src":"1745:1:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_C_$2476_$","typeString":"type(library C)"}},"id":50,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1747:8:0","memberName":"GOV_ROLE","nodeType":"MemberAccess","referencedDeclaration":2461,"src":"1745:10:0","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_uint64","typeString":"uint64"}],"id":46,"name":"_setRoleAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49190,"src":"1714:13:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint64_$_t_uint64_$returns$__$","typeString":"function (uint64,uint64)"}},"id":51,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1714:42:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":52,"nodeType":"ExpressionStatement","src":"1714:42:0"}]},"baseFunctions":[48485],"documentation":{"id":17,"nodeType":"StructuredDocumentation","src":"663:40:0","text":"@notice Initializes the proxy state."},"functionSelector":"c4d66de8","implemented":true,"kind":"function","modifiers":[{"id":23,"kind":"modifierInvocation","modifierName":{"id":22,"name":"initializer","nameLocations":["766:11:0"],"nodeType":"IdentifierPath","referencedDeclaration":50583,"src":"766:11:0"},"nodeType":"ModifierInvocation","src":"766:11:0"}],"name":"initialize","nameLocation":"717:10:0","overrides":{"id":21,"nodeType":"OverrideSpecifier","overrides":[],"src":"757:8:0"},"parameters":{"id":20,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19,"mutability":"mutable","name":"initialAdmin","nameLocation":"736:12:0","nodeType":"VariableDeclaration","scope":54,"src":"728:20:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18,"name":"address","nodeType":"ElementaryTypeName","src":"728:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"727:22:0"},"returnParameters":{"id":24,"nodeType":"ParameterList","parameters":[],"src":"778:0:0"},"scope":77,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":76,"nodeType":"FunctionDefinition","src":"1880:251:0","nodes":[],"body":{"id":75,"nodeType":"Block","src":"1939:192:0","nodes":[],"statements":[{"assignments":[62,null],"declarations":[{"constant":false,"id":62,"mutability":"mutable","name":"isMember","nameLocation":"1955:8:0","nodeType":"VariableDeclaration","scope":75,"src":"1950:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":61,"name":"bool","nodeType":"ElementaryTypeName","src":"1950:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null],"id":69,"initialValue":{"arguments":[{"expression":{"id":64,"name":"C","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2476,"src":"1977:1:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_C_$2476_$","typeString":"type(library C)"}},"id":65,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1979:10:0","memberName":"ADMIN_ROLE","nodeType":"MemberAccess","referencedDeclaration":2458,"src":"1977:12:0","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"expression":{"id":66,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1991:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":67,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1995:6:0","memberName":"sender","nodeType":"MemberAccess","src":"1991:10:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_address","typeString":"address"}],"id":63,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48845,"src":"1969:7:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint64_$_t_address_$returns$_t_bool_$_t_uint32_$","typeString":"function (uint64,address) view returns (bool,uint32)"}},"id":68,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1969:33:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint32_$","typeString":"tuple(bool,uint32)"}},"nodeType":"VariableDeclarationStatement","src":"1949:53:0"},{"expression":{"arguments":[{"id":71,"name":"isMember","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62,"src":"2075:8:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f6e6c792061646d696e2063616e20617574686f72697a65207468652075706772616465","id":72,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2085:38:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_3a03459b817a6960fe46dd5d58c663d82e1532269691d6a584c4648ecc718487","typeString":"literal_string \"Only admin can authorize the upgrade\""},"value":"Only admin can authorize the upgrade"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_3a03459b817a6960fe46dd5d58c663d82e1532269691d6a584c4648ecc718487","typeString":"literal_string \"Only admin can authorize the upgrade\""}],"id":70,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"2067:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":73,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2067:57:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":74,"nodeType":"ExpressionStatement","src":"2067:57:0"}]},"baseFunctions":[50865],"documentation":{"id":55,"nodeType":"StructuredDocumentation","src":"1769:106:0","text":"@dev Authorizes the upgrade of the contract.\n @notice Only the admin can authorize the upgrade."},"implemented":true,"kind":"function","modifiers":[],"name":"_authorizeUpgrade","nameLocation":"1889:17:0","overrides":{"id":59,"nodeType":"OverrideSpecifier","overrides":[],"src":"1930:8:0"},"parameters":{"id":58,"nodeType":"ParameterList","parameters":[{"constant":false,"id":57,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":76,"src":"1907:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":56,"name":"address","nodeType":"ElementaryTypeName","src":"1907:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1906:9:0"},"returnParameters":{"id":60,"nodeType":"ParameterList","parameters":[],"src":"1939:0:0"},"scope":77,"stateMutability":"view","virtual":false,"visibility":"internal"}],"abstract":false,"baseContracts":[{"baseName":{"id":11,"name":"Initializable","nameLocations":["600:13:0"],"nodeType":"IdentifierPath","referencedDeclaration":50729,"src":"600:13:0"},"id":12,"nodeType":"InheritanceSpecifier","src":"600:13:0"},{"baseName":{"id":13,"name":"UUPSUpgradeable","nameLocations":["615:15:0"],"nodeType":"IdentifierPath","referencedDeclaration":50911,"src":"615:15:0"},"id":14,"nodeType":"InheritanceSpecifier","src":"615:15:0"},{"baseName":{"id":15,"name":"AccessManagerUpgradeable","nameLocations":["632:24:0"],"nodeType":"IdentifierPath","referencedDeclaration":50475,"src":"632:24:0"},"id":16,"nodeType":"InheritanceSpecifier","src":"632:24:0"}],"canonicalName":"AccessManager","contractDependencies":[],"contractKind":"contract","documentation":{"id":10,"nodeType":"StructuredDocumentation","src":"489:85:0","text":"@title AccessManager\n @dev Manages roles and permissions across the protocol."},"fullyImplemented":true,"linearizedBaseContracts":[77,50475,54285,52624,52521,50911,59481,50729],"name":"AccessManager","nameLocation":"583:13:0","scope":78,"usedErrors":[50492,50495,50756,50761,53965,53969,53973,53977,53981,53983,53989,53997,54001,54011,54015,59676,59689,61972,62261,62264,65974],"usedEvents":[50500,53872,53879,53886,53893,53906,53913,53920,53927,53936,53943,53952,53961,59403]}],"license":"MIT"},"id":0}
\ No newline at end of file
diff --git a/src/hooks/use-get-active-licenses.ts b/src/hooks/use-get-active-licenses.ts
index f8170ed99..5bb243c2d 100644
--- a/src/hooks/use-get-active-licenses.ts
+++ b/src/hooks/use-get-active-licenses.ts
@@ -38,18 +38,16 @@ export const useGetActiveLicenses = (
const fetchHolderPolicies = useCallback(async () => {
// Validate that holder exists
- if (!holder) {
+ if (!holder || !recipient) {
setActiveLicenses([]);
setLoading(false);
- setError({ message: 'Holder address is missing.' });
+ setError({ message: 'Holder or recipient address is missing.' });
return;
}
setLoading(true);
try {
- console.log('getActiveLicenses')
- console.log(GLOBAL_CONSTANTS.ACCESS_AGG_ADDRESS)
// Call the contract method
const licenses: any = (await publicClient.readContract({
address: GLOBAL_CONSTANTS.ACCESS_AGG_ADDRESS,
@@ -58,10 +56,6 @@ export const useGetActiveLicenses = (
args: [recipient, holder],
})) as Policy[];
- console.log('getActiveLicenses')
- console.log(licenses)
- console.log(GLOBAL_CONSTANTS.ACCESS_AGG_ADDRESS)
-
// Store the response in state
setActiveLicenses(licenses);
setError(null);
diff --git a/src/hooks/use-get-policies-terms.ts b/src/hooks/use-get-policies-terms.ts
index fda3e3a95..0ce10a72d 100644
--- a/src/hooks/use-get-policies-terms.ts
+++ b/src/hooks/use-get-policies-terms.ts
@@ -60,9 +60,6 @@ export const useGetPoliciesTerms = (
args: [holder],
})) as Policy[];
- console.log('getPoliciesTerms')
- console.log(policies)
-
// Store the response in state
setAuthorizedHolderPolicies(policies);
setError(null);
diff --git a/src/hooks/use-has-role.ts b/src/hooks/use-has-role.ts
new file mode 100644
index 000000000..e7a7597a5
--- /dev/null
+++ b/src/hooks/use-has-role.ts
@@ -0,0 +1,62 @@
+// REACT IMPORTS
+import { useCallback, useState } from 'react';
+
+// VIEM IMPORTS
+import { Address } from 'viem';
+
+// LOCAL IMPORTS
+import { publicClient } from '@src/clients/viem/publicClient';
+import AccessManagerAbi from '@src/config/abi/AccessManager.json';
+import { GLOBAL_CONSTANTS } from '@src/config-global.ts';
+
+// ----------------------------------------------------------------------
+
+interface HasRoleError {
+ message: string;
+ code?: number;
+ [key: string]: any;
+}
+
+interface UseHasRoleHook {
+ hasRole?: boolean;
+ loading: boolean;
+ error?: HasRoleError | null;
+ fetchHasRole: (roleId: number, account: Address) => void;
+}
+
+// ----------------------------------------------------------------------
+
+export const useHasRole = (): UseHasRoleHook => {
+ const [hasRole, setHasRole] = useState(undefined);
+ const [loading, setLoading] = useState(true);
+ const [error, setError] = useState(null);
+
+ const fetchHasRole = useCallback(async (roleId: number, account: Address) => {
+ setLoading(true);
+ try {
+ const roleData: any = await publicClient.readContract({
+ address: GLOBAL_CONSTANTS.ACCESS_MANAGER_ADDRESS,
+ abi: AccessManagerAbi.abi,
+ functionName: 'hasRole',
+ args: [roleId, account],
+ });
+
+ const role = Boolean(roleData?.[0]);
+ setHasRole(role);
+ setError(null);
+ } catch (err: any) {
+ console.error('Error checking access:', err);
+ setHasRole(undefined);
+ setError({ message: err?.message || 'An error occurred' });
+ } finally {
+ setLoading(false);
+ }
+ }, []);
+
+ return {
+ hasRole,
+ loading,
+ error,
+ fetchHasRole,
+ };
+};
diff --git a/src/hooks/use-is-verified.ts b/src/hooks/use-is-verified.ts
new file mode 100644
index 000000000..63e5644b3
--- /dev/null
+++ b/src/hooks/use-is-verified.ts
@@ -0,0 +1,39 @@
+// REACT IMPORTS
+import { useEffect, useState } from 'react';
+import { Address } from 'viem';
+
+// LOCAL IMPORTS
+import { useHasRole } from './use-has-role.ts';
+
+// ----------------------------------------------------------------------
+
+interface UseIsVerifiedHook {
+ isVerified: boolean | undefined;
+ loading: boolean;
+ error?: string | null;
+}
+
+// ----------------------------------------------------------------------
+
+export const useIsVerified = (account: Address): UseIsVerifiedHook => {
+ const { hasRole, loading, error, fetchHasRole } = useHasRole();
+ const [isVerified, setIsVerified] = useState(undefined);
+
+ useEffect(() => {
+ if (account) {
+ fetchHasRole(3, account); // Role ID 3 for verified
+ }
+ }, [account, fetchHasRole]);
+
+ useEffect(() => {
+ if (!loading && hasRole !== undefined) {
+ setIsVerified(hasRole);
+ }
+ }, [loading, hasRole]);
+
+ return {
+ isVerified,
+ loading,
+ error: error?.message ?? null,
+ };
+};
diff --git a/src/hooks/use-metamask.ts b/src/hooks/use-metamask.ts
index 838e7fb76..1e317c171 100644
--- a/src/hooks/use-metamask.ts
+++ b/src/hooks/use-metamask.ts
@@ -8,7 +8,6 @@ import { polygonAmoy } from 'viem/chains';
// METAMASK IMPORTS
import { useSDK } from '@metamask/sdk-react';
-// import { enqueueSnackbar } from 'notistack';
/**
* Represents the shape of the object returned by the useMetaMask hook.
@@ -70,13 +69,6 @@ export function useMetaMask(): UseMetaMaskReturn {
provider,
} = useSDK();
- // useEffect(() => {
- // if (error) {
- // const errorMessage = typeof error === 'object' ? JSON.stringify(error) : String(error);
- // enqueueSnackbar(`METAMASK ERROR: ${errorMessage}`);
- // }
- // }, [error]);
-
/**
* We define 'connect' as a guaranteed function (non-optional).
* If the sdk is not ready, this method will throw an error.
diff --git a/src/hooks/use-notification-payload.ts b/src/hooks/use-notification-payload.ts
index 52b721dbb..3803acb8b 100644
--- a/src/hooks/use-notification-payload.ts
+++ b/src/hooks/use-notification-payload.ts
@@ -1,4 +1,5 @@
import { ProfileSession } from '@lens-protocol/react-web';
+import {dicebear} from "@src/utils/dicebear.ts";
type NotificationPayload = {
type: string;
@@ -35,15 +36,12 @@ export const useNotificationPayload = (sessionData: ProfileSession | undefined)
displayName: sessionData?.profile?.metadata?.displayName ?? '',
avatar:
(sessionData?.profile?.metadata?.picture as any)?.optimized?.uri ??
- `https://api.dicebear.com/9.x/bottts-neutral/svg?seed=${sessionData?.profile?.id}`,
+ dicebear(sessionData?.profile?.id as string),
},
to: {
id: toProfile.id,
displayName: toProfile.displayName,
- avatar:
- toProfile.avatar ??
- `https://api.dicebear.com/9.x/bottts-neutral/svg?seed=${toProfile.id}`,
- },
+ avatar: toProfile.avatar ?? dicebear(toProfile.id)},
content,
},
};
diff --git a/src/hooks/use-referrals.ts b/src/hooks/use-referrals.ts
new file mode 100644
index 000000000..ff1dd70a4
--- /dev/null
+++ b/src/hooks/use-referrals.ts
@@ -0,0 +1,250 @@
+import { useState } from 'react';
+import emailjs from '@emailjs/browser';
+import { GLOBAL_CONSTANTS } from '@src/config-global';
+import { useSelector } from 'react-redux';
+import {
+ fetchInvitations as fetchInvitationsAction,
+ checkIfMyEmailHasPendingInvite as checkIfMyEmailHasPendingInviteAction,
+ acceptInvitation as acceptInvitationAction,
+ checkIfInvitationSent as checkIfInvitationSentAction,
+ checkIfEmailAlreadyAccepted as checkIfEmailAlreadyAcceptedAction,
+ sendInvitation as sendInvitationAction,
+ acceptOrCreateInvitationForUser as acceptOrCreateInvitationForUserAction
+} from '@src/utils/supabase-actions';
+
+export interface Invitation {
+ id: string;
+ status: 'pending' | 'accepted' | 'rejected';
+ sender_email: string;
+ destination: string;
+ sender_id: string;
+ receiver_id: string | null;
+ payload: any;
+ created_at: string;
+}
+
+export type EmailParams = {
+ to_email: string;
+ from_name: string;
+};
+
+const useReferrals = () => {
+ /**
+ * State variables to manage invitations, loading state, and error messages.
+ */
+ const [invitations, setInvitations] = useState([]);
+ const [loading, setLoading] = useState(false);
+ const [error, setError] = useState(null);
+
+ /**
+ * Retrieve the current user's email and session data from Redux (or your global state).
+ * Adjust according to how you store user data in your application.
+ */
+ const userEmail = useSelector((state: any) => state.auth.email);
+ const sessionData = useSelector((state: any) => state.auth.session);
+
+ /**
+ * Fetches all invitations from the Supabase 'invitations' table filtered by senderId.
+ * This could be used, for example, to list all invitations sent by the current user.
+ *
+ * @param {string} senderId - The ID of the user who sent the invitations.
+ */
+ const fetchInvitations = async (senderId: string) => {
+ setLoading(true);
+ setError(null);
+
+ const { data, error } = await fetchInvitationsAction(senderId);
+
+ if (error) {
+ setError(error);
+ } else {
+ setInvitations(data || []);
+ }
+
+ setLoading(false);
+ };
+
+ /**
+ * Checks whether the current user's email has a pending invitation in the 'invitations' table.
+ *
+ * @returns {Promise} - Returns true if there is at least one pending invitation for the current user's email, otherwise false.
+ */
+ const checkIfMyEmailHasPendingInvite = async (): Promise => {
+ setLoading(true);
+ setError(null);
+
+ const { hasPending, error } = await checkIfMyEmailHasPendingInviteAction(userEmail);
+
+ if (error) {
+ setError(error);
+ }
+
+ setLoading(false);
+ return hasPending;
+ };
+
+ /**
+ * Accepts an existing invitation by updating its status from 'pending' to 'accepted'.
+ * and set the `receiver_id` to the current user's profile ID.
+ *
+ * @param {string} invitationId - The ID of the invitation to accept.
+ * @returns {Promise} - Returns the updated invitation if successful, otherwise null.
+ */
+ const acceptInvitation = async (invitationId: string): Promise => {
+ setLoading(true);
+ setError(null);
+
+ const { data, error } = await acceptInvitationAction(invitationId, sessionData?.profile?.id);
+
+ if (error) {
+ setError(error);
+ setLoading(false);
+ return null;
+ }
+
+ setInvitations((prev) =>
+ prev.map((inv) =>
+ inv.id === invitationId
+ ? {
+ ...inv,
+ status: 'accepted',
+ receiver_id: sessionData?.profile?.id,
+ }
+ : inv
+ )
+ );
+
+ setLoading(false);
+ return data;
+ };
+
+ /**
+ * Checks if there is already an invitation from the current user (userEmail) to the given destinationEmail.
+ *
+ * @param {string} destinationEmail - The email to check against the 'destination' field in the database.
+ * @returns {Promise} - Returns true if there is an existing invitation, false otherwise.
+ */
+ const checkIfInvitationSent = async (destinationEmail: string): Promise => {
+ setLoading(true);
+ setError(null);
+
+ const { exists, error } = await checkIfInvitationSentAction(userEmail, destinationEmail);
+
+ if (error) {
+ setError(error);
+ }
+
+ setLoading(false);
+ return exists;
+ };
+
+ /**
+ * Checks if the specified email already has an accepted invitation.
+ * This is useful to see if the user is already enrolled/registered via invitation.
+ *
+ * @param {string} destinationEmail - The email to check.
+ * @returns {Promise} - Returns true if there's an invitation with status 'accepted' for this email, otherwise false.
+ */
+ const checkIfEmailAlreadyAccepted = async (destinationEmail: string): Promise => {
+ setLoading(true);
+ setError(null);
+
+ const { accepted, error } = await checkIfEmailAlreadyAcceptedAction(destinationEmail);
+
+ if (error) {
+ setError(error);
+ }
+
+ setLoading(false);
+ return accepted;
+ };
+
+ /**
+ * Sends a new invitation. Inserts a record into the 'invitations' table in Supabase,
+ * and then triggers an email using EmailJS.
+ *
+ * @param {string} destination - The email address of the invitee.
+ * @param {any} payload - Additional data you want to attach to the invitation (e.g., sender's profile info).
+ * @returns {Promise} - Throws an error if something goes wrong.
+ */
+ const sendInvitation = async (destination: string, payload: any): Promise => {
+ const { error } = await sendInvitationAction(destination, payload, userEmail, sessionData);
+
+ if (error) {
+ console.error('Error storing invitation in Supabase:', error);
+ throw new Error(error);
+ } else {
+ console.log('Invitation stored successfully in Supabase.');
+
+ // Send the email using EmailJS
+ await sendEmail({
+ to_email: destination,
+ from_name: payload?.data?.from?.displayName ?? 'Watchit Web3xAI',
+ });
+ }
+ };
+
+ /**
+ * ------------------------------------------------------------------
+ * Accept or Create an 'accepted' invitation for a given userEmail.
+ *
+ * 1) If there's any 'pending' invitation with destination = userEmail,
+ * accept the first one found.
+ * 2) Otherwise, create a new invitation record with status = 'accepted'.
+ * ------------------------------------------------------------------
+ */
+ const acceptOrCreateInvitationForUser = async () => {
+ const { error } = await acceptOrCreateInvitationForUserAction(userEmail, sessionData);
+
+ if (error) {
+ console.error('Error in acceptOrCreateInvitationForUser:', error);
+ }
+ };
+
+ const sendEmail = async (data: EmailParams) => {
+ const { from_name, to_email } = data;
+
+ const templateParams = {
+ to_email,
+ from_name,
+ from_email: GLOBAL_CONSTANTS.SENDER_EMAIL,
+ };
+
+ try {
+ const result = await emailjs.send(
+ GLOBAL_CONSTANTS.EMAIL_SERVICE_ID,
+ GLOBAL_CONSTANTS.EMAIL_TEMPLATE_ID,
+ templateParams,
+ GLOBAL_CONSTANTS.EMAIL_API_KEY
+ );
+ console.log('Email sent successfully:', result.text);
+ } catch (err) {
+ console.error('Error sending email:', err);
+ throw err;
+ }
+ };
+
+ /**
+ * Return all state variables and methods so they can be used in any component that imports this hook.
+ */
+ return {
+ // State
+ invitations,
+ loading,
+ error,
+
+ // Fetch/CRUD Methods
+ fetchInvitations,
+ sendInvitation,
+ sendEmail,
+
+ // Additional Validation/Check Methods
+ checkIfMyEmailHasPendingInvite,
+ acceptInvitation,
+ checkIfInvitationSent,
+ checkIfEmailAlreadyAccepted,
+ acceptOrCreateInvitationForUser
+ };
+};
+
+export default useReferrals;
diff --git a/src/layouts/_common/account-popover.tsx b/src/layouts/_common/account-popover.tsx
index 3ae680e66..1568b7211 100644
--- a/src/layouts/_common/account-popover.tsx
+++ b/src/layouts/_common/account-popover.tsx
@@ -9,13 +9,13 @@ import { ProfileSession, useLogout, useSession } from '@lens-protocol/react-web'
// MUI IMPORTS
import Box from '@mui/material/Box';
import Stack from '@mui/material/Stack';
-import Avatar from '@mui/material/Avatar';
import Button from '@mui/material/Button';
import Divider from '@mui/material/Divider';
import { alpha } from '@mui/material/styles';
import MenuItem from '@mui/material/MenuItem';
import IconButton from '@mui/material/IconButton';
import Typography from '@mui/material/Typography';
+import { CircularProgress } from '@mui/material';
// ANIMATIONS IMPORTS
import { m } from 'framer-motion';
@@ -34,9 +34,11 @@ import {
setBalance,
setSession,
} from '@redux/auth';
-import { CircularProgress } from '@mui/material';
import { useWeb3Auth } from '@src/hooks/use-web3-auth.ts';
import NeonPaper from '@src/sections/publication/NeonPaperContainer.tsx';
+import AvatarProfile from '@src/components/avatar/avatar.tsx';
+import { notifyError } from '@notifications/internal-notifications.ts';
+import { ERRORS } from '@notifications/errors.ts';
// ----------------------------------------------------------------------
@@ -54,50 +56,99 @@ export default function AccountPopover() {
const router = useRouter();
const popover = usePopover();
const { web3Auth } = useWeb3Auth();
+
+ // Redux states: session loading and login modal open status
const { isLoginModalOpen, isUpdatingMetadata, isSessionLoading } = useSelector(
(state: any) => state.auth
);
+ // Lens session data
const { data, loading }: ReadResult = useSession();
const sessionData = useSelector((state: any) => state.auth.session);
+
+ // Lens logout hook
const { execute: logoutExecute } = useLogout();
+ // Update Redux with the current session loading status from Lens
useEffect(() => {
dispatch(setAuthLoading({ isSessionLoading: loading }));
}, [loading]);
+ // Convert session data to string so that changes in the object trigger this effect
const parsedSessionData = JSON.stringify(data);
+ // Update Redux session whenever Lens session data changes (unless updating metadata)
useEffect(() => {
if (!isUpdatingMetadata) {
dispatch(setSession({ session: data }));
}
}, [parsedSessionData, isUpdatingMetadata]);
+ // Close popover when session status or login modal changes
useEffect(() => {
popover.onClose();
}, [sessionData?.authenticated, isLoginModalOpen, isSessionLoading]);
/**
- * Log out from the current session.
+ * Log out from the current session (Lens + Web3Auth).
*/
const logout = useCallback(async () => {
try {
+ // Logout from Lens
await logoutExecute();
+
+ // Logout from Web3Auth
await web3Auth?.logout();
- // Clear the balance for logged-out users
+ // Clear the balance (Redux state)
dispatch(setBalance({ balance: 0 }));
+ localStorage.removeItem('sessionExpiration');
} catch (err) {
console.error('Error during logout:', err);
}
}, [logoutExecute]);
+ /**
+ * This function reads the saved expiration time and logs out if we've passed it.
+ */
+ const checkSessionExpiration = useCallback(() => {
+ const expirationStr = localStorage.getItem('sessionExpiration');
+ if (!expirationStr) return; // If there's no stored timestamp, do nothing
+ const expirationTime = parseInt(expirationStr, 10);
+
+ if (Date.now() >= expirationTime) {
+ logout(); // Call the logout callback
+ notifyError(ERRORS.BUNDLER_UNAVAILABLE);
+ }
+ }, []);
+
+ /**
+ * Periodically check if the session timestamp in localStorage has expired.
+ */
+ useEffect(() => {
+ // Check once immediately on mount
+ checkSessionExpiration();
+
+ // Then check every 60 seconds
+ const intervalId = setInterval(() => {
+ checkSessionExpiration();
+ }, 60 * 1000);
+
+ // Cleanup: clear the interval on unmount
+ return () => clearInterval(intervalId);
+ }, [checkSessionExpiration]);
+
+ /**
+ * Handle a click on a popover item (e.g., "Profile").
+ */
const handleClickItem = (path: string) => {
popover.onClose();
router.push(path);
};
+ /**
+ * Handlers for opening/closing the login modal.
+ */
const handleOpenModal = () => {
dispatch(openLoginModal());
};
@@ -106,15 +157,18 @@ export default function AccountPopover() {
dispatch(closeLoginModal());
};
+ // If the session is still loading, show a spinner
if (isSessionLoading) {
return ;
}
+ // Conditionally use a "NeonPaper" wrapper if metadata is updating
const EffectPaper = isUpdatingMetadata ? NeonPaper : Box;
return (
<>
+ {/* If user is authenticated, show their avatar icon */}
{sessionData?.authenticated ? (
- `solid 2px ${theme.palette.background.default}`,
+ border: (theme: any) => `solid 2px ${theme.palette.background.default}`,
}}
/>
- ) : (
- <>>
- )}
+ ) : null}
+ {/* If not authenticated, show a "Social Login" button */}
@@ -162,8 +215,9 @@ export default function AccountPopover() {
- ) : undefined}
+ ) : null}
+ {/* If authenticated, show handle/ID */}
{sessionData?.authenticated && !loading ? (
<>
- {`${sessionData?.profile?.id}`}
+ {sessionData?.profile?.id}
>
- ) : (
- <>>
- )}
+ ) : null}
+ {/* The popover shown on avatar or name click */}
+ {/* Logout menu option */}
*/}
{/**/}
- >
+
);
}
diff --git a/src/pages/dashboard/user/profile.tsx b/src/pages/dashboard/user/profile.tsx
index 56aaf5cd6..71034090c 100644
--- a/src/pages/dashboard/user/profile.tsx
+++ b/src/pages/dashboard/user/profile.tsx
@@ -1,5 +1,4 @@
-import { Helmet } from 'react-helmet-async';
-// sections
+// LOCAL IMPORTS
import { UserProfileView } from '@src/sections/user/view';
import { useParams } from '@src/routes/hooks';
import Header from '@src/layouts/dashboard/header.tsx';
@@ -13,30 +12,6 @@ export default function UserProfilePage() {
return (
<>
-
- Dashboard: User Profile | {id}
- {/*OG*/}
-
-
-
-
- {/*Twitter*/}
-
-
-
-
-
-
-
diff --git a/src/redux/auth/index.ts b/src/redux/auth/index.ts
index 7af8e7fb3..3a1bdf122 100644
--- a/src/redux/auth/index.ts
+++ b/src/redux/auth/index.ts
@@ -7,6 +7,7 @@ export type AuthReducerState = {
balance: number;
currentStep: number;
isUpdatingMetadata: boolean;
+ email: string;
};
const initialState: AuthReducerState = {
@@ -16,6 +17,7 @@ const initialState: AuthReducerState = {
balance: 0,
currentStep: 0,
isUpdatingMetadata: false,
+ email: '',
};
const authSlice = createSlice({
@@ -43,6 +45,9 @@ const authSlice = createSlice({
setSession: (state, action: PayloadAction<{ session: any }>) => {
state.session = action.payload.session;
},
+ setEmail: (state, action: PayloadAction) => {
+ state.email = action.payload;
+ },
updateProfileData: (
state,
action: PayloadAction<{
@@ -86,6 +91,7 @@ export const {
setSession,
updateProfileData,
setIsUpdatingMetadata,
+ setEmail
} = authSlice.actions;
export default authSlice.reducer;
diff --git a/src/sections/finance/components/box-row.tsx b/src/sections/finance/components/finance-box-row.tsx
similarity index 72%
rename from src/sections/finance/components/box-row.tsx
rename to src/sections/finance/components/finance-box-row.tsx
index 785ac2f1d..3f303ef8f 100644
--- a/src/sections/finance/components/box-row.tsx
+++ b/src/sections/finance/components/finance-box-row.tsx
@@ -2,7 +2,7 @@ import { FC, PropsWithChildren } from 'react';
import Box from '@mui/material/Box';
-export const BoxRow: FC = ({ children }) => (
+export const FinanceBoxRow: FC = ({ children }) => (
= ({ children }) => (
);
-export default BoxRow;
+export default FinanceBoxRow;
diff --git a/src/sections/finance/components/finance-contacts.tsx b/src/sections/finance/components/finance-contacts.tsx
index 2b33bcff4..7342a8999 100644
--- a/src/sections/finance/components/finance-contacts.tsx
+++ b/src/sections/finance/components/finance-contacts.tsx
@@ -7,7 +7,6 @@ import Stack from '@mui/material/Stack';
import CardHeader from '@mui/material/CardHeader';
import Card, { CardProps } from '@mui/material/Card';
import Tooltip from '@mui/material/Tooltip';
-import Avatar from '@mui/material/Avatar';
import IconButton from '@mui/material/IconButton';
import ListItemText from '@mui/material/ListItemText';
import Box from '@mui/material/Box';
@@ -16,6 +15,7 @@ import Box from '@mui/material/Box';
import Iconify from '@src/components/iconify';
import Carousel, { useCarousel } from '@src/components/carousel/index';
import NavigationArrows from '@src/components/carousel/NavigationArrows';
+import AvatarProfile from "@src/components/avatar/avatar.tsx";
// routes
import { paths } from '@src/routes/paths';
@@ -50,7 +50,7 @@ export default function FinanceContactsCarousel({
if (time == null) time = 500;
// eslint-disable-next-line @typescript-eslint/no-unused-expressions
(pos = +pos), (time = +time);
-
+
window.requestAnimationFrame(function step(currentTime) {
start = !start ? currentTime : start;
let progress = currentTime - start;
@@ -149,11 +149,9 @@ function SlideContacts({ chunk, goToProfile, onClickArrow }: SlideContactsProps)
sx={{ cursor: 'pointer', flexGrow: 1 }}
onClick={() => goToProfile(profile.id)}
>
- = ({ address, recipient, depositHo
alignItems="center"
justifyContent="space-between"
>
-
+ Connected Wallet = ({ address, recipient, depositHo
>
{address ? truncateAddress(address) : 'No wallet connected'}
-
+
-
+ Available = ({ address, recipient, depositHo
>
{formatBalanceNumber(balance ?? 0)} MMC
-
+
= ({ sx, lgUp, ...other }) =
variant="body1"
sx={{
opacity: 0.8,
- maxWidth: 220,
+ maxWidth: lgUp ? 220 : 'auto',
mb: { xs: 1, xl: 2 },
}}
>
Invite your friends and complete tasks to grow your balance.
}
@@ -126,6 +129,7 @@ const FinanceEarnTokens: FC = ({ sx, lgUp, ...other }) =
flexGrow={1}
justifyContent="center"
sx={{
+ display: { xs: 'none', md: 'flex' },
p: { xs: 1, md: 1 },
mb: { xs: 1, md: 0 },
mx: 'auto',
diff --git a/src/sections/finance/components/finance-invite-friends.tsx b/src/sections/finance/components/finance-invite-friends.tsx
index 037e7a75a..6473b0f7a 100644
--- a/src/sections/finance/components/finance-invite-friends.tsx
+++ b/src/sections/finance/components/finance-invite-friends.tsx
@@ -5,7 +5,6 @@ import { useSelector } from 'react-redux';
// @MUI components
import { useTheme } from '@mui/material/styles';
import Stack from '@mui/material/Stack';
-import Button from '@mui/material/Button';
import InputBase from '@mui/material/InputBase';
import Box, { BoxProps } from '@mui/material/Box';
import Typography from '@mui/material/Typography';
@@ -13,11 +12,14 @@ import Typography from '@mui/material/Typography';
// Project components
import { bgGradient } from '@src/theme/css';
import { COLORS } from '@src/layouts/config-layout.ts';
-import { supabase } from '@src/utils/supabase';
+
import { notifyError, notifySuccess } from '@notifications/internal-notifications.ts';
import { SUCCESS } from '@notifications/success.ts';
import { ERRORS } from '@notifications/errors.ts';
+import useReferrals from "@src/hooks/use-referrals";
+import LoadingButton from '@mui/lab/LoadingButton';
+
interface Props extends BoxProps {
img?: string;
title?: string;
@@ -33,32 +35,48 @@ export default function FinanceInviteFriends({
sx,
...other
}: Props) {
+ const {
+ sendInvitation,
+ checkIfInvitationSent,
+ checkIfEmailAlreadyAccepted,
+ } = useReferrals();
const theme = useTheme();
const sessionData = useSelector((state: any) => state.auth.session);
const [email, setEmail] = useState('');
-
- async function storeEmailData(destination: string, payload: any) {
- const { error } = await supabase
- .from('invitations')
- .insert([{ destination, sender_id: payload?.data?.from?.id, payload }]);
-
- if (error) {
- console.error('Error storing email data:', error);
- } else {
- console.log('Email data stored successfully');
- }
- }
+ const [loading, setLoading] = useState(false);
const handleInputChange = (event: React.ChangeEvent) => {
setEmail(event.target.value);
};
- const handleInviteClick = () => {
+ const handleInviteClick = async () => {
+ // Basic email format check
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
if (!emailRegex.test(email)) {
notifyError(ERRORS.INVITATION_EMAIL_ERROR);
return;
}
+
+ setLoading(true);
+
+ // Check if there's an existing invitation from the current user to this email
+ const alreadySent = await checkIfInvitationSent(email);
+ if (alreadySent) {
+ // You can adapt the notification message to match your requirements
+ notifyError(ERRORS.ALREADY_SENT_INVITATION);
+ setLoading(false);
+ return;
+ }
+
+ // Check if the user (the email) already has an accepted invitation (i.e., is enrolled)
+ const alreadyAccepted = await checkIfEmailAlreadyAccepted(email);
+ if (alreadyAccepted) {
+ notifyError(ERRORS.ALREADY_ENROLLED);
+ setLoading(false);
+ return;
+ }
+
+ // Build the payload
const payload = {
data: {
from: {
@@ -68,10 +86,19 @@ export default function FinanceInviteFriends({
},
},
};
- storeEmailData(email, payload).then(() => {
+
+ // Send the invitation
+ try {
+ await sendInvitation(email, payload);
notifySuccess(SUCCESS.INVITATIONS_SUCCESSFULLY);
setEmail('');
- });
+ setLoading(false);
+ } catch (err) {
+ // Handle any errors coming from sendInvitation
+ console.error(err);
+ notifyError(ERRORS.INVITATION_SEND_ERROR);
+ setLoading(false);
+ }
};
return (
@@ -137,15 +164,16 @@ export default function FinanceInviteFriends({
value={email}
onChange={handleInputChange}
endAdornment={
-
+
}
sx={{
pl: 1.5,
diff --git a/src/sections/finance/components/finance-metamask-helper.tsx b/src/sections/finance/components/finance-metamask-helper.tsx
index 8ba1ce683..c253f5877 100644
--- a/src/sections/finance/components/finance-metamask-helper.tsx
+++ b/src/sections/finance/components/finance-metamask-helper.tsx
@@ -1,39 +1,30 @@
import Stack from "@mui/material/Stack";
-import {Box} from "@mui/system";
import Typography from "@mui/material/Typography";
-import Button from "@mui/material/Button";
+import Link from "@mui/material/Link";
const FinanceMetamaskHelper = () => {
-
const handleDownloadMetaMask = () => {
window.location.href = 'https://metamask.app.link';
- }
+ };
return (
-
-
- MetaMask Wallet Required
-
- To use this feature, you need to have the MetaMask wallet installed.
- If you don't have it, you can download it from the official website.
-
-
-
-
+
+
+ MetaMask required.{" "}
+
+ Click here
+ {" "}
+ if you don't have it installed.
+
- )
-}
+ );
+};
export default FinanceMetamaskHelper;
diff --git a/src/sections/finance/components/finance-modal.tsx b/src/sections/finance/components/finance-modal.tsx
index c9d6e1a00..6073d0d55 100644
--- a/src/sections/finance/components/finance-modal.tsx
+++ b/src/sections/finance/components/finance-modal.tsx
@@ -4,7 +4,7 @@ import { FC, useState, ReactNode } from 'react';
import Tab from '@mui/material/Tab';
import DialogTitle from '@mui/material/DialogTitle';
import Tabs, { tabsClasses } from '@mui/material/Tabs';
-import Dialog, { DialogProps } from '@mui/material/Dialog';
+import Dialog, { dialogClasses, DialogProps } from '@mui/material/Dialog';
interface TabConfig {
value: string;
@@ -28,7 +28,18 @@ const FinanceModal: FC = ({ open, onClose, title, tabs, rende
};
return (
-