From 32a65171bfc648a8562951ffcf0147f173709a1b Mon Sep 17 00:00:00 2001
From: polymech <>
Date: Fri, 17 Jan 2025 22:06:54 +0100
Subject: [PATCH] Initial commit
---
.dockerignore | 7 +
.editorconfig | 14 +
.env.example | 3 +
.gitignore | 29 +
.markdownlint.json | 4 +
.npmignore | 4 +
.prettierrc | 11 +
.vscode/extensions.json | 3 +
.vscode/settings.json | 5 +
Dockerfile | 43 ++
LICENSE | 21 +
README.md | 154 +++++
astro.config.mjs | 56 ++
config/nginx/nginx.conf | 31 +
netlify.toml | 6 +
package.json | 73 +++
postcss.config.js | 6 +
public/.htaccess | 88 +++
public/images/404.png | Bin 0 -> 12009 bytes
public/images/aboutUs.png | Bin 0 -> 105347 bytes
public/images/avatar-sm.png | Bin 0 -> 4005 bytes
public/images/avatar.png | Bin 0 -> 2271 bytes
public/images/banner.png | Bin 0 -> 205937 bytes
public/images/call-to-action.png | Bin 0 -> 89765 bytes
public/images/category-1.png | Bin 0 -> 35028 bytes
public/images/category-2.png | Bin 0 -> 70639 bytes
public/images/favicon.png | Bin 0 -> 546 bytes
public/images/image-placeholder.png | Bin 0 -> 4881 bytes
public/images/logo-darkmode.png | Bin 0 -> 2415 bytes
public/images/logo.png | Bin 0 -> 2212 bytes
public/images/no-search-found copy.png | Bin 0 -> 10299 bytes
public/images/no-search-found.png | Bin 0 -> 10299 bytes
public/images/og-image.png | Bin 0 -> 103816 bytes
public/images/payment/bkash.png | Bin 0 -> 7884 bytes
public/images/payment/express.png | Bin 0 -> 1092 bytes
public/images/payment/mastercard.png | Bin 0 -> 925 bytes
public/images/payment/nagad.png | Bin 0 -> 5220 bytes
public/images/payment/upay.png | Bin 0 -> 3545 bytes
public/images/payment/visa.png | Bin 0 -> 1145 bytes
public/images/product-1.png | Bin 0 -> 60956 bytes
public/images/product_image404.jpg | Bin 0 -> 21918 bytes
public/images/quote.svg | 4 +
public/images/staff/staff.png | Bin 0 -> 10271 bytes
public/products.csv | 177 ++++++
public/robots.txt | 4 +
scripts/removeDarkmode.js | 96 +++
src/.gitignore | 0
src/cartStore.ts | 74 +++
src/config/config.json | 48 ++
src/config/menu.json | 59 ++
src/config/social.json | 24 +
src/config/theme.json | 44 ++
src/content.config.ts | 30 +
src/content/about/-index.md | 85 +++
src/content/contact/-index.md | 20 +
src/content/pages/privacy-policy.md | 59 ++
src/content/pages/terms-services.md | 97 +++
src/content/sections/call-to-action.md | 12 +
src/content/sections/payments-and-delivery.md | 17 +
src/layouts/Base.astro | 180 ++++++
src/layouts/components/AuthorCard.astro | 32 +
src/layouts/components/Breadcrumbs.astro | 43 ++
src/layouts/components/FeaturedProducts.astro | 81 +++
src/layouts/components/ImageMod.astro | 60 ++
src/layouts/components/Logo.astro | 63 ++
src/layouts/components/Pagination.astro | 134 ++++
src/layouts/components/Price.astro | 22 +
src/layouts/components/Share.astro | 61 ++
src/layouts/components/Social.astro | 28 +
src/layouts/components/ThemeSwitcher.astro | 88 +++
src/layouts/components/TwSizeIndicator.astro | 15 +
.../functional-components/Accordion.tsx | 41 ++
.../CollectionsSlider.tsx | 117 ++++
.../functional-components/HeroSlider.tsx | 64 ++
src/layouts/functional-components/NavUser.tsx | 103 +++
src/layouts/functional-components/Price.tsx | 34 +
.../functional-components/ProductFilters.tsx | 156 +++++
.../functional-components/ProductGrid.tsx | 213 +++++++
.../ProductLayoutViews.tsx | 50 ++
.../functional-components/ProductList.tsx | 219 +++++++
.../functional-components/SearchBar.tsx | 78 +++
.../functional-components/SignUpForm.tsx | 167 +++++
.../functional-components/SocialShare.tsx | 92 +++
.../functional-components/Testimonials.tsx | 129 ++++
.../functional-components/cart/AddToCart.tsx | 189 ++++++
.../functional-components/cart/Cart.astro | 12 +
.../functional-components/cart/CartModal.tsx | 205 ++++++
.../functional-components/cart/CloseCart.tsx | 12 +
.../cart/DeleteItemButton.tsx | 64 ++
.../cart/EditItemQuantityButton.tsx | 68 ++
.../functional-components/cart/OpenCart.tsx | 23 +
.../filter/DropdownMenu.tsx | 85 +++
.../filter/FilterDropdownItem.tsx | 75 +++
.../loadings/LoadingDots.tsx | 15 +
.../loadings/skeleton/SkeletonCards.tsx | 33 +
.../loadings/skeleton/SkeletonCategory.tsx | 19 +
.../loadings/skeleton/SkeletonDescription.tsx | 25 +
.../skeleton/SkeletonFeaturedProducts.tsx | 23 +
.../skeleton/SkeletonProductGallery.tsx | 65 ++
.../skeleton/SkeletonProductThumb.tsx | 26 +
.../loadings/skeleton/SkeletonProducts.tsx | 42 ++
.../product/PaymentSlider.tsx | 57 ++
.../product/ProductGallery.tsx | 174 +++++
.../product/ProductLayouts.tsx | 140 ++++
.../product/ShowTags.tsx | 50 ++
.../functional-components/product/Tabs.tsx | 60 ++
.../product/VariantDropDown.tsx | 84 +++
.../product/VariantSelector.tsx | 158 +++++
.../rangeSlider/RangeSlider.tsx | 85 +++
.../rangeSlider/rangeSlider.css | 74 +++
src/layouts/helpers/DynamicIcon.tsx | 40 ++
src/layouts/helpers/SearchResult.tsx | 260 ++++++++
src/layouts/partials/CallToAction.astro | 55 ++
src/layouts/partials/Footer.astro | 72 +++
src/layouts/partials/Header.astro | 391 ++++++++++++
src/layouts/partials/PageHeader.astro | 17 +
src/layouts/partials/PostSidebar.astro | 56 ++
src/layouts/partials/Testimonials.astro | 111 ++++
src/layouts/shortcodes/Accordion.tsx | 36 ++
src/layouts/shortcodes/Button.tsx | 30 +
src/layouts/shortcodes/Notice.tsx | 85 +++
src/layouts/shortcodes/Tab.tsx | 7 +
src/layouts/shortcodes/Tabs.tsx | 76 +++
src/layouts/shortcodes/Video.tsx | 32 +
src/layouts/shortcodes/Youtube.tsx | 24 +
src/lib/constants.ts | 51 ++
src/lib/contentParser.astro | 30 +
src/lib/shopify/fragments/cart.ts | 53 ++
src/lib/shopify/fragments/image.ts | 10 +
src/lib/shopify/fragments/product.ts | 88 +++
src/lib/shopify/fragments/seo.ts | 8 +
src/lib/shopify/index.ts | 599 ++++++++++++++++++
src/lib/shopify/mutations/cart.ts | 45 ++
src/lib/shopify/mutations/customer.ts | 46 ++
src/lib/shopify/queries/cart.ts | 10 +
src/lib/shopify/queries/collection.ts | 73 +++
src/lib/shopify/queries/menu.ts | 10 +
src/lib/shopify/queries/page.ts | 41 ++
src/lib/shopify/queries/product.ts | 69 ++
src/lib/shopify/queries/vendor.ts | 23 +
src/lib/shopify/types.ts | 344 ++++++++++
src/lib/taxonomyParser.astro | 33 +
src/lib/typeGuards.ts | 31 +
src/lib/utils.ts | 57 ++
src/lib/utils/bgImageMod.ts | 41 ++
src/lib/utils/cartActions.ts | 83 +++
src/lib/utils/dateFormat.ts | 12 +
src/lib/utils/readingTime.ts | 40 ++
src/lib/utils/similarItems.ts | 37 ++
src/lib/utils/sortFunctions.ts | 25 +
src/lib/utils/taxonomyFilter.ts | 8 +
src/lib/utils/textConverter.ts | 60 ++
src/pages/404.astro | 27 +
src/pages/[regular].astro | 46 ++
src/pages/about.astro | 203 ++++++
src/pages/api/login.ts | 57 ++
src/pages/api/products.json.ts | 32 +
src/pages/api/sign-up.ts | 58 ++
src/pages/contact.astro | 133 ++++
src/pages/index.astro | 58 ++
src/pages/login.astro | 147 +++++
src/pages/products/[slug].astro | 184 ++++++
src/pages/products/index.astro | 180 ++++++
src/pages/sign-up.astro | 8 +
src/styles/base.scss | 59 ++
src/styles/buttons.scss | 20 +
src/styles/components.scss | 217 +++++++
src/styles/main.scss | 42 ++
src/styles/navigation.scss | 93 +++
src/styles/search.scss | 96 +++
src/styles/utilities.scss | 24 +
src/types/index.d.ts | 11 +
src/types/pages/aboutCollection.ts | 65 ++
src/types/pages/contactCollection.ts | 23 +
src/types/sections/ctaSectionCollection.ts | 21 +
src/types/sections/paymentCollection.ts | 20 +
tailwind.config.js | 94 +++
tsconfig.json | 25 +
178 files changed, 10703 insertions(+)
create mode 100644 .dockerignore
create mode 100644 .editorconfig
create mode 100644 .env.example
create mode 100644 .gitignore
create mode 100644 .markdownlint.json
create mode 100644 .npmignore
create mode 100644 .prettierrc
create mode 100644 .vscode/extensions.json
create mode 100644 .vscode/settings.json
create mode 100644 Dockerfile
create mode 100644 LICENSE
create mode 100644 README.md
create mode 100644 astro.config.mjs
create mode 100644 config/nginx/nginx.conf
create mode 100644 netlify.toml
create mode 100644 package.json
create mode 100644 postcss.config.js
create mode 100644 public/.htaccess
create mode 100644 public/images/404.png
create mode 100644 public/images/aboutUs.png
create mode 100644 public/images/avatar-sm.png
create mode 100644 public/images/avatar.png
create mode 100644 public/images/banner.png
create mode 100644 public/images/call-to-action.png
create mode 100644 public/images/category-1.png
create mode 100644 public/images/category-2.png
create mode 100644 public/images/favicon.png
create mode 100644 public/images/image-placeholder.png
create mode 100644 public/images/logo-darkmode.png
create mode 100644 public/images/logo.png
create mode 100644 public/images/no-search-found copy.png
create mode 100644 public/images/no-search-found.png
create mode 100644 public/images/og-image.png
create mode 100644 public/images/payment/bkash.png
create mode 100644 public/images/payment/express.png
create mode 100644 public/images/payment/mastercard.png
create mode 100644 public/images/payment/nagad.png
create mode 100644 public/images/payment/upay.png
create mode 100644 public/images/payment/visa.png
create mode 100644 public/images/product-1.png
create mode 100644 public/images/product_image404.jpg
create mode 100644 public/images/quote.svg
create mode 100644 public/images/staff/staff.png
create mode 100644 public/products.csv
create mode 100644 public/robots.txt
create mode 100644 scripts/removeDarkmode.js
create mode 100644 src/.gitignore
create mode 100644 src/cartStore.ts
create mode 100644 src/config/config.json
create mode 100644 src/config/menu.json
create mode 100644 src/config/social.json
create mode 100644 src/config/theme.json
create mode 100644 src/content.config.ts
create mode 100644 src/content/about/-index.md
create mode 100644 src/content/contact/-index.md
create mode 100644 src/content/pages/privacy-policy.md
create mode 100644 src/content/pages/terms-services.md
create mode 100644 src/content/sections/call-to-action.md
create mode 100644 src/content/sections/payments-and-delivery.md
create mode 100644 src/layouts/Base.astro
create mode 100644 src/layouts/components/AuthorCard.astro
create mode 100644 src/layouts/components/Breadcrumbs.astro
create mode 100644 src/layouts/components/FeaturedProducts.astro
create mode 100644 src/layouts/components/ImageMod.astro
create mode 100644 src/layouts/components/Logo.astro
create mode 100644 src/layouts/components/Pagination.astro
create mode 100644 src/layouts/components/Price.astro
create mode 100644 src/layouts/components/Share.astro
create mode 100644 src/layouts/components/Social.astro
create mode 100644 src/layouts/components/ThemeSwitcher.astro
create mode 100644 src/layouts/components/TwSizeIndicator.astro
create mode 100644 src/layouts/functional-components/Accordion.tsx
create mode 100644 src/layouts/functional-components/CollectionsSlider.tsx
create mode 100644 src/layouts/functional-components/HeroSlider.tsx
create mode 100644 src/layouts/functional-components/NavUser.tsx
create mode 100644 src/layouts/functional-components/Price.tsx
create mode 100644 src/layouts/functional-components/ProductFilters.tsx
create mode 100644 src/layouts/functional-components/ProductGrid.tsx
create mode 100644 src/layouts/functional-components/ProductLayoutViews.tsx
create mode 100644 src/layouts/functional-components/ProductList.tsx
create mode 100644 src/layouts/functional-components/SearchBar.tsx
create mode 100644 src/layouts/functional-components/SignUpForm.tsx
create mode 100644 src/layouts/functional-components/SocialShare.tsx
create mode 100644 src/layouts/functional-components/Testimonials.tsx
create mode 100644 src/layouts/functional-components/cart/AddToCart.tsx
create mode 100644 src/layouts/functional-components/cart/Cart.astro
create mode 100644 src/layouts/functional-components/cart/CartModal.tsx
create mode 100644 src/layouts/functional-components/cart/CloseCart.tsx
create mode 100644 src/layouts/functional-components/cart/DeleteItemButton.tsx
create mode 100644 src/layouts/functional-components/cart/EditItemQuantityButton.tsx
create mode 100644 src/layouts/functional-components/cart/OpenCart.tsx
create mode 100644 src/layouts/functional-components/filter/DropdownMenu.tsx
create mode 100644 src/layouts/functional-components/filter/FilterDropdownItem.tsx
create mode 100644 src/layouts/functional-components/loadings/LoadingDots.tsx
create mode 100644 src/layouts/functional-components/loadings/skeleton/SkeletonCards.tsx
create mode 100644 src/layouts/functional-components/loadings/skeleton/SkeletonCategory.tsx
create mode 100644 src/layouts/functional-components/loadings/skeleton/SkeletonDescription.tsx
create mode 100644 src/layouts/functional-components/loadings/skeleton/SkeletonFeaturedProducts.tsx
create mode 100644 src/layouts/functional-components/loadings/skeleton/SkeletonProductGallery.tsx
create mode 100644 src/layouts/functional-components/loadings/skeleton/SkeletonProductThumb.tsx
create mode 100644 src/layouts/functional-components/loadings/skeleton/SkeletonProducts.tsx
create mode 100644 src/layouts/functional-components/product/PaymentSlider.tsx
create mode 100644 src/layouts/functional-components/product/ProductGallery.tsx
create mode 100644 src/layouts/functional-components/product/ProductLayouts.tsx
create mode 100644 src/layouts/functional-components/product/ShowTags.tsx
create mode 100644 src/layouts/functional-components/product/Tabs.tsx
create mode 100644 src/layouts/functional-components/product/VariantDropDown.tsx
create mode 100644 src/layouts/functional-components/product/VariantSelector.tsx
create mode 100644 src/layouts/functional-components/rangeSlider/RangeSlider.tsx
create mode 100644 src/layouts/functional-components/rangeSlider/rangeSlider.css
create mode 100644 src/layouts/helpers/DynamicIcon.tsx
create mode 100644 src/layouts/helpers/SearchResult.tsx
create mode 100644 src/layouts/partials/CallToAction.astro
create mode 100644 src/layouts/partials/Footer.astro
create mode 100644 src/layouts/partials/Header.astro
create mode 100644 src/layouts/partials/PageHeader.astro
create mode 100644 src/layouts/partials/PostSidebar.astro
create mode 100644 src/layouts/partials/Testimonials.astro
create mode 100644 src/layouts/shortcodes/Accordion.tsx
create mode 100644 src/layouts/shortcodes/Button.tsx
create mode 100644 src/layouts/shortcodes/Notice.tsx
create mode 100644 src/layouts/shortcodes/Tab.tsx
create mode 100644 src/layouts/shortcodes/Tabs.tsx
create mode 100644 src/layouts/shortcodes/Video.tsx
create mode 100644 src/layouts/shortcodes/Youtube.tsx
create mode 100644 src/lib/constants.ts
create mode 100644 src/lib/contentParser.astro
create mode 100644 src/lib/shopify/fragments/cart.ts
create mode 100644 src/lib/shopify/fragments/image.ts
create mode 100644 src/lib/shopify/fragments/product.ts
create mode 100644 src/lib/shopify/fragments/seo.ts
create mode 100644 src/lib/shopify/index.ts
create mode 100644 src/lib/shopify/mutations/cart.ts
create mode 100644 src/lib/shopify/mutations/customer.ts
create mode 100644 src/lib/shopify/queries/cart.ts
create mode 100644 src/lib/shopify/queries/collection.ts
create mode 100644 src/lib/shopify/queries/menu.ts
create mode 100644 src/lib/shopify/queries/page.ts
create mode 100644 src/lib/shopify/queries/product.ts
create mode 100644 src/lib/shopify/queries/vendor.ts
create mode 100644 src/lib/shopify/types.ts
create mode 100644 src/lib/taxonomyParser.astro
create mode 100644 src/lib/typeGuards.ts
create mode 100644 src/lib/utils.ts
create mode 100644 src/lib/utils/bgImageMod.ts
create mode 100644 src/lib/utils/cartActions.ts
create mode 100644 src/lib/utils/dateFormat.ts
create mode 100644 src/lib/utils/readingTime.ts
create mode 100644 src/lib/utils/similarItems.ts
create mode 100644 src/lib/utils/sortFunctions.ts
create mode 100644 src/lib/utils/taxonomyFilter.ts
create mode 100644 src/lib/utils/textConverter.ts
create mode 100644 src/pages/404.astro
create mode 100644 src/pages/[regular].astro
create mode 100644 src/pages/about.astro
create mode 100644 src/pages/api/login.ts
create mode 100644 src/pages/api/products.json.ts
create mode 100644 src/pages/api/sign-up.ts
create mode 100644 src/pages/contact.astro
create mode 100644 src/pages/index.astro
create mode 100644 src/pages/login.astro
create mode 100644 src/pages/products/[slug].astro
create mode 100644 src/pages/products/index.astro
create mode 100644 src/pages/sign-up.astro
create mode 100644 src/styles/base.scss
create mode 100644 src/styles/buttons.scss
create mode 100644 src/styles/components.scss
create mode 100644 src/styles/main.scss
create mode 100644 src/styles/navigation.scss
create mode 100644 src/styles/search.scss
create mode 100644 src/styles/utilities.scss
create mode 100644 src/types/index.d.ts
create mode 100644 src/types/pages/aboutCollection.ts
create mode 100644 src/types/pages/contactCollection.ts
create mode 100644 src/types/sections/ctaSectionCollection.ts
create mode 100644 src/types/sections/paymentCollection.ts
create mode 100644 tailwind.config.js
create mode 100644 tsconfig.json
diff --git a/.dockerignore b/.dockerignore
new file mode 100644
index 0000000..72e9aa4
--- /dev/null
+++ b/.dockerignore
@@ -0,0 +1,7 @@
+Dockerfile
+.dockerignore
+node_modules
+npm-debug.log
+README.md
+.next
+.git
\ No newline at end of file
diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 0000000..896e0d7
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,14 @@
+; https://editorconfig.org
+
+root = true
+
+[*]
+charset = utf-8
+end_of_line = lf
+indent_size = 2
+indent_style = space
+trim_trailing_whitespace = true
+insert_final_newline = true
+
+[*.md]
+trim_trailing_whitespace = false
\ No newline at end of file
diff --git a/.env.example b/.env.example
new file mode 100644
index 0000000..015daaa
--- /dev/null
+++ b/.env.example
@@ -0,0 +1,3 @@
+PUBLIC_SHOPIFY_API_SECRET_KEY=""
+PUBLIC_SHOPIFY_STOREFRONT_ACCESS_TOKEN=""
+PUBLIC_SHOPIFY_STORE_DOMAIN="[your-shopify-store-subdomain].myshopify.com"
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..6e15edb
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,29 @@
+# build output
+dist/
+.output/
+.json/
+
+# dependencies
+node_modules/
+
+# logs
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+yarn.lock
+package-lock.json
+
+
+# environment variables
+.env
+.env.production
+
+# macOS-specific files
+.DS_Store
+
+# ignore .astro directory
+.astro
+
+.netlify
+.vercel
diff --git a/.markdownlint.json b/.markdownlint.json
new file mode 100644
index 0000000..ae399b8
--- /dev/null
+++ b/.markdownlint.json
@@ -0,0 +1,4 @@
+{
+ "MD033": false,
+ "MD013": false
+}
diff --git a/.npmignore b/.npmignore
new file mode 100644
index 0000000..4c9adda
--- /dev/null
+++ b/.npmignore
@@ -0,0 +1,4 @@
+./docs
+./scripts
+./tests
+./incoming
\ No newline at end of file
diff --git a/.prettierrc b/.prettierrc
new file mode 100644
index 0000000..4f634ae
--- /dev/null
+++ b/.prettierrc
@@ -0,0 +1,11 @@
+{
+ "plugins": ["prettier-plugin-astro"],
+ "overrides": [
+ {
+ "files": ["*.astro"],
+ "options": {
+ "parser": "astro"
+ }
+ }
+ ]
+}
diff --git a/.vscode/extensions.json b/.vscode/extensions.json
new file mode 100644
index 0000000..ea97dc4
--- /dev/null
+++ b/.vscode/extensions.json
@@ -0,0 +1,3 @@
+{
+ "recommendations": ["astro-build.astro-vscode","bradlc.vscode-tailwindcss"]
+}
diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 0000000..766f97d
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,5 @@
+{
+ "files.associations": {
+ "*.mdx": "markdown"
+ }
+}
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000..33d00cb
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,43 @@
+ARG INSTALLER=yarn
+
+FROM node:20-alpine AS base
+
+# Install dependencies only when needed
+FROM base AS deps
+ARG INSTALLER
+
+# Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed.
+RUN apk add --no-cache libc6-compat
+WORKDIR /app
+
+# Install dependencies based on the preferred package manager
+COPY package.json yarn.lock* package-lock.json* pnpm-lock.yaml* ./
+RUN \
+ if [ "${INSTALLER}" == "yarn" ]; then yarn --frozen-lockfile; \
+ elif [ "${INSTALLER}" == "npm" ]; then npm ci; \
+ elif [ "${INSTALLER}" == "pnpm" ]; then yarn global add pnpm && pnpm i --frozen-lockfile; \
+ else echo "Valid installer not set." && exit 1; \
+ fi
+
+
+# Rebuild the source code only when needed
+FROM base AS builder
+WORKDIR /app
+COPY --from=deps /app/node_modules ./node_modules
+COPY . .
+
+# RUN chmod u+x ./installer && ./installer
+ARG INSTALLER
+RUN \
+ if [ "${INSTALLER}" == "yarn" ]; then yarn build; \
+ elif [ "${INSTALLER}" == "npm" ]; then npm run build; \
+ elif [ "${INSTALLER}" == "pnpm" ]; then pnpm run build; \
+ else echo "Valid installer not set." && exit 1; \
+ fi
+
+# Production image, copy all the files and run nginx
+FROM nginx:alpine AS runner
+COPY ./config/nginx/nginx.conf /etc/nginx/nginx.conf
+COPY --from=builder /app/dist /usr/share/nginx/html
+
+WORKDIR /usr/share/nginx/html
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..1dba187
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2024 Themefisher
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..7327dcd
--- /dev/null
+++ b/README.md
@@ -0,0 +1,154 @@
+
Astrofront | AstroJs + Shopify + Tailwind CSS + TypeScript Starter and Boilerplate
+
+A free, production-ready astro.js template powered by Tailwind CSS and TypeScript, specifically designed for Shopify. Utilizes the Shopify Storefront API through GraphQL and providing everything you need to jumpstart your Astro project and save valuable time.
+
+Made with โฅ by Themefisher
+ If you find this project useful, please give it a โญ to show your support.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+## ๐ Key Features
+
+- ๐ Dynamic Products from Shopify Storefront API
+- ๐ธ Checkout and Payments with Shopify
+- ๐ Automatic Light/Dark Mode
+- ๐ Fetching and Caching Paradigms
+- ๐ Server Actions for Mutations
+- ๐ User Authentication
+- ๐งฉ Similar Products Suggestions
+- ๐ Search, Sort, Different Views Functionality
+- ๐ท๏ธ Tags & Categories & Vendors & Price Range & Product Variants Functionality
+- ๐ผ๏ธ Single Product Image Zoom, Hover Effect, Slider
+- ๐ Cart & Easy editing options for cart items
+- ๐ Product Description on Multiple Tabs
+- ๐ Netlify Setting Pre-configured
+- ๐ Support Contact Form
+- ๐ฑ Fully Responsive
+- ๐ Dynamic Home Banner Slider
+- ๐ Write and Update Content in Markdown / MDX
+- โ Infinite Product Load on Scrolling
+
+### ๐ 10+ Pre-designed Pages
+
+- ๐ Homepage
+- ๐ค About
+- ๐ Contact
+- ๐๏ธ Products
+- ๐ฆ Product Single
+- ๐ก Terms of services
+- ๐ Privacy Policy
+- ๐ Login
+- ๐ Register
+- ๐ซ Custom 404
+
+## ๐ Getting Started
+
+### ๐ฆ Dependencies
+
+- shopify
+- astro 5.1+
+- node v20.10+
+- npm v10.2+
+- tailwind v3.4+
+
+
+
+## ๐ Retrieve Shopify Token & Add Demo Products
+
+- To get the tokens needed, create a Shopify partner account.
+ 
+
+- Now go to 'stores' and select 'Add store.' Create a development store using the option 'Create development store'.
+ 
+
+- Click on import products.
+ 
+
+- Locate the 'products' CSV file in the public folder of the repository and upload it for demo products.
+ 
+
+- On the admin dashboard, click on โSettingsโ at the bottom of the left sidebar.
+ 
+
+- On the Settings page, click on โApps and sales channelsโ on the left sidebar.
+ 
+
+- In the Apps and sales channels page that opens, click on โDevelop appsโ on the top right.
+ 
+
+- Now, on the App development page that opens, click on โCreate an appโ.
+ 
+
+- A โCreate an appโ popup opens. Fill in any name in the โApp Nameโ text box. In the App Developer text box, your name and email id is automatically fetched. Else type in the same email id you used while signing up for the Shopify store.
+ 
+
+- Next, click on โConfigureโ in the Storefront API integration section.
+ 
+
+- In the Storefront API access scopes, select and check all the boxes and click on โSaveโ and then โInstall appโ.
+ 
+
+- Navigate to the 'API credentials' tab and locate three essential pieces of information. Subsequently, update your `.env` file by replacing the placeholder quotes("") in the `.env.example` file with your Shopify credentials.
+ 
+
+- When adding your product, use the same alt title for images with the same color. This helps the first image appear as the color variant in the selector.
+ 
+ 
+
+- We have the option to create additional collections for products.
+ 
+
+### ๐ Install Dependencies
+
+```bash
+npm install
+```
+
+### ๐ Development Command
+
+```bash
+npm run dev
+```
+
+### ๐ Build Command
+
+```bash
+npm run build
+```
+
+
+
+## ๐ Reporting Issues
+
+We use GitHub Issues as the official bug tracker for this Template. Please Search [existing issues](https://github.com/themefisher/astrofront/issues). Itโs possible someone has already reported the same problem.
+If your problem or idea has not been addressed yet, feel free to [open a new issue](https://github.com/themefisher/astrofront/issues).
+
+
+
+## ๐ License
+
+Copyright (c) 2024 - Present, Designed & Developed by [Themefisher](https://themefisher.com/)
+
+**Code License:** Released under the [MIT](https://github.com/themefisher/astrofront/blob/main/LICENSE) license.
+
+**Image license:** The images are only for demonstration purposes. They have their license, we don't have permission to share those images.
+
+## ๐ป Need Custom Development Services?
+
+If you need a custom theme, theme customization, or complete website development services from scratch you can [Hire Us](https://themefisher.com/).
diff --git a/astro.config.mjs b/astro.config.mjs
new file mode 100644
index 0000000..37bd1b5
--- /dev/null
+++ b/astro.config.mjs
@@ -0,0 +1,56 @@
+import mdx from "@astrojs/mdx";
+import react from "@astrojs/react";
+import sitemap from "@astrojs/sitemap";
+import tailwind from "@astrojs/tailwind";
+import AutoImport from "astro-auto-import";
+import { defineConfig } from "astro/config";
+import remarkCollapse from "remark-collapse";
+import remarkToc from "remark-toc";
+import config from "./src/config/config.json";
+
+import vercel from "@astrojs/vercel";
+
+// https://astro.build/config
+export default defineConfig({
+ site: config.site.base_url ? config.site.base_url : "http://examplesite.com",
+ base: config.site.base_path ? config.site.base_path : "/",
+ trailingSlash: config.site.trailing_slash ? "always" : "never",
+ output: "server",
+
+ integrations: [
+ react(),
+ sitemap(),
+ tailwind({ applyBaseStyles: false }),
+ AutoImport({
+ imports: [
+ "@/shortcodes/Button",
+ "@/shortcodes/Accordion",
+ "@/shortcodes/Notice",
+ "@/shortcodes/Video",
+ "@/shortcodes/Youtube",
+ "@/shortcodes/Tabs",
+ "@/shortcodes/Tab",
+ ],
+ }),
+ mdx(),
+ ],
+
+ markdown: {
+ remarkPlugins: [
+ remarkToc,
+ [
+ remarkCollapse,
+ {
+ test: "Table of contents",
+ },
+ ],
+ ],
+ shikiConfig: {
+ theme: "one-dark-pro",
+ wrap: true,
+ },
+ extendDefaultPlugins: true,
+ },
+
+ adapter: vercel(),
+});
\ No newline at end of file
diff --git a/config/nginx/nginx.conf b/config/nginx/nginx.conf
new file mode 100644
index 0000000..6f810a3
--- /dev/null
+++ b/config/nginx/nginx.conf
@@ -0,0 +1,31 @@
+worker_processes 1;
+
+events {
+ worker_connections 1024;
+}
+
+http {
+ server {
+ listen 80;
+ server_name _;
+
+ root /usr/share/nginx/html;
+ index index.html index.htm;
+ include /etc/nginx/mime.types;
+
+ gzip on;
+ gzip_min_length 1000;
+ gzip_proxied expired no-cache no-store private auth;
+ gzip_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript;
+
+ error_page 404 /404.html;
+ location = /404.html {
+ root /usr/share/nginx/html;
+ internal;
+ }
+
+ location / {
+ try_files $uri ${uri}.html $uri/index.html =404;
+ }
+ }
+}
diff --git a/netlify.toml b/netlify.toml
new file mode 100644
index 0000000..4b04bea
--- /dev/null
+++ b/netlify.toml
@@ -0,0 +1,6 @@
+[build]
+publish = "dist"
+command = "yarn build"
+
+[build.environment]
+NODE_VERSION = "20"
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..e27ea3c
--- /dev/null
+++ b/package.json
@@ -0,0 +1,73 @@
+{
+ "name": "Astrofront",
+ "version": "2.0.0",
+ "description": "Astro and Tailwindcss boilerplate",
+ "author": "Themefisher",
+ "license": "MIT",
+ "packageManager": "yarn@1.22.19",
+ "scripts": {
+ "dev": "astro dev",
+ "build": "astro build",
+ "preview": "astro preview",
+ "format": "prettier -w ./src",
+ "check": "astro check",
+ "remove-darkmode": "node scripts/removeDarkmode.js && yarn format"
+ },
+ "dependencies": {
+ "@astrojs/check": "^0.9.4",
+ "@astrojs/mdx": "4.0.5",
+ "@astrojs/netlify": "6.0.1",
+ "@astrojs/node": "^9.0.0",
+ "@astrojs/react": "4.1.3",
+ "@astrojs/rss": "4.0.11",
+ "@astrojs/sitemap": "^3.2.1",
+ "@astrojs/tailwind": "5.1.4",
+ "@astrojs/vercel": "^8.0.1",
+ "@nanostores/react": "^0.8.4",
+ "astro": "5.1.5",
+ "astro-auto-import": "^0.4.4",
+ "astro-font": "^0.1.81",
+ "date-fns": "^4.1.0",
+ "github-slugger": "^2.0.0",
+ "gray-matter": "^4.0.3",
+ "js-cookie": "^3.0.5",
+ "marked": "^15.0.6",
+ "multi-range-slider-react": "^2.0.7",
+ "nanostores": "^0.11.3",
+ "prettier-plugin-astro": "^0.14.1",
+ "prettier-plugin-tailwindcss": "^0.6.9",
+ "prop-types": "^15.8.1",
+ "react": "^19.0.0",
+ "react-collapsed": "^4.2.0",
+ "react-dom": "^19.0.0",
+ "react-gravatar": "^2.6.3",
+ "react-icons": "^5.4.0",
+ "react-inner-image-zoom": "^3.0.2",
+ "react-lite-youtube-embed": "^2.4.0",
+ "remark-collapse": "^0.1.2",
+ "remark-toc": "^9.0.0",
+ "swiper": "^11.2.1"
+ },
+ "devDependencies": {
+ "@tailwindcss/forms": "^0.5.10",
+ "@tailwindcss/typography": "^0.5.16",
+ "@types/js-cookie": "^3.0.6",
+ "@types/marked": "^5.0.2",
+ "@types/node": "22.10.5",
+ "@types/react": "19.0.4",
+ "@types/react-dom": "19.0.2",
+ "@types/react-gravatar": "^2.6.14",
+ "@types/react-inner-image-zoom": "^3.0.3",
+ "autoprefixer": "^10.4.20",
+ "eslint": "^9.18.0",
+ "postcss": "^8.4.49",
+ "prettier": "^3.4.2",
+ "prettier-plugin-astro": "^0.14.1",
+ "prettier-plugin-tailwindcss": "^0.6.9",
+ "sass": "^1.83.1",
+ "sharp": "0.33.5",
+ "tailwind-bootstrap-grid": "^5.1.0",
+ "tailwindcss": "^3.4.17",
+ "typescript": "^5.7.3"
+ }
+}
diff --git a/postcss.config.js b/postcss.config.js
new file mode 100644
index 0000000..12a703d
--- /dev/null
+++ b/postcss.config.js
@@ -0,0 +1,6 @@
+module.exports = {
+ plugins: {
+ tailwindcss: {},
+ autoprefixer: {},
+ },
+};
diff --git a/public/.htaccess b/public/.htaccess
new file mode 100644
index 0000000..cf0c6ba
--- /dev/null
+++ b/public/.htaccess
@@ -0,0 +1,88 @@
+##### Optimize default expiration time - BEGIN
+
+
+ ## Enable expiration control
+ ExpiresActive On
+
+ ## CSS and JS expiration: 1 week after request
+ ExpiresByType text/css "now plus 1 week"
+ ExpiresByType application/javascript "now plus 1 week"
+ ExpiresByType application/x-javascript "now plus 1 week"
+
+ ## Image files expiration: 1 month after request
+ ExpiresByType image/bmp "now plus 1 month"
+ ExpiresByType image/gif "now plus 1 month"
+ ExpiresByType image/jpeg "now plus 1 month"
+ ExpiresByType image/webp "now plus 1 month"
+ ExpiresByType image/jp2 "now plus 1 month"
+ ExpiresByType image/pipeg "now plus 1 month"
+ ExpiresByType image/png "now plus 1 month"
+ ExpiresByType image/svg+xml "now plus 1 month"
+ ExpiresByType image/tiff "now plus 1 month"
+ ExpiresByType image/x-icon "now plus 1 month"
+ ExpiresByType image/ico "now plus 1 month"
+ ExpiresByType image/icon "now plus 1 month"
+ ExpiresByType text/ico "now plus 1 month"
+ ExpiresByType application/ico "now plus 1 month"
+ ExpiresByType image/vnd.wap.wbmp "now plus 1 month"
+
+ ## Font files expiration: 1 month after request
+ ExpiresByType application/x-font-ttf "now plus 1 month"
+ ExpiresByType application/x-font-opentype "now plus 1 month"
+ ExpiresByType application/x-font-woff "now plus 1 month"
+ ExpiresByType font/woff2 "now plus 1 month"
+ ExpiresByType image/svg+xml "now plus 1 month"
+
+ ## Audio files expiration: 1 month after request
+ ExpiresByType audio/ogg "now plus 1 month"
+ ExpiresByType application/ogg "now plus 1 month"
+ ExpiresByType audio/basic "now plus 1 month"
+ ExpiresByType audio/mid "now plus 1 month"
+ ExpiresByType audio/midi "now plus 1 month"
+ ExpiresByType audio/mpeg "now plus 1 month"
+ ExpiresByType audio/mp3 "now plus 1 month"
+ ExpiresByType audio/x-aiff "now plus 1 month"
+ ExpiresByType audio/x-mpegurl "now plus 1 month"
+ ExpiresByType audio/x-pn-realaudio "now plus 1 month"
+ ExpiresByType audio/x-wav "now plus 1 month"
+
+ ## Movie files expiration: 1 month after request
+ ExpiresByType application/x-shockwave-flash "now plus 1 month"
+ ExpiresByType x-world/x-vrml "now plus 1 month"
+ ExpiresByType video/x-msvideo "now plus 1 month"
+ ExpiresByType video/mpeg "now plus 1 month"
+ ExpiresByType video/mp4 "now plus 1 month"
+ ExpiresByType video/quicktime "now plus 1 month"
+ ExpiresByType video/x-la-asf "now plus 1 month"
+ ExpiresByType video/x-ms-asf "now plus 1 month"
+
+##### Optimize default expiration time - END
+
+##### 1 Month for most static resources
+
+ Header set Cache-Control "max-age=2592000, public"
+
+
+##### Enable gzip compression for resources
+
+ mod_gzip_on Yes
+ mod_gzip_dechunk Yes
+ mod_gzip_item_include file .(html?|txt|css|js|php)$
+ mod_gzip_item_include handler ^cgi-script$
+ mod_gzip_item_include mime ^text/.*
+ mod_gzip_item_include mime ^application/x-javascript.*
+ mod_gzip_item_exclude mime ^image/.*
+ mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
+
+
+##### Or, compress certain file types by extension:
+
+ SetOutputFilter DEFLATE
+
+
+##### Set Header Vary: Accept-Encoding
+
+
+ Header append Vary: Accept-Encoding
+
+
\ No newline at end of file
diff --git a/public/images/404.png b/public/images/404.png
new file mode 100644
index 0000000000000000000000000000000000000000..cefbfb3074faa57bc5b1a7717388a59085bf30d8
GIT binary patch
literal 12009
zcmch7Wm_Cgur>~hyDSi#;K73=5ZpC^2X}XO4~x46heda0p=FegF*xxTdTy>jGaOCs}P*
zI5-S~e;;_b%xqHNM|f9t8F9Gk35p}&0m)KKNem9IE*|5_7#R+ZBS214?28xtY0hdK
z`QY?mG*60$>&<{5jaW!L3R{)2p&$1XTuJWF7Y;wlzaTr&;G(xqH%MuYI~c<%Mvw3@
zOeENyN$@bl!wsK(D=f0~sfjRwNL)i>5fZx71Ht$fRX|!^
z^;{#;RWxxo^Cak_m>Vqi-)vS&03qQ=iIM&h+7nip`SC8m}D4t
z$&eQ1q=lh@}m
zP8xM1Re=9S3-@S>_<$(ZB_ttGHg)bJF(eP2vVymHFxEk|vPRbyjtDv0
zFJGA;I^sZ#b@9s&LF~RRISZ6cTotivT>E6gslMeSGbGO(TA6BtvFoZgy9tZ*s0hW|%M!1hcCllsf=7?#n?1kpB~*vd4DtnY;D4$AGZ)w;hG3dY
zFTnXEzf{k`(iprex8yOT-YmHaVbN$Z=+ZcV)#c!Dv7ABzBUNV;yU;cR_4ghwnYd
z_2>c`un<~Wng8o_p$uCQ7GhRybrLjz$5@}ag?cTNR~(oL*c2-C*jrrYU9YU;Oy1Ga
zcin!VUQLKT!|3k#^}!^MV+1s&n#g+xerCAFdMttR$LhaG7yEuwp~I%>4e6zq%KOuU+Ki+sy=oD3dC4h>k_e*k~s0D03=u**y!KnBnO
zQ?oFxxLZBsY?r4GDN9)b5&peGhe-D#jn3`6bt%w~j#8f@4@31rPr01*30yRpcr)M5
zsgInj>b=nn1{TfnY!c%nbio8nN`nW+Iq4^l_dUL3*pVW!mr~VY>d-}bm=IW_9}0?Ej}@xDmyoeCidd)^s?UgLOd^jW
zGn!~F2A#$onj7Gr$43MPgUHQ$IFj=v!2`>@fVOGK5NQd?k^j*anTQDXxWnD)wADkj
z>{L)?dv!QXS3N#w!o&-v)+ymn{`5_v5vELBxVObZAYoc%%l#()9K)KO5IoNL&x`4&
zihtGmz9-EV4Gb{t=(c5yn|$uN%OQr(xN^2`O1xtGcoB=
zDA-AYek2sTTyFQvLQ(+r3rDA8V0WaGlvJ{wGK(i#Uv@I>NP%-@BS(*AAh2E&iL5eIdA`Z(iNnNGAqk?ePG3gd?1FZQTn}R)x#rEuzP-%MN7wQm!vhf
zIri+L*&UPA!PrKUUXi-^!!0R|jTA0YeQ0Tzw$nzLNa`?U2bBOJEb>JnLk5x}nyVwj
zzMi8A@+7*r>`$M^F%9f7Qu4QJ6hvcH&GoP`I1$tSPf%*9TCqhM&ED20a0DCC#aILl
zsp2^)X~Kn$y}Z0s=tvhttr{Y(Cp4Csd=_ww|JZF<58wj!zpAmz-tdMa9IUFqAM=MWWVS
z>CClJ?*kL>1R4+(T4DI{b<#u|$$TLWgt6Z{*)I=W?&Sc8X~{qW!#&$jrL7*ddx
z;~6dh*i0pu841Cb)GKaXp644~?7L%21)md1TkJ1CNNRq0sBR)ZAatvS6_uBB{xt_2
zi3FH6=*WiwZEVhf1*+5BdT(zB%DkYIqi*MYM8aYq%K!F14o8X}`x&1d^v~PqW_(Od(Qz^jNA<0La+h8(q{#rQPYGhxs&S*KMc-H;KacRdWgy2c#BKoPsgkk`FRYQWx
zG8u4j-hB8ZZk2MDoI_&ZwG~KDy`YNDV-r=l*A9dR4`6^XIx{e9bTiWHf7`fatm1Yy
zH=KnkkIygWksts(QYE05c9;yxhuMGyWLP_4!;@YQ7hAI1cybgFMYLF69p!G;>ro*9
z4ta2yKW70_d7m1XHmrNMttaI}p{;S!7<5uC_|pq~ZJy@_MSnGhO!KF_M@HB$=*m#
zw@}zY(Z^8hU*%PC3>*;yp|Y(2ZwXV1p@;iJun{?0dwme!g(1Ct(3Z;@UT-;M-2<%LeG6Vg?F(POD@u7N>3KL&IhYak1
znyTdpBuGhrG#x}ReN4&7
z0uZn6x9kiv2@{Ocqhw=~R`7)2w?EyLOxUA0=!4sp+o$YlQBhG%K_SiQy4K{sq(|4S
zfivJDtoLBzB?bg-mcRmL)Lf(rs8dY8fVCIoIsj&1YnG~cy;Fn?AR*jwrYuFKo_xl0
zR^6ebUX2m%DMd(yI9RM6k>{a7-r*t>q7Qw9=SKdU&IYRdFO%R`s
zGFV&`=1x-;6kR@!XI%v1ZUQQTff+bEtUkI26B{!S0ACU(LY%a#_@vVU%IP2n@Yo!R
z8ZjPSC{cT=vZ`1Ze4a*xZ*Z*fe<+p
zM<89DT$3f*lM#aPIY4f67atITF_LsM2nkAYX~2C|h`5A$pmF-br{s*4pelHA69CU-
zoCID9GGKYr
z*+n4$95aFV`C1kH)2jIXBMmvC#YJo*|L5ewJvd-b-jP#INAT*OqjNX?QXS%&Qx15`
z<)thXq!dgQ;x5e#5H=d_0=xKQ@ty7dXwH$~zWixL`=1M+-jd3qPNDP0
zOnoo6u^0b(oH^EGzO_0!fR1G!$@y6rST@->Zoo!RK!8*hw{b1T91A#UZCqpwULU8O
zC0VF30E;XOVWr3JfT18Husb(yJ)R_(y>zei(h7wn#O{3-cse4b%)jC2hY|V0(``bxEbZmq!4T?FV*#60*hY2
zrwbK7)P1ZFx_A(UWK4v`022jv$b2UhfI&fQUBq~qoF%Q0{O37DP~1xxlUfFhHJxOe
zH1TRwlS?NKm^Ux>AJ5qpu*3S0ThG=j$=goNORxN6N=p-SkxzR_RkmXJJE()R-y?r)
z7Z(5KBiK3*_6aO0accDuy9knR?z^&C!#-Ze29iwm@bskN*V&wjn>%&FXYu0-`GipG
z0uQ#Ov_6Qx>sz
zk19AQL2$v~@;9W9tlSW5xne4(FCO&i&$&K}w`U-c^NRW}0Ag{T4SQQO4G=LT>
zJA0dS2PHB}iI6_r8u7^q#}CzrldgAHLJ^n!#4m1zlvVw$F}bdf=IYCsaeKhodPfWQ
zd&%#gK%r%BOiur4mPdJ~ZfPSs+AVnc)t{Vw~pz+r`Z|2KgG0)-q!
zn7uN3RXNL-H$5y@Jn2aC?a~LKD5b{?tiMe`lDd$VJ&R7(V5ZTlW?sdjJ}vRwun7tW
zN^Vs+^je*mb+q-RXgSH{i=y4+t-jM44JB40H8tTd5dWjFRI(UBznP=9(~u;(T?_BC
z0dq9k7uvcE)9ccvPZP${t|Xun=axEw_D|`BPv58C#-*j|4kacKAtp{A-&V_gy2)HmK&gwI
z2Rse+D0J$#TbCK-$@%%_oYGFTEgzfW+B{WegjQa<`c?uhX|1=p(M7pI_OY)Ms
z(6gc@ds-voahF3+4n4b(;i<7g`c$5&sE~-s(igYec_a8z(ha4B6uhADG9|`J#On1N
z4)R9Sa6o{H){Qun87W6pRaF@tzqZmkw;87G$!0F}iS
zv!GG8HMrhdVZVcZ26;`RKN5g)J@Xg$JZ5dP{;_`dM|=tkn`HMw_Pb;K?`*ijTFmBJuwzK!cqE=D1%a>%$wJvk(6PkR&&+VLeRNH#gX@osm>+D#(X?5h;Vo|{DAtbdVc#Gh2z2nyzG%2BtW1`c
z>eKB2=n%^haw{-JyRp75_3-RZW6T-cs@_QPwEoDFw6QIG!^0y>k_WL#zqSIz4b0%&%KF2Z6mP5R(TIigoACCbV_|wOUs~;=90U(
ztZ6L<1LjUR4%Lshp$XFYQ`AK?Y-I^_q&jgP`cIo)A4;g{i)a9At#Pq(Uew>WKpOEe
zWnNAl13Q}i-iY(V1BQbw0t2b^nM`TyP5aasLwRu^C^T4KYd`c{_xQ!~a~TXW5s35S
z0fL%vJ=Z#QTwAr2YlF2C%41SPHo$^rQbz2A%4$CXN@kB%3CTh$vHyvpxgap{FQ8UG
zuXlK6WGf7zLjlSD^rZ*YA^G4TqpPB3GKK*s0aG~=9Njd+})xAs{Xser&g>)>(8XOB{neb~dD
zwbRny?v&t)FJJ?9u*3IqG!ea&JGEamaQ2w#>2-%D+-TS}nWW__h$-8KHkmF!P)LHJ5(>W)w>@=td_t6n94c
zQ5?;heF4j959kVml}cwT+C^~@r1?b$WYK7AdX3(Do1q85eAA-2
z@Wo}10W0Wn`40vd8KX@MVvbjot`H6esOgCb!J$Zq>&$6vk0GGAI=62+MxV@R)HKm(
zphj^hG-8)evA>LJ8@jrlEe2f#5|UlMDzp>eQvv%OVp{c-<<)sJqad+vFfIS+9{E-X
zx2u&aL(yTg!!w@10dEEmFyaU|jXE+M36IkB_=SwCEjhtK957jCSZeTJBd@HyT!BSs
zW2*FpftXdk
zSwb3QOdh@|6@4yy+QJExJ$Si{53JlQJy13PvS%b){^Btunjqio5h1_&rtQ*-oJYw$
zz5QgKsA1k~*SY_Bw#dv&XHIYd(@fpkgpqD-tT#ELgJo^86zqj!Z1vk`jrqA#au`r1
zrLHamn(SCRm@=_C*w%F2tw;#MuPh&_k@xza`QJ>-ba@Bf{XNJdsp-6u_sLydo(z0(
z4HoTv{=2&QqUpCozR6^48ErTAyxjRtcei)ne_>~6^5gKr@7dpzwe#l>L-7Y57TwJD
z^8-fV82-z*$BPxVi`5$9xfv7aSnoc##v?$?IZ5+p-i_2N;^fDbmuBG)yaEhL9jm33
z$Ud?cAeZuQw|M55x3yH_iFE#!`2U7I3dOyJ557Ni^>e7}?l!#PzRAuNTE59xzRnGx
z64*q5-Q~=JysGn3@1E1U-n}k+*+)%Y>@2k$C!*8F?W6}3qrZN>FMSb;J2H)Ot?f6q
zbB^m0&H3stTCzH_Sz%&RzQ{n?+gtq$sm7Kj?~pJ3kD!3ae9a5)pxU%mzt)i{!p#Q?
zg~M6-a|s{OyTFUDRA2s3Pd-06a>~n(#+;UhwS}=C
zNq>znvJjRsl{6eITZ;rrCX*?1ggwvTY9?37-sq6c!*uX8{`n&E=HQ84IT0tz=1AZ%
z__VT_bu(Oac2hHxO5yGz@AauPG}aHcx*1mW+sV3y=+CN=g1;zL^Zs4xYWjI^d|OqU
z{xUx_@4r^|@xLuA)h8Y8UTG)q=bM4o6w4Yb+dT6sitA_lr3M7VxnApgkKZ^N6I>}CA_FPclO7FzAqH~C|P|X=tYzjRN6F3kcIdyn68)-@l`^BFCc{sqx(rMqR
zodc{G)c*ZDWk>F63oP{n<9>Bx_I;w74{z@&W@_+q=&Bk%-qQAK>w24M%jDVerHk$#EDq?&)w1L!Z(CP&Ry@gFg=f(V)nPeo^*s6aCJ4f_BL(#%
z+hwP04Se^ON4dRuN3R?jdcApVvP`d!i`{7@YRNgjN`GmNEk5us7X~bPcYBQGwN1JN
zT8fn4xjuX#d>xBJCn!9F`8d3Dux#sUo8-=7R-`A)=>9Vf<8EpA@~}peQPx(|u=wZr
zm>;spO~d7G_zgotbl+pY`7ppPVDl8K8J^q;*2C2>xH7P&JoeIw7q*zJHSg>4Tb$GZ
zJrA^b_(PFSG<89r0F7{o%nlLaV0KjDWiX8$g^VdfnHbjg>WV%fGt-Yi8K4d+<|G6dDUshggqBCmo5WJ@pw
z63n}RcPSi9GqA3pRmW@ef`bDc<8yC@9b_)nK7(54$WH3Ti9o!wn{m=(&61Bbl%jWC
zzuS^?g)O(^-XQl)C=j)2p#8NShOSHXsPu|EXJO5cJG*
z`6f`S*x9IR@eAnpM@?w{#kMPpy&Cmc-1(NVdZT9P0z=}7;%0Ja`D#WJrm^twmTn40
zT-O+K#cKE}(uo{v`Qt}Mu)OPbQ;zZR#Hwhoy{&_&{kVsXZ^PutUrXO&u5QQXWIIrv
z?Or9PaCyJOOM)VtB?8-)5FH8eerx~9u+*vB#6*b&ox}UK9Z&M?-Gc|$mKG@w3!=W5
zt~USOW{~jkiQRT{Y*ddO>v9}La}kXswu`VUO~`dul9Tg^N7%i!XOHBmbwPmb)v{%t
z5+Cn5yIVx0NFP!`xs9oRm040%tI@6O9|U36u1h4{A$x8DoMFZ_e!Wk-&5#{pDAV}M
z+Iu35C$il8r;lyy<|0+;1XMgPb`ybZ=PcZ!qO(EVd63s+44oFP#LA@clQDbd<$Mg~
zXoCk^0?|eL(Q|K$`0GK}?i9N*`w2+o>X-d!Mh8O<<+X|5vw9Cb6E1;auImex&V0`B
zg?BE$n^EvWA{-aK3vmW&zG_;7stCcH7J`H%#iF>yP8yEvy(>p_NLDPJ9Ew(4?F}vB
zsw91#a4UcPE0&y9zf}1tZJ0
z!WLh>Rq_+B#GDNK$t61v1CEqqd4^X*P3AeG$kpsq-{ZM^3|5RXZYQ;D(59KC$GVTJ
z2cw1MSy5>lrxV^$0k7*!^4bD7YJlRGeUJB!(GG!a--AAG@o`;lVZS-pr|mmsBcN&0
z-}wlU65D4*h7*>k;Pv)xdf$|{GT`*_qTP_SiDx>(rv6=1X(Pn`7Q4d=X7TPHBu2=y
zU0I$fDAwLpv9{E_(o*(Xnu}E4X$ZV`q{v`zn{6KWlrkYu+(`W;BlIWM7qx6!u&^6o&Kq
z*1yy}I_^g!=6{`!Ot&VfK6Ob$pP<*(ICfieYPcUh#EOUPXqMe~nTI2AeZ&;LSNb`J
zy@^GohQaD~)MX(1v{w1^rmA)U!tDCgMtzB(Z-MOd1HTNT93xY&)eG7Zl1p+Gz$oAO
z^U?BveTpzOq0p+=%m8W$8Oph)XQhr`m)Qz6WLKY@3MOg(k#}GMx4GQ&wQQ#4esNuX
z-nfD)PUseKhges(b;3HBfUorIF9P#>
zAL}v7+y1il-*+J3$UTPT3ciqK4cXPc7|yHRm~L#0td(3%rZ+TX$X8`zwM{mP>!(=I
znsDEL&o#4bt7XIPokNX2nXqFKbSDj^6cymT-=(q%uUa)Tvv|KDH0WUxvX+eb$Dzm|
zYX83>Q`)ltXVAs21Kk1PmYtvbCAB-kNG#-Xx
zU`h%m=Qgf>exG#Vf3dC~q?PjSFHc8}yU3fTj1|-;Jr#(V4QY=kQMlT-o6e#32p7gQ
zM8pnP-MLA*MHzeczvA@WI)zwmcF(_zIGecZ`0J(@BBa^*aR(MKmKJ}Eym{=y8whKc
z(OQ)XZ$e7KBO$)5m9IPp<;<&nDa->wzL2V=^WdqAvWcr>V0FeFBoh>XXW8gQ{zG$R
zFq~*Y`h#n+F*8&^4Czj5LU{6~yd&mO{r=*|8qPlU;a%ZGF%$8PzpoUH%t*Hb@{NVW
z!XPj9yGtirnA)y$3bzTDB-o
zV1M~QeZ(szW>=)tu4-fW(X5?L*g!Xn!wQy>Gv3HQDsh|4g1FYOU5oMVT=V!qEke<2
zm*(U#ptriK-r3oR--j)e>p#$3)%37kqZy;nKKA-c_kW5__H9ba@$FYh`WdHh@v>yb
zN@mHrHC8hyr1;kM87*wp&8F+vGBrIt30>FeHPv>Xe@D}jx%09&Od>X13#n^TNGV`n
zX;v-YD`L2AOsH~+_35;gN#UJ*udgO(;mQ7w(qq0jO7_$SUASSvVqIOPnlx$B*c6P+
ze8oYqrb4j9BQjiQ`{v_lzXXSas~CD-xNoi$;T6+y!J(bCw|Udy_qc+JHpkJ9ly!sa
zr&zbOC#yHZOjl@ORNpEqmYy?ag)uF66PF3>*`vRVJv6dCCa#98romcG6EWk%S~p#M
zxjNEYs?12vNInWhyH?`4v1M+(irz6tGecB!N+6cr}+lHRWErc6TN-@nW=p=cE
zSe{P3)jnJ%D6B`&eXF2U|1vJO5HIra&)fTu<*cz=XPw}RYyPq6MgRSIHPHh(
z+f_tZgEknrZ)=-~evZJ#OT$4r?xJns)urM7nPt@F4KC;EI
zoEW8FZ33v1T=mp^-b5-J1fz%}CzbEPvFh9HD^y9*u%*GSm)X3Rls-nk3@Iy{*Ij*&
zWHuEx5~{X5XR7q~elCIhb)7LsAr4sgrt@}-G8?hFtJ?dBA92{J_P*@$^N(Ng?o)+7
zy6cRsF1zt>3f!C1x<)2A$OtU^rQF2PQuF*6^G}EIwp45wC;8ShxP>owUDKr}5*
zqbq!Q7k^;>B_rWGax6yVMu@|&ljl^aGj;BIN7hkzgxtK~D*m4J0i7&ru!q<2%|pVw
z$%QjI%=1))p=4=aegrt=hn3vlG4gXZU2hF2-7V(|
z;Y+l?6bPLl-fM2hjMT(&H?3bzes~urZfl?g)YTL07BZ>7J&VsmO&ny?iP9Qb!{b)t
z=jHMlsV#J{e{7E8KXis1n)}~qN5j7>?Xg{L|E;6Ib((dZ$K2`_kE2p)K~TuZ0;kT{
zLfk$=Df-m8u^AaPX<7*PlsWX7+tO01S*cJ(FJjljf@jKr?*%%G+83zsu4l1sTCSjF~0?rY(
zjvhtH!Y@841aX!V9nFGN%e!|65?Zdp4cClqAUvXm%X
zM`ol7yKf~GJKT8A#3_?T;v@M%pzzXnV02i%3iMA#W#-$?M<&Yr|NAi>cP-N_5)2H&3G9Z
z4zxe$Zj)=>f!!A)JuDF3#o%T$pR}WO*I<)5(<%Evi)zGCWT*Le#PXE~0v96hGje!(
zCvVfl{v^*H9BFwkz0;#=IIZ&q&5I20kJKI~PL`?(2L`r{4WwJ1R}H2jlIw~zCA6d?
z)C}flCEwYbLs;y)e*VfZr9%DPmq>d5d>$BRGRQIr4u8l)1DPm)U4uq97X4HrnRNd>
z*>%PAdiAZFe)cC->=5Mw0{^$@arfWX6c1}0x1Fdz+g*J)Sgxv8(?E#^*tx#D2!`b&
z`vOCDZ_f#8PKPHlS{jbBpD9-}?dN-O8t&)m^48LxJ}iA*OWU1E*|K+6@uf_PYD11ZTb%
zU`cGr0>cnN*wuAno(2Zy@CjQ(p^j5Z_;tMBm)(7%M%^pR3-fdg*|^D!L>WzCuE4NaZ>Y0o$)K(?Pu!9uhQ*XZ6;TSY2_ns8xhuLU;_emy
z?zHBGS3T#J<%rUW)FWi(nwEUb->e~i%furGLDideAm;X
z)7JIZGwAe_6-;Ev-r<*H*?CJY4y=!@@FB+Mm_H1Uw3afE%7x5jb!HRk;N!gJ`WM~1
z*|mv*9j?%WWILt$)9L==9KqX|d=n3gSk7r;w<}Ap*75xJgOZ~$n>`DbFMT2|ISB{5
zlg}SoY6OK9Ky@~o%r=RuT4x7r?VLNS7jJ}1n`v6O0?%}puum{}qV`3U$iJnpFU?zb
zNfEXRWw-I?L|3JCy#3o!h|vM%Z$?9p#ZC~$VGZY*e5L@4Xrnk7M%%@DNT-b>IQPkC
h|6fmk{@vZb
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
z