├── .env.example ├── .env.test ├── .eslintrc.json ├── .gitignore ├── .prettierrc ├── README.md ├── app ├── (auth) │ ├── actions.ts │ ├── login │ │ ├── client.tsx │ │ └── page.tsx │ └── signup │ │ ├── client.tsx │ │ ├── onboarding │ │ └── page.tsx │ │ └── page.tsx ├── (home) │ ├── client.tsx │ ├── navigation.tsx │ └── page.tsx ├── api │ └── secret │ │ └── route.ts ├── favicon.ico ├── globals.css ├── layout.tsx ├── profile │ ├── client.tsx │ └── page.tsx ├── userarea │ ├── client.tsx │ └── page.tsx └── wrapped-corbado-provider.tsx ├── lib ├── corbado-translations.ts └── server │ ├── authentication.ts │ ├── db.ts │ └── queries.ts ├── next.config.ts ├── package-lock.json ├── package.json ├── public ├── documents-icon.svg ├── github-icon.svg └── logo.svg └── tsconfig.json /.env.example: -------------------------------------------------------------------------------- 1 | NEXT_PUBLIC_CORBADO_PROJECT_ID= 2 | CORBADO_API_SECRET= 3 | CORBADO_FRONTEND_API= 4 | CORBADO_BACKEND_API= -------------------------------------------------------------------------------- /.env.test: -------------------------------------------------------------------------------- 1 | NEXT_PUBLIC_CORBADO_PROJECT_ID=pro-2651886157242148453 2 | NEXT_PUBLIC_CORBADO_TELEMETRY_DISBALED=true 3 | CORBADO_API_SECRET=corbado1_jUFVgfy4LZEVoTtMjh6EkwcQWCQ74i 4 | CORBADO_FRONTEND_API=https://pro-2651886157242148453.frontendapi.cloud.corbado.io 5 | CORBADO_BACKEND_API=https://backendapi.cloud.corbado.io -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["next/core-web-vitals", "next/typescript"] 3 | } 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.* 7 | .yarn/* 8 | !.yarn/patches 9 | !.yarn/plugins 10 | !.yarn/releases 11 | !.yarn/versions 12 | 13 | # testing 14 | /coverage 15 | 16 | # next.js 17 | /.next/ 18 | /out/ 19 | 20 | # production 21 | /build 22 | 23 | # misc 24 | .DS_Store 25 | *.pem 26 | 27 | # debug 28 | npm-debug.log* 29 | yarn-debug.log* 30 | yarn-error.log* 31 | 32 | # env files (can opt-in for commiting if needed) 33 | .env* 34 | # Except .env.example 35 | !.env.example 36 | 37 | # vercel 38 | .vercel 39 | 40 | # typescript 41 | *.tsbuildinfo 42 | next-env.d.ts 43 | 44 | # custom database 45 | db.json 46 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "tabWidth": 4, 3 | "printWidth": 80, 4 | "embeddedLanguageFormatting": "auto", 5 | "plugins": [ 6 | "prettier-plugin-embed" 7 | ] 8 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | GitHub Repo Cover 2 | 3 | # Next.js Passkeys Example Application using TypeScript 4 | 5 | This is a sample implementation of the [Corbado passkeys-first authentication solution](https://www.corbado.com) using 6 | Next.js with TypeScript. The following packages are being used: 7 | 8 | - [Corbado React.js](https://github.com/corbado/javascript/tree/develop/packages/react) 9 | - [Corbado Node.js](https://github.com/corbado/corbado-nodejs) 10 | 11 | [![integration-guides](https://github.com/user-attachments/assets/7859201b-a345-4b68-b336-6e2edcc6577b)](https://app.corbado.com/integration-guides/nextjs) 12 | 13 | ## File structure 14 | 15 | - `app/auth/page.tsx`: the file where the React Auth component is used 16 | - `app/profile/page.tsx`: displays user information if the user has successfully authenticated (rendered on the server) 17 | - `app/user-data/route.ts`: api route that checks the users authentication state using the Corbado Node SDK 18 | - `app/page.tsx`: client rendered page that accesses data from the above mentioned route 19 | - `.env.local`: add relevant environment variables that you can obtain 20 | from [Corbado developer panel](https://app.corbado.com/) 21 | 22 | ## Setup 23 | 24 | ### Prerequisites 25 | 26 | Please follow the steps in [Getting started](https://docs.corbado.com/overview/getting-started) to create and configure 27 | a project in the [Corbado developer panel](https://app.corbado.com/). 28 | 29 | You need to have [Node](https://nodejs.org/en/download) and `npm` installed to run it. 30 | 31 | ### Configure environment variables 32 | 33 | Use the values you obtained in [Prerequisites](#prerequisites) to configure the following variables inside a `.env` 34 | file you create in the root folder of this project: 35 | 36 | ```sh 37 | NEXT_PUBLIC_CORBADO_PROJECT_ID=pro-XXX 38 | CORBADO_API_SECRET=corbado1_XXX 39 | CORBADO_FRONTEND_API=https://${CORBADO_PROJECT_ID}.frontendapi.cloud.corbado.io 40 | CORBADO_BACKEND_API=https://backendapi.cloud.corbado.io 41 | ``` 42 | 43 | ## Usage 44 | 45 | Run 46 | 47 | ```bash 48 | npm i 49 | ``` 50 | 51 | to install all dependencies. 52 | 53 | Finally, you can run the project locally with 54 | 55 | ```bash 56 | npm run dev 57 | ``` 58 | 59 | ## Passkeys support 60 | 61 | - Community for Developer Support: https://bit.ly/passkeys-community 62 | - Passkeys Debugger: https://www.passkeys-debugger.io/ 63 | - Passkey Subreddit: https://www.reddit.com/r/passkey/ 64 | 65 | ## Telemetry 66 | 67 | This example application uses telemetry. By gathering telemetry data, we gain a more comprehensive understanding of how our SDKs, components, and example applications are utilized across various scenarios. This information is crucial in helping us prioritize features that are beneficial and impactful for the majority of our users. Read our [official documentation](https://docs.corbado.com/corbado-complete/other/telemetry) for more details. 68 | 69 | To disable telemetry, add the following line to your `.env` file: 70 | 71 | ```sh 72 | NEXT_CORBADO_TELEMETRY_DISABLED=true 73 | ``` 74 | -------------------------------------------------------------------------------- /app/(auth)/actions.ts: -------------------------------------------------------------------------------- 1 | "use server"; 2 | 3 | import { getUser, insertUser, updateUserCity } from "@/lib/server/queries"; 4 | import { revalidatePath } from "next/cache"; 5 | import { getAuthenticatedUserFromCookie } from "@/lib/server/authentication"; 6 | 7 | export async function handleUserLogin() { 8 | // obtain the users id from his session token 9 | const user = await getAuthenticatedUserFromCookie(); 10 | if (!user) { 11 | return { success: false, message: "Not authenticated" } as const; 12 | } 13 | // check if we can find the user in the database 14 | const dbUser = getUser(user.userId); 15 | if (!dbUser) { 16 | // if the user was not present, he just signed up. 17 | // Create a new database entry for him 18 | await insertUser(user.userId); 19 | } 20 | return { 21 | success: true, 22 | // if the user exists in the database and has a city value, 23 | // he has completed the onboarding 24 | hasCompletedOnboarding: !!dbUser && !!dbUser.city, 25 | } as const; 26 | } 27 | 28 | export async function updateCity(data: FormData) { 29 | const rawFormData = { 30 | city: data.get("city"), 31 | }; 32 | if (!rawFormData.city || typeof rawFormData.city !== "string") { 33 | return; 34 | } 35 | // obtain the current users id through his session-token cookie 36 | const user = await getAuthenticatedUserFromCookie(); 37 | if (!user) { 38 | return; 39 | } 40 | await updateUserCity(user.userId, rawFormData.city); 41 | revalidatePath("/"); 42 | } 43 | -------------------------------------------------------------------------------- /app/(auth)/login/client.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | 3 | import { useRouter } from "next/navigation"; 4 | import { CorbadoAuth } from "@corbado/react"; 5 | import { handleUserLogin } from "@/app/(auth)/actions"; 6 | import { AppRouterInstance } from "next/dist/shared/lib/app-router-context.shared-runtime"; 7 | 8 | async function onLoggedIn(router: AppRouterInstance) { 9 | const rsp = await handleUserLogin(); 10 | if (rsp.success && !rsp.hasCompletedOnboarding) { 11 | // show the user the post-signup screen in case his account was 12 | // just created 13 | router.push("/signup/onboarding"); 14 | } else { 15 | // otherwise, just redirect to his profile 16 | router.push("/profile"); 17 | } 18 | } 19 | 20 | export function Login() { 21 | const router = useRouter(); 22 | 23 | return ( 24 |
25 |

Login

26 | onLoggedIn(router)} 28 | initialBlock="login-init" 29 | /> 30 |
31 | ); 32 | } 33 | -------------------------------------------------------------------------------- /app/(auth)/login/page.tsx: -------------------------------------------------------------------------------- 1 | import { redirect } from "next/navigation"; 2 | import { Login } from "@/app/(auth)/login/client"; 3 | import { getAuthenticatedUserFromCookie } from "@/lib/server/authentication"; 4 | 5 | export default async function LoginPage() { 6 | const user = await getAuthenticatedUserFromCookie(); 7 | 8 | // redirect to the profile, if the user is already authenticated 9 | if (user) { 10 | redirect("/profile"); 11 | } 12 | 13 | return ; 14 | } 15 | -------------------------------------------------------------------------------- /app/(auth)/signup/client.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | 3 | import { useRouter } from "next/navigation"; 4 | import { CorbadoAuth } from "@corbado/react"; 5 | import { handleUserLogin } from "@/app/(auth)/actions"; 6 | import { AppRouterInstance } from "next/dist/shared/lib/app-router-context.shared-runtime"; 7 | 8 | async function onSignedIn(router: AppRouterInstance) { 9 | const rsp = await handleUserLogin(); 10 | if (rsp.success && !rsp.hasCompletedOnboarding) { 11 | // show the user the post-signup screen in case his account was 12 | // just created 13 | router.push("/signup/onboarding"); 14 | } else { 15 | // otherwise, just redirect to his profile 16 | router.push("/profile"); 17 | } 18 | } 19 | 20 | export function Signup() { 21 | const router = useRouter(); 22 | 23 | return ( 24 |
25 |

Signup

26 | onSignedIn(router)} 28 | initialBlock="signup-init" 29 | /> 30 |
31 | ); 32 | } 33 | -------------------------------------------------------------------------------- /app/(auth)/signup/onboarding/page.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | 3 | // the onboarding is shown after signup, or after login, if it has not yet been completed. 4 | import { useRouter } from "next/navigation"; 5 | import { FormEvent, useRef } from "react"; 6 | import { updateCity } from "@/app/(auth)/actions"; 7 | 8 | export default function Onboarding() { 9 | const formRef = useRef(null); 10 | const router = useRouter(); 11 | 12 | async function onCitySubmit(e: FormEvent) { 13 | e.preventDefault(); 14 | // update the user's city 15 | await updateCity(new FormData(formRef.current!)); 16 | router.push("/"); 17 | } 18 | 19 | return ( 20 |
21 |

Onboarding

22 |

Choose your city

23 |
24 | 25 | 26 |
27 |
28 | ); 29 | } 30 | -------------------------------------------------------------------------------- /app/(auth)/signup/page.tsx: -------------------------------------------------------------------------------- 1 | import { redirect } from "next/navigation"; 2 | import { Signup } from "@/app/(auth)/signup/client"; 3 | import { getAuthenticatedUserFromCookie } from "@/lib/server/authentication"; 4 | 5 | export default async function SignupPage() { 6 | const user = await getAuthenticatedUserFromCookie(); 7 | 8 | // redirect to the profile, if the user is already authenticated 9 | if (user) { 10 | redirect("/profile"); 11 | } 12 | 13 | return ; 14 | } 15 | -------------------------------------------------------------------------------- /app/(home)/client.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | 3 | import { useCorbado } from "@corbado/react"; 4 | import Link from "next/link"; 5 | 6 | export function HomePage({ city }: { city: string }) { 7 | const { loading, user, isAuthenticated } = useCorbado(); 8 | 9 | // do not use any of the other states while loading 10 | if (loading) { 11 | return
; 12 | } 13 | // client-side authentication check with information obtained from useCorbado() 14 | if (!isAuthenticated) { 15 | return ; 16 | } 17 | 18 | return ( 19 |
20 |

21 | Welcome {user?.name || user?.email} from {city}! 22 |

23 |

24 | You now have access to everything and can visit the user area: 25 |

26 | 27 | User area 28 | 29 |
30 | ); 31 | } 32 | 33 | 34 | function GuestHomePage() { 35 | return ( 36 |
37 |

Welcome Guest!

38 |

39 | This example demonstrates Corbado’s passkey-first authentication 40 | solution. 41 |

42 |

It covers all relevant aspects like -

43 |
    44 |
  • Sign-up
  • 45 |
  • Login
  • 46 |
  • Protecting Routes
  • 47 |
48 |

49 | It can be used as a starting point for your own application or 50 | to learn. 51 |

52 | 53 | Sign up 54 | 55 | 56 | Login 57 | 58 |
59 | ); 60 | } 61 | -------------------------------------------------------------------------------- /app/(home)/navigation.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | 3 | import Image from "next/image"; 4 | import Link from "next/link"; 5 | import { usePathname, useRouter } from "next/navigation"; 6 | import { useCorbado } from "@corbado/react"; 7 | 8 | export default function Navigation({ 9 | initialIsAutenticated, 10 | }: { 11 | initialIsAutenticated: boolean; 12 | }) { 13 | const { loading, isAuthenticated } = useCorbado(); 14 | 15 | // Use the server-side obtained value as the initial value 16 | // Once loaded, use the value obtained on the client-side from useCorbado() 17 | // This prevents "flickering" after the initial load 18 | const currentIsAuthenticated = loading 19 | ? initialIsAutenticated 20 | : isAuthenticated; 21 | 22 | return ( 23 |
24 | 41 |
42 | ); 43 | } 44 | 45 | function LogoutButton() { 46 | const { logout, loading } = useCorbado(); 47 | const router = useRouter(); 48 | 49 | async function onLogout() { 50 | if (loading) { 51 | return; 52 | } 53 | await logout(); 54 | router.push("/"); 55 | } 56 | 57 | return ( 58 | 61 | ); 62 | } 63 | 64 | 65 | function MainLinksAuthenticated() { 66 | const pathName = usePathname(); 67 | 68 | return ( 69 |
    70 |
  • 71 | 76 | Home 77 | 78 |
  • 79 |
  • 80 | 81 | User area 82 | 83 |
  • 84 |
  • 85 | 86 | Profile 87 | 88 |
  • 89 |
90 | ); 91 | } 92 | 93 | function MainLinksGuest() { 94 | const pathName = usePathname(); 95 | 96 | return ( 97 |
    98 |
  • 99 | 104 | Home 105 | 106 |
  • 107 |
  • 108 | 109 | User area 110 | 111 |
  • 112 |
  • 113 | 114 | Sign up 115 | 116 |
  • 117 |
  • 118 | 119 | Login 120 | 121 |
  • 122 |
123 | ); 124 | } 125 | -------------------------------------------------------------------------------- /app/(home)/page.tsx: -------------------------------------------------------------------------------- 1 | export const dynamic = "force-dynamic"; 2 | 3 | import { getUser } from "@/lib/server/queries"; 4 | import { HomePage } from "@/app/(home)/client"; 5 | import { getAuthenticatedUserFromCookie } from "@/lib/server/authentication"; 6 | 7 | export default async function Home() { 8 | const user = await getAuthenticatedUserFromCookie(); 9 | const dbUser = user ? getUser(user.userId) : undefined; 10 | 11 | return ; 12 | } 13 | -------------------------------------------------------------------------------- /app/api/secret/route.ts: -------------------------------------------------------------------------------- 1 | import { NextRequest, NextResponse } from "next/server"; 2 | import { getAuthenticatedUserFromAuthorizationHeader } from "@/lib/server/authentication"; 3 | 4 | const secretString = "Passkeys are cool!"; 5 | 6 | export async function GET(req: NextRequest) { 7 | // obtain the session token from the request's authorization header 8 | const user = await getAuthenticatedUserFromAuthorizationHeader(req); 9 | if (!user) { 10 | return NextResponse.json("Unauthorized", { status: 401 }); 11 | } 12 | // if the user is authenticated, return the secret 13 | return NextResponse.json({ secret: secretString }); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /app/favicon.ico: -------------------------------------------------------------------------------- 1 |  �$f�� (X%@@ (B�-00 �%�o  �P� h���PNG 2 |  3 | IHDR\r�f$�IDATx��I�י��Y{��n4��H���C��F-�%<�ˎp���1��(�'_|�i.>q<�a>�`;�eE�!RRX�ƖDI)�(܀�4���L���� TWgVfU}��BvW7�^�������} �0 �0 �0 ����܋�p*��p(�9�`<���,��0�d�K@#p�Ԝ�s�����a8��SΕ^4(�v�.P��P��mۏ�D���i7�0�@��P@ X 4 | ^Bc��U�z6�>�� ��w��e�p�<�n����� ;� �=��H?�6� �~�#QhW��.;� �V��Y��A��ڃ{ 5 | �� �0��vFZDX��W֐�0�&G��I�x�A(�� ��I$�a'L��0DdԐ�"Ax�7�7<����S��^�(I �E�5F��#�w�a�?Ѹ�,����Bbp)�Y}�o���< ��q���8�p�hwKTG@3�~7�d 0r��,N���݁9�2��@ރ� yW�<�\]#�>�Ԡ���Zڭ62F.p�����g��~@�� =F��f�R.��#� ���]G?sCa�h�0Y�V�uE~4Z��E���h축�����-� 8 | �����n� ��'av&J0V����T�ݖ����5 ����o\��������1F��o���h�.�5���ɧ+��_�C14��n���B��^L����Q}_ O�[��X����ಝ�0�c��`vD���C����}�x�^�`x�#��n6u}sA��O��s�C�1�l�ȣ�[�'@4�W��%(砘k[�� ߳�A˅�2���4}Y~`˄A����I�(@#vƊ�O�+3��,�4)���S�E��]_�� xi��P ������a@��=uh%z��5���^�yP�e�����N���`�1p3�ci�q�Ĝ��/����i���᱃�><��� g��*,n�C���n�;���۾zn�v�������n��'��A9������#�����8��/��U8}.���:c/�^�a 1��I��d� �w�qJ�'����ߎ����|o]�s��n�� �Y�t���VG� v� �a�OW���s��?���8�v� *��C��И,�3���rڭ2v� @�Dy�f�o��99���h�&1��� �4 ���a �MÉ}J?�(*����&1����E9���(z��$F`� 9 | <0��Kw�ݚ���4�__PJq�i�Y�`D31#6�����s�'��t���HA�}O�k# v�����x�bڭ2n� @78����lg�����a%��eݔ.3z� @�s��A��Q���f�� �px\�G��i����.pmy�r���ɇ�Q9�G��v���0���Y� ����N�'��;�pe=���a� ���n)׮�k��HA�-e8���R�oܙR�2̌��f��/ S�삜���E��U-,k8[� k�rp|�<�F���$�V�n�q+f삼��5,�}w�s�7;�0{�t@ΕCk��] ����v���a���5�H^�cw�r0SI��3co�1����gQ��n�>/Z�p�0耼��v��p�܉bNV@٬��`�Ȼ�϶��Lޕ8��vk 0舼��<�t�yO�!ۉ��������OD�)�H����ׁ�k�{%�)�z�ʄe��;�uT�*?�?���J�e �: *f�ވ�&�R*;�-m� �QP�Y�����`K��``� -�,�";�=� � v�e�S=#��C+H�%F� ��3-�[���#���4��s��n�q��?�A��y��D+�Z � ���[��B 1��3� @ԛpi 7�nIS�uD؆�2� @� �2��:�ւ�kP�Ӏ��f>Z�u������b ��̒�ft@� V�7���X�ûKi��؊Y�1Ę� x����7��!Fg\۔un%��b@�7�1���/��삵���y%���6�g�fd�]`�l��>����a>�]�V���a>u(��d�ZS>����w�L�� �.�����[�D�-��g��`�|峻�vI���ߟv���� 10 | �qE�F61��Z�nZ\��i��l��A ��� 6���:-������6���'.�› �L���{����h^�RN�{��.ls��| |� +5}��5-a������ @��8Z�Z�ۛ�� �5�,nxQ9�C]&J:ܵ�逗J~�3 11 | ��,�����UOi̮ �:g��t���jM�ů�5�|�hڭ���Ջ�Ѓ� OeƏOj@�u���%O���]]�]�|�J"ǥ(��$����2C�-E�6}x�Z�=�=&]���ւ�M3�oe�&`/��nx��xQ������qSkJH�MXX��� �=Po��]��ӺON�ݪ��_��k��2�֓��`F��#u��t9<~<�ZL���{07&+p������e ��~��br�;nL���LX1KU;�n�W��\N���� �>�|A3ω}znj��ͯH߾ 13 | �/k 7�]?wT������G ��}8�����cz.. _�����-�b��Wt#n�宆I�W�=���OLˁwlB״q����I]/��z檖��&B��@�Lަ��=��I����= sa]f��W�%X�y�w�����܁�p�/��O����~��v6�ٳLb���� 14 | ��]�Q'��'�R�����'���=|ׁ�g��D)��9;�k�����y�y��=K� f"�������w�F�*��p~E3�[ ��_�y��u�`˻��c��-�~��r����}����bV2#Mb&��-�S�F�, �\Y��?��̚?r�s�؜�+������]���"3�@vkY��HΪzSBp�d�i�/4}ݯV4��Y����w�v���s��糼��RN��؜�����R� X& Y�|��H{>7�U�����,�o��{�f�O�Ir"�T?�{M}��� @�8w]�+�E� ����^�QK7��t��sM[Yg��ZMV@�8h ����/���h�tM)���oZ�ʿ�&��� @����hhЏ`��?��\U���5�֒9��q����c�$����O�f�w�� ku �ׯ��=8��^��E�V��JMkՏV��j����\�<�L�����D�ߡQ�����W4���\����a���3���8���Q��|�Z��윜U�$M9�׬?2�3���u=9 3Y�&CJ�8sf.�i��:�J�v���w�x+<�s� ����A8㷂����wP�������×V=Si;=Wjr��)h�2�>z�#80*���IY%}?^�|��� �l�����a���W$�z{z�~�TY��ƽa���W$k���0�����W6t3\۔�<��J��7�V�١� A8㇯DYi�Ҧ�Q�J�����Tޓ��2q��R��j��/>#/tFC�+���2YR?4VL���*,��x+y���:Ql/ �Xc/W��X�i���`׆/�\%/?L�Ւ% ��0��t/00z�HA���������-:eiS����� 15 | |�dژ}8wM�:z����{� ��sn�̓����h���wC+�=i�5'� Ŝ�����Tۯ�`�߅:ͯh�[��J�=<'��l96�L�gFd |��\��ʠ�]�E�]�9��׸v?��s?��y�����&F�)�UA7�}�耒��R��-��<�lvD�c=���%@Fp������M_�h6�1)����~��g�1r1��A�y+[����0��a H!�� k��ݛ���-��:�(��y�Gץ�D��P��r���H�zK�=q�6��^����\�O�TʷK�'� @�D�['=�'����(&ݽã��]�5���������-iY�"4�� !��{�i�͍j�M�4���H�9���b!�[������� 16 | �ysA�j{�s��0��Τq-7\'<��#&犯� y ����1Ę��N�d>0�u��e���Þ�uKg�#/#�Lj�s&K�l�X���Iy��_����HN���/F� � �JA&]�գ��樺-[�F:D��R٭� �m�B��x��+!dnL������ �nu��� 17 | ���ܨ��f�r��r��n�����t�%��&;)~dC�]%��7��Va�����봋� ��C.���*k�8S�����F��r�-*�m��9 O�����xYQ�wb�'���������0u�)�C-њ.��*��]ɫ 18 | �N嶌�!rh��ӆr�(c��k/�zI�� �L�q�D빃�a9��=��Q:�;���R�Aя�꾪��&/?.�U����� �Z��ڣ��D ��Q��tv@6�^*�f����lG����B7.���z�Ȩۉr8�{����0�&* 19 | �[�+�(x�,� �}�C� ��PfՑ�ة� �谍B{?�3�N< ���'*���P�M7��;Q�Ɂ[����:ou��uOl6�G�v��h�j�͔�ԉ��(�!N �Y)�D˻� =<��#"�$:�� �D�}rZ{�'���� ��z�������������s�<��!Vj�b��sB"��dx��ݓ�:K 6�H��[��N�Ax��mn��'{ 20 | �v���:�5��3���ȑ3Ql�`tO� s=�~�5��D��Xڟ2;,���82/;��`��}ړ�a�y���w۵ ��k+�dK���hh����JF 21 | rH}�s��M:Z�P�4�y@ �龒f�F [x� ��\��A�Y�zUQ��؁(�������?I�0���@��So)���/��ͦ�� ��8�^:�׎��Jh��ݸ!a_Yf�JM����e��uBo�3�\^��^�T�$]h+�9��� �r�-�1��4kǵ�l�!���p �RU��Z�K2+��������Bx���-������n4t�dIQy�F�W$���Y����ɮ��v�si�f��,%s��f�_R��0E�]\S�r\���� ��h{��i���/}���RNˀ�U�-�{]G{����K��є��٣��[ɞ�T�J�3s? D>�RN�4hI�J×H*����k:�|��>���dN�9xlN@)s�n�W䤊;Z�֔ <^�GH�{Q?-��Z�� +o����us)�@�ь`d�Cc�ň<�qQm�8]�c�u[���߹�Yy�$�L7G��&J���=�����}�͈ x����C� ��ޒ�d~E?���ێ�@���ȣUl1�Ǒqy�9����߮W�'�.�#�s2s��ҷd��2�g'2ӽyW&f�f�\p�܀� 22 | ���Yr�X����������{�[R����@�dF�y����͗e�H�Cc���]�Z �nE���f~xVK�{���4*��E4����|�^Kg�o;R�֨H�h�r���ɒf��k���1� �v]���N����}�Be�}��ϲ��R' 3D�P�T�g�l�a�‰)�zqM��-��� ?�� M�댮��1�l_���65�xV���^-ĝH]�0�߶���i�a�,�y�D[�<�#�9hY��|v�`������֊��B�.��g�OD����6sAA-q�����i]���}�t ��.�������)?ݐ��N2�&F�DG��ÿ_ˏ'Dx;" �ʚ�Ɖ0St���c@������X 23 | O!�ey�nI]��RA=���w���c�&���Zr{�+a���xK�O�iW�+w�"�(�s�|8�"��ѻz��޷�[R��pNo�"���R8k�0��[V����P 24 | M������$w��@����g ���g\�&��"�i�/�hM�������y{I�#�~Yׇgu/=4�ݤCc���Vk��ߒs��C�{Iz���;0Dk�(����maK���[:W�Amȹ�YN��Z�{8K��������I>F3Q����w�*����vX�,���8̍�G1��!�����u�-���o��z������y�}�� �:ڑ(zz�U����,�h��h���I=���q��s!Ѭ� ��Z���Z~��+�YZ�}��i7�L�ǡ'�Y��XL�عwJ�����q�� 25 | } "�Ӯ���OI��k��, �1�!�,#1�&�'px\�_�v9�V%���3�?{B���W�=i��P�8aY/w8b>��~ 26 | k70��N������� ��e��4|�N 27 | �6�Ǐ����T���^�� ��8��(�B�_�3��"�vJy x��n|� ��3f*��# 28 | ���!U��Y���P!7n�h��g+Y�;��CP�PY0�gx��|{���V�a4]V�ǽ~��0V�����_$#����=9O��85+!x�bڭJ�����X �R���D;yOI5Y��զ��`� �H�_�+W���Z�W3pح�FB,W%K��nw�F̼|!�~$H�dz\�F��K�_�H�Jr\�F ��}X����5��v�F \^�py-��t� �a쁆���M�?3M c�|� ra5�����z �Y���� ى��-&���� 29 | �T����+L cT��᲎@��b���;��0vA��-I�[J�5{��0:���0�k�:�wP�L ��N"�������w��0: �e�:�n��;&��y�WT����:��0���G��<:�@���0(��0vA9�J�mj[�� Za%�+�]�ؙ��*o��z��s`nTۂsc���GI@7>GZo\k��.� ����R���e\��6� �a ��#�������[�9&���<>'��)��;i��sL #`������fv� Èυ�ր����~t�j�P�S�&J��Z�g�^� �a�̓Gu]����{v.�a #Y�m{o6�W)��0��%��e��� zr�n�a :Y>�,�H�����,�� �a$D+���UD4��FB�zQN������`>�H��4�TX�A�K���ռ����� 7 �0����䕋 30 | ��l�t�=�0]I��Z�����!��?�Jq�z�b-�O? �c�yi~}>{D式N��o\4Z��em�}�tڟv��M� �����h��gu��vl'�@Ŝ�ƀ��Ex�2<~NL��Q���ZN_�j�w&�O�=� �> c`�f獆�^��z�jSi������5��` o^���p��7#+��.,�͆]���f/�w��d��~�a욍��u]w(���uX���i��� ���e`ȧ�@�H�3�0����C�U����ο�р�4��~�k�u�v�P����^�������������Vj���v��c;8 �_J�q��4,��&�;�����͖�Z]��� �粛��-� �2�:��jg���D�W�@�����m��>>t'>�p8���> k0� 31 | �]�[������� �N��X��` �5= 32 | �� tz���i�.9���h�9KX<�1$\^��η��Zߘ�EP��|�����:{]�0�8�O�U�K_&:xQ�0��xnc�;o;�6�n�a���p� ;[��aڭ5 #VZ�n�p���"�d�r�gp{@ 9 ���9 ��O��[hYn#�ݩ<������p��g8� 33 | T��Y��J��\� 34 | ̠ A� 0���Gu>V��ލ�; 35 | @����U�G��70���\�y��d�vbD�Ag���0��'2 �cj�oѺ�-�~�(�ݩ|����p��'� ������խ?�MY�y`Y9$�4��RCѼW����/uv��<����8O'����a��B�_��o?���v���� ���h)0�J��� Z�Z_D�vLh޵�� |��K��q�5'�,���}����~q/G�ͣ��I� (bU� #M��g�׀����������S��a`�=`C� 36 | �o�u�T�ڋ ��6���t��a����e����; 37 | @�>�[y������8< |*�1�!� �����q�z7�1���׀��x(�+)fq���q��m��;���O�8_��0�jw�`QC)����{�����B7/����d x@a�k�NE��~)���� �nD<�b0�k|:���{�|o��0����_���y�?�ugO���"�3�����u��!�q�kbBd}J����������{�g��Q`��`���)N��" c+���i�{~�k�2P��s�� 38 | {����iN1� IEND�B`�(� K,K,��p��lu��m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���lb��p ��p��lx��m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���lr��p ��mE��n���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���kY��li��m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���lr��p ��n���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���p ��m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���n���lj��m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���lr��kR��m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���mL��p ��m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���p��li��m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���p ��m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���p��n[��m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m}��m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���l*��m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m��̙��լ�������m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m[��m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m��̙�������������������m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m��̘����������������������„���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���n���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m��̘������������������������������…���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m��̘��������������������������������������…���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m��˗����������������������������������������������…���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m��˗������������������������������������������������������†���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m��Ǝ��������������������������������������������������������������†���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m��ٴ������������������������������������������������������������������†���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m��ݼ����������������������������������������������������������������������…���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m��ݼ����������������������������������������������������������������������Μ���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m��ݼ������������������������������������������������������������������߿��…���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m��ݼ��������������������������������������������������������������߿��…���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m��ݼ����������������������������������������������������������߿��…���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m��ݼ������������������������������������������������������߿��„���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���u��Ǐ��Ν��Ν��Ν��Ν��Ν��Ν��Ν��Ν��Ν��Ν��Ν��Ν��Ν��Ν��Ν��Ν��Ν��Ν��Ν��Ν��Ν��Ν��Ν��Ν��Ν��Ν��Ν��Ν��Ν��Ν��Ν��Ν��Ν��Ν��Ν��Ν��Ν��Ν��Ν��Ν��Ν��Ν��Ν��Ν��Ν��Ν��Ν��Ν��Ν��Ν��Ν��Ν��Ν��Ν��Ν��Ν��Ν��Ν��Ν��Ν��Ν��Ν��̚�������m���m���m���m���m���m���m���m���m���m��ݼ��������������������������������������������������߿��„���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m��„������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������֮���m���m���m���m���m���m���m���m���m���m��ݼ����������������������������������������������߿��„���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m��„������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������֮���m���m���m���m���m���m���m���m���m���m��ݼ���������������������������������������������������m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m��„������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������֮���m���m���m���m���m���m���m���m���m���m��ݼ������������������������������������������Ө���u���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m��„������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������֮���m���m���m���m���m���m���m���m���m���m��ݼ����������������������������������������������Ν���u���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m��„������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������֮���m���m���m���m���m���m���m���m���m���m��ݼ��������������������������������������������������Ν���t���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m��„������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������֮���m���m���m���m���m���m���m���m���m���m��ݼ������������������������������������������������������Ν���t���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m��„������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������֮���m���m���m���m���m���m���m���m���m���m��ݼ����������������������������������������������������������Ν���s���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m��„������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������֮���m���m���m���m���m���m���m���m���m���m��ݼ��������������������������������������������������������������Ν���r���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m��„������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������֮���m���m���m���m���m���m���m���m���m���m��ݼ������������������������������������������������������������������Ν���r���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m��„������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Ԫ���m���m���m���m���m���m���m���m���m���m��ݼ����������������������������������������������������������������������̙���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m��„�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������|���m���m���m���m���m���m���m���m���m���m��ݼ����������������������������������������������������������������������ذ���r���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m��„����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ر���u���m���m���m���m���m���m���m���m���m���m���m��ݼ������������������������������������������������������������������ׯ���r���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m��„������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Ԩ���m���m���m���m���m���m���m���m���m���m���m���m���m��ݼ��������������������������������������������������������������׮���r���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m��„��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ԧ���m���m���m���m���m���m���m���m���m���m���m���m���m���m��ݼ����������������������������������������������������������֬���r���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m��„����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Ӧ���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m��ݼ������������������������������������������������������ժ���r���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���~������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������֭���o���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m��ݼ��������������������������������������������������ԩ���s���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���s�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������w���m���m���m���m���m���m���m���m���m���m���m���m���m���m��͛���������������������������������������������������������������m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m��޽����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������†���n���m���m���m���m���m���m���m���m���m���m���m���m��Ν����������������������������������������������������������������������׮���}���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m��ӧ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ҧ���o���m���m���m���m���m���m���m���m���m���m���m���}��������������������������������������������������������������������������������������˗���q���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m��ƍ�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������y���m���m���m���m���m���m���m���m���m���m���n��Å����������������������������������������������������������������������������������������������֭���v���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���q��޽����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������̚���n���m���m���m���m���m���m���m���m���m���n��Ç������������������������������������������������������������������������������������������������������ٳ���v���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m��ʕ�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������t���m���m���m���m���m���m���m���m���m���n������������������������������������������������������������������������������������������������������������������ٳ���v���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���t��޽��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ҥ���m���m���m���m���m���m���m���m���m���n���|����������������������������������������������������������������������������������������������������������������������Р���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m��…���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������|���m���m���m���m���m���m���m���m���m���t��ڵ��������������������������������������������������������������������������������������������������������������������������ȑ���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���p��ŋ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ܹ���n���m���m���m���m���m���m���m���m���p��ɓ������������������������������������������������������������������������������������������������������������������������������߿���v���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���q��ɓ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Ν���m���m���m���m���m���m���m���m���m���x��������������������������������������������������������������������������������������������������������������������������������������͜���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���s��ƍ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������…���m���m���m���m���m���m���m���m���o��ĉ�������������������������������������������������������������������������������������������������������������������������������������������v���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���p������֭���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������r���m���m���m���m���m���m���m���m���u��װ������������������������������������������������������������������������������������������������������������������������������������������Ŋ���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���x��ɒ��ڴ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������ܹ���m���m���m���m���m���m���m���m���m���|����������������������������������������������������������������������������������������������������������������������������������������������ӧ���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���n���z��ȑ��֭������������������������������������������������������������������������������������������������������������������������������������������������������������������ԫ���m���m���m���m���m���m���m���m���m��������������������������������������������������������������������������������������������������������������������������������������������������޾���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���u��Ċ��ѣ����������������������������������������������������������������������������������������������������������������������������������������������������������С���m���m���m���m���m���m���m���m���o��Ō���������������������������������������������������������������������������������������������������������������������������������������������������q���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���r������˖��ٲ����������������������������������������������������������������������������������������������������������������������������������������������͜���m���m���m���m���m���m���m���m���r��͛��������������������������������������������������������������լ��ɔ��ƌ��Ǝ��Μ�������������������������������������������������������������������{���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���n���v��Ċ��С��ٳ����������������������������������������������������������������������������������������������������������������������������������̙���m���m���m���m���m���m���m���m���s��Т����������������������������������������������������������ʕ���s���m���m���m���m������ݻ���������������������������������������������������������������m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���n���u��Ĉ��͚��ׯ����������������������������������������������������������������������������������������������������������������������̙���m���m���m���m���m���m���m���m���s��Т������������������������������������������������������˖���r���m���m���m���m���m���m��������������������������������������������������������������Ç���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���o�����ƍ��ѣ��ذ��޽��������������������������������������������������������������������������������������������������ɔ���m���m���m���m���m���m���m���m���s��Т�������������������������������������������������������{���m���m���m���m���m���m���m���m��׮�����������������������������������������������������������m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���v��Ĉ��˖��Ϡ��֭��ٳ��߿������������������������������������������������������������������ܸ��Т���~���m���m���m���m���m���m���m���m���s��Ϟ��������������������������������������������������ٴ���w���m���m���m���m���m���m���m���m��Ν�������������������������������������������������������w���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���u���{������ĉ��Ǝ��ɓ��ɔ��ɔ��ɔ��ɔ��ɔ��ɔ��ǎ��Ç�������~���w���p���m���m���m���m���m���m���m���m���m���m���p��Ǐ��������������������������������������������������ٴ���v���m���m���m���m���m���m���m���m��Ν�������������������������������������������������������p���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m�����������������������������������������������������������z���m���m���m���m���m���m���m���m��Ө�������������������������������������������������������m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���{������������������������������������������������������ĉ���o���m���m���m���m���m���m���~������������������������������������������������������ӧ���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���t��Ө�����������������������������������������������������…���p���m���m���m���m���~��ڴ������������������������������������������������������Ŋ���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���o���x���}������������������x���p���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���o��Ç����������������������������������������������������������Ν��Ĉ������†��ȑ��ܹ������������������������������������������������������߿���q���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���w��ĉ��ɔ��С��ٲ��ݻ��������������߿��ٲ��ѣ��˗��ƌ���~���r���m���m���m���m���m���m���m���m���m���m���m���m���m���u��۷����������������������������������������������������������������������������������������������������������������������������������̙���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���|��ɒ��ׯ������������������������������������������������������޾��Ϡ��†���t���m���m���m���m���m���m���m���m���m���m���m���o��…�����������������������������������������������������������������������������������������������������������������������������������u���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���w��Ȑ��ܹ��������������������������������������������������������������������������ѣ�������p���m���m���m���m���m���m���m���m���m���m���s��ذ��������������������������������������������������������������������������������������������������������������������������Ǝ���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m������ի������������������������������������������������������������������������������������������ɓ���x���m���m���m���m���m���m���m���m���m���n���{����������������������������������������������������������������������������������������������������������������������ҥ���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���o��Ç������������������������������������������������������������������������������������������������������ի���y���m���m���m���m���m���m���m���m���m���n������������������������������������������������������������������������������������������������������������������׮���u���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���o��ǎ��������������������������������������������������������������������������������������������������������������װ���{���m���m���m���m���m���m���m���m���m���n��…������������������������������������������������������������������������������������������������������֮���u���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���o��ƌ����������������������������������������������������������������������������������������������������������������������ܹ���x���m���m���m���m���m���m���m���m���m���n��ƒ����������������������������������������������������������������������������������������������֭���u���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���n��Æ������������������������������������������������������������������������������������������������������������������������������ׯ���w���m���m���m���m���m���m���m���m���m���m���|��������������������������������������������������������������������������������������͛���u���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���n���z��������������������������������������������������������������������������������������������������������������������������������������֭���o���m���m���m���m���m���m���m���m���m���m���m��С����������������������������������������������������������������������ܹ�������m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���t��ܸ������������������������������������������������������������������������������������������������������������������������������������������†���m���m���m���m���m���m���m���m���m���m���m���m���t��С������������������������������������������������������ر�������m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���o��Ǝ���������������������������������������������������������������������������������������������������������������������������������������������������q���m���m���m���m���m���m���m���m���m���m���m���m���m���m���t��˗��ز��޾������������������ڷ��Ϟ��Æ���s���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���w������������������������������������������������������������������������������������������������������������������������������������������������������Ν���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���o��Ǝ�����������������������������������������������������������������������������������������������������������������������������������������������������������o���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���v��������������������������������������������������������������������������������������������������������������������������������������������������������������͛���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���}�������������������������������������������������������������������������������������������������������������������������������������������������������������������m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���r��Ν�������������������������������������������������������������������������������������������������������������������������������������������������������������������m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���v��ڶ������������������������������������������������������������������������������������������������������������������������������������������������������������������ŋ���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���y����������������������������������������������������������������������������������������������������������������������������������������������������������������������Ѣ���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���}����������������������������������������������������������������������������������������������������������������������������������������������������������������������ز���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���~����������������������������������������������������������������������������������������������������������������������������������������������������������������������ܹ���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���~���������������������������������������������������������������������������������������������������������������������������������������������������������������������������m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���~���������������������������������������������������������������������������������������������������������������������������������������������������������������������������m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���~����������������������������������������������������������������������������������������������������������������������������������������������������������������������ݻ���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���|����������������������������������������������������������������������������������������������������������������������������������������������������������������������ٴ���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���{����������������������������������������������������������������������������������������������������������������������������������������������������������������������Ϡ���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���w��߾������������������������������������������������������������������������������������������������������������������������������������������������������������������ĉ���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���r��Ϟ�������������������������������������������������������������������������������������������������������������������������������������������������������������������s���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���n�����������������������������������������������������������������������������������������������������������������������������������������������������������������������m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���w��������������������������������������������������������������������������������������������������������������������������������������������������������������̘���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���q��͛�����������������������������������������������������������������������������������������������������������������������������������������������������������w���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���n���|������������������������������������������������������������������������������������������������������������������������������������������������������С���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���q��Ν���������������������������������������������������������������������������������������������������������������������������������������������������x���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���n���y����������������������������������������������������������������������������������������������������������������������������������������������˗���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���n��È��������������������������������������������������������������������������������������������������������������������������������������ز���s���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���n��Ǐ��������������������������������������������������������������������������������������������������������������������������������������m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���n��̘��������������������������������������������������������������������������������������������������������������������������Æ���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m��͚������������������������������������������������������������������������������������������������������������������Æ���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m��˖������������������������������������������������������������������������������������������������������ٳ�������m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���n���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m��Ǝ��޼������������������������������������������������������������������������������������������С���w���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���v��Ӧ������������������������������������������������������������������������������ڵ��ŋ���p���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���oa��m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m������ӧ��������������������������������������������������������������ٱ��Ȑ���s���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���p&��m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���r��Ǝ��Т��۶������������������������������޾��֭��˗���{���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���n���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���q���w���|������„���}���r���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���ml��m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���nZ��p��m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���p ��mo��m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���oh��p��n���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���p ��m@��m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���mQ��o`��m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���oh��n���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���p ��m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���n���p ��o`��m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���oi��nJ��m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���mF��p ��o`��m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���mw��p��p 39 | ��nS��m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���mt��p��p&��nX��m���n���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���n���m���ne��p*����������?�����������������������������������������������������������������������������������������������������������������������?�������������������������������������������(@� @K,K,��p��m[��m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m ��l��m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���lk��m&��m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���k��m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���mh��m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���n&��n��m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���mu��m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m��È���s���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m��Ξ������޾���s���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m��Ν��������������޾���s���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m��Ν����������������������޾���s���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m��Ç������������������������������޾���s���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m��ɔ����������������������������������ر���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m��ɔ����������������������������������ƍ���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m��ɔ������������������������������ƍ���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���u���������������������������������������������������������������������������������������������������������������������������������������m���m���m���m��ɔ��������������������������ƍ���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���y����������������������������������������������������������������������������������������������������������������������������������Ǝ���m���m���m���m��ɔ����������������������̙���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���y����������������������������������������������������������������������������������������������������������������������������������Ǝ���m���m���m���m��ɔ���������������������������}���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���y����������������������������������������������������������������������������������������������������������������������������������Ǝ���m���m���m���m��ɔ�������������������������������|���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���y����������������������������������������������������������������������������������������������������������������������������������Ǝ���m���m���m���m��ɔ�����������������������������������{���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���y���������������������������������������������������������������������������������������������������������������������������������������m���m���m���m��ɔ���������������������������������������n���m���m���m���m���m���m���m���m���m���m���m���m���m���m���y�����������������������������������������������������������������������������������������������������������������������������������m���m���m���m���m��ɔ���������������������������������������m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���y���������������������������������������������������������������������������������������������������������������������������|���m���m���m���m���m���m��ɔ����������������������������������m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���s���������������������������������������������������������������������������������������������������������������������������m���m���m���m���m���m���y��ݼ�������������������������������m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m������������������������������������������������������������������������������������������������������������������Ϟ���m���m���m���m���m���q��ٳ��������������������������������������ʖ���n���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m��ҥ���������������������������������������������������������������������������������������������������������������p���m���m���m���m���t��������������������������������������������������ر���o���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���y����������������������������������������������������������������������������������������������������������ɔ���m���m���m���m���q����������������������������������������������������������ի���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m��ɒ�������������������������������������������������������������������������������������������������������q���m���m���m���n��ի��������������������������������������������������������������ƍ���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���n��̙����������������������������������������������������������������������������������������������۷���m���m���m���m���w�����������������������������������������������������������������������o���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���n��…������������������������������������������������������������������������������������������˘���m���m���m���m��Ν���������������������������������������������������������������������������m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���q��È��ݻ������������������������������������������������������������������������������ĉ���m���m���m���m��޾����������������������������������������������������������������������͛���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���n���}��Р���������������������������������������������������������������������������m���m���m���p����������������������������������È���}��ɒ������������������������������֬���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���o�����̘��޼�����������������������������������������������������������m���m���m���p�������������������������������|���m���m���m��͛��������������������������ׯ���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���o���~��Ċ��ʕ��ѣ��ׯ��۷��۸��۸��ڵ��ԩ��ϟ��Ǝ���q���m���m���m���o�������������������������������r���m���m���m��…��������������������������ѣ���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m��ׯ���������������������������x���m���m���m��˖��������������������������Ȑ���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���n���t���w���v���p���m���m���m���m���m���m���m���m��„�����������������������������������x��ƍ�������������������������������u���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���z��Ϡ����������������������ݻ��ɔ���u���m���m���m���m���m���p������������������������������������������������������������������֬���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���r��ӧ������������������������������������������ʔ���p���m���m���m���m�������������������������������������������������������������������u���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���v������������������������������������������������������װ���q���m���m���m���m��ɒ�����������������������������������������������������������m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���t��������������������������������������������������������������ٳ���o���m���m���m���m��ȑ���������������������������������������������������m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���o����������������������������������������������������������������������С���m���m���m���m���m���z��ܹ������������������������������ѣ���s���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m��ȑ���������������������������������������������������������������������������z���m���m���m���m���m���m���o��ĉ��̙��Ϟ��˗�������o���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���p������������������������������������������������������������������������������ٳ���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���~�����������������������������������������������������������������������������������m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m��Μ���������������������������������������������������������������������������������������m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m��ٴ����������������������������������������������������������������������������������ȑ���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m��۷����������������������������������������������������������������������������������̙���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m��ٳ����������������������������������������������������������������������������������ɒ���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m��Ѣ���������������������������������������������������������������������������������������m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���������������������������������������������������������������������������������������n���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���q������������������������������������������������������������������������������ڴ���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m��̘���������������������������������������������������������������������������}���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���q����������������������������������������������������������������������Ө���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���v��������������������������������������������������������������߿���r���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���x������������������������������������������������������ܺ���s���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���u��ر������������������������������������������͛���o���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���n���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m������ӧ��������������������������̙���w���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���nI��m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���q���v���w���n���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���p��m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���nR��n@��m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���p��ns��m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���o��p��np��m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���n)��nC��m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m��p��nC��m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���mt��n#�����������������������������������������������������������������������(0` $K,K,��m��mO��m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m`��k��n��m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���n��k��m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m��m=��m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���mc��l��m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���n���p���m���m���m���m���m���m���m���m���m���m���m��m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m��С�������x���m���m���m���m���m���m���m���m���m���m4��m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���n��Ϡ���������������x���m���m���m���m���m���m���m���m���m;��m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m��Ξ�����������������������v���m���m���m���m���m���m���m���m;��m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m�������������������������������q���m���m���m���m���m���m���m;��m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m��������������������������֭���n���m���m���m���m���m���m���m;��m���m���m���m���o��ƍ��ȑ��ȑ��ȑ��ȑ��ȑ��ȑ��ȑ��ȑ��ȑ��ȑ��ȑ��ȑ��ȑ��ȑ��ȑ��ȑ��ȑ��ȑ��ȑ��ȑ��ȑ��ȑ��Ȑ���s���m���m���m����������������������֭���n���m���m���m���m���m���m���m���m;��m���m���m���m���v��������������������������������������������������������������������������������������������������†���m���m���m������������������ܺ���o���m���m���m���m���m���m���m���m���m;��m���m���m���m���v��������������������������������������������������������������������������������������������������†���m���m���m����������������������„���m���m���m���m���m���m���m���m���m;��m���m���m���m���v��������������������������������������������������������������������������������������������������†���m���m���m�������������������������������m���m���m���m���m���m���m���m;��m���m���m���m���v���������������������������������������������������������������������������������������������������~���m���m���m�������������������������������u���m���m���m���m���m���m���m;��m���m���m���m���v����������������������������������������������������������������������������������������������Ĉ���m���m���m���m��������������������������Ϡ���m���m���m���m���m���m���m���m;��m���m���m���m���t������������������������������������������������������������������������������������������È���m���m���m���m���r����������������������ѣ���m���m���m���m���m���m���m���m���m;��m���m���m���m���n��������������������������������������������������������������������������������������ϟ���m���m���m���n��ʖ��������������������������޾���w���m���m���m���m���m���m���m���m;��m���m���m���m���m��ر�����������������������������������������������������������������������������������o���m���m���n��׮�������������������������������������������m���m���m���m���m���m���m;��m���m���m���m���m���y������������������������������������������������������������������������������ɔ���m���m���m��Ξ�����������������������������������������������v���m���m���m���m���m���m;��m���m���m���m���m���m��Ç���������������������������������������������������������������������������u���m���m���s��������������������������������������������������ׯ���m���m���m���m���m���m;��m���m���m���m���m���m���m���{��޽�������������������������������������������������������������������m���m���m��ʖ�������������������������������������������������������q���m���m���m���m���m;��m���m���m���m���m���m���m���m���m���z��ժ������������������������������������������������������߾���m���m���m��ٳ��������������������������ڵ���������������������������x���m���m���m���m���m;��m���m���m���m���m���m���m���m���m���m���m���p������ի������������������������������������������ܹ���m���m���m��ܺ������������������޾���o���m���~��������������������������m���m���m���m���m;��m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���t������ƍ��͛��Ѥ��ҥ��ҥ��͜��ȑ���z���m���m���m��ٲ������������������ϟ���m���m���o�����������������������v���m���m���m���m���m;��m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m��ǎ�����������������������q���m��ƍ�����������������������p���m���m���m���m���m;��m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���{��ѣ��������������ի��†���o���m���m���m���q��������������������������������������������������Ҥ���m���m���m���m���m���m;��m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���q��ׯ�����������������������������������~���m���m���m��ȑ�����������������������������������������������r���m���m���m���m���m���m;��m���m���m���m���m���m���m���m���m���m���m���m���m���m���u���������������������������������������������������m���m���m��Μ���������������������������������������x���m���m���m���m���m���m���m;��m���m���m���m���m���m���m���m���m���m���m���m���m���n�������������������������������������������������������w���m���m���m��Ĉ��������������������������ׯ���t���m���m���m���m���m���m���m���m;��m���m���m���m���m���m���m���m���m���m���m���m���m��Ȓ������������������������������������������������������޽���m���m���m���m���m���w��ƌ��Ȓ��„���p���m���m���m���m���m���m���m���m���m���m;��m���m���m���m���m���m���m���m���m���m���m���m���n���������������������������������������������������������������{���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m;��m���m���m���m���m���m���m���m���m���m���m���m���y��������������������������������������������������������������˖���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m;��m���m���m���m���m���m���m���m���m���m���m���m������������������������������������������������������������������ի���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m;��m���m���m���m���m���m���m���m���m���m���m���m������������������������������������������������������������������֭���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m;��m���m���m���m���m���m���m���m���m���m���m���m���}��������������������������������������������������������������Ν���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m;��m���m���m���m���m���m���m���m���m���m���m���m���p�������������������������������������������������������������������m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m;��m���m���m���m���m���m���m���m���m���m���m���m���m��Ԩ�����������������������������������������������������������o���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m;��m���m���m���m���m���m���m���m���m���m���m���m���m���s������������������������������������������������������È���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m;��m���m���m���m���m���m���m���m���m���m���m���m���m���m��������������������������������������������������С���n���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m0��m���m���m���m���m���m���m���m���m���m���m���m���m���m���m�����������������������������������������ʖ���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���n��m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���q��͚����������������������ԩ���w���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���o���t���q���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m1��m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���nL��m��nn��m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m��p��ml��m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���n��n��n.��m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���mB��m��n��m2��m;��m;��m;��m;��m;��m;��m;��m;��m;��m;��m;��m;��m;��m;��m;��m;��m;��m;��m;��m;��m;��m;��m;��m;��m;��m;��m;��m;��m;��m;��m;��m;��m;��m3��n��p����������( @ K,K,��m5��m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���l��mA��m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m��n��m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���mK��m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m��Р�������m���m���m���m���m���m���mw��m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m��Ӧ����������„���m���m���m���m���m���m|��m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���}�����������������������m���m���m���m���m|��m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m�����������������������u���m���m���m���m���m|��m���m���r�������������������������������������������������������������������{���m�������������������u���m���m���m���m���m���m|��m���m���s�������������������������������������������������������������������}���m������������������Ǐ���m���m���m���m���m���m|��m���m���s�������������������������������������������������������������������z���m����������������������Ç���m���m���m���m���m|��m���m���s��������������������������������������������������������������ɓ���m���m�����������������������r���m���m���m���m���m|��m���m���o����������������������������������������������������������Ξ���m���m���������������������̚���m���m���m���m���m���m|��m���m���m�����������������������������������������������������������n���m��Ĉ��������������������������ر���m���m���m���m���m|��m���m���m���w��������������������������������������������������Ν���m���p����������������������������������ǎ���m���m���m���m|��m���m���m���m���s��֮����������������������������������������������m��ƍ���������������������������������������m���m���m���m|��m���m���m���m���m���m���q��ɓ�����������������������������������x���m��Ϡ��������������Ȑ���z�������������������m���m���m���m|��m���m���m���m���m���m���m���m���m���n���x��…��Ȑ��ɒ��ǎ�������n���m��ʕ���������������q���m�������������������m���m���m���m|��m���m���m���m���m���m���m���m���m���m���m���}��Р��ի��͛���y���m���m���s������������������۸��������������Μ���m���m���m���m|��m���m���m���m���m���m���m���m���m���o��ܸ����������������������ի���n���m��Ν�������������������������������o���m���m���m���m|��m���m���m���m���m���m���m���m���m����������������������������������װ���m���m��̙������������������ܹ���r���m���m���m���m���m|��m���m���m���m���m���m���m���m��ȑ�������������������������������������������m���m���m����������r���m���m���m���m���m���m���m|��m���m���m���m���m���m���m���m������������������������������������������ٳ���m���m���m���m���m���m���m���m���m���m���m���m���m|��m���m���m���m���m���m���m���m�����������������������������������������������m���m���m���m���m���m���m���m���m���m���m���m���m|��m���m���m���m���m���m���m���m�����������������������������������������������m���m���m���m���m���m���m���m���m���m���m���m���m|��m���m���m���m���m���m���m���m��ر��������������������������������������Ν���m���m���m���m���m���m���m���m���m���m���m���m���m|��m���m���m���m���m���m���m���m���y���������������������������������������q���m���m���m���m���m���m���m���m���m���m���m���m���mz��m���m���m���m���m���m���m���m���m��ƌ������������������������������„���m���m���m���m���m���m���m���m���m���m���m���m���m���mZ��m���m���m���m���m���m���m���m���m���m����������������������ݻ���y���m���m���m���m���m���m���m���m���m���m���m���m���m���m���n��m���m���m���m���m���m���m���m���m���m���m���m���n���r���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���mh��m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m6��p��mi��m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���m���nA��n��mZ��mz��m|��m|��m|��m|��m|��m|��m|��m|��m|��m|��m|��m|��m|��m|��m|��m|��m|��m|��m|��m|��m|��mv��mK��n �����(  K,K,��m��m���m���m���m���m���m���m���m���m���m���m���m���m���m���mE��m���m���m���m���m���m���m���m���m���m���m���m�������m���m���m���m���m���m���m���m���m���m���m���m���m���m��ѣ������˗���m���m���m���n��Ө��Ԫ��Ԫ��Ԫ��Ԫ��Ԫ��Ԫ��ԩ���p��߿������ŋ���m���m���m���p�����������������������������������t��߿������Ξ���m���m���m���o������������������������������ҥ���r����������ɒ���m���m���m���m�������������������������������n�������������������u���m���m���m���o��Ν������������������ݺ����������������������Ν���m���m���m���m���m���m���p��ƍ��̚���u���y����������۷������Ȑ���m���m���m���m���m���m��ݺ���������������~��Ө����������޾���n���m���m���m���m���m��ƌ�����������������������m���r���t���m���m���m���m���m���m���m��Ѣ�����������������������m���m���m���m���m���m���m���m���m���m����������������������޼���m���m���m���m���m���m���m���m���m���m���m��͛���������������s���m���m���m���m���m���m���m[��m���m���m���m���m���m���n���m���m���m���m���m���m���m���m���p��mZ��m���m���m���m���m���m���m���m���m���m���m���m���m���n -------------------------------------------------------------------------------- /app/globals.css: -------------------------------------------------------------------------------- 1 | @import url("https://fonts.googleapis.com/css2?family=Inter:opsz@14..32&family=Space+Grotesk:wght@300..700&display=swap"); 2 | /* CSS reset */ 3 | *, 4 | *::before, 5 | *::after { 6 | box-sizing: border-box; 7 | } 8 | 9 | * { 10 | margin: 0; 11 | } 12 | 13 | body { 14 | line-height: 1.5; 15 | -webkit-font-smoothing: antialiased; 16 | } 17 | 18 | img, 19 | picture, 20 | video, 21 | canvas, 22 | svg { 23 | display: block; 24 | max-width: 100%; 25 | } 26 | 27 | input, 28 | button, 29 | textarea, 30 | select { 31 | font: inherit; 32 | } 33 | 34 | p, 35 | h1, 36 | h2, 37 | h3, 38 | h4, 39 | h5, 40 | h6 { 41 | overflow-wrap: break-word; 42 | } 43 | 44 | li { 45 | list-style-type: none; 46 | } 47 | 48 | a { 49 | text-decoration: none; 50 | } 51 | 52 | button { 53 | border: none; 54 | cursor: pointer; 55 | } 56 | 57 | ul { 58 | padding: 0; 59 | } 60 | 61 | span { 62 | color: inherit; 63 | font-family: inherit; 64 | font-size: inherit; 65 | } 66 | 67 | /* CSS reset end */ 68 | 69 | /* General Theming */ 70 | :root { 71 | --font-space-grotesk: "Space Grotesk", serif; 72 | --font-inter: "Inter", sans-serif; 73 | --text-slate: #94a3b8; 74 | --primary: #2c56f6; 75 | --secondary: #59acfe; 76 | --bg-light: #2c334b; 77 | --bg-medium: #171b29ff; 78 | } 79 | 80 | body { 81 | background-color: var(--bg-medium); 82 | margin: 0 auto; 83 | } 84 | 85 | main { 86 | max-width: 700px; 87 | margin: 0 auto; 88 | padding: 3rem 1rem; 89 | overflow: auto; 90 | } 91 | 92 | h1, 93 | h2, 94 | h3, 95 | h4, 96 | h5, 97 | h6 { 98 | font-family: var(--font-space-grotesk); 99 | color: white; 100 | font-weight: bold; 101 | } 102 | 103 | p, 104 | li, 105 | a { 106 | font-family: var(--font-inter); 107 | } 108 | 109 | button { 110 | font-family: var(--font-space-grotesk); 111 | font-weight: bold; 112 | } 113 | 114 | p, 115 | li, 116 | a { 117 | color: var(--text-slate); 118 | } 119 | 120 | a { 121 | transition: color 0.3s; 122 | } 123 | 124 | a:hover { 125 | color: white; 126 | } 127 | 128 | .loader { 129 | border: 5px solid var(--text-slate); 130 | border-bottom-color: transparent; 131 | border-radius: 50%; 132 | margin: 0 auto; 133 | animation: rotation 1s linear infinite; 134 | width: 2rem; 135 | height: 2rem; 136 | } 137 | 138 | @keyframes rotation { 139 | 0% { 140 | transform: rotate(0deg); 141 | } 142 | 100% { 143 | transform: rotate(360deg); 144 | } 145 | } 146 | 147 | div:has(> nav) { 148 | background-color: var(--bg-light); 149 | } 150 | 151 | /* Navigation */ 152 | nav { 153 | padding: 0.5rem 1rem; 154 | display: grid; 155 | gap: 0.5rem; 156 | grid-template-columns: repeat(1, minmax(0, 1fr)); 157 | align-items: center; 158 | max-width: 1400px; 159 | margin: 0 auto; 160 | } 161 | 162 | nav p { 163 | color: white; 164 | } 165 | 166 | nav ul { 167 | justify-self: center; 168 | display: flex; 169 | justify-content: center; 170 | align-items: center; 171 | background-color: #727a95; 172 | border-radius: 8px; 173 | width: fit-content; 174 | /*max-width: 500px;*/ 175 | padding: 0.3rem; 176 | gap: 0.2rem; 177 | } 178 | 179 | nav ul li { 180 | border-radius: 8px; 181 | transition: background-color 0.3s; 182 | } 183 | 184 | nav ul li:has(a[data-selected="true"]) { 185 | background-color: var(--bg-light); 186 | } 187 | 188 | nav ul li:not(:has(a[data-selected="true"])):hover { 189 | background-color: #61677c; 190 | } 191 | 192 | nav ul li a { 193 | font-family: var(--font-space-grotesk); 194 | color: white; 195 | padding: 0.5rem 1rem; 196 | display: inline-block; 197 | } 198 | 199 | nav > a:first-child { 200 | justify-self: center; 201 | display: flex; 202 | align-items: center; 203 | gap: 0.5rem; 204 | font-family: var(--font-space-grotesk); 205 | font-weight: bold; 206 | font-size: 20px; 207 | } 208 | 209 | nav > button:last-child { 210 | font-family: var(--font-space-grotesk); 211 | background-color: var(--primary); 212 | color: white; 213 | justify-self: center; 214 | transition: background-color 0.3s; 215 | border-radius: 8px; 216 | font-weight: bold; 217 | padding: 0.5rem 1rem; 218 | } 219 | 220 | /* Main */ 221 | 222 | main section { 223 | padding: 1rem; 224 | background-color: #0c0c1f; 225 | box-shadow: 0 0 14px 0 rgba(44, 86, 246, 0.5); 226 | border-radius: 8px; 227 | text-align: center; 228 | } 229 | 230 | main h1 { 231 | color: var(--secondary); 232 | margin: 0 auto; 233 | padding-bottom: 1rem; 234 | } 235 | 236 | main p { 237 | padding-top: 4px; 238 | padding-bottom: 4px; 239 | } 240 | 241 | main .button, 242 | main button { 243 | display: inline-block; 244 | font-family: var(--font-space-grotesk); 245 | font-weight: bold; 246 | background-color: var(--primary); 247 | color: white; 248 | padding: 0.5rem 1rem; 249 | border-radius: 8px; 250 | transition: background-color 0.3s; 251 | margin: 0.4rem 0.2rem; 252 | } 253 | 254 | main .button:disabled, 255 | main button:disabled { 256 | background-color: #1b3494; 257 | cursor: not-allowed; 258 | } 259 | 260 | main .button:hover:not([disabled]), 261 | button:hover:not([type="button"]):not([title]):not(.cb-primary-button):not( 262 | [disabled] 263 | ) { 264 | background-color: var(--secondary); 265 | } 266 | 267 | main ul { 268 | display: flex; 269 | justify-content: center; 270 | align-items: center; 271 | gap: 1rem; 272 | flex-wrap: wrap; 273 | padding: 0.2rem 0; 274 | } 275 | 276 | main ul li { 277 | color: white; 278 | font-family: var(--font-space-grotesk); 279 | } 280 | 281 | main ul li::before { 282 | content: ""; 283 | display: inline-block; 284 | width: 24px; 285 | height: 24px; 286 | margin-right: 2px; 287 | background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgdmlld0JveD0iMCAwIDMyIDMyIiBmaWxsPSJub25lIj4KPGcgZmlsdGVyPSJ1cmwoI2ZpbHRlcjBfZl8zNl83MTUpIj4KPGNpcmNsZSBjeD0iMTYiIGN5PSIxNiIgcj0iNiIgZmlsbD0iIzIxOEVEMiIvPgo8Y2lyY2xlIGN4PSIxNiIgY3k9IjE2IiByPSI2IiBmaWxsPSIjMjE4RUQyIi8+CjwvZz4KPGNpcmNsZSBjeD0iMTYiIGN5PSIxNiIgcj0iNiIgZmlsbD0iIzIxOEVEMiIvPgo8Y2lyY2xlIGN4PSIxNiIgY3k9IjE2IiByPSI2IiBmaWxsPSIjMjE4RUQyIi8+CjxkZWZzPgo8ZmlsdGVyIGlkPSJmaWx0ZXIwX2ZfMzZfNzE1IiB4PSIwIiB5PSIwIiB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIGZpbHRlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KPGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT0iMCIgcmVzdWx0PSJCYWNrZ3JvdW5kSW1hZ2VGaXgiLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJCYWNrZ3JvdW5kSW1hZ2VGaXgiIHJlc3VsdD0ic2hhcGUiLz4KPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iNSIgcmVzdWx0PSJlZmZlY3QxX2ZvcmVncm91bmRCbHVyXzM2XzcxNSIvPgo8L2ZpbHRlcj4KPC9kZWZzPgo8L3N2Zz4="); 288 | background-size: cover; 289 | vertical-align: middle; 290 | } 291 | 292 | #secret-box { 293 | border: 2px solid var(--text-slate); 294 | background: var(--bg-light); 295 | margin-top: 1rem; 296 | justify-self: center; 297 | padding: 0.3rem; 298 | } 299 | 300 | #secret-box h3 { 301 | display: inline; 302 | color: var(--secondary); 303 | } 304 | 305 | #secret-box p { 306 | display: inline; 307 | color: white; 308 | } 309 | 310 | #city-form { 311 | display: flex; 312 | flex-direction: column; 313 | align-items: center; 314 | gap: 0.5rem; 315 | margin-top: 1rem; 316 | } 317 | 318 | #city-form > input { 319 | font-family: var(--font-inter); 320 | background-color: var(--bg-light); 321 | border: white 2px solid; 322 | border-radius: 8px; 323 | color: white; 324 | padding: 0.2rem 0.5rem; 325 | } 326 | 327 | #identifier-list { 328 | display: flex; 329 | flex-direction: column; 330 | padding: 0.5rem; 331 | border: 1px solid var(--text-slate); 332 | border-radius: 8px; 333 | margin-bottom: 0.5rem; 334 | } 335 | 336 | #identifier-list > div { 337 | display: grid; 338 | grid-template-columns: repeat(1, minmax(0, 1fr)); 339 | justify-items: start; 340 | } 341 | 342 | #identifier-list > div:not(:last-child) { 343 | border-bottom: 1px solid var(--text-slate); 344 | } 345 | 346 | /* Footer */ 347 | footer { 348 | margin: 0 auto; 349 | display: flex; 350 | align-items: center; 351 | justify-content: center; 352 | gap: 0.5rem; 353 | padding-top: 3rem; 354 | } 355 | 356 | footer > a { 357 | display: flex; 358 | gap: 0.5rem; 359 | transition: background-color 0.3s; 360 | padding: 0.5rem 1rem; 361 | border-radius: 8px; 362 | } 363 | 364 | footer > a:hover { 365 | background-color: var(--bg-light); 366 | color: var(--text-slate); 367 | } 368 | 369 | footer > svg:hover { 370 | fill: white; 371 | } 372 | 373 | /* Custom Corbado styles */ 374 | 375 | .cbo-custom-styles { 376 | .cb-passkey-list-title { 377 | display: none; 378 | } 379 | 380 | .cb-passkey-list-primary-button { 381 | margin-left: auto; 382 | margin-right: auto; 383 | } 384 | 385 | .cb-passkey-list-primary-button:hover { 386 | background-color: var(--secondary); 387 | } 388 | 389 | .cb-passkey-list-card, 390 | .cb-container { 391 | background-color: var(--bg-light); 392 | } 393 | 394 | .cb-input, 395 | .cb-icon-button-with-icon-only, 396 | .cb-last-identifier { 397 | background-color: var(--bg-medium); 398 | } 399 | } 400 | 401 | @media (min-width: 540px) { 402 | nav ul li a { 403 | padding: 0.5rem 2rem; 404 | } 405 | 406 | #identifier-list > div { 407 | grid-template-columns: repeat(2, minmax(0, 1fr)); 408 | } 409 | } 410 | 411 | @media (min-width: 1150px) { 412 | nav { 413 | grid-template-columns: minmax(0, 1fr) minmax(0, 2fr) minmax(0, 1fr); 414 | } 415 | 416 | nav > a:first-child { 417 | justify-self: start; 418 | } 419 | 420 | nav > button:last-child { 421 | justify-self: end; 422 | } 423 | } 424 | -------------------------------------------------------------------------------- /app/layout.tsx: -------------------------------------------------------------------------------- 1 | import type { Metadata } from "next"; 2 | import "./globals.css"; 3 | import Navigation from "@/app/(home)/navigation"; 4 | import WrappedCorbadoProvider from "@/app/wrapped-corbado-provider"; 5 | import Link from "next/link"; 6 | import Image from "next/image"; 7 | import { getAuthenticatedUserFromCookie } from "@/lib/server/authentication"; 8 | 9 | export const metadata: Metadata = { 10 | title: "Create Next App", 11 | description: "Generated by create next app", 12 | }; 13 | 14 | export default function RootLayout({ 15 | children, 16 | }: Readonly<{ 17 | children: React.ReactNode; 18 | }>) { 19 | return ( 20 | 21 | 22 | 23 | {children} 24 | 25 | 26 | 27 | ); 28 | } 29 | 30 | async function Layout({ children }: { children: React.ReactNode }) { 31 | // obtain user information, so we can pass it to the navigation bar 32 | // in a real-world application, you might store this information in a context 33 | const user = await getAuthenticatedUserFromCookie(); 34 | const isAuthenticated = !!user; 35 | 36 | return ( 37 | <> 38 | 39 |
40 |
{children}
41 |
42 | 46 | GitHub icon 52 | Github 53 | 54 | 58 | Documentation icon 64 | Documentation 65 | 66 |
67 |
68 | 69 | ); 70 | } 71 | -------------------------------------------------------------------------------- /app/profile/client.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | 3 | import { PasskeyList } from "@corbado/react"; 4 | 5 | export function PasskeyManagement() { 6 | return ( 7 | <> 8 |

Manage your Passkeys

9 | 10 | 11 | ); 12 | } 13 | -------------------------------------------------------------------------------- /app/profile/page.tsx: -------------------------------------------------------------------------------- 1 | import { redirect } from "next/navigation"; 2 | import { 3 | getAuthenticatedUserFromCookie, 4 | getUserIdentifiers, 5 | } from "@/lib/server/authentication"; 6 | import { getUser, insertUser } from "@/lib/server/queries"; 7 | import { PasskeyManagement } from "@/app/profile/client"; 8 | 9 | export default async function Page() { 10 | const user = await getAuthenticatedUserFromCookie(); 11 | 12 | // redirect to the login page, if the user is not authenticated 13 | if (!user) { 14 | redirect("/login"); 15 | } 16 | 17 | let dbUser = getUser(user.userId); 18 | 19 | // if we delete the example database, we might go out of sync with 20 | // the corbado database, so we need to recreate the user again 21 | dbUser ??= await insertUser(user.userId); 22 | 23 | const userIdentifiers = await getUserIdentifiers(user.userId); 24 | 25 | return ( 26 |
27 |

Profile

28 |

29 | Example userID: {dbUser.id} 30 |

31 |

32 | Corbado userID: {dbUser.corbado_user_id} 33 |

34 |

Your Identifiers

35 |
36 | {userIdentifiers.identifiers.map((identifier) => ( 37 |
38 |

39 | Type: {identifier.type} 40 |

41 |

42 | Value: {identifier.value} 43 |

44 |
45 | ))} 46 |
47 | 48 |
49 | ); 50 | } 51 | -------------------------------------------------------------------------------- /app/userarea/client.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | 3 | import { useState } from "react"; 4 | import { useCorbado } from "@corbado/react"; 5 | 6 | // enforce query state invariants through this type 7 | // Usually, using react-query would be advised 8 | type QueryResult = 9 | | { 10 | // Query not triggered yet 11 | loading: false; 12 | error: undefined; 13 | secret: undefined; 14 | } 15 | | { 16 | // loading state 17 | loading: true; 18 | error: undefined; 19 | secret: undefined; 20 | } 21 | | { 22 | // success state 23 | loading: false; 24 | error: undefined; 25 | secret: string; 26 | } 27 | | { 28 | // error state 29 | loading: false; 30 | error: string; 31 | secret: undefined; 32 | }; 33 | 34 | export default function LoggedInUserArea() { 35 | const { sessionToken, loading } = useCorbado(); 36 | 37 | function makeApiRequest() { 38 | return fetch("/api/secret", { 39 | headers: { 40 | Authorization: `Bearer ${sessionToken}`, 41 | }, 42 | }); 43 | } 44 | 45 | const [queryResult, setQueryResult] = useState({ 46 | loading: false, 47 | error: undefined, 48 | secret: undefined, 49 | }); 50 | 51 | async function onRevealSecret() { 52 | if (!sessionToken) { 53 | setQueryResult({ 54 | loading: false, 55 | error: "No session token", 56 | secret: undefined, 57 | }); 58 | } 59 | try { 60 | setQueryResult({ 61 | loading: true, 62 | error: undefined, 63 | secret: undefined, 64 | }); 65 | const rsp = await makeApiRequest(); 66 | if (!rsp.ok) { 67 | throw new Error(`Status: ${rsp.status}`); 68 | } 69 | const json = await rsp.json(); 70 | setQueryResult({ 71 | loading: false, 72 | error: undefined, 73 | secret: json.secret, 74 | }); 75 | } catch (e) { 76 | console.warn(e); 77 | setQueryResult({ 78 | loading: false, 79 | error: `Failed to fetch secret. ${e}`, 80 | secret: undefined, 81 | }); 82 | } 83 | } 84 | 85 | return ( 86 |
87 |

User area!

88 |

Since you are logged-in, we can tell you a secret:

89 | 95 | 96 |
97 | ); 98 | } 99 | 100 | function QueryResult({ queryResult }: { queryResult: QueryResult }) { 101 | // handle all possible outcomes here 102 | if (queryResult.loading) { 103 | return
; 104 | } 105 | if (queryResult.error) { 106 | return ( 107 |
108 |

Error

109 |

{queryResult.error}

110 |
111 | ); 112 | } 113 | if (!queryResult.secret) { 114 | return null; 115 | } 116 | return ( 117 |
118 |

Secret:

119 |

{queryResult.secret}

120 |
121 | ); 122 | } 123 | -------------------------------------------------------------------------------- /app/userarea/page.tsx: -------------------------------------------------------------------------------- 1 | import Link from "next/link"; 2 | import LoggedInUserArea from "@/app/userarea/client"; 3 | import { getAuthenticatedUserFromCookie } from "@/lib/server/authentication"; 4 | 5 | export default async function UserArea() { 6 | // the userId being present means the user is authenticated 7 | const user = await getAuthenticatedUserFromCookie(); 8 | 9 | if (!user) { 10 | return ( 11 |
12 |

User area!

13 |

This page is for logged-in users only. Please login:

14 | 15 | Login 16 | 17 |
18 | ); 19 | } 20 | 21 | return ; 22 | } 23 | -------------------------------------------------------------------------------- /app/wrapped-corbado-provider.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | 3 | import { CorbadoProvider } from "@corbado/react"; 4 | import englishTranslations from "@/lib/corbado-translations"; 5 | import React, { useEffect, useRef } from "react"; 6 | import { sendEvent, TelemetryEventType } from "@corbado/shared-util"; 7 | 8 | export default function WrappedCorbadoProvider({ 9 | children, 10 | }: { 11 | children: React.ReactNode; 12 | }) { 13 | // obtain the Corbado project ID from the environment variables 14 | const projectId = process.env.NEXT_PUBLIC_CORBADO_PROJECT_ID; 15 | 16 | const hasSentTelemetry = useRef(false); 17 | 18 | useEffect(() => { 19 | if ( 20 | hasSentTelemetry.current || 21 | !projectId || 22 | process.env.NEXT_PUBLIC_CORBADO_TELEMETRY_DISABLED === "true" 23 | ) 24 | return; 25 | 26 | void sendEvent({ 27 | type: TelemetryEventType.EXAMPLE_APPLICATION_OPENED, 28 | payload: { 29 | exampleName: "corbado/passkeys-nextjs", 30 | }, 31 | sdkVersion: "3.1.0", 32 | sdkName: "React SDK", 33 | identifier: projectId, 34 | }); 35 | 36 | hasSentTelemetry.current = true; 37 | }, [projectId]); 38 | 39 | if (!projectId) { 40 | throw new Error("Missing Corbado project ID"); 41 | } 42 | 43 | return ( 44 | 58 | {children} 59 | 60 | ); 61 | } 62 | -------------------------------------------------------------------------------- /lib/corbado-translations.ts: -------------------------------------------------------------------------------- 1 | const englishTranslations = { 2 | signup: { 3 | "signup-init": { 4 | "signup-init": { 5 | header: "Let's create an account", 6 | subheader: "to check ", 7 | text_login: "Would you like to login? ", 8 | button_submit: "Sign up", 9 | textField_fullName: "Full Name", 10 | text_divider: "or use social logins", 11 | }, 12 | }, 13 | }, 14 | login: { 15 | "login-init": { 16 | "login-init": { 17 | header: "Please login", 18 | subheader: "to check ", 19 | text_signup: "Would you like to create an account? ", 20 | button_signup: "Sign up", 21 | button_submit: "Login", 22 | }, 23 | }, 24 | }, 25 | passkeysList: { 26 | button_createPasskey: "You can create passkeys here.", 27 | field_credentialId: "ID: ", 28 | field_status: "Status of Passkey: ", 29 | }, 30 | }; 31 | 32 | export default englishTranslations; 33 | -------------------------------------------------------------------------------- /lib/server/authentication.ts: -------------------------------------------------------------------------------- 1 | import "server-only"; 2 | import { Config, SDK } from "@corbado/node-sdk"; 3 | import { cookies } from "next/headers"; 4 | import { NextRequest } from "next/server"; 5 | 6 | // Retrieve environment variables 7 | const projectID = process.env.NEXT_PUBLIC_CORBADO_PROJECT_ID; 8 | const apiSecret = process.env.CORBADO_API_SECRET; 9 | if (!projectID) { 10 | throw Error("Project ID is not set"); 11 | } 12 | if (!apiSecret) { 13 | throw Error("API secret is not set"); 14 | } 15 | 16 | // Set the default API URLs 17 | const frontendAPI = process.env.CORBADO_FRONTEND_API; 18 | const backendAPI = process.env.CORBADO_BACKEND_API; 19 | if (!frontendAPI) { 20 | throw Error("Frontend API URL is not set"); 21 | } 22 | if (!backendAPI) { 23 | throw Error("Backend API URL is not set"); 24 | } 25 | 26 | // Initialize the Corbado Node.js SDK with the configuration 27 | const config = new Config(projectID, apiSecret, frontendAPI, backendAPI); 28 | const sdk = new SDK(config); 29 | 30 | export async function getAuthenticatedUserFromCookie() { 31 | const reqCookies = await cookies(); 32 | const sessionToken = reqCookies.get("cbo_session_token")?.value; 33 | if (!sessionToken) { 34 | return null; 35 | } 36 | try { 37 | return await sdk.sessions().validateToken(sessionToken); 38 | } catch { 39 | return null; 40 | } 41 | } 42 | 43 | export async function getAuthenticatedUserFromAuthorizationHeader( 44 | req: NextRequest, 45 | ) { 46 | const sessionToken = req.headers 47 | .get("Authorization") 48 | ?.replace("Bearer ", ""); 49 | if (!sessionToken) { 50 | return null; 51 | } 52 | try { 53 | return await sdk.sessions().validateToken(sessionToken); 54 | } catch { 55 | return null; 56 | } 57 | } 58 | 59 | 60 | // Retrieve all identifiers for a given user ID 61 | export async function getUserIdentifiers(userId: string) { 62 | // List user identifiers sorted by creation date in descending order 63 | return sdk.identifiers().listByUserId(userId); 64 | } 65 | -------------------------------------------------------------------------------- /lib/server/db.ts: -------------------------------------------------------------------------------- 1 | import { JSONFilePreset } from "lowdb/node"; 2 | 3 | export interface User { 4 | id: string; 5 | corbado_user_id: string; 6 | city: string | null; 7 | } 8 | 9 | // use lowdb for a simple in-memory json database, that persists to disk 10 | const defaultData: { users: User[] } = { users: [] }; 11 | const db = await JSONFilePreset(`${process.cwd()}/db.json`, defaultData); 12 | 13 | 14 | export default db; 15 | -------------------------------------------------------------------------------- /lib/server/queries.ts: -------------------------------------------------------------------------------- 1 | // userModel.ts 2 | import db, { User } from "@/lib/server/db"; 3 | 4 | /** 5 | * Retrieves a user by their corbado_user_id. 6 | * @param corbado_user_id - The unique corbado_user_id of the user. 7 | * @returns The user object or undefined if not found. 8 | */ 9 | export function getUser(corbado_user_id?: string): User | undefined { 10 | return db.data.users.find( 11 | (user) => user.corbado_user_id === corbado_user_id, 12 | ); 13 | } 14 | 15 | /** 16 | * Inserts a new user into the database. 17 | * @param corbado_user_id - The unique corbado_user_id of the user. 18 | * @returns The newly created user object. 19 | */ 20 | export async function insertUser(corbado_user_id: string) { 21 | // check if user already exists 22 | if (getUser(corbado_user_id)) { 23 | throw new Error("User already exists"); 24 | } 25 | const user = { 26 | id: crypto.randomUUID(), 27 | corbado_user_id, 28 | city: null, 29 | }; 30 | await db.update(({ users }) => users.push(user)); 31 | return user; 32 | } 33 | 34 | /** 35 | * Updates the city of a user identified by corbado_user_id. 36 | * @param corbado_user_id - The unique corbado_user_id of the user. 37 | * @param city - The new city to set. 38 | */ 39 | export async function updateUserCity(corbado_user_id: string, city: string) { 40 | await db.update(({ users }) => { 41 | const user = users.find( 42 | (user) => user.corbado_user_id === corbado_user_id, 43 | ); 44 | if (user) { 45 | user.city = city; 46 | } 47 | }); 48 | } 49 | -------------------------------------------------------------------------------- /next.config.ts: -------------------------------------------------------------------------------- 1 | import type { NextConfig } from "next"; 2 | 3 | const nextConfig: NextConfig = { 4 | /* config options here */ 5 | }; 6 | 7 | export default nextConfig; 8 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "next-js-example", 3 | "version": "0.1.0", 4 | "private": true, 5 | "scripts": { 6 | "dev": "next dev --turbopack", 7 | "build": "next build", 8 | "start": "next start", 9 | "lint": "next lint", 10 | "prettier:fix": "prettier --write './**/*.{ts,tsx,css}'" 11 | }, 12 | "dependencies": { 13 | "@corbado/node-sdk": "^3.0.2", 14 | "@corbado/react": "^3.1.1", 15 | "@corbado/shared-util": "^1.0.10", 16 | "lowdb": "^7.0.1", 17 | "next": "^15.2.4", 18 | "react": "19.0.0", 19 | "react-dom": "19.0.0", 20 | "server-only": "^0.0.1" 21 | }, 22 | "devDependencies": { 23 | "@corbado/types": "^3.0.0", 24 | "@types/better-sqlite3": "^7.6.11", 25 | "@types/node": "^20", 26 | "@types/react": "19.0.2", 27 | "@types/react-dom": "19.0.2", 28 | "eslint": "^8", 29 | "eslint-config-next": "15.1.2", 30 | "prettier": "^3.3.3", 31 | "prettier-plugin-embed": "^0.4.15", 32 | "typescript": "^5" 33 | }, 34 | "overrides": { 35 | "@types/react": "19.0.2", 36 | "@types/react-dom": "19.0.2" 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /public/documents-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /public/github-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | github [#142] 6 | Created with Sketch. 7 | 8 | 9 | 10 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /public/logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES2017", 4 | "lib": [ 5 | "dom", 6 | "dom.iterable", 7 | "esnext" 8 | ], 9 | "allowJs": true, 10 | "skipLibCheck": true, 11 | "strict": true, 12 | "noEmit": true, 13 | "esModuleInterop": true, 14 | "module": "esnext", 15 | "moduleResolution": "bundler", 16 | "resolveJsonModule": true, 17 | "isolatedModules": true, 18 | "jsx": "preserve", 19 | "incremental": true, 20 | "plugins": [ 21 | { 22 | "name": "next" 23 | } 24 | ], 25 | "paths": { 26 | "@/*": [ 27 | "./*" 28 | ] 29 | } 30 | }, 31 | "include": [ 32 | "next-env.d.ts", 33 | "**/*.ts", 34 | "**/*.tsx", 35 | ".next/types/**/*.ts" 36 | ], 37 | "exclude": [ 38 | "node_modules" 39 | ] 40 | } 41 | --------------------------------------------------------------------------------