Full Code of coredao-org/dapp-tutorial for AI

master 563e6b3b0b97 cached
1601 files
9.7 MB
2.6M tokens
6634 symbols
1 requests
Copy disabled (too large) Download .txt
Showing preview only (10,559K chars total). Download the full file to get everything.
Repository: coredao-org/dapp-tutorial
Branch: master
Commit: 563e6b3b0b97
Files: 1601
Total size: 9.7 MB

Directory structure:
gitextract_cf9vv67o/

├── .gitignore
├── 01-Simple Storage Full Stack Dapp/
│   ├── .babelrc
│   ├── .editorconfig
│   ├── .eslintrc
│   ├── .gitignore
│   ├── .jest/
│   │   └── setup.ts
│   ├── .prettierrc
│   ├── README.md
│   ├── index.html
│   ├── jest.config.js
│   ├── package.json
│   ├── postcss.config.js
│   ├── src/
│   │   ├── components/
│   │   │   └── App.tsx
│   │   ├── contract/
│   │   │   ├── Storage.json
│   │   │   └── Storage.sol
│   │   ├── index.tsx
│   │   ├── style/
│   │   │   └── index.css
│   │   ├── utils/
│   │   │   └── index.ts
│   │   └── vite-env.d.ts
│   ├── tailwind.config.js
│   ├── tsconfig.json
│   └── vite.config.ts
├── 02-Basic Staking Full Stack Dapp/
│   ├── .gitignore
│   ├── README.md
│   ├── contracts/
│   │   ├── RewardToken.sol
│   │   ├── StakingDapp.sol
│   │   └── StakingToken.sol
│   ├── frontend/
│   │   ├── .gitignore
│   │   ├── README.md
│   │   ├── package.json
│   │   ├── public/
│   │   │   ├── index.html
│   │   │   ├── manifest.json
│   │   │   └── robots.txt
│   │   └── src/
│   │       ├── App.css
│   │       ├── App.js
│   │       ├── App.test.js
│   │       ├── components/
│   │       │   ├── Modal.css
│   │       │   └── Modal.js
│   │       ├── contracts/
│   │       │   ├── IRewardToken.json
│   │       │   ├── RewardToken.json
│   │       │   ├── StakingDapp.json
│   │       │   └── StakingToken.json
│   │       ├── index.css
│   │       ├── index.js
│   │       ├── reportWebVitals.js
│   │       └── setupTests.js
│   ├── hardhat.config.js
│   ├── ignition/
│   │   └── modules/
│   │       └── Lock.js
│   ├── package.json
│   └── scripts/
│       └── deploy.js
├── 03-Decentralized Guestbook/
│   ├── .gitignore
│   ├── README.md
│   ├── contracts/
│   │   └── Guestbook.sol
│   ├── frontend/
│   │   ├── .gitignore
│   │   ├── README.md
│   │   ├── package.json
│   │   ├── public/
│   │   │   ├── index.html
│   │   │   ├── manifest.json
│   │   │   └── robots.txt
│   │   └── src/
│   │       ├── App.css
│   │       ├── App.js
│   │       ├── GuestbookAbi.json
│   │       ├── index.css
│   │       ├── index.js
│   │       ├── reportWebVitals.js
│   │       └── setupTests.js
│   ├── hardhat.config.js
│   ├── package.json
│   └── scripts/
│       └── deploy.js
├── 04-Pyth Pull Oracles/
│   ├── .gitignore
│   ├── README.md
│   ├── contracts/
│   │   └── PythFeedBoilerplate.sol
│   ├── frontend/
│   │   ├── .gitignore
│   │   ├── README.md
│   │   ├── package.json
│   │   ├── public/
│   │   │   ├── index.html
│   │   │   ├── manifest.json
│   │   │   └── robots.txt
│   │   └── src/
│   │       ├── App.css
│   │       ├── App.js
│   │       ├── App.test.js
│   │       ├── PythFeedBoilerplateAbi.json
│   │       ├── index.css
│   │       ├── index.js
│   │       ├── reportWebVitals.js
│   │       └── setupTests.js
│   ├── hardhat.config.js
│   ├── package.json
│   └── scripts/
│       └── deploy.js
├── 05-Hello-World-Dapp/
│   ├── .gitignore
│   ├── README.md
│   ├── contracts/
│   │   ├── HelloWorld.sol
│   │   └── Lock.sol
│   ├── frontend/
│   │   ├── .gitignore
│   │   ├── README.md
│   │   ├── package.json
│   │   ├── public/
│   │   │   ├── index.html
│   │   │   ├── manifest.json
│   │   │   └── robots.txt
│   │   └── src/
│   │       ├── App.css
│   │       ├── App.js
│   │       ├── App.test.js
│   │       ├── Contract-ABI/
│   │       │   └── HelloWorld.json
│   │       ├── HelloWorld.css
│   │       ├── HelloWorld.js
│   │       ├── index.css
│   │       ├── index.js
│   │       ├── reportWebVitals.js
│   │       └── setupTests.js
│   ├── hardhat.config.js
│   ├── ignition/
│   │   └── modules/
│   │       └── Lock.js
│   ├── npx
│   ├── package.json
│   ├── scripts/
│   │   └── deploy.js
│   └── test/
│       └── HelloWorld.js
├── 06-Subgraphs-on-Core/
│   ├── README.md
│   ├── abis/
│   │   └── Guestbook.json
│   ├── build/
│   │   ├── Guestbook/
│   │   │   ├── Guestbook.json
│   │   │   └── Guestbook.wasm
│   │   ├── schema.graphql
│   │   └── subgraph.yaml
│   ├── docker-compose.yml
│   ├── generated/
│   │   ├── Guestbook/
│   │   │   └── Guestbook.ts
│   │   └── schema.ts
│   ├── networks.json
│   ├── package.json
│   ├── schema.graphql
│   ├── src/
│   │   └── guestbook.ts
│   ├── subgraph.yaml
│   ├── tests/
│   │   ├── guestbook-utils.ts
│   │   └── guestbook.test.ts
│   └── tsconfig.json
├── 07-NFT Minitng dApp on Core/
│   ├── .gitignore
│   ├── README.md
│   ├── assets/
│   │   └── metadata.json
│   ├── contracts/
│   │   ├── Lock.sol
│   │   └── MyNFT.sol
│   ├── frontend/
│   │   ├── .gitignore
│   │   ├── README.md
│   │   ├── index.html
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── App.css
│   │   │   ├── App.jsx
│   │   │   ├── abis/
│   │   │   │   └── MyNFTAbi.json
│   │   │   ├── index.css
│   │   │   └── main.jsx
│   │   └── vite.config.js
│   ├── hardhat.config.js
│   ├── ignition/
│   │   └── modules/
│   │       └── Lock.js
│   ├── package.json
│   ├── scripts/
│   │   └── deploy.js
│   └── test/
│       └── Lock.js
├── 08-Guess-Game/
│   ├── .gitignore
│   ├── Frontend/
│   │   ├── .eslintrc.json
│   │   ├── .gitignore
│   │   ├── README.md
│   │   ├── app/
│   │   │   ├── components/
│   │   │   │   └── ui/
│   │   │   │       ├── button.tsx
│   │   │   │       ├── card.tsx
│   │   │   │       └── input.tsx
│   │   │   ├── constants/
│   │   │   │   ├── config.json
│   │   │   │   └── solidityABI.json
│   │   │   ├── globals.css
│   │   │   ├── layout.tsx
│   │   │   └── page.tsx
│   │   ├── components.json
│   │   ├── lib/
│   │   │   └── utils.ts
│   │   ├── next.config.ts
│   │   ├── package.json
│   │   ├── postcss.config.mjs
│   │   ├── tailwind.config.ts
│   │   └── tsconfig.json
│   ├── README.md
│   ├── contracts/
│   │   ├── GuessTheNumber.sol
│   │   └── GuessToken.sol
│   ├── hardhat.config.js
│   ├── ignition/
│   │   └── modules/
│   │       └── Lock.js
│   ├── package.json
│   ├── scripts/
│   │   └── deploy-guess-game.js
│   └── test/
│       └── Lock.js
├── 09-Token-swap-Dapp/
│   ├── .gitignore
│   ├── README.md
│   ├── contracts/
│   │   ├── Swap.sol
│   │   └── Token.sol
│   ├── frontend/
│   │   ├── .gitignore
│   │   ├── README.md
│   │   ├── package.json
│   │   ├── public/
│   │   │   ├── index.html
│   │   │   ├── manifest.json
│   │   │   └── robots.txt
│   │   └── src/
│   │       ├── App.css
│   │       ├── App.js
│   │       ├── App.test.js
│   │       ├── contracts/
│   │       │   ├── Swap.json
│   │       │   └── Token.json
│   │       ├── index.css
│   │       ├── index.js
│   │       ├── reportWebVitals.js
│   │       └── setupTests.js
│   ├── hardhat.config.js
│   ├── package.json
│   ├── scripts/
│   │   └── deploy.js
│   └── test/
│       └── Swap.js
├── 10-Advanced-Stake-Dapp/
│   ├── .gitignore
│   ├── Frontend/
│   │   ├── .eslintrc.json
│   │   ├── .gitignore
│   │   ├── README.md
│   │   ├── app/
│   │   │   ├── globals.css
│   │   │   ├── layout.tsx
│   │   │   └── page.tsx
│   │   ├── components/
│   │   │   ├── connect-wallet.tsx
│   │   │   ├── global-overview.tsx
│   │   │   ├── header.tsx
│   │   │   ├── info-tooltip.tsx
│   │   │   ├── mode-toggle.tsx
│   │   │   ├── stake-form.tsx
│   │   │   ├── staker-directory.tsx
│   │   │   ├── staking-dashboard.tsx
│   │   │   ├── staking-form.tsx
│   │   │   ├── theme-provider.tsx
│   │   │   ├── theme-toggle.tsx
│   │   │   ├── ui/
│   │   │   │   ├── button.tsx
│   │   │   │   ├── card.tsx
│   │   │   │   ├── dropdown-menu.tsx
│   │   │   │   ├── input.tsx
│   │   │   │   ├── label.tsx
│   │   │   │   ├── progress.tsx
│   │   │   │   ├── slider.tsx
│   │   │   │   ├── tabs.tsx
│   │   │   │   ├── toast.tsx
│   │   │   │   ├── toaster.tsx
│   │   │   │   └── tooltip.tsx
│   │   │   ├── user-dashboard.tsx
│   │   │   ├── user-list.tsx
│   │   │   ├── user-stats.tsx
│   │   │   ├── wallet-connect.tsx
│   │   │   ├── wallet-provider.tsx
│   │   │   └── withdraw-form.tsx
│   │   ├── components.json
│   │   ├── constants/
│   │   │   └── constansts.tsx
│   │   ├── hooks/
│   │   │   ├── use-staking-contract.tsx
│   │   │   └── use-toast.ts
│   │   ├── lib/
│   │   │   └── utils.ts
│   │   ├── next.config.ts
│   │   ├── package.json
│   │   ├── postcss.config.mjs
│   │   ├── tailwind.config.ts
│   │   ├── tsconfig.json
│   │   └── types/
│   │       └── global.d.ts
│   ├── README.md
│   ├── contracts/
│   │   ├── RewardToken.sol
│   │   └── Stake.sol
│   ├── hardhat.config.js
│   ├── ignition/
│   │   └── modules/
│   │       └── Lock.js
│   ├── package.json
│   ├── scripts/
│   │   ├── deploy-stake.js
│   │   └── mint.js
│   └── test/
│       └── Lock.js
├── 11-Bridge-Token-Using-Chainlink/
│   ├── License
│   ├── README.md
│   ├── foundry/
│   │   ├── .github/
│   │   │   └── workflows/
│   │   │       └── test.yml
│   │   ├── .gitignore
│   │   ├── README.md
│   │   ├── foundry.toml
│   │   ├── remappings.txt
│   │   ├── script/
│   │   │   ├── CrosschainBridge.s.sol
│   │   │   └── HelperConfig.s.sol
│   │   └── src/
│   │       ├── CrosschainBridge.sol
│   │       ├── LinkTokenInterface.sol
│   │       └── USDC.sol
│   └── frontend/
│       ├── .gitignore
│       ├── ABI/
│       │   ├── CrosschainBridge.json
│       │   └── USDC.json
│       ├── README.md
│       ├── WalletConfig.tsx
│       ├── app/
│       │   ├── Provider.tsx
│       │   ├── globals.css
│       │   ├── layout.tsx
│       │   └── page.tsx
│       ├── components/
│       │   └── ui/
│       │       ├── alert.tsx
│       │       ├── button.tsx
│       │       ├── card.tsx
│       │       ├── input.tsx
│       │       └── label.tsx
│       ├── components.json
│       ├── eslint.config.mjs
│       ├── lib/
│       │   └── utils.ts
│       ├── next.config.ts
│       ├── package.json
│       ├── postcss.config.mjs
│       └── tsconfig.json
├── 12-Core-MultiSig/
│   ├── .gitignore
│   ├── Frontend/
│   │   ├── .eslintrc.json
│   │   ├── .gitignore
│   │   ├── README.md
│   │   ├── app/
│   │   │   ├── client.ts
│   │   │   ├── constants/
│   │   │   │   ├── MultiSigFactory.json
│   │   │   │   └── config.json
│   │   │   ├── create/
│   │   │   │   ├── createmultisig.tsx
│   │   │   │   └── multisigcreation.tsx
│   │   │   ├── dashboard/
│   │   │   │   └── page.tsx
│   │   │   ├── globals.css
│   │   │   ├── layout.tsx
│   │   │   ├── linkdash.tsx
│   │   │   ├── owners/
│   │   │   │   └── page.tsx
│   │   │   ├── page.tsx
│   │   │   └── wallet/
│   │   │       ├── DialogBoxes/
│   │   │       │   ├── Confirm.tsx
│   │   │       │   ├── Execute.tsx
│   │   │       │   ├── Revoke.tsx
│   │   │       │   └── Submit.tsx
│   │   │       └── page.tsx
│   │   ├── components/
│   │   │   ├── DashboardLayout.tsx
│   │   │   └── ui/
│   │   │       ├── button.tsx
│   │   │       ├── card.tsx
│   │   │       ├── dialog.tsx
│   │   │       ├── input.tsx
│   │   │       ├── label.tsx
│   │   │       └── table.tsx
│   │   ├── components.json
│   │   ├── lib/
│   │   │   └── utils.ts
│   │   ├── next.config.ts
│   │   ├── package.json
│   │   ├── postcss.config.mjs
│   │   ├── tailwind.config.js
│   │   ├── tailwind.config.ts
│   │   └── tsconfig.json
│   ├── README.md
│   ├── contracts/
│   │   ├── MultiSig.sol
│   │   ├── MultiSigFactory.sol
│   │   └── interfaces/
│   │       └── IMultiSig.sol
│   ├── hardhat.config.js
│   ├── ignition/
│   │   └── modules/
│   │       └── Lock.js
│   ├── package.json
│   ├── scripts/
│   │   └── deploy-multisig.js
│   └── test/
│       └── Lock.js
├── 13-Core-Test-Token-Faucet/
│   ├── .gitignore
│   ├── Frontend/
│   │   ├── .eslintrc.json
│   │   ├── .gitignore
│   │   ├── README.md
│   │   ├── app/
│   │   │   ├── globals.css
│   │   │   ├── layout.tsx
│   │   │   └── page.tsx
│   │   ├── components/
│   │   │   ├── badge.tsx
│   │   │   ├── dialog.tsx
│   │   │   ├── dropdown-menu.tsx
│   │   │   ├── navbar.tsx
│   │   │   ├── network-modal.tsx
│   │   │   ├── select.tsx
│   │   │   ├── toast.tsx
│   │   │   ├── toaster.tsx
│   │   │   ├── token-selector.tsx
│   │   │   └── ui/
│   │   │       ├── badge.tsx
│   │   │       ├── button.tsx
│   │   │       ├── card.tsx
│   │   │       ├── dialog.tsx
│   │   │       ├── dropdown-menu.tsx
│   │   │       ├── input.tsx
│   │   │       ├── select.tsx
│   │   │       ├── toast.tsx
│   │   │       └── toaster.tsx
│   │   ├── components.json
│   │   ├── hooks/
│   │   │   └── use-toast.ts
│   │   ├── lib/
│   │   │   ├── constants.ts
│   │   │   ├── tokens.ts
│   │   │   └── utils.ts
│   │   ├── next.config.js
│   │   ├── next.config.mjs
│   │   ├── package.json
│   │   ├── postcss.config.js
│   │   ├── postcss.config.mjs
│   │   ├── tailwind.config.ts
│   │   └── tsconfig.json
│   ├── README.md
│   ├── contracts/
│   │   ├── tDai.sol
│   │   ├── tUSD.sol
│   │   └── tUSDC.sol
│   ├── hardhat.config.js
│   ├── ignition/
│   │   └── modules/
│   │       └── Lock.js
│   ├── package.json
│   ├── scripts/
│   │   └── deploy.js
│   └── test/
│       └── Lock.js
├── 14-Corelend/
│   ├── .gitignore
│   ├── Frontend/
│   │   ├── .eslintrc.json
│   │   ├── .gitignore
│   │   ├── README.md
│   │   ├── app/
│   │   │   ├── borrow/
│   │   │   │   └── page.tsx
│   │   │   ├── constants/
│   │   │   │   └── constants.tsx
│   │   │   ├── globals.css
│   │   │   ├── layout.tsx
│   │   │   ├── lend/
│   │   │   │   └── page.tsx
│   │   │   ├── loans/
│   │   │   │   ├── page.tsx
│   │   │   │   ├── store.tsx
│   │   │   │   └── test.tsx
│   │   │   └── page.tsx
│   │   ├── components/
│   │   │   ├── navbar.tsx
│   │   │   ├── ui/
│   │   │   │   ├── badge.tsx
│   │   │   │   ├── button.tsx
│   │   │   │   ├── card.tsx
│   │   │   │   ├── input.tsx
│   │   │   │   ├── select.tsx
│   │   │   │   ├── table.tsx
│   │   │   │   ├── toast.tsx
│   │   │   │   └── toaster.tsx
│   │   │   └── wallet-provider.tsx
│   │   ├── components.json
│   │   ├── hooks/
│   │   │   └── use-toast.ts
│   │   ├── lib/
│   │   │   └── utils.ts
│   │   ├── next.config.ts
│   │   ├── package.json
│   │   ├── postcss.config.mjs
│   │   ├── tailwind.config.ts
│   │   └── tsconfig.json
│   ├── README.md
│   ├── contracts/
│   │   └── CoreLend.sol
│   ├── hardhat.config.js
│   ├── ignition/
│   │   └── modules/
│   │       └── Lock.js
│   ├── package.json
│   ├── scripts/
│   │   └── deploy.js
│   └── test/
│       └── Lock.js
├── 15-dns-protocol/
│   ├── .gitignore
│   ├── Frontend/
│   │   ├── .eslintrc.json
│   │   ├── .gitignore
│   │   ├── README.md
│   │   ├── app/
│   │   │   ├── dashboard/
│   │   │   │   └── page.tsx
│   │   │   ├── globals.css
│   │   │   ├── layout.tsx
│   │   │   ├── page.tsx
│   │   │   └── registry/
│   │   │       ├── loading.tsx
│   │   │       └── page.tsx
│   │   ├── components/
│   │   │   ├── alert.tsx
│   │   │   ├── domain-card.tsx
│   │   │   ├── domain-details.tsx
│   │   │   ├── domain-search.tsx
│   │   │   ├── header.tsx
│   │   │   ├── mode-toggle.tsx
│   │   │   ├── network-switcher.tsx
│   │   │   ├── theme-provider.tsx
│   │   │   ├── tooltip.tsx
│   │   │   ├── ui/
│   │   │   │   ├── alert.tsx
│   │   │   │   ├── badge.tsx
│   │   │   │   ├── button.tsx
│   │   │   │   ├── card.tsx
│   │   │   │   ├── dialog.tsx
│   │   │   │   ├── dropdown-menu.tsx
│   │   │   │   ├── input.tsx
│   │   │   │   └── skeleton.tsx
│   │   │   └── wallet-provider.tsx
│   │   ├── components.json
│   │   ├── constants/
│   │   │   └── config.json
│   │   ├── hooks/
│   │   │   └── use-wallet.tsx
│   │   ├── lib/
│   │   │   ├── core-contract.ts
│   │   │   └── utils.ts
│   │   ├── next.config.js
│   │   ├── package.json
│   │   ├── postcss.config.mjs
│   │   ├── tailwind.config.ts
│   │   ├── tsconfig.json
│   │   └── types/
│   │       └── global.d.ts
│   ├── README.md
│   ├── contracts/
│   │   ├── ENS-Registry.sol
│   │   ├── RegistrationContract.sol
│   │   └── ResolverContract.sol
│   ├── hardhat.config.js
│   ├── ignition/
│   │   └── modules/
│   │       └── Lock.js
│   ├── package.json
│   ├── scripts/
│   │   └── deploy.js
│   └── test/
│       └── Lock.js
├── 16-Pump.Core/
│   ├── .gitignore
│   ├── Frontend/
│   │   ├── .eslintrc.json
│   │   ├── .gitignore
│   │   ├── README.md
│   │   ├── app/
│   │   │   ├── dashboard/
│   │   │   │   └── page.tsx
│   │   │   ├── globals.css
│   │   │   ├── layout.tsx
│   │   │   ├── page.tsx
│   │   │   └── scss/
│   │   │       ├── _layout.scss
│   │   │       ├── _mixins.scss
│   │   │       ├── _reset.scss
│   │   │       ├── _typography.scss
│   │   │       ├── _utilities.scss
│   │   │       ├── _variables.scss
│   │   │       ├── components/
│   │   │       │   ├── _badges.scss
│   │   │       │   ├── _buttons.scss
│   │   │       │   ├── _cards.scss
│   │   │       │   ├── _dialogs.scss
│   │   │       │   ├── _dropdown.scss
│   │   │       │   ├── _forms.scss
│   │   │       │   ├── _launch-dialog.scss
│   │   │       │   ├── _navbar.scss
│   │   │       │   ├── _progress.scss
│   │   │       │   ├── _toast.scss
│   │   │       │   └── _token-listing.scss
│   │   │       └── main.scss
│   │   ├── components/
│   │   │   ├── buy-token-dialog.tsx
│   │   │   ├── connect-wallet.tsx
│   │   │   ├── creator-dashboard.tsx
│   │   │   ├── dialog.tsx
│   │   │   ├── launch-token-button.tsx
│   │   │   ├── launch-token-dialog.tsx
│   │   │   ├── navbar.tsx
│   │   │   ├── network-switcher.tsx
│   │   │   ├── owner-dashboard.tsx
│   │   │   ├── token-listing.tsx
│   │   │   └── ui/
│   │   │       ├── badge.tsx
│   │   │       ├── button.tsx
│   │   │       ├── card.tsx
│   │   │       ├── dialog.tsx
│   │   │       ├── dropdown-menu.tsx
│   │   │       ├── input.tsx
│   │   │       ├── label.tsx
│   │   │       ├── progress.tsx
│   │   │       ├── sheet.tsx
│   │   │       ├── slider.tsx
│   │   │       ├── tabs.tsx
│   │   │       ├── toast.tsx
│   │   │       └── toaster.tsx
│   │   ├── components.json
│   │   ├── constants/
│   │   │   └── constansts.tsx
│   │   ├── hooks/
│   │   │   ├── use-toast.ts
│   │   │   └── use-web3.tsx
│   │   ├── lib/
│   │   │   └── utils.ts
│   │   ├── next.config.ts
│   │   ├── package.json
│   │   ├── postcss.config.mjs
│   │   ├── providers/
│   │   │   └── web3-provider.tsx
│   │   ├── tailwind.config.ts
│   │   ├── tsconfig.json
│   │   └── types/
│   │       └── global.d.ts
│   ├── README.md
│   ├── contracts/
│   │   ├── MemeFactory.sol
│   │   └── MemeToken.sol
│   ├── hardhat.config.js
│   ├── ignition/
│   │   └── modules/
│   │       └── Lock.js
│   ├── package.json
│   ├── scripts/
│   │   └── deploy.js
│   └── test/
│       └── Lock.js
├── 17-Crowd-Funding-Dapp/
│   ├── Contract/
│   │   ├── .gitignore
│   │   ├── README.md
│   │   ├── contracts/
│   │   │   ├── CrowdFunding.sol
│   │   │   └── CrowdFundingFactory.sol
│   │   ├── hardhat.config.js
│   │   ├── package.json
│   │   └── scripts/
│   │       └── verify/
│   │           └── my-contract.js
│   ├── Frontend/
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── .vite/
│   │   │   └── deps_temp_6cf5ba4c/
│   │   │       ├── AllWalletsUI-27PR6NO2.js
│   │   │       ├── BuyScreen-N3MCCV33.js
│   │   │       ├── CoinbaseSDKConnection-PPK2JHPJ.js
│   │   │       ├── EcosystemWalletConnectUI-ANAXYA53.js
│   │   │       ├── InAppWalletConnectUI-IYEPIHHJ.js
│   │   │       ├── InAppWalletSelectionUI-QJ7CQPJG.js
│   │   │       ├── ModelViewer-GZZWO7FG.js
│   │   │       ├── QRCodeRenderer-ZNSMXL36.js
│   │   │       ├── adapter-F5WOI5K5.js
│   │   │       ├── ai-M4CK2DAC.js
│   │   │       ├── ai.spotonchain-Q44G73RV.js
│   │   │       ├── app-3BIDNXMN.js
│   │   │       ├── app-4OQAM2FO.js
│   │   │       ├── app-4WB6G67C.js
│   │   │       ├── app-5BPIXU3J.js
│   │   │       ├── app-5PJX72YN.js
│   │   │       ├── app-6X4TWE2O.js
│   │   │       ├── app-BJYH6WND.js
│   │   │       ├── app-C6AFF7V2.js
│   │   │       ├── app-CEHOPHKL.js
│   │   │       ├── app-FEBEDQ5O.js
│   │   │       ├── app-FXWSJIOW.js
│   │   │       ├── app-HGBIYGYJ.js
│   │   │       ├── app-HRMMGDE2.js
│   │   │       ├── app-IC2A3RDS.js
│   │   │       ├── app-ICREXY5T.js
│   │   │       ├── app-IEYL7BOV.js
│   │   │       ├── app-IVIV25DE.js
│   │   │       ├── app-J7XLYP5E.js
│   │   │       ├── app-JGIJQHBM.js
│   │   │       ├── app-JPKIQZES.js
│   │   │       ├── app-KCNXS7XQ.js
│   │   │       ├── app-LUGTXPGI.js
│   │   │       ├── app-M6LRY2SK.js
│   │   │       ├── app-MFHNNKPC.js
│   │   │       ├── app-MS6Z5MIK.js
│   │   │       ├── app-O5DHUCKC.js
│   │   │       ├── app-OXRH4XRW.js
│   │   │       ├── app-PUVYKP42.js
│   │   │       ├── app-QASKZRBP.js
│   │   │       ├── app-R4JLN24B.js
│   │   │       ├── app-RQXR7MZ5.js
│   │   │       ├── app-RRYWU2T6.js
│   │   │       ├── app-SFALV7Q7.js
│   │   │       ├── app-VCRSWMVS.js
│   │   │       ├── app-XKLTXZZ5.js
│   │   │       ├── app-XMYPKI5F.js
│   │   │       ├── app-YG5QZHYU.js
│   │   │       ├── app-Z3ZKSY2N.js
│   │   │       ├── app.core-FOKZSNJL.js
│   │   │       ├── app.qubic-45GFYY2N.js
│   │   │       ├── arweave-57OCWZ5C.js
│   │   │       ├── auth-ZNEFTCXD.js
│   │   │       ├── baby-VXQWXU2X.js
│   │   │       ├── balanceOf-77XLALLF.js
│   │   │       ├── biconomy-PIJEZ3DY.js
│   │   │       ├── buyFromListing-NAQIOY7I.js
│   │   │       ├── cc-VULA5ISR.js
│   │   │       ├── cc-XODV5KUP.js
│   │   │       ├── cc.localtrade-QLM7DIOM.js
│   │   │       ├── ccip-BECV2KBX.js
│   │   │       ├── ch-DJKOH7L6.js
│   │   │       ├── checkContractWalletSignature-6DFUQS7E.js
│   │   │       ├── checkContractWalletSignedTypedData-SEVCYJA7.js
│   │   │       ├── chunk-253DMNI3.js
│   │   │       ├── chunk-2HYPHUAF.js
│   │   │       ├── chunk-2MTJELC7.js
│   │   │       ├── chunk-2RRVHQYX.js
│   │   │       ├── chunk-35YKZJSE.js
│   │   │       ├── chunk-36FW3ZLE.js
│   │   │       ├── chunk-3DBHE3NE.js
│   │   │       ├── chunk-3GSJ2FQJ.js
│   │   │       ├── chunk-3ZOYRTTJ.js
│   │   │       ├── chunk-4BCIASJM.js
│   │   │       ├── chunk-4OCU6WGG.js
│   │   │       ├── chunk-4PEUWIWY.js
│   │   │       ├── chunk-4RRAU5V7.js
│   │   │       ├── chunk-4U2YWK76.js
│   │   │       ├── chunk-5CO5G7XZ.js
│   │   │       ├── chunk-5EFACFVF.js
│   │   │       ├── chunk-5THTWD2M.js
│   │   │       ├── chunk-5U5XBS6S.js
│   │   │       ├── chunk-65EUCVOP.js
│   │   │       ├── chunk-673YCYST.js
│   │   │       ├── chunk-67BSOYLQ.js
│   │   │       ├── chunk-6FLJU7W7.js
│   │   │       ├── chunk-6LAJV43E.js
│   │   │       ├── chunk-6RU56BH7.js
│   │   │       ├── chunk-6WNCTW75.js
│   │   │       ├── chunk-6XF6HOWC.js
│   │   │       ├── chunk-7AY3QZZV.js
│   │   │       ├── chunk-7ETS5GH6.js
│   │   │       ├── chunk-7EY5MWB2.js
│   │   │       ├── chunk-7QDK5KLB.js
│   │   │       ├── chunk-7VZHRFCE.js
│   │   │       ├── chunk-7ZCK2FX5.js
│   │   │       ├── chunk-7ZNEOXS2.js
│   │   │       ├── chunk-AARWH2GQ.js
│   │   │       ├── chunk-ADIC4TC2.js
│   │   │       ├── chunk-AG4NO6K6.js
│   │   │       ├── chunk-AWMNEQRO.js
│   │   │       ├── chunk-B7XHB4Z2.js
│   │   │       ├── chunk-BBNNHC5G.js
│   │   │       ├── chunk-BZXRHH4X.js
│   │   │       ├── chunk-CLN3QXW2.js
│   │   │       ├── chunk-CNLOA7AS.js
│   │   │       ├── chunk-CXAZLQ2Z.js
│   │   │       ├── chunk-CYVKJMZE.js
│   │   │       ├── chunk-DYKFWRMQ.js
│   │   │       ├── chunk-EGJT3UEX.js
│   │   │       ├── chunk-EHYTL2NA.js
│   │   │       ├── chunk-EIBOABXT.js
│   │   │       ├── chunk-EIVAOYE5.js
│   │   │       ├── chunk-F2BEZVSV.js
│   │   │       ├── chunk-FHZU65JA.js
│   │   │       ├── chunk-FNI7M3UI.js
│   │   │       ├── chunk-FXBAO7K3.js
│   │   │       ├── chunk-G26WKBGM.js
│   │   │       ├── chunk-GGVPULQZ.js
│   │   │       ├── chunk-GHAZ34ED.js
│   │   │       ├── chunk-GINVHONX.js
│   │   │       ├── chunk-GOA7IGSB.js
│   │   │       ├── chunk-HI6IFF64.js
│   │   │       ├── chunk-HJ6E36KT.js
│   │   │       ├── chunk-HL2TAEA2.js
│   │   │       ├── chunk-HO57TQQM.js
│   │   │       ├── chunk-I2GEMA2B.js
│   │   │       ├── chunk-I5DK3TWY.js
│   │   │       ├── chunk-IMSXM5CF.js
│   │   │       ├── chunk-J7FYPWA5.js
│   │   │       ├── chunk-JBQP4JIV.js
│   │   │       ├── chunk-JTR2PIFP.js
│   │   │       ├── chunk-JZC47WAY.js
│   │   │       ├── chunk-KWA5PGSC.js
│   │   │       ├── chunk-LO5SQBMX.js
│   │   │       ├── chunk-M3WBOOWW.js
│   │   │       ├── chunk-ME5GAE4N.js
│   │   │       ├── chunk-MGEBXLXC.js
│   │   │       ├── chunk-MWAIX6LF.js
│   │   │       ├── chunk-N24CESYN.js
│   │   │       ├── chunk-NJUWOGZE.js
│   │   │       ├── chunk-NKFQ2LZT.js
│   │   │       ├── chunk-NOA36MVL.js
│   │   │       ├── chunk-NPJBMLFY.js
│   │   │       ├── chunk-NPXNISXJ.js
│   │   │       ├── chunk-O6KA6WKL.js
│   │   │       ├── chunk-O6LGEXJ4.js
│   │   │       ├── chunk-O6UZ65WN.js
│   │   │       ├── chunk-O7UPLLUM.js
│   │   │       ├── chunk-OHYFITXC.js
│   │   │       ├── chunk-P7ZDTV2E.js
│   │   │       ├── chunk-PB7CMXGP.js
│   │   │       ├── chunk-PHVX3XOV.js
│   │   │       ├── chunk-PK5NRJAC.js
│   │   │       ├── chunk-PWFRCBEK.js
│   │   │       ├── chunk-Q3TN3POE.js
│   │   │       ├── chunk-QC3K2OKT.js
│   │   │       ├── chunk-QHKZ43P6.js
│   │   │       ├── chunk-QIUEWTOP.js
│   │   │       ├── chunk-QLCPWJYR.js
│   │   │       ├── chunk-QLJVAXYD.js
│   │   │       ├── chunk-QVNJVROL.js
│   │   │       ├── chunk-R554PO5S.js
│   │   │       ├── chunk-R76ND7QY.js
│   │   │       ├── chunk-RC344ZND.js
│   │   │       ├── chunk-RF65TSG5.js
│   │   │       ├── chunk-S4ZGHGPT.js
│   │   │       ├── chunk-S6VQW2VI.js
│   │   │       ├── chunk-SEVZ5PBP.js
│   │   │       ├── chunk-SJKAB62J.js
│   │   │       ├── chunk-SNQ54XRM.js
│   │   │       ├── chunk-SPELR2RL.js
│   │   │       ├── chunk-SWMZXE3E.js
│   │   │       ├── chunk-TFBEDS4S.js
│   │   │       ├── chunk-TTOANXGP.js
│   │   │       ├── chunk-U3QNWT4A.js
│   │   │       ├── chunk-U55JVTZU.js
│   │   │       ├── chunk-U7TO6S3N.js
│   │   │       ├── chunk-UY2SRO54.js
│   │   │       ├── chunk-UZVZQZEM.js
│   │   │       ├── chunk-VIBS7Y3M.js
│   │   │       ├── chunk-VJFQPB47.js
│   │   │       ├── chunk-VJOHABJ4.js
│   │   │       ├── chunk-VUXPTMXZ.js
│   │   │       ├── chunk-XB34LHR5.js
│   │   │       ├── chunk-XC5J5ANL.js
│   │   │       ├── chunk-XTOEMUZK.js
│   │   │       ├── chunk-Y3WKETHV.js
│   │   │       ├── chunk-YG7T4W43.js
│   │   │       ├── chunk-YGRUPXVB.js
│   │   │       ├── chunk-YPFLLHK6.js
│   │   │       ├── chunk-YXQ5KEQC.js
│   │   │       ├── chunk-ZDZJSHMF.js
│   │   │       ├── chunk-ZLJ6VYSG.js
│   │   │       ├── chunk-ZNEQLT5Q.js
│   │   │       ├── claimCondition-FZ3EKW2M.js
│   │   │       ├── claimCondition-WJYCFSKY.js
│   │   │       ├── claimTo-3OGSZAGD.js
│   │   │       ├── claimTo-7N7PJK5O.js
│   │   │       ├── claimTo-LNJZHHT3.js
│   │   │       ├── co-2W272KST.js
│   │   │       ├── co-4KSSMBL6.js
│   │   │       ├── co-4QEGB6VV.js
│   │   │       ├── co-7LLLWALO.js
│   │   │       ├── co-A2VHPEPT.js
│   │   │       ├── co-CVN2M45H.js
│   │   │       ├── co-Y7ICLZEM.js
│   │   │       ├── co.cyber-W3ZB2PHU.js
│   │   │       ├── coinbaseWebSDK-RVHYUQN6.js
│   │   │       ├── com-2C4IBZJC.js
│   │   │       ├── com-2FMSNEYI.js
│   │   │       ├── com-2M7N6F5U.js
│   │   │       ├── com-3M4YXHEP.js
│   │   │       ├── com-4GPSLLOX.js
│   │   │       ├── com-4MAE4SLL.js
│   │   │       ├── com-5EVQS4IZ.js
│   │   │       ├── com-5NZOMD6O.js
│   │   │       ├── com-66Q6X2AN.js
│   │   │       ├── com-6DTOF6TL.js
│   │   │       ├── com-6OK3IP35.js
│   │   │       ├── com-6OLGJVDZ.js
│   │   │       ├── com-6SKA46QA.js
│   │   │       ├── com-77L55XPO.js
│   │   │       ├── com-7CFZD43L.js
│   │   │       ├── com-7ESFL2XC.js
│   │   │       ├── com-7FNIVOH3.js
│   │   │       ├── com-7Y4S6AXS.js
│   │   │       ├── com-7ZICZNFF.js
│   │   │       ├── com-ABZNTRLZ.js
│   │   │       ├── com-AKMGTE6O.js
│   │   │       ├── com-AODZYQWL.js
│   │   │       ├── com-BA67M6JA.js
│   │   │       ├── com-BJY3WLWU.js
│   │   │       ├── com-BLXPUI47.js
│   │   │       ├── com-CADNHKSZ.js
│   │   │       ├── com-CAZP4XAV.js
│   │   │       ├── com-CHX2N46L.js
│   │   │       ├── com-CMFYLJ3T.js
│   │   │       ├── com-D37EIKB4.js
│   │   │       ├── com-DJRJPGME.js
│   │   │       ├── com-DMBFR3TM.js
│   │   │       ├── com-DXBW5XU7.js
│   │   │       ├── com-EC74KZVH.js
│   │   │       ├── com-ECD626HL.js
│   │   │       ├── com-EDWOBHQ5.js
│   │   │       ├── com-EW5K7JF2.js
│   │   │       ├── com-FE3NAAEW.js
│   │   │       ├── com-FIMPM75U.js
│   │   │       ├── com-FLBLVTBY.js
│   │   │       ├── com-FTU5JU6L.js
│   │   │       ├── com-FUBWL26I.js
│   │   │       ├── com-G4PABABE.js
│   │   │       ├── com-GGEHZ3ML.js
│   │   │       ├── com-GHGCPYMS.js
│   │   │       ├── com-GPM5NTEM.js
│   │   │       ├── com-GY4RR463.js
│   │   │       ├── com-HIQMW3M5.js
│   │   │       ├── com-HQ3ZNBVK.js
│   │   │       ├── com-HUVDUN75.js
│   │   │       ├── com-I4GOOXU3.js
│   │   │       ├── com-IATVSYRF.js
│   │   │       ├── com-ICJNKASS.js
│   │   │       ├── com-IDR25SRZ.js
│   │   │       ├── com-IF7AHQFJ.js
│   │   │       ├── com-IF7EFBYY.js
│   │   │       ├── com-IQ3TTO6K.js
│   │   │       ├── com-IVJ4ODXS.js
│   │   │       ├── com-JCVLXBH6.js
│   │   │       ├── com-KFSYP3UK.js
│   │   │       ├── com-KPWIFBRV.js
│   │   │       ├── com-KW7LIQVX.js
│   │   │       ├── com-KWK64UB7.js
│   │   │       ├── com-L5FHGFHX.js
│   │   │       ├── com-LFG2VXGV.js
│   │   │       ├── com-M5EROV3A.js
│   │   │       ├── com-MIWCOGLD.js
│   │   │       ├── com-MPMYNQIR.js
│   │   │       ├── com-MT3HKQ3R.js
│   │   │       ├── com-NFP3O76O.js
│   │   │       ├── com-NSXJ3MYN.js
│   │   │       ├── com-O32AFMCX.js
│   │   │       ├── com-O7HEL5UM.js
│   │   │       ├── com-OKQHPEYA.js
│   │   │       ├── com-OLXXEOCB.js
│   │   │       ├── com-P73TZQWI.js
│   │   │       ├── com-PK4DXA46.js
│   │   │       ├── com-Q4R5QXMD.js
│   │   │       ├── com-Q7LI3IVT.js
│   │   │       ├── com-QNHV5LXE.js
│   │   │       ├── com-QQPVG7PP.js
│   │   │       ├── com-QUF6BW3N.js
│   │   │       ├── com-RCO2EJCO.js
│   │   │       ├── com-RVMYGOTN.js
│   │   │       ├── com-SD7QZXVI.js
│   │   │       ├── com-SGLYOLT6.js
│   │   │       ├── com-SGOLCA56.js
│   │   │       ├── com-SH3JOPDV.js
│   │   │       ├── com-SKB3SMG6.js
│   │   │       ├── com-SMDDEG7M.js
│   │   │       ├── com-SPRTZXVD.js
│   │   │       ├── com-TDMJBI2M.js
│   │   │       ├── com-TE3IRJVG.js
│   │   │       ├── com-TH3B64WW.js
│   │   │       ├── com-TV4K6JFU.js
│   │   │       ├── com-UGZ7W7CO.js
│   │   │       ├── com-UJZJA6SZ.js
│   │   │       ├── com-URZWZY6W.js
│   │   │       ├── com-USI3H3ZY.js
│   │   │       ├── com-UUE4VT6F.js
│   │   │       ├── com-UWJR5TCW.js
│   │   │       ├── com-UYAKF2N2.js
│   │   │       ├── com-V5JX4VHE.js
│   │   │       ├── com-VCBNOXWU.js
│   │   │       ├── com-VMFG63WD.js
│   │   │       ├── com-VV2KAHH7.js
│   │   │       ├── com-WWOKZBON.js
│   │   │       ├── com-X7JZBOMI.js
│   │   │       ├── com-XBDXJT7H.js
│   │   │       ├── com-XCMJDOF3.js
│   │   │       ├── com-XIFKBSI7.js
│   │   │       ├── com-XUD7P7EW.js
│   │   │       ├── com-YMKJ5J5V.js
│   │   │       ├── com-Z7KH6LCA.js
│   │   │       ├── com-ZCJBLCGU.js
│   │   │       ├── com-ZFAFSEQR.js
│   │   │       ├── com-ZL3AON34.js
│   │   │       ├── com-ZRV5E3J2.js
│   │   │       ├── com-ZU576A7T.js
│   │   │       ├── com-ZXAV47A3.js
│   │   │       ├── com.bitget-2APLDUWF.js
│   │   │       ├── com.blanqlabs-SYJXQAS6.js
│   │   │       ├── com.blazpay-G2RYDJ7L.js
│   │   │       ├── com.brave-D3ZUHE7V.js
│   │   │       ├── com.coinbase-XCXEA6KF.js
│   │   │       ├── com.coolbitx-54F2B4QS.js
│   │   │       ├── com.crypto-53A63ZCL.js
│   │   │       ├── com.elrond.maiar-CPDDYEOU.js
│   │   │       ├── com.fastex-OSMD2QUY.js
│   │   │       ├── com.feralfile-6FVJKEDQ.js
│   │   │       ├── com.hashpack-VBVIF33I.js
│   │   │       ├── com.meld-U3J7XNQI.js
│   │   │       ├── com.moongate-IFYOW5HA.js
│   │   │       ├── com.mpcvault-5RS5XOJS.js
│   │   │       ├── com.okex-ASVE2B3U.js
│   │   │       ├── com.poolsmobility-MPUANJAV.js
│   │   │       ├── com.robinhood-ZVFBQFK2.js
│   │   │       ├── com.roninchain-VOI4TK6H.js
│   │   │       ├── com.saakuru-3DH4OCRJ.js
│   │   │       ├── com.sabay-NHKDAQVI.js
│   │   │       ├── com.trustwallet-QTE52ZJ2.js
│   │   │       ├── com.walletconnect-QWEQRBQR.js
│   │   │       ├── concat-hex-2F4R6DIF.js
│   │   │       ├── contract-GEGWMZWS.js
│   │   │       ├── controller-W2QS5UC4.js
│   │   │       ├── de-BT7LP6QO.js
│   │   │       ├── de-IU2DXG5T.js
│   │   │       ├── de-OKZ4QL64.js
│   │   │       ├── de-WT7ZYIRL.js
│   │   │       ├── decimals-OWVEHM45.js
│   │   │       ├── dev-CGZJG7WM.js
│   │   │       ├── digital-TWPYUQDY.js
│   │   │       ├── dist-7FXCYDP5.js
│   │   │       ├── dist-JQ3EDHJY.js
│   │   │       ├── dist-UZFCJX5W.js
│   │   │       ├── download-F3MJUB7B.js
│   │   │       ├── embedded-5JDH6LO6.js
│   │   │       ├── en-BRYFEMZN.js
│   │   │       ├── en-GF35UFXC.js
│   │   │       ├── en-SB77EPNW.js
│   │   │       ├── en-YMFAQ6ZL.js
│   │   │       ├── encode-4DQKNRWC.js
│   │   │       ├── encodeAbiParameters-UF4TQP7R.js
│   │   │       ├── engine-L3LTYQXR.js
│   │   │       ├── es-7RULN4RE.js
│   │   │       ├── es-LKAELXTV.js
│   │   │       ├── es-RWVLHLPZ.js
│   │   │       ├── es-UEK7RLXG.js
│   │   │       ├── estimate-l1-fee-B2LECVR2.js
│   │   │       ├── eth_estimateGas-FTRTBPEZ.js
│   │   │       ├── eth_getTransactionCount-ITCGR7E4.js
│   │   │       ├── extractIPFS-GFMPIVLN.js
│   │   │       ├── fetch-proofs-for-claimers-NQNU6O2D.js
│   │   │       ├── fi-AVCNJCZU.js
│   │   │       ├── fi-MH46U2IW.js
│   │   │       ├── finance-43KN2CYS.js
│   │   │       ├── finance-B7FMBRBP.js
│   │   │       ├── finance-BPBXKFLP.js
│   │   │       ├── finance-GAXWYNOQ.js
│   │   │       ├── finance-ROSDRD4N.js
│   │   │       ├── finance-TUEUOJYQ.js
│   │   │       ├── finance-XE4OWK2N.js
│   │   │       ├── finance.soulswap-JBPBKOGF.js
│   │   │       ├── fr-2PO34MSK.js
│   │   │       ├── fr-DKOBC2XB.js
│   │   │       ├── fr-HCZLKSNB.js
│   │   │       ├── fr-HZ64NS6B.js
│   │   │       ├── fun-LYGVTTTP.js
│   │   │       ├── get-ecosystem-wallet-info-HRASHZ5U.js
│   │   │       ├── getActiveClaimCondition-235FYDU5.js
│   │   │       ├── getActiveClaimCondition-5NTTTBA4.js
│   │   │       ├── getActiveClaimCondition-X4R3SWY5.js
│   │   │       ├── getApprovalForTransaction-RG2PM2ZX.js
│   │   │       ├── getApproved-UMVYKWJJ.js
│   │   │       ├── getBalance-X6K77NBX.js
│   │   │       ├── getContractMetadata-X5DE2MGS.js
│   │   │       ├── getCurrencyMetadata-VXZEATQ4.js
│   │   │       ├── getInstalledModules-WVGJ43EF.js
│   │   │       ├── getNFT-CWYYXL36.js
│   │   │       ├── getNFT-T7TVIXIV.js
│   │   │       ├── gg-7LOCEDJU.js
│   │   │       ├── global-ASRTB772.js
│   │   │       ├── group.com.flowfoundation-Y5NGFX4Q.js
│   │   │       ├── hashMessage-NHJEFPJB.js
│   │   │       ├── id-JCDDJMLP.js
│   │   │       ├── id-UVORZUHE.js
│   │   │       ├── id.co-KFRG5HP3.js
│   │   │       ├── im-ALROWXFB.js
│   │   │       ├── image-22XCL4QC.js
│   │   │       ├── image-24U2WBYW.js
│   │   │       ├── image-25FYMXPP.js
│   │   │       ├── image-2C6TWMD7.js
│   │   │       ├── image-2DLIROHM.js
│   │   │       ├── image-2DVLCOT5.js
│   │   │       ├── image-2MC3OA63.js
│   │   │       ├── image-2NWF3JOZ.js
│   │   │       ├── image-2O2NSLAV.js
│   │   │       ├── image-2P2TSVGP.js
│   │   │       ├── image-2TID5QYA.js
│   │   │       ├── image-2VBH6P4I.js
│   │   │       ├── image-2XQ227AO.js
│   │   │       ├── image-3BBR6ZUL.js
│   │   │       ├── image-3BYLTMYN.js
│   │   │       ├── image-3J2YWWMT.js
│   │   │       ├── image-3NR45HO4.js
│   │   │       ├── image-3PHNAY7F.js
│   │   │       ├── image-3QRD6CSU.js
│   │   │       ├── image-3RZJFPYY.js
│   │   │       ├── image-3SSVXVQA.js
│   │   │       ├── image-3WCIGCJE.js
│   │   │       ├── image-3XPXEUVI.js
│   │   │       ├── image-43VCVTQW.js
│   │   │       ├── image-45QC47QJ.js
│   │   │       ├── image-47XQBRNK.js
│   │   │       ├── image-4B3NOTPE.js
│   │   │       ├── image-4BA3AXSR.js
│   │   │       ├── image-4E3QCNWY.js
│   │   │       ├── image-4KSYJONE.js
│   │   │       ├── image-4MUDZ5WJ.js
│   │   │       ├── image-4NVIL47X.js
│   │   │       ├── image-4R5252N7.js
│   │   │       ├── image-4TRY3NEW.js
│   │   │       ├── image-4UXLJEY6.js
│   │   │       ├── image-4XAPYK5Y.js
│   │   │       ├── image-4ZXADMKV.js
│   │   │       ├── image-52SKIAAZ.js
│   │   │       ├── image-53R3T2KM.js
│   │   │       ├── image-5B72RBCK.js
│   │   │       ├── image-5C7T5MCW.js
│   │   │       ├── image-5DMCMTIS.js
│   │   │       ├── image-5EEVHG37.js
│   │   │       ├── image-5ESOAIQD.js
│   │   │       ├── image-5KGJZFSW.js
│   │   │       ├── image-5N5BSRVW.js
│   │   │       ├── image-5QOWOT7K.js
│   │   │       ├── image-5ZJILWQW.js
│   │   │       ├── image-63JBKI3J.js
│   │   │       ├── image-64EL5CZZ.js
│   │   │       ├── image-6GWDZO4B.js
│   │   │       ├── image-6HQIDK6K.js
│   │   │       ├── image-6MCAWLUJ.js
│   │   │       ├── image-6ORYMNNS.js
│   │   │       ├── image-6PJHCB7N.js
│   │   │       ├── image-6UEQME7W.js
│   │   │       ├── image-6V6UQQYW.js
│   │   │       ├── image-6VDTM3JY.js
│   │   │       ├── image-6VK7QNZB.js
│   │   │       ├── image-77YEUPFU.js
│   │   │       ├── image-7EORRWO4.js
│   │   │       ├── image-7FZSFD63.js
│   │   │       ├── image-7KY4GSTR.js
│   │   │       ├── image-7O3C362W.js
│   │   │       ├── image-7OU6UVPL.js
│   │   │       ├── image-7Q42EE45.js
│   │   │       ├── image-7SUEPBLK.js
│   │   │       ├── image-7TE6IAEE.js
│   │   │       ├── image-7TSPO7Y6.js
│   │   │       ├── image-7U7UXPGY.js
│   │   │       ├── image-7YYGXP6N.js
│   │   │       ├── image-7ZYGDOS3.js
│   │   │       ├── image-A3KPWLYO.js
│   │   │       ├── image-AHWRIMZI.js
│   │   │       ├── image-AI7WZWEM.js
│   │   │       ├── image-AR3FQDWK.js
│   │   │       ├── image-ARHGIDNB.js
│   │   │       ├── image-ARYWL2OH.js
│   │   │       ├── image-AXBX7NPH.js
│   │   │       ├── image-AZATAZUW.js
│   │   │       ├── image-B42LGYLK.js
│   │   │       ├── image-BAPZ7ZQ5.js
│   │   │       ├── image-BAWNJLDB.js
│   │   │       ├── image-BAWP6F3E.js
│   │   │       ├── image-BERR6HPQ.js
│   │   │       ├── image-BFCLTXKV.js
│   │   │       ├── image-BG36EIFN.js
│   │   │       ├── image-BG7Q7U5Z.js
│   │   │       ├── image-BKAIFC5N.js
│   │   │       ├── image-BNSPIEBR.js
│   │   │       ├── image-BNWDNWZ7.js
│   │   │       ├── image-BPJ747KI.js
│   │   │       ├── image-BZHOLM24.js
│   │   │       ├── image-C3DYJZTD.js
│   │   │       ├── image-CFMPEXUH.js
│   │   │       ├── image-CIXW5BVB.js
│   │   │       ├── image-CJLAIZ3U.js
│   │   │       ├── image-CP6E35DJ.js
│   │   │       ├── image-CPWAGIZP.js
│   │   │       ├── image-CTC6AICN.js
│   │   │       ├── image-CTUNVIGS.js
│   │   │       ├── image-CTWYLNEW.js
│   │   │       ├── image-CVFAIAQD.js
│   │   │       ├── image-CVW43WHN.js
│   │   │       ├── image-CWA3VVUM.js
│   │   │       ├── image-CX4RMA4S.js
│   │   │       ├── image-CZEVKSDD.js
│   │   │       ├── image-D2BFLLX6.js
│   │   │       ├── image-D3PKEAGG.js
│   │   │       ├── image-D5ZHP4L6.js
│   │   │       ├── image-D6HXSW23.js
│   │   │       ├── image-DFLQ2XFN.js
│   │   │       ├── image-DGAWLDDT.js
│   │   │       ├── image-DJJHB4NK.js
│   │   │       ├── image-DQRQW2SI.js
│   │   │       ├── image-DX3LHC5E.js
│   │   │       ├── image-DXG4ARNI.js
│   │   │       ├── image-DZDKYDL2.js
│   │   │       ├── image-EA2TAA73.js
│   │   │       ├── image-EA6HZGAP.js
│   │   │       ├── image-EHTA7ND2.js
│   │   │       ├── image-EIETVCAX.js
│   │   │       ├── image-ENIPULMK.js
│   │   │       ├── image-EQG2WO73.js
│   │   │       ├── image-EWL7XSZS.js
│   │   │       ├── image-EZTUCZIK.js
│   │   │       ├── image-F3W3U35F.js
│   │   │       ├── image-FAAEH6VN.js
│   │   │       ├── image-FAMMBKWU.js
│   │   │       ├── image-FC2BPU25.js
│   │   │       ├── image-FFW5ALAV.js
│   │   │       ├── image-FIGWZRNB.js
│   │   │       ├── image-FK2QQOEC.js
│   │   │       ├── image-FL2436IW.js
│   │   │       ├── image-FNGTNT45.js
│   │   │       ├── image-FT5E5S2S.js
│   │   │       ├── image-FUZODB6Q.js
│   │   │       ├── image-FX3DIZMC.js
│   │   │       ├── image-FY6NEZXX.js
│   │   │       ├── image-G3UZPUMP.js
│   │   │       ├── image-G4OOMJFL.js
│   │   │       ├── image-G4VVMDLA.js
│   │   │       ├── image-G566PLZR.js
│   │   │       ├── image-G77AOOTY.js
│   │   │       ├── image-GK45NHUD.js
│   │   │       ├── image-GN5KL5XH.js
│   │   │       ├── image-GNG4HAZI.js
│   │   │       ├── image-GRZ6ITK5.js
│   │   │       ├── image-GSMGI7VJ.js
│   │   │       ├── image-GSTKM7MD.js
│   │   │       ├── image-GTS26XGE.js
│   │   │       ├── image-GXMDZVE7.js
│   │   │       ├── image-H66KD67W.js
│   │   │       ├── image-HN4UT2MP.js
│   │   │       ├── image-HNJVUIHP.js
│   │   │       ├── image-HOZVYDVK.js
│   │   │       ├── image-HRDDJY2V.js
│   │   │       ├── image-HTVYZ4M3.js
│   │   │       ├── image-HVHSAD3I.js
│   │   │       ├── image-HXAPNAO4.js
│   │   │       ├── image-I2EVY3PN.js
│   │   │       ├── image-I2F4TK64.js
│   │   │       ├── image-I63OXZPK.js
│   │   │       ├── image-IEQIMBFO.js
│   │   │       ├── image-IFJOAVNI.js
│   │   │       ├── image-IGUKS27J.js
│   │   │       ├── image-IK4KYWSE.js
│   │   │       ├── image-IKZ2FUDX.js
│   │   │       ├── image-IO2WKRLV.js
│   │   │       ├── image-IW5JZSWC.js
│   │   │       ├── image-IXHLX5GF.js
│   │   │       ├── image-J26M6VNU.js
│   │   │       ├── image-J3BDNCMB.js
│   │   │       ├── image-J3VWG5MZ.js
│   │   │       ├── image-J5PWF63O.js
│   │   │       ├── image-J6OTD3HY.js
│   │   │       ├── image-J72YUI7L.js
│   │   │       ├── image-JBLGJN6S.js
│   │   │       ├── image-JCM4SCK7.js
│   │   │       ├── image-JCMNNBDZ.js
│   │   │       ├── image-JGVAVBEO.js
│   │   │       ├── image-JIBY7LRH.js
│   │   │       ├── image-JRV26T7R.js
│   │   │       ├── image-JVTGPVY4.js
│   │   │       ├── image-JVUHELHQ.js
│   │   │       ├── image-K423YJHO.js
│   │   │       ├── image-K675SLCQ.js
│   │   │       ├── image-KAKKP25H.js
│   │   │       ├── image-KBI4EQQC.js
│   │   │       ├── image-KDIH7RV7.js
│   │   │       ├── image-KERZY3VS.js
│   │   │       ├── image-KFBVQYIK.js
│   │   │       ├── image-KFCJWUYA.js
│   │   │       ├── image-KHNJTNG5.js
│   │   │       ├── image-KI6G2NXA.js
│   │   │       ├── image-KLR4DGUS.js
│   │   │       ├── image-KMUGR2JC.js
│   │   │       ├── image-KNB5HTQS.js
│   │   │       ├── image-KRKMGIRW.js
│   │   │       ├── image-KTCD3ACC.js
│   │   │       ├── image-KVUL54ZL.js
│   │   │       ├── image-KWDZM3JO.js
│   │   │       ├── image-KXOZP327.js
│   │   │       ├── image-KYZRZXTL.js
│   │   │       ├── image-L64YUXOP.js
│   │   │       ├── image-L7CIHOLP.js
│   │   │       ├── image-L7F3ZTNT.js
│   │   │       ├── image-L7XMXCCE.js
│   │   │       ├── image-LDYJOQU6.js
│   │   │       ├── image-LH6FUJDR.js
│   │   │       ├── image-LIVCGAOB.js
│   │   │       ├── image-LLODPB4V.js
│   │   │       ├── image-LOHR2RIE.js
│   │   │       ├── image-LPCCHEBL.js
│   │   │       ├── image-LPMTTLXQ.js
│   │   │       ├── image-LRZBNW6B.js
│   │   │       ├── image-LVVWGSGE.js
│   │   │       ├── image-LY3RZ44R.js
│   │   │       ├── image-LZY7JTRH.js
│   │   │       ├── image-M3IUK3S6.js
│   │   │       ├── image-M4Z3YR4Z.js
│   │   │       ├── image-MBAEXQG7.js
│   │   │       ├── image-MBFXNJFS.js
│   │   │       ├── image-MDU42EYU.js
│   │   │       ├── image-MJ7T6PNW.js
│   │   │       ├── image-MJJT532J.js
│   │   │       ├── image-MO47H6ZA.js
│   │   │       ├── image-MOU2RL63.js
│   │   │       ├── image-MRBGWX2E.js
│   │   │       ├── image-MTJY6UAP.js
│   │   │       ├── image-MUVOHF4W.js
│   │   │       ├── image-MYNVEIRO.js
│   │   │       ├── image-N53KCP2W.js
│   │   │       ├── image-NAO2HSQA.js
│   │   │       ├── image-NBHYUHD2.js
│   │   │       ├── image-NBPCTXNN.js
│   │   │       ├── image-NDYGNMMC.js
│   │   │       ├── image-NEI5WDWA.js
│   │   │       ├── image-NFV4FTVS.js
│   │   │       ├── image-NG66JYBW.js
│   │   │       ├── image-NG6MRBT7.js
│   │   │       ├── image-NJXZFZEG.js
│   │   │       ├── image-NOPIDNPE.js
│   │   │       ├── image-O3FWYAMJ.js
│   │   │       ├── image-O63UCCVG.js
│   │   │       ├── image-OAPLK3NK.js
│   │   │       ├── image-OCLQH6ET.js
│   │   │       ├── image-ODMYDNAD.js
│   │   │       ├── image-OGVGI6IX.js
│   │   │       ├── image-OI2FPOZK.js
│   │   │       ├── image-OMOLG6BP.js
│   │   │       ├── image-OMOWTLJH.js
│   │   │       ├── image-OOBSXLNR.js
│   │   │       ├── image-ORMFBD3D.js
│   │   │       ├── image-OROPDYCP.js
│   │   │       ├── image-OS6F5ASF.js
│   │   │       ├── image-OX5V2TE5.js
│   │   │       ├── image-OYVSS2NW.js
│   │   │       ├── image-P3F6JWUP.js
│   │   │       ├── image-P5CCQF6U.js
│   │   │       ├── image-P7A7UY6Q.js
│   │   │       ├── image-PFLIBWNB.js
│   │   │       ├── image-PG2LM3EN.js
│   │   │       ├── image-PIHQFTZW.js
│   │   │       ├── image-PJ56ZJZI.js
│   │   │       ├── image-PNENEROM.js
│   │   │       ├── image-POSUEFBS.js
│   │   │       ├── image-PPYVKDO3.js
│   │   │       ├── image-PRRYYAGC.js
│   │   │       ├── image-PX7PII22.js
│   │   │       ├── image-PXXJ7YGR.js
│   │   │       ├── image-PY3RCMKE.js
│   │   │       ├── image-PYNIXTYI.js
│   │   │       ├── image-Q5EEGXM4.js
│   │   │       ├── image-QBQHKWYU.js
│   │   │       ├── image-QEGCG76B.js
│   │   │       ├── image-QEJ5TH25.js
│   │   │       ├── image-QFDO4ERO.js
│   │   │       ├── image-QMD3UXYM.js
│   │   │       ├── image-QTWRL6IY.js
│   │   │       ├── image-QZKB4QH2.js
│   │   │       ├── image-R2PA3K44.js
│   │   │       ├── image-R3QO5B5O.js
│   │   │       ├── image-R5DDRXEO.js
│   │   │       ├── image-R5MXAYSI.js
│   │   │       ├── image-R65TRIAG.js
│   │   │       ├── image-R6MZNPDW.js
│   │   │       ├── image-R6ZY7ODL.js
│   │   │       ├── image-RBD6CLZB.js
│   │   │       ├── image-RCPUSQIA.js
│   │   │       ├── image-RCVINJ4L.js
│   │   │       ├── image-RJ6X2NMJ.js
│   │   │       ├── image-RLLVBJI7.js
│   │   │       ├── image-RPHSLWEQ.js
│   │   │       ├── image-RUAKVMHJ.js
│   │   │       ├── image-SDS6MUPN.js
│   │   │       ├── image-SFV565LD.js
│   │   │       ├── image-SHZEEMLS.js
│   │   │       ├── image-SKFBWVXM.js
│   │   │       ├── image-SON77BIL.js
│   │   │       ├── image-SPBIVFWA.js
│   │   │       ├── image-SQEC6SWZ.js
│   │   │       ├── image-SZ53EEZI.js
│   │   │       ├── image-SZDGRZKO.js
│   │   │       ├── image-T4K2HHHO.js
│   │   │       ├── image-T5624ZCD.js
│   │   │       ├── image-T7NA4A2Y.js
│   │   │       ├── image-TBQHCWRX.js
│   │   │       ├── image-TCNXR5Y6.js
│   │   │       ├── image-TGDIBLJ5.js
│   │   │       ├── image-TJPXCNVF.js
│   │   │       ├── image-TLCK7IBC.js
│   │   │       ├── image-TLL7ZWDJ.js
│   │   │       ├── image-TLQGVZIE.js
│   │   │       ├── image-TVOSPHN4.js
│   │   │       ├── image-TW36VKLS.js
│   │   │       ├── image-U2DNOUXB.js
│   │   │       ├── image-U74NACFH.js
│   │   │       ├── image-UEMJEQYK.js
│   │   │       ├── image-UFGCOQGW.js
│   │   │       ├── image-UGV6XSD5.js
│   │   │       ├── image-UHZP3BTN.js
│   │   │       ├── image-UR6R66GX.js
│   │   │       ├── image-UT6D5LIM.js
│   │   │       ├── image-UY6RYQ2N.js
│   │   │       ├── image-V5HQDG55.js
│   │   │       ├── image-V5M6SPNZ.js
│   │   │       ├── image-V7OWVN52.js
│   │   │       ├── image-VB7IUURT.js
│   │   │       ├── image-VF6EIX5D.js
│   │   │       ├── image-VKEDKKKR.js
│   │   │       ├── image-VLI6ZCKX.js
│   │   │       ├── image-VMYFLQHY.js
│   │   │       ├── image-VNMGUJNB.js
│   │   │       ├── image-VTXLRGUL.js
│   │   │       ├── image-VUQ2UL4L.js
│   │   │       ├── image-VVOWBOZ5.js
│   │   │       ├── image-VW2FN7E5.js
│   │   │       ├── image-VYS6PNRX.js
│   │   │       ├── image-WAEURFBG.js
│   │   │       ├── image-WCQARS7C.js
│   │   │       ├── image-WD5JWD6U.js
│   │   │       ├── image-WE7PFB2W.js
│   │   │       ├── image-WEIHHJID.js
│   │   │       ├── image-WFPL2XOD.js
│   │   │       ├── image-WFYTTEWO.js
│   │   │       ├── image-WGY4E5ZS.js
│   │   │       ├── image-WJBIEWRP.js
│   │   │       ├── image-WLVFTPS6.js
│   │   │       ├── image-WRJBQNVE.js
│   │   │       ├── image-WRTS63PY.js
│   │   │       ├── image-WXZTVPXW.js
│   │   │       ├── image-WZMMOWKO.js
│   │   │       ├── image-X6M72D7S.js
│   │   │       ├── image-X75OW5JK.js
│   │   │       ├── image-XA4X52SC.js
│   │   │       ├── image-XD5TFSHC.js
│   │   │       ├── image-XFK44ZH7.js
│   │   │       ├── image-XIC6EKNY.js
│   │   │       ├── image-XIG5YKUC.js
│   │   │       ├── image-XLAW77N3.js
│   │   │       ├── image-XMKRZUH2.js
│   │   │       ├── image-XMXXH2OG.js
│   │   │       ├── image-XNCYDJC5.js
│   │   │       ├── image-XOUIMWYP.js
│   │   │       ├── image-XPJLKRRI.js
│   │   │       ├── image-XUGPYK2I.js
│   │   │       ├── image-XWTER34E.js
│   │   │       ├── image-Y6FK2F2P.js
│   │   │       ├── image-YA6DLLJV.js
│   │   │       ├── image-YB4GRPL2.js
│   │   │       ├── image-YBCZSQ3A.js
│   │   │       ├── image-YBPOXOCZ.js
│   │   │       ├── image-YBTBDTUR.js
│   │   │       ├── image-YCZSZUXE.js
│   │   │       ├── image-YFLBT3YJ.js
│   │   │       ├── image-YFUELAZQ.js
│   │   │       ├── image-YJF46UIP.js
│   │   │       ├── image-Z2CATCDR.js
│   │   │       ├── image-Z5YWXRKQ.js
│   │   │       ├── image-ZEXGTQP2.js
│   │   │       ├── image-ZIEWC7ZM.js
│   │   │       ├── image-ZNKOF6C2.js
│   │   │       ├── image-ZOCXRE6K.js
│   │   │       ├── image-ZPU7UHI2.js
│   │   │       ├── image-ZTVWJS7Y.js
│   │   │       ├── image-ZZDK3IJV.js
│   │   │       ├── in-app-core-HIWEYDMM.js
│   │   │       ├── in-app-wallet-calls-GQSQW7CK.js
│   │   │       ├── in-app-wallet-capabilities-4KBZBWHO.js
│   │   │       ├── inApp-RQNC3GM2.js
│   │   │       ├── inc-2JDOS23Q.js
│   │   │       ├── index.es-AMKWX7QZ.js
│   │   │       ├── injected-LISAWEIO.js
│   │   │       ├── io-24QRWA4Y.js
│   │   │       ├── io-24YA5BRN.js
│   │   │       ├── io-2GPQFRQF.js
│   │   │       ├── io-2OUEZVZU.js
│   │   │       ├── io-2ZBQUD2Z.js
│   │   │       ├── io-3FD4NDEY.js
│   │   │       ├── io-3SGNGSBU.js
│   │   │       ├── io-3U2SLLGY.js
│   │   │       ├── io-4K37O2UO.js
│   │   │       ├── io-57PCDAYK.js
│   │   │       ├── io-5FGKYHDW.js
│   │   │       ├── io-6HD3H3FJ.js
│   │   │       ├── io-6JQ4CHJH.js
│   │   │       ├── io-6LSXSNGH.js
│   │   │       ├── io-7F2E4V7R.js
│   │   │       ├── io-ANOLLYWK.js
│   │   │       ├── io-B43YO5G7.js
│   │   │       ├── io-BH2JNQLL.js
│   │   │       ├── io-CTRCTP32.js
│   │   │       ├── io-CWMDB2MU.js
│   │   │       ├── io-D255FR7U.js
│   │   │       ├── io-D6Z3AKMH.js
│   │   │       ├── io-DIWAXNTD.js
│   │   │       ├── io-DK5QUX7W.js
│   │   │       ├── io-DNXFQ4K2.js
│   │   │       ├── io-DXHXE7IX.js
│   │   │       ├── io-E2M2HE5Z.js
│   │   │       ├── io-E6S6IBUY.js
│   │   │       ├── io-EA2JOUTZ.js
│   │   │       ├── io-FVLW4E3K.js
│   │   │       ├── io-GQDRISAH.js
│   │   │       ├── io-H2C73JK2.js
│   │   │       ├── io-H454JI3W.js
│   │   │       ├── io-HBM5KOQE.js
│   │   │       ├── io-J7ET3CPL.js
│   │   │       ├── io-JGARBW27.js
│   │   │       ├── io-JWG2DSVL.js
│   │   │       ├── io-K5M75KPN.js
│   │   │       ├── io-KUZCCGFO.js
│   │   │       ├── io-KZJ22VPA.js
│   │   │       ├── io-L6UQ2STJ.js
│   │   │       ├── io-LVXFK7U5.js
│   │   │       ├── io-LX45HK7A.js
│   │   │       ├── io-MMDEOZ3N.js
│   │   │       ├── io-N5RGMBCH.js
│   │   │       ├── io-NH2GD2IR.js
│   │   │       ├── io-NVBZJAWM.js
│   │   │       ├── io-O7JBQJEM.js
│   │   │       ├── io-PJ4YO55N.js
│   │   │       ├── io-PV6OW5YR.js
│   │   │       ├── io-PVGHQBA3.js
│   │   │       ├── io-QLQLOVVJ.js
│   │   │       ├── io-RSWIM3NG.js
│   │   │       ├── io-RZ7W5PGA.js
│   │   │       ├── io-S3TORZWD.js
│   │   │       ├── io-T6NWZUPR.js
│   │   │       ├── io-TLH32OUQ.js
│   │   │       ├── io-TLTTCINM.js
│   │   │       ├── io-TRTOW6FM.js
│   │   │       ├── io-TRUR62J5.js
│   │   │       ├── io-TZCRE2KR.js
│   │   │       ├── io-UP4NGDBV.js
│   │   │       ├── io-UTHDBEVN.js
│   │   │       ├── io-WHYZVMCN.js
│   │   │       ├── io-WTWNTQY2.js
│   │   │       ├── io-X4AWA27Q.js
│   │   │       ├── io-X54FGMH5.js
│   │   │       ├── io-XAR6YN2H.js
│   │   │       ├── io-XEVP2DVS.js
│   │   │       ├── io-XFMVSGBX.js
│   │   │       ├── io-XMCECLIZ.js
│   │   │       ├── io-XXPRYPG2.js
│   │   │       ├── io-YAK5FOPT.js
│   │   │       ├── io-YKR37A4G.js
│   │   │       ├── io-YSSN6F3W.js
│   │   │       ├── io-Z5GSMWWC.js
│   │   │       ├── io-ZIBKO2EM.js
│   │   │       ├── io.1inch-3Q4NZZ2L.js
│   │   │       ├── io.alpha-u.wallet-RANY436R.js
│   │   │       ├── io.armana-FQHHA7CM.js
│   │   │       ├── io.leapwallet-GH33NGTJ.js
│   │   │       ├── io.loopring-BX5AMZUR.js
│   │   │       ├── io.magiceden-H3CGBW6M.js
│   │   │       ├── io.unagi-YSJDUHMV.js
│   │   │       ├── io.uptn-GWS6HTWS.js
│   │   │       ├── io.zerion-DKRTCZVY.js
│   │   │       ├── is-UU4FXVPC.js
│   │   │       ├── is-contract-deployed-AZVYEI5B.js
│   │   │       ├── isApprovedForAll-CG3FQCVQ.js
│   │   │       ├── isApprovedForAll-JGBKL36G.js
│   │   │       ├── it-Y3SJTOXS.js
│   │   │       ├── ja-6MH4WP2Z.js
│   │   │       ├── ja-HG2757OL.js
│   │   │       ├── ja-MCXBRC6G.js
│   │   │       ├── ja-PZYAXXAL.js
│   │   │       ├── kr-LSVS4UQW.js
│   │   │       ├── kr-O56ZYU3R.js
│   │   │       ├── kr-QIL3MJCP.js
│   │   │       ├── kr-XDCZ7IIG.js
│   │   │       ├── land-CKBS6ZRZ.js
│   │   │       ├── live-5DC3MAHO.js
│   │   │       ├── llc-JHHSY2C6.js
│   │   │       ├── me-3MEDDZC5.js
│   │   │       ├── me-KVZQT25O.js
│   │   │       ├── me-KZ3JFV6V.js
│   │   │       ├── me-N5NHUYM7.js
│   │   │       ├── me-NGGLTLQU.js
│   │   │       ├── me.komet-E7D6F2JB.js
│   │   │       ├── mipdStore-HEJSLGN7.js
│   │   │       ├── money-5LMST26O.js
│   │   │       ├── money-E4VOZHJR.js
│   │   │       ├── money-SUJPFHWI.js
│   │   │       ├── native-NEGONUYD.js
│   │   │       ├── net-4I6DBKNS.js
│   │   │       ├── net-KQRWOTI5.js
│   │   │       ├── net-Q5SVTUAO.js
│   │   │       ├── net-TAG5PSHX.js
│   │   │       ├── net-Z743Z374.js
│   │   │       ├── net.spatium-EBSLJIM4.js
│   │   │       ├── network-3HZ5XME7.js
│   │   │       ├── network-64V4ODDY.js
│   │   │       ├── network-7CN3ZGB5.js
│   │   │       ├── network-FCNDYIML.js
│   │   │       ├── network-FHGUIPWM.js
│   │   │       ├── network-OTQ66RXU.js
│   │   │       ├── network-WFECV2ZU.js
│   │   │       ├── nl.greenhood-2VCIICQQ.js
│   │   │       ├── one.metapro-JZZTCOTQ.js
│   │   │       ├── one.mixin-AYEP2MDG.js
│   │   │       ├── online-4UBMQVRH.js
│   │   │       ├── openzeppelin-3CQYP2BQ.js
│   │   │       ├── org-3WSS4ISS.js
│   │   │       ├── org-5JOGDD4T.js
│   │   │       ├── org-6JIS4GGD.js
│   │   │       ├── org-BHEY6VU5.js
│   │   │       ├── org-DASW2CEB.js
│   │   │       ├── org-IQR2KWLE.js
│   │   │       ├── org-JCLIAWVT.js
│   │   │       ├── org-NOFWJHNU.js
│   │   │       ├── org-PJ6LCHSF.js
│   │   │       ├── org-Q7GOFRGY.js
│   │   │       ├── org-RVVOAAYD.js
│   │   │       ├── org-U6MXPNQX.js
│   │   │       ├── org-XS7DVMFS.js
│   │   │       ├── ownerOf-JJ32SN7R.js
│   │   │       ├── package.json
│   │   │       ├── passkeys-TWQKIUUE.js
│   │   │       ├── pk-OX3FADHO.js
│   │   │       ├── prepare-transaction-ENVXVTJF.js
│   │   │       ├── pro-GX6XLDQ3.js
│   │   │       ├── pro-PKIFCXCH.js
│   │   │       ├── pro-VKWWWAVU.js
│   │   │       ├── pub-BCM6XBN4.js
│   │   │       ├── react-dom_client.js
│   │   │       ├── react-router-dom.js
│   │   │       ├── react.js
│   │   │       ├── read-contract-EXVZZYXE.js
│   │   │       ├── resolveImplementation-EUNLHKQW.js
│   │   │       ├── rpc-TW3OP7F4.js
│   │   │       ├── secp256k1-AHVFPDVA.js
│   │   │       ├── send-eip712-transaction-GJNL63UQ.js
│   │   │       ├── send-gasless-transaction-VPJQYCQ5.js
│   │   │       ├── send-transaction-3VCDCFKW.js
│   │   │       ├── session-proposal-FKZO7EJB.js
│   │   │       ├── session-request-E5B34J42.js
│   │   │       ├── setApprovalForAll-WRU2AIHP.js
│   │   │       ├── setApprovalForAll-YKTONSHG.js
│   │   │       ├── sign-login-payload-EEOP3RDN.js
│   │   │       ├── smart-7AYCEGLU.js
│   │   │       ├── smart-GOSZ6KLE.js
│   │   │       ├── smart-wallet-5WA47S2O.js
│   │   │       ├── smart-wallet-capabilities-TZBEJHWD.js
│   │   │       ├── so.onekey.app-3NGOLXP4.js
│   │   │       ├── social-IGLKXP3O.js
│   │   │       ├── social-WQVOUPQP.js
│   │   │       ├── supported-sms-countries-MILFNFSC.js
│   │   │       ├── switch-chain-UAQT4AB6.js
│   │   │       ├── tech-4UEY76KS.js
│   │   │       ├── tech-C727ACOE.js
│   │   │       ├── tech-NOIENMRJ.js
│   │   │       ├── technology-4ON2FUI4.js
│   │   │       ├── technology-NIZQELB7.js
│   │   │       ├── thirdweb.js
│   │   │       ├── thirdweb_react.js
│   │   │       ├── tl-AVOH7Y5Z.js
│   │   │       ├── tl-B6Y73PTZ.js
│   │   │       ├── tl-DDFVDALG.js
│   │   │       ├── tl-O6CWFXUB.js
│   │   │       ├── trade.flooz-RHPEJ2TY.js
│   │   │       ├── units-OLWSIMOC.js
│   │   │       ├── upload-U3ZHZXSH.js
│   │   │       ├── us-A63RIC6G.js
│   │   │       ├── utils-QE6HZ2TS.js
│   │   │       ├── utils-RIDKW7H5.js
│   │   │       ├── vc.uincubator-4WN5IZUJ.js
│   │   │       ├── vi-4HLVRM5V.js
│   │   │       ├── vi-6NOSFFF7.js
│   │   │       ├── vi-7VOZ2AS3.js
│   │   │       ├── vi-JLTPQX3P.js
│   │   │       ├── wallet-ZUZOMGPE.js
│   │   │       ├── walletConnect-4SOZLMQZ.js
│   │   │       ├── web-connector-5CMXT4ED.js
│   │   │       ├── web-node-NK4RL5GU.js
│   │   │       ├── world-AAINEXQX.js
│   │   │       ├── world-IQ7VTL27.js
│   │   │       ├── world-ZNOYGYAZ.js
│   │   │       ├── world.dosi-Y2A7IFAO.js
│   │   │       ├── xyz-3DUFJPG6.js
│   │   │       ├── xyz-6TGRCCCS.js
│   │   │       ├── xyz-C2SGGGJN.js
│   │   │       ├── xyz-H7ZRM2VE.js
│   │   │       ├── xyz-JTTBORVS.js
│   │   │       ├── xyz-N4RTWSXS.js
│   │   │       ├── xyz-P3VWILEP.js
│   │   │       ├── xyz-QSKGFGJW.js
│   │   │       ├── xyz-WOO5ZF56.js
│   │   │       ├── xyz-ZHYDMTP5.js
│   │   │       ├── xyz.frontier-GCK2SAXV.js
│   │   │       ├── xyz.roam-5PWBMVLT.js
│   │   │       ├── xyz.uniultra-YQ7QTAVX.js
│   │   │       └── zone-DAJ2TSNU.js
│   │   ├── LICENSE.md
│   │   ├── index.html
│   │   ├── package.json
│   │   ├── postcss.config.js
│   │   ├── src/
│   │   │   ├── App.tsx
│   │   │   ├── Campaign/
│   │   │   │   └── [campainAddress]/
│   │   │   │       └── Page.tsx
│   │   │   ├── chains.ts
│   │   │   ├── client.ts
│   │   │   ├── components/
│   │   │   │   ├── Campaign.tsx
│   │   │   │   ├── CampaignDetail.tsx
│   │   │   │   ├── CreateCampaign.tsx
│   │   │   │   ├── Home.tsx
│   │   │   │   ├── Navbar.tsx
│   │   │   │   └── TierCard.tsx
│   │   │   ├── contants/
│   │   │   │   └── contract.tsx
│   │   │   ├── dashboard/
│   │   │   │   └── [walletAddress]/
│   │   │   │       └── page.tsx
│   │   │   ├── index.css
│   │   │   ├── main.tsx
│   │   │   └── vite-env.d.ts
│   │   ├── tailwind.config.js
│   │   ├── tsconfig.json
│   │   ├── tsconfig.node.json
│   │   └── vite.config.ts
│   └── README.md
└── README.md

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitignore
================================================
node_modules
.env
secret.json

# Hardhat files
/cache
/artifacts

# TypeChain files
/typechain
/typechain-types

# solidity-coverage files
/coverage
/coverage.json

# Hardhat Ignition default folder for deployments against a local node
ignition/deployments/chain-31337



================================================
FILE: 01-Simple Storage Full Stack Dapp/.babelrc
================================================
{
  "presets": [
    "@babel/preset-env",
    ["@babel/preset-react", { "runtime": "automatic" }],
    "@babel/preset-typescript"
  ]
}


================================================
FILE: 01-Simple Storage Full Stack Dapp/.editorconfig
================================================
root = true

[*]
indent_style = spaces
indent_size = 2
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true


================================================
FILE: 01-Simple Storage Full Stack Dapp/.eslintrc
================================================
{
  "env": {
    "browser": true,
    "es2020": true,
    "jest": true,
    "node": true
  },
  "settings": {
    "react": {
      "version": "detect"
    }
  },
  "extends": [
    "eslint:recommended",
    "plugin:react/recommended",
    "plugin:@typescript-eslint/eslint-recommended",
    "plugin:@typescript-eslint/recommended",
    "plugin:prettier/recommended",
    "plugin:tailwindcss/recommended"
  ],
  "parser": "@typescript-eslint/parser",
  "parserOptions": {
    "ecmaFeatures": {
      "jsx": true
    },
    "ecmaVersion": 11,
    "sourceType": "module"
  },
  "plugins": ["react", "react-hooks", "@typescript-eslint", "tailwindcss"],
  "rules": {
    "react-hooks/rules-of-hooks": "error",
    "react-hooks/exhaustive-deps": "warn",
    "react/prop-types": "off",
    "react/react-in-jsx-scope": "off",
    "@typescript-eslint/explicit-module-boundary-types": "off",
    "@typescript-eslint/no-non-null-assertion": "off",
    "tailwindcss/classnames-order": "warn",
    "tailwindcss/no-custom-classname": "warn",
    "tailwindcss/no-contradicting-classname": "error"
  }
}


================================================
FILE: 01-Simple Storage Full Stack Dapp/.gitignore
================================================
dist
dist-ssr
*.local

# dependencies
/node_modules
/.pnp
.pnp.js

# testing
/coverage

# next.js
/.next/
/out/

# production
/build

# misc
.DS_Store
*.pem

# debug
npm-debug.log*
yarn-debug.log*
yarn-error.log*

# local env files
.env.local
.env.development.local
.env.test.local
.env.production.local

# vercel
.vercel
.vscode

package-lock.json


================================================
FILE: 01-Simple Storage Full Stack Dapp/.jest/setup.ts
================================================
import '@testing-library/jest-dom'


================================================
FILE: 01-Simple Storage Full Stack Dapp/.prettierrc
================================================
{
  "trailingComma": "none",
  "semi": false,
  "singleQuote": true
}


================================================
FILE: 01-Simple Storage Full Stack Dapp/README.md
================================================
# Simple Storage dApp on Core
Decentralized applications (dApps) use a blockchain or on-chain smart contracts to store and reference data, rather than relying on traditional centralized databases. A common, simple dApp structure generally consists of a React.js or Vue.js front-end using Web3.js or Ethers.js to interact with smart contracts deployed to an EVM-compatible blockchain.

## What Are We Building
In this tutorial, we'll develop a simple dApp using React.js and Ethers.js that stores data in a smart contract on the Core blockchain and displays it to users. It also has the functionality to retrieve the stored number and display it to the user.

## Learning Takeaways
This tutorial will help you gain knowledge on the following learning points:

* MetaMask Wallet connectivity to Core Testnet;
* Smart contract development and deployment on Core Testnet;
* Front-end integration with the smart contract using Ethers.js library;
* Read data from a smart contract;
* Write data to a smart contract;

## Software Prerequisites
* [Git](https://git-scm.com/) v2.44.0
* [Node.js](https://nodejs.org/en) v20.11.1
* [npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) v10.2.4
* [Hardhat](https://hardhat.org/hardhat-runner/docs/getting-started#installation) v10.2.4
* [MetaMask Web Wallet Extension](https://metamask.io/download/)

## Setting up the development environment

1. Create a new directory for the project and navigate into it

```bash
mkdir dapp-
cd dapp-tutorial
```
2. Install [Hardhat](https://hardhat.org/) and [Waffle](https://getwaffle.io/)

```bash
npm init --yes
npm install --save-dev hardhat
npm install --save-dev chai @nomiclabs/hardhat-waffle
```
3. Initialize Hardhat project by running the following command

```bash
npx hardhat
```
![dapp-tutorial-1](https://github.com/coredao-org/dapp-tutorial/assets/35759187/60930a6b-6e7a-49fc-a748-d1fd20930837)

:::note
As we will using Waffle for this project and make sure to select **No** for the option "_Do you want to install this sample project's dependencies with npm (@nomicfoundation/hardhat-toolbox)? (Y/n)_"
:::

4. Once this project is initialized, you'll find the following project structure:

```bash
dapp-tutorial.
|   .gitignore
|   hardhat-config.js   (HardHat configuration file.)
|   package-lock.json
|   package.json
|   README.md
| 
+---contracts (For Solidity Smart Contracts)
|       Lock.sol
|       
+---ignition (Scripts in previous versions, contains config files that specify how smart contracts should be deployed)
|   \---modules
|           Lock.js
|                 
+---node_modules
|  
+---test (For writing and Running Tests)
|       Lock.js       
|       
```

5. Install and configure MetaMask Chrome Extension to use with Core Testnet. Refer [here](https://docs.coredao.org/docs/Dev-Guide/core-testnet-wallet-config) for a detailed guide.

6. Create a secret.json file in the root folder and store the private key of your MetaMask wallet in it. Refer [here](https://metamask.zendesk.com/hc/en-us/articles/360015290032-How-to-reveal-your-Secret-Recovery-Phrase) for details on how to get MetaMask account's private key.

```json
{"PrivateKey":"you private key, do not leak this file, do keep it absolutely safe"}
```

:::caution
Do not forget to add this file to the `.gitignore` file in the root folder of your project so that you don't accidentally check your private keys/secret phrases into a public repository. Make sure you keep this file in an absolutely safe place!
:::


7. Copy the following into your `hardhat.config.js` file

```js
/**
 * @type import('hardhat/config').HardhatUserConfig
 */

 require('@nomiclabs/hardhat-ethers');
 require("@nomiclabs/hardhat-waffle");

 const { PrivateKey } = require('./secret.json');

 module.exports = {
    defaultNetwork: 'testnet',
 
    networks: {
       hardhat: {
       },
       testnet: {
          url: 'https://rpc.test.btcs.network',
          accounts: [PrivateKey],
          chainId: 1115,
       }
    },
    solidity: {
       compilers: [
         {
            version: '0.8.9',
            settings: {
               evmVersion: 'paris',
               optimizer: {
                  enabled: true,
                  runs: 200,
               },
            },
         },
       ],
    },
    paths: {
       sources: './contracts',
       cache: './cache',
       artifacts: './artifacts',
    },
    mocha: {
       timeout: 20000,
    },
 };
 
```

## Writing Smart Contract

1. Navigate to the `contracts` folder in the root directory of your project.
2. Delete the `Lock.sol` file; create a new file `Storage.sol` and paste the following contents into it.

```javascript
// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.7.0 <0.9.0;

/**
 * @title Storage
 * @dev Store & retrieve value in a variable
 */
contract Storage {

    uint256 number;

    /**
     * @dev Store value in variable
     * @param num value to store
     */
    function store(uint256 num) public {
        number = num;
    }

    /**
     * @dev Return value 
     * @return value of 'number'
     */
    function retrieve() public view returns (uint256){
        return number;
    }
}
```
### Explanation
The `Storage` contract is a simple example that demonstrates how to store and retrieve a value using a Solidity smart contract. It consists of a state variable to hold the value and two functions to update and read this value. The `store` function allows any user to set the value, while the `retrieve` function allows any user to read the current value. This contract can be useful for understanding the basics of state variables and function visibility in Solidity. This Solidity smart contract, named `Storage`, is a simple contract that allows storing and retrieving a single `uint256` value. Here’s a detailed breakdown of its components and functionality:

#### Contract Components

1. **State Variable**:
   - `number`: A `uint256` variable that is used to store the value.

#### Contract Functions

1. **Store Function**:
   - `store(uint256 num) public`: A function that allows users to store a new value in the `number` variable. This function takes a single parameter, `num`, which is the value to be stored. The function updates the `number` variable with the provided value.
   - **Visibility**: The function is marked as `public`, meaning it can be called by any user or contract.
   - **State Change**: This function modifies the state of the contract by updating the `number` variable.

2. **Retrieve Function**:
   - `retrieve() public view returns (uint256)`: A function that returns the current value stored in the `number` variable. This function does not take any parameters and returns a `uint256` value.
   - **Visibility**: The function is marked as `public`, meaning it can be called by any user or contract.
   - **View**: The function is marked as `view`, indicating that it does not modify the state of the contract. It only reads the state.
   - **Return Value**: The function returns the value of the `number` variable.


## Compiling Smart Contract

1. To compile the `Storage` smart contract defined in the `Storage.sol`, from the root directory run the following command

```bash
npx hardhat compile
```

## Deploy and Interact with Smart Contract

1. Before deploying your smart contract on the Core Chain, it is best adviced to first run a series of tests making sure that the smart contract is working as desired. Refer to the detailed guide [here](https://docs.coredao.org/docs/Dev-Guide/hardhat#contract-testing) for more details.

2. Create a `scripts` folder in the root directory of your project. Inside this folder, create a file `deploy-and-call.js`; paste the following script into it.

```javascript
const hre = require("hardhat");

async function main() {
  const Storage = await hre.ethers.getContractFactory("Storage");
  const storage = await Storage.deploy();

  await storage.deployed();
  console.log("Storage contract deployed to:", storage.address);

  console.log("call retrieve():", await storage.retrieve())

  console.log("call store(), set value to 100")
  const tx = await storage.store(100)
  await tx.wait()
  
  console.log("call retrieve() again:", await storage.retrieve())
}

// We recommend this pattern to be able to use async/await everywhere
// and properly handle errors.
main().catch((error) => {
  console.error(error);
  process.exitCode = 1;
});
```
3. Make sure your MetaMask wallet has tCORE test tokens for the Core Testnet. Refer [here](https://docs.coredao.org/docs/Dev-Guide/core-faucet) for details on how to get tCORE tokens from Core Faucet. 

4. Run the following command from the root directory of your project, to deploy your smart contract on the Core Chain.

```bash
npx hardhat run scripts/deploy-and-call.js
```

If succesfully deployed, you will get the following output

```bash
>npx hardhat run scripts/deploy-and-call.js
Storage contract deployed to: 0x9e1326fB351FbC4efaa88F0040708F0C0d315109
call retrieve(): BigNumber { value: "0" }
call store(), set value to 100
call retrieve() again: BigNumber { value: "100" }
```
5. Make sure to save the Address of Storage Contract at which is deployed, as obtained above, this will be used for interacting with smart contract from the dApp's frontend.

🎉 Congratulations! You have successfully learned how to create, compile, and deploy a smart contract on the Core Chain Testnet using the Hardhat. 

## Interacting with Smart Contract through Frontend

⚡️ Let's create a frontend interface for interacting with the smart contract.

### Setting up Frontend

1. Clone the `dApp-tutorial` repository from GitHub using the following command.

```bash
git clone https://github.com/coredao-org/dapp-tutorial.git
```

2. Navigate into the folder `01-Basic Full Stack Dapp on Core` in the cloned `dapp-tutorial` repo.

```bash
cd dapp-tutorial
cd "01-Basic Full Stack Dapp on Core"
```

3. Install all the dependencies, i.e., node modules.

```bash
npm install
```

4. To test if things are working fine, run the application by using the following command. This will serve applciation with hot reload feature at [http://localhost:5173](http://localhost:5173/)

```bash
npm run dev
```

### Key Implementations
The application's key blockchain logic is implemented in [App.tsx](https://github.com/coredao-org/dapp-tutorial/blob/master/01-Simple%20Storage%20Full%20Stack%20Dapp/src/components/App.tsx)


1. [App.tsx (Wallet)](https://github.com/coredao-org/dapp-tutorial/blob/master/01-Simple%20Storage%20Full%20Stack%20Dapp/src/components/App.tsx#L20): logic for connecting the application to MetaMask wallet.
2. [App.tsx (Store)](https://github.com/coredao-org/dapp-tutorial/blob/master/01-Simple%20Storage%20Full%20Stack%20Dapp/src/components/App.tsx#L58): logic to write data to the Storage smart contract.
3. [App.tsx (Retrieve)](https://github.com/coredao-org/dapp-tutorial/blob/master/01-Simple%20Storage%20Full%20Stack%20Dapp/src/components/App.tsx#L87): logic to read data from the Storage smart contract.


### Adding Smart Contract Details 
1. Copy the `Storage.sol` file from the `contracts` folder in the root of oyur project and paste it into the `frontend/src/contracts` folder. 
2. Copy the address of the Storage smart contract as obtained in the section [above](#deploy-and-interact-with-smart-contract).
3. Paste this into [Line 10 of App.tsx](https://github.com/coredao-org/dapp-tutorial/blob/master/01-Simple%20Storage%20Full%20Stack%20Dapp/src/components/App.tsx#L10). 

```javascript
const contractAddress = '0x48F68BF4A1b1fE6589B9D0a5ad0dF0520582edA2'
```

4. Additionally, we'll need the ABI metadata to interact with the contract from our dApp. From the `artifacts/contracts` folder in the root of your project. Copy the `Storage.json` file and save it to the `/src/contracts` folder.

## Test Locally Using MetaMask

1. Run the command `npm run dev` from teh root of the project to start the application. This will serve applciation with at [http://localhost:5173](http://localhost:5173/)

2. Make sure that your MetaMask wallet is correctly installed and switched to Core Testnet as described in our [Core Testnet user guide](https://docs.coredao.org/docs/Dev-Guide/core-testnet-wallet-config). You'll also need to connect your MetaMask wallet to the local site.

![dapp-1](https://github.com/coredao-org/dapp-tutorial/assets/35759187/1c493569-1899-4cfe-a051-02579549f916)

3. Enter a number in the input field and click the **store** button to save it to the contract. A write action on the smart contract invokes the MetaMask wallet. Click the **Confirm** button to sign the transaction and wait for confirmation on the blockchain.

![dapp-2](https://github.com/coredao-org/dapp-tutorial/assets/35759187/21aeeb00-a2b7-402d-9909-a2d3cdb36a5d)

4. After the transaction is confirmed on the blockchain, click the **retrieve** button to read the value from the smart contract. You will notice the value has been updated.

![dapp-3](https://github.com/coredao-org/dapp-tutorial/assets/35759187/f284a64d-16dd-44ef-9f24-cd9175465e0a)

🎉 Congratulations! You've just interacted with your newly-deployed contract using your dApp's front end! You can build on the codebase by deploying and interacting with different contracts, and by adding new UI components to the website for your users.


================================================
FILE: 01-Simple Storage Full Stack Dapp/index.html
================================================
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <link rel="icon" type="image/svg+xml" href="/src/public/favicon.svg" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Core DAO Dapp tutorial</title>
  </head>
  <body>
    <div id="root"></div>
    <script type="module" src="/src/index.tsx"></script>
  </body>
</html>


================================================
FILE: 01-Simple Storage Full Stack Dapp/jest.config.js
================================================
module.exports = {
  testEnvironment: 'jsdom',
  testPathIgnorePatterns: ['/node_modules/'],
  collectCoverage: true,
  collectCoverageFrom: ['src/**/*.ts(x)'],
  setupFilesAfterEnv: ['<rootDir>/.jest/setup.ts'],
  modulePaths: ['<rootDir>/src/', '<rootDir>/.jest']
}


================================================
FILE: 01-Simple Storage Full Stack Dapp/package.json
================================================
{
  "name": "Tutorial",
  "description": "This tutorial provides a step-by-step guide on how to store and retrieve data from the Core blockchain.",
  "version": "0.1.0",
  "private": true,
  "scripts": {
    "dev": "vite",
    "build": "tsc && vite build",
    "serve": "vite preview",
    "test": "jest",
    "lint": "eslint src --max-warnings=0",
    "typecheck": "tsc --project tsconfig.json --noEmit"
  },
  "dependencies": {
    "ethers": "5.6.9",
    "react": "18.2.0",
    "react-dom": "18.2.0"
  },
  "devDependencies": {
    "@babel/core": "7.18.6",
    "@babel/preset-env": "7.18.6",
    "@babel/preset-react": "7.18.6",
    "@babel/preset-typescript": "7.18.6",
    "@testing-library/jest-dom": "5.16.4",
    "@testing-library/react": "13.3.0",
    "@types/jest": "28.1.6",
    "@types/node": "18.0.5",
    "@typescript-eslint/eslint-plugin": "5.30.6",
    "@typescript-eslint/parser": "5.30.6",
    "@vitejs/plugin-react": "2.0.0",
    "autoprefixer": "10.4.7",
    "babel-jest": "28.1.3",
    "eslint": "8.20.0",
    "eslint-config-prettier": "8.5.0",
    "eslint-plugin-prettier": "4.2.1",
    "eslint-plugin-react": "7.30.1",
    "eslint-plugin-react-hooks": "4.6.0",
    "eslint-plugin-tailwindcss": "3.6.0",
    "jest": "28.1.3",
    "jest-environment-jsdom": "28.1.3",
    "postcss": "8.4.14",
    "prettier": "2.7.1",
    "tailwindcss": "3.1.6",
    "typescript": "4.7.4",
    "vite": "3.0.0",
    "vite-tsconfig-paths": "3.5.0"
  }
}


================================================
FILE: 01-Simple Storage Full Stack Dapp/postcss.config.js
================================================
module.exports = {
  plugins: {
    tailwindcss: {},
    autoprefixer: {}
  }
}


================================================
FILE: 01-Simple Storage Full Stack Dapp/src/components/App.tsx
================================================
/* eslint-disable tailwindcss/no-custom-classname */
/* eslint-disable tailwindcss/classnames-order */
/* eslint-disable react/no-unescaped-entities */

import { useEffect, useState } from 'react'
import { ethers } from 'ethers'
import storage from '../contract/Storage.json'

// Contract information
const contractAddress = '0x9e1326fB351FbC4efaa88F0040708F0C0d315109'
const abi = storage.abi

// Constants
const CORESCAN_BASE_URL = 'https://scan.test2.btcs.network/address/'

function App() {
  const [currentAccount, setCurrentAccount] = useState(null)
  const [storeNumber, setStoreNumber] = useState('')
  const [retrievedNumber, setRetrievedNumber] = useState('')
  const checkWalletIsConnected = async () => {
    const { ethereum } = window

    if (!ethereum) {
      console.log('Make sure you have Metamask installed!')
      return
    } else {
      console.log("Wallet exists! We're ready to go!")
    }

    const accounts = await ethereum.request({ method: 'eth_accounts' })

    if (accounts.length !== 0) {
      const account = accounts[0]
      console.log('Found an authorized account: ', account)
      setCurrentAccount(account)
    } else {
      console.log('No authorized account found')
    }
  }

  const connectWalletHandler = async () => {
    const { ethereum } = window

    if (!ethereum) {
      alert('Please install Metamask!')
    }

    try {
      const accounts = await ethereum.request({ method: 'eth_requestAccounts' })
      console.log(accounts[0])
      console.log('Found an account! Address: ', accounts[0])
      setCurrentAccount(accounts[0])
    } catch (err) {
      console.log(err)
    }
  }

  const store = async () => {
    try {
      const { ethereum } = window

      if (ethereum) {
        const provider = new ethers.providers.Web3Provider(ethereum)
        const signer = provider.getSigner()
        const storageContract = new ethers.Contract(
          contractAddress,
          abi,
          signer
        )

        console.log('Write to contract')
        const tx = await storageContract.store(storeNumber)

        console.log('Wait for the transaction to be confirmed')
        await tx.wait()

        console.log(
          `Transaction confirmed: https://scan.test2.btcs.network/tx/${tx.hash}`
        )
      } else {
        console.log('Ethereum object does not exist')
      }
    } catch (err) {
      console.log(err)
    }
  }
  const retrieve = async () => {
    try {
      const { ethereum } = window

      if (!ethereum) {
        console.log('Ethereum object does not exist')
        alert('Please install MetaMask!')
        return
      }

      // Check if wallet is connected
      if (!currentAccount) {
        alert('Please connect your wallet first!')
        return
      }

      const provider = new ethers.providers.Web3Provider(ethereum)
      
      // Check if we're on the correct network
      const network = await provider.getNetwork()
      console.log('Connected to network:', network)
      
      // Verify we're on Core Testnet (Chain ID: 1115)
      if (network.chainId !== 1114) {
        alert('Please switch to Core Testnet in MetaMask!')
        return
      }

      // Check if contract exists at the address
      const code = await provider.getCode(contractAddress)
      if (code === '0x') {
        throw new Error(`No contract found at address ${contractAddress}`)
      }

      // For view functions, use provider instead of signer
      const storageContract = new ethers.Contract(
        contractAddress,
        abi,
        provider
      )

      console.log('Reading from contract...')
      setRetrievedNumber('Loading...')
      
      const res = await storageContract.retrieve()
      const retrievedValue = res.toString()
      
      console.log('Retrieved value:', retrievedValue)
      setRetrievedNumber(retrievedValue)
      
    } catch (err) {
      console.error('Error retrieving data:', err)
      setRetrievedNumber('Error')
      
      if ((err as Error).message.includes('No contract found')) {
        alert('Contract not found! Please check the contract address.')
      } else if ((err as Error).message.includes('network')) {
        alert('Network error! Please check your connection.')
      } else {
        alert(`Error: ${(err as Error).message}`)
      }
    }
  }

  const connectWalletButton = () => {
    return (
      <button
        onClick={connectWalletHandler}
        className="btn-primary w-40 rounded mt-10"
      >
        Connect Wallet
      </button>
    )
  }

  const storageButton = () => {
    return (
      <div>
        <p className="text-xl text-gray-400">
          Click "write" or "read" to call the smart contract
        </p>
        <div className="mt-8 inline-block text-left">
          <div className="text-left">
            <button onClick={store} className="btn-primary w-40 rounded-r-none">
              Write number
            </button>
            <input
              value={storeNumber}
              onChange={(e) => setStoreNumber(e.target.value)}
              className="rounded-l-none border-2 border-solid border-orange-500 caret-orange-500 focus:caret-indigo-500 py-1 px-2 h-10"
            />
          </div>
          <div>
            <button
              onClick={retrieve}
              className="btn-primary w-40 mt-8 w-40 rounded-r-none"
            >
              Read number
            </button>
            <input
              placeholder="Retrieved number"
              disabled
              value={retrievedNumber}
              className="text-center rounded-l-none border-2 border-solid border-disabled-500 caret-orange-500 focus:caret-indigo-500 py-1 px-2 h-10"
            />
          </div>
        </div>
        <div className="mt-8 text-center">
          <span className="text-mm">Contract address:</span>
          <a
            target="_blank"
            className="ml-2 text-mm  text-orange-400 hover:text-orange-600"
            href={CORESCAN_BASE_URL.concat(contractAddress)}
            rel="noreferrer"
          >
            {contractAddress}
          </a>
        </div>
      </div>
    )
  }

  useEffect(() => {
    checkWalletIsConnected()
  }, [])

  return (
    <div className="bg-white">
      <div className="mx-auto max-w-screen-xl py-16 px-4 sm:py-24 sm:px-6 lg:px-8">
        <div className="text-center">
          <div className="mb-12">
            <div className="flex items-center justify-center">
              <div className="flex items-center justify-center px-2">
                <img className="w-12 mx-1" src="src/public/logo.png" />
                <p className="my-3 mx-1 text-4xl font-bold text-gray-900 sm:text-5xl sm:tracking-tight lg:text-6xl">
                  Core
                </p>
              </div>
              <p className="my-3 text-4xl font-bold text-gray-900 sm:text-5xl sm:tracking-tight lg:text-6xl">
                Dapp Starter
              </p>
            </div>
          </div>
          {currentAccount ? storageButton() : connectWalletButton()}
        </div>
      </div>
      <div className="mt-8 text-center">
        <div>
          <span className="text-mm">Fund your account:</span>
          <a
            target="_blank"
            className="ml-2 text-mm  text-orange-400 hover:text-orange-600"
            href="https://scan.test2.btcs.network/faucet"
            rel="noreferrer"
          >
            tCORE faucet
          </a>
        </div>
        <div>
          <span className="text-mm">How to connect</span>
          <a
            target="_blank"
            className="ml-2 text-mm  text-orange-400 hover:text-orange-600"
            href="https://docs.coredao.org/docs/Dev-Guide/core-wallet-config"
            rel="noreferrer"
          >
            MetaMask to Core Testnet
          </a>
        </div>
      </div>
    </div>
  )
}

export default App


================================================
FILE: 01-Simple Storage Full Stack Dapp/src/contract/Storage.json
================================================
{
	"abi": [
		{
			"inputs": [],
			"name": "retrieve",
			"outputs": [
				{
					"internalType": "uint256",
					"name": "",
					"type": "uint256"
				}
			],
			"stateMutability": "view",
			"type": "function"
		},
		{
			"inputs": [
				{
					"internalType": "uint256",
					"name": "num",
					"type": "uint256"
				}
			],
			"name": "store",
			"outputs": [],
			"stateMutability": "nonpayable",
			"type": "function"
		}
	]
}

================================================
FILE: 01-Simple Storage Full Stack Dapp/src/contract/Storage.sol
================================================
// SPDX-License-Identifier: GPL-3.0

pragma solidity ^0.8.7;

/**
 * @title Storage
 * @dev Store & retrieve value in a variable
 * @custom:dev-run-script ./scripts/deploy_with_ethers.ts
 */
contract Storage {

    uint256 number;

    /**
     * @dev Store value in variable
     * @param num value to store
     */
    function store(uint256 num) public {
        number = num;
    }

    /**
     * @dev Return value 
     * @return value of 'number'
     */
    function retrieve() public view returns (uint256){
        return number;
    }
}

================================================
FILE: 01-Simple Storage Full Stack Dapp/src/index.tsx
================================================
import { createRoot } from 'react-dom/client'
import 'tailwindcss/tailwind.css'
import './style/index.css'
import App from 'components/App'

const container = document.getElementById('root') as HTMLDivElement
const root = createRoot(container)

root.render(<App />)


================================================
FILE: 01-Simple Storage Full Stack Dapp/src/style/index.css
================================================
@tailwind base;
@tailwind components;
@tailwind utilities;

@layer components {
	:root{

	}
  .btn-primary {
    @apply py-2 px-4 bg-orange-500 text-white font-semibold rounded-lg shadow-md hover:bg-orange-700 focus:outline-none focus:ring-2 focus:ring-blue-400 focus:ring-opacity-75;
  }
}


================================================
FILE: 01-Simple Storage Full Stack Dapp/src/utils/index.ts
================================================
export function classNames(...classes: unknown[]): string {
  return classes.filter(Boolean).join(' ')
}


================================================
FILE: 01-Simple Storage Full Stack Dapp/src/vite-env.d.ts
================================================
/* eslint-disable @typescript-eslint/no-explicit-any */
/// <reference types="vite/client" />

/// <reference types="react-scripts" />
interface Window {
  ethereum: any
}


================================================
FILE: 01-Simple Storage Full Stack Dapp/tailwind.config.js
================================================
/** @type {import('tailwindcss').Config} */

module.exports = {
  content: ['./src/**/*.{js,ts,jsx,tsx}'],
  theme: {
    extend: {},

  },
  plugins: []
}


================================================
FILE: 01-Simple Storage Full Stack Dapp/tsconfig.json
================================================
{
  "compilerOptions": {
    "baseUrl": "./src",
    "target": "esnext",
    "lib": ["dom", "dom.iterable", "esnext"],
    "allowJs": true,
    "skipLibCheck": true,
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true,
    "strict": true,
    "forceConsistentCasingInFileNames": true,
    "module": "esnext",
    "moduleResolution": "node",
    "resolveJsonModule": true,
    "isolatedModules": true,
    "noEmit": true,
    "jsx": "react-jsx"
  },
  "include": ["src"],
  "exclude": ["node_modules"]
}


================================================
FILE: 01-Simple Storage Full Stack Dapp/vite.config.ts
================================================
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
import tsconfigPaths from 'vite-tsconfig-paths'

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [react(), tsconfigPaths()]
})


================================================
FILE: 02-Basic Staking Full Stack Dapp/.gitignore
================================================
node_modules
.env
secret.json

# Hardhat files
/cache
/artifacts

# TypeChain files
/typechain
/typechain-types

# solidity-coverage files
/coverage
/coverage.json

# Hardhat Ignition default folder for deployments against a local node
ignition/deployments/chain-31337




================================================
FILE: 02-Basic Staking Full Stack Dapp/README.md
================================================
# Building a Staking Dapp on Core 

## What are we building
Welcome to this tutorial on building a simple staking dApp on the Core blockchain. In this guide, we'll walk through the process of creating a basic staking dApp that allows users to stake, unstake, and claim rewards. By the end of this tutorial, you'll have a functional dApp that interacts with smart contracts on the Core Testnet. 
In this staking dapp, 2 custom ERC20 tokens are used namely, `Staking Token - STK` and `Reward Token - RTK`. While, `STK` is used for staking, the `RTK` token is used for rewarding the users for staking their `STK` tokens.

## Learning Takeaways
* Smart Contract Development and deployment
* Building a frontend for integration with smart contracts
* Using Ethers.js library for communicating with smart contracts
* Integrating Metamask for secure user transactions and interactions
* Read and Write data to/from smart contracts

## Software Prerequisites 
* [Git](https://git-scm.com/) v2.44.0
* [Node.js](https://nodejs.org/en) v20.11.1
* [npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) v10.2.4
* [Hardhat](https://hardhat.org/hardhat-runner/docs/getting-started#installation) v2.22.6
* [MetaMask Web Wallet Extension](https://metamask.io/download/)Git v2.44.0
* **Core Testnet Configuration:** Configure MetaMask to connect to the Core Testnet. Refer [here](https://docs.coredao.org/docs/Dev-Guide/core-testnet-wallet-config#adding-core-testnet-to-metamask) for more details.
    * **Network Name:** Core Testnet
    * **New RPC URL:** https://rpc.test.btcs.network
    * **Chain ID:** 1115
    * **Currency Symbol:** CORE
* **Core Faucet:** To get test CORE tokens for transactions, visit the [Core Faucet](https://scan.test.btcs.network/faucet), refer [here]
(https://docs.coredao.org/docs/Dev-Guide/core-faucet) for more details.

## Setting up Dev Environment

### 1. Initialize the Project

```
mkdir staking-dapp
cd staking-dapp
npm init -y
npm install --save-dev hardhat
npx hardhat init 
```
![img](./assets/hardhat-init.png)

### 2. Install and Configure MetaMask 
* Install and configure MetaMask Chrome Extension to use with Core Testnet. 
* Refer [here](https://docs.coredao.org/docs/Dev-Guide/core-testnet-wallet-config) for a detailed guide.

### 3. Create a Secret File
* Create a `secret.json` file in the root folder and store the private key of your MetaMask wallet in it. 
* Refer [here](https://metamask.zendesk.com/hc/en-us/articles/360015290032-How-to-reveal-your-Secret-Recovery-Phrase) for details on how to get MetaMask account's private key.

```json
{"PrivateKey":"you private key, do not leak this file, do keep it absolutely safe"}
```

> _Do not forget to add this file to the `.gitignore` file in the root folder of your project so that you don't accidentally check your private keys/secret phrases into a public repository. Make sure you keep this file in an absolutely safe place!_


### 4. Update .gitignore 
* Update your .gitignore file to ensure that your secret.json file and other sensitive files are not committed to version control.
* Make sure to add `secret.json` to the `.gitignore` file. 

```
node_modules
.env
secret.json

# Hardhat files
/cache
/artifacts

# TypeChain files
/typechain
/typechain-types

# solidity-coverage files
/coverage
/coverage.json

# Hardhat Ignition default folder for deployments against a local node
ignition/deployments/chain-31337
```

### 5. Update Hardhat.config 

Replace the contents of `hardhat.config.js` with the following configuration. Ensure that the network settings are configured correctly for Core Testnet.

```
/**
 * @type import('hardhat/config').HardhatUserConfig
 */

require('@nomiclabs/hardhat-ethers');
require("@nomiclabs/hardhat-waffle");

const { PrivateKey } = require('./secret.json');

module.exports = {
   defaultNetwork: 'core_testnet',

   networks: {
      hardhat: {
      },
      core_testnet: {
         url: 'https://rpc.test2.btcs.network',
         accounts: [PRIVATE_KEY],
         chainId: 1115,
      }
   },
   solidity: {
      compilers: [
        {
           version: '0.8.24',
           settings: {
            evmVersion: 'paris',
            optimizer: {
                 enabled: true,
                 runs: 200,
              },
           },
        },
      ],
   },
   paths: {
      sources: './contracts',
      cache: './cache',
      artifacts: './artifacts',
   },
   mocha: {
      timeout: 20000,
   },
};
```

## Writing Smart Contracts
In the `contracts` folder, create the following smart contracts.

### Staking Token Contract
* For this dapp, we create a custom ERC20 token, named as `Staking Token - STK`. Users will stake their `STK` tokens to earn rewards.
* Create a `StakingToken.sol` file and udpate its contents with the following.

```js
// SPDX-License-Identifier: MIT
// Compatible with OpenZeppelin Contracts ^5.0.0
pragma solidity ^0.8.20;

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol";

contract StakingToken is ERC20, Ownable, ERC20Permit {
    constructor(string memory name, string memory symbol)
        ERC20(name, symbol)
        Ownable(msg.sender)
        ERC20Permit(name)
    {}

    function mint(address to, uint256 amount) public {
        require(amount <= 100 * 10 ** 18, "amount must be less than 100");
        _mint(to, amount);
    }
}
```

### Reward Token Contract
* For this dapp, we create a custom ERC20 token, named as `Reward Token - RTK`. Users will earn rewards as `RTK` tokens for staking their `STK` tokens.
* Create a `RewardToken.sol` file and udpate its contents with the following.

```js
// SPDX-License-Identifier: MIT
// Compatible with OpenZeppelin Contracts ^5.0.0
pragma solidity ^0.8.20;

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol";

contract RewardToken is ERC20, Ownable, ERC20Permit {
    constructor(string memory name, string memory symbol)
        ERC20(name, symbol)
        Ownable(msg.sender)
        ERC20Permit(name)
    {}

    function mint(address to, uint256 amount) public {
        _mint(to, amount);
    }
}
```

### Staking Dapp Contract 
* Create a `StakingDapp.sol` file and udpate its contents with the following.

```js 
// SPDX-License-Identifier: MIT
pragma solidity 0.8.24;

import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";

interface IRewardToken is IERC20 {
    function mint(address to, uint256 amount) external;
}

contract StakingDapp is Ownable {
    using SafeERC20 for IERC20;

    IERC20 public stakingToken;
    IRewardToken public rewardToken;

    struct Stake {
        uint256 amount;
        uint256 lastRewardTime; // Track the last time rewards were calculated
    }

    mapping(address => Stake) public stakes;
    mapping(address => uint256) public rewardBalance;

    uint256 public constant REWARD_AMOUNT = 5; // Reward tokens per interval
    uint256 public constant REWARD_INTERVAL = 10; // 10 seconds per reward interval

    event Staked(address indexed user, uint256 amount);
    event Unstaked(address indexed user, uint256 amount);
    event RewardClaimed(address indexed user, uint256 amount);

    constructor(address _stakingToken, address _rewardToken) Ownable(msg.sender) {
        require(_stakingToken != address(0) && _rewardToken != address(0), "Invalid token addresses");
        stakingToken = IERC20(_stakingToken);
        rewardToken = IRewardToken(_rewardToken);
    }

    function getStakedAmount(address user) external view returns (uint256) {
        return stakes[user].amount;
    }


    function stake(uint256 amount) external {
        require(amount > 0, "Amount must be greater than 0");
        
        if (stakes[msg.sender].amount > 0) {
            // Calculate and update reward balance before changing the stake
            uint256 pendingReward = calculateReward(msg.sender);
            rewardBalance[msg.sender] += pendingReward;
        }
        
        stakingToken.safeTransferFrom(msg.sender, address(this), amount);
        
        // Update the stake amount and last reward time
        stakes[msg.sender].amount += amount;
        stakes[msg.sender].lastRewardTime = block.timestamp;
        
        emit Staked(msg.sender, amount);
    }

    function unstake(uint256 amount) external {
        require(stakes[msg.sender].amount >= amount, "Insufficient balance");
        
        uint256 pendingReward = calculateReward(msg.sender);
        rewardBalance[msg.sender] += pendingReward;

        // Update the stake amount and last reward time
        stakes[msg.sender].amount -= amount;
        stakes[msg.sender].lastRewardTime = block.timestamp;
        
        stakingToken.safeTransfer(msg.sender, amount);
        
        emit Unstaked(msg.sender, amount);
    }

    function claimReward() external {
        uint256 reward = calculateReward(msg.sender) + rewardBalance[msg.sender];
        require(reward > 0, "No reward available");

        // Reset reward data
        rewardBalance[msg.sender] = 0;
        stakes[msg.sender].lastRewardTime = block.timestamp;
        
        // Mint reward tokens
        rewardToken.mint(msg.sender, reward);
        
        emit RewardClaimed(msg.sender, reward);
    }

    function calculateReward(address user) internal view returns (uint256) {
        Stake memory userStake = stakes[user];
        if (userStake.amount == 0) {
            return 0;
        }

        uint256 currentTime = block.timestamp;
        uint256 timeSinceLastReward = currentTime - userStake.lastRewardTime;
        uint256 intervalsPassed = timeSinceLastReward / REWARD_INTERVAL;
        // Calculate reward based on intervals passed and staked amount
        return intervalsPassed * REWARD_AMOUNT * userStake.amount; // 1e18; // Assumes REWARD_AMOUNT and staked amount are in the same decimal place
    }
    function getRewardAmount(address user) external view returns (uint256) {
        uint256 reward = calculateReward(user);
        return reward;
    }

}
```
#### Explanation
The StakingDapp contract is a basic implementation of a staking mechanism in Solidity. It allows users to stake an ERC20 token (stakingToken), earn rewards in another ERC20 token (rewardToken), and claim those rewards.

##### State Variables
* **stakingToken:** The ERC-20 token that users will stake.
* **rewardToken:** The ERC-20 token used to distribute rewards.
* **stakes:** A mapping from user addresses to their staking details, including the amount staked and the last time rewards were calculated.
* **rewardBalance:** A mapping to keep track of the reward balance for each user that they have accumulated but not yet claimed.
* **REWARD_AMOUNT:** The amount of reward tokens distributed per reward interval.
* **REWARD_INTERVAL:** The time interval (in seconds) between reward distributions.

##### Functions
1. **getStakedAmount(address user)**: Returns the amount of STK tokens staked by a user.

2. **stake(uint256 amount)**: Allows users to stake a specified amount of staking tokens.
    * Updates the user's reward balance before modifying the stake.
    * Transfers the tokens from the user to the contract.
    * Updates the staking details and the last reward calculation time.
    * Emits the Staked event.

3. **unstake(uint256 amount)**: Allows users to unstake a specified amount of stakingToken.
    * Ensures the user has sufficient staked tokens.
    * Updates the reward balance before modifying the stake.
    * Transfers the STK tokens back to the user.
    * Updates the staking details and the last reward calculation time.
    * Emits the Unstaked event.

4. **claimReward()**: Allows users to claim their accumulated rewards.
    * Calculates the total reward available for the user.
    * Mints the reward tokens and transfers them to the user.
    * Resets the user's reward balance.
    * Updates the last reward calculation time.
    * Emits the RewardClaimed event.

5. **calculateReward(address user)**: Calculates the reward amount for a user based on the time elapsed since the last reward calculation and the amount staked.
    * Uses the REWARD_AMOUNT and REWARD_INTERVAL to compute how many reward intervals have passed.
    * Calculates the total reward based on the number of intervals and the amount staked.
    * Visibility: Internal, used by other functions within the contract.

6. **getRewardAmount(address user)**: Allows anyone to query the amount of reward available for a specific user.

## Compile and Deploy Smart Contracts

### Compiling Smart Contracts
To compile the smart contracts, run the command `npx hardhat compile`

### Deploying Smart Contracts
* Create a `scritps` folder in the root of your project.
* Create a file `deploy.js` in the `scripts` folder.
* Update the contents of the `deploy.js` file with the following:

```js
const { ethers } = require("hardhat");

async function main() {
    const [deployer] = await ethers.getSigners();

    console.log("Deploying contracts with the account:", deployer.address);

    const StakingToken = await ethers.getContractFactory("StakingToken");
    const stakingToken = await StakingToken.deploy("Staking Token", "STK");

    const RewardToken = await ethers.getContractFactory("RewardToken");
    const rewardToken = await RewardToken.deploy("Reward Token", "RTK");

    const StakingDapp = await ethers.getContractFactory("StakingDapp");
    const stakingDapp = await StakingDapp.deploy(stakingToken.address, rewardToken.address);

    console.log("Contracts deployed:");
    console.log("Staking Token:", stakingToken.address);
    console.log("Reward Token:", rewardToken.address);
    console.log("Staking Dapp:", stakingDapp.address);
}

main()
    .then(() => process.exit(0))
    .catch((error) => {
        console.error(error);
        process.exit(1);
    });

```
* Make sure your MetaMask wallet has tCORE test tokens for the Core Testnet. Refer [here](https://docs.coredao.org/docs/Dev-Guide/core-faucet) for details on how to get tCORE tokens from Core Faucet. 

* Run the following command from the root directory of your project, to deploy smart contracts on the Core blockchain.

```bash
npx hardhat run scripts/deploy.js
```

* If succesfully deployed, you will get the following output

![img](./assets/deploy-contracts.png)

* Save the addresses for the deploed contracts for use with the frontend.

## Interacting with Smart Contract through Frontend

⚡️ Let's create a frontend interface for interacting with the smart contract.

### Setting up frontend 

* Create a simple react application using the following command

```bash
npx create-react-app frontend
cd frontend
```

* Install Dependencies, the Ethers.js library for communicating with the deployed smart contracts.

```bash
  npm install --save-dev ethers@5.6.9
```

* Create a `contracts` folder inside the `frontend/src` folder.

```bash
mkdir components 
mkdir contracts 
```

Copy the ABIs in the form of `.json` files, of your deployed smart contracts, from `artifacts/contracts/RewardToken.sol` `artifacts/contracts/StakingToken.sol` and `artifacts/contracts/RewardToken.sol` directories into the `frontend/src/contracts` directory.


* Create a `components` folder in the `frontend/src` directory. 
```bash 
mkdir components
cd components
```

### Adding Frontend Fuctionality
* Update the `App.js` with the contents of the [App.js](./frontend/src/App.js) in the boilerplate repo.
* Update the `App.css` with the contents of the [App.css](./frontend/src/App.css) in the boilerplate repo.
* Create a `Modal.js` file inside the `components` directory. Update the file with the contents of the [Modal.js](./frontend/src/components/Modal.js) in the boilerplate repo.
* Create a `Modal.css` file in the `components` directory. Update the file with the contents of the [Modal.csss](./frontend/src/components/Modal.css) in the boilerplate repo.

### Key Implementation
The application's key blockchain logic is implemented in [App.js](./frontend/src/App.js)

1. **App.js (Wallet):** Line#31 onwards is the logic for connecting the application to MetaMask wallet.
2. **App.js (Stake):** Line#180 is the logic to stake the STK tokens.
3. **App.js (Unstake):** Line#211 is the logic to unstake the STK tokens.
4. **App.js (Claim Reward):** Line#275 is the logic to claim the rewards as the RTK tokens.
5. **App.js (STK Faucet):** Line#311 is the logic for the faucet to get STK tokens.

### Adding Smart Contract Details 
* Paste this into Lines 12, 13, and 14 the addresses of the deployed contracts of StakingToken, RewardToken and StakingDapp.

```js
const stakingDappAddress = '0xAddress_of_Staking_Dapp_Contract';
const stakingTokenAddress = '0xAddreess_of_Staking_Token_Contract';
const rewardTokenAddress = '0xAddreess_of_Reward_Token_Contract'; 
```

### Testing Locally
* From the `frontend` directory, run the command `npm run start`
* Make sure that your MetaMask wallet is correctly installed and switched to Core Testnet as described in our [Core Testnet user guide](https://docs.coredao.org/docs/Dev-Guide/core-testnet-wallet-config). You'll also need to connect your MetaMask wallet to the local site.
* Navigate to `http://localhost:3000/` in your browser.

![dapp-ui](./assets/dapp-ui-1.png)

* Enter an amount less than 100 and click on the `STK Faucet` to get STK tokens.
![dapp-ui](./assets/dapp-ui-2.png)

* Enter an amount greater than 0 and less than or equal to your STK balance and click `Stake` to stake tokens. 
![dapp-ui](./assets/dapp-ui-3.png)

* On clicking the `Stake` button, Metamask notification will pop up, allow the stakingdapp contract to spend your STK tokens, then click next and on the next notificxation click on `Edit` and give a higher gas limiti value, say 6000000, then click save and approve the transaction.
![metamask-approve](./assets/dapp-metamask-approve-STK-1.png)
* Enter an amount greater than 0 and less than or equal to your staked balance and click `Unstake` to unstake tokens. 
![dapp-ui](./assets/dapp-ui-4.png)


## 🎉 **Congratulations!** 
You've just interacted with your deployed contract using your dApp's front end! You can build on the codebase by adding new UI components or more functionality to the staking dapp.


================================================
FILE: 02-Basic Staking Full Stack Dapp/contracts/RewardToken.sol
================================================
// SPDX-License-Identifier: MIT
// Compatible with OpenZeppelin Contracts ^5.0.0
pragma solidity ^0.8.20;

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol";

contract RewardToken is ERC20, Ownable, ERC20Permit {
    constructor(string memory name, string memory symbol)
        ERC20(name, symbol)
        Ownable(msg.sender)
        ERC20Permit(name)
    {}

    function mint(address to, uint256 amount) public {
        _mint(to, amount);
    }
}

================================================
FILE: 02-Basic Staking Full Stack Dapp/contracts/StakingDapp.sol
================================================
// SPDX-License-Identifier: MIT
pragma solidity 0.8.24;

import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";

interface IRewardToken is IERC20 {
    function mint(address to, uint256 amount) external;
}

contract StakingDapp is Ownable {
    using SafeERC20 for IERC20;

    IERC20 public stakingToken;
    IRewardToken public rewardToken;

    struct Stake {
        uint256 amount;
        uint256 lastRewardTime; // Track the last time rewards were calculated
    }

    mapping(address => Stake) public stakes;
    mapping(address => uint256) public rewardBalance;

    uint256 public constant REWARD_AMOUNT = 5; // Reward tokens per interval
    uint256 public constant REWARD_INTERVAL = 10; // 10 seconds per reward interval

    event Staked(address indexed user, uint256 amount);
    event Unstaked(address indexed user, uint256 amount);
    event RewardClaimed(address indexed user, uint256 amount);

    constructor(address _stakingToken, address _rewardToken) Ownable(msg.sender) {
        require(_stakingToken != address(0) && _rewardToken != address(0), "Invalid token addresses");
        stakingToken = IERC20(_stakingToken);
        rewardToken = IRewardToken(_rewardToken);
    }

    function getStakedAmount(address user) external view returns (uint256) {
        return stakes[user].amount;
    }


    function stake(uint256 amount) external {
        require(amount > 0, "Amount must be greater than 0");
        
        if (stakes[msg.sender].amount > 0) {
            // Calculate and update reward balance before changing the stake
            uint256 pendingReward = calculateReward(msg.sender);
            rewardBalance[msg.sender] += pendingReward;
        }
        
        stakingToken.safeTransferFrom(msg.sender, address(this), amount);
        
        // Update the stake amount and last reward time
        stakes[msg.sender].amount += amount;
        stakes[msg.sender].lastRewardTime = block.timestamp;
        
        emit Staked(msg.sender, amount);
    }

    function unstake(uint256 amount) external {
        require(stakes[msg.sender].amount >= amount, "Insufficient balance");
        
        uint256 pendingReward = calculateReward(msg.sender);
        rewardBalance[msg.sender] += pendingReward;

        // Update the stake amount and last reward time
        stakes[msg.sender].amount -= amount;
        stakes[msg.sender].lastRewardTime = block.timestamp;
        
        stakingToken.safeTransfer(msg.sender, amount);
        
        emit Unstaked(msg.sender, amount);
    }

    function claimReward() external {
        uint256 reward = calculateReward(msg.sender) + rewardBalance[msg.sender];
        require(reward > 0, "No reward available");

        // Reset reward data
        rewardBalance[msg.sender] = 0;
        stakes[msg.sender].lastRewardTime = block.timestamp;
        
        // Mint reward tokens
        rewardToken.mint(msg.sender, reward);
        
        emit RewardClaimed(msg.sender, reward);
    }

    function calculateReward(address user) internal view returns (uint256) {
        Stake memory userStake = stakes[user];
        if (userStake.amount == 0) {
            return 0;
        }

        uint256 currentTime = block.timestamp;
        uint256 timeSinceLastReward = currentTime - userStake.lastRewardTime;
        uint256 intervalsPassed = timeSinceLastReward / REWARD_INTERVAL;
        // Calculate reward based on intervals passed and staked amount
        return intervalsPassed * REWARD_AMOUNT * userStake.amount; // 1e18; // Assumes REWARD_AMOUNT and staked amount are in the same decimal place
    }
    function getRewardAmount(address user) external view returns (uint256) {
        uint256 reward = calculateReward(user);
        return reward;
    }

}


================================================
FILE: 02-Basic Staking Full Stack Dapp/contracts/StakingToken.sol
================================================
// SPDX-License-Identifier: MIT
// Compatible with OpenZeppelin Contracts ^5.0.0
pragma solidity ^0.8.20;

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol";

contract StakingToken is ERC20, Ownable, ERC20Permit {
    constructor(string memory name, string memory symbol)
        ERC20(name, symbol)
        Ownable(msg.sender)
        ERC20Permit(name)
    {}

    function mint(address to, uint256 amount) public {
        require(amount <= 100 * 10 ** 18, "amount must be less than 100");
        _mint(to, amount);
    }
}

================================================
FILE: 02-Basic Staking Full Stack Dapp/frontend/.gitignore
================================================
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.

# dependencies
/node_modules
/.pnp
.pnp.js

# testing
/coverage

# production
/build

# misc
.DS_Store
.env.local
.env.development.local
.env.test.local
.env.production.local

npm-debug.log*
yarn-debug.log*
yarn-error.log*


================================================
FILE: 02-Basic Staking Full Stack Dapp/frontend/README.md
================================================
# Getting Started with Create React App

This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app).

## Available Scripts

In the project directory, you can run:

### `npm start`

Runs the app in the development mode.\
Open [http://localhost:3000](http://localhost:3000) to view it in your browser.

The page will reload when you make changes.\
You may also see any lint errors in the console.

### `npm test`

Launches the test runner in the interactive watch mode.\
See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information.

### `npm run build`

Builds the app for production to the `build` folder.\
It correctly bundles React in production mode and optimizes the build for the best performance.

The build is minified and the filenames include the hashes.\
Your app is ready to be deployed!

See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information.

### `npm run eject`

**Note: this is a one-way operation. Once you `eject`, you can't go back!**

If you aren't satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project.

Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you're on your own.

You don't have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn't feel obligated to use this feature. However we understand that this tool wouldn't be useful if you couldn't customize it when you are ready for it.

## Learn More

You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started).

To learn React, check out the [React documentation](https://reactjs.org/).

### Code Splitting

This section has moved here: [https://facebook.github.io/create-react-app/docs/code-splitting](https://facebook.github.io/create-react-app/docs/code-splitting)

### Analyzing the Bundle Size

This section has moved here: [https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size](https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size)

### Making a Progressive Web App

This section has moved here: [https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app](https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app)

### Advanced Configuration

This section has moved here: [https://facebook.github.io/create-react-app/docs/advanced-configuration](https://facebook.github.io/create-react-app/docs/advanced-configuration)

### Deployment

This section has moved here: [https://facebook.github.io/create-react-app/docs/deployment](https://facebook.github.io/create-react-app/docs/deployment)

### `npm run build` fails to minify

This section has moved here: [https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify](https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify)


================================================
FILE: 02-Basic Staking Full Stack Dapp/frontend/package.json
================================================
{
  "name": "frontend_ui",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "@testing-library/jest-dom": "5.17.0",
    "@testing-library/react": "13.4.0",
    "@testing-library/user-event": "13.5.0",
    "bootstrap": "5.2.3",
    "react": "18.3.1",
    "react-dom": "18.3.1",
    "react-scripts": "5.0.1",
    "react-toastify": "10.0.5",
    "web-vitals": "2.1.4"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },
  "eslintConfig": {
    "extends": [
      "react-app",
      "react-app/jest"
    ]
  },
  "browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  },
  "devDependencies": {
    "ethers": "^5.6.9"
  }
}


================================================
FILE: 02-Basic Staking Full Stack Dapp/frontend/public/index.html
================================================
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8" />
    <link rel="icon" href="%PUBLIC_URL%/favicon.ico" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <meta name="theme-color" content="#000000" />
    <meta
      name="description"
      content="Web site created using create-react-app"
    />
    <link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" />
    <!--
      manifest.json provides metadata used when your web app is installed on a
      user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/
    -->
    <link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
    <!--
      Notice the use of %PUBLIC_URL% in the tags above.
      It will be replaced with the URL of the `public` folder during the build.
      Only files inside the `public` folder can be referenced from the HTML.

      Unlike "/favicon.ico" or "favicon.ico", "%PUBLIC_URL%/favicon.ico" will
      work correctly both with client-side routing and a non-root public URL.
      Learn how to configure a non-root public URL by running `npm run build`.
    -->
    <title>React App</title>
  </head>
  <body>
    <noscript>You need to enable JavaScript to run this app.</noscript>
    <div id="root"></div>
    <!--
      This HTML file is a template.
      If you open it directly in the browser, you will see an empty page.

      You can add webfonts, meta tags, or analytics to this file.
      The build step will place the bundled scripts into the <body> tag.

      To begin the development, run `npm start` or `yarn start`.
      To create a production bundle, use `npm run build` or `yarn build`.
    -->
  </body>
</html>


================================================
FILE: 02-Basic Staking Full Stack Dapp/frontend/public/manifest.json
================================================
{
  "short_name": "React App",
  "name": "Create React App Sample",
  "icons": [
    {
      "src": "favicon.ico",
      "sizes": "64x64 32x32 24x24 16x16",
      "type": "image/x-icon"
    },
    {
      "src": "logo192.png",
      "type": "image/png",
      "sizes": "192x192"
    },
    {
      "src": "logo512.png",
      "type": "image/png",
      "sizes": "512x512"
    }
  ],
  "start_url": ".",
  "display": "standalone",
  "theme_color": "#000000",
  "background_color": "#ffffff"
}


================================================
FILE: 02-Basic Staking Full Stack Dapp/frontend/public/robots.txt
================================================
# https://www.robotstxt.org/robotstxt.html
User-agent: *
Disallow:


================================================
FILE: 02-Basic Staking Full Stack Dapp/frontend/src/App.css
================================================
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap');

:root {
  /* Light Mode Colors */
  --light-bg: #f5f7fa;
  --light-card: #ffffff;
  --light-text: #2d3748;
  --light-text-secondary: #4a5568;
  --light-border: #e2e8f0;
  --light-primary: #ff9211;
  --light-primary-hover: #ed6a2e;
  
  /* Dark Mode Colors */
  --dark-bg: #1a202c;
  --dark-card: #2d3748;
  --dark-text: #f7fafc;
  --dark-text-secondary: #cbd5e0;
  --dark-border: #ff9501;
  --dark-primary: #ff9211;
  --dark-primary-hover: #ed6a2e;
}

* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
  transition: background-color 0.3s, color 0.3s;
}

body {
  font-family: 'Inter', sans-serif;
}

.App {
  min-height: 100vh;
  padding: 0 2rem;
}

/* Theme Styles */
.light-mode {
  background-color: var(--light-bg);
  color: var(--light-text);
}

.dark-mode {
  background-color: var(--dark-bg);
  color: var(--dark-text);
}

/* Header Styles */
.App-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 1.5rem 0;
  border-bottom: 1px solid;
}

.light-mode .App-header {
  border-color: var(--light-border);
}

.dark-mode .App-header {
  border-color: var(--dark-border);
}

.logo-container img {
  height: 40px;
}

.header-right {
  display: flex;
  align-items: center;
  gap: 1rem;
}

.theme-toggle {
  background: transparent;
  border: none;
  font-size: 1.5rem;
  cursor: pointer;
  padding: 0.5rem;
  border-radius: 50%;
}

.light-mode .theme-toggle  {
  background-color: rgba(0, 0, 0, 0.05);
      width: 45px;
    height: 45px;
    display: flex;
    justify-content: center;
    align-items: center;
}

.dark-mode .theme-toggle {
  background-color: rgba(255, 255, 255, 0.05);
      width: 45px;
    height: 45px;
    display: flex;
    justify-content: center;
    align-items: center;
}

/* Button Styles */
.btn-wallet {
  padding: 0.75rem 1.5rem;
  border-radius: 0.5rem;
  font-weight: 600;
  cursor: pointer;
  border: none;
  display: flex;
  align-items: center;
  gap: 0.5rem;
}

.light-mode .btn-wallet {
  background-color: var(--light-primary);
  color: white;
}

.dark-mode .btn-wallet {
  background-color: var(--dark-primary);
  color: white;
}

.btn-wallet:hover {
  transform: translateY(-1px);
}

.light-mode .btn-wallet:hover {
  background-color: var(--light-primary-hover);
}

.dark-mode .btn-wallet:hover {
  background-color: var(--dark-primary-hover);
}

.btn-wallet.large {
  padding: 1rem 2rem;
  font-size: 1.1rem;
}

/* Main Content Styles */
main {
  padding: 2rem 0;
}

.main-title {
  font-size: 2rem;
  margin-bottom: 2rem;
  font-weight: 700;
}

/* Connect Prompt Styles */
.connect-prompt {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  text-align: center;
  padding: 3rem 0;
}

.connect-illustration {
  margin-bottom: 2rem;
}

.connect-illustration img {
  max-width: 100%;
  border-radius: 1rem;
}

.connect-prompt p {
  margin-bottom: 2rem;
  font-size: 1.2rem;
  max-width: 600px;
  line-height: 1.6;
}

.light-mode .connect-prompt p {
  color: var(--light-text-secondary);
}

.dark-mode .connect-prompt p {
  color: var(--dark-text-secondary);
}

/* Dashboard Styles */
.dashboard {
  max-width: 1200px;
  margin: 0 auto;
}

.wallet-info {
  display: flex;
  justify-content: flex-end;
  margin-bottom: 1.5rem;
}

.wallet-address {
  padding: 0.5rem 1rem;
  border-radius: 0.5rem;
  font-family: monospace;
  font-size: 0.9rem;
}

.light-mode .wallet-address {
  background-color: rgba(0, 0, 0, 0.05);
}

.dark-mode .wallet-address {
  background-color: rgba(255, 255, 255, 0.05);
}

/* Stats Grid Styles */
.stats-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
  gap: 1.5rem;
  margin-bottom: 2rem;
}

.stat-card {
  padding: 1.5rem;
  border-radius: 1rem;
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
}

.light-mode .stat-card {
  background-color: var(--light-card);
  box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
}

.dark-mode .stat-card {
  background-color: var(--dark-card);
}

.stat-card.highlight {
  border: 2px solid;
}

.light-mode .stat-card.highlight {
  border-color: var(--light-primary);
}

.dark-mode .stat-card.highlight {
  border-color: var(--dark-primary);
}

.stat-icon {
  font-size: 2rem;
  margin-bottom: 1rem;
}

.stat-card h3 {
  font-size: 1.1rem;
  margin-bottom: 0.5rem;
  font-weight: 600;
}

.stat-value {
  font-size: 1.5rem;
  font-weight: 700;
  margin-bottom: 1rem;
}

.light-mode .stat-value {
  color: var(--light-primary);
}

.dark-mode .stat-value {
  color: var(--dark-primary);
}

.claim-btn {
  padding: 0.5rem 1rem;
  border-radius: 0.5rem;
  font-weight: 600;
  cursor: pointer;
  border: none;
  width: 100%;
}

.light-mode .claim-btn {
  background-color: var(--light-primary);
  color: white;
}

.dark-mode .claim-btn {
  background-color: var(--dark-primary);
  color: white;
}

.claim-btn:hover {
  transform: translateY(-1px);
}

.light-mode .claim-btn:hover {
  background-color: var(--light-primary-hover);
}

.dark-mode .claim-btn:hover {
  background-color: var(--dark-primary-hover);
}

/* Action Cards css */
.action-cards {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
  gap: 1.5rem;
}

.action-card {
  padding: 1.5rem;
  border-radius: 1rem;
}

.light-mode .action-card {
  background-color: var(--light-card);
  box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
}

.dark-mode .action-card {
  background-color: var(--dark-card);
}

.action-card h3 {
  font-size: 1.1rem;
  margin-bottom: 1rem;
  font-weight: 600;
}

.input-group {
  display: flex;
  gap: 0.5rem;
}

.input-field {
  flex: 1;
  padding: 0.75rem 1rem;
  border-radius: 0.5rem;
  border: 1px solid;
  font-size: 1rem;
}

.light-mode .input-field {
  border-color: var(--light-border);
  background-color: white;
  color: var(--light-text);
}

.dark-mode .input-field {
  border-color: var(--dark-border);
  background-color: #1a202c;
  color: var(--dark-text);
}

.input-field:focus {
  outline: none;
  border-width: 2px;
}

.light-mode .input-field:focus {
  border-color: var(--light-primary);
}

.dark-mode .input-field:focus {
  border-color: var(--dark-primary);
}

.btn-action {
  padding: 0.75rem 1.5rem;
  border-radius: 0.5rem;
  font-weight: 600;
  cursor: pointer;
  border: none;
  white-space: nowrap;
}

.light-mode .btn-action {
  background-color: var(--light-primary);
  color: white;
}

.dark-mode .btn-action {
  background-color: var(--dark-primary);
  color: white;
}

.btn-action:hover {
  transform: translateY(-1px);
}

.light-mode .btn-action:hover {
  background-color: var(--light-primary-hover);
}

.dark-mode .btn-action:hover {
  background-color: var(--dark-primary-hover);
}

/* Responsive css */
@media (max-width: 768px) {
  .App {
    padding: 0 1rem;
  }
  
  .stats-grid, .action-cards {
    grid-template-columns: 1fr;
  }
  
  .input-group {
    flex-direction: column;
  }
  
  .btn-action {
    width: 100%;
  }
}

================================================
FILE: 02-Basic Staking Full Stack Dapp/frontend/src/App.js
================================================
import { useEffect, useState, useCallback } from "react";
import { ethers } from "ethers";
import StakingToken from "./contracts/StakingToken.json";
import StakingDapp from "./contracts/StakingDapp.json";
import RewardToken from "./contracts/RewardToken.json";
import { ToastContainer, toast } from "react-toastify";
import "react-toastify/dist/ReactToastify.css";
import Modal from "./components/Modal";
import "./App.css";
import darkLogo from "./assets/dark_logo.webp";
import lightLogo from "./assets/light_logo.webp";
import "../node_modules/bootstrap/dist/css/bootstrap.min.css";

const stakingDappAddress = "0x341B5aC2189e73d444883CB608FfF7d8e8AC4F93";
const stakingTokenAddress = "0x9Ba37DAA676B30599B67093FACDA8b3B7BD0Fb44";
const rewardTokenAddress = "0xDa0bBC600188Bf2C995de241Cb3B50f62Da925B5";

function App() {
  const [stakingAmount, setStakingAmount] = useState("");
  const [unstakingAmount, setUnstakingAmount] = useState("");
  const [currentAccount, setCurrentAccount] = useState(null);
  const [stakedAmount, setStakedAmount] = useState("0");
  const [rewardAmount, setRewardAmount] = useState("0");
  const [totalStkBalance, setTotalStkBalance] = useState("0");
  const [network, setNetwork] = useState("");
  const [faucetAmount, setFaucetAmount] = useState("");
  const [isModalOpen, setIsModalOpen] = useState(false);
  const [stakingTokenDecimals, setStakingTokenDecimals] = useState(18);
  const [rewardTokenDecimals, setRewardTokenDecimals] = useState(18);
 const [darkMode, setDarkMode] = useState(true);
  // Check if wallet is connected
  const checkWalletIsConnected = async () => {
    const { ethereum } = window;

    if (!ethereum) {
      console.log("Make sure you have Metamask installed!");
      return;
    }

    try {
      const accounts = await ethereum.request({ method: "eth_accounts" });

      if (accounts.length !== 0) {
        const account = accounts[0];
        setCurrentAccount(account);
      } else {
        console.log("No authorized account found ...");
      }
    } catch (error) {
      console.error("Error fetching accounts:", error);
    }
  };

  // Check network
  const checkNetwork = async () => {
    const { ethereum } = window;

    if (!ethereum) {
      console.log("Ethereum object does not exist");
      return;
    }

    try {
      const provider = new ethers.providers.Web3Provider(ethereum);
      const { chainId } = await provider.getNetwork();

      if (chainId !== 1115) {
        console.log("Please connect to the Core Testnet");
      } else {
        setNetwork("Core Testnet");
      }
    } catch (error) {
      console.error("Error fetching network:", error);
    }
  };

  // Connect wallet
  const connectWalletHandler = async () => {
    const { ethereum } = window;

    if (!ethereum) {
      alert("Please install Metamask!");
      return;
    }

    try {
      const accounts = await ethereum.request({
        method: "eth_requestAccounts",
      });
      setCurrentAccount(accounts[0]);
    } catch (error) {
      console.error("Error connecting wallet:", error);
    }
  };

  // Disconnect wallet
  const disconnectWalletHandler = () => {
    setCurrentAccount(null);
    setStakedAmount("0");
    setRewardAmount("0");
    setTotalStkBalance("0");
    setNetwork("");
  };

  // Fetch staked and reward amounts
  const fetchStakedAndRewardAmounts = useCallback(async () => {
    try {
      const { ethereum } = window;

      if (ethereum) {
        const provider = new ethers.providers.Web3Provider(ethereum);
        const signer = provider.getSigner();
        const stakingDappContract = new ethers.Contract(
          stakingDappAddress,
          StakingDapp.abi,
          signer
        );

        const stakedAmount = await stakingDappContract.getStakedAmount(
          currentAccount
        );
        const rewardAmount = await stakingDappContract.getRewardAmount(
          currentAccount
        );

        setStakedAmount(
          ethers.utils.formatUnits(stakedAmount, stakingTokenDecimals)
        );
        setRewardAmount(
          ethers.utils.formatUnits(rewardAmount, rewardTokenDecimals)
        );
      } else {
        console.log("Ethereum object does not exist");
      }
    } catch (error) {
      console.error("Error fetching staked and reward amounts:", error);
    }
  }, [currentAccount, stakingTokenDecimals, rewardTokenDecimals]);

  // Fetch staking token balance
  const fetchStkBalance = useCallback(async () => {
    try {
      const { ethereum } = window;

      if (ethereum) {
        const provider = new ethers.providers.Web3Provider(ethereum);
        const stakingTokenContract = new ethers.Contract(
          stakingTokenAddress,
          StakingToken.abi,
          provider
        );

        const balance = await stakingTokenContract.balanceOf(currentAccount);
        const decimals = await stakingTokenContract.decimals();
        setStakingTokenDecimals(decimals);
        setTotalStkBalance(ethers.utils.formatUnits(balance, decimals));
        console.log('balance',balance)
      } else {
        console.log("Ethereum object does not exist");
      }
    } catch (error) {
      console.error("Error fetching token balance:", error);
    }
  }, [currentAccount]);

  // Fetch reward token decimals
  const fetchRewardTokenDecimals = useCallback(async () => {
    try {
      const { ethereum } = window;

      if (ethereum) {
        const provider = new ethers.providers.Web3Provider(ethereum);
        const rewardTokenContract = new ethers.Contract(
          rewardTokenAddress,
          RewardToken.abi,
          provider
        );

        const decimals = await rewardTokenContract.decimals();
        setRewardTokenDecimals(decimals);
      } else {
        console.log("Ethereum object does not exist");
      }
    } catch (error) {
      console.error("Error fetching reward token decimals:", error);
    }
  }, []);

  useEffect(() => {
    checkWalletIsConnected();
  }, []);

  useEffect(() => {
    if (currentAccount) {
      checkNetwork();
      fetchStakedAndRewardAmounts();
      fetchStkBalance();
      fetchRewardTokenDecimals();
    }
  }, [
    currentAccount,
    fetchStakedAndRewardAmounts,
    fetchStkBalance,
    fetchRewardTokenDecimals,
  ]);

  // Stake tokens
  const stakeTokens = async () => {
    try {
      if (!isValidAmount(stakingAmount)) {
        toast.error("Invalid staking amount. Please enter a positive number.");
        return;
      }

      const { ethereum } = window;

      if (ethereum) {
        const provider = new ethers.providers.Web3Provider(ethereum);
        const signer = provider.getSigner();
        const stakingDappContract = new ethers.Contract(
          stakingDappAddress,
          StakingDapp.abi,
          signer
        );
        const tokenContract = new ethers.Contract(
          stakingTokenAddress,
          StakingToken.abi,
          signer
        );

        await tokenContract.approve(
          stakingDappAddress,
          ethers.utils.parseUnits(stakingAmount, stakingTokenDecimals)
        );
        const tx = await stakingDappContract.stake(
          ethers.utils.parseUnits(stakingAmount, stakingTokenDecimals)
        );
        await tx.wait();
        toast.success("Staked successfully");
        fetchStakedAndRewardAmounts();
        fetchStkBalance();
      } else {
        console.log("Ethereum object does not exist");
      }
    } catch (error) {
      console.error("Error staking tokens:", error);
      toast.error("Error staking tokens");
    }
  };

  // Unstake tokens
  const unstakeTokens = async () => {
    try {
      if (!isValidAmount(unstakingAmount)) {
        toast.error(
          "Invalid unstaking amount. Please enter a positive number."
        );
        return;
      }

      // Check if unstaking amount is greater than the staked amount
      if (parseFloat(unstakingAmount) > parseFloat(stakedAmount)) {
        toast.error("Enter value equal to or less than the Staked STK.");
        return;
      }

      const { ethereum } = window;

      if (ethereum) {
        const provider = new ethers.providers.Web3Provider(ethereum);
        const signer = provider.getSigner();
        const stakingDappContract = new ethers.Contract(
          stakingDappAddress,
          StakingDapp.abi,
          signer
        );

        const amount = ethers.utils.parseUnits(
          unstakingAmount,
          stakingTokenDecimals
        );
        const tx = await stakingDappContract.unstake(amount);
        await tx.wait();
        toast.success("Unstaked successfully");
        fetchStakedAndRewardAmounts();
        fetchStkBalance();
      } else {
        console.log("Ethereum object does not exist");
      }
    } catch (error) {
      console.error("Error unstaking tokens:", error);
      toast.error("Error unstaking tokens");
    }
  };

  // Open reward modal
  const openRewardModal = async () => {
    try {
      const { ethereum } = window;

      if (ethereum) {
        const provider = new ethers.providers.Web3Provider(ethereum);
        const signer = provider.getSigner();
        const stakingDappContract = new ethers.Contract(
          stakingDappAddress,
          StakingDapp.abi,
          signer
        );

        const reward = await stakingDappContract.getRewardAmount(
          currentAccount
        );
        const formattedReward = ethers.utils.formatUnits(
          reward,
          rewardTokenDecimals
        );
        console.log(formattedReward);
        if (parseFloat(formattedReward) > 0) {
          setRewardAmount(formattedReward);
          setIsModalOpen(true);
        } else {
          toast.info("No rewards available to claim.");
        }
      } else {
        console.log("Ethereum object does not exist");
      }
    } catch (error) {
      console.error("Error fetching reward amount:", error);
      toast.error("Error fetching reward amount");
    }
  };

  // Claim reward
  const claimReward = async () => {
    try {
      if (parseFloat(rewardAmount) <= 0) {
        toast.error("Cannot claim reward. Amount must be greater than zero.");
        return;
      }

      const { ethereum } = window;

      if (ethereum) {
        const provider = new ethers.providers.Web3Provider(ethereum);
        const signer = provider.getSigner();
        const stakingDappContract = new ethers.Contract(
          stakingDappAddress,
          StakingDapp.abi,
          signer
        );

        // Set a high manual gas limit
        const gasLimit = 5000000; // Higher limit to ensure success

        // Try sending the transaction with a higher gas limit
        const tx = await stakingDappContract.claimReward({
          gasLimit: gasLimit,
        });
        await tx.wait();
        toast.success("Reward claimed successfully");
        setIsModalOpen(false);
        fetchStakedAndRewardAmounts();
        fetchStkBalance();
      } else {
        console.log("Ethereum object does not exist");
      }
    } catch (error) {
      console.error("Error claiming reward:", error);
      toast.error(
        "Error claiming reward. Please check the console for details."
      );
    }
  };

  // Faucet tokens
  const faucetTokens = async (amount) => {
    try {
      if (!isValidAmount(amount)) {
        toast.error(
          "Invalid faucet amount. Please enter a positive number less than 100."
        );
        return;
      }

      const parsedAmount = parseFloat(amount);
      if (parsedAmount >= 100) {
        toast.error("Request amount must be less than 100.");
        return;
      }

      const { ethereum } = window;

      if (ethereum) {
        const provider = new ethers.providers.Web3Provider(ethereum);
        const signer = provider.getSigner();
        const stakingTokenContract = new ethers.Contract(
          stakingTokenAddress,
          StakingToken.abi,
          signer
        );

        const gasLimit = 600000;

        const tx = await stakingTokenContract.mint(
          currentAccount,
          ethers.utils.parseUnits(amount, stakingTokenDecimals),
          {
            gasLimit: gasLimit,
          }
        );
        await tx.wait();
        toast.success("Tokens minted successfully");
        fetchStkBalance();
      } else {
        console.log("Ethereum object does not exist");
      }
    } catch (error) {
      console.error("Error minting tokens:", error);
      toast.error("Error minting tokens");
    }
  };

  // Validate amount
  const isValidAmount = (amount) => {
    return !isNaN(Number(amount)) && parseFloat(amount) > 0;
  };
 // Toggle dark/light mode
  const toggleTheme = () => {
    setDarkMode(!darkMode);
  };

  return (
    <div className={`App ${darkMode ? 'dark-mode' : 'light-mode'}`}>
      <header className="App-header">
        <div className="logo-container">
          <img src={darkMode ? darkLogo : lightLogo} alt="Core Logo" />
        </div>
        
        <div className="header-right">
          <button onClick={toggleTheme} className="theme-toggle">
            {darkMode ? <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="white" class="bi bi-brightness-high" viewBox="0 0 16 16">
  <path d="M8 11a3 3 0 1 1 0-6 3 3 0 0 1 0 6m0 1a4 4 0 1 0 0-8 4 4 0 0 0 0 8M8 0a.5.5 0 0 1 .5.5v2a.5.5 0 0 1-1 0v-2A.5.5 0 0 1 8 0m0 13a.5.5 0 0 1 .5.5v2a.5.5 0 0 1-1 0v-2A.5.5 0 0 1 8 13m8-5a.5.5 0 0 1-.5.5h-2a.5.5 0 0 1 0-1h2a.5.5 0 0 1 .5.5M3 8a.5.5 0 0 1-.5.5h-2a.5.5 0 0 1 0-1h2A.5.5 0 0 1 3 8m10.657-5.657a.5.5 0 0 1 0 .707l-1.414 1.415a.5.5 0 1 1-.707-.708l1.414-1.414a.5.5 0 0 1 .707 0m-9.193 9.193a.5.5 0 0 1 0 .707L3.05 13.657a.5.5 0 0 1-.707-.707l1.414-1.414a.5.5 0 0 1 .707 0m9.193 2.121a.5.5 0 0 1-.707 0l-1.414-1.414a.5.5 0 0 1 .707-.707l1.414 1.414a.5.5 0 0 1 0 .707M4.464 4.465a.5.5 0 0 1-.707 0L2.343 3.05a.5.5 0 1 1 .707-.707l1.414 1.414a.5.5 0 0 1 0 .708"/>
</svg> : 
            <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-moon" viewBox="0 0 16 16">
  <path d="M6 .278a.77.77 0 0 1 .08.858 7.2 7.2 0 0 0-.878 3.46c0 4.021 3.278 7.277 7.318 7.277q.792-.001 1.533-.16a.79.79 0 0 1 .81.316.73.73 0 0 1-.031.893A8.35 8.35 0 0 1 8.344 16C3.734 16 0 12.286 0 7.71 0 4.266 2.114 1.312 5.124.06A.75.75 0 0 1 6 .278M4.858 1.311A7.27 7.27 0 0 0 1.025 7.71c0 4.02 3.279 7.276 7.319 7.276a7.32 7.32 0 0 0 5.205-2.162q-.506.063-1.029.063c-4.61 0-8.343-3.714-8.343-8.29 0-1.167.242-2.278.681-3.286"/>
</svg>}
          </button>
          {currentAccount ? (
            <button onClick={disconnectWalletHandler} className="btn-wallet">
              Disconnect Wallet
            </button>            
          ) : ( 
            <button onClick={connectWalletHandler} className="btn-wallet">
              Connect Wallet
            </button>
          )}
        </div>
      </header>
      
      <main>
        <h1 className="main-title">Staking Dashboard</h1>
        
        {!currentAccount ? (
          <div className="connect-prompt">
            <p>Please connect your wallet to access the staking dashboard</p>
            <button onClick={connectWalletHandler} className="btn-wallet large">
              Connect Wallet
            </button>
          </div>
        ) : (
          <div className="dashboard">
            <div className="wallet-info">
              <span className="wallet-address">
                Wallet Connected: {currentAccount.slice(0, 6)}...{currentAccount.slice(-4)}
              </span>
            </div>
            
            <div className="stats-grid">
              <div className="stat-card">
                <div className="stat-icon">💰</div>
                <h3>STK Balance</h3>
                <p className="stat-value">{totalStkBalance} STK</p>
              </div>
              
              <div className="stat-card">
                <div className="stat-icon">🔒</div>
                <h3>Staked Amount</h3>
                <p className="stat-value">{stakedAmount} STK</p>
              </div>
              
              <div className="stat-card highlight">
                <div className="stat-icon">🎁</div>
                <h3>Rewards</h3>
                <p className="stat-value">{rewardAmount} RTK</p>
                <button onClick={openRewardModal} className="claim-btn">
                  Claim Now
                </button>
              </div>
            </div>
            
            <div className="action-cards">
              <div className="action-card">
                <h3>Stake Tokens</h3>
                <div className="input-group">
                  <input
                    type="number"
                    placeholder="Amount to stake"
                    value={stakingAmount}
                    onChange={(e) => setStakingAmount(e.target.value)}
                    className="input-field"
                  />
                  <button onClick={stakeTokens} className="btn-action">
                    Stake
                  </button>
                </div>
              </div>
              
              <div className="action-card">
                <h3>Unstake Tokens</h3>
                <div className="input-group">
                  <input
                    type="number"
                    placeholder="Amount to unstake"
                    value={unstakingAmount}
                    onChange={(e) => setUnstakingAmount(e.target.value)}
                    className="input-field"
                  />
                  <button onClick={unstakeTokens} className="btn-action">
                    Unstake
                  </button>
                </div>
              </div>
              
              <div className="action-card">
                <h3>Get Test Tokens</h3>
                <div className="input-group">
                  <input
                    type="number"
                    placeholder="Faucet amount"
                    value={faucetAmount}
                    onChange={(e) => setFaucetAmount(e.target.value)}
                    className="input-field"
                  />
                  <button onClick={faucetTokens} className="btn-action">
                    Get STK
                  </button>
                </div>
              </div>
            </div>
          </div>
        )}
      </main>

      <ToastContainer />
      <Modal
        isOpen={isModalOpen}
        onClose={() => setIsModalOpen(false)}
        onClaim={claimReward}
        rewardAmount={rewardAmount}
      />
    </div>
  );
}

export default App;


================================================
FILE: 02-Basic Staking Full Stack Dapp/frontend/src/App.test.js
================================================
import { render, screen } from '@testing-library/react';
import App from './App';

test('renders learn react link', () => {
  render(<App />);
  const linkElement = screen.getByText(/learn react/i);
  expect(linkElement).toBeInTheDocument();
});


================================================
FILE: 02-Basic Staking Full Stack Dapp/frontend/src/components/Modal.css
================================================
/* components/Modal.module.css */
.modalOverlay {
    position: fixed;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    background: rgba(0, 0, 0, 0.5);
    display: flex;
    justify-content: center;
    align-items: center;
  }
  
  .modalContent {
    background: white;
    padding: 20px;
    border-radius: 8px;
    width: 400px;
    text-align: center;
  }
  
  .inputField {
    width: 100%;
    padding: 10px;
    margin-top: 10px;
    border: 1px solid #ccc;
    border-radius: 4px;
  }
  
  .btnPrimary {
    background-color: #007bff;
    color: white;
    border: none;
    padding: 10px 20px;
    margin: 10px;
    border-radius: 4px;
    cursor: pointer;
  }
  
  .btnSecondary {
    background-color: #6c757d;
    color: white;
    border: none;
    padding: 10px 20px;
    margin: 10px;
    border-radius: 4px;
    cursor: pointer;
  }
  
  .errorMessage {
    color: red;
    margin-top: 10px;
  }
  

================================================
FILE: 02-Basic Staking Full Stack Dapp/frontend/src/components/Modal.js
================================================
import React from 'react';

const Modal = ({ isOpen, onClose, onClaim, rewardAmount }) => {
  if (!isOpen) return null;

  return (
    <div className="modal-overlay">
      <div className="modal-content">
        <h2>Claim Reward</h2>
        <p>Your reward amount is: {rewardAmount} REWARD</p>
        <button onClick={onClaim} className="btn-primary">
          Claim
        </button>
        <button onClick={onClose} className="btn-secondary">
          Close
        </button>
      </div>
    </div>
  );
};

export default Modal;


================================================
FILE: 02-Basic Staking Full Stack Dapp/frontend/src/contracts/IRewardToken.json
================================================
{
  "_format": "hh-sol-artifact-1",
  "contractName": "IRewardToken",
  "sourceName": "contracts/StakingDapp.sol",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        }
      ],
      "name": "allowance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "mint",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "transfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x",
  "deployedBytecode": "0x",
  "linkReferences": {},
  "deployedLinkReferences": {}
}


================================================
FILE: 02-Basic Staking Full Stack Dapp/frontend/src/contracts/RewardToken.json
================================================
{
  "_format": "hh-sol-artifact-1",
  "contractName": "RewardToken",
  "sourceName": "contracts/RewardToken.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "name",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "symbol",
          "type": "string"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "ECDSAInvalidSignature",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "length",
          "type": "uint256"
        }
      ],
      "name": "ECDSAInvalidSignatureLength",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "ECDSAInvalidSignatureS",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "allowance",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "needed",
          "type": "uint256"
        }
      ],
      "name": "ERC20InsufficientAllowance",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "balance",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "needed",
          "type": "uint256"
        }
      ],
      "name": "ERC20InsufficientBalance",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "approver",
          "type": "address"
        }
      ],
      "name": "ERC20InvalidApprover",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        }
      ],
      "name": "ERC20InvalidReceiver",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "ERC20InvalidSender",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        }
      ],
      "name": "ERC20InvalidSpender",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        }
      ],
      "name": "ERC2612ExpiredSignature",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "signer",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "ERC2612InvalidSigner",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "currentNonce",
          "type": "uint256"
        }
      ],
      "name": "InvalidAccountNonce",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidShortString",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "OwnableInvalidOwner",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "OwnableUnauthorizedAccount",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "str",
          "type": "string"
        }
      ],
      "name": "StringTooLong",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [],
      "name": "EIP712DomainChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DOMAIN_SEPARATOR",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        }
      ],
      "name": "allowance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "decimals",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "eip712Domain",
      "outputs": [
        {
          "internalType": "bytes1",
          "name": "fields",
          "type": "bytes1"
        },
        {
          "internalType": "string",
          "name": "name",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "version",
          "type": "string"
        },
        {
          "internalType": "uint256",
          "name": "chainId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "verifyingContract",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "salt",
          "type": "bytes32"
        },
        {
          "internalType": "uint256[]",
          "name": "extensions",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "mint",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "nonces",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "permit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "transfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x6101606040523480156200001257600080fd5b506040516200161b3803806200161b83398101604081905262000035916200030a565b6040805180820190915260018152603160f81b602082015282908190338285600362000062838262000405565b50600462000071828262000405565b5050506001600160a01b038116620000a457604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b620000af816200016f565b50620000bd826006620001c1565b61012052620000ce816007620001c1565b61014052815160208084019190912060e052815190820120610100524660a0526200015c60e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c052506200052b915050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000602083511015620001e157620001d983620001fa565b9050620001f4565b81620001ee848262000405565b5060ff90505b92915050565b600080829050601f8151111562000228578260405163305a27a960e01b81526004016200009b9190620004d1565b8051620002358262000506565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200027057818101518382015260200162000256565b50506000910152565b600082601f8301126200028b57600080fd5b81516001600160401b0380821115620002a857620002a86200023d565b604051601f8301601f19908116603f01168101908282118183101715620002d357620002d36200023d565b81604052838152866020858801011115620002ed57600080fd5b6200030084602083016020890162000253565b9695505050505050565b600080604083850312156200031e57600080fd5b82516001600160401b03808211156200033657600080fd5b620003448683870162000279565b935060208501519150808211156200035b57600080fd5b506200036a8582860162000279565b9150509250929050565b600181811c908216806200038957607f821691505b602082108103620003aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000400576000816000526020600020601f850160051c81016020861015620003db5750805b601f850160051c820191505b81811015620003fc57828155600101620003e7565b5050505b505050565b81516001600160401b038111156200042157620004216200023d565b620004398162000432845462000374565b84620003b0565b602080601f831160018114620004715760008415620004585750858301515b600019600386901b1c1916600185901b178555620003fc565b600085815260208120601f198616915b82811015620004a25788860151825594840194600190910190840162000481565b5085821015620004c15787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6020815260008251806020840152620004f281604085016020870162000253565b601f01601f19169190910160400192915050565b80516020808301519190811015620003aa5760001960209190910360031b1b16919050565b60805160a05160c05160e0516101005161012051610140516110956200058660003960006108980152600061086b0152600061075e0152600061073601526000610691015260006106bb015260006106e501526110956000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c8063715018a6116100a257806395d89b411161007157806395d89b411461021c578063a9059cbb14610224578063d505accf14610237578063dd62ed3e1461024a578063f2fde38b1461028357600080fd5b8063715018a6146101cb5780637ecebe00146101d357806384b0196e146101e65780638da5cb5b1461020157600080fd5b8063313ce567116100de578063313ce567146101765780633644e5151461018557806340c10f191461018d57806370a08231146101a257600080fd5b806306fdde0314610110578063095ea7b31461012e57806318160ddd1461015157806323b872dd14610163575b600080fd5b610118610296565b6040516101259190610df8565b60405180910390f35b61014161013c366004610e2e565b610328565b6040519015158152602001610125565b6002545b604051908152602001610125565b610141610171366004610e58565b610342565b60405160128152602001610125565b610155610366565b6101a061019b366004610e2e565b610375565b005b6101556101b0366004610e94565b6001600160a01b031660009081526020819052604090205490565b6101a0610383565b6101556101e1366004610e94565b610397565b6101ee6103b5565b6040516101259796959493929190610eaf565b6005546040516001600160a01b039091168152602001610125565b6101186103fb565b610141610232366004610e2e565b61040a565b6101a0610245366004610f48565b610418565b610155610258366004610fbb565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6101a0610291366004610e94565b610557565b6060600380546102a590610fee565b80601f01602080910402602001604051908101604052809291908181526020018280546102d190610fee565b801561031e5780601f106102f35761010080835404028352916020019161031e565b820191906000526020600020905b81548152906001019060200180831161030157829003601f168201915b5050505050905090565b600033610336818585610595565b60019150505b92915050565b6000336103508582856105a7565b61035b858585610625565b506001949350505050565b6000610370610684565b905090565b61037f82826107af565b5050565b61038b6107e5565b6103956000610812565b565b6001600160a01b03811660009081526008602052604081205461033c565b6000606080600080600060606103c9610864565b6103d1610891565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b6060600480546102a590610fee565b600033610336818585610625565b834211156104415760405163313c898160e11b8152600481018590526024015b60405180910390fd5b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c988888861048e8c6001600160a01b0316600090815260086020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006104e9826108be565b905060006104f9828787876108eb565b9050896001600160a01b0316816001600160a01b031614610540576040516325c0072360e11b81526001600160a01b0380831660048301528b166024820152604401610438565b61054b8a8a8a610595565b50505050505050505050565b61055f6107e5565b6001600160a01b03811661058957604051631e4fbdf760e01b815260006004820152602401610438565b61059281610812565b50565b6105a28383836001610919565b505050565b6001600160a01b03838116600090815260016020908152604080832093861683529290522054600019811461061f578181101561061057604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610438565b61061f84848484036000610919565b50505050565b6001600160a01b03831661064f57604051634b637e8f60e11b815260006004820152602401610438565b6001600160a01b0382166106795760405163ec442f0560e01b815260006004820152602401610438565b6105a28383836109ee565b6000306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480156106dd57507f000000000000000000000000000000000000000000000000000000000000000046145b1561070757507f000000000000000000000000000000000000000000000000000000000000000090565b610370604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b6001600160a01b0382166107d95760405163ec442f0560e01b815260006004820152602401610438565b61037f600083836109ee565b6005546001600160a01b031633146103955760405163118cdaa760e01b8152336004820152602401610438565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60606103707f00000000000000000000000000000000000000000000000000000000000000006006610b18565b60606103707f00000000000000000000000000000000000000000000000000000000000000006007610b18565b600061033c6108cb610684565b8360405161190160f01b8152600281019290925260228201526042902090565b6000806000806108fd88888888610bc3565b92509250925061090d8282610c92565b50909695505050505050565b6001600160a01b0384166109435760405163e602df0560e01b815260006004820152602401610438565b6001600160a01b03831661096d57604051634a1406b160e11b815260006004820152602401610438565b6001600160a01b038085166000908152600160209081526040808320938716835292905220829055801561061f57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516109e091815260200190565b60405180910390a350505050565b6001600160a01b038316610a19578060026000828254610a0e9190611028565b90915550610a8b9050565b6001600160a01b03831660009081526020819052604090205481811015610a6c5760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610438565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216610aa757600280548290039055610ac6565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610b0b91815260200190565b60405180910390a3505050565b606060ff8314610b3257610b2b83610d4b565b905061033c565b818054610b3e90610fee565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6a90610fee565b8015610bb75780601f10610b8c57610100808354040283529160200191610bb7565b820191906000526020600020905b815481529060010190602001808311610b9a57829003601f168201915b5050505050905061033c565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115610bfe5750600091506003905082610c88565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015610c52573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610c7e57506000925060019150829050610c88565b9250600091508190505b9450945094915050565b6000826003811115610ca657610ca6611049565b03610caf575050565b6001826003811115610cc357610cc3611049565b03610ce15760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115610cf557610cf5611049565b03610d165760405163fce698f760e01b815260048101829052602401610438565b6003826003811115610d2a57610d2a611049565b0361037f576040516335e2f38360e21b815260048101829052602401610438565b60606000610d5883610d8a565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600060ff8216601f81111561033c57604051632cd44ac360e21b815260040160405180910390fd5b6000815180845260005b81811015610dd857602081850181015186830182015201610dbc565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610e0b6020830184610db2565b9392505050565b80356001600160a01b0381168114610e2957600080fd5b919050565b60008060408385031215610e4157600080fd5b610e4a83610e12565b946020939093013593505050565b600080600060608486031215610e6d57600080fd5b610e7684610e12565b9250610e8460208501610e12565b9150604084013590509250925092565b600060208284031215610ea657600080fd5b610e0b82610e12565b60ff60f81b881681526000602060e06020840152610ed060e084018a610db2565b8381036040850152610ee2818a610db2565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015610f3657835183529284019291840191600101610f1a565b50909c9b505050505050505050505050565b600080600080600080600060e0888a031215610f6357600080fd5b610f6c88610e12565b9650610f7a60208901610e12565b95506040880135945060608801359350608088013560ff81168114610f9e57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610fce57600080fd5b610fd783610e12565b9150610fe560208401610e12565b90509250929050565b600181811c9082168061100257607f821691505b60208210810361102257634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561033c57634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fdfea264697066735822122058aceb15c5f9ab16678b7846629c6034bcc6687b7db72fb51fda48bc4787f5b464736f6c63430008180033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061010b5760003560e01c8063715018a6116100a257806395d89b411161007157806395d89b411461021c578063a9059cbb14610224578063d505accf14610237578063dd62ed3e1461024a578063f2fde38b1461028357600080fd5b8063715018a6146101cb5780637ecebe00146101d357806384b0196e146101e65780638da5cb5b1461020157600080fd5b8063313ce567116100de578063313ce567146101765780633644e5151461018557806340c10f191461018d57806370a08231146101a257600080fd5b806306fdde0314610110578063095ea7b31461012e57806318160ddd1461015157806323b872dd14610163575b600080fd5b610118610296565b6040516101259190610df8565b60405180910390f35b61014161013c366004610e2e565b610328565b6040519015158152602001610125565b6002545b604051908152602001610125565b610141610171366004610e58565b610342565b60405160128152602001610125565b610155610366565b6101a061019b366004610e2e565b610375565b005b6101556101b0366004610e94565b6001600160a01b031660009081526020819052604090205490565b6101a0610383565b6101556101e1366004610e94565b610397565b6101ee6103b5565b6040516101259796959493929190610eaf565b6005546040516001600160a01b039091168152602001610125565b6101186103fb565b610141610232366004610e2e565b61040a565b6101a0610245366004610f48565b610418565b610155610258366004610fbb565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6101a0610291366004610e94565b610557565b6060600380546102a590610fee565b80601f01602080910402602001604051908101604052809291908181526020018280546102d190610fee565b801561031e5780601f106102f35761010080835404028352916020019161031e565b820191906000526020600020905b81548152906001019060200180831161030157829003601f168201915b5050505050905090565b600033610336818585610595565b60019150505b92915050565b6000336103508582856105a7565b61035b858585610625565b506001949350505050565b6000610370610684565b905090565b61037f82826107af565b5050565b61038b6107e5565b6103956000610812565b565b6001600160a01b03811660009081526008602052604081205461033c565b6000606080600080600060606103c9610864565b6103d1610891565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b6060600480546102a590610fee565b600033610336818585610625565b834211156104415760405163313c898160e11b8152600481018590526024015b60405180910390fd5b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c988888861048e8c6001600160a01b0316600090815260086020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006104e9826108be565b905060006104f9828787876108eb565b9050896001600160a01b0316816001600160a01b031614610540576040516325c0072360e11b81526001600160a01b0380831660048301528b166024820152604401610438565b61054b8a8a8a610595565b50505050505050505050565b61055f6107e5565b6001600160a01b03811661058957604051631e4fbdf760e01b815260006004820152602401610438565b61059281610812565b50565b6105a28383836001610919565b505050565b6001600160a01b03838116600090815260016020908152604080832093861683529290522054600019811461061f578181101561061057604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610438565b61061f84848484036000610919565b50505050565b6001600160a01b03831661064f57604051634b637e8f60e11b815260006004820152602401610438565b6001600160a01b0382166106795760405163ec442f0560e01b815260006004820152602401610438565b6105a28383836109ee565b6000306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480156106dd57507f000000000000000000000000000000000000000000000000000000000000000046145b1561070757507f000000000000000000000000000000000000000000000000000000000000000090565b610370604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b6001600160a01b0382166107d95760405163ec442f0560e01b815260006004820152602401610438565b61037f600083836109ee565b6005546001600160a01b031633146103955760405163118cdaa760e01b8152336004820152602401610438565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60606103707f00000000000000000000000000000000000000000000000000000000000000006006610b18565b60606103707f00000000000000000000000000000000000000000000000000000000000000006007610b18565b600061033c6108cb610684565b8360405161190160f01b8152600281019290925260228201526042902090565b6000806000806108fd88888888610bc3565b92509250925061090d8282610c92565b50909695505050505050565b6001600160a01b0384166109435760405163e602df0560e01b815260006004820152602401610438565b6001600160a01b03831661096d57604051634a1406b160e11b815260006004820152602401610438565b6001600160a01b038085166000908152600160209081526040808320938716835292905220829055801561061f57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516109e091815260200190565b60405180910390a350505050565b6001600160a01b038316610a19578060026000828254610a0e9190611028565b90915550610a8b9050565b6001600160a01b03831660009081526020819052604090205481811015610a6c5760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610438565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216610aa757600280548290039055610ac6565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610b0b91815260200190565b60405180910390a3505050565b606060ff8314610b3257610b2b83610d4b565b905061033c565b818054610b3e90610fee565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6a90610fee565b8015610bb75780601f10610b8c57610100808354040283529160200191610bb7565b820191906000526020600020905b815481529060010190602001808311610b9a57829003601f168201915b5050505050905061033c565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115610bfe5750600091506003905082610c88565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015610c52573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610c7e57506000925060019150829050610c88565b9250600091508190505b9450945094915050565b6000826003811115610ca657610ca6611049565b03610caf575050565b6001826003811115610cc357610cc3611049565b03610ce15760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115610cf557610cf5611049565b03610d165760405163fce698f760e01b815260048101829052602401610438565b6003826003811115610d2a57610d2a611049565b0361037f576040516335e2f38360e21b815260048101829052602401610438565b60606000610d5883610d8a565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600060ff8216601f81111561033c57604051632cd44ac360e21b815260040160405180910390fd5b6000815180845260005b81811015610dd857602081850181015186830182015201610dbc565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610e0b6020830184610db2565b9392505050565b80356001600160a01b0381168114610e2957600080fd5b919050565b60008060408385031215610e4157600080fd5b610e4a83610e12565b946020939093013593505050565b600080600060608486031215610e6d57600080fd5b610e7684610e12565b9250610e8460208501610e12565b9150604084013590509250925092565b600060208284031215610ea657600080fd5b610e0b82610e12565b60ff60f81b881681526000602060e06020840152610ed060e084018a610db2565b8381036040850152610ee2818a610db2565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015610f3657835183529284019291840191600101610f1a565b50909c9b505050505050505050505050565b600080600080600080600060e0888a031215610f6357600080fd5b610f6c88610e12565b9650610f7a60208901610e12565b95506040880135945060608801359350608088013560ff81168114610f9e57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610fce57600080fd5b610fd783610e12565b9150610fe560208401610e12565b90509250929050565b600181811c9082168061100257607f821691505b60208210810361102257634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561033c57634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fdfea264697066735822122058aceb15c5f9ab16678b7846629c6034bcc6687b7db72fb51fda48bc4787f5b464736f6c63430008180033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}


================================================
FILE: 02-Basic Staking Full Stack Dapp/frontend/src/contracts/StakingDapp.json
================================================
{
  "_format": "hh-sol-artifact-1",
  "contractName": "StakingDapp",
  "sourceName": "contracts/StakingDapp.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_stakingToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_rewardToken",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        }
      ],
      "name": "AddressEmptyCode",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "AddressInsufficientBalance",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "FailedInnerCall",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "OwnableInvalidOwner",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "OwnableUnauthorizedAccount",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "SafeERC20FailedOperation",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "RewardClaimed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "Staked",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "Unstaked",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "REWARD_AMOUNT",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "REWARD_INTERVAL",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "claimReward",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        }
      ],
      "name": "getRewardAmount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        }
      ],
      "name": "getStakedAmount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "rewardBalance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "rewardToken",
      "outputs": [
        {
          "internalType": "contract IRewardToken",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "stake",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "stakes",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "lastRewardTime",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "stakingToken",
      "outputs": [
        {
          "internalType": "contract IERC20",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "unstake",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b50604051610c34380380610c3483398101604081905261002f91610169565b338061005657604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b61005f816100fd565b506001600160a01b0382161580159061008057506001600160a01b03811615155b6100cc5760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420746f6b656e20616464726573736573000000000000000000604482015260640161004d565b600180546001600160a01b039384166001600160a01b0319918216179091556002805492909316911617905561019c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b038116811461016457600080fd5b919050565b6000806040838503121561017c57600080fd5b6101858361014d565b91506101936020840161014d565b90509250929050565b610a89806101ab6000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c806372f702f31161008c578063b88a802f11610066578063b88a802f1461020e578063cf84944214610216578063f2fde38b1461021e578063f7c618c11461023157600080fd5b806372f702f3146101bf5780638da5cb5b146101ea578063a694fc3a146101fb57600080fd5b80634da6a556116100c85780634da6a556146101665780635dbdda691461018f57806367b40cf714610197578063715018a6146101b757600080fd5b806316934fc4146100ef5780632e17de781461013057806344a040f514610145575b600080fd5b6101166100fd36600461094b565b6003602052600090815260409020805460019091015482565b604080519283526020830191909152015b60405180910390f35b61014361013e366004610974565b610244565b005b61015861015336600461094b565b61035d565b604051908152602001610127565b61015861017436600461094b565b6001600160a01b031660009081526003602052604090205490565b610158600a81565b6101586101a536600461094b565b60046020526000908152604090205481565b610143610370565b6001546101d2906001600160a01b031681565b6040516001600160a01b039091168152602001610127565b6000546001600160a01b03166101d2565b610143610209366004610974565b610384565b6101436104ae565b610158600581565b61014361022c36600461094b565b6105d4565b6002546101d2906001600160a01b031681565b3360009081526003602052604090205481111561029f5760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b60448201526064015b60405180910390fd5b60006102aa33610612565b336000908152600460205260408120805492935083929091906102ce9084906109a3565b909155505033600090815260036020526040812080548492906102f29084906109b6565b90915550503360008181526003602052604090204260019182015554610324916001600160a01b03909116908461069e565b60405182815233907f0f5bb82176feb1b5e747e28471aa92156a04d9f3ab9f45f28e2d704232b93f759060200160405180910390a25050565b60008061036983610612565b9392505050565b610378610702565b610382600061072f565b565b600081116103d45760405162461bcd60e51b815260206004820152601d60248201527f416d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610296565b336000908152600360205260409020541561041f5760006103f433610612565b336000908152600460205260408120805492935083929091906104189084906109a3565b9091555050505b600154610437906001600160a01b031633308461077f565b33600090815260036020526040812080548392906104569084906109a3565b9091555050336000818152600360205260409081902042600190910155517f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d906104a39084815260200190565b60405180910390a250565b3360008181526004602052604081205490916104c990610612565b6104d391906109a3565b90506000811161051b5760405162461bcd60e51b81526020600482015260136024820152724e6f2072657761726420617661696c61626c6560681b6044820152606401610296565b3360008181526004602081815260408084208490556003909152918290204260019091015560025491516340c10f1960e01b815290810192909252602482018390526001600160a01b0316906340c10f1990604401600060405180830381600087803b15801561058a57600080fd5b505af115801561059e573d6000803e3d6000fd5b50506040518381523392507f106f923f993c2149d49b4255ff723acafa1f2d94393f561d3eda32ae348f724191506020016104a3565b6105dc610702565b6001600160a01b03811661060657604051631e4fbdf760e01b815260006004820152602401610296565b61060f8161072f565b50565b6001600160a01b038116600090815260036020908152604080832081518083019092528054808352600190910154928201929092529082036106575750600092915050565b6020810151429060009061066b90836109b6565b9050600061067a600a836109c9565b845190915061068a6005836109eb565b61069491906109eb565b9695505050505050565b6040516001600160a01b038381166024830152604482018390526106fd91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050506107be565b505050565b6000546001600160a01b031633146103825760405163118cdaa760e01b8152336004820152602401610296565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040516001600160a01b0384811660248301528381166044830152606482018390526107b89186918216906323b872dd906084016106cb565b50505050565b60006107d36001600160a01b03841683610821565b905080516000141580156107f85750808060200190518101906107f69190610a02565b155b156106fd57604051635274afe760e01b81526001600160a01b0384166004820152602401610296565b606061082f83836000610838565b90505b92915050565b60608147101561085d5760405163cd78605960e01b8152306004820152602401610296565b600080856001600160a01b031684866040516108799190610a24565b60006040518083038185875af1925050503d80600081146108b6576040519150601f19603f3d011682016040523d82523d6000602084013e6108bb565b606091505b50915091506106948683836060826108db576108d682610922565b610369565b81511580156108f257506001600160a01b0384163b155b1561091b57604051639996b31560e01b81526001600160a01b0385166004820152602401610296565b5080610369565b8051156109325780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b60006020828403121561095d57600080fd5b81356001600160a01b038116811461036957600080fd5b60006020828403121561098657600080fd5b5035919050565b634e487b7160e01b600052601160045260246000fd5b808201808211156108325761083261098d565b818103818111156108325761083261098d565b6000826109e657634e487b7160e01b600052601260045260246000fd5b500490565b80820281158282048414176108325761083261098d565b600060208284031215610a1457600080fd5b8151801515811461036957600080fd5b6000825160005b81811015610a455760208186018101518583015201610a2b565b50600092019182525091905056fea2646970667358221220f3921a408b8e35be31fb9b731a00916ad51e7bbebbd2b498e54d7d7e78acab0d64736f6c63430008180033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c806372f702f31161008c578063b88a802f11610066578063b88a802f1461020e578063cf84944214610216578063f2fde38b1461021e578063f7c618c11461023157600080fd5b806372f702f3146101bf5780638da5cb5b146101ea578063a694fc3a146101fb57600080fd5b80634da6a556116100c85780634da6a556146101665780635dbdda691461018f57806367b40cf714610197578063715018a6146101b757600080fd5b806316934fc4146100ef5780632e17de781461013057806344a040f514610145575b600080fd5b6101166100fd36600461094b565b6003602052600090815260409020805460019091015482565b604080519283526020830191909152015b60405180910390f35b61014361013e366004610974565b610244565b005b61015861015336600461094b565b61035d565b604051908152602001610127565b61015861017436600461094b565b6001600160a01b031660009081526003602052604090205490565b610158600a81565b6101586101a536600461094b565b60046020526000908152604090205481565b610143610370565b6001546101d2906001600160a01b031681565b6040516001600160a01b039091168152602001610127565b6000546001600160a01b03166101d2565b610143610209366004610974565b610384565b6101436104ae565b610158600581565b61014361022c36600461094b565b6105d4565b6002546101d2906001600160a01b031681565b3360009081526003602052604090205481111561029f5760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b60448201526064015b60405180910390fd5b60006102aa33610612565b336000908152600460205260408120805492935083929091906102ce9084906109a3565b909155505033600090815260036020526040812080548492906102f29084906109b6565b90915550503360008181526003602052604090204260019182015554610324916001600160a01b03909116908461069e565b60405182815233907f0f5bb82176feb1b5e747e28471aa92156a04d9f3ab9f45f28e2d704232b93f759060200160405180910390a25050565b60008061036983610612565b9392505050565b610378610702565b610382600061072f565b565b600081116103d45760405162461bcd60e51b815260206004820152601d60248201527f416d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610296565b336000908152600360205260409020541561041f5760006103f433610612565b336000908152600460205260408120805492935083929091906104189084906109a3565b9091555050505b600154610437906001600160a01b031633308461077f565b33600090815260036020526040812080548392906104569084906109a3565b9091555050336000818152600360205260409081902042600190910155517f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d906104a39084815260200190565b60405180910390a250565b3360008181526004602052604081205490916104c990610612565b6104d391906109a3565b90506000811161051b5760405162461bcd60e51b81526020600482015260136024820152724e6f2072657761726420617661696c61626c6560681b6044820152606401610296565b3360008181526004602081815260408084208490556003909152918290204260019091015560025491516340c10f1960e01b815290810192909252602482018390526001600160a01b0316906340c10f1990604401600060405180830381600087803b15801561058a57600080fd5b505af115801561059e573d6000803e3d6000fd5b50506040518381523392507f106f923f993c2149d49b4255ff723acafa1f2d94393f561d3eda32ae348f724191506020016104a3565b6105dc610702565b6001600160a01b03811661060657604051631e4fbdf760e01b815260006004820152602401610296565b61060f8161072f565b50565b6001600160a01b038116600090815260036020908152604080832081518083019092528054808352600190910154928201929092529082036106575750600092915050565b6020810151429060009061066b90836109b6565b9050600061067a600a836109c9565b845190915061068a6005836109eb565b61069491906109eb565b9695505050505050565b6040516001600160a01b038381166024830152604482018390526106fd91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050506107be565b505050565b6000546001600160a01b031633146103825760405163118cdaa760e01b8152336004820152602401610296565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040516001600160a01b0384811660248301528381166044830152606482018390526107b89186918216906323b872dd906084016106cb565b50505050565b60006107d36001600160a01b03841683610821565b905080516000141580156107f85750808060200190518101906107f69190610a02565b155b156106fd57604051635274afe760e01b81526001600160a01b0384166004820152602401610296565b606061082f83836000610838565b90505b92915050565b60608147101561085d5760405163cd78605960e01b8152306004820152602401610296565b600080856001600160a01b031684866040516108799190610a24565b60006040518083038185875af1925050503d80600081146108b6576040519150601f19603f3d011682016040523d82523d6000602084013e6108bb565b606091505b50915091506106948683836060826108db576108d682610922565b610369565b81511580156108f257506001600160a01b0384163b155b1561091b57604051639996b31560e01b81526001600160a01b0385166004820152602401610296565b5080610369565b8051156109325780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b60006020828403121561095d57600080fd5b81356001600160a01b038116811461036957600080fd5b60006020828403121561098657600080fd5b5035919050565b634e487b7160e01b600052601160045260246000fd5b808201808211156108325761083261098d565b818103818111156108325761083261098d565b6000826109e657634e487b7160e01b600052601260045260246000fd5b500490565b80820281158282048414176108325761083261098d565b600060208284031215610a1457600080fd5b8151801515811461036957600080fd5b6000825160005b81811015610a455760208186018101518583015201610a2b565b50600092019182525091905056fea2646970667358221220f3921a408b8e35be31fb9b731a00916ad51e7bbebbd2b498e54d7d7e78acab0d64736f6c63430008180033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}


================================================
FILE: 02-Basic Staking Full Stack Dapp/frontend/src/contracts/StakingToken.json
================================================
{
  "_format": "hh-sol-artifact-1",
  "contractName": "StakingToken",
  "sourceName": "contracts/StakingToken.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "name",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "symbol",
          "type": "string"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "ECDSAInvalidSignature",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "length",
          "type": "uint256"
        }
      ],
      "name": "ECDSAInvalidSignatureLength",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "ECDSAInvalidSignatureS",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "allowance",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "needed",
          "type": "uint256"
        }
      ],
      "name": "ERC20InsufficientAllowance",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "balance",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "needed",
          "type": "uint256"
        }
      ],
      "name": "ERC20InsufficientBalance",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "approver",
          "type": "address"
        }
      ],
      "name": "ERC20InvalidApprover",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        }
      ],
      "name": "ERC20InvalidReceiver",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "ERC20InvalidSender",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        }
      ],
      "name": "ERC20InvalidSpender",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        }
      ],
      "name": "ERC2612ExpiredSignature",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "signer",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "ERC2612InvalidSigner",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "currentNonce",
          "type": "uint256"
        }
      ],
      "name": "InvalidAccountNonce",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidShortString",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "OwnableInvalidOwner",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "OwnableUnauthorizedAccount",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "str",
          "type": "string"
        }
      ],
      "name": "StringTooLong",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [],
      "name": "EIP712DomainChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DOMAIN_SEPARATOR",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        }
      ],
      "name": "allowance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "decimals",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "eip712Domain",
      "outputs": [
        {
          "internalType": "bytes1",
          "name": "fields",
          "type": "bytes1"
        },
        {
          "internalType": "string",
          "name": "name",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "version",
          "type": "string"
        },
        {
          "internalType": "uint256",
          "name": "chainId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "verifyingContract",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "salt",
          "type": "bytes32"
        },
        {
          "internalType": "uint256[]",
          "name": "extensions",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "mint",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "nonces",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "permit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "transfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x6101606040523480156200001257600080fd5b50604051620016743803806200167483398101604081905262000035916200030a565b6040805180820190915260018152603160f81b602082015282908190338285600362000062838262000405565b50600462000071828262000405565b5050506001600160a01b038116620000a457604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b620000af816200016f565b50620000bd826006620001c1565b61012052620000ce816007620001c1565b61014052815160208084019190912060e052815190820120610100524660a0526200015c60e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c052506200052b915050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000602083511015620001e157620001d983620001fa565b9050620001f4565b81620001ee848262000405565b5060ff90505b92915050565b600080829050601f8151111562000228578260405163305a27a960e01b81526004016200009b9190620004d1565b8051620002358262000506565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200027057818101518382015260200162000256565b50506000910152565b600082601f8301126200028b57600080fd5b81516001600160401b0380821115620002a857620002a86200023d565b604051601f8301601f19908116603f01168101908282118183101715620002d357620002d36200023d565b81604052838152866020858801011115620002ed57600080fd5b6200030084602083016020890162000253565b9695505050505050565b600080604083850312156200031e57600080fd5b82516001600160401b03808211156200033657600080fd5b620003448683870162000279565b935060208501519150808211156200035b57600080fd5b506200036a8582860162000279565b9150509250929050565b600181811c908216806200038957607f821691505b602082108103620003aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000400576000816000526020600020601f850160051c81016020861015620003db5750805b601f850160051c820191505b81811015620003fc57828155600101620003e7565b5050505b505050565b81516001600160401b038111156200042157620004216200023d565b620004398162000432845462000374565b84620003b0565b602080601f831160018114620004715760008415620004585750858301515b600019600386901b1c1916600185901b178555620003fc565b600085815260208120601f198616915b82811015620004a25788860151825594840194600190910190840162000481565b5085821015620004c15787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6020815260008251806020840152620004f281604085016020870162000253565b601f01601f19169190910160400192915050565b80516020808301519190811015620003aa5760001960209190910360031b1b16919050565b60805160a05160c05160e0516101005161012051610140516110ee6200058660003960006108f1015260006108c4015260006107b70152600061078f015260006106ea015260006107140152600061073e01526110ee6000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c8063715018a6116100a257806395d89b411161007157806395d89b411461021c578063a9059cbb14610224578063d505accf14610237578063dd62ed3e1461024a578063f2fde38b1461028357600080fd5b8063715018a6146101cb5780637ecebe00146101d357806384b0196e146101e65780638da5cb5b1461020157600080fd5b8063313ce567116100de578063313ce567146101765780633644e5151461018557806340c10f191461018d57806370a08231146101a257600080fd5b806306fdde0314610110578063095ea7b31461012e57806318160ddd1461015157806323b872dd14610163575b600080fd5b610118610296565b6040516101259190610e51565b60405180910390f35b61014161013c366004610e87565b610328565b6040519015158152602001610125565b6002545b604051908152602001610125565b610141610171366004610eb1565b610342565b60405160128152602001610125565b610155610366565b6101a061019b366004610e87565b610375565b005b6101556101b0366004610eed565b6001600160a01b031660009081526020819052604090205490565b6101a06103e1565b6101556101e1366004610eed565b6103f5565b6101ee610413565b6040516101259796959493929190610f08565b6005546040516001600160a01b039091168152602001610125565b610118610459565b610141610232366004610e87565b610468565b6101a0610245366004610fa1565b610476565b610155610258366004611014565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6101a0610291366004610eed565b6105b0565b6060600380546102a590611047565b80601f01602080910402602001604051908101604052809291908181526020018280546102d190611047565b801561031e5780601f106102f35761010080835404028352916020019161031e565b820191906000526020600020905b81548152906001019060200180831161030157829003601f168201915b5050505050905090565b6000336103368185856105ee565b60019150505b92915050565b600033610350858285610600565b61035b85858561067e565b506001949350505050565b60006103706106dd565b905090565b68056bc75e2d631000008111156103d35760405162461bcd60e51b815260206004820152601c60248201527f616d6f756e74206d757374206265206c657373207468616e203130300000000060448201526064015b60405180910390fd5b6103dd8282610808565b5050565b6103e961083e565b6103f3600061086b565b565b6001600160a01b03811660009081526008602052604081205461033c565b6000606080600080600060606104276108bd565b61042f6108ea565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b6060600480546102a590611047565b60003361033681858561067e565b8342111561049a5760405163313c898160e11b8152600481018590526024016103ca565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886104e78c6001600160a01b0316600090815260086020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e001604051602081830303815290604052805190602001209050600061054282610917565b9050600061055282878787610944565b9050896001600160a01b0316816001600160a01b031614610599576040516325c0072360e11b81526001600160a01b0380831660048301528b1660248201526044016103ca565b6105a48a8a8a6105ee565b50505050505050505050565b6105b861083e565b6001600160a01b0381166105e257604051631e4fbdf760e01b8152600060048201526024016103ca565b6105eb8161086b565b50565b6105fb8383836001610972565b505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114610678578181101561066957604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016103ca565b61067884848484036000610972565b50505050565b6001600160a01b0383166106a857604051634b637e8f60e11b8152600060048201526024016103ca565b6001600160a01b0382166106d25760405163ec442f0560e01b8152600060048201526024016103ca565b6105fb838383610a47565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561073657507f000000000000000000000000000000000000000000000000000000000000000046145b1561076057507f000000000000000000000000000000000000000000000000000000000000000090565b610370604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b6001600160a01b0382166108325760405163ec442f0560e01b8152600060048201526024016103ca565b6103dd60008383610a47565b6005546001600160a01b031633146103f35760405163118cdaa760e01b81523360048201526024016103ca565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60606103707f00000000000000000000000000000000000000000000000000000000000000006006610b71565b60606103707f00000000000000000000000000000000000000000000000000000000000000006007610b71565b600061033c6109246106dd565b8360405161190160f01b8152600281019290925260228201526042902090565b60008060008061095688888888610c1c565b9250925092506109668282610ceb565b50909695505050505050565b6001600160a01b03841661099c5760405163e602df0560e01b8152600060048201526024016103ca565b6001600160a01b0383166109c657604051634a1406b160e11b8152600060048201526024016103ca565b6001600160a01b038085166000908152600160209081526040808320938716835292905220829055801561067857826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610a3991815260200190565b60405180910390a350505050565b6001600160a01b038316610a72578060026000828254610a679190611081565b90915550610ae49050565b6001600160a01b03831660009081526020819052604090205481811015610ac55760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016103ca565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216610b0057600280548290039055610b1f565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610b6491815260200190565b60405180910390a3505050565b606060ff8314610b8b57610b8483610da4565b905061033c565b818054610b9790611047565b80601f0160208091040260200160405190810160405280929190818152602001828054610bc390611047565b8015610c105780601f10610be557610100808354040283529160200191610c10565b820191906000526020600020905b815481529060010190602001808311610bf357829003601f168201915b5050505050905061033c565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115610c575750600091506003905082610ce1565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015610cab573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610cd757506000925060019150829050610ce1565b9250600091508190505b9450945094915050565b6000826003811115610cff57610cff6110a2565b03610d08575050565b6001826003811115610d1c57610d1c6110a2565b03610d3a5760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115610d4e57610d4e6110a2565b03610d6f5760405163fce698f760e01b8152600481018290526024016103ca565b6003826003811115610d8357610d836110a2565b036103dd576040516335e2f38360e21b8152600481018290526024016103ca565b60606000610db183610de3565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600060ff8216601f81111561033c57604051632cd44ac360e21b815260040160405180910390fd5b6000815180845260005b81811015610e3157602081850181015186830182015201610e15565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610e646020830184610e0b565b9392505050565b80356001600160a01b0381168114610e8257600080fd5b919050565b60008060408385031215610e9a57600080fd5b610ea383610e6b565b946020939093013593505050565b600080600060608486031215610ec657600080fd5b610ecf84610e6b565b9250610edd60208501610e6b565b9150604084013590509250925092565b600060208284031215610eff57600080fd5b610e6482610e6b565b60ff60f81b881681526000602060e06020840152610f2960e084018a610e0b565b8381036040850152610f3b818a610e0b565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015610f8f57835183529284019291840191600101610f73565b50909c9b505050505050505050505050565b600080600080600080600060e0888a031215610fbc57600080fd5b610fc588610e6b565b9650610fd360208901610e6b565b95506040880135945060608801359350608088013560ff81168114610ff757600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561102757600080fd5b61103083610e6b565b915061103e60208401610e6b565b90509250929050565b600181811c9082168061105b57607f821691505b60208210810361107b57634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561033c57634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fdfea2646970667358221220c76c3d894040a933b0e7fa69e5a0f9e25228b0d3cfde796f6163abfc9f1aae1764736f6c63430008180033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061010b5760003560e01c8063715018a6116100a257806395d89b411161007157806395d89b411461021c578063a9059cbb14610224578063d505accf14610237578063dd62ed3e1461024a578063f2fde38b1461028357600080fd5b8063715018a6146101cb5780637ecebe00146101d357806384b0196e146101e65780638da5cb5b1461020157600080fd5b8063313ce567116100de578063313ce567146101765780633644e5151461018557806340c10f191461018d57806370a08231146101a257600080fd5b806306fdde0314610110578063095ea7b31461012e57806318160ddd1461015157806323b872dd14610163575b600080fd5b610118610296565b6040516101259190610e51565b60405180910390f35b61014161013c366004610e87565b610328565b6040519015158152602001610125565b6002545b604051908152602001610125565b610141610171366004610eb1565b610342565b60405160128152602001610125565b610155610366565b6101a061019b366004610e87565b610375565b005b6101556101b0366004610eed565b6001600160a01b031660009081526020819052604090205490565b6101a06103e1565b6101556101e1366004610eed565b6103f5565b6101ee610413565b6040516101259796959493929190610f08565b6005546040516001600160a01b039091168152602001610125565b610118610459565b610141610232366004610e87565b610468565b6101a0610245366004610fa1565b610476565b610155610258366004611014565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6101a0610291366004610eed565b6105b0565b6060600380546102a590611047565b80601f01602080910402602001604051908101604052809291908181526020018280546102d190611047565b801561031e5780601f106102f35761010080835404028352916020019161031e565b820191906000526020600020905b81548152906001019060200180831161030157829003601f168201915b5050505050905090565b6000336103368185856105ee565b60019150505b92915050565b600033610350858285610600565b61035b85858561067e565b506001949350505050565b60006103706106dd565b905090565b68056bc75e2d631000008111156103d35760405162461bcd60e51b815260206004820152601c60248201527f616d6f756e74206d757374206265206c657373207468616e203130300000000060448201526064015b60405180910390fd5b6103dd8282610808565b5050565b6103e961083e565b6103f3600061086b565b565b6001600160a01b03811660009081526008602052604081205461033c565b6000606080600080600060606104276108bd565b61042f6108ea565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b6060600480546102a590611047565b60003361033681858561067e565b8342111561049a5760405163313c898160e11b8152600481018590526024016103ca565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886104e78c6001600160a01b0316600090815260086020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e001604051602081830303815290604052805190602001209050600061054282610917565b9050600061055282878787610944565b9050896001600160a01b0316816001600160a01b031614610599576040516325c0072360e11b81526001600160a01b0380831660048301528b1660248201526044016103ca565b6105a48a8a8a6105ee565b50505050505050505050565b6105b861083e565b6001600160a01b0381166105e257604051631e4fbdf760e01b8152600060048201526024016103ca565b6105eb8161086b565b50565b6105fb8383836001610972565b505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114610678578181101561066957604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016103ca565b61067884848484036000610972565b50505050565b6001600160a01b0383166106a857604051634b637e8f60e11b8152600060048201526024016103ca565b6001600160a01b0382166106d25760405163ec442f0560e01b8152600060048201526024016103ca565b6105fb838383610a47565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561073657507f000000000000000000000000000000000000000000000000000000000000000046145b1561076057507f000000000000000000000000000000000000000000000000000000000000000090565b610370604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b6001600160a01b0382166108325760405163ec442f0560e01b8152600060048201526024016103ca565b6103dd60008383610a47565b6005546001600160a01b031633146103f35760405163118cdaa760e01b81523360048201526024016103ca565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60606103707f00000000000000000000000000000000000000000000000000000000000000006006610b71565b60606103707f00000000000000000000000000000000000000000000000000000000000000006007610b71565b600061033c6109246106dd565b8360405161190160f01b8152600281019290925260228201526042902090565b60008060008061095688888888610c1c565b9250925092506109668282610ceb565b50909695505050505050565b6001600160a01b03841661099c5760405163e602df0560e01b8152600060048201526024016103ca565b6001600160a01b0383166109c657604051634a1406b160e11b8152600060048201526024016103ca565b6001600160a01b038085166000908152600160209081526040808320938716835292905220829055801561067857826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610a3991815260200190565b60405180910390a350505050565b6001600160a01b038316610a72578060026000828254610a679190611081565b90915550610ae49050565b6001600160a01b03831660009081526020819052604090205481811015610ac55760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016103ca565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216610b0057600280548290039055610b1f565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610b6491815260200190565b60405180910390a3505050565b606060ff8314610b8b57610b8483610da4565b905061033c565b818054610b9790611047565b80601f0160208091040260200160405190810160405280929190818152602001828054610bc390611047565b8015610c105780601f10610be557610100808354040283529160200191610c10565b820191906000526020600020905b815481529060010190602001808311610bf357829003601f168201915b5050505050905061033c565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115610c575750600091506003905082610ce1565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015610cab573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610cd757506000925060019150829050610ce1565b9250600091508190505b9450945094915050565b6000826003811115610cff57610cff6110a2565b03610d08575050565b6001826003811115610d1c57610d1c6110a2565b03610d3a5760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115610d4e57610d4e6110a2565b03610d6f5760405163fce698f760e01b8152600481018290526024016103ca565b6003826003811115610d8357610d836110a2565b036103dd576040516335e2f38360e21b8152600481018290526024016103ca565b60606000610db183610de3565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600060ff8216601f81111561033c57604051632cd44ac360e21b815260040160405180910390fd5b6000815180845260005b81811015610e3157602081850181015186830182015201610e15565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610e646020830184610e0b565b9392505050565b80356001600160a01b0381168114610e8257600080fd5b919050565b60008060408385031215610e9a57600080fd5b610ea383610e6b565b946020939093013593505050565b600080600060608486031215610ec657600080fd5b610ecf84610e6b565b9250610edd60208501610e6b565b9150604084013590509250925092565b600060208284031215610eff57600080fd5b610e6482610e6b565b60ff60f81b881681526000602060e06020840152610f2960e084018a610e0b565b8381036040850152610f3b818a610e0b565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015610f8f57835183529284019291840191600101610f73565b50909c9b505050505050505050505050565b600080600080600080600060e0888a031215610fbc57600080fd5b610fc588610e6b565b9650610fd360208901610e6b565b95506040880135945060608801359350608088013560ff81168114610ff757600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561102757600080fd5b61103083610e6b565b915061103e60208401610e6b565b90509250929050565b600181811c9082168061105b57607f821691505b60208210810361107b57634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561033c57634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fdfea2646970667358221220c76c3d894040a933b0e7fa69e5a0f9e25228b0d3cfde796f6163abfc9f1aae1764736f6c63430008180033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}


================================================
FILE: 02-Basic Staking Full Stack Dapp/frontend/src/index.css
================================================


================================================
FILE: 02-Basic Staking Full Stack Dapp/frontend/src/index.js
================================================
import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
  <React.StrictMode>
    <App />
  </React.StrictMode>
);

// If you want to start measuring performance in your app, pass a function
// to log results (for example: reportWebVitals(console.log))
// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
reportWebVitals();


================================================
FILE: 02-Basic Staking Full Stack Dapp/frontend/src/reportWebVitals.js
================================================
const reportWebVitals = onPerfEntry => {
  if (onPerfEntry && onPerfEntry instanceof Function) {
    import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {
      getCLS(onPerfEntry);
      getFID(onPerfEntry);
      getFCP(onPerfEntry);
      getLCP(onPerfEntry);
      getTTFB(onPerfEntry);
    });
  }
};

export default reportWebVitals;


================================================
FILE: 02-Basic Staking Full Stack Dapp/frontend/src/setupTests.js
================================================
// jest-dom adds custom jest matchers for asserting on DOM nodes.
// allows you to do things like:
// expect(element).toHaveTextContent(/react/i)
// learn more: https://github.com/testing-library/jest-dom
import '@testing-library/jest-dom';


================================================
FILE: 02-Basic Staking Full Stack Dapp/hardhat.config.js
================================================
/**
 * @type import('hardhat/config').HardhatUserConfig
 */

require('@nomiclabs/hardhat-ethers');
require("@nomiclabs/hardhat-waffle");
require("dotenv").config();


const PRIVATE_KEY = process.env.PRIVATE_KEY;

module.exports = {
   defaultNetwork: 'core_testnet',

   networks: {
      hardhat: {
      },
      core_testnet: {
         url: 'https://rpc.test2.btcs.network',
         accounts: [PRIVATE_KEY],
         chainId: 1114,
      }
   },
   solidity: {
      compilers: [
        {
           version: '0.8.24',
           settings: {
            evmVersion: 'shanghai',
            optimizer: {
                 enabled: true,
                 runs: 200,
              },
           },
        },
      ],
   },
   paths: {
      sources: './contracts',
      cache: './cache',
      artifacts: './artifacts',
   },
   mocha: {
      timeout: 20000,
   },
};

================================================
FILE: 02-Basic Staking Full Stack Dapp/ignition/modules/Lock.js
================================================
const { buildModule } = require("@nomicfoundation/hardhat-ignition/modules");

const JAN_1ST_2030 = 1893456000;
const ONE_GWEI = 1_000_000_000n;

module.exports = buildModule("LockModule", (m) => {
  const unlockTime = m.getParameter("unlockTime", JAN_1ST_2030);
  const lockedAmount = m.getParameter("lockedAmount", ONE_GWEI);

  const lock = m.contract("Lock", [unlockTime], {
    value: lockedAmount,
  });

  return { lock };
});


================================================
FILE: 02-Basic Staking Full Stack Dapp/package.json
================================================
{
  "name": "staking-dapp",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@nomiclabs/hardhat-ethers": "^2.2.3",
    "@nomiclabs/hardhat-waffle": "^2.0.6",
    "@rainbow-me/rainbowkit": "^2.1.3",
    "@web3-react/core": "^8.2.3",
    "@web3-react/injected-connector": "^6.0.7",
    "chai": "^5.1.1",
    "dotenv": "^16.5.0",
    "ethereum-waffle": "^4.0.10",
    "ethers": "^5.7.2"
  },
  "devDependencies": {
    "@openzeppelin/contracts": "^5.0.2",
    "hardhat": "^2.22.6"
  }
}


================================================
FILE: 02-Basic Staking Full Stack Dapp/scripts/deploy.js
================================================
const { ethers } = require("hardhat");

async function main() {
    const [deployer] = await ethers.getSigners();

    console.log("Deploying contracts with the account:", deployer.address);

    const StakingToken = await ethers.getContractFactory("StakingToken");
    const stakingToken = await StakingToken.deploy("Staking Token", "STK");

    const RewardToken = await ethers.getContractFactory("RewardToken");
    const rewardToken = await RewardToken.deploy("Reward Token", "RTK");

    const StakingDapp = await ethers.getContractFactory("StakingDapp");
    const stakingDapp = await StakingDapp.deploy(stakingToken.address, rewardToken.address);

    console.log("Contracts deployed:");
    console.log("Staking Token:", stakingToken.address);
    console.log("Reward Token:", rewardToken.address);
    console.log("Staking Dapp:", stakingDapp.address);
}

main()
    .then(() => process.exit(0))
    .catch((error) => {
        console.error(error);
        process.exit(1);
    });


================================================
FILE: 03-Decentralized Guestbook/.gitignore
================================================
# Node.js dependencies
/node_modules

# Hardhat artifacts
/artifacts
/cache

# Environment and secret files
.env
.secret.json

# Log files
npm-debug.log*
yarn-debug.log*
yarn-error.log*

# Ignore build output
/build

# Miscellaneous
.DS_Store

================================================
FILE: 03-Decentralized Guestbook/README.md
================================================
# Guestbook dApp Tutorial / Boilerplate

## Overview

This guide will walk you through creating a decentralized guestbook application using Hardhat for development, Solidity for smart contracts, and React for the frontend. This setup is tailored for the Core network.

By following this tutorial, you'll learn how to:

- Develop and deploy smart contracts on the Core Testnet.
- Build a React frontend to interact with your smart contracts.
- Integrate MetaMask for secure user interactions and transactions.

## Why Use This Boilerplate?

- **Decentralization**: Store guestbook entries on the blockchain, ensuring data integrity and transparency.
- **Security**: Immutable and tamper-proof records stored on the blockchain.
- **Transparency**: All entries and transactions are publicly visible and verifiable.
- **Real-World Applications**: Ideal for creating transparent feedback systems, community engagement tools, or personal guestbooks.

## Prerequisites

Before getting started, ensure you have the following:

- **Node.js**: Install Node.js from [nodejs.org](https://nodejs.org/).
- **npm**: Node.js includes npm (Node Package Manager).
- **MetaMask**: Install the MetaMask browser extension from [metamask.io](https://metamask.io/).
- **Core Testnet Configuration**: Configure MetaMask to connect to the Core Testnet.
  - **Network Name**: Core Testnet
  - **New RPC URL**: `https://rpc.test.btcs.network`
  - **Chain ID**: `1115`
  - **Currency Symbol**: `CORE`
- **Text Editor**: Use a text editor like Visual Studio Code.
- **Core Faucet**: To get test CORE tokens for transactions, visit the [Core Faucet](https://scan.test.btcs.network/faucet) and refer to the [instructions for use](https://docs.coredao.org/docs/Dev-Guide/core-faucet).

## Project Setup

### 1. Initialize the Project
Create a new directory for your project and navigate into it:

```sh
mkdir guestbook-dapp
cd guestbook-dapp
npm init --yes
```
<img width="1512" alt="gdscreenshot1" src="https://github.com/Camnaz/guestbook-dapp/assets/32852637/10da1acb-f824-4014-a058-fa4e85d6515f">


## 2. Install Dependencies
Install Hardhat and other necessary dependencies:

```
npm install --save-dev hardhat @nomiclabs/hardhat-ethers ethers
npm install --save-dev chai @nomiclabs/hardhat-waffle
npm install react react-dom
```

<img width="1512" alt="gdscreenshot2" src="https://github.com/Camnaz/guestbook-dapp/assets/32852637/36812823-d36d-4c65-9ff2-700d5010edad">

3. Set Up Hardhat
Initialize a new Hardhat project:

```
npx hardhat
```

<img width="1512" alt="gdscreenshot3" src="https://github.com/Camnaz/guestbook-dapp/assets/32852637/9e95a66e-16eb-475f-8036-ba43385f6272">

Select "Create a Javascript Project" and "no" for installing the project's sample dependencies.

We will now open up our newly created hardhat project in a code editor, for this guide, we will be using Visual Studio Code.
navigate to the root of your directory in the terminal and type `code .` and hit enter

## 4. Create secret.json File
Create a secret.json file in the root directory of your project to store your private key securely. Replace YOUR_PRIVATE_KEY with your actual private key.
```
{
  "PrivateKey": "YOUR_PRIVATE_KEY"
}
```
<img width="1512" alt="gdscreenshot5" src="https://github.com/Camnaz/guestbook-dapp/assets/32852637/3b6b1921-e5c0-471c-ae7e-d4cad79f7fa0">


> [Refer to this guide](https://support.metamask.io/managing-my-wallet/secret-recovery-phrase-and-private-keys/how-to-export-an-accounts-private-key/) for instructions on how to export your account's private key via Metamask.

## 5. Update .gitignore File
Update your .gitignore file to ensure that your secret.json file and other sensitive files are not committed to version control.

Create or update the .gitignore file in your root directory with the following content:

```
# Node.js dependencies
/node_modules

# Hardhat artifacts
/artifacts
/cache

# Environment and secret files
.env
.secret.json

# Log files
npm-debug.log*
yarn-debug.log*
yarn-error.log*

# Ignore build output
/build

# Miscellaneous
.DS_Store
```

## 6. Update hardhat.config.js
Replace the contents of hardhat.config.js with the following configuration:

Ensure that the network settings are configured correctly for [Core Testnet](https://docs.coredao.org/docs/Dev-Guide/contract-verify#hardhat-verification)

```
/**
 * @type import('hardhat/config').HardhatUserConfig
 */

require('@nomiclabs/hardhat-ethers');
require("@nomiclabs/hardhat-waffle");

const { PrivateKey } = require('./secret.json');

module.exports = {
   defaultNetwork: 'testnet',

   networks: {
      hardhat: {
      },
      testnet: {
         url: 'https://rpc.test2.btcs.network',
         accounts: [PRIVATE_KEY],
         chainId: 1115,  // Ensure this matches the Core testnet chain ID
      }
   },
   solidity: {
      compilers: [
        {
           version: '0.8.21',  // Update to at least 0.8.20 to support the 'paris' EVM
           settings: {
              evmVersion: 'paris',  // Specify 'paris' EVM version
              optimizer: {
                 enabled: true,
                 runs: 200,
              },
           },
        },
      ],
   },
   paths: {
      sources: './contracts',
      cache: './cache',
      artifacts: './artifacts',
   },
   mocha: {
      timeout: 20000,  // You can adjust the timeout as needed
   },
};
```
<img width="1512" alt="gdscreenshot5 1" src="https://github.com/Camnaz/guestbook-dapp/assets/32852637/d78ae0d4-c9dc-4ba0-9e96-99c38c0a7c89">


## Writing the Smart Contract

1. Create the Guestbook Smart Contract

Delete the `lock.sol` file in `Contracts`
Create a file `contracts/Guestbook.sol` with the following content:

```
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;

/// @title Guestbook
contract Guestbook {
    struct Entry {
        string name;
        string message;
    }

    Entry[] public entries;

    function signGuestbook(string memory _name, string memory _message) public {
        entries.push(Entry(_name, _message));
    }

    function getEntries() public view returns (Entry[] memory) {
        return entries;
    }
}
```
<img width="1512" alt="gdscreenshot6" src="https://github.com/Camnaz/guestbook-dapp/assets/32852637/61243ee5-8e24-4dd2-97fb-7e5bb301f220">


## Deploying the Smart Contract

1. Create Deployment Script
Create a file scripts/deploy.js with the following content:

```
const hre = require("hardhat");

async function main() {
  await hre.run('compile'); // Ensure the contracts are compiled

  const Guestbook = await hre.ethers.getContractFactory("Guestbook");
  const guestbook = await Guestbook.deploy();

  await guestbook.deployed();
  console.log("Guestbook contract deployed to:", guestbook.address);
}

main().catch((error) => {
  console.error(error);
  process.exitCode = 1;
});
```

<img width="1512" alt="gdscreenshot7" src="https://github.com/Camnaz/guestbook-dapp/assets/32852637/7520ccdc-c78d-4e14-8fc8-5c2d6d619573">


2. Deploy the Contract

Deploy the contract to the Core network:

```
npx hardhat run scripts/deploy.js --network testnet
```

<img width="1512" alt="gdscreenshot8" src="https://github.com/Camnaz/guestbook-dapp/assets/32852637/67c484f2-fd49-4bca-8688-f35be8361839">


## Setting Up the React Frontend

1. Create the React App
Create the basic structure for a React frontend:

```
npx create-react-app frontend
cd frontend
```

<img width="1512" alt="gdscreenshot9" src="https://github.com/Camnaz/guestbook-dapp/assets/32852637/31cfed96-9abf-4d2e-8bda-1fa2a8f1efa3">

<img width="1512" alt="gdscreenshot10" src="https://github.com/Camnaz/guestbook-dapp/assets/32852637/02027836-e117-4b1c-8324-e81194277b83">


3. Add GuestbookAbi.json

Copy the Guestbook.json file from artifacts/contracts/Guestbook.sol/ to the frontend/src directory and rename it to GuestbookAbi.json.

Ensure you replace placeholders like `YOUR_CONTRACT_ADDRESS` with actual values from your deployment.

<img width="1512" alt="gdscreenshot11" src="https://github.com/Camnaz/guestbook-dapp/assets/32852637/1bf2a0c9-647c-49b9-90b5-011c354e2484">

<img width="1512" alt="gdscreenshot12" src="https://github.com/Camnaz/guestbook-dapp/assets/32852637/b6f4e0e2-e31b-4495-9738-f94586ee14e2">


5. Update frontend/src/App.js
Create or update the src/App.js file with the following content:

```
import React, { useState, useEffect } from 'react';
import { ethers } from 'ethers';
import GuestbookArtifact from './GuestbookAbi.json'; // Import the entire JSON artifact

const contractAddress = 'YOUR_CONTRACT_ADDRESS'; // Replace with your deployed contract address
const GuestbookAbi = GuestbookArtifact.abi; // Extract the ABI

function App() {
  const [contract, setContract] = useState(null);
  const [entries, setEntries] = useState([]);
  const [name, setName] = useState("");
  const [message, setMessage] = useState("");
  const [loading, setLoading] = useState(true);
  const [error, setError] = useState("");

  useEffect(() => {
    const init = async () => {
      if (window.ethereum) {
        try {
          console.log("Connecting to MetaMask...");
          const provider = new ethers.providers.Web3Provider(window.ethereum);
          
          await provider.send("eth_requestAccounts", []); // Request account access if needed

          const network = await provider.getNetwork();
          if (network.chainId !== 1115) {
            throw new Error("Please switch to the Core Testnet in MetaMask.");
          }

          const signer = provider.getSigner();
          console.log("Signer obtained:", signer);
          const tempContract = new ethers.Contract(contractAddress, GuestbookAbi, signer);
          setContract(tempContract);
          console.log("Contract initialized:", tempContract);

          const entries = await tempContract.getEntries();
          setEntries(entries);
          console.log("Entries loaded:", entries);
        } catch (error) {
          console.error("Error connecting to contract:", error);
          setError(error.message);
        } finally {
          setLoading(false);
        }
      } else {
        console.error("Please install MetaMask!");
        setError("Please install MetaMask!");
        setLoading(false);
      }
    };
    init();
  }, []);

  const signGuestbook = async () => {
    if (!contract) {
      console.error("Contract is not initialized!");
      setError("Contract is not initialized!");
      return;
    }

    try {
      console.log("Signing guestbook with:", name, message);
      const tx = await contract.signGuestbook(name, message, {
        gasLimit: 300000, // Adjust gas limit as necessary
      });
      console.log("Transaction sent:", tx);
      await tx.wait(); // Wait for the transaction to be mined
      console.log("Transaction mined:", tx);

      const updatedEntries = await contract.getEntries();
      setEntries(updatedEntries);
      console.log("Updated entries:", updatedEntries);
    } catch (error) {
      console.error("Error signing guestbook:", error);
      setError("Error signing guestbook. Please try again.");
    }
  };

  return (
    <div>
      <h1>Guestbook DApp</h1>
      {loading ? (
        <p>Loading contract...</p>
      ) : (
        <>
          {error && <p style={{ color: 'red' }}>{error}</p>}
          <input 
            type="text" 
            placeholder="Your Name" 
            value={name} 
            onChange={(e) => setName(e.target.value)} 
          />
          <input 
            type="text" 
            placeholder="Your Message" 
            value={message} 
            onC
Download .txt
gitextract_cf9vv67o/

├── .gitignore
├── 01-Simple Storage Full Stack Dapp/
│   ├── .babelrc
│   ├── .editorconfig
│   ├── .eslintrc
│   ├── .gitignore
│   ├── .jest/
│   │   └── setup.ts
│   ├── .prettierrc
│   ├── README.md
│   ├── index.html
│   ├── jest.config.js
│   ├── package.json
│   ├── postcss.config.js
│   ├── src/
│   │   ├── components/
│   │   │   └── App.tsx
│   │   ├── contract/
│   │   │   ├── Storage.json
│   │   │   └── Storage.sol
│   │   ├── index.tsx
│   │   ├── style/
│   │   │   └── index.css
│   │   ├── utils/
│   │   │   └── index.ts
│   │   └── vite-env.d.ts
│   ├── tailwind.config.js
│   ├── tsconfig.json
│   └── vite.config.ts
├── 02-Basic Staking Full Stack Dapp/
│   ├── .gitignore
│   ├── README.md
│   ├── contracts/
│   │   ├── RewardToken.sol
│   │   ├── StakingDapp.sol
│   │   └── StakingToken.sol
│   ├── frontend/
│   │   ├── .gitignore
│   │   ├── README.md
│   │   ├── package.json
│   │   ├── public/
│   │   │   ├── index.html
│   │   │   ├── manifest.json
│   │   │   └── robots.txt
│   │   └── src/
│   │       ├── App.css
│   │       ├── App.js
│   │       ├── App.test.js
│   │       ├── components/
│   │       │   ├── Modal.css
│   │       │   └── Modal.js
│   │       ├── contracts/
│   │       │   ├── IRewardToken.json
│   │       │   ├── RewardToken.json
│   │       │   ├── StakingDapp.json
│   │       │   └── StakingToken.json
│   │       ├── index.css
│   │       ├── index.js
│   │       ├── reportWebVitals.js
│   │       └── setupTests.js
│   ├── hardhat.config.js
│   ├── ignition/
│   │   └── modules/
│   │       └── Lock.js
│   ├── package.json
│   └── scripts/
│       └── deploy.js
├── 03-Decentralized Guestbook/
│   ├── .gitignore
│   ├── README.md
│   ├── contracts/
│   │   └── Guestbook.sol
│   ├── frontend/
│   │   ├── .gitignore
│   │   ├── README.md
│   │   ├── package.json
│   │   ├── public/
│   │   │   ├── index.html
│   │   │   ├── manifest.json
│   │   │   └── robots.txt
│   │   └── src/
│   │       ├── App.css
│   │       ├── App.js
│   │       ├── GuestbookAbi.json
│   │       ├── index.css
│   │       ├── index.js
│   │       ├── reportWebVitals.js
│   │       └── setupTests.js
│   ├── hardhat.config.js
│   ├── package.json
│   └── scripts/
│       └── deploy.js
├── 04-Pyth Pull Oracles/
│   ├── .gitignore
│   ├── README.md
│   ├── contracts/
│   │   └── PythFeedBoilerplate.sol
│   ├── frontend/
│   │   ├── .gitignore
│   │   ├── README.md
│   │   ├── package.json
│   │   ├── public/
│   │   │   ├── index.html
│   │   │   ├── manifest.json
│   │   │   └── robots.txt
│   │   └── src/
│   │       ├── App.css
│   │       ├── App.js
│   │       ├── App.test.js
│   │       ├── PythFeedBoilerplateAbi.json
│   │       ├── index.css
│   │       ├── index.js
│   │       ├── reportWebVitals.js
│   │       └── setupTests.js
│   ├── hardhat.config.js
│   ├── package.json
│   └── scripts/
│       └── deploy.js
├── 05-Hello-World-Dapp/
│   ├── .gitignore
│   ├── README.md
│   ├── contracts/
│   │   ├── HelloWorld.sol
│   │   └── Lock.sol
│   ├── frontend/
│   │   ├── .gitignore
│   │   ├── README.md
│   │   ├── package.json
│   │   ├── public/
│   │   │   ├── index.html
│   │   │   ├── manifest.json
│   │   │   └── robots.txt
│   │   └── src/
│   │       ├── App.css
│   │       ├── App.js
│   │       ├── App.test.js
│   │       ├── Contract-ABI/
│   │       │   └── HelloWorld.json
│   │       ├── HelloWorld.css
│   │       ├── HelloWorld.js
│   │       ├── index.css
│   │       ├── index.js
│   │       ├── reportWebVitals.js
│   │       └── setupTests.js
│   ├── hardhat.config.js
│   ├── ignition/
│   │   └── modules/
│   │       └── Lock.js
│   ├── npx
│   ├── package.json
│   ├── scripts/
│   │   └── deploy.js
│   └── test/
│       └── HelloWorld.js
├── 06-Subgraphs-on-Core/
│   ├── README.md
│   ├── abis/
│   │   └── Guestbook.json
│   ├── build/
│   │   ├── Guestbook/
│   │   │   ├── Guestbook.json
│   │   │   └── Guestbook.wasm
│   │   ├── schema.graphql
│   │   └── subgraph.yaml
│   ├── docker-compose.yml
│   ├── generated/
│   │   ├── Guestbook/
│   │   │   └── Guestbook.ts
│   │   └── schema.ts
│   ├── networks.json
│   ├── package.json
│   ├── schema.graphql
│   ├── src/
│   │   └── guestbook.ts
│   ├── subgraph.yaml
│   ├── tests/
│   │   ├── guestbook-utils.ts
│   │   └── guestbook.test.ts
│   └── tsconfig.json
├── 07-NFT Minitng dApp on Core/
│   ├── .gitignore
│   ├── README.md
│   ├── assets/
│   │   └── metadata.json
│   ├── contracts/
│   │   ├── Lock.sol
│   │   └── MyNFT.sol
│   ├── frontend/
│   │   ├── .gitignore
│   │   ├── README.md
│   │   ├── index.html
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── App.css
│   │   │   ├── App.jsx
│   │   │   ├── abis/
│   │   │   │   └── MyNFTAbi.json
│   │   │   ├── index.css
│   │   │   └── main.jsx
│   │   └── vite.config.js
│   ├── hardhat.config.js
│   ├── ignition/
│   │   └── modules/
│   │       └── Lock.js
│   ├── package.json
│   ├── scripts/
│   │   └── deploy.js
│   └── test/
│       └── Lock.js
├── 08-Guess-Game/
│   ├── .gitignore
│   ├── Frontend/
│   │   ├── .eslintrc.json
│   │   ├── .gitignore
│   │   ├── README.md
│   │   ├── app/
│   │   │   ├── components/
│   │   │   │   └── ui/
│   │   │   │       ├── button.tsx
│   │   │   │       ├── card.tsx
│   │   │   │       └── input.tsx
│   │   │   ├── constants/
│   │   │   │   ├── config.json
│   │   │   │   └── solidityABI.json
│   │   │   ├── globals.css
│   │   │   ├── layout.tsx
│   │   │   └── page.tsx
│   │   ├── components.json
│   │   ├── lib/
│   │   │   └── utils.ts
│   │   ├── next.config.ts
│   │   ├── package.json
│   │   ├── postcss.config.mjs
│   │   ├── tailwind.config.ts
│   │   └── tsconfig.json
│   ├── README.md
│   ├── contracts/
│   │   ├── GuessTheNumber.sol
│   │   └── GuessToken.sol
│   ├── hardhat.config.js
│   ├── ignition/
│   │   └── modules/
│   │       └── Lock.js
│   ├── package.json
│   ├── scripts/
│   │   └── deploy-guess-game.js
│   └── test/
│       └── Lock.js
├── 09-Token-swap-Dapp/
│   ├── .gitignore
│   ├── README.md
│   ├── contracts/
│   │   ├── Swap.sol
│   │   └── Token.sol
│   ├── frontend/
│   │   ├── .gitignore
│   │   ├── README.md
│   │   ├── package.json
│   │   ├── public/
│   │   │   ├── index.html
│   │   │   ├── manifest.json
│   │   │   └── robots.txt
│   │   └── src/
│   │       ├── App.css
│   │       ├── App.js
│   │       ├── App.test.js
│   │       ├── contracts/
│   │       │   ├── Swap.json
│   │       │   └── Token.json
│   │       ├── index.css
│   │       ├── index.js
│   │       ├── reportWebVitals.js
│   │       └── setupTests.js
│   ├── hardhat.config.js
│   ├── package.json
│   ├── scripts/
│   │   └── deploy.js
│   └── test/
│       └── Swap.js
├── 10-Advanced-Stake-Dapp/
│   ├── .gitignore
│   ├── Frontend/
│   │   ├── .eslintrc.json
│   │   ├── .gitignore
│   │   ├── README.md
│   │   ├── app/
│   │   │   ├── globals.css
│   │   │   ├── layout.tsx
│   │   │   └── page.tsx
│   │   ├── components/
│   │   │   ├── connect-wallet.tsx
│   │   │   ├── global-overview.tsx
│   │   │   ├── header.tsx
│   │   │   ├── info-tooltip.tsx
│   │   │   ├── mode-toggle.tsx
│   │   │   ├── stake-form.tsx
│   │   │   ├── staker-directory.tsx
│   │   │   ├── staking-dashboard.tsx
│   │   │   ├── staking-form.tsx
│   │   │   ├── theme-provider.tsx
│   │   │   ├── theme-toggle.tsx
│   │   │   ├── ui/
│   │   │   │   ├── button.tsx
│   │   │   │   ├── card.tsx
│   │   │   │   ├── dropdown-menu.tsx
│   │   │   │   ├── input.tsx
│   │   │   │   ├── label.tsx
│   │   │   │   ├── progress.tsx
│   │   │   │   ├── slider.tsx
│   │   │   │   ├── tabs.tsx
│   │   │   │   ├── toast.tsx
│   │   │   │   ├── toaster.tsx
│   │   │   │   └── tooltip.tsx
│   │   │   ├── user-dashboard.tsx
│   │   │   ├── user-list.tsx
│   │   │   ├── user-stats.tsx
│   │   │   ├── wallet-connect.tsx
│   │   │   ├── wallet-provider.tsx
│   │   │   └── withdraw-form.tsx
│   │   ├── components.json
│   │   ├── constants/
│   │   │   └── constansts.tsx
│   │   ├── hooks/
│   │   │   ├── use-staking-contract.tsx
│   │   │   └── use-toast.ts
│   │   ├── lib/
│   │   │   └── utils.ts
│   │   ├── next.config.ts
│   │   ├── package.json
│   │   ├── postcss.config.mjs
│   │   ├── tailwind.config.ts
│   │   ├── tsconfig.json
│   │   └── types/
│   │       └── global.d.ts
│   ├── README.md
│   ├── contracts/
│   │   ├── RewardToken.sol
│   │   └── Stake.sol
│   ├── hardhat.config.js
│   ├── ignition/
│   │   └── modules/
│   │       └── Lock.js
│   ├── package.json
│   ├── scripts/
│   │   ├── deploy-stake.js
│   │   └── mint.js
│   └── test/
│       └── Lock.js
├── 11-Bridge-Token-Using-Chainlink/
│   ├── License
│   ├── README.md
│   ├── foundry/
│   │   ├── .github/
│   │   │   └── workflows/
│   │   │       └── test.yml
│   │   ├── .gitignore
│   │   ├── README.md
│   │   ├── foundry.toml
│   │   ├── remappings.txt
│   │   ├── script/
│   │   │   ├── CrosschainBridge.s.sol
│   │   │   └── HelperConfig.s.sol
│   │   └── src/
│   │       ├── CrosschainBridge.sol
│   │       ├── LinkTokenInterface.sol
│   │       └── USDC.sol
│   └── frontend/
│       ├── .gitignore
│       ├── ABI/
│       │   ├── CrosschainBridge.json
│       │   └── USDC.json
│       ├── README.md
│       ├── WalletConfig.tsx
│       ├── app/
│       │   ├── Provider.tsx
│       │   ├── globals.css
│       │   ├── layout.tsx
│       │   └── page.tsx
│       ├── components/
│       │   └── ui/
│       │       ├── alert.tsx
│       │       ├── button.tsx
│       │       ├── card.tsx
│       │       ├── input.tsx
│       │       └── label.tsx
│       ├── components.json
│       ├── eslint.config.mjs
│       ├── lib/
│       │   └── utils.ts
│       ├── next.config.ts
│       ├── package.json
│       ├── postcss.config.mjs
│       └── tsconfig.json
├── 12-Core-MultiSig/
│   ├── .gitignore
│   ├── Frontend/
│   │   ├── .eslintrc.json
│   │   ├── .gitignore
│   │   ├── README.md
│   │   ├── app/
│   │   │   ├── client.ts
│   │   │   ├── constants/
│   │   │   │   ├── MultiSigFactory.json
│   │   │   │   └── config.json
│   │   │   ├── create/
│   │   │   │   ├── createmultisig.tsx
│   │   │   │   └── multisigcreation.tsx
│   │   │   ├── dashboard/
│   │   │   │   └── page.tsx
│   │   │   ├── globals.css
│   │   │   ├── layout.tsx
│   │   │   ├── linkdash.tsx
│   │   │   ├── owners/
│   │   │   │   └── page.tsx
│   │   │   ├── page.tsx
│   │   │   └── wallet/
│   │   │       ├── DialogBoxes/
│   │   │       │   ├── Confirm.tsx
│   │   │       │   ├── Execute.tsx
│   │   │       │   ├── Revoke.tsx
│   │   │       │   └── Submit.tsx
│   │   │       └── page.tsx
│   │   ├── components/
│   │   │   ├── DashboardLayout.tsx
│   │   │   └── ui/
│   │   │       ├── button.tsx
│   │   │       ├── card.tsx
│   │   │       ├── dialog.tsx
│   │   │       ├── input.tsx
│   │   │       ├── label.tsx
│   │   │       └── table.tsx
│   │   ├── components.json
│   │   ├── lib/
│   │   │   └── utils.ts
│   │   ├── next.config.ts
│   │   ├── package.json
│   │   ├── postcss.config.mjs
│   │   ├── tailwind.config.js
│   │   ├── tailwind.config.ts
│   │   └── tsconfig.json
│   ├── README.md
│   ├── contracts/
│   │   ├── MultiSig.sol
│   │   ├── MultiSigFactory.sol
│   │   └── interfaces/
│   │       └── IMultiSig.sol
│   ├── hardhat.config.js
│   ├── ignition/
│   │   └── modules/
│   │       └── Lock.js
│   ├── package.json
│   ├── scripts/
│   │   └── deploy-multisig.js
│   └── test/
│       └── Lock.js
├── 13-Core-Test-Token-Faucet/
│   ├── .gitignore
│   ├── Frontend/
│   │   ├── .eslintrc.json
│   │   ├── .gitignore
│   │   ├── README.md
│   │   ├── app/
│   │   │   ├── globals.css
│   │   │   ├── layout.tsx
│   │   │   └── page.tsx
│   │   ├── components/
│   │   │   ├── badge.tsx
│   │   │   ├── dialog.tsx
│   │   │   ├── dropdown-menu.tsx
│   │   │   ├── navbar.tsx
│   │   │   ├── network-modal.tsx
│   │   │   ├── select.tsx
│   │   │   ├── toast.tsx
│   │   │   ├── toaster.tsx
│   │   │   ├── token-selector.tsx
│   │   │   └── ui/
│   │   │       ├── badge.tsx
│   │   │       ├── button.tsx
│   │   │       ├── card.tsx
│   │   │       ├── dialog.tsx
│   │   │       ├── dropdown-menu.tsx
│   │   │       ├── input.tsx
│   │   │       ├── select.tsx
│   │   │       ├── toast.tsx
│   │   │       └── toaster.tsx
│   │   ├── components.json
│   │   ├── hooks/
│   │   │   └── use-toast.ts
│   │   ├── lib/
│   │   │   ├── constants.ts
│   │   │   ├── tokens.ts
│   │   │   └── utils.ts
│   │   ├── next.config.js
│   │   ├── next.config.mjs
│   │   ├── package.json
│   │   ├── postcss.config.js
│   │   ├── postcss.config.mjs
│   │   ├── tailwind.config.ts
│   │   └── tsconfig.json
│   ├── README.md
│   ├── contracts/
│   │   ├── tDai.sol
│   │   ├── tUSD.sol
│   │   └── tUSDC.sol
│   ├── hardhat.config.js
│   ├── ignition/
│   │   └── modules/
│   │       └── Lock.js
│   ├── package.json
│   ├── scripts/
│   │   └── deploy.js
│   └── test/
│       └── Lock.js
├── 14-Corelend/
│   ├── .gitignore
│   ├── Frontend/
│   │   ├── .eslintrc.json
│   │   ├── .gitignore
│   │   ├── README.md
│   │   ├── app/
│   │   │   ├── borrow/
│   │   │   │   └── page.tsx
│   │   │   ├── constants/
│   │   │   │   └── constants.tsx
│   │   │   ├── globals.css
│   │   │   ├── layout.tsx
│   │   │   ├── lend/
│   │   │   │   └── page.tsx
│   │   │   ├── loans/
│   │   │   │   ├── page.tsx
│   │   │   │   ├── store.tsx
│   │   │   │   └── test.tsx
│   │   │   └── page.tsx
│   │   ├── components/
│   │   │   ├── navbar.tsx
│   │   │   ├── ui/
│   │   │   │   ├── badge.tsx
│   │   │   │   ├── button.tsx
│   │   │   │   ├── card.tsx
│   │   │   │   ├── input.tsx
│   │   │   │   ├── select.tsx
│   │   │   │   ├── table.tsx
│   │   │   │   ├── toast.tsx
│   │   │   │   └── toaster.tsx
│   │   │   └── wallet-provider.tsx
│   │   ├── components.json
│   │   ├── hooks/
│   │   │   └── use-toast.ts
│   │   ├── lib/
│   │   │   └── utils.ts
│   │   ├── next.config.ts
│   │   ├── package.json
│   │   ├── postcss.config.mjs
│   │   ├── tailwind.config.ts
│   │   └── tsconfig.json
│   ├── README.md
│   ├── contracts/
│   │   └── CoreLend.sol
│   ├── hardhat.config.js
│   ├── ignition/
│   │   └── modules/
│   │       └── Lock.js
│   ├── package.json
│   ├── scripts/
│   │   └── deploy.js
│   └── test/
│       └── Lock.js
├── 15-dns-protocol/
│   ├── .gitignore
│   ├── Frontend/
│   │   ├── .eslintrc.json
│   │   ├── .gitignore
│   │   ├── README.md
│   │   ├── app/
│   │   │   ├── dashboard/
│   │   │   │   └── page.tsx
│   │   │   ├── globals.css
│   │   │   ├── layout.tsx
│   │   │   ├── page.tsx
│   │   │   └── registry/
│   │   │       ├── loading.tsx
│   │   │       └── page.tsx
│   │   ├── components/
│   │   │   ├── alert.tsx
│   │   │   ├── domain-card.tsx
│   │   │   ├── domain-details.tsx
│   │   │   ├── domain-search.tsx
│   │   │   ├── header.tsx
│   │   │   ├── mode-toggle.tsx
│   │   │   ├── network-switcher.tsx
│   │   │   ├── theme-provider.tsx
│   │   │   ├── tooltip.tsx
│   │   │   ├── ui/
│   │   │   │   ├── alert.tsx
│   │   │   │   ├── badge.tsx
│   │   │   │   ├── button.tsx
│   │   │   │   ├── card.tsx
│   │   │   │   ├── dialog.tsx
│   │   │   │   ├── dropdown-menu.tsx
│   │   │   │   ├── input.tsx
│   │   │   │   └── skeleton.tsx
│   │   │   └── wallet-provider.tsx
│   │   ├── components.json
│   │   ├── constants/
│   │   │   └── config.json
│   │   ├── hooks/
│   │   │   └── use-wallet.tsx
│   │   ├── lib/
│   │   │   ├── core-contract.ts
│   │   │   └── utils.ts
│   │   ├── next.config.js
│   │   ├── package.json
│   │   ├── postcss.config.mjs
│   │   ├── tailwind.config.ts
│   │   ├── tsconfig.json
│   │   └── types/
│   │       └── global.d.ts
│   ├── README.md
│   ├── contracts/
│   │   ├── ENS-Registry.sol
│   │   ├── RegistrationContract.sol
│   │   └── ResolverContract.sol
│   ├── hardhat.config.js
│   ├── ignition/
│   │   └── modules/
│   │       └── Lock.js
│   ├── package.json
│   ├── scripts/
│   │   └── deploy.js
│   └── test/
│       └── Lock.js
├── 16-Pump.Core/
│   ├── .gitignore
│   ├── Frontend/
│   │   ├── .eslintrc.json
│   │   ├── .gitignore
│   │   ├── README.md
│   │   ├── app/
│   │   │   ├── dashboard/
│   │   │   │   └── page.tsx
│   │   │   ├── globals.css
│   │   │   ├── layout.tsx
│   │   │   ├── page.tsx
│   │   │   └── scss/
│   │   │       ├── _layout.scss
│   │   │       ├── _mixins.scss
│   │   │       ├── _reset.scss
│   │   │       ├── _typography.scss
│   │   │       ├── _utilities.scss
│   │   │       ├── _variables.scss
│   │   │       ├── components/
│   │   │       │   ├── _badges.scss
│   │   │       │   ├── _buttons.scss
│   │   │       │   ├── _cards.scss
│   │   │       │   ├── _dialogs.scss
│   │   │       │   ├── _dropdown.scss
│   │   │       │   ├── _forms.scss
│   │   │       │   ├── _launch-dialog.scss
│   │   │       │   ├── _navbar.scss
│   │   │       │   ├── _progress.scss
│   │   │       │   ├── _toast.scss
│   │   │       │   └── _token-listing.scss
│   │   │       └── main.scss
│   │   ├── components/
│   │   │   ├── buy-token-dialog.tsx
│   │   │   ├── connect-wallet.tsx
│   │   │   ├── creator-dashboard.tsx
│   │   │   ├── dialog.tsx
│   │   │   ├── launch-token-button.tsx
│   │   │   ├── launch-token-dialog.tsx
│   │   │   ├── navbar.tsx
│   │   │   ├── network-switcher.tsx
│   │   │   ├── owner-dashboard.tsx
│   │   │   ├── token-listing.tsx
│   │   │   └── ui/
│   │   │       ├── badge.tsx
│   │   │       ├── button.tsx
│   │   │       ├── card.tsx
│   │   │       ├── dialog.tsx
│   │   │       ├── dropdown-menu.tsx
│   │   │       ├── input.tsx
│   │   │       ├── label.tsx
│   │   │       ├── progress.tsx
│   │   │       ├── sheet.tsx
│   │   │       ├── slider.tsx
│   │   │       ├── tabs.tsx
│   │   │       ├── toast.tsx
│   │   │       └── toaster.tsx
│   │   ├── components.json
│   │   ├── constants/
│   │   │   └── constansts.tsx
│   │   ├── hooks/
│   │   │   ├── use-toast.ts
│   │   │   └── use-web3.tsx
│   │   ├── lib/
│   │   │   └── utils.ts
│   │   ├── next.config.ts
│   │   ├── package.json
│   │   ├── postcss.config.mjs
│   │   ├── providers/
│   │   │   └── web3-provider.tsx
│   │   ├── tailwind.config.ts
│   │   ├── tsconfig.json
│   │   └── types/
│   │       └── global.d.ts
│   ├── README.md
│   ├── contracts/
│   │   ├── MemeFactory.sol
│   │   └── MemeToken.sol
│   ├── hardhat.config.js
│   ├── ignition/
│   │   └── modules/
│   │       └── Lock.js
│   ├── package.json
│   ├── scripts/
│   │   └── deploy.js
│   └── test/
│       └── Lock.js
├── 17-Crowd-Funding-Dapp/
│   ├── Contract/
│   │   ├── .gitignore
│   │   ├── README.md
│   │   ├── contracts/
│   │   │   ├── CrowdFunding.sol
│   │   │   └── CrowdFundingFactory.sol
│   │   ├── hardhat.config.js
│   │   ├── package.json
│   │   └── scripts/
│   │       └── verify/
│   │           └── my-contract.js
│   ├── Frontend/
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── .vite/
│   │   │   └── deps_temp_6cf5ba4c/
│   │   │       ├── AllWalletsUI-27PR6NO2.js
│   │   │       ├── BuyScreen-N3MCCV33.js
│   │   │       ├── CoinbaseSDKConnection-PPK2JHPJ.js
│   │   │       ├── EcosystemWalletConnectUI-ANAXYA53.js
│   │   │       ├── InAppWalletConnectUI-IYEPIHHJ.js
│   │   │       ├── InAppWalletSelectionUI-QJ7CQPJG.js
│   │   │       ├── ModelViewer-GZZWO7FG.js
│   │   │       ├── QRCodeRenderer-ZNSMXL36.js
│   │   │       ├── adapter-F5WOI5K5.js
│   │   │       ├── ai-M4CK2DAC.js
│   │   │       ├── ai.spotonchain-Q44G73RV.js
│   │   │       ├── app-3BIDNXMN.js
│   │   │       ├── app-4OQAM2FO.js
│   │   │       ├── app-4WB6G67C.js
│   │   │       ├── app-5BPIXU3J.js
│   │   │       ├── app-5PJX72YN.js
│   │   │       ├── app-6X4TWE2O.js
│   │   │       ├── app-BJYH6WND.js
│   │   │       ├── app-C6AFF7V2.js
│   │   │       ├── app-CEHOPHKL.js
│   │   │       ├── app-FEBEDQ5O.js
│   │   │       ├── app-FXWSJIOW.js
│   │   │       ├── app-HGBIYGYJ.js
│   │   │       ├── app-HRMMGDE2.js
│   │   │       ├── app-IC2A3RDS.js
│   │   │       ├── app-ICREXY5T.js
│   │   │       ├── app-IEYL7BOV.js
│   │   │       ├── app-IVIV25DE.js
│   │   │       ├── app-J7XLYP5E.js
│   │   │       ├── app-JGIJQHBM.js
│   │   │       ├── app-JPKIQZES.js
│   │   │       ├── app-KCNXS7XQ.js
│   │   │       ├── app-LUGTXPGI.js
│   │   │       ├── app-M6LRY2SK.js
│   │   │       ├── app-MFHNNKPC.js
│   │   │       ├── app-MS6Z5MIK.js
│   │   │       ├── app-O5DHUCKC.js
│   │   │       ├── app-OXRH4XRW.js
│   │   │       ├── app-PUVYKP42.js
│   │   │       ├── app-QASKZRBP.js
│   │   │       ├── app-R4JLN24B.js
│   │   │       ├── app-RQXR7MZ5.js
│   │   │       ├── app-RRYWU2T6.js
│   │   │       ├── app-SFALV7Q7.js
│   │   │       ├── app-VCRSWMVS.js
│   │   │       ├── app-XKLTXZZ5.js
│   │   │       ├── app-XMYPKI5F.js
│   │   │       ├── app-YG5QZHYU.js
│   │   │       ├── app-Z3ZKSY2N.js
│   │   │       ├── app.core-FOKZSNJL.js
│   │   │       ├── app.qubic-45GFYY2N.js
│   │   │       ├── arweave-57OCWZ5C.js
│   │   │       ├── auth-ZNEFTCXD.js
│   │   │       ├── baby-VXQWXU2X.js
│   │   │       ├── balanceOf-77XLALLF.js
│   │   │       ├── biconomy-PIJEZ3DY.js
│   │   │       ├── buyFromListing-NAQIOY7I.js
│   │   │       ├── cc-VULA5ISR.js
│   │   │       ├── cc-XODV5KUP.js
│   │   │       ├── cc.localtrade-QLM7DIOM.js
│   │   │       ├── ccip-BECV2KBX.js
│   │   │       ├── ch-DJKOH7L6.js
│   │   │       ├── checkContractWalletSignature-6DFUQS7E.js
│   │   │       ├── checkContractWalletSignedTypedData-SEVCYJA7.js
│   │   │       ├── chunk-253DMNI3.js
│   │   │       ├── chunk-2HYPHUAF.js
│   │   │       ├── chunk-2MTJELC7.js
│   │   │       ├── chunk-2RRVHQYX.js
│   │   │       ├── chunk-35YKZJSE.js
│   │   │       ├── chunk-36FW3ZLE.js
│   │   │       ├── chunk-3DBHE3NE.js
│   │   │       ├── chunk-3GSJ2FQJ.js
│   │   │       ├── chunk-3ZOYRTTJ.js
│   │   │       ├── chunk-4BCIASJM.js
│   │   │       ├── chunk-4OCU6WGG.js
│   │   │       ├── chunk-4PEUWIWY.js
│   │   │       ├── chunk-4RRAU5V7.js
│   │   │       ├── chunk-4U2YWK76.js
│   │   │       ├── chunk-5CO5G7XZ.js
│   │   │       ├── chunk-5EFACFVF.js
│   │   │       ├── chunk-5THTWD2M.js
│   │   │       ├── chunk-5U5XBS6S.js
│   │   │       ├── chunk-65EUCVOP.js
│   │   │       ├── chunk-673YCYST.js
│   │   │       ├── chunk-67BSOYLQ.js
│   │   │       ├── chunk-6FLJU7W7.js
│   │   │       ├── chunk-6LAJV43E.js
│   │   │       ├── chunk-6RU56BH7.js
│   │   │       ├── chunk-6WNCTW75.js
│   │   │       ├── chunk-6XF6HOWC.js
│   │   │       ├── chunk-7AY3QZZV.js
│   │   │       ├── chunk-7ETS5GH6.js
│   │   │       ├── chunk-7EY5MWB2.js
│   │   │       ├── chunk-7QDK5KLB.js
│   │   │       ├── chunk-7VZHRFCE.js
│   │   │       ├── chunk-7ZCK2FX5.js
│   │   │       ├── chunk-7ZNEOXS2.js
│   │   │       ├── chunk-AARWH2GQ.js
│   │   │       ├── chunk-ADIC4TC2.js
│   │   │       ├── chunk-AG4NO6K6.js
│   │   │       ├── chunk-AWMNEQRO.js
│   │   │       ├── chunk-B7XHB4Z2.js
│   │   │       ├── chunk-BBNNHC5G.js
│   │   │       ├── chunk-BZXRHH4X.js
│   │   │       ├── chunk-CLN3QXW2.js
│   │   │       ├── chunk-CNLOA7AS.js
│   │   │       ├── chunk-CXAZLQ2Z.js
│   │   │       ├── chunk-CYVKJMZE.js
│   │   │       ├── chunk-DYKFWRMQ.js
│   │   │       ├── chunk-EGJT3UEX.js
│   │   │       ├── chunk-EHYTL2NA.js
│   │   │       ├── chunk-EIBOABXT.js
│   │   │       ├── chunk-EIVAOYE5.js
│   │   │       ├── chunk-F2BEZVSV.js
│   │   │       ├── chunk-FHZU65JA.js
│   │   │       ├── chunk-FNI7M3UI.js
│   │   │       ├── chunk-FXBAO7K3.js
│   │   │       ├── chunk-G26WKBGM.js
│   │   │       ├── chunk-GGVPULQZ.js
│   │   │       ├── chunk-GHAZ34ED.js
│   │   │       ├── chunk-GINVHONX.js
│   │   │       ├── chunk-GOA7IGSB.js
│   │   │       ├── chunk-HI6IFF64.js
│   │   │       ├── chunk-HJ6E36KT.js
│   │   │       ├── chunk-HL2TAEA2.js
│   │   │       ├── chunk-HO57TQQM.js
│   │   │       ├── chunk-I2GEMA2B.js
│   │   │       ├── chunk-I5DK3TWY.js
│   │   │       ├── chunk-IMSXM5CF.js
│   │   │       ├── chunk-J7FYPWA5.js
│   │   │       ├── chunk-JBQP4JIV.js
│   │   │       ├── chunk-JTR2PIFP.js
│   │   │       ├── chunk-JZC47WAY.js
│   │   │       ├── chunk-KWA5PGSC.js
│   │   │       ├── chunk-LO5SQBMX.js
│   │   │       ├── chunk-M3WBOOWW.js
│   │   │       ├── chunk-ME5GAE4N.js
│   │   │       ├── chunk-MGEBXLXC.js
│   │   │       ├── chunk-MWAIX6LF.js
│   │   │       ├── chunk-N24CESYN.js
│   │   │       ├── chunk-NJUWOGZE.js
│   │   │       ├── chunk-NKFQ2LZT.js
│   │   │       ├── chunk-NOA36MVL.js
│   │   │       ├── chunk-NPJBMLFY.js
│   │   │       ├── chunk-NPXNISXJ.js
│   │   │       ├── chunk-O6KA6WKL.js
│   │   │       ├── chunk-O6LGEXJ4.js
│   │   │       ├── chunk-O6UZ65WN.js
│   │   │       ├── chunk-O7UPLLUM.js
│   │   │       ├── chunk-OHYFITXC.js
│   │   │       ├── chunk-P7ZDTV2E.js
│   │   │       ├── chunk-PB7CMXGP.js
│   │   │       ├── chunk-PHVX3XOV.js
│   │   │       ├── chunk-PK5NRJAC.js
│   │   │       ├── chunk-PWFRCBEK.js
│   │   │       ├── chunk-Q3TN3POE.js
│   │   │       ├── chunk-QC3K2OKT.js
│   │   │       ├── chunk-QHKZ43P6.js
│   │   │       ├── chunk-QIUEWTOP.js
│   │   │       ├── chunk-QLCPWJYR.js
│   │   │       ├── chunk-QLJVAXYD.js
│   │   │       ├── chunk-QVNJVROL.js
│   │   │       ├── chunk-R554PO5S.js
│   │   │       ├── chunk-R76ND7QY.js
│   │   │       ├── chunk-RC344ZND.js
│   │   │       ├── chunk-RF65TSG5.js
│   │   │       ├── chunk-S4ZGHGPT.js
│   │   │       ├── chunk-S6VQW2VI.js
│   │   │       ├── chunk-SEVZ5PBP.js
│   │   │       ├── chunk-SJKAB62J.js
│   │   │       ├── chunk-SNQ54XRM.js
│   │   │       ├── chunk-SPELR2RL.js
│   │   │       ├── chunk-SWMZXE3E.js
│   │   │       ├── chunk-TFBEDS4S.js
│   │   │       ├── chunk-TTOANXGP.js
│   │   │       ├── chunk-U3QNWT4A.js
│   │   │       ├── chunk-U55JVTZU.js
│   │   │       ├── chunk-U7TO6S3N.js
│   │   │       ├── chunk-UY2SRO54.js
│   │   │       ├── chunk-UZVZQZEM.js
│   │   │       ├── chunk-VIBS7Y3M.js
│   │   │       ├── chunk-VJFQPB47.js
│   │   │       ├── chunk-VJOHABJ4.js
│   │   │       ├── chunk-VUXPTMXZ.js
│   │   │       ├── chunk-XB34LHR5.js
│   │   │       ├── chunk-XC5J5ANL.js
│   │   │       ├── chunk-XTOEMUZK.js
│   │   │       ├── chunk-Y3WKETHV.js
│   │   │       ├── chunk-YG7T4W43.js
│   │   │       ├── chunk-YGRUPXVB.js
│   │   │       ├── chunk-YPFLLHK6.js
│   │   │       ├── chunk-YXQ5KEQC.js
│   │   │       ├── chunk-ZDZJSHMF.js
│   │   │       ├── chunk-ZLJ6VYSG.js
│   │   │       ├── chunk-ZNEQLT5Q.js
│   │   │       ├── claimCondition-FZ3EKW2M.js
│   │   │       ├── claimCondition-WJYCFSKY.js
│   │   │       ├── claimTo-3OGSZAGD.js
│   │   │       ├── claimTo-7N7PJK5O.js
│   │   │       ├── claimTo-LNJZHHT3.js
│   │   │       ├── co-2W272KST.js
│   │   │       ├── co-4KSSMBL6.js
│   │   │       ├── co-4QEGB6VV.js
│   │   │       ├── co-7LLLWALO.js
│   │   │       ├── co-A2VHPEPT.js
│   │   │       ├── co-CVN2M45H.js
│   │   │       ├── co-Y7ICLZEM.js
│   │   │       ├── co.cyber-W3ZB2PHU.js
│   │   │       ├── coinbaseWebSDK-RVHYUQN6.js
│   │   │       ├── com-2C4IBZJC.js
│   │   │       ├── com-2FMSNEYI.js
│   │   │       ├── com-2M7N6F5U.js
│   │   │       ├── com-3M4YXHEP.js
│   │   │       ├── com-4GPSLLOX.js
│   │   │       ├── com-4MAE4SLL.js
│   │   │       ├── com-5EVQS4IZ.js
│   │   │       ├── com-5NZOMD6O.js
│   │   │       ├── com-66Q6X2AN.js
│   │   │       ├── com-6DTOF6TL.js
│   │   │       ├── com-6OK3IP35.js
│   │   │       ├── com-6OLGJVDZ.js
│   │   │       ├── com-6SKA46QA.js
│   │   │       ├── com-77L55XPO.js
│   │   │       ├── com-7CFZD43L.js
│   │   │       ├── com-7ESFL2XC.js
│   │   │       ├── com-7FNIVOH3.js
│   │   │       ├── com-7Y4S6AXS.js
│   │   │       ├── com-7ZICZNFF.js
│   │   │       ├── com-ABZNTRLZ.js
│   │   │       ├── com-AKMGTE6O.js
│   │   │       ├── com-AODZYQWL.js
│   │   │       ├── com-BA67M6JA.js
│   │   │       ├── com-BJY3WLWU.js
│   │   │       ├── com-BLXPUI47.js
│   │   │       ├── com-CADNHKSZ.js
│   │   │       ├── com-CAZP4XAV.js
│   │   │       ├── com-CHX2N46L.js
│   │   │       ├── com-CMFYLJ3T.js
│   │   │       ├── com-D37EIKB4.js
│   │   │       ├── com-DJRJPGME.js
│   │   │       ├── com-DMBFR3TM.js
│   │   │       ├── com-DXBW5XU7.js
│   │   │       ├── com-EC74KZVH.js
│   │   │       ├── com-ECD626HL.js
│   │   │       ├── com-EDWOBHQ5.js
│   │   │       ├── com-EW5K7JF2.js
│   │   │       ├── com-FE3NAAEW.js
│   │   │       ├── com-FIMPM75U.js
│   │   │       ├── com-FLBLVTBY.js
│   │   │       ├── com-FTU5JU6L.js
│   │   │       ├── com-FUBWL26I.js
│   │   │       ├── com-G4PABABE.js
│   │   │       ├── com-GGEHZ3ML.js
│   │   │       ├── com-GHGCPYMS.js
│   │   │       ├── com-GPM5NTEM.js
│   │   │       ├── com-GY4RR463.js
│   │   │       ├── com-HIQMW3M5.js
│   │   │       ├── com-HQ3ZNBVK.js
│   │   │       ├── com-HUVDUN75.js
│   │   │       ├── com-I4GOOXU3.js
│   │   │       ├── com-IATVSYRF.js
│   │   │       ├── com-ICJNKASS.js
│   │   │       ├── com-IDR25SRZ.js
│   │   │       ├── com-IF7AHQFJ.js
│   │   │       ├── com-IF7EFBYY.js
│   │   │       ├── com-IQ3TTO6K.js
│   │   │       ├── com-IVJ4ODXS.js
│   │   │       ├── com-JCVLXBH6.js
│   │   │       ├── com-KFSYP3UK.js
│   │   │       ├── com-KPWIFBRV.js
│   │   │       ├── com-KW7LIQVX.js
│   │   │       ├── com-KWK64UB7.js
│   │   │       ├── com-L5FHGFHX.js
│   │   │       ├── com-LFG2VXGV.js
│   │   │       ├── com-M5EROV3A.js
│   │   │       ├── com-MIWCOGLD.js
│   │   │       ├── com-MPMYNQIR.js
│   │   │       ├── com-MT3HKQ3R.js
│   │   │       ├── com-NFP3O76O.js
│   │   │       ├── com-NSXJ3MYN.js
│   │   │       ├── com-O32AFMCX.js
│   │   │       ├── com-O7HEL5UM.js
│   │   │       ├── com-OKQHPEYA.js
│   │   │       ├── com-OLXXEOCB.js
│   │   │       ├── com-P73TZQWI.js
│   │   │       ├── com-PK4DXA46.js
│   │   │       ├── com-Q4R5QXMD.js
│   │   │       ├── com-Q7LI3IVT.js
│   │   │       ├── com-QNHV5LXE.js
│   │   │       ├── com-QQPVG7PP.js
│   │   │       ├── com-QUF6BW3N.js
│   │   │       ├── com-RCO2EJCO.js
│   │   │       ├── com-RVMYGOTN.js
│   │   │       ├── com-SD7QZXVI.js
│   │   │       ├── com-SGLYOLT6.js
│   │   │       ├── com-SGOLCA56.js
│   │   │       ├── com-SH3JOPDV.js
│   │   │       ├── com-SKB3SMG6.js
│   │   │       ├── com-SMDDEG7M.js
│   │   │       ├── com-SPRTZXVD.js
│   │   │       ├── com-TDMJBI2M.js
│   │   │       ├── com-TE3IRJVG.js
│   │   │       ├── com-TH3B64WW.js
│   │   │       ├── com-TV4K6JFU.js
│   │   │       ├── com-UGZ7W7CO.js
│   │   │       ├── com-UJZJA6SZ.js
│   │   │       ├── com-URZWZY6W.js
│   │   │       ├── com-USI3H3ZY.js
│   │   │       ├── com-UUE4VT6F.js
│   │   │       ├── com-UWJR5TCW.js
│   │   │       ├── com-UYAKF2N2.js
│   │   │       ├── com-V5JX4VHE.js
│   │   │       ├── com-VCBNOXWU.js
│   │   │       ├── com-VMFG63WD.js
│   │   │       ├── com-VV2KAHH7.js
│   │   │       ├── com-WWOKZBON.js
│   │   │       ├── com-X7JZBOMI.js
│   │   │       ├── com-XBDXJT7H.js
│   │   │       ├── com-XCMJDOF3.js
│   │   │       ├── com-XIFKBSI7.js
│   │   │       ├── com-XUD7P7EW.js
│   │   │       ├── com-YMKJ5J5V.js
│   │   │       ├── com-Z7KH6LCA.js
│   │   │       ├── com-ZCJBLCGU.js
│   │   │       ├── com-ZFAFSEQR.js
│   │   │       ├── com-ZL3AON34.js
│   │   │       ├── com-ZRV5E3J2.js
│   │   │       ├── com-ZU576A7T.js
│   │   │       ├── com-ZXAV47A3.js
│   │   │       ├── com.bitget-2APLDUWF.js
│   │   │       ├── com.blanqlabs-SYJXQAS6.js
│   │   │       ├── com.blazpay-G2RYDJ7L.js
│   │   │       ├── com.brave-D3ZUHE7V.js
│   │   │       ├── com.coinbase-XCXEA6KF.js
│   │   │       ├── com.coolbitx-54F2B4QS.js
│   │   │       ├── com.crypto-53A63ZCL.js
│   │   │       ├── com.elrond.maiar-CPDDYEOU.js
│   │   │       ├── com.fastex-OSMD2QUY.js
│   │   │       ├── com.feralfile-6FVJKEDQ.js
│   │   │       ├── com.hashpack-VBVIF33I.js
│   │   │       ├── com.meld-U3J7XNQI.js
│   │   │       ├── com.moongate-IFYOW5HA.js
│   │   │       ├── com.mpcvault-5RS5XOJS.js
│   │   │       ├── com.okex-ASVE2B3U.js
│   │   │       ├── com.poolsmobility-MPUANJAV.js
│   │   │       ├── com.robinhood-ZVFBQFK2.js
│   │   │       ├── com.roninchain-VOI4TK6H.js
│   │   │       ├── com.saakuru-3DH4OCRJ.js
│   │   │       ├── com.sabay-NHKDAQVI.js
│   │   │       ├── com.trustwallet-QTE52ZJ2.js
│   │   │       ├── com.walletconnect-QWEQRBQR.js
│   │   │       ├── concat-hex-2F4R6DIF.js
│   │   │       ├── contract-GEGWMZWS.js
│   │   │       ├── controller-W2QS5UC4.js
│   │   │       ├── de-BT7LP6QO.js
│   │   │       ├── de-IU2DXG5T.js
│   │   │       ├── de-OKZ4QL64.js
│   │   │       ├── de-WT7ZYIRL.js
│   │   │       ├── decimals-OWVEHM45.js
│   │   │       ├── dev-CGZJG7WM.js
│   │   │       ├── digital-TWPYUQDY.js
│   │   │       ├── dist-7FXCYDP5.js
│   │   │       ├── dist-JQ3EDHJY.js
│   │   │       ├── dist-UZFCJX5W.js
│   │   │       ├── download-F3MJUB7B.js
│   │   │       ├── embedded-5JDH6LO6.js
│   │   │       ├── en-BRYFEMZN.js
│   │   │       ├── en-GF35UFXC.js
│   │   │       ├── en-SB77EPNW.js
│   │   │       ├── en-YMFAQ6ZL.js
│   │   │       ├── encode-4DQKNRWC.js
│   │   │       ├── encodeAbiParameters-UF4TQP7R.js
│   │   │       ├── engine-L3LTYQXR.js
│   │   │       ├── es-7RULN4RE.js
│   │   │       ├── es-LKAELXTV.js
│   │   │       ├── es-RWVLHLPZ.js
│   │   │       ├── es-UEK7RLXG.js
│   │   │       ├── estimate-l1-fee-B2LECVR2.js
│   │   │       ├── eth_estimateGas-FTRTBPEZ.js
│   │   │       ├── eth_getTransactionCount-ITCGR7E4.js
│   │   │       ├── extractIPFS-GFMPIVLN.js
│   │   │       ├── fetch-proofs-for-claimers-NQNU6O2D.js
│   │   │       ├── fi-AVCNJCZU.js
│   │   │       ├── fi-MH46U2IW.js
│   │   │       ├── finance-43KN2CYS.js
│   │   │       ├── finance-B7FMBRBP.js
│   │   │       ├── finance-BPBXKFLP.js
│   │   │       ├── finance-GAXWYNOQ.js
│   │   │       ├── finance-ROSDRD4N.js
│   │   │       ├── finance-TUEUOJYQ.js
│   │   │       ├── finance-XE4OWK2N.js
│   │   │       ├── finance.soulswap-JBPBKOGF.js
│   │   │       ├── fr-2PO34MSK.js
│   │   │       ├── fr-DKOBC2XB.js
│   │   │       ├── fr-HCZLKSNB.js
│   │   │       ├── fr-HZ64NS6B.js
│   │   │       ├── fun-LYGVTTTP.js
│   │   │       ├── get-ecosystem-wallet-info-HRASHZ5U.js
│   │   │       ├── getActiveClaimCondition-235FYDU5.js
│   │   │       ├── getActiveClaimCondition-5NTTTBA4.js
│   │   │       ├── getActiveClaimCondition-X4R3SWY5.js
│   │   │       ├── getApprovalForTransaction-RG2PM2ZX.js
│   │   │       ├── getApproved-UMVYKWJJ.js
│   │   │       ├── getBalance-X6K77NBX.js
│   │   │       ├── getContractMetadata-X5DE2MGS.js
│   │   │       ├── getCurrencyMetadata-VXZEATQ4.js
│   │   │       ├── getInstalledModules-WVGJ43EF.js
│   │   │       ├── getNFT-CWYYXL36.js
│   │   │       ├── getNFT-T7TVIXIV.js
│   │   │       ├── gg-7LOCEDJU.js
│   │   │       ├── global-ASRTB772.js
│   │   │       ├── group.com.flowfoundation-Y5NGFX4Q.js
│   │   │       ├── hashMessage-NHJEFPJB.js
│   │   │       ├── id-JCDDJMLP.js
│   │   │       ├── id-UVORZUHE.js
│   │   │       ├── id.co-KFRG5HP3.js
│   │   │       ├── im-ALROWXFB.js
│   │   │       ├── image-22XCL4QC.js
│   │   │       ├── image-24U2WBYW.js
│   │   │       ├── image-25FYMXPP.js
│   │   │       ├── image-2C6TWMD7.js
│   │   │       ├── image-2DLIROHM.js
│   │   │       ├── image-2DVLCOT5.js
│   │   │       ├── image-2MC3OA63.js
│   │   │       ├── image-2NWF3JOZ.js
│   │   │       ├── image-2O2NSLAV.js
│   │   │       ├── image-2P2TSVGP.js
│   │   │       ├── image-2TID5QYA.js
│   │   │       ├── image-2VBH6P4I.js
│   │   │       ├── image-2XQ227AO.js
│   │   │       ├── image-3BBR6ZUL.js
│   │   │       ├── image-3BYLTMYN.js
│   │   │       ├── image-3J2YWWMT.js
│   │   │       ├── image-3NR45HO4.js
│   │   │       ├── image-3PHNAY7F.js
│   │   │       ├── image-3QRD6CSU.js
│   │   │       ├── image-3RZJFPYY.js
│   │   │       ├── image-3SSVXVQA.js
│   │   │       ├── image-3WCIGCJE.js
│   │   │       ├── image-3XPXEUVI.js
│   │   │       ├── image-43VCVTQW.js
│   │   │       ├── image-45QC47QJ.js
│   │   │       ├── image-47XQBRNK.js
│   │   │       ├── image-4B3NOTPE.js
│   │   │       ├── image-4BA3AXSR.js
│   │   │       ├── image-4E3QCNWY.js
│   │   │       ├── image-4KSYJONE.js
│   │   │       ├── image-4MUDZ5WJ.js
│   │   │       ├── image-4NVIL47X.js
│   │   │       ├── image-4R5252N7.js
│   │   │       ├── image-4TRY3NEW.js
│   │   │       ├── image-4UXLJEY6.js
│   │   │       ├── image-4XAPYK5Y.js
│   │   │       ├── image-4ZXADMKV.js
│   │   │       ├── image-52SKIAAZ.js
│   │   │       ├── image-53R3T2KM.js
│   │   │       ├── image-5B72RBCK.js
│   │   │       ├── image-5C7T5MCW.js
│   │   │       ├── image-5DMCMTIS.js
│   │   │       ├── image-5EEVHG37.js
│   │   │       ├── image-5ESOAIQD.js
│   │   │       ├── image-5KGJZFSW.js
│   │   │       ├── image-5N5BSRVW.js
│   │   │       ├── image-5QOWOT7K.js
│   │   │       ├── image-5ZJILWQW.js
│   │   │       ├── image-63JBKI3J.js
│   │   │       ├── image-64EL5CZZ.js
│   │   │       ├── image-6GWDZO4B.js
│   │   │       ├── image-6HQIDK6K.js
│   │   │       ├── image-6MCAWLUJ.js
│   │   │       ├── image-6ORYMNNS.js
│   │   │       ├── image-6PJHCB7N.js
│   │   │       ├── image-6UEQME7W.js
│   │   │       ├── image-6V6UQQYW.js
│   │   │       ├── image-6VDTM3JY.js
│   │   │       ├── image-6VK7QNZB.js
│   │   │       ├── image-77YEUPFU.js
│   │   │       ├── image-7EORRWO4.js
│   │   │       ├── image-7FZSFD63.js
│   │   │       ├── image-7KY4GSTR.js
│   │   │       ├── image-7O3C362W.js
│   │   │       ├── image-7OU6UVPL.js
│   │   │       ├── image-7Q42EE45.js
│   │   │       ├── image-7SUEPBLK.js
│   │   │       ├── image-7TE6IAEE.js
│   │   │       ├── image-7TSPO7Y6.js
│   │   │       ├── image-7U7UXPGY.js
│   │   │       ├── image-7YYGXP6N.js
│   │   │       ├── image-7ZYGDOS3.js
│   │   │       ├── image-A3KPWLYO.js
│   │   │       ├── image-AHWRIMZI.js
│   │   │       ├── image-AI7WZWEM.js
│   │   │       ├── image-AR3FQDWK.js
│   │   │       ├── image-ARHGIDNB.js
│   │   │       ├── image-ARYWL2OH.js
│   │   │       ├── image-AXBX7NPH.js
│   │   │       ├── image-AZATAZUW.js
│   │   │       ├── image-B42LGYLK.js
│   │   │       ├── image-BAPZ7ZQ5.js
│   │   │       ├── image-BAWNJLDB.js
│   │   │       ├── image-BAWP6F3E.js
│   │   │       ├── image-BERR6HPQ.js
│   │   │       ├── image-BFCLTXKV.js
│   │   │       ├── image-BG36EIFN.js
│   │   │       ├── image-BG7Q7U5Z.js
│   │   │       ├── image-BKAIFC5N.js
│   │   │       ├── image-BNSPIEBR.js
│   │   │       ├── image-BNWDNWZ7.js
│   │   │       ├── image-BPJ747KI.js
│   │   │       ├── image-BZHOLM24.js
│   │   │       ├── image-C3DYJZTD.js
│   │   │       ├── image-CFMPEXUH.js
│   │   │       ├── image-CIXW5BVB.js
│   │   │       ├── image-CJLAIZ3U.js
│   │   │       ├── image-CP6E35DJ.js
│   │   │       ├── image-CPWAGIZP.js
│   │   │       ├── image-CTC6AICN.js
│   │   │       ├── image-CTUNVIGS.js
│   │   │       ├── image-CTWYLNEW.js
│   │   │       ├── image-CVFAIAQD.js
│   │   │       ├── image-CVW43WHN.js
│   │   │       ├── image-CWA3VVUM.js
│   │   │       ├── image-CX4RMA4S.js
│   │   │       ├── image-CZEVKSDD.js
│   │   │       ├── image-D2BFLLX6.js
│   │   │       ├── image-D3PKEAGG.js
│   │   │       ├── image-D5ZHP4L6.js
│   │   │       ├── image-D6HXSW23.js
│   │   │       ├── image-DFLQ2XFN.js
│   │   │       ├── image-DGAWLDDT.js
│   │   │       ├── image-DJJHB4NK.js
│   │   │       ├── image-DQRQW2SI.js
│   │   │       ├── image-DX3LHC5E.js
│   │   │       ├── image-DXG4ARNI.js
│   │   │       ├── image-DZDKYDL2.js
│   │   │       ├── image-EA2TAA73.js
│   │   │       ├── image-EA6HZGAP.js
│   │   │       ├── image-EHTA7ND2.js
│   │   │       ├── image-EIETVCAX.js
│   │   │       ├── image-ENIPULMK.js
│   │   │       ├── image-EQG2WO73.js
│   │   │       ├── image-EWL7XSZS.js
│   │   │       ├── image-EZTUCZIK.js
│   │   │       ├── image-F3W3U35F.js
│   │   │       ├── image-FAAEH6VN.js
│   │   │       ├── image-FAMMBKWU.js
│   │   │       ├── image-FC2BPU25.js
│   │   │       ├── image-FFW5ALAV.js
│   │   │       ├── image-FIGWZRNB.js
│   │   │       ├── image-FK2QQOEC.js
│   │   │       ├── image-FL2436IW.js
│   │   │       ├── image-FNGTNT45.js
│   │   │       ├── image-FT5E5S2S.js
│   │   │       ├── image-FUZODB6Q.js
│   │   │       ├── image-FX3DIZMC.js
│   │   │       ├── image-FY6NEZXX.js
│   │   │       ├── image-G3UZPUMP.js
│   │   │       ├── image-G4OOMJFL.js
│   │   │       ├── image-G4VVMDLA.js
│   │   │       ├── image-G566PLZR.js
│   │   │       ├── image-G77AOOTY.js
│   │   │       ├── image-GK45NHUD.js
│   │   │       ├── image-GN5KL5XH.js
│   │   │       ├── image-GNG4HAZI.js
│   │   │       ├── image-GRZ6ITK5.js
│   │   │       ├── image-GSMGI7VJ.js
│   │   │       ├── image-GSTKM7MD.js
│   │   │       ├── image-GTS26XGE.js
│   │   │       ├── image-GXMDZVE7.js
│   │   │       ├── image-H66KD67W.js
│   │   │       ├── image-HN4UT2MP.js
│   │   │       ├── image-HNJVUIHP.js
│   │   │       ├── image-HOZVYDVK.js
│   │   │       ├── image-HRDDJY2V.js
│   │   │       ├── image-HTVYZ4M3.js
│   │   │       ├── image-HVHSAD3I.js
│   │   │       ├── image-HXAPNAO4.js
│   │   │       ├── image-I2EVY3PN.js
│   │   │       ├── image-I2F4TK64.js
│   │   │       ├── image-I63OXZPK.js
│   │   │       ├── image-IEQIMBFO.js
│   │   │       ├── image-IFJOAVNI.js
│   │   │       ├── image-IGUKS27J.js
│   │   │       ├── image-IK4KYWSE.js
│   │   │       ├── image-IKZ2FUDX.js
│   │   │       ├── image-IO2WKRLV.js
│   │   │       ├── image-IW5JZSWC.js
│   │   │       ├── image-IXHLX5GF.js
│   │   │       ├── image-J26M6VNU.js
│   │   │       ├── image-J3BDNCMB.js
│   │   │       ├── image-J3VWG5MZ.js
│   │   │       ├── image-J5PWF63O.js
│   │   │       ├── image-J6OTD3HY.js
│   │   │       ├── image-J72YUI7L.js
│   │   │       ├── image-JBLGJN6S.js
│   │   │       ├── image-JCM4SCK7.js
│   │   │       ├── image-JCMNNBDZ.js
│   │   │       ├── image-JGVAVBEO.js
│   │   │       ├── image-JIBY7LRH.js
│   │   │       ├── image-JRV26T7R.js
│   │   │       ├── image-JVTGPVY4.js
│   │   │       ├── image-JVUHELHQ.js
│   │   │       ├── image-K423YJHO.js
│   │   │       ├── image-K675SLCQ.js
│   │   │       ├── image-KAKKP25H.js
│   │   │       ├── image-KBI4EQQC.js
│   │   │       ├── image-KDIH7RV7.js
│   │   │       ├── image-KERZY3VS.js
│   │   │       ├── image-KFBVQYIK.js
│   │   │       ├── image-KFCJWUYA.js
│   │   │       ├── image-KHNJTNG5.js
│   │   │       ├── image-KI6G2NXA.js
│   │   │       ├── image-KLR4DGUS.js
│   │   │       ├── image-KMUGR2JC.js
│   │   │       ├── image-KNB5HTQS.js
│   │   │       ├── image-KRKMGIRW.js
│   │   │       ├── image-KTCD3ACC.js
│   │   │       ├── image-KVUL54ZL.js
│   │   │       ├── image-KWDZM3JO.js
│   │   │       ├── image-KXOZP327.js
│   │   │       ├── image-KYZRZXTL.js
│   │   │       ├── image-L64YUXOP.js
│   │   │       ├── image-L7CIHOLP.js
│   │   │       ├── image-L7F3ZTNT.js
│   │   │       ├── image-L7XMXCCE.js
│   │   │       ├── image-LDYJOQU6.js
│   │   │       ├── image-LH6FUJDR.js
│   │   │       ├── image-LIVCGAOB.js
│   │   │       ├── image-LLODPB4V.js
│   │   │       ├── image-LOHR2RIE.js
│   │   │       ├── image-LPCCHEBL.js
│   │   │       ├── image-LPMTTLXQ.js
│   │   │       ├── image-LRZBNW6B.js
│   │   │       ├── image-LVVWGSGE.js
│   │   │       ├── image-LY3RZ44R.js
│   │   │       ├── image-LZY7JTRH.js
│   │   │       ├── image-M3IUK3S6.js
│   │   │       ├── image-M4Z3YR4Z.js
│   │   │       ├── image-MBAEXQG7.js
│   │   │       ├── image-MBFXNJFS.js
│   │   │       ├── image-MDU42EYU.js
│   │   │       ├── image-MJ7T6PNW.js
│   │   │       ├── image-MJJT532J.js
│   │   │       ├── image-MO47H6ZA.js
│   │   │       ├── image-MOU2RL63.js
│   │   │       ├── image-MRBGWX2E.js
│   │   │       ├── image-MTJY6UAP.js
│   │   │       ├── image-MUVOHF4W.js
│   │   │       ├── image-MYNVEIRO.js
│   │   │       ├── image-N53KCP2W.js
│   │   │       ├── image-NAO2HSQA.js
│   │   │       ├── image-NBHYUHD2.js
│   │   │       ├── image-NBPCTXNN.js
│   │   │       ├── image-NDYGNMMC.js
│   │   │       ├── image-NEI5WDWA.js
│   │   │       ├── image-NFV4FTVS.js
│   │   │       ├── image-NG66JYBW.js
│   │   │       ├── image-NG6MRBT7.js
│   │   │       ├── image-NJXZFZEG.js
│   │   │       ├── image-NOPIDNPE.js
│   │   │       ├── image-O3FWYAMJ.js
│   │   │       ├── image-O63UCCVG.js
│   │   │       ├── image-OAPLK3NK.js
│   │   │       ├── image-OCLQH6ET.js
│   │   │       ├── image-ODMYDNAD.js
│   │   │       ├── image-OGVGI6IX.js
│   │   │       ├── image-OI2FPOZK.js
│   │   │       ├── image-OMOLG6BP.js
│   │   │       ├── image-OMOWTLJH.js
│   │   │       ├── image-OOBSXLNR.js
│   │   │       ├── image-ORMFBD3D.js
│   │   │       ├── image-OROPDYCP.js
│   │   │       ├── image-OS6F5ASF.js
│   │   │       ├── image-OX5V2TE5.js
│   │   │       ├── image-OYVSS2NW.js
│   │   │       ├── image-P3F6JWUP.js
│   │   │       ├── image-P5CCQF6U.js
│   │   │       ├── image-P7A7UY6Q.js
│   │   │       ├── image-PFLIBWNB.js
│   │   │       ├── image-PG2LM3EN.js
│   │   │       ├── image-PIHQFTZW.js
│   │   │       ├── image-PJ56ZJZI.js
│   │   │       ├── image-PNENEROM.js
│   │   │       ├── image-POSUEFBS.js
│   │   │       ├── image-PPYVKDO3.js
│   │   │       ├── image-PRRYYAGC.js
│   │   │       ├── image-PX7PII22.js
│   │   │       ├── image-PXXJ7YGR.js
│   │   │       ├── image-PY3RCMKE.js
│   │   │       ├── image-PYNIXTYI.js
│   │   │       ├── image-Q5EEGXM4.js
│   │   │       ├── image-QBQHKWYU.js
│   │   │       ├── image-QEGCG76B.js
│   │   │       ├── image-QEJ5TH25.js
│   │   │       ├── image-QFDO4ERO.js
│   │   │       ├── image-QMD3UXYM.js
│   │   │       ├── image-QTWRL6IY.js
│   │   │       ├── image-QZKB4QH2.js
│   │   │       ├── image-R2PA3K44.js
│   │   │       ├── image-R3QO5B5O.js
│   │   │       ├── image-R5DDRXEO.js
│   │   │       ├── image-R5MXAYSI.js
│   │   │       ├── image-R65TRIAG.js
│   │   │       ├── image-R6MZNPDW.js
│   │   │       ├── image-R6ZY7ODL.js
│   │   │       ├── image-RBD6CLZB.js
│   │   │       ├── image-RCPUSQIA.js
│   │   │       ├── image-RCVINJ4L.js
│   │   │       ├── image-RJ6X2NMJ.js
│   │   │       ├── image-RLLVBJI7.js
│   │   │       ├── image-RPHSLWEQ.js
│   │   │       ├── image-RUAKVMHJ.js
│   │   │       ├── image-SDS6MUPN.js
│   │   │       ├── image-SFV565LD.js
│   │   │       ├── image-SHZEEMLS.js
│   │   │       ├── image-SKFBWVXM.js
│   │   │       ├── image-SON77BIL.js
│   │   │       ├── image-SPBIVFWA.js
│   │   │       ├── image-SQEC6SWZ.js
│   │   │       ├── image-SZ53EEZI.js
│   │   │       ├── image-SZDGRZKO.js
│   │   │       ├── image-T4K2HHHO.js
│   │   │       ├── image-T5624ZCD.js
│   │   │       ├── image-T7NA4A2Y.js
│   │   │       ├── image-TBQHCWRX.js
│   │   │       ├── image-TCNXR5Y6.js
│   │   │       ├── image-TGDIBLJ5.js
│   │   │       ├── image-TJPXCNVF.js
│   │   │       ├── image-TLCK7IBC.js
│   │   │       ├── image-TLL7ZWDJ.js
│   │   │       ├── image-TLQGVZIE.js
│   │   │       ├── image-TVOSPHN4.js
│   │   │       ├── image-TW36VKLS.js
│   │   │       ├── image-U2DNOUXB.js
│   │   │       ├── image-U74NACFH.js
│   │   │       ├── image-UEMJEQYK.js
│   │   │       ├── image-UFGCOQGW.js
│   │   │       ├── image-UGV6XSD5.js
│   │   │       ├── image-UHZP3BTN.js
│   │   │       ├── image-UR6R66GX.js
│   │   │       ├── image-UT6D5LIM.js
│   │   │       ├── image-UY6RYQ2N.js
│   │   │       ├── image-V5HQDG55.js
│   │   │       ├── image-V5M6SPNZ.js
│   │   │       ├── image-V7OWVN52.js
│   │   │       ├── image-VB7IUURT.js
│   │   │       ├── image-VF6EIX5D.js
│   │   │       ├── image-VKEDKKKR.js
│   │   │       ├── image-VLI6ZCKX.js
│   │   │       ├── image-VMYFLQHY.js
│   │   │       ├── image-VNMGUJNB.js
│   │   │       ├── image-VTXLRGUL.js
│   │   │       ├── image-VUQ2UL4L.js
│   │   │       ├── image-VVOWBOZ5.js
│   │   │       ├── image-VW2FN7E5.js
│   │   │       ├── image-VYS6PNRX.js
│   │   │       ├── image-WAEURFBG.js
│   │   │       ├── image-WCQARS7C.js
│   │   │       ├── image-WD5JWD6U.js
│   │   │       ├── image-WE7PFB2W.js
│   │   │       ├── image-WEIHHJID.js
│   │   │       ├── image-WFPL2XOD.js
│   │   │       ├── image-WFYTTEWO.js
│   │   │       ├── image-WGY4E5ZS.js
│   │   │       ├── image-WJBIEWRP.js
│   │   │       ├── image-WLVFTPS6.js
│   │   │       ├── image-WRJBQNVE.js
│   │   │       ├── image-WRTS63PY.js
│   │   │       ├── image-WXZTVPXW.js
│   │   │       ├── image-WZMMOWKO.js
│   │   │       ├── image-X6M72D7S.js
│   │   │       ├── image-X75OW5JK.js
│   │   │       ├── image-XA4X52SC.js
│   │   │       ├── image-XD5TFSHC.js
│   │   │       ├── image-XFK44ZH7.js
│   │   │       ├── image-XIC6EKNY.js
│   │   │       ├── image-XIG5YKUC.js
│   │   │       ├── image-XLAW77N3.js
│   │   │       ├── image-XMKRZUH2.js
│   │   │       ├── image-XMXXH2OG.js
│   │   │       ├── image-XNCYDJC5.js
│   │   │       ├── image-XOUIMWYP.js
│   │   │       ├── image-XPJLKRRI.js
│   │   │       ├── image-XUGPYK2I.js
│   │   │       ├── image-XWTER34E.js
│   │   │       ├── image-Y6FK2F2P.js
│   │   │       ├── image-YA6DLLJV.js
│   │   │       ├── image-YB4GRPL2.js
│   │   │       ├── image-YBCZSQ3A.js
│   │   │       ├── image-YBPOXOCZ.js
│   │   │       ├── image-YBTBDTUR.js
│   │   │       ├── image-YCZSZUXE.js
│   │   │       ├── image-YFLBT3YJ.js
│   │   │       ├── image-YFUELAZQ.js
│   │   │       ├── image-YJF46UIP.js
│   │   │       ├── image-Z2CATCDR.js
│   │   │       ├── image-Z5YWXRKQ.js
│   │   │       ├── image-ZEXGTQP2.js
│   │   │       ├── image-ZIEWC7ZM.js
│   │   │       ├── image-ZNKOF6C2.js
│   │   │       ├── image-ZOCXRE6K.js
│   │   │       ├── image-ZPU7UHI2.js
│   │   │       ├── image-ZTVWJS7Y.js
│   │   │       ├── image-ZZDK3IJV.js
│   │   │       ├── in-app-core-HIWEYDMM.js
│   │   │       ├── in-app-wallet-calls-GQSQW7CK.js
│   │   │       ├── in-app-wallet-capabilities-4KBZBWHO.js
│   │   │       ├── inApp-RQNC3GM2.js
│   │   │       ├── inc-2JDOS23Q.js
│   │   │       ├── index.es-AMKWX7QZ.js
│   │   │       ├── injected-LISAWEIO.js
│   │   │       ├── io-24QRWA4Y.js
│   │   │       ├── io-24YA5BRN.js
│   │   │       ├── io-2GPQFRQF.js
│   │   │       ├── io-2OUEZVZU.js
│   │   │       ├── io-2ZBQUD2Z.js
│   │   │       ├── io-3FD4NDEY.js
│   │   │       ├── io-3SGNGSBU.js
│   │   │       ├── io-3U2SLLGY.js
│   │   │       ├── io-4K37O2UO.js
│   │   │       ├── io-57PCDAYK.js
│   │   │       ├── io-5FGKYHDW.js
│   │   │       ├── io-6HD3H3FJ.js
│   │   │       ├── io-6JQ4CHJH.js
│   │   │       ├── io-6LSXSNGH.js
│   │   │       ├── io-7F2E4V7R.js
│   │   │       ├── io-ANOLLYWK.js
│   │   │       ├── io-B43YO5G7.js
│   │   │       ├── io-BH2JNQLL.js
│   │   │       ├── io-CTRCTP32.js
│   │   │       ├── io-CWMDB2MU.js
│   │   │       ├── io-D255FR7U.js
│   │   │       ├── io-D6Z3AKMH.js
│   │   │       ├── io-DIWAXNTD.js
│   │   │       ├── io-DK5QUX7W.js
│   │   │       ├── io-DNXFQ4K2.js
│   │   │       ├── io-DXHXE7IX.js
│   │   │       ├── io-E2M2HE5Z.js
│   │   │       ├── io-E6S6IBUY.js
│   │   │       ├── io-EA2JOUTZ.js
│   │   │       ├── io-FVLW4E3K.js
│   │   │       ├── io-GQDRISAH.js
│   │   │       ├── io-H2C73JK2.js
│   │   │       ├── io-H454JI3W.js
│   │   │       ├── io-HBM5KOQE.js
│   │   │       ├── io-J7ET3CPL.js
│   │   │       ├── io-JGARBW27.js
│   │   │       ├── io-JWG2DSVL.js
│   │   │       ├── io-K5M75KPN.js
│   │   │       ├── io-KUZCCGFO.js
│   │   │       ├── io-KZJ22VPA.js
│   │   │       ├── io-L6UQ2STJ.js
│   │   │       ├── io-LVXFK7U5.js
│   │   │       ├── io-LX45HK7A.js
│   │   │       ├── io-MMDEOZ3N.js
│   │   │       ├── io-N5RGMBCH.js
│   │   │       ├── io-NH2GD2IR.js
│   │   │       ├── io-NVBZJAWM.js
│   │   │       ├── io-O7JBQJEM.js
│   │   │       ├── io-PJ4YO55N.js
│   │   │       ├── io-PV6OW5YR.js
│   │   │       ├── io-PVGHQBA3.js
│   │   │       ├── io-QLQLOVVJ.js
│   │   │       ├── io-RSWIM3NG.js
│   │   │       ├── io-RZ7W5PGA.js
│   │   │       ├── io-S3TORZWD.js
│   │   │       ├── io-T6NWZUPR.js
│   │   │       ├── io-TLH32OUQ.js
│   │   │       ├── io-TLTTCINM.js
│   │   │       ├── io-TRTOW6FM.js
│   │   │       ├── io-TRUR62J5.js
│   │   │       ├── io-TZCRE2KR.js
│   │   │       ├── io-UP4NGDBV.js
│   │   │       ├── io-UTHDBEVN.js
│   │   │       ├── io-WHYZVMCN.js
│   │   │       ├── io-WTWNTQY2.js
│   │   │       ├── io-X4AWA27Q.js
│   │   │       ├── io-X54FGMH5.js
│   │   │       ├── io-XAR6YN2H.js
│   │   │       ├── io-XEVP2DVS.js
│   │   │       ├── io-XFMVSGBX.js
│   │   │       ├── io-XMCECLIZ.js
│   │   │       ├── io-XXPRYPG2.js
│   │   │       ├── io-YAK5FOPT.js
│   │   │       ├── io-YKR37A4G.js
│   │   │       ├── io-YSSN6F3W.js
│   │   │       ├── io-Z5GSMWWC.js
│   │   │       ├── io-ZIBKO2EM.js
│   │   │       ├── io.1inch-3Q4NZZ2L.js
│   │   │       ├── io.alpha-u.wallet-RANY436R.js
│   │   │       ├── io.armana-FQHHA7CM.js
│   │   │       ├── io.leapwallet-GH33NGTJ.js
│   │   │       ├── io.loopring-BX5AMZUR.js
│   │   │       ├── io.magiceden-H3CGBW6M.js
│   │   │       ├── io.unagi-YSJDUHMV.js
│   │   │       ├── io.uptn-GWS6HTWS.js
│   │   │       ├── io.zerion-DKRTCZVY.js
│   │   │       ├── is-UU4FXVPC.js
│   │   │       ├── is-contract-deployed-AZVYEI5B.js
│   │   │       ├── isApprovedForAll-CG3FQCVQ.js
│   │   │       ├── isApprovedForAll-JGBKL36G.js
│   │   │       ├── it-Y3SJTOXS.js
│   │   │       ├── ja-6MH4WP2Z.js
│   │   │       ├── ja-HG2757OL.js
│   │   │       ├── ja-MCXBRC6G.js
│   │   │       ├── ja-PZYAXXAL.js
│   │   │       ├── kr-LSVS4UQW.js
│   │   │       ├── kr-O56ZYU3R.js
│   │   │       ├── kr-QIL3MJCP.js
│   │   │       ├── kr-XDCZ7IIG.js
│   │   │       ├── land-CKBS6ZRZ.js
│   │   │       ├── live-5DC3MAHO.js
│   │   │       ├── llc-JHHSY2C6.js
│   │   │       ├── me-3MEDDZC5.js
│   │   │       ├── me-KVZQT25O.js
│   │   │       ├── me-KZ3JFV6V.js
│   │   │       ├── me-N5NHUYM7.js
│   │   │       ├── me-NGGLTLQU.js
│   │   │       ├── me.komet-E7D6F2JB.js
│   │   │       ├── mipdStore-HEJSLGN7.js
│   │   │       ├── money-5LMST26O.js
│   │   │       ├── money-E4VOZHJR.js
│   │   │       ├── money-SUJPFHWI.js
│   │   │       ├── native-NEGONUYD.js
│   │   │       ├── net-4I6DBKNS.js
│   │   │       ├── net-KQRWOTI5.js
│   │   │       ├── net-Q5SVTUAO.js
│   │   │       ├── net-TAG5PSHX.js
│   │   │       ├── net-Z743Z374.js
│   │   │       ├── net.spatium-EBSLJIM4.js
│   │   │       ├── network-3HZ5XME7.js
│   │   │       ├── network-64V4ODDY.js
│   │   │       ├── network-7CN3ZGB5.js
│   │   │       ├── network-FCNDYIML.js
│   │   │       ├── network-FHGUIPWM.js
│   │   │       ├── network-OTQ66RXU.js
│   │   │       ├── network-WFECV2ZU.js
│   │   │       ├── nl.greenhood-2VCIICQQ.js
│   │   │       ├── one.metapro-JZZTCOTQ.js
│   │   │       ├── one.mixin-AYEP2MDG.js
│   │   │       ├── online-4UBMQVRH.js
│   │   │       ├── openzeppelin-3CQYP2BQ.js
│   │   │       ├── org-3WSS4ISS.js
│   │   │       ├── org-5JOGDD4T.js
│   │   │       ├── org-6JIS4GGD.js
│   │   │       ├── org-BHEY6VU5.js
│   │   │       ├── org-DASW2CEB.js
│   │   │       ├── org-IQR2KWLE.js
│   │   │       ├── org-JCLIAWVT.js
│   │   │       ├── org-NOFWJHNU.js
│   │   │       ├── org-PJ6LCHSF.js
│   │   │       ├── org-Q7GOFRGY.js
│   │   │       ├── org-RVVOAAYD.js
│   │   │       ├── org-U6MXPNQX.js
│   │   │       ├── org-XS7DVMFS.js
│   │   │       ├── ownerOf-JJ32SN7R.js
│   │   │       ├── package.json
│   │   │       ├── passkeys-TWQKIUUE.js
│   │   │       ├── pk-OX3FADHO.js
│   │   │       ├── prepare-transaction-ENVXVTJF.js
│   │   │       ├── pro-GX6XLDQ3.js
│   │   │       ├── pro-PKIFCXCH.js
│   │   │       ├── pro-VKWWWAVU.js
│   │   │       ├── pub-BCM6XBN4.js
│   │   │       ├── react-dom_client.js
│   │   │       ├── react-router-dom.js
│   │   │       ├── react.js
│   │   │       ├── read-contract-EXVZZYXE.js
│   │   │       ├── resolveImplementation-EUNLHKQW.js
│   │   │       ├── rpc-TW3OP7F4.js
│   │   │       ├── secp256k1-AHVFPDVA.js
│   │   │       ├── send-eip712-transaction-GJNL63UQ.js
│   │   │       ├── send-gasless-transaction-VPJQYCQ5.js
│   │   │       ├── send-transaction-3VCDCFKW.js
│   │   │       ├── session-proposal-FKZO7EJB.js
│   │   │       ├── session-request-E5B34J42.js
│   │   │       ├── setApprovalForAll-WRU2AIHP.js
│   │   │       ├── setApprovalForAll-YKTONSHG.js
│   │   │       ├── sign-login-payload-EEOP3RDN.js
│   │   │       ├── smart-7AYCEGLU.js
│   │   │       ├── smart-GOSZ6KLE.js
│   │   │       ├── smart-wallet-5WA47S2O.js
│   │   │       ├── smart-wallet-capabilities-TZBEJHWD.js
│   │   │       ├── so.onekey.app-3NGOLXP4.js
│   │   │       ├── social-IGLKXP3O.js
│   │   │       ├── social-WQVOUPQP.js
│   │   │       ├── supported-sms-countries-MILFNFSC.js
│   │   │       ├── switch-chain-UAQT4AB6.js
│   │   │       ├── tech-4UEY76KS.js
│   │   │       ├── tech-C727ACOE.js
│   │   │       ├── tech-NOIENMRJ.js
│   │   │       ├── technology-4ON2FUI4.js
│   │   │       ├── technology-NIZQELB7.js
│   │   │       ├── thirdweb.js
│   │   │       ├── thirdweb_react.js
│   │   │       ├── tl-AVOH7Y5Z.js
│   │   │       ├── tl-B6Y73PTZ.js
│   │   │       ├── tl-DDFVDALG.js
│   │   │       ├── tl-O6CWFXUB.js
│   │   │       ├── trade.flooz-RHPEJ2TY.js
│   │   │       ├── units-OLWSIMOC.js
│   │   │       ├── upload-U3ZHZXSH.js
│   │   │       ├── us-A63RIC6G.js
│   │   │       ├── utils-QE6HZ2TS.js
│   │   │       ├── utils-RIDKW7H5.js
│   │   │       ├── vc.uincubator-4WN5IZUJ.js
│   │   │       ├── vi-4HLVRM5V.js
│   │   │       ├── vi-6NOSFFF7.js
│   │   │       ├── vi-7VOZ2AS3.js
│   │   │       ├── vi-JLTPQX3P.js
│   │   │       ├── wallet-ZUZOMGPE.js
│   │   │       ├── walletConnect-4SOZLMQZ.js
│   │   │       ├── web-connector-5CMXT4ED.js
│   │   │       ├── web-node-NK4RL5GU.js
│   │   │       ├── world-AAINEXQX.js
│   │   │       ├── world-IQ7VTL27.js
│   │   │       ├── world-ZNOYGYAZ.js
│   │   │       ├── world.dosi-Y2A7IFAO.js
│   │   │       ├── xyz-3DUFJPG6.js
│   │   │       ├── xyz-6TGRCCCS.js
│   │   │       ├── xyz-C2SGGGJN.js
│   │   │       ├── xyz-H7ZRM2VE.js
│   │   │       ├── xyz-JTTBORVS.js
│   │   │       ├── xyz-N4RTWSXS.js
│   │   │       ├── xyz-P3VWILEP.js
│   │   │       ├── xyz-QSKGFGJW.js
│   │   │       ├── xyz-WOO5ZF56.js
│   │   │       ├── xyz-ZHYDMTP5.js
│   │   │       ├── xyz.frontier-GCK2SAXV.js
│   │   │       ├── xyz.roam-5PWBMVLT.js
│   │   │       ├── xyz.uniultra-YQ7QTAVX.js
│   │   │       └── zone-DAJ2TSNU.js
│   │   ├── LICENSE.md
│   │   ├── index.html
│   │   ├── package.json
│   │   ├── postcss.config.js
│   │   ├── src/
│   │   │   ├── App.tsx
│   │   │   ├── Campaign/
│   │   │   │   └── [campainAddress]/
│   │   │   │       └── Page.tsx
│   │   │   ├── chains.ts
│   │   │   ├── client.ts
│   │   │   ├── components/
│   │   │   │   ├── Campaign.tsx
│   │   │   │   ├── CampaignDetail.tsx
│   │   │   │   ├── CreateCampaign.tsx
│   │   │   │   ├── Home.tsx
│   │   │   │   ├── Navbar.tsx
│   │   │   │   └── TierCard.tsx
│   │   │   ├── contants/
│   │   │   │   └── contract.tsx
│   │   │   ├── dashboard/
│   │   │   │   └── [walletAddress]/
│   │   │   │       └── page.tsx
│   │   │   ├── index.css
│   │   │   ├── main.tsx
│   │   │   └── vite-env.d.ts
│   │   ├── tailwind.config.js
│   │   ├── tsconfig.json
│   │   ├── tsconfig.node.json
│   │   └── vite.config.ts
│   └── README.md
└── README.md
Download .txt
Showing preview only (490K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (6634 symbols across 362 files)

FILE: 01-Simple Storage Full Stack Dapp/src/components/App.tsx
  constant CORESCAN_BASE_URL (line 14) | const CORESCAN_BASE_URL = 'https://scan.test2.btcs.network/address/'
  function App (line 16) | function App() {

FILE: 01-Simple Storage Full Stack Dapp/src/utils/index.ts
  function classNames (line 1) | function classNames(...classes: unknown[]): string {

FILE: 01-Simple Storage Full Stack Dapp/src/vite-env.d.ts
  type Window (line 5) | interface Window {

FILE: 02-Basic Staking Full Stack Dapp/frontend/src/App.js
  function App (line 18) | function App() {

FILE: 02-Basic Staking Full Stack Dapp/hardhat.config.js
  constant PRIVATE_KEY (line 10) | const PRIVATE_KEY = process.env.PRIVATE_KEY;

FILE: 02-Basic Staking Full Stack Dapp/ignition/modules/Lock.js
  constant JAN_1ST_2030 (line 3) | const JAN_1ST_2030 = 1893456000;
  constant ONE_GWEI (line 4) | const ONE_GWEI = 1_000_000_000n;

FILE: 02-Basic Staking Full Stack Dapp/scripts/deploy.js
  function main (line 3) | async function main() {

FILE: 03-Decentralized Guestbook/frontend/src/App.js
  function App (line 9) | function App() {

FILE: 03-Decentralized Guestbook/hardhat.config.js
  constant PRIVATE_KEY (line 5) | const PRIVATE_KEY = process.env.PRIVATE_KEY;

FILE: 03-Decentralized Guestbook/scripts/deploy.js
  function main (line 3) | async function main() {

FILE: 04-Pyth Pull Oracles/frontend/src/App.js
  function App (line 18) | function App() {

FILE: 04-Pyth Pull Oracles/hardhat.config.js
  constant PRIVATE_KEY (line 6) | const PRIVATE_KEY = process.env.PRIVATE_KEY;

FILE: 04-Pyth Pull Oracles/scripts/deploy.js
  function main (line 1) | async function main() {

FILE: 05-Hello-World-Dapp/frontend/src/App.js
  function App (line 5) | function App() {

FILE: 05-Hello-World-Dapp/frontend/src/HelloWorld.js
  function HelloWorld (line 16) | function HelloWorld() {

FILE: 05-Hello-World-Dapp/hardhat.config.js
  constant PRIVATE_KEY (line 6) | const PRIVATE_KEY = process.env.PRIVATE_KEY;

FILE: 05-Hello-World-Dapp/ignition/modules/Lock.js
  constant JAN_1ST_2030 (line 3) | const JAN_1ST_2030 = 1893456000;
  constant ONE_GWEI (line 4) | const ONE_GWEI = 1_000_000_000n;

FILE: 05-Hello-World-Dapp/scripts/deploy.js
  function main (line 3) | async function main() {

FILE: 06-Subgraphs-on-Core/generated/Guestbook/Guestbook.ts
  class EntrySigned (line 13) | class EntrySigned extends ethereum.Event {
    method params (line 14) | get params(): EntrySigned__Params {
  class EntrySigned__Params (line 19) | class EntrySigned__Params {
    method constructor (line 22) | constructor(event: EntrySigned) {
    method name (line 26) | get name(): string {
    method message (line 30) | get message(): string {
  class Guestbook__entriesResult (line 35) | class Guestbook__entriesResult {
    method constructor (line 39) | constructor(value0: string, value1: string) {
    method toMap (line 44) | toMap(): TypedMap<string, ethereum.Value> {
    method getName (line 51) | getName(): string {
    method getMessage (line 55) | getMessage(): string {
  class Guestbook__getEntriesResultValue0Struct (line 60) | class Guestbook__getEntriesResultValue0Struct extends ethereum.Tuple {
    method name (line 61) | get name(): string {
    method message (line 65) | get message(): string {
  class Guestbook (line 70) | class Guestbook extends ethereum.SmartContract {
    method bind (line 71) | static bind(address: Address): Guestbook {
    method entries (line 75) | entries(param0: BigInt): Guestbook__entriesResult {
    method try_entries (line 86) | try_entries(param0: BigInt): ethereum.CallResult<Guestbook__entriesRes...
    method getEntries (line 99) | getEntries(): Array<Guestbook__getEntriesResultValue0Struct> {
    method try_getEntries (line 109) | try_getEntries(): ethereum.CallResult<
  class SignGuestbookCall (line 127) | class SignGuestbookCall extends ethereum.Call {
    method inputs (line 128) | get inputs(): SignGuestbookCall__Inputs {
    method outputs (line 132) | get outputs(): SignGuestbookCall__Outputs {
  class SignGuestbookCall__Inputs (line 137) | class SignGuestbookCall__Inputs {
    method constructor (line 140) | constructor(call: SignGuestbookCall) {
    method _name (line 144) | get _name(): string {
    method _message (line 148) | get _message(): string {
  class SignGuestbookCall__Outputs (line 153) | class SignGuestbookCall__Outputs {
    method constructor (line 156) | constructor(call: SignGuestbookCall) {

FILE: 06-Subgraphs-on-Core/generated/schema.ts
  class EntrySigned (line 14) | class EntrySigned extends Entity {
    method constructor (line 15) | constructor(id: Bytes) {
    method save (line 20) | save(): void {
    method loadInBlock (line 32) | static loadInBlock(id: Bytes): EntrySigned | null {
    method load (line 38) | static load(id: Bytes): EntrySigned | null {
    method id (line 44) | get id(): Bytes {
    method id (line 53) | set id(value: Bytes) {
    method name (line 57) | get name(): string {
    method name (line 66) | set name(value: string) {
    method message (line 70) | get message(): string {
    method message (line 79) | set message(value: string) {
    method blockNumber (line 83) | get blockNumber(): BigInt {
    method blockNumber (line 92) | set blockNumber(value: BigInt) {
    method blockTimestamp (line 96) | get blockTimestamp(): BigInt {
    method blockTimestamp (line 105) | set blockTimestamp(value: BigInt) {
    method transactionHash (line 109) | get transactionHash(): Bytes {
    method transactionHash (line 118) | set transactionHash(value: Bytes) {

FILE: 06-Subgraphs-on-Core/src/guestbook.ts
  function handleEntrySigned (line 4) | function handleEntrySigned(event: EntrySignedEvent): void {

FILE: 06-Subgraphs-on-Core/tests/guestbook-utils.ts
  function createEntrySignedEvent (line 5) | function createEntrySignedEvent(

FILE: 07-NFT Minitng dApp on Core/frontend/src/App.jsx
  function App (line 7) | function App() {

FILE: 07-NFT Minitng dApp on Core/hardhat.config.js
  constant PRIVATE_KEY (line 5) | const PRIVATE_KEY = process.env.PRIVATE_KEY;

FILE: 07-NFT Minitng dApp on Core/ignition/modules/Lock.js
  constant JAN_1ST_2030 (line 3) | const JAN_1ST_2030 = 1893456000;
  constant ONE_GWEI (line 4) | const ONE_GWEI = 1_000_000_000n;

FILE: 07-NFT Minitng dApp on Core/scripts/deploy.js
  function main (line 3) | async function main() {

FILE: 07-NFT Minitng dApp on Core/test/Lock.js
  function deployOneYearLockFixture (line 12) | async function deployOneYearLockFixture() {

FILE: 08-Guess-Game/Frontend/app/components/ui/button.tsx
  type ButtonProps (line 37) | interface ButtonProps

FILE: 08-Guess-Game/Frontend/app/layout.tsx
  function RootLayout (line 21) | function RootLayout({

FILE: 08-Guess-Game/Frontend/app/page.tsx
  function GuessTheNumber (line 13) | function GuessTheNumber() {

FILE: 08-Guess-Game/Frontend/lib/utils.ts
  function cn (line 4) | function cn(...inputs: ClassValue[]) {

FILE: 08-Guess-Game/hardhat.config.js
  constant PRIVATE_KEY (line 5) | const PRIVATE_KEY = process.env.PRIVATE_KEY;

FILE: 08-Guess-Game/ignition/modules/Lock.js
  constant JAN_1ST_2030 (line 6) | const JAN_1ST_2030 = 1893456000;
  constant ONE_GWEI (line 7) | const ONE_GWEI = 1_000_000_000n;

FILE: 08-Guess-Game/scripts/deploy-guess-game.js
  function main (line 3) | async function main() {

FILE: 08-Guess-Game/test/Lock.js
  function deployOneYearLockFixture (line 12) | async function deployOneYearLockFixture() {

FILE: 09-Token-swap-Dapp/frontend/src/App.js
  function App (line 20) | function App() {

FILE: 09-Token-swap-Dapp/hardhat.config.js
  constant PRIVATE_KEY (line 5) | const PRIVATE_KEY = process.env.PRIVATE_KEY;

FILE: 09-Token-swap-Dapp/scripts/deploy.js
  function main (line 3) | async function main() {

FILE: 10-Advanced-Stake-Dapp/Frontend/app/layout.tsx
  function RootLayout (line 16) | function RootLayout({

FILE: 10-Advanced-Stake-Dapp/Frontend/app/page.tsx
  function Home (line 3) | function Home() {

FILE: 10-Advanced-Stake-Dapp/Frontend/components/info-tooltip.tsx
  type InfoTooltipProps (line 6) | interface InfoTooltipProps {

FILE: 10-Advanced-Stake-Dapp/Frontend/components/mode-toggle.tsx
  function ModeToggle (line 8) | function ModeToggle() {

FILE: 10-Advanced-Stake-Dapp/Frontend/components/staker-directory.tsx
  constant MOCK_STAKERS (line 11) | const MOCK_STAKERS = [
  type SortField (line 22) | type SortField = "staked" | "since" | "rewards"
  type SortDirection (line 23) | type SortDirection = "asc" | "desc"

FILE: 10-Advanced-Stake-Dapp/Frontend/components/staking-form.tsx
  function StakingForm (line 15) | function StakingForm() {

FILE: 10-Advanced-Stake-Dapp/Frontend/components/theme-provider.tsx
  function ThemeProvider (line 5) | function ThemeProvider({ children, ...props }: ThemeProviderProps) {

FILE: 10-Advanced-Stake-Dapp/Frontend/components/theme-toggle.tsx
  function ThemeToggle (line 9) | function ThemeToggle() {

FILE: 10-Advanced-Stake-Dapp/Frontend/components/ui/button.tsx
  type ButtonProps (line 37) | interface ButtonProps

FILE: 10-Advanced-Stake-Dapp/Frontend/components/ui/toast.tsx
  type ToastProps (line 115) | type ToastProps = React.ComponentPropsWithoutRef<typeof Toast>
  type ToastActionElement (line 117) | type ToastActionElement = React.ReactElement<typeof ToastAction>

FILE: 10-Advanced-Stake-Dapp/Frontend/components/ui/toaster.tsx
  function Toaster (line 13) | function Toaster() {

FILE: 10-Advanced-Stake-Dapp/Frontend/components/user-list.tsx
  type Staker (line 11) | type Staker = {
  function UserList (line 17) | function UserList() {

FILE: 10-Advanced-Stake-Dapp/Frontend/components/user-stats.tsx
  function UserStats (line 7) | function UserStats() {

FILE: 10-Advanced-Stake-Dapp/Frontend/components/wallet-connect.tsx
  function WalletConnect (line 10) | function WalletConnect() {

FILE: 10-Advanced-Stake-Dapp/Frontend/components/wallet-provider.tsx
  type WalletContextType (line 8) | type WalletContextType = {

FILE: 10-Advanced-Stake-Dapp/Frontend/components/withdraw-form.tsx
  function WithdrawForm (line 14) | function WithdrawForm() {

FILE: 10-Advanced-Stake-Dapp/Frontend/constants/constansts.tsx
  constant STAKING_CONTRACT_ADDRESS (line 1) | const STAKING_CONTRACT_ADDRESS = "0x652Ca0319df1b8ebe9220B4894DC38Da5C95...
  constant STAKING_CONTRACT_ABI (line 3) | const STAKING_CONTRACT_ABI = [

FILE: 10-Advanced-Stake-Dapp/Frontend/hooks/use-toast.ts
  constant TOAST_LIMIT (line 11) | const TOAST_LIMIT = 1
  constant TOAST_REMOVE_DELAY (line 12) | const TOAST_REMOVE_DELAY = 1000000
  type ToasterToast (line 14) | type ToasterToast = ToastProps & {
  function genId (line 30) | function genId() {
  type ActionType (line 35) | type ActionType = typeof actionTypes
  type Action (line 37) | type Action =
  type State (line 55) | interface State {
  function dispatch (line 136) | function dispatch(action: Action) {
  type Toast (line 143) | type Toast = Omit<ToasterToast, "id">
  function toast (line 145) | function toast({ ...props }: Toast) {
  function useToast (line 174) | function useToast() {

FILE: 10-Advanced-Stake-Dapp/Frontend/lib/utils.ts
  function cn (line 4) | function cn(...inputs: ClassValue[]) {
  function formatNumber (line 8) | function formatNumber(num: number): string {

FILE: 10-Advanced-Stake-Dapp/Frontend/types/global.d.ts
  type Window (line 1) | interface Window {

FILE: 10-Advanced-Stake-Dapp/hardhat.config.js
  constant PRIVATE_KEY (line 5) | const PRIVATE_KEY = process.env.PRIVATE_KEY;

FILE: 10-Advanced-Stake-Dapp/ignition/modules/Lock.js
  constant JAN_1ST_2030 (line 6) | const JAN_1ST_2030 = 1893456000;
  constant ONE_GWEI (line 7) | const ONE_GWEI = 1_000_000_000n;

FILE: 10-Advanced-Stake-Dapp/scripts/deploy-stake.js
  function main (line 3) | async function main() {

FILE: 10-Advanced-Stake-Dapp/scripts/mint.js
  function main (line 3) | async function main() {

FILE: 10-Advanced-Stake-Dapp/test/Lock.js
  function deployOneYearLockFixture (line 12) | async function deployOneYearLockFixture() {

FILE: 11-Bridge-Token-Using-Chainlink/frontend/app/Provider.tsx
  function Provider (line 11) | function Provider({ children }: { children: React.ReactNode }) {

FILE: 11-Bridge-Token-Using-Chainlink/frontend/app/layout.tsx
  function RootLayout (line 21) | function RootLayout({

FILE: 11-Bridge-Token-Using-Chainlink/frontend/app/page.tsx
  type notificationInterfact (line 24) | interface notificationInterfact {
  function Home (line 29) | function Home() {

FILE: 11-Bridge-Token-Using-Chainlink/frontend/components/ui/alert.tsx
  function Alert (line 22) | function Alert({
  function AlertTitle (line 37) | function AlertTitle({ className, ...props }: React.ComponentProps<"div">) {
  function AlertDescription (line 50) | function AlertDescription({

FILE: 11-Bridge-Token-Using-Chainlink/frontend/components/ui/button.tsx
  function Button (line 38) | function Button({

FILE: 11-Bridge-Token-Using-Chainlink/frontend/components/ui/card.tsx
  function Card (line 5) | function Card({ className, ...props }: React.ComponentProps<"div">) {
  function CardHeader (line 18) | function CardHeader({ className, ...props }: React.ComponentProps<"div">) {
  function CardTitle (line 31) | function CardTitle({ className, ...props }: React.ComponentProps<"div">) {
  function CardDescription (line 41) | function CardDescription({ className, ...props }: React.ComponentProps<"...
  function CardAction (line 51) | function CardAction({ className, ...props }: React.ComponentProps<"div">) {
  function CardContent (line 64) | function CardContent({ className, ...props }: React.ComponentProps<"div"...
  function CardFooter (line 74) | function CardFooter({ className, ...props }: React.ComponentProps<"div">) {

FILE: 11-Bridge-Token-Using-Chainlink/frontend/components/ui/input.tsx
  function Input (line 5) | function Input({ className, type, ...props }: React.ComponentProps<"inpu...

FILE: 11-Bridge-Token-Using-Chainlink/frontend/components/ui/label.tsx
  function Label (line 8) | function Label({

FILE: 11-Bridge-Token-Using-Chainlink/frontend/lib/utils.ts
  function cn (line 4) | function cn(...inputs: ClassValue[]) {

FILE: 12-Core-MultiSig/Frontend/app/create/createmultisig.tsx
  function CreateMultiSigWallet (line 22) | function CreateMultiSigWallet(provider: any, factory: any) {

FILE: 12-Core-MultiSig/Frontend/app/dashboard/page.tsx
  function Dashboard (line 19) | function Dashboard() {

FILE: 12-Core-MultiSig/Frontend/app/layout.tsx
  function RootLayout (line 15) | function RootLayout({

FILE: 12-Core-MultiSig/Frontend/app/owners/page.tsx
  function OwnersPage (line 31) | function OwnersPage() {

FILE: 12-Core-MultiSig/Frontend/app/page.tsx
  function Home (line 12) | function Home() {

FILE: 12-Core-MultiSig/Frontend/app/wallet/DialogBoxes/Confirm.tsx
  function confirmTxn (line 19) | async function confirmTxn(addressSig: string, amount: bigint) {

FILE: 12-Core-MultiSig/Frontend/app/wallet/DialogBoxes/Execute.tsx
  function executeTxn (line 19) | async function executeTxn(addressSig: string, amount: bigint) {

FILE: 12-Core-MultiSig/Frontend/app/wallet/DialogBoxes/Revoke.tsx
  function confirmTxn (line 19) | async function confirmTxn(addressSig: string, amount: bigint) {

FILE: 12-Core-MultiSig/Frontend/app/wallet/DialogBoxes/Submit.tsx
  function submitTxn (line 21) | async function submitTxn(addressSig: string, addressTo: string, amount: ...

FILE: 12-Core-MultiSig/Frontend/app/wallet/page.tsx
  function WalletPage (line 46) | function WalletPage() {

FILE: 12-Core-MultiSig/Frontend/components/DashboardLayout.tsx
  type DashboardLayoutProps (line 4) | interface DashboardLayoutProps {
  function DashboardLayout (line 8) | function DashboardLayout({ children }: DashboardLayoutProps) {

FILE: 12-Core-MultiSig/Frontend/components/ui/button.tsx
  type ButtonProps (line 37) | interface ButtonProps

FILE: 12-Core-MultiSig/Frontend/lib/utils.ts
  function cn (line 4) | function cn(...inputs: ClassValue[]) {

FILE: 12-Core-MultiSig/hardhat.config.js
  constant PRIVATE_KEY (line 5) | const PRIVATE_KEY = process.env.PRIVATE_KEY;

FILE: 12-Core-MultiSig/ignition/modules/Lock.js
  constant JAN_1ST_2030 (line 6) | const JAN_1ST_2030 = 1893456000;
  constant ONE_GWEI (line 7) | const ONE_GWEI = 1_000_000_000n;

FILE: 12-Core-MultiSig/scripts/deploy-multisig.js
  function main (line 6) | async function main() {

FILE: 12-Core-MultiSig/test/Lock.js
  function deployDefi (line 12) | async function deployDefi() {

FILE: 13-Core-Test-Token-Faucet/Frontend/app/layout.tsx
  function RootLayout (line 21) | function RootLayout({

FILE: 13-Core-Test-Token-Faucet/Frontend/app/page.tsx
  function FaucetPage (line 11) | function FaucetPage() {

FILE: 13-Core-Test-Token-Faucet/Frontend/components/badge.tsx
  type BadgeProps (line 23) | interface BadgeProps extends React.HTMLAttributes<HTMLDivElement>, Varia...
  function Badge (line 25) | function Badge({ className, variant, ...props }: BadgeProps) {

FILE: 13-Core-Test-Token-Faucet/Frontend/components/navbar.tsx
  type NavbarProps (line 14) | interface NavbarProps {
  function Navbar (line 22) | function Navbar({ isConnected, walletAddress, onConnect, onDisconnect, i...

FILE: 13-Core-Test-Token-Faucet/Frontend/components/network-modal.tsx
  type NetworkModalProps (line 6) | interface NetworkModalProps {
  function NetworkModal (line 12) | function NetworkModal({ isOpen, onClose, onSwitch }: NetworkModalProps) {

FILE: 13-Core-Test-Token-Faucet/Frontend/components/toast.tsx
  type ToastProps (line 99) | type ToastProps = React.ComponentPropsWithoutRef<typeof Toast>
  type ToastActionElement (line 101) | type ToastActionElement = React.ReactElement<typeof ToastAction>

FILE: 13-Core-Test-Token-Faucet/Frontend/components/toaster.tsx
  function Toaster (line 6) | function Toaster() {

FILE: 13-Core-Test-Token-Faucet/Frontend/components/token-selector.tsx
  type TokenSelectorProps (line 15) | interface TokenSelectorProps {
  function TokenSelector (line 20) | function TokenSelector({ walletAddress, signer }: TokenSelectorProps) {

FILE: 13-Core-Test-Token-Faucet/Frontend/components/ui/badge.tsx
  type BadgeProps (line 26) | interface BadgeProps
  function Badge (line 30) | function Badge({ className, variant, ...props }: BadgeProps) {

FILE: 13-Core-Test-Token-Faucet/Frontend/components/ui/button.tsx
  type ButtonProps (line 37) | interface ButtonProps

FILE: 13-Core-Test-Token-Faucet/Frontend/components/ui/toast.tsx
  type ToastProps (line 115) | type ToastProps = React.ComponentPropsWithoutRef<typeof Toast>
  type ToastActionElement (line 117) | type ToastActionElement = React.ReactElement<typeof ToastAction>

FILE: 13-Core-Test-Token-Faucet/Frontend/components/ui/toaster.tsx
  function Toaster (line 13) | function Toaster() {

FILE: 13-Core-Test-Token-Faucet/Frontend/hooks/use-toast.ts
  constant TOAST_LIMIT (line 11) | const TOAST_LIMIT = 1
  constant TOAST_REMOVE_DELAY (line 12) | const TOAST_REMOVE_DELAY = 1000000
  type ToasterToast (line 14) | type ToasterToast = ToastProps & {
  function genId (line 30) | function genId() {
  type ActionType (line 35) | type ActionType = typeof actionTypes
  type Action (line 37) | type Action =
  type State (line 55) | interface State {
  function dispatch (line 136) | function dispatch(action: Action) {
  type Toast (line 143) | type Toast = Omit<ToasterToast, "id">
  function toast (line 145) | function toast({ ...props }: Toast) {
  function useToast (line 174) | function useToast() {

FILE: 13-Core-Test-Token-Faucet/Frontend/lib/constants.ts
  constant CORE_TESTNET (line 1) | const CORE_TESTNET = {
  constant SUPPORTED_CHAINS (line 14) | const SUPPORTED_CHAINS = [CORE_TESTNET.chainIdDecimal]
  constant CONTRACT_ABI (line 17) | const CONTRACT_ABI = [

FILE: 13-Core-Test-Token-Faucet/Frontend/lib/tokens.ts
  type Token (line 1) | interface Token {

FILE: 13-Core-Test-Token-Faucet/Frontend/lib/utils.ts
  function cn (line 4) | function cn(...inputs: ClassValue[]) {

FILE: 13-Core-Test-Token-Faucet/hardhat.config.js
  constant PRIVATE_KEY (line 5) | const PRIVATE_KEY = process.env.PRIVATE_KEY;

FILE: 13-Core-Test-Token-Faucet/ignition/modules/Lock.js
  constant JAN_1ST_2030 (line 6) | const JAN_1ST_2030 = 1893456000;
  constant ONE_GWEI (line 7) | const ONE_GWEI = 1_000_000_000n;

FILE: 13-Core-Test-Token-Faucet/scripts/deploy.js
  function main (line 6) | async function main() {

FILE: 13-Core-Test-Token-Faucet/test/Lock.js
  function deployOneYearLockFixture (line 12) | async function deployOneYearLockFixture() {

FILE: 14-Corelend/Frontend/app/borrow/page.tsx
  function BorrowPage (line 23) | function BorrowPage() {

FILE: 14-Corelend/Frontend/app/constants/constants.tsx
  constant CONTRACT_ADDRESS (line 1) | const CONTRACT_ADDRESS = "0xd1022F7C4690458A3bB564710cE8f320aE940cB2";
  constant CONTRACT_ABI (line 3) | const CONTRACT_ABI = [
  constant CONTRACT_TOKEN (line 413) | const CONTRACT_TOKEN = [

FILE: 14-Corelend/Frontend/app/layout.tsx
  function RootLayout (line 16) | function RootLayout({

FILE: 14-Corelend/Frontend/app/lend/page.tsx
  function LendPage (line 38) | function LendPage() {

FILE: 14-Corelend/Frontend/app/loans/page.tsx
  type Loans (line 60) | interface Loans {
  function LoansPage (line 72) | function LoansPage() {

FILE: 14-Corelend/Frontend/app/loans/store.tsx
  function LoansPage (line 52) | function LoansPage() {

FILE: 14-Corelend/Frontend/app/loans/test.tsx
  type Loans (line 60) | interface Loans {
  function LoansPage (line 72) | function LoansPage() {

FILE: 14-Corelend/Frontend/app/page.tsx
  function HomePage (line 5) | function HomePage() {

FILE: 14-Corelend/Frontend/components/navbar.tsx
  function Navbar (line 18) | function Navbar() {

FILE: 14-Corelend/Frontend/components/ui/badge.tsx
  type BadgeProps (line 26) | interface BadgeProps
  function Badge (line 30) | function Badge({ className, variant, ...props }: BadgeProps) {

FILE: 14-Corelend/Frontend/components/ui/button.tsx
  type ButtonProps (line 37) | interface ButtonProps

FILE: 14-Corelend/Frontend/components/ui/toast.tsx
  type ToastProps (line 115) | type ToastProps = React.ComponentPropsWithoutRef<typeof Toast>
  type ToastActionElement (line 117) | type ToastActionElement = React.ReactElement<typeof ToastAction>

FILE: 14-Corelend/Frontend/components/ui/toaster.tsx
  function Toaster (line 13) | function Toaster() {

FILE: 14-Corelend/Frontend/components/wallet-provider.tsx
  type WalletContextType (line 7) | interface WalletContextType {
  constant CORE_TESTNET (line 21) | const CORE_TESTNET = {
  function WalletProvider (line 33) | function WalletProvider({ children }: { children: ReactNode }) {
  function useWallet (line 174) | function useWallet() {
  type Window (line 183) | interface Window {

FILE: 14-Corelend/Frontend/hooks/use-toast.ts
  constant TOAST_LIMIT (line 11) | const TOAST_LIMIT = 1
  constant TOAST_REMOVE_DELAY (line 12) | const TOAST_REMOVE_DELAY = 1000000
  type ToasterToast (line 14) | type ToasterToast = ToastProps & {
  function genId (line 30) | function genId() {
  type ActionType (line 35) | type ActionType = typeof actionTypes
  type Action (line 37) | type Action =
  type State (line 55) | interface State {
  function dispatch (line 136) | function dispatch(action: Action) {
  type Toast (line 143) | type Toast = Omit<ToasterToast, "id">
  function toast (line 145) | function toast({ ...props }: Toast) {
  function useToast (line 174) | function useToast() {

FILE: 14-Corelend/Frontend/lib/utils.ts
  function cn (line 4) | function cn(...inputs: ClassValue[]) {

FILE: 14-Corelend/hardhat.config.js
  constant PRIVATE_KEY (line 5) | const PRIVATE_KEY = process.env.PRIVATE_KEY;

FILE: 14-Corelend/ignition/modules/Lock.js
  constant JAN_1ST_2030 (line 6) | const JAN_1ST_2030 = 1893456000;
  constant ONE_GWEI (line 7) | const ONE_GWEI = 1_000_000_000n;

FILE: 14-Corelend/scripts/deploy.js
  function main (line 6) | async function main() {

FILE: 14-Corelend/test/Lock.js
  function deployOneYearLockFixture (line 12) | async function deployOneYearLockFixture() {

FILE: 15-dns-protocol/Frontend/app/dashboard/page.tsx
  function Dashboard (line 13) | function Dashboard() {

FILE: 15-dns-protocol/Frontend/app/layout.tsx
  function RootLayout (line 16) | function RootLayout({

FILE: 15-dns-protocol/Frontend/app/page.tsx
  function Home (line 5) | function Home() {

FILE: 15-dns-protocol/Frontend/app/registry/loading.tsx
  function Loading (line 1) | function Loading() {

FILE: 15-dns-protocol/Frontend/app/registry/page.tsx
  type Domain (line 12) | interface Domain {
  function Registry (line 18) | function Registry() {

FILE: 15-dns-protocol/Frontend/components/domain-card.tsx
  type DomainCardProps (line 11) | interface DomainCardProps {
  function DomainCard (line 15) | function DomainCard({ domain }: DomainCardProps) {

FILE: 15-dns-protocol/Frontend/components/domain-details.tsx
  type Domain (line 4) | interface Domain {
  type DomainDetailsProps (line 10) | interface DomainDetailsProps {
  function DomainDetails (line 14) | function DomainDetails({ domain }: DomainDetailsProps) {

FILE: 15-dns-protocol/Frontend/components/domain-search.tsx
  function DomainSearch (line 22) | function DomainSearch() {

FILE: 15-dns-protocol/Frontend/components/header.tsx
  function Header (line 14) | function Header() {

FILE: 15-dns-protocol/Frontend/components/mode-toggle.tsx
  function ModeToggle (line 9) | function ModeToggle() {

FILE: 15-dns-protocol/Frontend/components/network-switcher.tsx
  function NetworkSwitcher (line 7) | function NetworkSwitcher() {

FILE: 15-dns-protocol/Frontend/components/theme-provider.tsx
  type Theme (line 7) | type Theme = "dark" | "light" | "system"
  type ThemeProviderProps (line 9) | type ThemeProviderProps = {
  type ThemeProviderState (line 15) | type ThemeProviderState = {
  function ThemeProvider (line 27) | function ThemeProvider({

FILE: 15-dns-protocol/Frontend/components/ui/badge.tsx
  type BadgeProps (line 26) | interface BadgeProps
  function Badge (line 30) | function Badge({ className, variant, ...props }: BadgeProps) {

FILE: 15-dns-protocol/Frontend/components/ui/button.tsx
  type ButtonProps (line 39) | interface ButtonProps

FILE: 15-dns-protocol/Frontend/components/ui/skeleton.tsx
  function Skeleton (line 3) | function Skeleton({

FILE: 15-dns-protocol/Frontend/components/wallet-provider.tsx
  constant CORE_TESTNET2 (line 9) | const CORE_TESTNET2 = {
  type NetworkStatus (line 17) | interface NetworkStatus {
  type WalletContextType (line 26) | interface WalletContextType {
  function WalletProvider (line 69) | function WalletProvider({ children }: { children: ReactNode }) {

FILE: 15-dns-protocol/Frontend/hooks/use-wallet.tsx
  function useWallet (line 6) | function useWallet() {

FILE: 15-dns-protocol/Frontend/lib/core-contract.ts
  constant CORE_DNS_ABI (line 5) | const CORE_DNS_ABI = [
  constant CONTRACT_ADDRESS (line 14) | const CONTRACT_ADDRESS = "0x1234567890123456789012345678901234567890"
  class CoreContract (line 16) | class CoreContract {
    method constructor (line 19) | constructor(provider: ethers.BrowserProvider, signer: ethers.JsonRpcSi...
    method registerDomain (line 23) | async registerDomain(name: string): Promise<ethers.TransactionResponse> {
    method getOwner (line 33) | async getOwner(name: string): Promise<string> {
    method getUserDomains (line 43) | async getUserDomains(owner: string): Promise<string[]> {
    method getAllDomains (line 50) | async getAllDomains(): Promise<string[]> {
    method formatDomainName (line 57) | private formatDomainName(name: string): string {

FILE: 15-dns-protocol/Frontend/lib/utils.ts
  function cn (line 4) | function cn(...inputs: ClassValue[]) {

FILE: 15-dns-protocol/Frontend/types/global.d.ts
  type Window (line 2) | interface Window {

FILE: 15-dns-protocol/hardhat.config.js
  constant PRIVATE_KEY (line 5) | const PRIVATE_KEY = process.env.PRIVATE_KEY;

FILE: 15-dns-protocol/ignition/modules/Lock.js
  constant JAN_1ST_2030 (line 6) | const JAN_1ST_2030 = 1893456000;
  constant ONE_GWEI (line 7) | const ONE_GWEI = 1_000_000_000n;

FILE: 15-dns-protocol/scripts/deploy.js
  function main (line 3) | async function main() {

FILE: 15-dns-protocol/test/Lock.js
  function deployOneYearLockFixture (line 12) | async function deployOneYearLockFixture() {

FILE: 16-Pump.Core/Frontend/app/dashboard/page.tsx
  function Dashboard (line 11) | function Dashboard() {

FILE: 16-Pump.Core/Frontend/app/layout.tsx
  function RootLayout (line 16) | function RootLayout({

FILE: 16-Pump.Core/Frontend/app/page.tsx
  function Home (line 5) | function Home() {

FILE: 16-Pump.Core/Frontend/components/buy-token-dialog.tsx
  type TokenSale (line 25) | type TokenSale = {
  type BuyTokenDialogProps (line 38) | interface BuyTokenDialogProps {
  function BuyTokenDialog (line 44) | function BuyTokenDialog({ token, open, onOpenChange }: BuyTokenDialogPro...

FILE: 16-Pump.Core/Frontend/components/connect-wallet.tsx
  function ConnectWallet (line 16) | function ConnectWallet() {

FILE: 16-Pump.Core/Frontend/components/creator-dashboard.tsx
  type CreatorToken (line 12) | type CreatorToken = {
  function CreatorDashboard (line 23) | function CreatorDashboard() {

FILE: 16-Pump.Core/Frontend/components/launch-token-button.tsx
  function LaunchTokenButton (line 9) | function LaunchTokenButton() {

FILE: 16-Pump.Core/Frontend/components/launch-token-dialog.tsx
  type LaunchTokenDialogProps (line 22) | interface LaunchTokenDialogProps {
  function LaunchTokenDialog (line 27) | function LaunchTokenDialog({ open, onOpenChange }: LaunchTokenDialogProp...

FILE: 16-Pump.Core/Frontend/components/navbar.tsx
  function Navbar (line 13) | function Navbar() {

FILE: 16-Pump.Core/Frontend/components/network-switcher.tsx
  function NetworkSwitcher (line 17) | function NetworkSwitcher() {

FILE: 16-Pump.Core/Frontend/components/owner-dashboard.tsx
  function OwnerDashboard (line 12) | function OwnerDashboard() {

FILE: 16-Pump.Core/Frontend/components/token-listing.tsx
  type TokenSale (line 16) | type TokenSale = {
  constant TOKEN_LIMIT (line 29) | const TOKEN_LIMIT = 1000n // This should match the contract's TOKEN_LIMIT
  function TokenListing (line 31) | function TokenListing() {

FILE: 16-Pump.Core/Frontend/components/ui/badge.tsx
  type BadgeProps (line 26) | interface BadgeProps
  function Badge (line 30) | function Badge({ className, variant, ...props }: BadgeProps) {

FILE: 16-Pump.Core/Frontend/components/ui/button.tsx
  type ButtonProps (line 37) | interface ButtonProps

FILE: 16-Pump.Core/Frontend/components/ui/sheet.tsx
  type SheetContentProps (line 52) | interface SheetContentProps

FILE: 16-Pump.Core/Frontend/components/ui/toast.tsx
  type ToastProps (line 115) | type ToastProps = React.ComponentPropsWithoutRef<typeof Toast>
  type ToastActionElement (line 117) | type ToastActionElement = React.ReactElement<typeof ToastAction>

FILE: 16-Pump.Core/Frontend/components/ui/toaster.tsx
  function Toaster (line 13) | function Toaster() {

FILE: 16-Pump.Core/Frontend/constants/constansts.tsx
  constant CONTRACT_ADDRESS (line 1) | const CONTRACT_ADDRESS = "0x698bbc18d5aC177154fcA7Ba47Bf91D85c41df59"
  constant CONTRACT_ABI (line 3) | const CONTRACT_ABI = [

FILE: 16-Pump.Core/Frontend/hooks/use-toast.ts
  constant TOAST_LIMIT (line 11) | const TOAST_LIMIT = 1
  constant TOAST_REMOVE_DELAY (line 12) | const TOAST_REMOVE_DELAY = 1000000
  type ToasterToast (line 14) | type ToasterToast = ToastProps & {
  function genId (line 30) | function genId() {
  type ActionType (line 35) | type ActionType = typeof actionTypes
  type Action (line 37) | type Action =
  type State (line 55) | interface State {
  function dispatch (line 136) | function dispatch(action: Action) {
  type Toast (line 143) | type Toast = Omit<ToasterToast, "id">
  function toast (line 145) | function toast({ ...props }: Toast) {
  function useToast (line 174) | function useToast() {

FILE: 16-Pump.Core/Frontend/hooks/use-web3.tsx
  function useWeb3 (line 6) | function useWeb3() {

FILE: 16-Pump.Core/Frontend/lib/utils.ts
  function cn (line 4) | function cn(...inputs: ClassValue[]) {
  function shortenAddress (line 8) | function shortenAddress(address: string, chars = 4): string {

FILE: 16-Pump.Core/Frontend/providers/web3-provider.tsx
  constant CORE_TESTNET_2_CHAIN_ID (line 37) | const CORE_TESTNET_2_CHAIN_ID = "0x45a" // 1114 in decimal
  constant CORE_TESTNET_2_DETAILS (line 38) | const CORE_TESTNET_2_DETAILS = {
  type Web3ContextType (line 50) | interface Web3ContextType {
  function Web3Provider (line 78) | function Web3Provider({ children }: { children: ReactNode }) {

FILE: 16-Pump.Core/Frontend/types/global.d.ts
  type Window (line 1) | interface Window {

FILE: 16-Pump.Core/hardhat.config.js
  constant PRIVATE_KEY (line 5) | const PRIVATE_KEY = process.env.PRIVATE_KEY;

FILE: 16-Pump.Core/ignition/modules/Lock.js
  constant JAN_1ST_2030 (line 6) | const JAN_1ST_2030 = 1893456000;
  constant ONE_GWEI (line 7) | const ONE_GWEI = 1_000_000_000n;

FILE: 16-Pump.Core/scripts/deploy.js
  function main (line 6) | async function main() {

FILE: 16-Pump.Core/test/Lock.js
  function deployOneYearLockFixture (line 12) | async function deployOneYearLockFixture() {

FILE: 17-Crowd-Funding-Dapp/Contract/scripts/verify/my-contract.js
  function main (line 6) | async function main() {
  function verify (line 18) | async function verify(address, contract, args) {

FILE: 17-Crowd-Funding-Dapp/Frontend/.vite/deps_temp_6cf5ba4c/CoinbaseSDKConnection-PPK2JHPJ.js
  function ExternalWalletConnectUI (line 54) | function ExternalWalletConnectUI(props) {

FILE: 17-Crowd-Funding-Dapp/Frontend/.vite/deps_temp_6cf5ba4c/InAppWalletConnectUI-IYEPIHHJ.js
  function InAppWalletFormUIScreen (line 107) | function InAppWalletFormUIScreen(props) {
  function InAppWalletConnectUI (line 122) | function InAppWalletConnectUI(props) {

FILE: 17-Crowd-Funding-Dapp/Frontend/.vite/deps_temp_6cf5ba4c/InAppWalletSelectionUI-QJ7CQPJG.js
  function InAppWalletSelectionUI (line 67) | function InAppWalletSelectionUI(props) {

FILE: 17-Crowd-Funding-Dapp/Frontend/.vite/deps_temp_6cf5ba4c/ModelViewer-GZZWO7FG.js
  method addEventListener (line 161) | addEventListener(type, listener) {
  method hasEventListener (line 172) | hasEventListener(type, listener) {
  method removeEventListener (line 178) | removeEventListener(type, listener) {
  method dispatchEvent (line 190) | dispatchEvent(event) {
  function generateUUID (line 209) | function generateUUID() {
  function clamp (line 217) | function clamp(value, min, max2) {
  function euclideanModulo (line 220) | function euclideanModulo(n2, m) {
  function mapLinear (line 223) | function mapLinear(x2, a1, a2, b1, b22) {
  function inverseLerp (line 226) | function inverseLerp(x2, y, value) {
  function lerp (line 233) | function lerp(x2, y, t2) {
  function damp (line 236) | function damp(x2, y, lambda, dt2) {
  function pingpong (line 239) | function pingpong(x2, length = 1) {
  function smoothstep (line 242) | function smoothstep(x2, min, max2) {
  function smootherstep (line 250) | function smootherstep(x2, min, max2) {
  function randInt (line 258) | function randInt(low, high) {
  function randFloat (line 261) | function randFloat(low, high) {
  function randFloatSpread (line 264) | function randFloatSpread(range) {
  function seededRandom (line 267) | function seededRandom(s) {
  function degToRad (line 275) | function degToRad(degrees) {
  function radToDeg (line 278) | function radToDeg(radians) {
  function isPowerOfTwo (line 281) | function isPowerOfTwo(value) {
  function ceilPowerOfTwo (line 284) | function ceilPowerOfTwo(value) {
  function floorPowerOfTwo (line 287) | function floorPowerOfTwo(value) {
  function setQuaternionFromProperEuler (line 290) | function setQuaternionFromProperEuler(q, a, b, c, order) {
  function denormalize (line 324) | function denormalize(value, array) {
  function normalize (line 340) | function normalize(value, array) {
  method constructor (line 384) | constructor(x2 = 0, y = 0) {
  method width (line 389) | get width() {
  method width (line 392) | set width(value) {
  method height (line 395) | get height() {
  method height (line 398) | set height(value) {
  method set (line 401) | set(x2, y) {
  method setScalar (line 406) | setScalar(scalar) {
  method setX (line 411) | setX(x2) {
  method setY (line 415) | setY(y) {
  method setComponent (line 419) | setComponent(index, value) {
  method getComponent (line 432) | getComponent(index) {
  method clone (line 442) | clone() {
  method copy (line 445) | copy(v) {
  method add (line 450) | add(v) {
  method addScalar (line 455) | addScalar(s) {
  method addVectors (line 460) | addVectors(a, b) {
  method addScaledVector (line 465) | addScaledVector(v, s) {
  method sub (line 470) | sub(v) {
  method subScalar (line 475) | subScalar(s) {
  method subVectors (line 480) | subVectors(a, b) {
  method multiply (line 485) | multiply(v) {
  method multiplyScalar (line 490) | multiplyScalar(scalar) {
  method divide (line 495) | divide(v) {
  method divideScalar (line 500) | divideScalar(scalar) {
  method applyMatrix3 (line 503) | applyMatrix3(m) {
  method min (line 510) | min(v) {
  method max (line 515) | max(v) {
  method clamp (line 520) | clamp(min, max2) {
  method clampScalar (line 525) | clampScalar(minVal, maxVal) {
  method clampLength (line 530) | clampLength(min, max2) {
  method floor (line 534) | floor() {
  method ceil (line 539) | ceil() {
  method round (line 544) | round() {
  method roundToZero (line 549) | roundToZero() {
  method negate (line 554) | negate() {
  method dot (line 559) | dot(v) {
  method cross (line 562) | cross(v) {
  method lengthSq (line 565) | lengthSq() {
  method length (line 568) | length() {
  method manhattanLength (line 571) | manhattanLength() {
  method normalize (line 574) | normalize() {
  method angle (line 577) | angle() {
  method distanceTo (line 581) | distanceTo(v) {
  method distanceToSquared (line 584) | distanceToSquared(v) {
  method manhattanDistanceTo (line 588) | manhattanDistanceTo(v) {
  method setLength (line 591) | setLength(length) {
  method lerp (line 594) | lerp(v, alpha) {
  method lerpVectors (line 599) | lerpVectors(v1, v2, alpha) {
  method equals (line 604) | equals(v) {
  method fromArray (line 607) | fromArray(array, offset = 0) {
  method toArray (line 612) | toArray(array = [], offset = 0) {
  method fromBufferAttribute (line 617) | fromBufferAttribute(attribute, index) {
  method rotateAround (line 622) | rotateAround(center, angle) {
  method random (line 630) | random() {
  method [Symbol.iterator] (line 635) | *[Symbol.iterator]() {
  method constructor (line 641) | constructor() {
  method set (line 655) | set(n11, n12, n13, n21, n22, n23, n31, n32, n33) {
  method identity (line 668) | identity() {
  method copy (line 682) | copy(m) {
  method extractBasis (line 696) | extractBasis(xAxis, yAxis, zAxis) {
  method setFromMatrix4 (line 702) | setFromMatrix4(m) {
  method multiply (line 717) | multiply(m) {
  method premultiply (line 720) | premultiply(m) {
  method multiplyMatrices (line 723) | multiplyMatrices(a, b) {
  method multiplyScalar (line 744) | multiplyScalar(s) {
  method determinant (line 757) | determinant() {
  method invert (line 762) | invert() {
  method transpose (line 778) | transpose() {
  method getNormalMatrix (line 792) | getNormalMatrix(matrix42) {
  method transposeIntoArray (line 795) | transposeIntoArray(r) {
  method setUvTransform (line 808) | setUvTransform(tx, ty, sx, sy, rotation, cx, cy) {
  method scale (line 824) | scale(sx, sy) {
  method rotate (line 834) | rotate(theta) {
  method translate (line 848) | translate(tx, ty) {
  method equals (line 858) | equals(matrix) {
  method fromArray (line 867) | fromArray(array, offset = 0) {
  method toArray (line 873) | toArray(array = [], offset = 0) {
  method clone (line 886) | clone() {
  function arrayNeedsUint32 (line 890) | function arrayNeedsUint32(array) {
  function createElementNS (line 897) | function createElementNS(name) {
  function SRGBToLinear (line 900) | function SRGBToLinear(c) {
  function LinearToSRGB (line 903) | function LinearToSRGB(c) {
  method workingColorSpace (line 912) | get workingColorSpace() {
  method workingColorSpace (line 915) | set workingColorSpace(colorSpace) {
  function hue2rgb (line 1091) | function hue2rgb(p2, q, t2) {
  function toComponents (line 1104) | function toComponents(source, target2) {
  method constructor (line 1111) | constructor(r, g2, b) {
  method set (line 1121) | set(value) {
  method setScalar (line 1131) | setScalar(scalar) {
  method setHex (line 1137) | setHex(hex, colorSpace = SRGBColorSpace) {
  method setRGB (line 1145) | setRGB(r, g2, b, colorSpace = LinearSRGBColorSpace) {
  method setHSL (line 1152) | setHSL(h, s, l, colorSpace = LinearSRGBColorSpace) {
  method setStyle (line 1168) | setStyle(style2, colorSpace = SRGBColorSpace) {
  method setColorName (line 1234) | setColorName(style2, colorSpace = SRGBColorSpace) {
  method clone (line 1243) | clone() {
  method copy (line 1246) | copy(color) {
  method copySRGBToLinear (line 1252) | copySRGBToLinear(color) {
  method copyLinearToSRGB (line 1258) | copyLinearToSRGB(color) {
  method convertSRGBToLinear (line 1264) | convertSRGBToLinear() {
  method convertLinearToSRGB (line 1268) | convertLinearToSRGB() {
  method getHex (line 1272) | getHex(colorSpace = SRGBColorSpace) {
  method getHexString (line 1276) | getHexString(colorSpace = SRGBColorSpace) {
  method getHSL (line 1279) | getHSL(target2, colorSpace = LinearSRGBColorSpace) {
  method getRGB (line 1310) | getRGB(target2, colorSpace = LinearSRGBColorSpace) {
  method getStyle (line 1317) | getStyle(colorSpace = SRGBColorSpace) {
  method offsetHSL (line 1324) | offsetHSL(h, s, l) {
  method add (line 1332) | add(color) {
  method addColors (line 1338) | addColors(color1, color2) {
  method addScalar (line 1344) | addScalar(s) {
  method sub (line 1350) | sub(color) {
  method multiply (line 1356) | multiply(color) {
  method multiplyScalar (line 1362) | multiplyScalar(s) {
  method lerp (line 1368) | lerp(color, alpha) {
  method lerpColors (line 1374) | lerpColors(color1, color2, alpha) {
  method lerpHSL (line 1380) | lerpHSL(color, alpha) {
  method equals (line 1389) | equals(c) {
  method fromArray (line 1392) | fromArray(array, offset = 0) {
  method toArray (line 1398) | toArray(array = [], offset = 0) {
  method fromBufferAttribute (line 1404) | fromBufferAttribute(attribute, index) {
  method toJSON (line 1410) | toJSON() {
  method [Symbol.iterator] (line 1413) | *[Symbol.iterator]() {
  method getDataURL (line 1422) | static getDataURL(image) {
  method sRGBToLinear (line 1452) | static sRGBToLinear(image) {
  method constructor (line 1487) | constructor(data = null) {
  method needsUpdate (line 1493) | set needsUpdate(value) {
  method toJSON (line 1497) | toJSON(meta) {
  function serializeImage (line 1529) | function serializeImage(image) {
  method constructor (line 1548) | constructor(image = _Texture.DEFAULT_IMAGE, mapping = _Texture.DEFAULT_M...
  method image (line 1582) | get image() {
  method image (line 1585) | set image(value) {
  method updateMatrix (line 1588) | updateMatrix() {
  method clone (line 1591) | clone() {
  method copy (line 1594) | copy(source) {
  method toJSON (line 1622) | toJSON(meta) {
  method dispose (line 1659) | dispose() {
  method transformUv (line 1662) | transformUv(uv) {
  method needsUpdate (line 1705) | set needsUpdate(value) {
  method constructor (line 1715) | constructor(x2 = 0, y = 0, z = 0, w = 1) {
  method width (line 1722) | get width() {
  method width (line 1725) | set width(value) {
  method height (line 1728) | get height() {
  method height (line 1731) | set height(value) {
  method set (line 1734) | set(x2, y, z, w) {
  method setScalar (line 1741) | setScalar(scalar) {
  method setX (line 1748) | setX(x2) {
  method setY (line 1752) | setY(y) {
  method setZ (line 1756) | setZ(z) {
  method setW (line 1760) | setW(w) {
  method setComponent (line 1764) | setComponent(index, value) {
  method getComponent (line 1783) | getComponent(index) {
  method clone (line 1797) | clone() {
  method copy (line 1800) | copy(v) {
  method add (line 1807) | add(v) {
  method addScalar (line 1814) | addScalar(s) {
  method addVectors (line 1821) | addVectors(a, b) {
  method addScaledVector (line 1828) | addScaledVector(v, s) {
  method sub (line 1835) | sub(v) {
  method subScalar (line 1842) | subScalar(s) {
  method subVectors (line 1849) | subVectors(a, b) {
  method multiply (line 1856) | multiply(v) {
  method multiplyScalar (line 1863) | multiplyScalar(scalar) {
  method applyMatrix4 (line 1870) | applyMatrix4(m) {
  method divideScalar (line 1879) | divideScalar(scalar) {
  method setAxisAngleFromQuaternion (line 1882) | setAxisAngleFromQuaternion(q) {
  method setAxisAngleFromRotationMatrix (line 1896) | setAxisAngleFromRotationMatrix(m) {
  method min (line 1954) | min(v) {
  method max (line 1961) | max(v) {
  method clamp (line 1968) | clamp(min, max2) {
  method clampScalar (line 1975) | clampScalar(minVal, maxVal) {
  method clampLength (line 1982) | clampLength(min, max2) {
  method floor (line 1986) | floor() {
  method ceil (line 1993) | ceil() {
  method round (line 2000) | round() {
  method roundToZero (line 2007) | roundToZero() {
  method negate (line 2014) | negate() {
  method dot (line 2021) | dot(v) {
  method lengthSq (line 2024) | lengthSq() {
  method length (line 2027) | length() {
  method manhattanLength (line 2030) | manhattanLength() {
  method normalize (line 2033) | normalize() {
  method setLength (line 2036) | setLength(length) {
  method lerp (line 2039) | lerp(v, alpha) {
  method lerpVectors (line 2046) | lerpVectors(v1, v2, alpha) {
  method equals (line 2053) | equals(v) {
  method fromArray (line 2056) | fromArray(array, offset = 0) {
  method toArray (line 2063) | toArray(array = [], offset = 0) {
  method fromBufferAttribute (line 2070) | fromBufferAttribute(attribute, index) {
  method random (line 2077) | random() {
  method [Symbol.iterator] (line 2084) | *[Symbol.iterator]() {
  method constructor (line 2092) | constructor(width = 1, height = 1, options = {}) {
  method setSize (line 2113) | setSize(width, height, depth = 1) {
  method clone (line 2126) | clone() {
  method copy (line 2129) | copy(source) {
  method dispose (line 2145) | dispose() {
  method constructor (line 2150) | constructor(data = null, width = 1, height = 1, depth = 1) {
  method constructor (line 2163) | constructor(data = null, width = 1, height = 1, depth = 1) {
  method constructor (line 2176) | constructor(x2 = 0, y = 0, z = 0, w = 1) {
  method slerpFlat (line 2183) | static slerpFlat(dst, dstOffset, src0, srcOffset0, src1, srcOffset1, t2) {
  method multiplyQuaternionsFlat (line 2226) | static multiplyQuaternionsFlat(dst, dstOffset, src0, srcOffset0, src1, s...
  method x (line 2241) | get x() {
  method x (line 2244) | set x(value) {
  method y (line 2248) | get y() {
  method y (line 2251) | set y(value) {
  method z (line 2255) | get z() {
  method z (line 2258) | set z(value) {
  method w (line 2262) | get w() {
  method w (line 2265) | set w(value) {
  method set (line 2269) | set(x2, y, z, w) {
  method clone (line 2277) | clone() {
  method copy (line 2280) | copy(quaternion) {
  method setFromEuler (line 2288) | setFromEuler(euler, update) {
  method setFromAxisAngle (line 2342) | setFromAxisAngle(axis, angle) {
  method setFromRotationMatrix (line 2351) | setFromRotationMatrix(m) {
  method setFromUnitVectors (line 2381) | setFromUnitVectors(vFrom, vTo) {
  method angleTo (line 2404) | angleTo(q) {
  method rotateTowards (line 2407) | rotateTowards(q, step) {
  method identity (line 2415) | identity() {
  method invert (line 2418) | invert() {
  method conjugate (line 2421) | conjugate() {
  method dot (line 2428) | dot(v) {
  method lengthSq (line 2431) | lengthSq() {
  method length (line 2434) | length() {
  method normalize (line 2437) | normalize() {
  method multiply (line 2454) | multiply(q) {
  method premultiply (line 2457) | premultiply(q) {
  method multiplyQuaternions (line 2460) | multiplyQuaternions(a, b) {
  method slerp (line 2470) | slerp(qb, t2) {
  method slerpQuaternions (line 2514) | slerpQuaternions(qa, qb, t2) {
  method random (line 2517) | random() {
  method equals (line 2530) | equals(quaternion) {
  method fromArray (line 2533) | fromArray(array, offset = 0) {
  method toArray (line 2541) | toArray(array = [], offset = 0) {
  method fromBufferAttribute (line 2548) | fromBufferAttribute(attribute, index) {
  method _onChange (line 2555) | _onChange(callback) {
  method _onChangeCallback (line 2559) | _onChangeCallback() {
  method [Symbol.iterator] (line 2561) | *[Symbol.iterator]() {
  method constructor (line 2569) | constructor(x2 = 0, y = 0, z = 0) {
  method set (line 2575) | set(x2, y, z) {
  method setScalar (line 2583) | setScalar(scalar) {
  method setX (line 2589) | setX(x2) {
  method setY (line 2593) | setY(y) {
  method setZ (line 2597) | setZ(z) {
  method setComponent (line 2601) | setComponent(index, value) {
  method getComponent (line 2617) | getComponent(index) {
  method clone (line 2629) | clone() {
  method copy (line 2632) | copy(v) {
  method add (line 2638) | add(v) {
  method addScalar (line 2644) | addScalar(s) {
  method addVectors (line 2650) | addVectors(a, b) {
  method addScaledVector (line 2656) | addScaledVector(v, s) {
  method sub (line 2662) | sub(v) {
  method subScalar (line 2668) | subScalar(s) {
  method subVectors (line 2674) | subVectors(a, b) {
  method multiply (line 2680) | multiply(v) {
  method multiplyScalar (line 2686) | multiplyScalar(scalar) {
  method multiplyVectors (line 2692) | multiplyVectors(a, b) {
  method applyEuler (line 2698) | applyEuler(euler) {
  method applyAxisAngle (line 2701) | applyAxisAngle(axis, angle) {
  method applyMatrix3 (line 2704) | applyMatrix3(m) {
  method applyNormalMatrix (line 2712) | applyNormalMatrix(m) {
  method applyMatrix4 (line 2715) | applyMatrix4(m) {
  method applyQuaternion (line 2724) | applyQuaternion(q) {
  method project (line 2736) | project(camera2) {
  method unproject (line 2739) | unproject(camera2) {
  method transformDirection (line 2742) | transformDirection(m) {
  method divide (line 2750) | divide(v) {
  method divideScalar (line 2756) | divideScalar(scalar) {
  method min (line 2759) | min(v) {
  method max (line 2765) | max(v) {
  method clamp (line 2771) | clamp(min, max2) {
  method clampScalar (line 2777) | clampScalar(minVal, maxVal) {
  method clampLength (line 2783) | clampLength(min, max2) {
  method floor (line 2787) | floor() {
  method ceil (line 2793) | ceil() {
  method round (line 2799) | round() {
  method roundToZero (line 2805) | roundToZero() {
  method negate (line 2811) | negate() {
  method dot (line 2817) | dot(v) {
  method lengthSq (line 2821) | lengthSq() {
  method length (line 2824) | length() {
  method manhattanLength (line 2827) | manhattanLength() {
  method normalize (line 2830) | normalize() {
  method setLength (line 2833) | setLength(length) {
  method lerp (line 2836) | lerp(v, alpha) {
  method lerpVectors (line 2842) | lerpVectors(v1, v2, alpha) {
  method cross (line 2848) | cross(v) {
  method crossVectors (line 2851) | crossVectors(a, b) {
  method projectOnVector (line 2859) | projectOnVector(v) {
  method projectOnPlane (line 2866) | projectOnPlane(planeNormal) {
  method reflect (line 2870) | reflect(normal) {
  method angleTo (line 2873) | angleTo(v) {
  method distanceTo (line 2880) | distanceTo(v) {
  method distanceToSquared (line 2883) | distanceToSquared(v) {
  method manhattanDistanceTo (line 2887) | manhattanDistanceTo(v) {
  method setFromSpherical (line 2890) | setFromSpherical(s) {
  method setFromSphericalCoords (line 2893) | setFromSphericalCoords(radius, phi, theta) {
  method setFromCylindrical (line 2900) | setFromCylindrical(c) {
  method setFromCylindricalCoords (line 2903) | setFromCylindricalCoords(radius, theta, y) {
  method setFromMatrixPosition (line 2909) | setFromMatrixPosition(m) {
  method setFromMatrixScale (line 2916) | setFromMatrixScale(m) {
  method setFromMatrixColumn (line 2925) | setFromMatrixColumn(m, index) {
  method setFromMatrix3Column (line 2928) | setFromMatrix3Column(m, index) {
  method setFromEuler (line 2931) | setFromEuler(e) {
  method equals (line 2937) | equals(v) {
  method fromArray (line 2940) | fromArray(array, offset = 0) {
  method toArray (line 2946) | toArray(array = [], offset = 0) {
  method fromBufferAttribute (line 2952) | fromBufferAttribute(attribute, index) {
  method random (line 2958) | random() {
  method randomDirection (line 2964) | randomDirection() {
  method [Symbol.iterator] (line 2973) | *[Symbol.iterator]() {
  method constructor (line 2982) | constructor(min = new Vector3(Infinity, Infinity, Infinity), max2 = new ...
  method set (line 2987) | set(min, max2) {
  method setFromArray (line 2992) | setFromArray(array) {
  method setFromBufferAttribute (line 3020) | setFromBufferAttribute(attribute) {
  method setFromPoints (line 3048) | setFromPoints(points) {
  method setFromCenterAndSize (line 3055) | setFromCenterAndSize(center, size) {
  method setFromObject (line 3061) | setFromObject(object, precise = false) {
  method clone (line 3065) | clone() {
  method copy (line 3068) | copy(box) {
  method makeEmpty (line 3073) | makeEmpty() {
  method isEmpty (line 3078) | isEmpty() {
  method getCenter (line 3081) | getCenter(target2) {
  method getSize (line 3084) | getSize(target2) {
  method expandByPoint (line 3087) | expandByPoint(point) {
  method expandByVector (line 3092) | expandByVector(vector) {
  method expandByScalar (line 3097) | expandByScalar(scalar) {
  method expandByObject (line 3102) | expandByObject(object, precise = false) {
  method containsPoint (line 3127) | containsPoint(point) {
  method containsBox (line 3130) | containsBox(box) {
  method getParameter (line 3133) | getParameter(point, target2) {
  method intersectsBox (line 3140) | intersectsBox(box) {
  method intersectsSphere (line 3143) | intersectsSphere(sphere) {
  method intersectsPlane (line 3147) | intersectsPlane(plane) {
  method intersectsTriangle (line 3172) | intersectsTriangle(triangle) {
  method clampPoint (line 3224) | clampPoint(point, target2) {
  method distanceToPoint (line 3227) | distanceToPoint(point) {
  method getBoundingSphere (line 3231) | getBoundingSphere(target2) {
  method intersect (line 3236) | intersect(box) {
  method union (line 3243) | union(box) {
  method applyMatrix4 (line 3248) | applyMatrix4(matrix) {
  method translate (line 3262) | translate(offset) {
  method equals (line 3267) | equals(box) {
  function satForAxes (line 3293) | function satForAxes(axes, v0, v1, v2, extents) {
  method constructor (line 3310) | constructor(center = new Vector3(), radius = -1) {
  method set (line 3314) | set(center, radius) {
  method setFromPoints (line 3319) | setFromPoints(points, optionalCenter) {
  method copy (line 3333) | copy(sphere) {
  method isEmpty (line 3338) | isEmpty() {
  method makeEmpty (line 3341) | makeEmpty() {
  method containsPoint (line 3346) | containsPoint(point) {
  method distanceToPoint (line 3349) | distanceToPoint(point) {
  method intersectsSphere (line 3352) | intersectsSphere(sphere) {
  method intersectsBox (line 3356) | intersectsBox(box) {
  method intersectsPlane (line 3359) | intersectsPlane(plane) {
  method clampPoint (line 3362) | clampPoint(point, target2) {
  method getBoundingBox (line 3371) | getBoundingBox(target2) {
  method applyMatrix4 (line 3380) | applyMatrix4(matrix) {
  method translate (line 3385) | translate(offset) {
  method expandByPoint (line 3389) | expandByPoint(point) {
  method union (line 3405) | union(sphere) {
  method equals (line 3422) | equals(sphere) {
  method clone (line 3425) | clone() {
  method constructor (line 3437) | constructor(origin = new Vector3(), direction = new Vector3(0, 0, -1)) {
  method set (line 3441) | set(origin, direction) {
  method copy (line 3446) | copy(ray) {
  method at (line 3451) | at(t2, target2) {
  method lookAt (line 3454) | lookAt(v) {
  method recast (line 3458) | recast(t2) {
  method closestPointToPoint (line 3462) | closestPointToPoint(point, target2) {
  method distanceToPoint (line 3470) | distanceToPoint(point) {
  method distanceSqToPoint (line 3473) | distanceSqToPoint(point) {
  method distanceSqToSegment (line 3481) | distanceSqToSegment(v0, v1, optionalPointOnRay, optionalPointOnSegment) {
  method intersectSphere (line 3541) | intersectSphere(sphere, target2) {
  method intersectsSphere (line 3557) | intersectsSphere(sphere) {
  method distanceToPlane (line 3560) | distanceToPlane(plane) {
  method intersectPlane (line 3571) | intersectPlane(plane, target2) {
  method intersectsPlane (line 3578) | intersectsPlane(plane) {
  method intersectBox (line 3589) | intersectBox(box, target2) {
  method intersectsBox (line 3630) | intersectsBox(box) {
  method intersectTriangle (line 3633) | intersectTriangle(a, b, c, backfaceCulling, target2) {
  method applyMatrix4 (line 3667) | applyMatrix4(matrix42) {
  method equals (line 3672) | equals(ray) {
  method clone (line 3675) | clone() {
  method constructor (line 3680) | constructor() {
  method set (line 3701) | set(n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42...
  method identity (line 3721) | identity() {
  method clone (line 3742) | clone() {
  method copy (line 3745) | copy(m) {
  method copyPosition (line 3766) | copyPosition(m) {
  method setFromMatrix3 (line 3773) | setFromMatrix3(m) {
  method extractBasis (line 3795) | extractBasis(xAxis, yAxis, zAxis) {
  method makeBasis (line 3801) | makeBasis(xAxis, yAxis, zAxis) {
  method extractRotation (line 3822) | extractRotation(m) {
  method makeRotationFromEuler (line 3846) | makeRotationFromEuler(euler) {
  method makeRotationFromQuaternion (line 3928) | makeRotationFromQuaternion(q) {
  method lookAt (line 3931) | lookAt(eye, target2, up) {
  method multiply (line 3961) | multiply(m) {
  method premultiply (line 3964) | premultiply(m) {
  method multiplyMatrices (line 3967) | multiplyMatrices(a, b) {
  method multiplyScalar (line 3997) | multiplyScalar(s) {
  method determinant (line 4017) | determinant() {
  method transpose (line 4025) | transpose() {
  method setPosition (line 4048) | setPosition(x2, y, z) {
  method invert (line 4061) | invert() {
  method scale (line 4085) | scale(v) {
  method getMaxScaleOnAxis (line 4102) | getMaxScaleOnAxis() {
  method makeTranslation (line 4109) | makeTranslation(x2, y, z) {
  method makeRotationX (line 4130) | makeRotationX(theta) {
  method makeRotationY (line 4152) | makeRotationY(theta) {
  method makeRotationZ (line 4174) | makeRotationZ(theta) {
  method makeRotationAxis (line 4196) | makeRotationAxis(axis, angle) {
  method makeScale (line 4222) | makeScale(x2, y, z) {
  method makeShear (line 4243) | makeShear(xy, xz, yx, yz, zx, zy) {
  method compose (line 4264) | compose(position, quaternion, scale) {
  method decompose (line 4290) | decompose(position, quaternion, scale) {
  method makePerspective (line 4320) | makePerspective(left, right, top, bottom, near, far) {
  method makeOrthographic (line 4346) | makeOrthographic(left, right, top, bottom, near, far) {
  method equals (line 4372) | equals(matrix) {
  method fromArray (line 4381) | fromArray(array, offset = 0) {
  method toArray (line 4387) | toArray(array = [], offset = 0) {
  method constructor (line 4418) | constructor(x2 = 0, y = 0, z = 0, order = _Euler.DefaultOrder) {
  method x (line 4425) | get x() {
  method x (line 4428) | set x(value) {
  method y (line 4432) | get y() {
  method y (line 4435) | set y(value) {
  method z (line 4439) | get z() {
  method z (line 4442) | set z(value) {
  method order (line 4446) | get order() {
  method order (line 4449) | set order(value) {
  method set (line 4453) | set(x2, y, z, order = this._order) {
  method clone (line 4461) | clone() {
  method copy (line 4464) | copy(euler) {
  method setFromRotationMatrix (line 4472) | setFromRotationMatrix(m, order = this._order, update = true) {
  method setFromQuaternion (line 4546) | setFromQuaternion(q, order, update) {
  method setFromVector3 (line 4550) | setFromVector3(v, order = this._order) {
  method reorder (line 4553) | reorder(newOrder) {
  method equals (line 4557) | equals(euler) {
  method fromArray (line 4560) | fromArray(array) {
  method toArray (line 4569) | toArray(array = [], offset = 0) {
  method _onChange (line 4576) | _onChange(callback) {
  method _onChangeCallback (line 4580) | _onChangeCallback() {
  method [Symbol.iterator] (line 4582) | *[Symbol.iterator]() {
  method toVector3 (line 4589) | toVector3() {
  method constructor (line 4596) | constructor() {
  method set (line 4599) | set(channel) {
  method enable (line 4602) | enable(channel) {
  method enableAll (line 4605) | enableAll() {
  method toggle (line 4608) | toggle(channel) {
  method disable (line 4611) | disable(channel) {
  method disableAll (line 4614) | disableAll() {
  method test (line 4617) | test(layers) {
  method isEnabled (line 4620) | isEnabled(channel) {
  method constructor (line 4638) | constructor() {
  method onBeforeRender (line 4702) | onBeforeRender() {
  method onAfterRender (line 4704) | onAfterRender() {
  method applyMatrix4 (line 4706) | applyMatrix4(matrix) {
  method applyQuaternion (line 4712) | applyQuaternion(q) {
  method setRotationFromAxisAngle (line 4716) | setRotationFromAxisAngle(axis, angle) {
  method setRotationFromEuler (line 4719) | setRotationFromEuler(euler) {
  method setRotationFromMatrix (line 4722) | setRotationFromMatrix(m) {
  method setRotationFromQuaternion (line 4725) | setRotationFromQuaternion(q) {
  method rotateOnAxis (line 4728) | rotateOnAxis(axis, angle) {
  method rotateOnWorldAxis (line 4733) | rotateOnWorldAxis(axis, angle) {
  method rotateX (line 4738) | rotateX(angle) {
  method rotateY (line 4741) | rotateY(angle) {
  method rotateZ (line 4744) | rotateZ(angle) {
  method translateOnAxis (line 4747) | translateOnAxis(axis, distance) {
  method translateX (line 4752) | translateX(distance) {
  method translateY (line 4755) | translateY(distance) {
  method translateZ (line 4758) | translateZ(distance) {
  method localToWorld (line 4761) | localToWorld(vector) {
  method worldToLocal (line 4764) | worldToLocal(vector) {
  method lookAt (line 4767) | lookAt(x2, y, z) {
  method add (line 4788) | add(object) {
  method remove (line 4811) | remove(object) {
  method removeFromParent (line 4826) | removeFromParent() {
  method clear (line 4833) | clear() {
  method attach (line 4842) | attach(object) {
  method getObjectById (line 4854) | getObjectById(id) {
  method getObjectByName (line 4857) | getObjectByName(name) {
  method getObjectByProperty (line 4860) | getObjectByProperty(name, value) {
  method getWorldPosition (line 4872) | getWorldPosition(target2) {
  method getWorldQuaternion (line 4876) | getWorldQuaternion(target2) {
  method getWorldScale (line 4881) | getWorldScale(target2) {
  method getWorldDirection (line 4886) | getWorldDirection(target2) {
  method raycast (line 4891) | raycast() {
  method traverse (line 4893) | traverse(callback) {
  method traverseVisible (line 4900) | traverseVisible(callback) {
  method traverseAncestors (line 4909) | traverseAncestors(callback) {
  method updateMatrix (line 4916) | updateMatrix() {
  method updateMatrixWorld (line 4920) | updateMatrixWorld(force) {
  method updateWorldMatrix (line 4940) | updateWorldMatrix(updateParents, updateChildren) {
  method toJSON (line 4962) | toJSON(meta) {
  method clone (line 5112) | clone(recursive) {
  method copy (line 5115) | copy(source, recursive = true) {
  method constructor (line 5157) | constructor(a = new Vector3(), b = new Vector3(), c = new Vector3()) {
  method getNormal (line 5162) | static getNormal(a, b, c, target2) {
  method getBarycoord (line 5174) | static getBarycoord(point, a, b, c, target2) {
  method containsPoint (line 5192) | static containsPoint(point, a, b, c) {
  method getUV (line 5196) | static getUV(point, p1, p2, p3, uv1, uv2, uv3, target2) {
  method isFrontFacing (line 5204) | static isFrontFacing(a, b, c, direction) {
  method set (line 5209) | set(a, b, c) {
  method setFromPointsAndIndices (line 5215) | setFromPointsAndIndices(points, i0, i1, i2) {
  method setFromAttributeAndIndices (line 5221) | setFromAttributeAndIndices(attribute, i0, i1, i2) {
  method clone (line 5227) | clone() {
  method copy (line 5230) | copy(triangle) {
  method getArea (line 5236) | getArea() {
  method getMidpoint (line 5241) | getMidpoint(target2) {
  method getNormal (line 5244) | getNormal(target2) {
  method getPlane (line 5247) | getPlane(target2) {
  method getBarycoord (line 5250) | getBarycoord(point, target2) {
  method getUV (line 5253) | getUV(point, uv1, uv2, uv3, target2) {
  method containsPoint (line 5256) | containsPoint(point) {
  method isFrontFacing (line 5259) | isFrontFacing(direction) {
  method intersectsBox (line 5262) | intersectsBox(box) {
  method closestPointToPoint (line 5265) | closestPointToPoint(p2, target2) {
  method equals (line 5309) | equals(triangle) {
  method constructor (line 5315) | constructor() {
  method alphaTest (line 5362) | get alphaTest() {
  method alphaTest (line 5365) | set alphaTest(value) {
  method onBuild (line 5371) | onBuild() {
  method onBeforeRender (line 5373) | onBeforeRender() {
  method onBeforeCompile (line 5375) | onBeforeCompile() {
  method customProgramCacheKey (line 5377) | customProgramCacheKey() {
  method setValues (line 5380) | setValues(values) {
  method toJSON (line 5403) | toJSON(meta) {
  method clone (line 5627) | clone() {
  method copy (line 5630) | copy(source) {
  method dispose (line 5681) | dispose() {
  method needsUpdate (line 5684) | set needsUpdate(value) {
  method constructor (line 5690) | constructor(parameters) {
  method copy (line 5713) | copy(source) {
  method constructor (line 5738) | constructor(array, itemSize, normalized) {
  method onUploadCallback (line 5752) | onUploadCallback() {
  method needsUpdate (line 5754) | set needsUpdate(value) {
  method setUsage (line 5758) | setUsage(value) {
  method copy (line 5762) | copy(source) {
  method copyAt (line 5771) | copyAt(index1, attribute, index2) {
  method copyArray (line 5779) | copyArray(array) {
  method applyMatrix3 (line 5783) | applyMatrix3(m) {
  method applyMatrix4 (line 5799) | applyMatrix4(m) {
  method applyNormalMatrix (line 5807) | applyNormalMatrix(m) {
  method transformDirection (line 5815) | transformDirection(m) {
  method set (line 5823) | set(value, offset = 0) {
  method getX (line 5827) | getX(index) {
  method setX (line 5833) | setX(index, x2) {
  method getY (line 5839) | getY(index) {
  method setY (line 5845) | setY(index, y) {
  method getZ (line 5851) | getZ(index) {
  method setZ (line 5857) | setZ(index, z) {
  method getW (line 5863) | getW(index) {
  method setW (line 5869) | setW(index, w) {
  method setXY (line 5875) | setXY(index, x2, y) {
  method setXYZ (line 5885) | setXYZ(index, x2, y, z) {
  method setXYZW (line 5897) | setXYZW(index, x2, y, z, w) {
  method onUpload (line 5911) | onUpload(callback) {
  method clone (line 5915) | clone() {
  method toJSON (line 5918) | toJSON() {
  method copyColorsArray (line 5934) | copyColorsArray() {
  method copyVector2sArray (line 5937) | copyVector2sArray() {
  method copyVector3sArray (line 5940) | copyVector3sArray() {
  method copyVector4sArray (line 5943) | copyVector4sArray() {
  method constructor (line 5948) | constructor(array, itemSize, normalized) {
  method constructor (line 5953) | constructor(array, itemSize, normalized) {
  method constructor (line 5958) | constructor(array, itemSize, normalized) {
  method constructor (line 5970) | constructor() {
  method getIndex (line 5987) | getIndex() {
  method setIndex (line 5990) | setIndex(index) {
  method getAttribute (line 5998) | getAttribute(name) {
  method setAttribute (line 6001) | setAttribute(name, attribute) {
  method deleteAttribute (line 6005) | deleteAttribute(name) {
  method hasAttribute (line 6009) | hasAttribute(name) {
  method addGroup (line 6012) | addGroup(start, count, materialIndex = 0) {
  method clearGroups (line 6019) | clearGroups() {
  method setDrawRange (line 6022) | setDrawRange(start, count) {
  method applyMatrix4 (line 6026) | applyMatrix4(matrix) {
  method applyQuaternion (line 6051) | applyQuaternion(q) {
  method rotateX (line 6056) | rotateX(angle) {
  method rotateY (line 6061) | rotateY(angle) {
  method rotateZ (line 6066) | rotateZ(angle) {
  method translate (line 6071) | translate(x2, y, z) {
  method scale (line 6076) | scale(x2, y, z) {
  method lookAt (line 6081) | lookAt(vector) {
  method center (line 6087) | center() {
  method setFromPoints (line 6093) | setFromPoints(points) {
  method computeBoundingBox (line 6102) | computeBoundingBox() {
  method computeBoundingSphere (line 6140) | computeBoundingSphere() {
  method computeTangents (line 6195) | computeTangents() {
  method computeVertexNormals (line 6286) | computeVertexNormals() {
  method merge (line 6341) | merge() {
  method normalizeNormals (line 6345) | normalizeNormals() {
  method toNonIndexed (line 6353) | toNonIndexed() {
  method toJSON (line 6403) | toJSON() {
  method clone (line 6469) | clone() {
  method copy (line 6472) | copy(source) {
  method dispose (line 6520) | dispose() {
  method constructor (line 6542) | constructor(geometry = new BufferGeometry(), material = new MeshBasicMat...
  method copy (line 6550) | copy(source, recursive) {
  method updateMorphTargets (line 6562) | updateMorphTargets() {
  method raycast (line 6579) | raycast(raycaster2, intersects2) {
  function checkIntersection (line 6675) | function checkIntersection(object, material, raycaster2, ray, pA, pB, pC...
  function checkBufferGeometryIntersection (line 6695) | function checkBufferGeometryIntersection(object, material, raycaster2, r...
  method constructor (line 6758) | constructor(width = 1, height = 1, depth = 1, widthSegments = 1, heightS...
  method fromJSON (line 6833) | static fromJSON(data) {
  function cloneUniforms (line 6837) | function cloneUniforms(src) {
  function mergeUniforms (line 6854) | function mergeUniforms(uniforms) {
  function cloneUniformsGroups (line 6864) | function cloneUniformsGroups(src) {
  method constructor (line 6875) | constructor(parameters) {
  method copy (line 6912) | copy(source) {
  method toJSON (line 6928) | toJSON(meta) {
  method constructor (line 6991) | constructor() {
  method copy (line 6999) | copy(source, recursive) {
  method getWorldDirection (line 7006) | getWorldDirection(target2) {
  method updateMatrixWorld (line 7011) | updateMatrixWorld(force) {
  method updateWorldMatrix (line 7015) | updateWorldMatrix(updateParents, updateChildren) {
  method clone (line 7019) | clone() {
  method constructor (line 7024) | constructor(fov2 = 50, aspect2 = 1, near = 0.1, far = 2e3) {
  method copy (line 7039) | copy(source, recursive) {
  method setFocalLength (line 7060) | setFocalLength(focalLength) {
  method getFocalLength (line 7068) | getFocalLength() {
  method getEffectiveFOV (line 7072) | getEffectiveFOV() {
  method getFilmWidth (line 7077) | getFilmWidth() {
  method getFilmHeight (line 7080) | getFilmHeight() {
  method setViewOffset (line 7118) | setViewOffset(fullWidth, fullHeight, x2, y, width, height) {
  method clearViewOffset (line 7140) | clearViewOffset() {
  method updateProjectionMatrix (line 7146) | updateProjectionMatrix() {
  method toJSON (line 7166) | toJSON(meta) {
  method constructor (line 7184) | constructor(near, far, renderTarget) {
  method update (line 7219) | update(renderer, scene) {
  method constructor (line 7251) | constructor(images, mapping, wrapS, wrapT, magFilter, minFilter, format,...
  method images (line 7258) | get images() {
  method images (line 7261) | set images(value) {
  method constructor (line 7266) | constructor(size = 1, options = {}) {
  method fromEquirectangularTexture (line 7276) | fromEquirectangularTexture(renderer, texture) {
  method clear (line 7351) | clear(renderer, color, depth, stencil) {
  method constructor (line 7364) | constructor(normal = new Vector3(1, 0, 0), constant = 0) {
  method set (line 7369) | set(normal, constant) {
  method setComponents (line 7374) | setComponents(x2, y, z, w) {
  method setFromNormalAndCoplanarPoint (line 7379) | setFromNormalAndCoplanarPoint(normal, point) {
  method setFromCoplanarPoints (line 7384) | setFromCoplanarPoints(a, b, c) {
  method copy (line 7389) | copy(plane) {
  method normalize (line 7394) | normalize() {
  method negate (line 7400) | negate() {
  method distanceToPoint (line 7405) | distanceToPoint(point) {
  method distanceToSphere (line 7408) | distanceToSphere(sphere) {
  method projectPoint (line 7411) | projectPoint(point, target2) {
  method intersectLine (line 7414) | intersectLine(line, target2) {
  method intersectsLine (line 7429) | intersectsLine(line) {
  method intersectsBox (line 7434) | intersectsBox(box) {
  method intersectsSphere (line 7437) | intersectsSphere(sphere) {
  method coplanarPoint (line 7440) | coplanarPoint(target2) {
  method applyMatrix4 (line 7443) | applyMatrix4(matrix, optionalNormalMatrix) {
  method translate (line 7450) | translate(offset) {
  method equals (line 7454) | equals(plane) {
  method clone (line 7457) | clone() {
  method constructor (line 7464) | constructor(p0 = new Plane(), p1 = new Plane(), p2 = new Plane(), p3 = n...
  method set (line 7467) | set(p0, p1, p2, p3, p4, p5) {
  method copy (line 7477) | copy(frustum) {
  method setFromProjectionMatrix (line 7484) | setFromProjectionMatrix(m) {
  method intersectsObject (line 7499) | intersectsObject(object) {
  method intersectsSprite (line 7506) | intersectsSprite(sprite) {
  method intersectsSphere (line 7512) | intersectsSphere(sphere) {
  method intersectsBox (line 7524) | intersectsBox(box) {
  method containsPoint (line 7537) | containsPoint(point) {
  method clone (line 7546) | clone() {
  function WebGLAnimation (line 7550) | function WebGLAnimation() {
  function WebGLAttributes (line 7580) | function WebGLAttributes(gl, capabilities) {
  method constructor (line 7694) | constructor(width = 1, height = 1, widthSegments = 1, heightSegments = 1) {
  method fromJSON (line 7740) | static fromJSON(data) {
  function WebGLBackground (line 8433) | function WebGLBackground(renderer, cubemaps, cubeuvmaps, state, objects,...
  function WebGLBindingStates (line 8560) | function WebGLBindingStates(gl, extensions, attributes, capabilities) {
  function WebGLBufferRenderer (line 8924) | function WebGLBufferRenderer(gl, extensions, info, capabilities) {
  function WebGLCapabilities (line 8956) | function WebGLCapabilities(gl, extensions, parameters) {
  function WebGLClipping (line 9025) | function WebGLClipping(properties) {
  function WebGLCubeMaps (line 9104) | function WebGLCubeMaps(renderer) {
  method constructor (line 9155) | constructor(left = -1, right = 1, top = 1, bottom = -1, near = 0.1, far ...
  method copy (line 9169) | copy(source, recursive) {
  method setViewOffset (line 9181) | setViewOffset(fullWidth, fullHeight, x2, y, width, height) {
  method clearViewOffset (line 9202) | clearViewOffset() {
  method updateProjectionMatrix (line 9208) | updateProjectionMatrix() {
  method toJSON (line 9228) | toJSON(meta) {
  method constructor (line 9263) | constructor(renderer) {
  method fromScene (line 9283) | fromScene(scene, sigma = 0, near = 0.1, far = 100) {
  method fromEquirectangular (line 9301) | fromEquirectangular(equirectangular, renderTarget = null) {
  method fromCubemap (line 9309) | fromCubemap(cubemap, renderTarget = null) {
  method compileCubemapShader (line 9316) | compileCubemapShader() {
  method compileEquirectangularShader (line 9326) | compileEquirectangularShader() {
  method dispose (line 9337) | dispose() {
  method _setSize (line 9345) | _setSize(cubeSize) {
  method _dispose (line 9349) | _dispose() {
  method _cleanup (line 9358) | _cleanup(outputTarget) {
  method _fromTexture (line 9363) | _fromTexture(texture, renderTarget) {
  method _allocateTargets (line 9376) | _allocateTargets() {
  method _compileMaterial (line 9400) | _compileMaterial(material) {
  method _sceneToCubeUV (line 9404) | _sceneToCubeUV(scene, near, far, cubeUVRenderTarget) {
  method _textureToCubeUV (line 9461) | _textureToCubeUV(texture, cubeUVRenderTarget) {
  method _applyPMREM (line 9483) | _applyPMREM(cubeUVRenderTarget) {
  method _blur (line 9501) | _blur(cubeUVRenderTarget, lodIn, lodOut, sigma, poleAxis) {
  method _halfBlur (line 9522) | _halfBlur(targetIn, targetOut, lodIn, lodOut, sigmaRadians, direction, p...
  function _createPlanes (line 9573) | function _createPlanes(lodMax) {
  function _createRenderTarget (line 9640) | function _createRenderTarget(width, height, params) {
  function _setViewport (line 9647) | function _setViewport(target2, x2, y, width, height) {
  function _getBlurShader (line 9651) | function _getBlurShader(lodMax, width, height) {
  function _getEquirectMaterial (line 9742) | function _getEquirectMaterial() {
  function _getCubemapMaterial (line 9777) | function _getCubemapMaterial() {
  function _getCommonVertexShader (line 9810) | function _getCommonVertexShader() {
  function WebGLCubeUVMaps (line 9871) | function WebGLCubeUVMaps(renderer) {
  function WebGLExtensions (line 9939) | function WebGLExtensions(gl) {
  function WebGLGeometries (line 9995) | function WebGLGeometries(gl, attributes, info, bindingStates) {
  function WebGLIndexedBufferRenderer (line 10091) | function WebGLIndexedBufferRenderer(gl, extensions, info, capabilities) {
  function WebGLInfo (line 10129) | function WebGLInfo(gl) {
  function numericalSort (line 10180) | function numericalSort(a, b) {
  function absNumericalSort (line 10183) | function absNumericalSort(a, b) {
  function WebGLMorphtargets (line 10186) | function WebGLMorphtargets(gl, capabilities, textures) {
  function WebGLObjects (line 10341) | function WebGLObjects(gl, geometries, attributes, info) {
  function flatten (line 10386) | function flatten(array, nBlocks, blockSize) {
  function arraysEqual (line 10405) | function arraysEqual(a, b) {
  function copyArray (line 10414) | function copyArray(a, b) {
  function allocTexUnits (line 10419) | function allocTexUnits(textures, n2) {
  function setValueV1f (line 10430) | function setValueV1f(gl, v) {
  function setValueV2f (line 10437) | function setValueV2f(gl, v) {
  function setValueV3f (line 10452) | function setValueV3f(gl, v) {
  function setValueV4f (line 10475) | function setValueV4f(gl, v) {
  function setValueM2 (line 10492) | function setValueM2(gl, v) {
  function setValueM3 (line 10508) | function setValueM3(gl, v) {
  function setValueM4 (line 10524) | function setValueM4(gl, v) {
  function setValueV1i (line 10540) | function setValueV1i(gl, v) {
  function setValueV2i (line 10547) | function setValueV2i(gl, v) {
  function setValueV3i (line 10562) | function setValueV3i(gl, v) {
  function setValueV4i (line 10578) | function setValueV4i(gl, v) {
  function setValueV1ui (line 10595) | function setValueV1ui(gl, v) {
  function setValueV2ui (line 10602) | function setValueV2ui(gl, v) {
  function setValueV3ui (line 10617) | function setValueV3ui(gl, v) {
  function setValueV4ui (line 10633) | function setValueV4ui(gl, v) {
  function setValueT1 (line 10650) | function setValueT1(gl, v, textures) {
  function setValueT3D1 (line 10659) | function setValueT3D1(gl, v, textures) {
  function setValueT6 (line 10668) | function setValueT6(gl, v, textures) {
  function setValueT2DArray1 (line 10677) | function setValueT2DArray1(gl, v, textures) {
  function getSingularSetter (line 10686) | function getSingularSetter(type) {
  function setValueV1fArray (line 10744) | function setValueV1fArray(gl, v) {
  function setValueV2fArray (line 10747) | function setValueV2fArray(gl, v) {
  function setValueV3fArray (line 10751) | function setValueV3fArray(gl, v) {
  function setValueV4fArray (line 10755) | function setValueV4fArray(gl, v) {
  function setValueM2Array (line 10759) | function setValueM2Array(gl, v) {
  function setValueM3Array (line 10763) | function setValueM3Array(gl, v) {
  function setValueM4Array (line 10767) | function setValueM4Array(gl, v) {
  function setValueV1iArray (line 10771) | function setValueV1iArray(gl, v) {
  function setValueV2iArray (line 10774) | function setValueV2iArray(gl, v) {
  function setValueV3iArray (line 10777) | function setValueV3iArray(gl, v) {
  function setValueV4iArray (line 10780) | function setValueV4iArray(gl, v) {
  function setValueV1uiArray (line 10783) | function setValueV1uiArray(gl, v) {
  function setValueV2uiArray (line 10786) | function setValueV2uiArray(gl, v) {
  function setValueV3uiArray (line 10789) | function setValueV3uiArray(gl, v) {
  function setValueV4uiArray (line 10792) | function setValueV4uiArray(gl, v) {
  function setValueT1Array (line 10795) | function setValueT1Array(gl, v, textures) {
  function setValueT3DArray (line 10807) | function setValueT3DArray(gl, v, textures) {
  function setValueT6Array (line 10819) | function setValueT6Array(gl, v, textures) {
  function setValueT2DArrayArray (line 10831) | function setValueT2DArrayArray(gl, v, textures) {
  function getPureArraySetter (line 10843) | function getPureArraySetter(type) {
  method constructor (line 10902) | constructor(id, activeInfo, addr) {
  method constructor (line 10910) | constructor(id, activeInfo, addr) {
  method constructor (line 10919) | constructor(id) {
  method setValue (line 10924) | setValue(gl, value, textures) {
  function addUniform (line 10933) | function addUniform(container, uniformObject) {
  function parseUniform (line 10937) | function parseUniform(activeInfo, addr, container) {
  method constructor (line 10961) | constructor(gl, program) {
  method setValue (line 10970) | setValue(gl, name, value, textures) {
  method setOptional (line 10975) | setOptional(gl, object, name) {
  method upload (line 10980) | static upload(gl, seq, values, textures) {
  method seqWithValue (line 10988) | static seqWithValue(seq, values) {
  function WebGLShader (line 10998) | function WebGLShader(gl, type, string) {
  function handleSource (line 11005) | function handleSource(string, errorLine) {
  function getEncodingComponents (line 11016) | function getEncodingComponents(encoding) {
  function getShaderErrors (line 11027) | function getShaderErrors(gl, shader, type) {
  function getTexelEncodingFunction (line 11040) | function getTexelEncodingFunction(functionName, encoding) {
  function getToneMappingFunction (line 11044) | function getToneMappingFunction(functionName, toneMapping) {
  function generateExtensions (line 11068) | function generateExtensions(parameters) {
  function generateDefines (line 11077) | function generateDefines(defines) {
  function fetchAttributeLocations (line 11087) | function fetchAttributeLocations(gl, program) {
  function filterEmptyLine (line 11108) | function filterEmptyLine(string) {
  function replaceLightNums (line 11111) | function replaceLightNums(string, parameters) {
  function replaceClippingPlaneNums (line 11115) | function replaceClippingPlaneNums(string, parameters) {
  function resolveIncludes (line 11119) | function resolveIncludes(string) {
  function includeReplacer (line 11122) | function includeReplacer(match, include) {
  function unrollLoops (line 11130) | function unrollLoops(string) {
  function loopReplacer (line 11133) | function loopReplacer(match, start, end, snippet) {
  function generatePrecision (line 11140) | function generatePrecision(parameters) {
  function generateShadowMapTypeDefine (line 11151) | function generateShadowMapTypeDefine(parameters) {
  function generateEnvMapTypeDefine (line 11162) | function generateEnvMapTypeDefine(parameters) {
  function generateEnvMapModeDefine (line 11177) | function generateEnvMapModeDefine(parameters) {
  function generateEnvMapBlendingDefine (line 11188) | function generateEnvMapBlendingDefine(parameters) {
  function generateCubeUVSize (line 11205) | function generateCubeUVSize(parameters) {
  function WebGLProgram (line 11214) | function WebGLProgram(renderer, cacheKey, parameters, bindingStates) {
  method constructor (line 11531) | constructor() {
  method update (line 11535) | update(material) {
  method remove (line 11551) | remove(material) {
  method getVertexShaderID (line 11561) | getVertexShaderID(material) {
  method getFragmentShaderID (line 11564) | getFragmentShaderID(material) {
  method dispose (line 11567) | dispose() {
  method _getShaderCacheForMaterial (line 11571) | _getShaderCacheForMaterial(material) {
  method _getShaderStage (line 11580) | _getShaderStage(code) {
  method constructor (line 11591) | constructor(code) {
  function WebGLPrograms (line 11597) | function WebGLPrograms(renderer, cubemaps, cubeuvmaps, extensions, capab...
  function WebGLProperties (line 11989) | function WebGLProperties() {
  function painterSortStable (line 12015) | function painterSortStable(a, b) {
  function reversePainterSortStable (line 12028) | function reversePainterSortStable(a, b) {
  function WebGLRenderList (line 12039) | function WebGLRenderList() {
  function WebGLRenderLists (line 12129) | function WebGLRenderLists() {
  function UniformsCache (line 12155) | function UniformsCache() {
  function ShadowUniformsCache (line 12210) | function ShadowUniformsCache() {
  function shadowCastingAndTexturingLightsFirst (line 12252) | function shadowCastingAndTexturingLightsFirst(lightA, lightB) {
  function WebGLLights (line 12255) | function WebGLLights(extensions, capabilities) {
  function WebGLRenderState (line 12515) | function WebGLRenderState(extensions, capabilities) {
  function WebGLRenderStates (line 12549) | function WebGLRenderStates(extensions, capabilities) {
  method constructor (line 12576) | constructor(parameters) {
  method copy (line 12590) | copy(source) {
  method constructor (line 12604) | constructor(parameters) {
  method copy (line 12618) | copy(source) {
  function WebGLShadowMap (line 12633) | function WebGLShadowMap(_renderer, _objects, _capabilities) {
  function WebGLState (line 12836) | function WebGLState(gl, extensions, capabilities) {
  function WebGLTextures (line 13567) | function WebGLTextures(_gl, extensions, state, properties, capabilities,...
  function WebGLUtils (line 14611) | function WebGLUtils(gl, extensions, capabilities) {
  method constructor (line 14801) | constructor(array = []) {
  method constructor (line 14808) | constructor() {
  method constructor (line 14816) | constructor() {
  method getHandSpace (line 14821) | getHandSpace() {
  method getTargetRaySpace (line 14831) | getTargetRaySpace() {
  method getGripSpace (line 14843) | getGripSpace() {
  method dispatchEvent (line 14855) | dispatchEvent(event) {
  method disconnect (line 14867) | disconnect(inputSource) {
  method update (line 14880) | update(inputSource, frame, referenceSpace) {
  method constructor (line 14985) | constructor(width, height, type, mapping, wrapS, wrapT, magFilter, minFi...
  method constructor (line 15004) | constructor(renderer, gl) {
  function WebGLMaterials (line 15400) | function WebGLMaterials(renderer, properties) {
  function WebGLUniformsGroups (line 15741) | function WebGLUniformsGroups(gl, info, capabilities, state) {
  function createCanvasElement (line 15932) | function createCanvasElement() {
  function WebGLRenderer (line 15937) | function WebGLRenderer(parameters = {}) {
  method constructor (line 17133) | constructor() {
  method copy (line 17146) | copy(source, recursive) {
  method toJSON (line 17160) | toJSON(meta) {
  method autoUpdate (line 17169) | get autoUpdate() {
  method autoUpdate (line 17173) | set autoUpdate(value) {
  method constructor (line 17179) | constructor(array, stride) {
  method onUploadCallback (line 17189) | onUploadCallback() {
  method needsUpdate (line 17191) | set needsUpdate(value) {
  method setUsage (line 17195) | setUsage(value) {
  method copy (line 17199) | copy(source) {
  method copyAt (line 17206) | copyAt(index1, attribute, index2) {
  method set (line 17214) | set(value, offset = 0) {
  method clone (line 17218) | clone(data) {
  method onUpload (line 17233) | onUpload(callback) {
  method toJSON (line 17237) | toJSON(data) {
  method constructor (line 17257) | constructor(interleavedBuffer, itemSize, offset, normalized = false) {
  method count (line 17265) | get count() {
  method array (line 17268) | get array() {
  method needsUpdate (line 17271) | set needsUpdate(value) {
  method applyMatrix4 (line 17274) | applyMatrix4(m) {
  method applyNormalMatrix (line 17282) | applyNormalMatrix(m) {
  method transformDirection (line 17290) | transformDirection(m) {
  method setX (line 17298) | setX(index, x2) {
  method setY (line 17304) | setY(index, y) {
  method setZ (line 17310) | setZ(index, z) {
  method setW (line 17316) | setW(index, w) {
  method getX (line 17322) | getX(index) {
  method getY (line 17328) | getY(index) {
  method getZ (line 17334) | getZ(index) {
  method getW (line 17340) | getW(index) {
  method setXY (line 17346) | setXY(index, x2, y) {
  method setXYZ (line 17356) | setXYZ(index, x2, y, z) {
  method setXYZW (line 17368) | setXYZW(index, x2, y, z, w) {
  method clone (line 17382) | clone(data) {
  method toJSON (line 17403) | toJSON(data) {
  method constructor (line 17456) | constructor(geometry, material) {
  method copy (line 17464) | copy(source, recursive) {
  method bind (line 17472) | bind(skeleton, bindMatrix) {
  method pose (line 17482) | pose() {
  method normalizeSkinWeights (line 17485) | normalizeSkinWeights() {
  method updateMatrixWorld (line 17499) | updateMatrixWorld(force) {
  method boneTransform (line 17509) | boneTransform(index, target2) {
  method constructor (line 17528) | constructor() {
  method constructor (line 17535) | constructor(data = null, width = 1, height = 1, format, type, mapping, w...
  method constructor (line 17547) | constructor(bones = [], boneInverses = []) {
  method init (line 17557) | init() {
  method calculateInverses (line 17573) | calculateInverses() {
  method pose (line 17583) | pose() {
  method update (line 17603) | update() {
  method clone (line 17617) | clone() {
  method computeBoneTexture (line 17620) | computeBoneTexture() {
  method getBoneByName (line 17633) | getBoneByName(name) {
  method dispose (line 17642) | dispose() {
  method fromJSON (line 17648) | fromJSON(json, bones) {
  method toJSON (line 17663) | toJSON() {
  method constructor (line 17686) | constructor(array, itemSize, normalized, meshPerAttribute = 1) {
  method copy (line 17691) | copy(source) {
  method toJSON (line 17696) | toJSON() {
  method constructor (line 17709) | constructor(geometry, material, count) {
  method copy (line 17720) | copy(source, recursive) {
  method getColorAt (line 17728) | getColorAt(index, color) {
  method getMatrixAt (line 17731) | getMatrixAt(index, matrix) {
  method raycast (line 17734) | raycast(raycaster2, intersects2) {
  method setColorAt (line 17755) | setColorAt(index, color) {
  method setMatrixAt (line 17761) | setMatrixAt(index, matrix) {
  method updateMorphTargets (line 17764) | updateMorphTargets() {
  method dispose (line 17766) | dispose() {
  method constructor (line 17771) | constructor(parameters) {
  method copy (line 17782) | copy(source) {
  method constructor (line 17798) | constructor(geometry = new BufferGeometry(), material = new LineBasicMat...
  method copy (line 17806) | copy(source, recursive) {
  method computeLineDistances (line 17812) | computeLineDistances() {
  method raycast (line 17829) | raycast(raycaster2, intersects2) {
  method updateMorphTargets (line 17905) | updateMorphTargets() {
  method constructor (line 17926) | constructor(geometry, material) {
  method computeLineDistances (line 17931) | computeLineDistances() {
  method constructor (line 17950) | constructor(geometry, material) {
  method constructor (line 17957) | constructor(parameters) {
  method copy (line 17969) | copy(source) {
  method constructor (line 17985) | constructor(geometry = new BufferGeometry(), material = new PointsMateri...
  method copy (line 17993) | copy(source, recursive) {
  method raycast (line 17999) | raycast(raycaster2, intersects2) {
  method updateMorphTargets (line 18035) | updateMorphTargets() {
  function testPoint (line 18053) | function testPoint(point, index, localThresholdSq, matrixWorld, raycaste...
  method constructor (line 18073) | constructor(mipmaps, width, height, format, type, mapping, wrapS, wrapT,...
  method constructor (line 18083) | constructor(mipmaps, width, height, depth, format, type) {
  method constructor (line 18091) | constructor() {
  method getPoint (line 18097) | getPoint() {
  method getPointAt (line 18103) | getPointAt(u, optionalTarget) {
  method getPoints (line 18108) | getPoints(divisions = 5) {
  method getSpacedPoints (line 18116) | getSpacedPoints(divisions = 5) {
  method getLength (line 18124) | getLength() {
  method getLengths (line 18129) | getLengths(divisions = this.arcLengthDivisions) {
  method updateArcLengths (line 18147) | updateArcLengths() {
  method getUtoTmapping (line 18152) | getUtoTmapping(u, distance) {
  method getTangent (line 18190) | getTangent(t2, optionalTarget) {
  method getTangentAt (line 18204) | getTangentAt(u, optionalTarget) {
  method computeFrenetFrames (line 18208) | computeFrenetFrames(segments, closed) {
  method clone (line 18267) | clone() {
  method copy (line 18270) | copy(source) {
  method toJSON (line 18274) | toJSON() {
  method fromJSON (line 18286) | fromJSON(json) {
  method constructor (line 18292) | constructor(aX = 0, aY = 0, xRadius = 1, yRadius = 1, aStartAngle = 0, a...
  method getPoint (line 18305) | getPoint(t2, optionalTarget) {
  method copy (line 18341) | copy(source) {
  method toJSON (line 18353) | toJSON() {
  method fromJSON (line 18365) | fromJSON(json) {
  method constructor (line 18379) | constructor(aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise) {
  function CubicPoly (line 18385) | function CubicPoly() {
  method constructor (line 18416) | constructor(points = [], closed = false, curveType = "centripetal", tens...
  method getPoint (line 18425) | getPoint(t2, optionalTarget = new Vector3()) {
  method copy (line 18479) | copy(source) {
  method toJSON (line 18491) | toJSON() {
  method fromJSON (line 18503) | fromJSON(json) {
  function CatmullRom (line 18516) | function CatmullRom(t2, p0, p1, p2, p3) {
  function QuadraticBezierP0 (line 18523) | function QuadraticBezierP0(t2, p2) {
  function QuadraticBezierP1 (line 18527) | function QuadraticBezierP1(t2, p2) {
  function QuadraticBezierP2 (line 18530) | function QuadraticBezierP2(t2, p2) {
  function QuadraticBezier (line 18533) | function QuadraticBezier(t2, p0, p1, p2) {
  function CubicBezierP0 (line 18536) | function CubicBezierP0(t2, p2) {
  function CubicBezierP1 (line 18540) | function CubicBezierP1(t2, p2) {
  function CubicBezierP2 (line 18544) | function CubicBezierP2(t2, p2) {
  function CubicBezierP3 (line 18547) | function CubicBezierP3(t2, p2) {
  function CubicBezier (line 18550) | function CubicBezier(t2, p0, p1, p2, p3) {
  method constructor (line 18554) | constructor(v0 = new Vector2(), v1 = new Vector2(), v2 = new Vector2(), ...
  method getPoint (line 18563) | getPoint(t2, optionalTarget = new Vector2()) {
  method copy (line 18572) | copy(source) {
  method toJSON (line 18580) | toJSON() {
  method fromJSON (line 18588) | fromJSON(json) {
  method constructor (line 18598) | constructor(v0 = new Vector3(), v1 = new Vector3(), v2 = new Vector3(), ...
  method getPoint (line 18607) | getPoint(t2, optionalTarget = new Vector3()) {
  method copy (line 18617) | copy(source) {
  method toJSON (line 18625) | toJSON() {
  method fromJSON (line 18633) | fromJSON(json) {
  method constructor (line 18643) | constructor(v1 = new Vector2(), v2 = new Vector2()) {
  method getPoint (line 18650) | getPoint(t2, optionalTarget = new Vector2()) {
  method getPointAt (line 18661) | getPointAt(u, optionalTarget) {
  method getTangent (line 18664) | getTangent(t2, optionalTarget) {
  method copy (line 18669) | copy(source) {
  method toJSON (line 18675) | toJSON() {
  method fromJSON (line 18681) | fromJSON(json) {
  method constructor (line 18689) | constructor(v1 = new Vector3(), v2 = new Vector3()) {
  method getPoint (line 18696) | getPoint(t2, optionalTarget = new Vector3()) {
  method getPointAt (line 18707) | getPointAt(u, optionalTarget) {
  method copy (line 18710) | copy(source) {
  method toJSON (line 18716) | toJSON() {
  method fromJSON (line 18722) | fromJSON(json) {
  method constructor (line 18730) | constructor(v0 = new Vector2(), v1 = new Vector2(), v2 = new Vector2()) {
  method getPoint (line 18738) | getPoint(t2, optionalTarget = new Vector2()) {
  method copy (line 18747) | copy(source) {
  method toJSON (line 18754) | toJSON() {
  method fromJSON (line 18761) | fromJSON(json) {
  method constructor (line 18770) | constructor(v0 = new Vector3(), v1 = new Vector3(), v2 = new Vector3()) {
  method getPoint (line 18778) | getPoint(t2, optionalTarget = new Vector3()) {
  method copy (line 18788) | copy(source) {
  method toJSON (line 18795) | toJSON() {
  method fromJSON (line 18802) | fromJSON(json) {
  method constructor (line 18811) | constructor(points = []) {
  method getPoint (line 18817) | getPoint(t2, optionalTarget = new Vector2()) {
  method copy (line 18833) | copy(source) {
  method toJSON (line 18842) | toJSON() {
  method fromJSON (line 18851) | fromJSON(json) {
  method constructor (line 18875) | constructor() {
  method add (line 18881) | add(curve) {
  method closePath (line 18884) | closePath() {
  method getPoint (line 18898) | getPoint(t2, optionalTarget) {
  method getLength (line 18917) | getLength() {
  method updateArcLengths (line 18922) | updateArcLengths() {
  method getCurveLengths (line 18929) | getCurveLengths() {
  method getSpacedPoints (line 18942) | getSpacedPoints(divisions = 40) {
  method getPoints (line 18952) | getPoints(divisions = 12) {
  method copy (line 18972) | copy(source) {
  method toJSON (line 18982) | toJSON() {
  method fromJSON (line 18992) | fromJSON(json) {
  method constructor (line 19004) | constructor(points) {
  method setFromPoints (line 19012) | setFromPoints(points) {
  method moveTo (line 19019) | moveTo(x2, y) {
  method lineTo (line 19023) | lineTo(x2, y) {
  method quadraticCurveTo (line 19029) | quadraticCurveTo(aCPx, aCPy, aX, aY) {
  method bezierCurveTo (line 19039) | bezierCurveTo(aCP1x, aCP1y, aCP2x, aCP2y, aX, aY) {
  method splineThru (line 19050) | splineThru(pts) {
  method arc (line 19057) | arc(aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise) {
  method absarc (line 19070) | absarc(aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise) {
  method ellipse (line 19074) | ellipse(aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aR...
  method absellipse (line 19080) | absellipse(aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise,...
  method copy (line 19093) | copy(source) {
  method toJSON (line 19098) | toJSON() {
  method fromJSON (line 19103) | fromJSON(json) {
  method constructor (line 19110) | constructor(points = [new Vector2(0, -0.5), new Vector2(0.5, 0), new Vec...
  method fromJSON (line 19198) | static fromJSON(data) {
  method constructor (line 19203) | constructor(radius = 1, length = 1, capSegments = 4, radialSegments = 8) {
  method fromJSON (line 19216) | static fromJSON(data) {
  method constructor (line 19221) | constructor(radius = 1, segments = 8, thetaStart = 0, thetaLength = Math...
  method fromJSON (line 19258) | static fromJSON(data) {
  method constructor (line 19263) | constructor(radiusTop = 1, radiusBottom = 1, height = 1, radialSegments ...
  method fromJSON (line 19380) | static fromJSON(data) {
  method constructor (line 19385) | constructor(radius = 1, height = 1, radialSegments = 8, heightSegments =...
  method fromJSON (line 19398) | static fromJSON(data) {
  method constructor (line 19403) | constructor(vertices = [], indices = [], radius = 1, detail = 0) {
  method fromJSON (line 19555) | static fromJSON(data) {
  method constructor (line 19560) | constructor(radius = 1, detail = 0) {
  method fromJSON (line 19746) | static fromJSON(data) {
  method constructor (line 19755) | constructor(geometry = null, thresholdAngle = 1) {
  method constructor (line 19832) | constructor(points) {
  method getPointsHoles (line 19838) | getPointsHoles(divisions) {
  method extractPoints (line 19846) | extractPoints(divisions) {
  method copy (line 19852) | copy(source) {
  method toJSON (line 19861) | toJSON() {
  method fromJSON (line 19871) | fromJSON(json) {
  function linkedList (line 19915) | function linkedList(data, start, end, dim, clockwise) {
  function filterPoints (line 19930) | function filterPoints(start, end) {
  function earcutLinked (line 19950) | function earcutLinked(ear, triangles, dim, minX, minY, invSize, pass) {
  function isEar (line 19982) | function isEar(ear) {
  function isEarHashed (line 19996) | function isEarHashed(ear, minX, minY, invSize) {
  function cureLocalIntersections (line 20024) | function cureLocalIntersections(start, triangles, dim) {
  function splitEarcut (line 20040) | function splitEarcut(start, triangles, dim, minX, minY, invSize) {
  function eliminateHoles (line 20058) | function eliminateHoles(data, holeIndices, outerNode, dim) {
  function compareX (line 20075) | function compareX(a, b) {
  function eliminateHole (line 20078) | function eliminateHole(hole, outerNode) {
  function findHoleBridge (line 20087) | function findHoleBridge(hole, outerNode) {
  function sectorContainsSector (line 20119) | function sectorContainsSector(m, p2) {
  function indexCurve (line 20122) | function indexCurve(start, minX, minY, invSize) {
  function sortLinked (line 20135) | function sortLinked(list) {
  function zOrder (line 20177) | function zOrder(x2, y, minX, minY, invSize) {
  function getLeftmost (line 20190) | function getLeftmost(start) {
  function pointInTriangle (line 20199) | function pointInTriangle(ax, ay, bx, by, cx, cy, px2, py2) {
  function isValidDiagonal (line 20202) | function isValidDiagonal(a, b) {
  function area (line 20208) | function area(p2, q, r) {
  function equals (line 20211) | function equals(p1, p2) {
  function intersects (line 20214) | function intersects(p1, q1, p2, q2) {
  function onSegment (line 20231) | function onSegment(p2, q, r) {
  function sign (line 20234) | function sign(num) {
  function intersectsPolygon (line 20237) | function intersectsPolygon(a, b) {
  function locallyInside (line 20246) | function locallyInside(a, b) {
  function middleInside (line 20249) | function middleInside(a, b) {
  function splitPolygon (line 20259) | function splitPolygon(a, b) {
  function insertNode (line 20271) | function insertNode(i, x2, y, last) {
  function removeNode (line 20284) | function removeNode(p2) {
  function Node2 (line 20292) | function Node2(i, x2, y) {
  function signedArea (line 20303) | function signedArea(data, start, end, dim) {
  method area (line 20313) | static area(contour) {
  method isClockWise (line 20321) | static isClockWise(pts) {
  method triangulateShape (line 20324) | static triangulateShape(contour, holes) {
  function removeDupEndPts (line 20344) | function removeDupEndPts(points) {
  function addContour (line 20350) | function addContour(vertices, contour) {
  method constructor (line 20357) | constructor(shapes = new Shape([new Vector2(0.5, 0.5), new Vector2(-0.5,...
  method toJSON (line 20664) | toJSON() {
  method fromJSON (line 20670) | static fromJSON(data, shapes) {
  function toJSON$1 (line 20727) | function toJSON$1(shapes, options, data) {
  method constructor (line 20743) | constructor(radius = 1, detail = 0) {
  method fromJSON (line 20852) | static fromJSON(data) {
  method constructor (line 20857) | constructor(radius = 1, detail = 0) {
  method fromJSON (line 20911) | static fromJSON(data) {
  method constructor (line 20916) | constructor(innerRadius = 0.5, outerRadius = 1, thetaSegments = 8, phiSe...
  method fromJSON (line 20967) | static fromJSON(data) {
  method constructor (line 20972) | constructor(shapes = new Shape([new Vector2(0, 0.5), new Vector2(-0.5, -...
  method toJSON (line 21034) | toJSON() {
  method fromJSON (line 21039) | static fromJSON(data, shapes) {
  function toJSON (line 21048) | function toJSON(shapes, data) {
  method constructor (line 21061) | constructor(radius = 1, widthSegments = 32, heightSegments = 16, phiStar...
  method fromJSON (line 21123) | static fromJSON(data) {
  method constructor (line 21128) | constructor(radius = 1, detail = 0) {
  method fromJSON (line 21164) | static fromJSON(data) {
  method constructor (line 21169) | constructor(radius = 1, tube = 0.4, radialSegments = 8, tubularSegments ...
  method fromJSON (line 21219) | static fromJSON(data) {
  method constructor (line 21224) | constructor(radius = 1, tube = 0.4, tubularSegments = 64, radialSegments...
  method fromJSON (line 21296) | static fromJSON(data) {
  method constructor (line 21301) | constructor(path = new QuadraticBezierCurve3(new Vector3(-1, -1, 0), new...
  method toJSON (line 21377) | toJSON() {
  method fromJSON (line 21382) | static fromJSON(data) {
  method constructor (line 21393) | constructor(geometry = null) {
  function isUniqueEdge (line 21447) | function isUniqueEdge(start, end, edges) {
  method constructor (line 21483) | constructor(parameters) {
  method copy (line 21520) | copy(source) {
  method constructor (line 21557) | constructor(parameters) {
  method sheen (line 21602) | get sheen() {
  method sheen (line 21605) | set sheen(value) {
  method clearcoat (line 21611) | get clearcoat() {
  method clearcoat (line 21614) | set clearcoat(value) {
  method iridescence (line 21620) | get iridescence() {
  method iridescence (line 21623) | set iridescence(value) {
  method transmission (line 21629) | get transmission() {
  method transmission (line 21632) | set transmission(value) {
  method copy (line 21638) | copy(source) {
  function arraySlice (line 21674) | function arraySlice(array, from, to) {
  function convertArray (line 21680) | function convertArray(array, type, forceClone) {
  function isTypedArray (line 21689) | function isTypedArray(object) {
  function getKeyframeOrder (line 21692) | function getKeyframeOrder(times) {
  function sortedArray (line 21703) | function sortedArray(values, stride, order) {
  function flattenJSON (line 21714) | function flattenJSON(jsonKeys, times, values, valuePropertyName) {
  function subclip (line 21753) | function subclip(sourceClip, name, startFrame, endFrame, fps = 30) {
  function makeClipAdditive (line 21790) | function makeClipAdditive(targetClip, referenceFrame = 0, referenceClip ...
  method constructor (line 21871) | constructor(parameterPositions, sampleValues, sampleSize, resultBuffer) {
  method evaluate (line 21880) | evaluate(t2) {
  method getSettings_ (line 21958) | getSettings_() {
  method copySampleValue_ (line 21961) | copySampleValue_(index) {
  method interpolate_ (line 21969) | interpolate_() {
  method intervalChanged_ (line 21972) | intervalChanged_() {
  method constructor (line 21976) | constructor(parameterPositions, sampleValues, sampleSize, resultBuffer) {
  method intervalChanged_ (line 21987) | intervalChanged_(i1, t0, t1) {
  method interpolate_ (line 22026) | interpolate_(i1, t0, t2, t1) {
  method constructor (line 22039) | constructor(parameterPositions, sampleValues, sampleSize, resultBuffer) {
  method interpolate_ (line 22042) | interpolate_(i1, t0, t2, t1) {
  method constructor (line 22051) | constructor(parameterPositions, sampleValues, sampleSize, resultBuffer) {
  method interpolate_ (line 22054) | interpolate_(i1) {
  method constructor (line 22059) | constructor(name, times, values, interpolation) {
  method toJSON (line 22071) | static toJSON(track) {
  method InterpolantFactoryMethodDiscrete (line 22090) | InterpolantFactoryMethodDiscrete(result) {
  method InterpolantFactoryMethodLinear (line 22093) | InterpolantFactoryMethodLinear(result) {
  method InterpolantFactoryMethodSmooth (line 22096) | InterpolantFactoryMethodSmooth(result) {
  method setInterpolation (line 22099) | setInterpolation(interpolation) {
  method getInterpolation (line 22127) | getInterpolation() {
  method getValueSize (line 22137) | getValueSize() {
  method shift (line 22141) | shift(timeOffset) {
  method scale (line 22151) | scale(timeScale) {
  method trim (line 22162) | trim(startTime, endTime) {
  method validate (line 22184) | validate() {
  method optimize (line 22227) | optimize() {
  method clone (line 22275) | clone() {
  method constructor (line 22301) | constructor(parameterPositions, sampleValues, sampleSize, resultBuffer) {
  method interpolate_ (line 22304) | interpolate_(i1, t0, t2, t1) {
  method InterpolantFactoryMethodLinear (line 22314) | InterpolantFactoryMethodLinear(result) {
  method constructor (line 22332) | constructor(name, duration = -1, tracks, blendMode = NormalAnimationBlen...
  method parse (line 22342) | static parse(json) {
  method toJSON (line 22351) | static toJSON(clip) {
  method CreateFromMorphTargetSequence (line 22365) | static CreateFromMorphTargetSequence(name, morphTargetSequence, fps, noL...
  method findByName (line 22394) | static findByName(objectOrClipArray, name) {
  method CreateClipsFromMorphTargetSequences (line 22407) | static CreateClipsFromMorphTargetSequences(morphTargets, fps, noLoop) {
  method parseAnimation (line 22429) | static parseAnimation(animation, bones) {
  method resetDuration (line 22506) | resetDuration() {
  method trim (line 22516) | trim() {
  method validate (line 22522) | validate() {
  method optimize (line 22529) | optimize() {
  method clone (line 22535) | clone() {
  method toJSON (line 22542) | toJSON() {
  function getTrackTypeForValueTypeName (line 22546) | function getTrackTypeForValueTypeName(typeName) {
  function parseKeyframeTrack (line 22571) | function parseKeyframeTrack(json) {
  method constructor (line 22609) | constructor(onLoad, onProgress, onError) {
  method constructor (line 22683) | constructor(manager) {
  method load (line 22691) | load() {
  method loadAsync (line 22693) | loadAsync(url, onProgress) {
  method parse (line 22699) | parse() {
  method setCrossOrigin (line 22701) | setCrossOrigin(crossOrigin) {
  method setWithCredentials (line 22705) | setWithCredentials(value) {
  method setPath (line 22709) | setPath(path) {
  method setResourcePath (line 22713) | setResourcePath(resourcePath) {
  method setRequestHeader (line 22717) | setRequestHeader(requestHeader) {
  method constructor (line 22724) | constructor(message, response) {
  method constructor (line 22730) | constructor(manager) {
  method load (line 22733) | load(url, onLoad, onProgress, onError) {
  method setResponseType (line 22861) | setResponseType(value) {
  method setMimeType (line 22865) | setMimeType(value) {
  method constructor (line 22871) | constructor(manager) {
  method load (line 22874) | load(url, onLoad, onProgress, onError) {
  method constructor (line 22920) | constructor(manager) {
  method load (line 22923) | load(url, onLoad, onProgress, onError) {
  method constructor (line 22977) | constructor(manager) {
  method load (line 22980) | load(url, onLoad, onProgress, onError) {
  method constructor (line 22996) | constructor(color, intensity = 1) {
  method dispose (line 23003) | dispose() {
  method copy (line 23005) | copy(source, recursive) {
  method toJSON (line 23011) | toJSON(meta) {
  method constructor (line 23034) | constructor(camera2) {
  method getViewportCount (line 23053) | getViewportCount() {
  method getFrustum (line 23056) | getFrustum() {
  method updateMatrices (line 23059) | updateMatrices(light) {
  method getViewport (line 23089) | getViewport(viewportIndex) {
  method getFrameExtents (line 23092) | getFrameExtents() {
  method dispose (line 23095) | dispose() {
  method copy (line 23103) | copy(source) {
  method clone (line 23110) | clone() {
  method toJSON (line 23113) | toJSON() {
  method constructor (line 23129) | constructor() {
  method updateMatrices (line 23134) | updateMatrices(light) {
  method copy (line 23147) | copy(source) {
  method constructor (line 23154) | constructor(color, intensity, distance = 0, angle = Math.PI / 3, penumbr...
  method power (line 23168) | get power() {
  method power (line 23171) | set power(power) {
  method dispose (line 23174) | dispose() {
  method copy (line 23177) | copy(source, recursive) {
  method constructor (line 23192) | constructor() {
  method updateMatrices (line 23240) | updateMatrices(light, viewportIndex = 0) {
  method constructor (line 23261) | constructor(color, intensity, distance = 0, decay = 1) {
  method power (line 23269) | get power() {
  method power (line 23272) | set power(power) {
  method dispose (line 23275) | dispose() {
  method copy (line 23278) | copy(source, recursive) {
  method constructor (line 23287) | constructor() {
  method constructor (line 23293) | constructor(color, intensity) {
  method dispose (line 23302) | dispose() {
  method copy (line 23305) | copy(source) {
  method constructor (line 23313) | constructor() {
  method set (line 23320) | set(coefficients) {
  method zero (line 23326) | zero() {
  method getAt (line 23334) | getAt(normal, target2) {
  method getIrradianceAt (line 23351) | getIrradianceAt(normal, target2) {
  method add (line 23365) | add(sh) {
  method addScaledSH (line 23371) | addScaledSH(sh, s) {
  method scale (line 23377) | scale(s) {
  method lerp (line 23383) | lerp(sh, alpha) {
  method equals (line 23389) | equals(sh) {
  method copy (line 23397) | copy(sh) {
  method clone (line 23400) | clone() {
  method fromArray (line 23403) | fromArray(array, offset = 0) {
  method toArray (line 23410) | toArray(array = [], offset = 0) {
  method getBasisAt (line 23419) | static getBasisAt(normal, shBasis) {
  method constructor (line 23433) | constructor(sh = new SphericalHarmonics3(), intensity = 1) {
  method copy (line 23438) | copy(source) {
  method fromJSON (line 23443) | fromJSON(json) {
  method toJSON (line 23448) | toJSON(meta) {
  method decodeText (line 23455) | static decodeText(array) {
  method extractUrlBase (line 23469) | static extractUrlBase(url) {
  method resolveURL (line 23475) | static resolveURL(url, path) {
  method constructor (line 23491) | constructor(manager) {
  method setOptions (line 23502) | setOptions(options) {
  method load (line 23506) | load(url, onLoad, onProgress, onError) {
  method constructor (line 23556) | constructor(binding, typeName, valueSize) {
  method accumulate (line 23592) | accumulate(accuIndex, weight) {
  method accumulateAdditive (line 23608) | accumulateAdditive(weight) {
  method apply (line 23617) | apply(accuIndex) {
  method saveOriginalState (line 23642) | saveOriginalState() {
  method restoreOriginalState (line 23654) | restoreOriginalState() {
  method _setAdditiveIdentityNumeric (line 23658) | _setAdditiveIdentityNumeric() {
  method _setAdditiveIdentityQuaternion (line 23665) | _setAdditiveIdentityQuaternion() {
  method _setAdditiveIdentityOther (line 23669) | _setAdditiveIdentityOther() {
  method _select (line 23677) | _select(buffer, dstOffset, srcOffset, t2, stride) {
  method _slerp (line 23684) | _slerp(buffer, dstOffset, srcOffset, t2) {
  method _slerpAdditive (line 23687) | _slerpAdditive(buffer, dstOffset, srcOffset, t2, stride) {
  method _lerp (line 23692) | _lerp(buffer, dstOffset, srcOffset, t2, stride) {
  method _lerpAdditive (line 23699) | _lerpAdditive(buffer, dstOffset, srcOffset, t2, stride) {
  method constructor (line 23719) | constructor(targetGroup, path, optionalParsedPath) {
  method getValue (line 23724) | getValue(array, offset) {
  method setValue (line 23730) | setValue(array, offset) {
  method bind (line 23736) | bind() {
  method unbind (line 23742) | unbind() {
  method constructor (line 23750) | constructor(rootNode, path, parsedPath) {
  method create (line 23758) | static create(root, path, parsedPath) {
  method sanitizeNodeName (line 23772) | static sanitizeNodeName(name) {
  method parseTrackName (line 23775) | static parseTrackName(trackName) {
  method findNode (line 23802) | static findNode(root, nodeName) {
  method _getValue_unavailable (line 23833) | _getValue_unavailable() {
  method _setValue_unavailable (line 23835) | _setValue_unavailable() {
  method _getValue_direct (line 23838) | _getValue_direct(buffer, offset) {
  method _getValue_array (line 23841) | _getValue_array(buffer, offset) {
  method _getValue_arrayElement (line 23847) | _getValue_arrayElement(buffer, offset) {
  method _getValue_toArray (line 23850) | _getValue_toArray(buffer, offset) {
  method _setValue_direct (line 23854) | _setValue_direct(buffer, offset) {
  method _setValue_direct_setNeedsUpdate (line 23857) | _setValue_direct_setNeedsUpdate(buffer, offset) {
  method _setValue_direct_setMatrixWorldNeedsUpdate (line 23861) | _setValue_direct_setMatrixWorldNeedsUpdate(buffer, offset) {
  method _setValue_array (line 23866) | _setValue_array(buffer, offset) {
  method _setValue_array_setNeedsUpdate (line 23872) | _setValue_array_setNeedsUpdate(buffer, offset) {
  method _setValue_array_setMatrixWorldNeedsUpdate (line 23879) | _setValue_array_setMatrixWorldNeedsUpdate(buffer, offset) {
  method _setValue_arrayElement (line 23887) | _setValue_arrayElement(buffer, offset) {
  method _setValue_arrayElement_setNeedsUpdate (line 23890) | _setValue_arrayElement_setNeedsUpdate(buffer, offset) {
  method _setValue_arrayElement_setMatrixWorldNeedsUpdate (line 23894) | _setValue_arrayElement_setMatrixWorldNeedsUpdate(buffer, offset) {
  method _setValue_fromArray (line 23899) | _setValue_fromArray(buffer, offset) {
  method _setValue_fromArray_setNeedsUpdate (line 23902) | _setValue_fromArray_setNeedsUpdate(buffer, offset) {
  method _setValue_fromArray_setMatrixWorldNeedsUpdate (line 23906) | _setValue_fromArray_setMatrixWorldNeedsUpdate(buffer, offset) {
  method _getValue_unbound (line 23910) | _getValue_unbound(targetArray, offset) {
  method _setValue_unbound (line 23914) | _setValue_unbound(sourceArray, offset) {
  method bind (line 23919) | bind() {
  method unbind (line 24035) | unbind() {
  method constructor (line 24086) | constructor(mixer, clip, localRoot = null, blendMode = clip.blendMode) {
  method play (line 24124) | play() {
  method stop (line 24128) | stop() {
  method reset (line 24132) | reset() {
  method isRunning (line 24140) | isRunning() {
  method isScheduled (line 24144) | isScheduled() {
  method startAt (line 24147) | startAt(time) {
  method setLoop (line 24151) | setLoop(mode, repetitions) {
  method setEffectiveWeight (line 24160) | setEffectiveWeight(weight) {
  method getEffectiveWeight (line 24166) | getEffectiveWeight() {
  method fadeIn (line 24169) | fadeIn(duration) {
  method fadeOut (line 24172) | fadeOut(duration) {
  method crossFadeFrom (line 24175) | crossFadeFrom(fadeOutAction, duration, warp) {
  method crossFadeTo (line 24185) | crossFadeTo(fadeInAction, duration, warp) {
  method stopFading (line 24188) | stopFading() {
  method setEffectiveTimeScale (line 24200) | setEffectiveTimeScale(timeScale) {
  method getEffectiveTimeScale (line 24206) | getEffectiveTimeScale() {
  method setDuration (line 24209) | setDuration(duration) {
  method syncWith (line 24213) | syncWith(action) {
  method halt (line 24218) | halt(duration) {
  method warp (line 24221) | warp(startTimeScale, endTimeScale, duration) {
  method stopWarping (line 24235) | stopWarping() {
  method getMixer (line 24244) | getMixer() {
  method getClip (line 24247) | getClip() {
  method getRoot (line 24250) | getRoot() {
  method _update (line 24254) | _update(time, deltaTime, timeDirection, accuIndex) {
  method _updateWeight (line 24291) | _updateWeight(time) {
  method _updateTimeScale (line 24310) | _updateTimeScale(time) {
  method _updateTime (line 24331) | _updateTime(deltaTime) {
  method _setEndings (line 24417) | _setEndings(atStart, atEnd, pingPong) {
  method _scheduleFading (line 24435) | _scheduleFading(duration, weightNow, weightThen) {
  method constructor (line 24452) | constructor(root) {
  method _bindAction (line 24460) | _bindAction(action, prototypeAction) {
  method _activateAction (line 24495) | _activateAction(action) {
  method _deactivateAction (line 24516) | _deactivateAction(action) {
  method _initMemoryManager (line 24530) | _initMemoryManager() {
  method _isActiveAction (line 24568) | _isActiveAction(action) {
  method _addInactiveAction (line 24572) | _addInactiveAction(action, clipUuid, rootUuid) {
  method _removeInactiveAction (line 24591) | _removeInactiveAction(action) {
  method _removeInactiveBindingsForAction (line 24609) | _removeInactiveBindingsForAction(action) {
  method _lendAction (line 24618) | _lendAction(action) {
  method _takeBackAction (line 24625) | _takeBackAction(action) {
  method _addInactiveBinding (line 24633) | _addInactiveBinding(binding, rootUuid, trackName) {
  method _removeInactiveBinding (line 24644) | _removeInactiveBinding(binding) {
  method _lendBinding (line 24654) | _lendBinding(binding) {
  method _takeBackBinding (line 24661) | _takeBackBinding(binding) {
  method _lendControlInterpolant (line 24669) | _lendControlInterpolant() {
  method _takeBackControlInterpolant (line 24684) | _takeBackControlInterpolant(interpolant) {
  method clipAction (line 24694) | clipAction(clip, optionalRoot, blendMode) {
  method existingAction (line 24724) | existingAction(clip, optionalRoot) {
  method stopAllAction (line 24732) | stopAllAction() {
  method update (line 24740) | update(deltaTime) {
  method setTime (line 24754) | setTime(timeInSeconds) {
  method getRoot (line 24762) | getRoot() {
  method uncacheClip (line 24766) | uncacheClip(clip) {
  method uncacheRoot (line 24785) | uncacheRoot(root) {
  method uncacheAction (line 24804) | uncacheAction(clip, optionalRoot) {
  method constructor (line 24813) | constructor(origin, direction, near = 0, far = Infinity) {
  method set (line 24827) | set(origin, direction) {
  method setFromCamera (line 24830) | setFromCamera(coords, camera2) {
  method intersectObject (line 24843) | intersectObject(object, recursive = true, intersects2 = []) {
  method intersectObjects (line 24848) | intersectObjects(objects, recursive = true, intersects2 = []) {
  function ascSort (line 24856) | function ascSort(a, b) {
  function intersectObject (line 24859) | function intersectObject(object, raycaster2, intersects2, recursive) {
  method constructor (line 24871) | constructor(radius = 1, phi = 0, theta = 0) {
  method set (line 24877) | set(radius, phi, theta) {
  method copy (line 24883) | copy(other) {
  method makeSafe (line 24890) | makeSafe() {
  method setFromVector3 (line 24895) | setFromVector3(v) {
  method setFromCartesianCoords (line 24898) | setFromCartesianCoords(x2, y, z) {
  method clone (line 24909) | clone() {
  function _generateTables (line 24931) | function _generateTables() {
  function toHalfFloat (line 25007) | function toHalfFloat(val) {
  function fromHalfFloat (line 25016) | function fromHalfFloat(val) {
  function handler (line 25151) | function handler(event) {
  class EnvironmentModelViewerElement (line 25181) | class EnvironmentModelViewerElement extends ModelViewerElement2 {
    method constructor (line 25182) | constructor() {
    method updated (line 25193) | updated(changedProperties) {
    method hasBakedShadow (line 25211) | hasBakedShadow() {
    method [(_a12 = $currentEnvironmentMap, _b11 = $currentBackground, _c6 = $cancelEnvironmentUpdate, $updateEnvironment)] (line 25214) | async [(_a12 = $currentEnvironmentMap, _b11 = $currentBackground, _c6 ...
  method constructor (line 25697) | constructor(manager) {
  method setDecoderPath (line 25720) | setDecoderPath(path) {
  method setDecoderConfig (line 25724) | setDecoderConfig(config) {
  method setWorkerLimit (line 25728) | setWorkerLimit(workerLimit) {
  method load (line 25732) | load(url, onLoad, onProgress, onError) {
  method decodeDracoFile (line 25742) | decodeDracoFile(buffer, callback, attributeIDs, attributeTypes) {
  method decodeGeometry (line 25750) | decodeGeometry(buffer, taskConfig) {
  method _createGeometry (line 25783) | _createGeometry(geometryData) {
  method _loadLibrary (line 25797) | _loadLibrary(url, responseType) {
  method preload (line 25806) | preload() {
  method _initDecoder (line 25810) | _initDecoder() {
  method _getWorker (line 25838) | _getWorker(taskID, taskCost) {
  method _releaseTask (line 25871) | _releaseTask(worker, taskID) {
  method debug (line 25876) | debug() {
  method dispose (line 25879) | dispose() {
  function DRACOWorker (line 25887) | function DRACOWorker() {
  method constructor (line 26015) | constructor(manager) {
  method load (line 26061) | load(url, onLoad, onProgress, onError) {
  method setDRACOLoader (line 26097) | setDRACOLoader(dracoLoader2) {
  method setDDSLoader (line 26101) | setDDSLoader() {
  method setKTX2Loader (line 26106) | setKTX2Loader(ktx2Loader2) {
  method setMeshoptDecoder (line 26110) | setMeshoptDecoder(meshoptDecoder2) {
  method register (line 26114) | register(callback) {
  method unregister (line 26120) | unregister(callback) {
  method parse (line 26126) | parse(data, path, onLoad, onError) {
  method parseAsync (line 26199) | parseAsync(data, path) {
  function GLTFRegistry (line 26206) | function GLTFRegistry() {
  method constructor (line 26245) | constructor(parser) {
  method _markDefs (line 26250) | _markDefs() {
  method _loadLight (line 26260) | _loadLight(lightIndex) {
  method createNodeAttachment (line 26308) | createNodeAttachment(nodeIndex) {
  method constructor (line 26323) | constructor() {
  method getMaterialType (line 26326) | getMaterialType() {
  method extendParams (line 26329) | extendParams(materialParams, materialDef, parser) {
  method constructor (line 26348) | constructor(parser) {
  method extendMaterialParams (line 26352) | extendMaterialParams(materialIndex, materialParams) {
  method constructor (line 26366) | constructor(parser) {
  method getMaterialType (line 26370) | getMaterialType(materialIndex) {
  method extendMaterialParams (line 26377) | extendMaterialParams(materialIndex, materialParams) {
  method constructor (line 26408) | constructor(parser) {
  method getMaterialType (line 26412) | getMaterialType(materialIndex) {
  method extendMaterialParams (line 26419) | extendMaterialParams(materialIndex, materialParams) {
  method constructor (line 26452) | constructor(parser) {
  method getMaterialType (line 26456) | getMaterialType(materialIndex) {
  method extendMaterialParams (line 26463) | extendMaterialParams(materialIndex, materialParams) {
  method constructor (line 26490) | constructor(parser) {
  method getMaterialType (line 26494) | getMaterialType(materialIndex) {
  method extendMaterialParams (line 26501) | extendMaterialParams(materialIndex, materialParams) {
  method constructor (line 26519) | constructor(parser) {
  method getMaterialType (line 26523) | getMaterialType(materialIndex) {
  method extendMaterialParams (line 26530) | extendMaterialParams(materialIndex, materialParams) {
  method constructor (line 26549) | constructor(parser) {
  method getMaterialType (line 26553) | getMaterialType(materialIndex) {
  method extendMaterialParams (line 26560) | extendMaterialParams(materialIndex, materialParams) {
  method constructor (line 26572) | constructor(parser) {
  method getMaterialType (line 26576) | getMaterialType(materialIndex) {
  method extendMaterialParams (line 26583) | extendMaterialParams(materialIndex, materialParams) {
  method constructor (line 26604) | constructor(parser) {
  method loadTexture (line 26608) | loadTexture(textureIndex) {
  method constructor (line 26628) | constructor(parser) {
  method loadTexture (line 26633) | loadTexture(textureIndex) {
  method detectSupport (line 26658) | detectSupport() {
  method constructor (line 26672) | constructor(parser) {
  method loadBufferView (line 26676) | loadBufferView(index) {
  method constructor (line 26714) | constructor(parser) {
  method createNodeMesh (line 26718) | createNodeMesh(nodeIndex) {
  method constructor (line 26790) | constructor(data) {
  method constructor (line 26828) | constructor(json, dracoLoader2) {
  method decodePrimitive (line 26837) | decodePrimitive(primitive, parser) {
  method constructor (line 26874) | constructor() {
  method extendTexture (line 26877) | extendTexture(texture, transform) {
  method constructor (line 26899) | constructor(params) {
  method copy (line 27003) | copy(source) {
  method constructor (line 27017) | constructor() {
  method getMaterialType (line 27045) | getMaterialType() {
  method extendParams (line 27048) | extendParams(materialParams, materialDef, parser) {
  method createMaterial (line 27074) | createMaterial(materialParams) {
  method constructor (line 27106) | constructor() {
  method constructor (line 27111) | constructor(parameterPositions, sampleValues, sampleSize, resultBuffer) {
  method copySampleValue_ (line 27114) | copySampleValue_(index) {
  method interpolate_ (line 27121) | interpolate_(i1, t0, t2, t1) {
  method interpolate_ (line 27149) | interpolate_(i1, t0, t2, t1) {
  function createDefaultMaterial (line 27234) | function createDefaultMaterial(cache2) {
  function addUnknownExtensionsToUserData (line 27248) | function addUnknownExtensionsToUserData(knownExtensions, object, objectD...
  function assignExtrasToUserData (line 27256) | function assignExtrasToUserData(object, gltfDef) {
  function addMorphTargets (line 27265) | function addMorphTargets(geometry, targets, parser) {
  function updateMorphTargets (line 27318) | function updateMorphTargets(mesh, meshDef) {
  function createPrimitiveKey (line 27337) | function createPrimitiveKey(primitiveDef) {
  function createAttributesKey (line 27347) | function createAttributesKey(attributes) {
  function getNormalizedComponentScale (line 27355) | function getNormalizedComponentScale(constructor) {
  function getImageURIMimeType (line 27369) | function getImageURIMimeType(uri) {
  method constructor (line 27377) | constructor(json = {}, options = {}) {
  method setExtensions (line 27407) | setExtensions(extensions) {
  method setPlugins (line 27410) | setPlugins(plugins) {
  method parse (line 27413) | parse(onLoad, onError) {
  method _markDefs (line 27451) | _markDefs() {
  method _addNodeRef (line 27483) | _addNodeRef(cache2, index) {
  method _getNodeRef (line 27492) | _getNodeRef(cache2, index, object) {
  method _invokeOne (line 27509) | _invokeOne(func) {
  method _invokeAll (line 27519) | _invokeAll(func) {
  method getDependency (line 27536) | getDependency(type, index) {
  method getDependencies (line 27596) | getDependencies(type) {
  method loadBuffer (line 27613) | loadBuffer(bufferIndex) {
  method loadBufferView (line 27634) | loadBufferView(bufferViewIndex) {
  method loadAccessor (line 27647) | loadAccessor(accessorIndex) {
  method loadTexture (line 27723) | loadTexture(textureIndex) {
  method loadTextureImage (line 27737) | loadTextureImage(textureIndex, sourceIndex, loader) {
  method loadImageSource (line 27763) | loadImageSource(sourceIndex, loader) {
  method assignTexture (line 27816) | assignTexture(materialParams, mapName, mapDef, encoding) {
  method assignFinalMaterial (line 27845) | assignFinalMaterial(mesh) {
  method getMaterialType (line 27907) | getMaterialType() {
  method loadMaterial (line 27915) | loadMaterial(materialIndex) {
  method createUniqueName (line 28007) | createUniqueName(originalName) {
  method loadGeometries (line 28024) | loadGeometries(primitives) {
  method loadMesh (line 28058) | loadMesh(meshIndex) {
  method loadCamera (line 28132) | loadCamera(cameraIndex) {
  method loadSkin (line 28155) | loadSkin(skinIndex) {
  method loadAnimation (line 28171) | loadAnimation(animationIndex) {
  method createNodeMesh (line 28270) | createNodeMesh(nodeIndex) {
  method loadNode (line 28295) | loadNode(nodeIndex) {
  method loadScene (line 28370) | loadScene(sceneIndex) {
  function buildNodeHierarchy (line 28407) | function buildNodeHierarchy(nodeId, parentObject, json, parser) {
  function computeBounds (line 28456) | function computeBounds(geometry, primitiveDef, parser) {
  function addPrimitiveAttributes (line 28512) | function addPrimitiveAttributes(geometry, primitiveDef, parser) {
  function toTrianglesDrawMode (line 28538) | function toTrianglesDrawMode(geometry, drawMode) {
  method constructor (line 28585) | constructor(pool = 4) {
  method _initWorker (line 28592) | _initWorker(workerId) {
  method _getIdleWorker (line 28599) | _getIdleWorker() {
  method _onMessage (line 28605) | _onMessage(workerId, msg) {
  method setWorkerCreator (line 28616) | setWorkerCreator(workerCreator) {
  method setWorkerLimit (line 28619) | setWorkerLimit(pool) {
  method postMessage (line 28622) | postMessage(msg, transfer) {
  method dispose (line 28635) | dispose() {
  method constructor (line 28663) | constructor() {
  method constructor (line 28668) | constructor(t2, e, n2, i) {
  method _nextUint8 (line 28671) | _nextUint8() {
  method _nextUint16 (line 28675) | _nextUint16() {
  method _nextUint32 (line 28679) | _nextUint32() {
  method _nextUint64 (line 28683) | _nextUint64() {
  method _nextInt32 (line 28687) | _nextInt32() {
  method _skip (line 28691) | _skip(t2) {
  method _scan (line 28694) | _scan(t2, e = 0) {
  function Ei (line 28704) | function Ei(t2) {
  function Pi (line 28707) | function Pi(t2) {
  method init (line 28746) | init() {
  method _init (line 28749) | _init(A2) {
  method decode (line 28752) | decode(A2, g2 = 0) {
  method constructor (line 28768) | constructor(manager) {
  method setTranscoderPath (line 28782) | setTranscoderPath(path) {
  method setWorkerLimit (line 28786) | setWorkerLimit(num) {
  method detectSupport (line 28790) | detectSupport(renderer) {
  method init (line 28804) | init() {
  method load (line 28845) | load(url, onLoad, onProgress, onError) {
  method _createTextureFrom (line 28860) | _createTextureFrom(transcodeResult, container) {
  method _createTexture (line 28878) | async _createTexture(buffer, config = {}) {
  method dispose (line 28890) | dispose() {
  function init (line 28964) | function init(wasmBinary) {
  function transcode (line 28975) | function transcode(buffer) {
  function getTranscoderFormat (line 29094) | function getTranscoderFormat(basisFormat, width, height, hasAlpha) {
  function isPowerOfTwo2 (line 29117) | function isPowerOfTwo2(value) {
  function concat (line 29122) | function concat(arrays) {
  function createDataTexture (line 29169) | async function createDataTexture(container) {
  method constructor (line 29223) | constructor(cache2, evictionThreshold = 5) {
  method evictionThreshold (line 29235) | set evictionThreshold(value) {
  method evictionThreshold (line 29239) | get evictionThreshold() {
  method cache (line 29245) | get cache() {
  method retainerCount (line 29251) | retainerCount(key) {
  method reset (line 29258) | reset() {
  method retain (line 29266) | retain(key) {
  method release (line 29283) | release(key) {
  method [(_a = $retainerCount, _b = $recentlyUsed, $evict)] (line 29289) | [(_a = $retainerCount, _b = $recentlyUsed, $evict)]() {
  method constructor (line 29329) | constructor(parser) {
  method afterRoot (line 29337) | afterRoot(gltf) {
  method constructor (line 29406) | constructor(GLTFInstance2) {
  method setDRACODecoderLocation (line 29413) | static setDRACODecoderLocation(url) {
  method getDRACODecoderLocation (line 29417) | static getDRACODecoderLocation() {
  method setKTX2TranscoderLocation (line 29420) | static setKTX2TranscoderLocation(url) {
  method getKTX2TranscoderLocation (line 29424) | static getKTX2TranscoderLocation() {
  method setMeshoptDecoderLocation (line 29427) | static setMeshoptDecoderLocation(url) {
  method getMeshoptDecoderLocation (line 29433) | static getMeshoptDecoderLocation() {
  method initializeKTX2Loader (line 29436) | static initializeKTX2Loader(renderer) {
  method cache (line 29439) | static get cache() {
  method clearCache (line 29443) | static clearCache() {
  method has (line 29449) | static has(url) {
  method delete (line 29453) | static async delete(url) {
  method hasFinishedLoading (line 29467) | static hasFinishedLoading(url) {
  method [(_a2 = $evictionPolicy, _b2 = $loader, $evictionPolicy)] (line 29470) | get [(_a2 = $evictionPolicy, _b2 = $loader, $evictionPolicy)]() {
  method preload (line 29477) | async preload(url, element, progressCallback = () => {
  method load (line 29511) | async load(url, element, progressCallback = () => {
  method constructor (line 29527) | constructor(element = document.createElement("div")) {
  method copy (line 29542) | copy(source, recursive) {
  method constructor (line 29554) | constructor(parameters = {}) {
  method constructor (line 29644) | constructor() {
  method register (line 29668) | register(callback) {
  method unregister (line 29674) | unregister(callback) {
  method parse (line 29687) | parse(input, onDone, onError, options) {
  method parseAsync (line 29696) | parseAsync(input, options) {
  function equalArray (line 29749) | function equalArray(array1, array2) {
  function stringToArrayBuffer (line 29754) | function stringToArrayBuffer(text) {
  function isIdentityMatrix (line 29757) | function isIdentityMatrix(matrix) {
  function getMinMax (line 29760) | function getMinMax(attribute, start, count) {
  function getPaddedBufferSize (line 29786) | function getPaddedBufferSize(bufferSize) {
  function getPaddedArrayBuffer (line 29789) | function getPaddedArrayBuffer(arrayBuffer, paddingByte = 0) {
  function getCanvas (line 29803) | function getCanvas() {
  function getToBlobPromise (line 29809) | function getToBlobPromise(canvas, mimeType) {
  method constructor (line 29825) | constructor() {
  method setPlugins (line 29852) | setPlugins(plugins) {
  method write (line 29861) | async write(input, onDone, options) {
  method serializeUserData (line 29938) | serializeUserData(object, objectDef) {
  method getUID (line 29965) | getUID(attribute, isRelativeCopy = false) {
  method isNormalizedNormalAttribute (line 29981) | isNormalizedNormalAttribute(normal) {
  method createNormalizedNormalAttribute (line 29999) | createNormalizedNormalAttribute(normal) {
  method applyTextureTransform (line 30024) | applyTextureTransform(mapDef, texture) {
  method buildMetalRoughTexture (line 30045) | buildMetalRoughTexture(metalnessMap, roughnessMap) {
  method processBuffer (line 30098) | processBuffer(buffer) {
  method processBufferView (line 30115) | processBufferView(attribute, componentType, start, count, target2) {
  method processBufferViewImage (line 30180) | processBufferViewImage(blob) {
  method processAccessor (line 30208) | processAccessor(attribute, geometry, start, count) {
  method processImage (line 30264) | processImage(image, format, flipY, mimeType = "image/png") {
  method processSampler (line 30331) | processSampler(map) {
  method processTexture (line 30348) | processTexture(map) {
  method processMaterial (line 30376) | processMaterial(material) {
  method processMesh (line 30473) | processMesh(mesh) {
  method processCamera (line 30644) | processCamera(camera2) {
  method processAnimation (line 30681) | processAnimation(clip, root) {
  method processSkin (line 30744) | processSkin(object) {
  method processNode (line 30777) | processNode(object) {
  method processScene (line 30841) | processScene(scene) {
  method processObjects (line 30869) | processObjects(objects) {
  method processInput (line 30880) | processInput(input) {
  method _invokeAll (line 30906) | _invokeAll(func) {
  method constructor (line 30913) | constructor(writer) {
  method writeNode (line 30917) | writeNode(light, nodeDef) {
  method constructor (line 30964) | constructor(writer) {
  method writeMaterial (line 30968) | writeMaterial(material, materialDef) {
  method constructor (line 30981) | constructor(writer) {
  method writeMaterial (line 30985) | writeMaterial(material, materialDef) {
  method constructor (line 31012) | constructor(writer) {
  method writeMaterial (line 31016) | writeMaterial(material, materialDef) {
  method constructor (line 31045) | constructor(writer) {
  method writeMaterial (line 31049) | writeMaterial(material, materialDef) {
  method constructor (line 31075) | constructor(writer) {
  method writeMaterial (line 31079) | writeMaterial(material, materialDef) {
  method constructor (line 31097) | constructor(writer) {
  method writeMaterial (line 31101) | writeMaterial(material, materialDef) {
  method constructor (line 31236) | constructor(writer) {
  method beforeParse (line 31241) | beforeParse(objects) {
  method writeMesh (line 31260) | writeMesh(mesh, meshDef) {
  method afterParse (line 31301) | afterParse() {
  method constructor (line 31317) | constructor(xrLight, renderer, lightProbe, environmentEstimation, estima...
  method updateReflection (line 31344) | updateReflection() {
  method onXRFrame (line 31354) | onXRFrame(time, xrFrame) {
  method dispose (line 31387) | dispose() {
  method constructor (line 31395) | constructor(renderer, environmentEstimation = true) {
  method constructor (line 31447) | constructor(decayMilliseconds = DECAY_MILLISECONDS) {
  method setDecayTime (line 31452) | setDecayTime(decayMilliseconds) {
  method update (line 31455) | update(x2, xGoal, timeStepMilliseconds, xNormalization) {
  method constructor (line 31497) | constructor(scene, side) {
  method getHit (line 31546) | getHit(scene, screenX, screenY) {
  method getExpandedHit (line 31553) | getExpandedHit(scene, screenX, screenY) {
  method offsetHeight (line 31564) | set offsetHeight(offset) {
  method offsetHeight (line 31572) | get offsetHeight() {
  method show (line 31582) | set show(visible) {
  method updateOpacity (line 31588) | updateOpacity(delta) {
  method dispose (line 31596) | dispose() {
  method constructor (line 31631) | constructor(renderer) {
  method resolveARSession (line 31713) | async resolveARSession() {
  method presentedScene (line 31728) | get presentedScene() {
  method supportsPresentation (line 31735) | async supportsPresentation() {
  method present (line 31749) | async present(scene, environmentEstimation = false) {
  method stopPresenting (line 31806) | async stopPresenting() {
  method isPresenting (line 31825) | get isPresenting() {
  method target (line 31828) | get target() {
  method updateTarget (line 31831) | updateTarget() {
  method postSessionCleanup (line 31844) | postSessionCleanup() {
  method updateView (line 31913) | updateView(view2) {
  method placeInitially (line 31932) | placeInitially() {
  method getTouchLocation (line 31956) | getTouchLocation() {
  method getHitPoint (line 31966) | getHitPoint(hitResult) {
  method moveToFloor (line 31978) | moveToFloor(frame) {
  method fingerPolar (line 32004) | fingerPolar(fingers) {
  method processInput (line 32022) | processInput(frame) {
  method moveScene (line 32091) | moveScene(delta) {
  method onWebXRFrame (line 32125) | onWebXRFrame(time, frame) {
  method constructor (line 32163) | constructor(renderer) {
  method addScene (line 32182) | addScene(scene) {
  method removeScene (line 32185) | removeScene(scene) {
  function clone (line 32191) | function clone(source) {
  function parallelTraverse (line 32214) | function parallelTraverse(a, b, callback) {
  method constructor (line 32227) | constructor(preparedGLTF) {
  method prepare (line 32235) | static prepare(source) {
  method [$prepare] (line 32250) | static [$prepare](source) {
  method parser (line 32255) | get parser() {
  method animations (line 32258) | get animations() {
  method scene (line 32261) | get scene() {
  method scenes (line 32264) | get scenes() {
  method cameras (line 32267) | get cameras() {
  method asset (line 32270) | get asset() {
  method userData (line 32273) | get userData() {
  method clone (line 32279) | clone() {
  method dispose (line 32288) | dispose() {
  method [$clone] (line 32316) | [$clone]() {
  method constructor (line 32354) | constructor(threeGLTF, gltf, threeObjectMap, gltfElementMap) {
  method from (line 32370) | static from(threeGLTF, upstreamCorrelatedSceneGraph) {
  method [$correlateOriginalThreeGLTF] (line 32377) | static [$correlateOriginalThreeGLTF](threeGLTF) {
  method [$correlateCloneThreeGLTF] (line 32426) | static [$correlateCloneThreeGLTF](cloneThreeGLTF, upstreamCorrelatedScen...
  method [$parallelTraverseThreeScene] (line 32461) | static [$parallelTraverseThreeScene](sceneOne, sceneTwo, callback) {
  method threeGLTF (line 32487) | get threeGLTF() {
  method gltf (line 32493) | get gltf() {
  method gltfElementMap (line 32502) | get gltfElementMap() {
  method threeObjectMap (line 32509) | get threeObjectMap() {
  method [$prepare] (line 32520) | static [$prepare](source) {
  method correlatedSceneGraph (line 32560) | get correlatedSceneGraph() {
  method [$clone] (line 32566) | [$clone]() {
  method constructor (line 32590) | constructor(manager) {
  method parse (line 32595) | parse(buffer) {
  method setDataType (line 32820) | setDataType(value) {
  method load (line 32824) | load(url, onLoad, onProgress, onError) {
  method constructor (line 32845) | constructor() {
  method createAreaLightMaterial (line 32914) | createAreaLightMaterial(intensity) {
  method constructor (line 32923) | constructor() {
  method createAreaLightMaterial (line 32996) | createAreaLightMaterial(intensity) {
  method constructor (line 33011) | constructor(threeRenderer) {
  method load (line 33020) | async load(url, progressCallback = () => {
  method generateEnvironmentMapAndSkybox (line 33046) | async generateEnvironmentMapAndSkybox(skyboxUrl = null, environmentMapUr...
  method loadEquirectFromUrl (line 33074) | async loadEquirectFromUrl(url, progressCallback) {
  method GenerateEnvironmentMap (line 33081) | async GenerateEnvironmentMap(scene, name) {
  method loadGeneratedEnvironmentMap (line 33107) | async loadGeneratedEnvironmentMap() {
  method loadGeneratedEnvironmentMapAlt (line 33118) | async loadGeneratedEnvironmentMapAlt() {
  method blurCubemap (line 33124) | blurCubemap(cubeTarget, sigma) {
  method halfblur (line 33136) | halfblur(targetIn, targetOut, sigmaRadians, direction) {
  method getBlurShader (line 33169) | getBlurShader(maxSamples) {
  method dispose (line 33259) | async dispose() {
  method constructor (line 33287) | constructor(options) {
  method singleton (line 33341) | static get singleton() {
  method resetSingleton (line 33344) | static resetSingleton() {
  method canRender (line 33357) | get canRender() {
  method scaleFactor (line 33360) | get scaleFactor() {
  method minScale (line 33363) | set minScale(scale) {
  method registerScene (line 33373) | registerScene(scene) {
  method unregisterScene (line 33387) | unregisterScene(scene) {
  method displayCanvas (line 33399) | displayCanvas(scene) {
  method countVisibleScenes (line 33408) | countVisibleScenes() {
  method updateRendererSize (line 33437) | updateRendererSize() {
  method updateRendererScale (line 33469) | updateRendererScale(delta) {
  method shouldRender (line 33482) | shouldRender(scene) {
  method rescaleCanvas (line 33496) | rescaleCanvas(scene) {
  method sceneSize (line 33518) | sceneSize(scene) {
  method copyPixels (line 33525) | copyPixels(scene, width, height) {
  method orderedScenes (line 33540) | orderedScenes() {
  method isPresenting (line 33551) | get isPresenting() {
  method preRender (line 33558) | preRender(scene, t2, delta) {
  method render (line 33564) | render(t2, frame) {
  method dispose (line 33630) | dispose() {
  method constructor (line 33658) | constructor(onUpdate, element, correlatedObjects = null) {
  method [$threeTexture] (line 33672) | get [$threeTexture]() {
  method constructor (line 33677) | constructor(onUpdate, texture, gltfImage) {
  method name (line 33684) | get name() {
  method uri (line 33687) | get uri() {
  method bufferView (line 33690) | get bufferView() {
  method type (line 33693) | get type() {
  method name (line 33696) | set name(name) {
  method createThumbnail (line 33699) | async createThumbnail(width, height) {
  method [$threeTextures] (line 33783) | get [$threeTextures]() {
  method [$sourceSampler] (line 33787) | get [$sourceSampler]() {
  method constructor (line 33791) | constructor(onUpdate, texture, gltfSampler) {
  method name (line 33807) | get name() {
  method minFilter (line 33810) | get minFilter() {
  method magFilter (line 33813) | get magFilter() {
  method wrapS (line 33816) | get wrapS() {
  method wrapT (line 33819) | get wrapT() {
  method setMinFilter (line 33822) | setMinFilter(filter) {
  method setMagFilter (line 33825) | setMagFilter(filter) {
  method setWrapS (line 33828) | setWrapS(mode) {
  method setWrapT (line 33831) | setWrapT(mode) {
  method [$setProperty] (line 33834) | [$setProperty](property2, value) {
  method constructor (line 33853) | constructor(onUpdate, threeTexture, gltfTexture = null, gltfSampler = nu...
  method name (line 33858) | get name() {
  method name (line 33861) | set name(name) {
  method sampler (line 33864) | get sampler() {
  method source (line 33867) | get source() {
  method constructor (line 33888) | constructor(onUpdate, usage, threeTexture, material, gltf, gltfTextureIn...
  method texture (line 33908) | get texture() {
  method setTexture (line 33911) | setTexture(texture) {
  method constructor (line 33958) | constructor(onUpdate, gltf, pbrMetallicRoughness, correlatedMaterials) {
  method [$threeMaterials] (line 33974) | get [$threeMaterials]() {
  method baseColorFactor (line 33977) | get baseColorFactor() {
  method metallicFactor (line 33980) | get metallicFactor() {
  method roughnessFactor (line 33983) | get roughnessFactor() {
  method baseColorTexture (line 33986) | get baseColorTexture() {
  method metallicRoughnessTexture (line 33989) | get metallicRoughnessTexture() {
  method setBaseColorFactor (line 33992) | setBaseColorFactor(rgba) {
  method setMetallicFactor (line 34012) | setMetallicFactor(value) {
  method setRoughnessFactor (line 34020) | setRoughnessFactor(value) {
  method constructor (line 34049) | constructor(onUpdate, gltf, gltfMaterial, gltfIndex, isActive, modelVari...
  method [(_a5 = $variantSet, $backingThreeMaterial)] (line 34061) | get [(_a5 = $variantSet, $backingThreeMaterial)]() {
  method [$initialize] (line 34064) | [$initialize](gltf) {
  method [$getLoadedMaterial] (line 34097) | async [$getLoadedMaterial]() {
  method [$ensureMaterialIsLoaded] (line 34109) | [$ensureMaterialIsLoaded]() {
  method ensureLoaded (line 34116) | async ensureLoaded() {
  method isLoaded (line 34119) | get isLoaded() {
  method isActive (line 34122) | get isActive() {
  method [$setActive] (line 34125) | [$setActive](isActive) {
  method name (line 34128) | get name() {
  method name (line 34131) | set name(name) {
  method pbrMetallicRoughness (line 34142) | get pbrMetallicRoughness() {
  method normalTexture (line 34146) | get normalTexture() {
  method occlusionTexture (line 34150) | get occlusionTexture() {
  method emissiveTexture (line 34154) | get emissiveTexture() {
  method emissiveFactor (line 34158) | get emissiveFactor() {
  method index (line 34162) | get index() {
  method [$variantIndices] (line 34165) | [$variantIndices]() {
  method hasVariant (line 34168) | hasVariant(name) {
  method setEmissiveFactor (line 34172) | setEmissiveFactor(rgb) {
  method [$applyAlphaCutoff] (line 34186) | [$applyAlphaCutoff]() {
  method setAlphaCutoff (line 34198) | setAlphaCutoff(cutoff) {
  method getAlphaCutoff (line 34204) | getAlphaCutoff() {
  method setDoubleSided (line 34208) | setDoubleSided(doubleSided) {
  method getDoubleSided (line 34217) | getDoubleSided() {
  method setAlphaMode (line 34221) | setAlphaMode(alphaMode) {
  method getAlphaMode (line 34235) | getAlphaMode() {
  method constructor (line 34259) | constructor(name) {
  method constructor (line 34267) | constructor(mesh, mvMaterials, modelVariants, correlatedSceneGraph) {
  method mesh (line 34325) | get mesh() {
  method setActiveMaterial (line 34328) | async setActiveMaterial(material) {
  method getActiveMaterial (line 34336) | getActiveMaterial() {
  method getMaterial (line 34339) | getMaterial(index) {
  method enableVariant (line 34342) | async enableVariant(name) {
  method enableVariantHelper (line 34352) | async enableVariantHelper(index) {
  method instantiateVariants (line 34361) | async instantiateVariants() {
  method variantInfo (line 34376) | get variantInfo() {
  method addVariant (line 34379) | addVariant(materialVariant, variantName) {
  method deleteVariant (line 34394) | deleteVariant(variantIndex) {
  method updateVariantUserData (line 34403) | updateVariantUserData(variantIndex, materialVariant) {
  method ensureVariantIsUnused (line 34413) | ensureVariantIsUnused(variantName) {
  method constructor (line 34447) | constructor(gltf, gltfElementMap, mapKey, doLazyLoad) {
  method constructor (line 34455) | constructor(correlatedSceneGraph, onUpdate = () => {
  method materials (line 34519) | get materials() {
  method [(_a7 = $materials3, _b6 = $hierarchy, _c2 = $roots, _d2 = $primitivesList, _e2 = $modelOnUpdate, _f = $variantData, $availableVariants)] (line 34522) | [(_a7 = $materials3, _b6 = $hierarchy, _c2 = $roots, _d2 = $primitivesLi...
  method getMaterialByName (line 34531) | getMaterialByName(name) {
  method [$materialsFromPoint] (line 34544) | [$materialsFromPoint](raycaster2) {
  method [$materialFromPoint] (line 34566) | [$materialFromPoint](raycaster2) {
  method [$switchVariant2] (line 34577) | async [$switchVariant2](variantName) {
  method [$prepareVariantsForExport2] (line 34588) | async [$prepareVariantsForExport2]() {
  method [$cloneMaterial] (line 34595) | [$cloneMaterial](index, newMaterialName) {
  method createMaterialInstanceForVariant (line 34625) | createMaterialInstanceForVariant(originalMaterialIndex, newMaterialName,...
  method createVariant (line 34652) | createVariant(variantName) {
  method hasVariant (line 34659) | hasVariant(variantName) {
  method setMaterialToVariant (line 34662) | setMaterialToVariant(materialIndex, targetVariantName) {
  method updateVariantName (line 34678) | updateVariantName(currentName, newName) {
  method deleteVariant (line 34687) | deleteVariant(variantName) {
  class SceneGraphModelViewerElement (line 34722) | class SceneGraphModelViewerElement extends ModelViewerElement2 {
    method constructor (line 34723) | constructor() {
    method model (line 34735) | get model() {
    method availableVariants (line 34738) | get availableVariants() {
    method originalGltfJson (line 34745) | get originalGltfJson() {
    method [(_a12 = $model, _b11 = $currentGLTF, _c6 = $textureLoader, _d5 = $originalGltfJson, $getOnUpdateMethod)] (line 34748) | [(_a12 = $model, _b11 = $currentGLTF, _c6 = $textureLoader, _d5 = $ori...
    method createTexture (line 34753) | async createTexture(uri, type = "image/png") {
    method updated (line 34766) | async updated(changedProperties) {
    method [$onModelLoad] (line 34792) | [$onModelLoad]() {
    method exportScene (line 34808) | async exportScene(options) {
    method materialFromPoint (line 34841) | materialFromPoint(pixelX, pixelY) {
  method constructor (line 34997) | constructor(visitedTypes) {
  method walk (line 35004) | walk(ast, callback) {
  method constructor (line 35089) | constructor(config) {
  method facingCamera (line 35103) | get facingCamera() {
  method show (line 35109) | show() {
  method hide (line 35117) | hide() {
  method increment (line 35125) | increment() {
  method decrement (line 35132) | decrement() {
  method updatePosition (line 35142) | updatePosition(position) {
  method updateNormal (line 35155) | updateNormal(normal) {
  method orient (line 35163) | orient(radians) {
  method updateVisibility (line 35166) | updateVisibility(show) {
  function lerp2 (line 35334) | function lerp2(x2, y, t2) {
  method constructor (line 35344) | constructor(scene, softness, side) {
  method setScene (line 35391) | setScene(scene, softness, side) {
  method setSoftness (line 35429) | setSoftness(softness) {
  method setMapSize (line 35447) | setMapSize(maxMapSize) {
  method setIntensity (line 35476) | setIntensity(intensity) {
  method getIntensity (line 35487) | getIntensity() {
  method setOffset (line 35496) | setOffset(offset) {
  method render (line 35499) | render(renderer, scene) {
  method blurShadow (line 35516) | blurShadow(renderer) {
  method dispose (line 35531) | dispose() {
  method constructor (line 35557) | constructor({ canvas, element, width, height }) {
  method context (line 35617) | get context() {
  method getCamera (line 35620) | getCamera() {
  method queueRender (line 35623) | queueRender() {
  method shouldRender (line 35626) | shouldRender() {
  method hasRendered (line 35629) | hasRendered() {
  method forceRescale (line 35632) | forceRescale() {
  method setObject (line 35640) | async setObject(model) {
  method setSource (line 35649) | async setSource(url, progressCallback = () => {
  method setupScene (line 35704) | async setupScene() {
  method reset (line 35711) | reset() {
  method dispose (line 35735) | dispose() {
  method currentGLTF (line 35745) | get currentGLTF() {
  method setSize (line 35751) | setSize(width, height) {
  method markBakedShadow (line 35765) | markBakedShadow(mesh) {
  method unmarkBakedShadow (line 35769) | unmarkBakedShadow(mesh) {
  method findBakedShadows (line 35775) | findBakedShadows(group) {
  method checkBakedShadows (line 35796) | checkBakedShadows() {
  method applyTransform (line 35811) | applyTransform() {
  method updateBoundingBox (line 35824) | updateBoundingBox() {
  method updateFraming (line 35854) | async updateFraming() {
  method setBakedShadowVisibility (line 35878) | setBakedShadowVisibility(visible = this.shadowIntensity <= 0) {
  method idealCameraDistance (line 35883) | idealCameraDistance() {
  method adjustedFoV (line 35891) | adjustedFoV(fovDeg) {
  method getNDC (line 35895) | getNDC(clientX, clientY) {
  method getSize (line 35909) | getSize() {
  method setEnvironmentAndSkybox (line 35912) | setEnvironmentAndSkybox(environment, skybox) {
  method setTarget (line 35923) | setTarget(modelX, modelY, modelZ) {
  method setTargetDamperDecayTime (line 35929) | setTargetDamperDecayTime(decayMilliseconds) {
  method getTarget (line 35937) | getTarget() {
  method jumpToGoal (line 35943) | jumpToGoal() {
  method updateTarget (line 35950) | updateTarget(delta) {
  method pointTowards (line 35970) | pointTowards(worldX, worldZ) {
  method model (line 35974) | get model() {
  method yaw (line 35981) | set yaw(radiansY) {
  method yaw (line 35985) | get yaw() {
  method animationTime (line 35988) | set animationTime(value) {
  method animationTime (line 35992) | get animationTime() {
  method animationTimeScale (line 36003) | set animationTimeScale(value) {
  method animationTimeScale (line 36006) | get animationTimeScale() {
  method duration (line 36009) | get duration() {
  method hasActiveAnimation (line 36015) | get hasActiveAnimation() {
  method playAnimation (line 36024) | playAnimation(name = null, crossfadeTime = 0, loopMode = LoopRepeat, rep...
  method stopAnimation (line 36068) | stopAnimation() {
  method updateAnimation (line 36072) | updateAnimation(step) {
  method subscribeMixerEvent (line 36076) | subscribeMixerEvent(event, callback) {
  method updateShadow (line 36083) | updateShadow() {
  method renderShadow (line 36091) | renderShadow(renderer) {
  method queueShadowRender (line 36098) | queueShadowRender() {
  method setShadowIntensity (line 36106) | setShadowIntensity(shadowIntensity) {
  method setShadowSoftness (line 36126) | setShadowSoftness(softness) {
  method setShadowOffset (line 36137) | setShadowOffset(offset) {
  method raycaster (line 36143) | get raycaster() {
  method positionAndNormalFromPoint (line 36152) | positionAndNormalFromPoint(ndcPosition, object = this) {
  method addHotspot (line 36170) | addHotspot(hotspot) {
  method removeHotspot (line 36174) | removeHotspot(hotspot) {
  method forHotspots (line 36180) | forHotspots(func) {
  method updateHotspots (line 36193) | updateHotspots(viewerPosition) {
  method orientHotspots (line 36210) | orientHotspots(radians) {
  method setHotspotsVisibility (line 36219) | setHotspotsVisibility(visible) {
  method updateSchema (line 36224) | updateSchema(src) {
  method constructor (line 36283) | constructor() {
  method ongoingActivityCount (line 36291) | get ongoingActivityCount() {
  method beginActivity (line 36309) | beginActivity() {
  method announceTotalProgress (line 36324) | announceTotalProgress(updatedActivity, nextProgress) {
  method toString (line 36416) | toString() {
  method toString (line 36425) | toString() {
  method constructor (line 36434) | constructor() {
  method is (line 36529) | static get is() {
  method modelCacheSize (line 36533) | static set modelCacheSize(value) {
  method modelCacheSize (line 36537) | static get modelCacheSize() {
  method minimumRenderScale (line 36541) | static set minimumRenderScale(value) {
  method minimumRenderScale (line 36551) | static get minimumRenderScale() {
  method loaded (line 36555) | get loaded() {
  method [(_a8 = $isElementInViewport, _b7 = $loaded, _c3 = $loadedTime, _d3 = $status, _e3 = $clearModelTimeout, _f3 = $fallbackResizeHandler, _g = $announceModelVisibility, _h = $resizeObserver, _j = $intersectionObserver, _k = $progressTracker, $renderer)] (line 36558) | get [(_a8 = $isElementInViewport, _b7 = $loaded, _c3 = $loadedTime, _d3 ...
  method modelIsVisible (line 36562) | get modelIsVisible() {
  method connectedCallback (line 36565) | connectedCallback() {
  method disconnectedCallback (line 36586) | disconnectedCallback() {
  method updated (line 36606) | updated(changedProperties) {
  method toDataURL (line 36634) | toDataURL(type, encoderOptions) {
  method toBlob (line 36638) | async toBlob(options) {
  method registerRenderer (line 36684) | registerRenderer(renderer) {
  method unregisterRenderer (line 36687) | unregisterRenderer() {
  method [$ariaLabel] (line 36690) | get [$ariaLabel]() {
  method [$altDefaulted] (line 36693) | get [$altDefaulted]() {
  method [$getLoaded] (line 36700) | [$getLoaded]() {
  method [$getModelIsVisible] (line 36704) | [$getModelIsVisible]() {
  method [$shouldAttemptPreload] (line 36707) | [$shouldAttemptPreload]() {
  method [$updateSize] (line 36713) | [$updateSize]({ width, height }) {
  method [$tick] (line 36718) | [$tick](_time, _delta) {
  method [$markLoaded] (line 36720) | [$markLoaded]() {
  method [$needsRender] (line 36727) | [$needsRender]() {
  method [$onModelLoad] (line 36730) | [$onModelLoad]() {
  method [$updateStatus] (line 36732) | [$updateStatus](status) {
  method [(_l = $onFocus, _m = $onBlur, $onResize)] (line 36739) | [(_l = $onFocus, _m = $onBlur, $onResize)](e) {
  method [(_o = $onContextLost, $updateSource)] (line 36746) | async [(_o = $onContextLost, $updateSource)]() {
  class AnimationModelViewerElement (line 36812) | class AnimationModelViewerElement extends ModelViewerElement2 {
    method constructor (line 36813) | constructor(...args) {
    method availableAnimations (line 36831) | get availableAnimations() {
    method duration (line 36837) | get duration() {
    method paused (line 36840) | get paused() {
    method currentTime (line 36843) | get currentTime() {
    method currentTime (line 36846) | set currentTime(value) {
    method timeScale (line 36850) | get timeScale() {
    method timeScale (line 36853) | set timeScale(value) {
    method pause (line 36856) | pause() {
    method play (line 36863) | play(options) {
    method [(_a12 = $paused, $onModelLoad)] (line 36870) | [(_a12 = $paused, $onModelLoad)]() {
    method [$tick] (line 36877) | [$tick](_time, delta) {
    method updated (line 36885) | updated(changedProperties) {
    method [$changeAnimation] (line 36894) | [$changeAnimation](options = DEFAULT_PLAY_OPTIONS) {
  class AnnotationModelViewerElement (line 36927) | class AnnotationModelViewerElement extends ModelViewerElement2 {
    method constructor (line 36928) | constructor() {
    method connectedCallback (line 36946) | connectedCallback() {
    method disconnectedCallback (line 36958) | disconnectedCallback() {
    method [(_a12 = $hotspotMap, _b11 = $mutationCallback, _c6 = $observer, $tick)] (line 36967) | [(_a12 = $hotspotMap, _b11 = $mutationCallback, _c6 = $observer, $tick...
    method updateHotspot (line 36984) | updateHotspot(config) {
    method queryHotspot (line 36997) | queryHotspot(name) {
    method positionAndNormalFromPoint (line 37028) | positionAndNormalFromPoint(pixelX, pixelY) {
    method [$addHotspot] (line 37045) | [$addHotspot](node) {
    method [$removeHotspot] (line 37063) | [$removeHotspot](node) {
  function AsyncCmpStrm (line 37934) | function AsyncCmpStrm(opts, cb) {
  function Deflate2 (line 37941) | function Deflate2(opts, cb) {
  function AsyncDeflate2 (line 37961) | function AsyncDeflate2(opts, cb) {
  function deflateSync (line 37974) | function deflateSync(data, opts) {
  function Inflate2 (line 37978) | function Inflate2(cb) {
  function AsyncInflate2 (line 38006) | function AsyncInflate2(cb) {
  function inflateSync (line 38020) | function inflateSync(data, out) {
  function Gzip2 (line 38024) | function Gzip2(opts, cb) {
  function AsyncGzip2 (line 38046) | function AsyncGzip2(opts, cb) {
  function Gunzip2 (line 38061) | function Gunzip2(cb) {
  function AsyncGunzip2 (line 38083) | function AsyncGunzip2(cb) {
  function Zlib2 (line 38099) | function Zlib2(opts, cb) {
  function AsyncZlib2 (line 38119) | function AsyncZlib2(opts, cb) {
  function Unzlib2 (line 38134) | function Unzlib2(cb) {
  function AsyncUnzlib2 (line 38155) | function AsyncUnzlib2(cb) {
  function Decompress2 (line 38171) | function Decompress2(cb) {
  function AsyncDecompress2 (line 38201) | function AsyncDecompress2(cb) {
  function DecodeUTF82 (line 38248) | function DecodeUTF82(cb) {
  function EncodeUTF82 (line 38285) | function EncodeUTF82(cb) {
  function strToU8 (line 38297) | function strToU8(str, latin1) {
  function strFromU8 (line 38330) | function strFromU8(dat, latin1) {
  function ZipPassThrough2 (line 38412) | function ZipPassThrough2(filename) {
  function ZipDeflate2 (line 38433) | function ZipDeflate2(filename, opts) {
  function AsyncZipDeflate2 (line 38457) | function AsyncZipDeflate2(filename, opts) {
  function Zip2 (line 38478) | function Zip2(cb) {
  function zipSync (line 38598) | function zipSync(data, opts) {
  function UnzipPassThrough2 (line 38642) | function UnzipPassThrough2() {
  function UnzipInflate2 (line 38651) | function UnzipInflate2() {
  function AsyncUnzipInflate2 (line 38668) | function AsyncUnzipInflate2(_, sz) {
  function Unzip2 (line 38690) | function Unzip2(cb) {
  method parse (line 38825) | async parse(scene) {
  function imageToCanvas (line 38880) | function imageToCanvas(image, color) {
  function buildHeader (line 38906) | function buildHeader() {
  function buildUSDFileAsString (line 38918) | function buildUSDFileAsString(dataToInsert) {
  function buildXform (line 38923) | function buildXform(object, geometry, material) {
  function buildMatrix (line 38941) | function buildMatrix(matrix) {
  function buildMatrixRow (line 38945) | function buildMatrixRow(array, offset) {
  function buildMeshObject (line 38948) | function buildMeshObject(geometry) {
  function buildMesh (line 38957) | function buildMesh(geometry) {
  function buildMeshVertexCount (line 38977) | function buildMeshVertexCount(geometry) {
  function buildMeshVertexIndices (line 38981) | function buildMeshVertexIndices(geometry) {
  function buildVector3Array (line 38996) | function buildVector3Array(attribute, count) {
  function buildVector2Array (line 39010) | function buildVector2Array(attribute, count) {
  function buildMaterials (line 39023) | function buildMaterials(materials, textures) {
  function buildMaterial (line 39036) | function buildMaterial(material, textures) {
  function buildColor (line 39152) | function buildColor(color) {
  function buildVector2 (line 39155) | function buildVector2(vector) {
  function buildCamera (line 39158) | function buildCamera(camera2) {
  class ARModelViewerElement (line 39249) | class ARModelViewerElement extends ModelViewerElement2 {
    method constructor (line 39250) | constructor() {
    method canActivateAR (line 39289) | get canActivateAR() {
    method connectedCallback (line 39292) | connectedCallback() {
    method disconnectedCallback (line 39299) | disconnectedCallback() {
    method update (line 39305) | update(changedProperties) {
    method activateAR (line 39327) | async activateAR() {
    method [(_a12 = $canActivateAR, _b11 = $arButtonContainer, _c6 = $arAnchor, _d5 = $arModes, _e4 = $arMode, _f4 = $preload, _g2 = $onARButtonContainerClick, _h2 = $onARStatus, _j2 = $onARTracking, _k2 = $onARTap, $selectARMode)] (line 39343) | async [(_a12 = $canActivateAR, _b11 = $arButtonContainer, _c6 = $arAnc...
    method [$enterARWithWebXR] (line 39378) | async [$enterARWithWebXR]() {
    method [$triggerLoad] (line 39398) | async [$triggerLoad]() {
    method [$shouldAttemptPreload] (line 39406) | [$shouldAttemptPreload]() {
    method [$openSceneViewer] (line 39413) | [$openSceneViewer]() {
    method [$openIOSARQuickLook] (line 39456) | async [$openIOSARQuickLook]() {
    method prepareUSDZ (line 39494) | async prepareUSDZ() {
  method constructor (line 39548) | constructor() {
  method evaluatableFor (line 39559) | static evaluatableFor(node, basis = ZERO) {
  method evaluate (line 39584) | static evaluate(evaluatable) {
  method isConstant (line 39594) | static isConstant(evaluatable) {
  method applyIntrinsics (line 39625) | static applyIntrinsics(evaluated, intrinsics) {
  method isConstant (line 39655) | get isConstant() {
  method evaluate (line 39664) | evaluate() {
  method constructor (line 39675) | constructor(percentage, basis) {
  method isConstant (line 39680) | get isConstant() {
  method [$evaluate] (line 39683) | [$evaluate]() {
  method constructor (line 39689) | constructor(envFunction) {
  method isConstant (line 39697) | get isConstant() {
  method [(_b9 = $identNode, $evaluate)] (line 39700) | [(_b9 = $identNode, $evaluate)]() {
  method constructor (line 39716) | constructor(calcFunction, basis = ZERO) {
  method isConstant (line 39751) | get isConstant() {
  method [(_c4 = $evaluator, $evaluate)] (line 39754) | [(_c4 = $evaluator, $evaluate)]() {
  method constructor (line 39762) | constructor(operator, left, right) {
  method isConstant (line 39768) | get isConstant() {
  method [$evaluate] (line 39771) | [$evaluate]() {
  method constructor (line 39803) | constructor(expressions, intrinsics) {
  method isConstant (line 39819) | get isConstant() {
  method [$evaluate] (line 39827) | [$evaluate]() {
  method constructor (line 39845) | constructor(callback) {
  method [$notifyInstances] (line 39848) | static [$notifyInstances]() {
  method [(_a11 = $instances, $activateListener)] (line 39853) | static [(_a11 = $instances, $activateListener)]() {
  method [$deactivateListener] (line 39856) | static [$deactivateListener]() {
  method observe (line 39863) | observe() {
  method disconnect (line 39872) | disconnect() {
  method [$notify] (line 39878) | [$notify]() {
  method constructor (line 39888) | constructor(callback) {
  method observeEffectsFor (line 39900) | observeEffectsFor(ast) {
  method dispose (line 39931) | dispose() {
  method constructor (line 40030) | constructor(camera2, element, scene) {
  method interactionEnabled (line 40205) | get interactionEnabled() {
  method enableInteraction (line 40208) | enableInteraction() {
  method disableInteraction (line 40225) | disableInteraction() {
  method options (line 40244) | get options() {
  method disableZoom (line 40247) | set disableZoom(disable) {
  method getCameraSpherical (line 40265) | getCameraSpherical(target2 = new Spherical()) {
  method getFieldOfView (line 40271) | getFieldOfView() {
  method applyOptions (line 40279) | applyOptions(_options) {
  method updateNearFar (line 40287) | updateNearFar(nearPlane, farPlane) {
  method updateAspect (line 40295) | updateAspect(aspect2) {
  method setOrbit (line 40307) | setOrbit(goalTheta = this.goalSpherical.theta, goalPhi = this.goalSpheri...
  method setRadius (line 40328) | setRadius(radius) {
  method setFieldOfView (line 40335) | setFieldOfView(fov2) {
  method setDamperDecayTime (line 40343) | setDamperDecayTime(decayMilliseconds) {
  method adjustOrbit (line 40356) | adjustOrbit(deltaTheta, deltaPhi, deltaZoom) {
  method jumpToGoal (line 40375) | jumpToGoal() {
  method update (line 40385) | update(_time, delta) {
  method updateTouchActionStyle (line 40400) | updateTouchActionStyle() {
  method isStationary (line 40413) | isStationary() {
  method dispatchChange (line 40416) | dispatchChange() {
  method moveCamera (line 40419) | moveCamera() {
  method userAdjustOrbit (line 40429) | userAdjustOrbit(deltaTheta, deltaPhi, deltaZoom) {
  method wrapAngle (line 40434) | wrapAngle(radians) {
  method pixelLengthToSphericalAngle (line 40439) | pixelLengthToSphericalAngle(pixelLength) {
  method twoTouchDistance (line 40442) | twoTouchDistance(touchOne, touchTwo) {
  method handleSinglePointerMove (line 40449) | handleSinglePointerMove(dx, dy) {
  method initializePan (line 40458) | initializePan() {
  method movePan (line 40464) | movePan(dx, dy) {
  method recenter (line 40475) | recenter(pointer) {
  method resetRadius (line 40491) | resetRadius() {
  method onTouchChange (line 40507) | onTouchChange(event) {
  method onMouseDown (line 40528) | onMouseDown(event) {
  method orbitZoomKeyCodeHandler (line 40542) | orbitZoomKeyCodeHandler(event) {
  method panKeyCodeHandler (line 40575) | panKeyCodeHandler(event) {
  class ControlsModelViewerElement (line 40775) | class ControlsModelViewerElement extends ModelViewerElement2 {
    method constructor (line 40776) | constructor() {
    method inputSensitivity (line 40828) | get inputSensitivity() {
    method inputSensitivity (line 40831) | set inputSensitivity(value) {
    method getCameraOrbit (line 40834) | getCameraOrbit() {
    method getCameraTarget (line 40845) | getCameraTarget() {
    method getFieldOfView (line 40848) | getFieldOfView() {
    method getMinimumFieldOfView (line 40852) | getMinimumFieldOfView() {
    method getMaximumFieldOfView (line 40855) | getMaximumFieldOfView() {
    method getIdealAspect (line 40858) | getIdealAspect() {
    method jumpCameraToGoal (line 40861) | jumpCameraToGoal() {
    method resetInteractionPrompt (line 40865) | resetInteractionPrompt() {
    method zoom (line 40871) | zoom(keyPresses) {
    method connectedCallback (line 40875) | connectedCallback() {
    method disconnectedCallback (line 40881) | disconnectedCallback() {
    method updated (line 40887) | updated(changedProperties) {
    method updateFraming (line 40942) | async updateFraming() {
    method interact (line 40957) | interact(duration, finger0, finger1) {
    method [(_a12 = $promptElement, _b11 = $promptAnimatedContainer, _c6 = $fingerAnimatedContainers, _d5 = $panElement, _e4 = $lastPromptOffset, _f4 = $promptElementVisibleTime, _g2 = $userHasInteracted, _h2 = $waitingToPromptUser, _j2 = $controls, _k2 = $lastSpherical, _l2 = $jumpCamera, _m2 = $initialized, _o2 = $maintainThetaPhi, $syncFieldOfView)] (line 41031) | [(_a12 = $promptElement, _b11 = $promptAnimatedContainer, _c6 = $finge...
    method [$syncCameraOrbit] (line 41036) | [$syncCameraOrbit](style2) {
    method [$syncMinCameraOrbit] (line 41047) | [$syncMinCameraOrbit](style2) {
    method [$syncMaxCameraOrbit] (line 41055) | [$syncMaxCameraOrbit](style2) {
    method [$syncMinFieldOfView] (line 41064) | [$syncMinFieldOfView](style2) {
    method [$syncMaxFieldOfView] (line 41068) | [$syncMaxFieldOfView](style2) {
    method [$syncCameraTarget] (line 41073) | [$syncCameraTarget](style2) {
    method [$tick] (line 41081) | [$tick](time, delta) {
    method [$deferInteractionPrompt] (line 41115) | [$deferInteractionPrompt]() {
    method [$updateCameraForRadius] (line 41124) | [$updateCameraForRadius](radius) {
    method [$updateAria] (line 41130) | [$updateAria]() {
    method [$ariaLabel] (line 41138) | get [$ariaLabel]() {
    method [$onResize] (line 41141) | async [$onResize](event) {
    method [$onModelLoad] (line 41154) | [$onModelLoad]() {
  class LoadingModelViewerElement (line 41287) | class LoadingModelViewerElement extends ModelViewerElement2 {
    method constructor (line 41288) | constructor(...args) {
    method dracoDecoderLocation (line 41334) | static set dracoDecoderLocation(value) {
    method dracoDecoderLocation (line 41337) | static get dracoDecoderLocation() {
    method ktx2TranscoderLocation (line 41340) | static set ktx2TranscoderLocation(value) {
    method ktx2TranscoderLocation (line 41343) | static get ktx2TranscoderLocation() {
    method meshoptDecoderLocation (line 41346) | static set meshoptDecoderLocation(value) {
    method meshoptDecoderLocation (line 41349) | static get meshoptDecoderLocation() {
    method mapURLs (line 41358) | static mapURLs(callback) {
    method dismissPoster (line 41366) | dismissPoster() {
    method showPoster (line 41379) | showPoster() {
    method getDimensions (line 41397) | getDimensions() {
    method getBoundingBoxCenter (line 41400) | getBoundingBoxCenter() {
    method connectedCallback (line 41403) | connectedCallback() {
    method disconnectedCallback (line 41408) | disconnectedCallback() {
    method updated (line 41412) | async updated(changedProperties) {
    method [(_a12 = $modelIsRevealed, _b11 = $shouldDismissPoster, _c6 = $posterContainerElement, _d5 = $defaultPosterElement, _e4 = $defaultProgressBarElement, _f4 = $ariaLabelCallToAction, _g2 = $updateProgressBar, _h2 = $onProgress, $shouldAttemptPreload)] (line 41424) | [(_a12 = $modelIsRevealed, _b11 = $shouldDismissPoster, _c6 = $posterC...
    method [$hidePoster] (line 41427) | [$hidePoster]() {
    method [$getModelIsVisible] (line 41447) | [$getModelIsVisible]() {
  class StagingModelViewerElement (line 41486) | class StagingModelViewerElement extends ModelViewerElement2 {
    method constructor (line 41487) | constructor() {
    method connectedCallback (line 41503) | connectedCallback() {
    method disconnectedCallback (line 41508) | disconnectedCallback() {
    method updated (line 41513) | updated(changedProperties) {
    method [(_a12 = $autoRotateStartTime, _b11 = $radiansPerSecond, $syncRotationRate)] (line 41519) | [(_a12 = $autoRotateStartTime, _b11 = $radiansPerSecond, $syncRotation...
    method [$tick] (line 41522) | [$tick](time, delta) {
    method turntableRotation (line 41532) | get turntableRotation() {
    method resetTurntableRotation (line 41535) | resetTurntableRotation(theta = 0) {
  class FocusVisibleCoordinator (line 41576) | class FocusVisibleCoordinator extends SuperClass {
    method constructor (line 41577) | constructor() {
    method connectedCallback (line 41583) | connectedCallback() {
    method disconnectedCallback (line 41589) | disconnectedCallback() {

FILE: 17-Crowd-Funding-Dapp/Frontend/.vite/deps_temp_6cf5ba4c/QRCodeRenderer-ZNSMXL36.js
  method constructor (line 81) | constructor(version, ecc, dataCodewords, msk) {
  method getModule (line 122) | getModule(x, y) {
  method drawFunctionPatterns (line 127) | drawFunctionPatterns() {
  method drawFormatBits (line 148) | drawFormatBits(mask) {
  method drawVersion (line 169) | drawVersion() {
  method drawFinderPattern (line 186) | drawFinderPattern(x, y) {
  method drawAlignmentPattern (line 199) | drawAlignmentPattern(x, y) {
  method setFunctionModule (line 213) | setFunctionModule(x, y, isDark, type = QrCodeDataType.Function) {
  method addEccAndInterleave (line 220) | addEccAndInterleave(data) {
  method drawCodewords (line 251) | drawCodewords(data) {
  method applyMask (line 276) | applyMask(mask) {
  method getPenaltyScore (line 317) | getPenaltyScore() {
  method getAlignmentPatternPositions (line 380) | getAlignmentPatternPositions() {
  method finderPenaltyCountPatterns (line 394) | finderPenaltyCountPatterns(runHistory) {
  method finderPenaltyTerminateAndCount (line 400) | finderPenaltyTerminateAndCount(currentRunColor, currentRunLength, runHis...
  method finderPenaltyAddHistory (line 410) | finderPenaltyAddHistory(currentRunLength, runHistory) {
  function appendBits (line 417) | function appendBits(val, len, bb) {
  function getBit (line 423) | function getBit(x, i) {
  method constructor (line 430) | constructor(mode, numChars, bitData) {
  method getData (line 440) | getData() {
  function numCharCountBits (line 447) | function numCharCountBits(mode, ver) {
  function makeBytes (line 450) | function makeBytes(data) {
  function makeNumeric (line 456) | function makeNumeric(digits) {
  function makeAlphanumeric (line 467) | function makeAlphanumeric(text) {
  function makeSegments (line 481) | function makeSegments(text) {
  function isNumeric (line 491) | function isNumeric(text) {
  function isAlphanumeric (line 494) | function isAlphanumeric(text) {
  function getTotalBits (line 497) | function getTotalBits(segs, version) {
  function toUtf8ByteArray (line 507) | function toUtf8ByteArray(str) {
  function getNumRawDataModules (line 520) | function getNumRawDataModules(ver) {
  function getNumDataCodewords (line 532) | function getNumDataCodewords(ver, ecl) {
  function reedSolomonComputeDivisor (line 535) | function reedSolomonComputeDivisor(degree) {
  function reedSolomonComputeRemainder (line 553) | function reedSolomonComputeRemainder(data, divisor) {
  function reedSolomonMultiply (line 562) | function reedSolomonMultiply(x, y) {
  function encodeSegments (line 572) | function encodeSegments(segs, ecl, minVersion = 1, maxVersion = 40, mask...
  function encode (line 607) | function encode(data, options) {
  function addBorder (line 640) | function addBorder(input, border = 1) {
  function QRCodeRenderer (line 671) | function QRCodeRenderer({ ecl = "M", size: sizeProp = 200, uri, clearSiz...

FILE: 17-Crowd-Funding-Dapp/Frontend/.vite/deps_temp_6cf5ba4c/balanceOf-77XLALLF.js
  function isBalanceOfSupported (line 53) | function isBalanceOfSupported(availableSelectors) {
  function encodeBalanceOfParams (line 59) | function encodeBalanceOfParams(options) {
  function encodeBalanceOf (line 62) | function encodeBalanceOf(options) {
  function decodeBalanceOfResult (line 65) | function decodeBalanceOfResult(result) {
  function balanceOf (line 68) | async function balanceOf(options) {

FILE: 17-Crowd-Funding-Dapp/Frontend/.vite/deps_temp_6cf5ba4c/biconomy-PIJEZ3DY.js
  function prepareBiconomyTransaction (line 45) | async function prepareBiconomyTransaction({ account, serializableTransac...
  function relayBiconomyTransaction (line 99) | async function relayBiconomyTransaction(options) {

FILE: 17-Crowd-Funding-Dapp/Frontend/.vite/deps_temp_6cf5ba4c/buyFromListing-NAQIOY7I.js
  function isBuyFromListingSupported (line 76) | function isBuyFromListingSupported(availableSelectors) {
  function buyFromListing (line 82) | function buyFromListing(options) {
  function buyFromListing2 (line 139) | function buyFromListing2(options) {
  function isBuyFromListingSupported2 (line 170) | function isBuyFromListingSupported2(availableSelectors) {

FILE: 17-Crowd-Funding-Dapp/Frontend/.vite/deps_temp_6cf5ba4c/checkContractWalletSignature-6DFUQS7E.js
  function checkContractWalletSignature (line 37) | async function checkContractWalletSignature(options) {

FILE: 17-Crowd-Funding-Dapp/Frontend/.vite/deps_temp_6cf5ba4c/checkContractWalletSignedTypedData-SEVCYJA7.js
  function checkContractWalletSignedTypedData (line 37) | async function checkContractWalletSignedTypedData(options) {

FILE: 17-Crowd-Funding-Dapp/Frontend/.vite/deps_temp_6cf5ba4c/chunk-253DMNI3.js
  function isClaimConditionSupported (line 54) | function isClaimConditionSupported(availableSelectors) {
  function decodeClaimConditionResult (line 60) | function decodeClaimConditionResult(result) {
  function claimCondition (line 63) | async function claimCondition(options) {

FILE: 17-Crowd-Funding-Dapp/Frontend/.vite/deps_temp_6cf5ba4c/chunk-2HYPHUAF.js
  function smartWallet (line 22) | function smartWallet(createOptions) {

FILE: 17-Crowd-Funding-Dapp/Frontend/.vite/deps_temp_6cf5ba4c/chunk-2MTJELC7.js
  method "node_modules/react/cjs/react.development.js" (line 7) | "node_modules/react/cjs/react.development.js"(exports, module) {
  method "node_modules/react/index.js" (line 1881) | "node_modules/react/index.js"(exports, module) {

FILE: 17-Crowd-Funding-Dapp/Frontend/.vite/deps_temp_6cf5ba4c/chunk-2RRVHQYX.js
  function showCoinbasePopup (line 2) | async function showCoinbasePopup(provider) {

FILE: 17-Crowd-Funding-Dapp/Frontend/.vite/deps_temp_6cf5ba4c/chunk-35YKZJSE.js
  method deleteProperty (line 143) | deleteProperty(target, prop) {
  method set (line 152) | set(target, prop, value, receiver) {
  function proxy (line 226) | function proxy(initialObject = {}) {
  function subscribe (line 229) | function subscribe(proxyObject, callback, notifyInSync) {
  function snapshot (line 260) | function snapshot(proxyObject, handlePromise) {
  method subscribe (line 277) | subscribe(callback) {
  method push (line 280) | push(view, data) {
  method reset (line 289) | reset(view) {
  method replace (line 293) | replace(view) {
  method goBack (line 299) | goBack() {
  method setData (line 306) | setData(data) {
  method isMobile (line 314) | isMobile() {
  method isAndroid (line 322) | isAndroid() {
  method isIos (line 325) | isIos() {
  method isHttpUrl (line 329) | isHttpUrl(url) {
  method isArray (line 332) | isArray(data) {
  method isTelegram (line 335) | isTelegram() {
  method formatNativeUrl (line 341) | formatNativeUrl(appUrl, wcUri, name) {
  method formatUniversalUrl (line 357) | formatUniversalUrl(appUrl, wcUri, name) {
  method wait (line 380) | async wait(miliseconds) {
  method openHref (line 385) | openHref(href, target) {
  method setWalletConnectDeepLink (line 389) | setWalletConnectDeepLink(href, name) {
  method setWalletConnectAndroidDeepLink (line 396) | setWalletConnectAndroidDeepLink(wcUri) {
  method removeWalletConnectDeepLink (line 407) | removeWalletConnectDeepLink() {
  method setModalVersionInStorage (line 414) | setModalVersionInStorage() {
  method getWalletRouterData (line 423) | getWalletRouterData() {
  method subscribe (line 441) | subscribe(callback) {
  method initialize (line 444) | initialize() {
  method setConnectedWalletId (line 449) | setConnectedWalletId(connectedWalletId) {
  method click (line 452) | click(data) {
  method track (line 464) | track(data) {
  method view (line 476) | view(data) {
  method subscribe (line 500) | subscribe(callback) {
  method setChains (line 503) | setChains(chains) {
  method setWalletConnectUri (line 506) | setWalletConnectUri(walletConnectUri) {
  method setIsCustomDesktop (line 509) | setIsCustomDesktop(isCustomDesktop) {
  method setIsCustomMobile (line 512) | setIsCustomMobile(isCustomMobile) {
  method setIsDataLoaded (line 515) | setIsDataLoaded(isDataLoaded) {
  method setIsUiLoaded (line 518) | setIsUiLoaded(isUiLoaded) {
  method setIsAuth (line 521) | setIsAuth(isAuth) {
  method subscribe (line 540) | subscribe(callback) {
  method setConfig (line 543) | setConfig(config) {
  function fetchListings (line 573) | async function fetchListings(endpoint, params) {
  method getDesktopListings (line 586) | async getDesktopListings(params) {
  method getMobileListings (line 589) | async getMobileListings(params) {
  method getInjectedListings (line 592) | async getInjectedListings(params) {
  method getAllListings (line 595) | async getAllListings(params) {
  method getWalletImageUrl (line 598) | getWalletImageUrl(imageId) {
  method getAssetImageUrl (line 601) | getAssetImageUrl(imageId) {
  method getRecomendedWallets (line 629) | async getRecomendedWallets() {
  method getWallets (line 662) | async getWallets(params) {
  method getWalletImageUrl (line 691) | getWalletImageUrl(imageId) {
  method getAssetImageUrl (line 694) | getAssetImageUrl(imageId) {
  method resetSearch (line 697) | resetSearch() {
  method subscribe (line 706) | subscribe(callback) {
  method open (line 709) | async open(options) {
  method close (line 731) | close() {
  function isDarkMode (line 751) | function isDarkMode() {
  method subscribe (line 759) | subscribe(callback) {
  method setThemeConfig (line 762) | setThemeConfig(theme) {
  method subscribe (line 779) | subscribe(callback) {
  method openToast (line 782) | openToast(message, variant) {
  method closeToast (line 787) | closeToast() {

FILE: 17-Crowd-Funding-Dapp/Frontend/.vite/deps_temp_6cf5ba4c/chunk-36FW3ZLE.js
  function isTokenURISupported (line 27) | function isTokenURISupported(availableSelectors) {
  function tokenURI (line 33) | async function tokenURI(options) {
  function getNFT (line 42) | async function getNFT(options) {

FILE: 17-Crowd-Funding-Dapp/Frontend/.vite/deps_temp_6cf5ba4c/chunk-3DBHE3NE.js
  function createStore (line 2) | function createStore(initialValue) {
  function getTransactionStore (line 32) | function getTransactionStore(address) {
  function addTransactionToStore (line 41) | function addTransactionToStore(options) {

FILE: 17-Crowd-Funding-Dapp/Frontend/.vite/deps_temp_6cf5ba4c/chunk-3GSJ2FQJ.js
  function isJWT (line 13) | function isJWT(str) {
  function getClientFetch (line 25) | function getClientFetch(client, ecosystem) {
  function isThirdwebUrl (line 81) | function isThirdwebUrl(url) {
  function isPayUrl (line 104) | function isPayUrl(url) {
  function isInAppWalletUrl (line 112) | function isInAppWalletUrl(url) {
  function isBundlerUrl (line 120) | function isBundlerUrl(url) {
  function getPlatformHeaders (line 130) | function getPlatformHeaders() {
  function parseOs (line 151) | function parseOs(os) {

FILE: 17-Crowd-Funding-Dapp/Frontend/.vite/deps_temp_6cf5ba4c/chunk-3ZOYRTTJ.js
  function isObject (line 2) | function isObject(value) {
  function isObjectWithKeys (line 5) | function isObjectWithKeys(value, keys = []) {

FILE: 17-Crowd-Funding-Dapp/Frontend/.vite/deps_temp_6cf5ba4c/chunk-4BCIASJM.js
  function concatHex (line 6) | function concatHex(values) {

FILE: 17-Crowd-Funding-Dapp/Frontend/.vite/deps_temp_6cf5ba4c/chunk-4OCU6WGG.js
  function sleep (line 2) | function sleep(ms) {

FILE: 17-Crowd-Funding-Dapp/Frontend/.vite/deps_temp_6cf5ba4c/chunk-4PEUWIWY.js
  function eth_getBalance (line 6) | async function eth_getBalance(request, params) {

FILE: 17-Crowd-Funding-Dapp/Frontend/.vite/deps_temp_6cf5ba4c/chunk-4RRAU5V7.js
  function decimals2 (line 9) | async function decimals2(options) {

FILE: 17-Crowd-Funding-Dapp/Frontend/.vite/deps_temp_6cf5ba4c/chunk-4U2YWK76.js
  function fetchTokenMetadata (line 10) | async function fetchTokenMetadata(options) {

FILE: 17-Crowd-Funding-Dapp/Frontend/.vite/deps_temp_6cf5ba4c/chunk-5CO5G7XZ.js
  function download (line 9) | async function download(options) {

FILE: 17-Crowd-Funding-Dapp/Frontend/.vite/deps_temp_6cf5ba4c/chunk-5EFACFVF.js
  function toBigInt (line 53) | function toBigInt(value) {
  method constructor (line 78) | constructor() {
  function isEIP712Transaction (line 90) | function isEIP712Transaction(transaction) {
  function assertEip712Transaction (line 99) | function assertEip712Transaction(transaction) {
  function serializeTransaction2 (line 120) | function serializeTransaction2(transaction, signature) {
  function serializeTransactionEIP712 (line 128) | function serializeTransactionEIP712(transaction) {
  method constructor (line 158) | constructor({ givenLength, maxBytecodeSize: maxBytecodeSize2 }) {
  method constructor (line 163) | constructor({ givenLengthInWords }) {
  method constructor (line 168) | constructor({ givenLength }) {
  function hashBytecode (line 174) | function hashBytecode(bytecode) {
  method format (line 204) | format(args) {
  method format (line 225) | format(args) {
  method format (line 239) | format(args) {
  method format (line 277) | format(args) {
  function transactionToMessage (line 333) | function transactionToMessage(transaction) {
  function transactionToMessage2 (line 499) | function transactionToMessage2(transaction) {
  function sendEip712Transaction2 (line 519) | async function sendEip712Transaction2(options) {
  function signEip712Transaction2 (line 535) | async function signEip712Transaction2(options) {
  function populateEip712Transaction (line 548) | async function populateEip712Transaction(options) {
  function serializeTransactionEIP7122 (line 567) | function serializeTransactionEIP7122(transaction) {
  function getZkGasFees (line 590) | async function getZkGasFees(args) {
  function formatTransaction (line 624) | async function formatTransaction(args) {

FILE: 17-Crowd-Funding-Dapp/Frontend/.vite/deps_temp_6cf5ba4c/chunk-5THTWD2M.js
  function handleSendRawTransactionRequest (line 19) | async function handleSendRawTransactionRequest(options) {
  function validateAccountAddress (line 32) | function validateAccountAddress(account, address) {
  function parseEip155ChainId (line 37) | function parseEip155ChainId(chainId) {
  function handleSendTransactionRequest (line 47) | async function handleSendTransactionRequest(options) {
  function handleSignTransactionRequest (line 69) | async function handleSignTransactionRequest(options) {
  function handleSignTypedDataRequest (line 88) | async function handleSignTypedDataRequest(options) {
  function handleSignRequest (line 98) | async function handleSignRequest(options) {

FILE: 17-Crowd-Funding-Dapp/Frontend/.vite/deps_temp_6cf5ba4c/chunk-5U5XBS6S.js
  function isHttpUrl (line 2) | function isHttpUrl(url) {
  function formatUniversalUrl (line 5) | function formatUniversalUrl(appUrl, wcUri) {
  function formatNativeUrl (line 19) | function formatNativeUrl(appUrl, wcUri) {
  function formatWalletConnectUrl (line 37) | function formatWalletConnectUrl(appUrl, wcUri) {
  function formatExplorerTxUrl (line 40) | function formatExplorerTxUrl(explorerUrl, txHash) {
  function formatExplorerAddressUrl (line 43) | function formatExplorerAddressUrl(explorerUrl, address) {

FILE: 17-Crowd-Funding-Dapp/Frontend/.vite/deps_temp_6cf5ba4c/chunk-65EUCVOP.js
  function getInAppWalletConnector (line 6) | async function getInAppWalletConnector(client, ecosystem) {
  function getAuthenticatedUser (line 15) | async function getAuthenticatedUser(options) {
  function getUserEmail (line 26) | async function getUserEmail(options) {
  function getUserPhoneNumber (line 33) | async function getUserPhoneNumber(options) {
  function preAuthenticate (line 40) | async function preAuthenticate(args) {
  function authenticate (line 44) | async function authenticate(args) {
  function authenticateWithRedirect (line 48) | async function authenticateWithRedirect(args) {
  function linkProfile (line 55) | async function linkProfile(args) {
  function getProfiles (line 59) | async function getProfiles(args) {

FILE: 17-Crowd-Funding-Dapp/Frontend/.vite/deps_temp_6cf5ba4c/chunk-673YCYST.js
  function isNativeTokenAddress (line 3) | function isNativeTokenAddress(address) {

FILE: 17-Crowd-Funding-Dapp/Frontend/.vite/deps_temp_6cf5ba4c/chunk-67BSOYLQ.js
  function keccak256 (line 11) | function keccak256(value, to) {

FILE: 17-Crowd-Funding-Dapp/Frontend/.vite/deps_temp_6cf5ba4c/chunk-6FLJU7W7.js
  function resolveArweaveScheme (line 3) | function resolveArweaveScheme(options) {

FILE: 17-Crowd-Funding-Dapp/Frontend/.vite/deps_temp_6cf5ba4c/chunk-6LAJV43E.js
  method constructor (line 8) | constructor(cssText, strings, safeToken) {
  method styleSheet (line 18) | get styleSheet() {
  method toString (line 35) | toString() {
  method createTreeWalker (line 136) | createTreeWalker() {
  function trustFromTemplateString (line 191) | function trustFromTemplateString(tsa, stringFromTSA) {
  method constructor (line 276) | constructor({ strings, ["_$litType$"]: type }, options) {
  method createElement (line 370) | static createElement(html2, _options) {
  function resolveDirective (line 376) | function resolveDirective(part, value, parent = part, attributeIndex) {
  method constructor (line 407) | constructor(template, parent) {
  method parentNode (line 414) | get parentNode() {
  method _$isConnected (line 418) | get _$isConnected() {
  method _clone (line 423) | _clone(options) {
  method _update (line 453) | _update(values) {
  method constructor (line 477) | constructor(startNode, endNode, parent, options) {
  method _$isConnected (line 492) | get _$isConnected() {
  method parentNode (line 514) | get parentNode() {
  method startNode (line 526) | get startNode() {
  method endNode (line 533) | get endNode() {
  method _$setValue (line 536) | _$setValue(value, directiveParent = this) {
  method _insert (line 573) | _insert(node) {
  method _commitNode (line 576) | _commitNode(value) {
  method _commitText (line 604) | _commitText(value) {
  method _commitTemplateResult (line 647) | _commitTemplateResult(result) {
  method _$getTemplate (line 689) | _$getTemplate(result) {
  method _commitIterable (line 696) | _commitIterable(value) {
  method _$clear (line 729) | _$clear(start = wrap(this._$startNode).nextSibling, from) {
  method setConnected (line 745) | setConnected(isConnected) {
  method constructor (line 756) | constructor(element, name, strings, parent, options) {
  method tagName (line 774) | get tagName() {
  method _$isConnected (line 778) | get _$isConnected() {
  method _$setValue (line 803) | _$setValue(value, directiveParent = this, valueIndex, noCommit) {
  method _commitValue (line 835) | _commitValue(value) {
  method constructor (line 857) | constructor() {
  method _commitValue (line 862) | _commitValue(value) {
  method constructor (line 881) | constructor() {
  method _commitValue (line 886) | _commitValue(value) {
  method constructor (line 902) | constructor(element, name, strings, parent, options) {
  method _$setValue (line 912) | _$setValue(newListener, directiveParent = this) {
  method handleEvent (line 939) | handleEvent(event) {
  method constructor (line 949) | constructor(element, parent, options) {
  method _$isConnected (line 957) | get _$isConnected() {
  method _$setValue (line 960) | _$setValue(value) {
  method toAttribute (line 1065) | toAttribute(value, type) {
  method fromAttribute (line 1077) | fromAttribute(value, type) {
  method constructor (line 1110) | constructor() {
  method addInitializer (line 1151) | static addInitializer(initializer) {
  method observedAttributes (line 1161) | static get 
Copy disabled (too large) Download .json
Condensed preview — 1601 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (10,733K chars).
[
  {
    "path": ".gitignore",
    "chars": 270,
    "preview": "node_modules\n.env\nsecret.json\n\n# Hardhat files\n/cache\n/artifacts\n\n# TypeChain files\n/typechain\n/typechain-types\n\n# solid"
  },
  {
    "path": "01-Simple Storage Full Stack Dapp/.babelrc",
    "chars": 136,
    "preview": "{\n  \"presets\": [\n    \"@babel/preset-env\",\n    [\"@babel/preset-react\", { \"runtime\": \"automatic\" }],\n    \"@babel/preset-ty"
  },
  {
    "path": "01-Simple Storage Full Stack Dapp/.editorconfig",
    "chars": 148,
    "preview": "root = true\n\n[*]\nindent_style = spaces\nindent_size = 2\nend_of_line = lf\ncharset = utf-8\ntrim_trailing_whitespace = true\n"
  },
  {
    "path": "01-Simple Storage Full Stack Dapp/.eslintrc",
    "chars": 1088,
    "preview": "{\n  \"env\": {\n    \"browser\": true,\n    \"es2020\": true,\n    \"jest\": true,\n    \"node\": true\n  },\n  \"settings\": {\n    \"react"
  },
  {
    "path": "01-Simple Storage Full Stack Dapp/.gitignore",
    "chars": 349,
    "preview": "dist\ndist-ssr\n*.local\n\n# dependencies\n/node_modules\n/.pnp\n.pnp.js\n\n# testing\n/coverage\n\n# next.js\n/.next/\n/out/\n\n# produ"
  },
  {
    "path": "01-Simple Storage Full Stack Dapp/.jest/setup.ts",
    "chars": 35,
    "preview": "import '@testing-library/jest-dom'\n"
  },
  {
    "path": "01-Simple Storage Full Stack Dapp/.prettierrc",
    "chars": 70,
    "preview": "{\n  \"trailingComma\": \"none\",\n  \"semi\": false,\n  \"singleQuote\": true\n}\n"
  },
  {
    "path": "01-Simple Storage Full Stack Dapp/README.md",
    "chars": 13340,
    "preview": "# Simple Storage dApp on Core\nDecentralized applications (dApps) use a blockchain or on-chain smart contracts to store a"
  },
  {
    "path": "01-Simple Storage Full Stack Dapp/index.html",
    "chars": 386,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <link rel=\"icon\" type=\"image/svg+xml\" href=\"/"
  },
  {
    "path": "01-Simple Storage Full Stack Dapp/jest.config.js",
    "chars": 268,
    "preview": "module.exports = {\n  testEnvironment: 'jsdom',\n  testPathIgnorePatterns: ['/node_modules/'],\n  collectCoverage: true,\n  "
  },
  {
    "path": "01-Simple Storage Full Stack Dapp/package.json",
    "chars": 1454,
    "preview": "{\n  \"name\": \"Tutorial\",\n  \"description\": \"This tutorial provides a step-by-step guide on how to store and retrieve data "
  },
  {
    "path": "01-Simple Storage Full Stack Dapp/postcss.config.js",
    "chars": 80,
    "preview": "module.exports = {\n  plugins: {\n    tailwindcss: {},\n    autoprefixer: {}\n  }\n}\n"
  },
  {
    "path": "01-Simple Storage Full Stack Dapp/src/components/App.tsx",
    "chars": 7903,
    "preview": "/* eslint-disable tailwindcss/no-custom-classname */\n/* eslint-disable tailwindcss/classnames-order */\n/* eslint-disable"
  },
  {
    "path": "01-Simple Storage Full Stack Dapp/src/contract/Storage.json",
    "chars": 435,
    "preview": "{\n\t\"abi\": [\n\t\t{\n\t\t\t\"inputs\": [],\n\t\t\t\"name\": \"retrieve\",\n\t\t\t\"outputs\": [\n\t\t\t\t{\n\t\t\t\t\t\"internalType\": \"uint256\",\n\t\t\t\t\t\"name"
  },
  {
    "path": "01-Simple Storage Full Stack Dapp/src/contract/Storage.sol",
    "chars": 547,
    "preview": "// SPDX-License-Identifier: GPL-3.0\n\npragma solidity ^0.8.7;\n\n/**\n * @title Storage\n * @dev Store & retrieve value in a "
  },
  {
    "path": "01-Simple Storage Full Stack Dapp/src/index.tsx",
    "chars": 266,
    "preview": "import { createRoot } from 'react-dom/client'\nimport 'tailwindcss/tailwind.css'\nimport './style/index.css'\nimport App fr"
  },
  {
    "path": "01-Simple Storage Full Stack Dapp/src/style/index.css",
    "chars": 291,
    "preview": "@tailwind base;\n@tailwind components;\n@tailwind utilities;\n\n@layer components {\n\t:root{\n\n\t}\n  .btn-primary {\n    @apply "
  },
  {
    "path": "01-Simple Storage Full Stack Dapp/src/utils/index.ts",
    "chars": 105,
    "preview": "export function classNames(...classes: unknown[]): string {\n  return classes.filter(Boolean).join(' ')\n}\n"
  },
  {
    "path": "01-Simple Storage Full Stack Dapp/src/vite-env.d.ts",
    "chars": 172,
    "preview": "/* eslint-disable @typescript-eslint/no-explicit-any */\n/// <reference types=\"vite/client\" />\n\n/// <reference types=\"rea"
  },
  {
    "path": "01-Simple Storage Full Stack Dapp/tailwind.config.js",
    "chars": 156,
    "preview": "/** @type {import('tailwindcss').Config} */\n\nmodule.exports = {\n  content: ['./src/**/*.{js,ts,jsx,tsx}'],\n  theme: {\n  "
  },
  {
    "path": "01-Simple Storage Full Stack Dapp/tsconfig.json",
    "chars": 521,
    "preview": "{\n  \"compilerOptions\": {\n    \"baseUrl\": \"./src\",\n    \"target\": \"esnext\",\n    \"lib\": [\"dom\", \"dom.iterable\", \"esnext\"],\n "
  },
  {
    "path": "01-Simple Storage Full Stack Dapp/vite.config.ts",
    "chars": 227,
    "preview": "import { defineConfig } from 'vite'\nimport react from '@vitejs/plugin-react'\nimport tsconfigPaths from 'vite-tsconfig-pa"
  },
  {
    "path": "02-Basic Staking Full Stack Dapp/.gitignore",
    "chars": 271,
    "preview": "node_modules\n.env\nsecret.json\n\n# Hardhat files\n/cache\n/artifacts\n\n# TypeChain files\n/typechain\n/typechain-types\n\n# solid"
  },
  {
    "path": "02-Basic Staking Full Stack Dapp/README.md",
    "chars": 18529,
    "preview": "# Building a Staking Dapp on Core \n\n## What are we building\nWelcome to this tutorial on building a simple staking dApp o"
  },
  {
    "path": "02-Basic Staking Full Stack Dapp/contracts/RewardToken.sol",
    "chars": 581,
    "preview": "// SPDX-License-Identifier: MIT\n// Compatible with OpenZeppelin Contracts ^5.0.0\npragma solidity ^0.8.20;\n\nimport \"@open"
  },
  {
    "path": "02-Basic Staking Full Stack Dapp/contracts/StakingDapp.sol",
    "chars": 3886,
    "preview": "// SPDX-License-Identifier: MIT\npragma solidity 0.8.24;\n\nimport \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport"
  },
  {
    "path": "02-Basic Staking Full Stack Dapp/contracts/StakingToken.sol",
    "chars": 657,
    "preview": "// SPDX-License-Identifier: MIT\n// Compatible with OpenZeppelin Contracts ^5.0.0\npragma solidity ^0.8.20;\n\nimport \"@open"
  },
  {
    "path": "02-Basic Staking Full Stack Dapp/frontend/.gitignore",
    "chars": 310,
    "preview": "# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.\n\n# dependencies\n/node_modules\n/.pn"
  },
  {
    "path": "02-Basic Staking Full Stack Dapp/frontend/README.md",
    "chars": 3359,
    "preview": "# Getting Started with Create React App\n\nThis project was bootstrapped with [Create React App](https://github.com/facebo"
  },
  {
    "path": "02-Basic Staking Full Stack Dapp/frontend/package.json",
    "chars": 917,
    "preview": "{\n  \"name\": \"frontend_ui\",\n  \"version\": \"0.1.0\",\n  \"private\": true,\n  \"dependencies\": {\n    \"@testing-library/jest-dom\":"
  },
  {
    "path": "02-Basic Staking Full Stack Dapp/frontend/public/index.html",
    "chars": 1721,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <link rel=\"icon\" href=\"%PUBLIC_URL%/favicon.i"
  },
  {
    "path": "02-Basic Staking Full Stack Dapp/frontend/public/manifest.json",
    "chars": 492,
    "preview": "{\n  \"short_name\": \"React App\",\n  \"name\": \"Create React App Sample\",\n  \"icons\": [\n    {\n      \"src\": \"favicon.ico\",\n     "
  },
  {
    "path": "02-Basic Staking Full Stack Dapp/frontend/public/robots.txt",
    "chars": 67,
    "preview": "# https://www.robotstxt.org/robotstxt.html\nUser-agent: *\nDisallow:\n"
  },
  {
    "path": "02-Basic Staking Full Stack Dapp/frontend/src/App.css",
    "chars": 7125,
    "preview": "@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap');\n\n:root {\n  /* Light"
  },
  {
    "path": "02-Basic Staking Full Stack Dapp/frontend/src/App.js",
    "chars": 18561,
    "preview": "import { useEffect, useState, useCallback } from \"react\";\nimport { ethers } from \"ethers\";\nimport StakingToken from \"./c"
  },
  {
    "path": "02-Basic Staking Full Stack Dapp/frontend/src/App.test.js",
    "chars": 246,
    "preview": "import { render, screen } from '@testing-library/react';\nimport App from './App';\n\ntest('renders learn react link', () ="
  },
  {
    "path": "02-Basic Staking Full Stack Dapp/frontend/src/components/Modal.css",
    "chars": 925,
    "preview": "/* components/Modal.module.css */\n.modalOverlay {\n    position: fixed;\n    top: 0;\n    left: 0;\n    right: 0;\n    bottom"
  },
  {
    "path": "02-Basic Staking Full Stack Dapp/frontend/src/components/Modal.js",
    "chars": 539,
    "preview": "import React from 'react';\n\nconst Modal = ({ isOpen, onClose, onClaim, rewardAmount }) => {\n  if (!isOpen) return null;\n"
  },
  {
    "path": "02-Basic Staking Full Stack Dapp/frontend/src/contracts/IRewardToken.json",
    "chars": 4350,
    "preview": "{\n  \"_format\": \"hh-sol-artifact-1\",\n  \"contractName\": \"IRewardToken\",\n  \"sourceName\": \"contracts/StakingDapp.sol\",\n  \"ab"
  },
  {
    "path": "02-Basic Staking Full Stack Dapp/frontend/src/contracts/RewardToken.json",
    "chars": 32827,
    "preview": "{\n  \"_format\": \"hh-sol-artifact-1\",\n  \"contractName\": \"RewardToken\",\n  \"sourceName\": \"contracts/RewardToken.sol\",\n  \"abi"
  },
  {
    "path": "02-Basic Staking Full Stack Dapp/frontend/src/contracts/StakingDapp.json",
    "chars": 19002,
    "preview": "{\n  \"_format\": \"hh-sol-artifact-1\",\n  \"contractName\": \"StakingDapp\",\n  \"sourceName\": \"contracts/StakingDapp.sol\",\n  \"abi"
  },
  {
    "path": "02-Basic Staking Full Stack Dapp/frontend/src/contracts/StakingToken.json",
    "chars": 33185,
    "preview": "{\n  \"_format\": \"hh-sol-artifact-1\",\n  \"contractName\": \"StakingToken\",\n  \"sourceName\": \"contracts/StakingToken.sol\",\n  \"a"
  },
  {
    "path": "02-Basic Staking Full Stack Dapp/frontend/src/index.css",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "02-Basic Staking Full Stack Dapp/frontend/src/index.js",
    "chars": 535,
    "preview": "import React from 'react';\nimport ReactDOM from 'react-dom/client';\nimport './index.css';\nimport App from './App';\nimpor"
  },
  {
    "path": "02-Basic Staking Full Stack Dapp/frontend/src/reportWebVitals.js",
    "chars": 362,
    "preview": "const reportWebVitals = onPerfEntry => {\n  if (onPerfEntry && onPerfEntry instanceof Function) {\n    import('web-vitals'"
  },
  {
    "path": "02-Basic Staking Full Stack Dapp/frontend/src/setupTests.js",
    "chars": 241,
    "preview": "// jest-dom adds custom jest matchers for asserting on DOM nodes.\n// allows you to do things like:\n// expect(element).to"
  },
  {
    "path": "02-Basic Staking Full Stack Dapp/hardhat.config.js",
    "chars": 872,
    "preview": "/**\n * @type import('hardhat/config').HardhatUserConfig\n */\n\nrequire('@nomiclabs/hardhat-ethers');\nrequire(\"@nomiclabs/h"
  },
  {
    "path": "02-Basic Staking Full Stack Dapp/ignition/modules/Lock.js",
    "chars": 434,
    "preview": "const { buildModule } = require(\"@nomicfoundation/hardhat-ignition/modules\");\n\nconst JAN_1ST_2030 = 1893456000;\nconst ON"
  },
  {
    "path": "02-Basic Staking Full Stack Dapp/package.json",
    "chars": 657,
    "preview": "{\n  \"name\": \"staking-dapp\",\n  \"version\": \"1.0.0\",\n  \"description\": \"\",\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"test\": "
  },
  {
    "path": "02-Basic Staking Full Stack Dapp/scripts/deploy.js",
    "chars": 992,
    "preview": "const { ethers } = require(\"hardhat\");\n\nasync function main() {\n    const [deployer] = await ethers.getSigners();\n\n    c"
  },
  {
    "path": "03-Decentralized Guestbook/.gitignore",
    "chars": 242,
    "preview": "# Node.js dependencies\n/node_modules\n\n# Hardhat artifacts\n/artifacts\n/cache\n\n# Environment and secret files\n.env\n.secret"
  },
  {
    "path": "03-Decentralized Guestbook/README.md",
    "chars": 13919,
    "preview": "# Guestbook dApp Tutorial / Boilerplate\n\n## Overview\n\nThis guide will walk you through creating a decentralized guestboo"
  },
  {
    "path": "03-Decentralized Guestbook/contracts/Guestbook.sol",
    "chars": 632,
    "preview": "// SPDX-License-Identifier: GPL-3.0\npragma solidity >=0.7.0 <0.9.0;\n\n/// @title Guestbook\ncontract Guestbook {\n    struc"
  },
  {
    "path": "03-Decentralized Guestbook/frontend/.gitignore",
    "chars": 310,
    "preview": "# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.\n\n# dependencies\n/node_modules\n/.pn"
  },
  {
    "path": "03-Decentralized Guestbook/frontend/README.md",
    "chars": 3359,
    "preview": "# Getting Started with Create React App\n\nThis project was bootstrapped with [Create React App](https://github.com/facebo"
  },
  {
    "path": "03-Decentralized Guestbook/frontend/package.json",
    "chars": 828,
    "preview": "{\n  \"name\": \"frontend\",\n  \"version\": \"0.1.0\",\n  \"private\": true,\n  \"dependencies\": {\n    \"@testing-library/jest-dom\": \"5"
  },
  {
    "path": "03-Decentralized Guestbook/frontend/public/index.html",
    "chars": 1721,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <link rel=\"icon\" href=\"%PUBLIC_URL%/favicon.i"
  },
  {
    "path": "03-Decentralized Guestbook/frontend/public/manifest.json",
    "chars": 492,
    "preview": "{\n  \"short_name\": \"React App\",\n  \"name\": \"Create React App Sample\",\n  \"icons\": [\n    {\n      \"src\": \"favicon.ico\",\n     "
  },
  {
    "path": "03-Decentralized Guestbook/frontend/public/robots.txt",
    "chars": 67,
    "preview": "# https://www.robotstxt.org/robotstxt.html\nUser-agent: *\nDisallow:\n"
  },
  {
    "path": "03-Decentralized Guestbook/frontend/src/App.css",
    "chars": 564,
    "preview": ".App {\n  text-align: center;\n}\n\n.App-logo {\n  height: 40vmin;\n  pointer-events: none;\n}\n\n@media (prefers-reduced-motion:"
  },
  {
    "path": "03-Decentralized Guestbook/frontend/src/App.js",
    "chars": 3508,
    "preview": "import React, { useState, useEffect } from 'react';\nimport { ethers } from 'ethers'; // Updated import for Web3Provider\n"
  },
  {
    "path": "03-Decentralized Guestbook/frontend/src/GuestbookAbi.json",
    "chars": 9549,
    "preview": "{\n  \"_format\": \"hh-sol-artifact-1\",\n  \"contractName\": \"Guestbook\",\n  \"sourceName\": \"contracts/Guestbook.sol\",\n  \"abi\": ["
  },
  {
    "path": "03-Decentralized Guestbook/frontend/src/index.css",
    "chars": 366,
    "preview": "body {\n  margin: 0;\n  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',\n    'Ubuntu', 'Can"
  },
  {
    "path": "03-Decentralized Guestbook/frontend/src/index.js",
    "chars": 535,
    "preview": "import React from 'react';\nimport ReactDOM from 'react-dom/client';\nimport './index.css';\nimport App from './App';\nimpor"
  },
  {
    "path": "03-Decentralized Guestbook/frontend/src/reportWebVitals.js",
    "chars": 362,
    "preview": "const reportWebVitals = onPerfEntry => {\n  if (onPerfEntry && onPerfEntry instanceof Function) {\n    import('web-vitals'"
  },
  {
    "path": "03-Decentralized Guestbook/frontend/src/setupTests.js",
    "chars": 241,
    "preview": "// jest-dom adds custom jest matchers for asserting on DOM nodes.\n// allows you to do things like:\n// expect(element).to"
  },
  {
    "path": "03-Decentralized Guestbook/hardhat.config.js",
    "chars": 514,
    "preview": "require(\"@nomicfoundation/hardhat-toolbox\");\nrequire(\"dotenv\").config();\n\n/** @type import('hardhat/config').HardhatUser"
  },
  {
    "path": "03-Decentralized Guestbook/package.json",
    "chars": 1068,
    "preview": "{\n  \"name\": \"guestbook-dapp\",\n  \"version\": \"1.0.0\",\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"test\": \"echo \\\"Error: no t"
  },
  {
    "path": "03-Decentralized Guestbook/scripts/deploy.js",
    "chars": 324,
    "preview": "const hre = require(\"hardhat\");\n\nasync function main() {\n\n  const Guestbook = await hre.ethers.getContractFactory(\"Guest"
  },
  {
    "path": "04-Pyth Pull Oracles/.gitignore",
    "chars": 257,
    "preview": "node_modules\n.env\n\n# Hardhat files\n/cache\n/artifacts\n\n# TypeChain files\n/typechain\n/typechain-types\n\n# solidity-coverage"
  },
  {
    "path": "04-Pyth Pull Oracles/README.md",
    "chars": 3248,
    "preview": "# Core Pyth Feed Boilerplate\n\nPyth Feed Boilerplate is a React-based dApp for fetching and displaying real-time price fe"
  },
  {
    "path": "04-Pyth Pull Oracles/contracts/PythFeedBoilerplate.sol",
    "chars": 804,
    "preview": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.9;\n\nimport \"@pythnetwork/pyth-sdk-solidity/IPyth.sol\";\nimport \"@pyt"
  },
  {
    "path": "04-Pyth Pull Oracles/frontend/.gitignore",
    "chars": 310,
    "preview": "# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.\n\n# dependencies\n/node_modules\n/.pn"
  },
  {
    "path": "04-Pyth Pull Oracles/frontend/README.md",
    "chars": 3359,
    "preview": "# Getting Started with Create React App\n\nThis project was bootstrapped with [Create React App](https://github.com/facebo"
  },
  {
    "path": "04-Pyth Pull Oracles/frontend/package.json",
    "chars": 879,
    "preview": "{\n  \"name\": \"frontend\",\n  \"version\": \"0.1.0\",\n  \"private\": true,\n  \"dependencies\": {\n    \"@pythnetwork/pyth-sdk-solidity"
  },
  {
    "path": "04-Pyth Pull Oracles/frontend/public/index.html",
    "chars": 1721,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <link rel=\"icon\" href=\"%PUBLIC_URL%/favicon.i"
  },
  {
    "path": "04-Pyth Pull Oracles/frontend/public/manifest.json",
    "chars": 492,
    "preview": "{\n  \"short_name\": \"React App\",\n  \"name\": \"Create React App Sample\",\n  \"icons\": [\n    {\n      \"src\": \"favicon.ico\",\n     "
  },
  {
    "path": "04-Pyth Pull Oracles/frontend/public/robots.txt",
    "chars": 67,
    "preview": "# https://www.robotstxt.org/robotstxt.html\nUser-agent: *\nDisallow:\n"
  },
  {
    "path": "04-Pyth Pull Oracles/frontend/src/App.css",
    "chars": 745,
    "preview": "@import url('https://fonts.googleapis.com/css2?family=Lexend:wght@400;600&display=swap');\n\nbody {\n  background-color: #1"
  },
  {
    "path": "04-Pyth Pull Oracles/frontend/src/App.js",
    "chars": 2294,
    "preview": "import React, { useEffect, useState } from 'react';\nimport { ethers } from 'ethers';\nimport './App.css';\n\n// Import Pyth"
  },
  {
    "path": "04-Pyth Pull Oracles/frontend/src/App.test.js",
    "chars": 246,
    "preview": "import { render, screen } from '@testing-library/react';\nimport App from './App';\n\ntest('renders learn react link', () ="
  },
  {
    "path": "04-Pyth Pull Oracles/frontend/src/PythFeedBoilerplateAbi.json",
    "chars": 8608,
    "preview": "{\n  \"_format\": \"hh-sol-artifact-1\",\n  \"contractName\": \"PythFeedBoilerplate\",\n  \"sourceName\": \"contracts/PythFeedBoilerpl"
  },
  {
    "path": "04-Pyth Pull Oracles/frontend/src/index.css",
    "chars": 366,
    "preview": "body {\n  margin: 0;\n  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',\n    'Ubuntu', 'Can"
  },
  {
    "path": "04-Pyth Pull Oracles/frontend/src/index.js",
    "chars": 535,
    "preview": "import React from 'react';\nimport ReactDOM from 'react-dom/client';\nimport './index.css';\nimport App from './App';\nimpor"
  },
  {
    "path": "04-Pyth Pull Oracles/frontend/src/reportWebVitals.js",
    "chars": 362,
    "preview": "const reportWebVitals = onPerfEntry => {\n  if (onPerfEntry && onPerfEntry instanceof Function) {\n    import('web-vitals'"
  },
  {
    "path": "04-Pyth Pull Oracles/frontend/src/setupTests.js",
    "chars": 241,
    "preview": "// jest-dom adds custom jest matchers for asserting on DOM nodes.\n// allows you to do things like:\n// expect(element).to"
  },
  {
    "path": "04-Pyth Pull Oracles/hardhat.config.js",
    "chars": 885,
    "preview": "require('@nomiclabs/hardhat-ethers');\nrequire(\"@nomiclabs/hardhat-waffle\");\nrequire(\"dotenv\").config();\n\n/** @type impor"
  },
  {
    "path": "04-Pyth Pull Oracles/package.json",
    "chars": 564,
    "preview": "{\n  \"name\": \"pyth-feed-boilerplate\",\n  \"version\": \"1.0.0\",\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"test\": \"echo \\\"Erro"
  },
  {
    "path": "04-Pyth Pull Oracles/scripts/deploy.js",
    "chars": 721,
    "preview": "async function main() {\n    const [deployer] = await ethers.getSigners();\n    console.log(\"Deploying contracts with the "
  },
  {
    "path": "05-Hello-World-Dapp/.gitignore",
    "chars": 269,
    "preview": "node_modules\n.env\nsecret.json\n\n# Hardhat files\n/cache\n/artifacts\n\n# TypeChain files\n/typechain\n/typechain-types\n\n# solid"
  },
  {
    "path": "05-Hello-World-Dapp/README.md",
    "chars": 16290,
    "preview": "# Simple Hello World dApp on Core\nIn this tutorial, you'll learn how to build a simple decentralized application (dApp) "
  },
  {
    "path": "05-Hello-World-Dapp/contracts/HelloWorld.sol",
    "chars": 278,
    "preview": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.26;\n\ncontract HelloWorld {\n    string public message;\n\n    construc"
  },
  {
    "path": "05-Hello-World-Dapp/contracts/Lock.sol",
    "chars": 1008,
    "preview": "// SPDX-License-Identifier: UNLICENSED\npragma solidity ^0.8.24;\n\n// Uncomment this line to use console.log\n// import \"ha"
  },
  {
    "path": "05-Hello-World-Dapp/frontend/.gitignore",
    "chars": 310,
    "preview": "# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.\n\n# dependencies\n/node_modules\n/.pn"
  },
  {
    "path": "05-Hello-World-Dapp/frontend/README.md",
    "chars": 3359,
    "preview": "# Getting Started with Create React App\n\nThis project was bootstrapped with [Create React App](https://github.com/facebo"
  },
  {
    "path": "05-Hello-World-Dapp/frontend/package.json",
    "chars": 890,
    "preview": "{\n  \"name\": \"frontend\",\n  \"version\": \"0.1.0\",\n  \"private\": true,\n  \"dependencies\": {\n    \"@testing-library/jest-dom\": \"5"
  },
  {
    "path": "05-Hello-World-Dapp/frontend/public/index.html",
    "chars": 1721,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <link rel=\"icon\" href=\"%PUBLIC_URL%/favicon.i"
  },
  {
    "path": "05-Hello-World-Dapp/frontend/public/manifest.json",
    "chars": 492,
    "preview": "{\n  \"short_name\": \"React App\",\n  \"name\": \"Create React App Sample\",\n  \"icons\": [\n    {\n      \"src\": \"favicon.ico\",\n     "
  },
  {
    "path": "05-Hello-World-Dapp/frontend/public/robots.txt",
    "chars": 67,
    "preview": "# https://www.robotstxt.org/robotstxt.html\nUser-agent: *\nDisallow:\n"
  },
  {
    "path": "05-Hello-World-Dapp/frontend/src/App.css",
    "chars": 564,
    "preview": ".App {\n  text-align: center;\n}\n\n.App-logo {\n  height: 40vmin;\n  pointer-events: none;\n}\n\n@media (prefers-reduced-motion:"
  },
  {
    "path": "05-Hello-World-Dapp/frontend/src/App.js",
    "chars": 289,
    "preview": "import React from 'react';\nimport './App.css';\nimport HelloWorld from './HelloWorld';\n\nfunction App() {\n    return (\n   "
  },
  {
    "path": "05-Hello-World-Dapp/frontend/src/App.test.js",
    "chars": 246,
    "preview": "import { render, screen } from '@testing-library/react';\nimport App from './App';\n\ntest('renders learn react link', () ="
  },
  {
    "path": "05-Hello-World-Dapp/frontend/src/Contract-ABI/HelloWorld.json",
    "chars": 5975,
    "preview": "{\n  \"_format\": \"hh-sol-artifact-1\",\n  \"contractName\": \"HelloWorld\",\n  \"sourceName\": \"contracts/HelloWorld.sol\",\n  \"abi\":"
  },
  {
    "path": "05-Hello-World-Dapp/frontend/src/HelloWorld.css",
    "chars": 2378,
    "preview": "/* Container for the entire component */\n.container {\n    display: flex;\n    flex-direction: column;\n    align-items: ce"
  },
  {
    "path": "05-Hello-World-Dapp/frontend/src/HelloWorld.js",
    "chars": 3673,
    "preview": "import React, { useState, useEffect } from 'react';\nimport { ethers } from 'ethers';\nimport { toast, ToastContainer } fr"
  },
  {
    "path": "05-Hello-World-Dapp/frontend/src/index.css",
    "chars": 366,
    "preview": "body {\n  margin: 0;\n  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',\n    'Ubuntu', 'Can"
  },
  {
    "path": "05-Hello-World-Dapp/frontend/src/index.js",
    "chars": 535,
    "preview": "import React from 'react';\nimport ReactDOM from 'react-dom/client';\nimport './index.css';\nimport App from './App';\nimpor"
  },
  {
    "path": "05-Hello-World-Dapp/frontend/src/reportWebVitals.js",
    "chars": 362,
    "preview": "const reportWebVitals = onPerfEntry => {\n  if (onPerfEntry && onPerfEntry instanceof Function) {\n    import('web-vitals'"
  },
  {
    "path": "05-Hello-World-Dapp/frontend/src/setupTests.js",
    "chars": 241,
    "preview": "// jest-dom adds custom jest matchers for asserting on DOM nodes.\n// allows you to do things like:\n// expect(element).to"
  },
  {
    "path": "05-Hello-World-Dapp/hardhat.config.js",
    "chars": 804,
    "preview": "require(\"@nomicfoundation/hardhat-toolbox\");\nrequire(\"dotenv\").config();\n\n/** @type import('hardhat/config').HardhatUser"
  },
  {
    "path": "05-Hello-World-Dapp/ignition/modules/Lock.js",
    "chars": 434,
    "preview": "const { buildModule } = require(\"@nomicfoundation/hardhat-ignition/modules\");\n\nconst JAN_1ST_2030 = 1893456000;\nconst ON"
  },
  {
    "path": "05-Hello-World-Dapp/npx",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "05-Hello-World-Dapp/package.json",
    "chars": 563,
    "preview": "{\n  \"name\": \"hardhat-project\",\n  \"devDependencies\": {\n    \"@nomicfoundation/hardhat-toolbox\": \"^5.0.0\",\n    \"hardhat\": \""
  },
  {
    "path": "05-Hello-World-Dapp/scripts/deploy.js",
    "chars": 511,
    "preview": "const { ethers } = require(\"hardhat\");\n\nasync function main() {\n  const [deployer] = await ethers.getSigners();\n\n  conso"
  },
  {
    "path": "05-Hello-World-Dapp/test/HelloWorld.js",
    "chars": 770,
    "preview": "const { expect } = require(\"chai\");\n\ndescribe(\"HelloWorld contract\", function () {\n  let HelloWorld;\n  let helloWorld;\n "
  },
  {
    "path": "06-Subgraphs-on-Core/README.md",
    "chars": 3061,
    "preview": "# Guestbook Subgraph\n\nThis repository contains the subgraph for the Guestbook application on the Core Network. The subgr"
  },
  {
    "path": "06-Subgraphs-on-Core/abis/Guestbook.json",
    "chars": 1404,
    "preview": "[\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"string\",\n      "
  },
  {
    "path": "06-Subgraphs-on-Core/build/Guestbook/Guestbook.json",
    "chars": 1657,
    "preview": "[\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"string\",\n      "
  },
  {
    "path": "06-Subgraphs-on-Core/build/schema.graphql",
    "chars": 187,
    "preview": "type EntrySigned @entity(immutable: true) {\n  id: Bytes!\n  name: String! # string\n  message: String! # string\n  blockNum"
  },
  {
    "path": "06-Subgraphs-on-Core/build/subgraph.yaml",
    "chars": 625,
    "preview": "specVersion: 1.0.0\nindexerHints:\n  prune: auto\nschema:\n  file: schema.graphql\ndataSources:\n  - kind: ethereum\n    name: "
  },
  {
    "path": "06-Subgraphs-on-Core/docker-compose.yml",
    "chars": 1341,
    "preview": "version: \"3\"\nservices:\n  graph-node:\n    image: graphprotocol/graph-node\n    ports:\n      - \"8000:8000\"\n      - \"8001:80"
  },
  {
    "path": "06-Subgraphs-on-Core/generated/Guestbook/Guestbook.ts",
    "chars": 3665,
    "preview": "// THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.\n\nimport {\n  ethereum,\n  JSONValue,\n  TypedMap,\n  Entit"
  },
  {
    "path": "06-Subgraphs-on-Core/generated/schema.ts",
    "chars": 3010,
    "preview": "// THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.\n\nimport {\n  TypedMap,\n  Entity,\n  Value,\n  ValueKind,\n"
  },
  {
    "path": "06-Subgraphs-on-Core/networks.json",
    "chars": 136,
    "preview": "{\n  \"core\": {\n    \"Guestbook\": {\n      \"address\": \"0x0D0b3bAc514d53AafC95c74294Bb1B613D1862c2\",\n      \"startBlock\": 2212"
  },
  {
    "path": "06-Subgraphs-on-Core/package.json",
    "chars": 705,
    "preview": "{\n  \"name\": \"guestbook-subgraph\",\n  \"license\": \"UNLICENSED\",\n  \"scripts\": {\n    \"codegen\": \"graph codegen\",\n    \"build\":"
  },
  {
    "path": "06-Subgraphs-on-Core/schema.graphql",
    "chars": 187,
    "preview": "type EntrySigned @entity(immutable: true) {\n  id: Bytes!\n  name: String! # string\n  message: String! # string\n  blockNum"
  },
  {
    "path": "06-Subgraphs-on-Core/src/guestbook.ts",
    "chars": 532,
    "preview": "import { EntrySigned as EntrySignedEvent } from \"../generated/Guestbook/Guestbook\"\nimport { EntrySigned } from \"../gener"
  },
  {
    "path": "06-Subgraphs-on-Core/subgraph.yaml",
    "chars": 618,
    "preview": "specVersion: 1.0.0\nindexerHints:\n  prune: auto\nschema:\n  file: ./schema.graphql\ndataSources:\n  - kind: ethereum\n    name"
  },
  {
    "path": "06-Subgraphs-on-Core/tests/guestbook-utils.ts",
    "chars": 615,
    "preview": "import { newMockEvent } from \"matchstick-as\"\nimport { ethereum } from \"@graphprotocol/graph-ts\"\nimport { EntrySigned } f"
  },
  {
    "path": "06-Subgraphs-on-Core/tests/guestbook.test.ts",
    "chars": 1535,
    "preview": "import {\n  assert,\n  describe,\n  test,\n  clearStore,\n  beforeAll,\n  afterAll\n} from \"matchstick-as/assembly/index\"\nimpor"
  },
  {
    "path": "06-Subgraphs-on-Core/tsconfig.json",
    "chars": 99,
    "preview": "{\n  \"extends\": \"@graphprotocol/graph-ts/types/tsconfig.base.json\",\n  \"include\": [\"src\", \"tests\"]\n}\n"
  },
  {
    "path": "07-NFT Minitng dApp on Core/.gitignore",
    "chars": 269,
    "preview": "node_modules\n.env\n\n# Hardhat files\n/cache\n/artifacts\n\n# TypeChain files\n/typechain\n/typechain-types\n\n# solidity-coverage"
  },
  {
    "path": "07-NFT Minitng dApp on Core/README.md",
    "chars": 12927,
    "preview": "# Building NFT Minting DApp on Core\n\nWelcome to this tutorial where we will build a simple NFT Minting DApp on Core Bloc"
  },
  {
    "path": "07-NFT Minitng dApp on Core/assets/metadata.json",
    "chars": 166,
    "preview": "{\n    \"name\": \"Bored Ape\",\n    \"image\" : \"https://raw.githubusercontent.com/GM-11/NFT_Minting_Tutorial_Core/master/asset"
  },
  {
    "path": "07-NFT Minitng dApp on Core/contracts/Lock.sol",
    "chars": 1008,
    "preview": "// SPDX-License-Identifier: UNLICENSED\npragma solidity ^0.8.24;\n\n// Uncomment this line to use console.log\n// import \"ha"
  },
  {
    "path": "07-NFT Minitng dApp on Core/contracts/MyNFT.sol",
    "chars": 1013,
    "preview": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.24;\n\nimport \"@openzeppelin/contracts/token/ERC721/ERC721.sol\";\nimpo"
  },
  {
    "path": "07-NFT Minitng dApp on Core/frontend/.gitignore",
    "chars": 253,
    "preview": "# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\npnpm-debug.log*\nlerna-debug.log*\n\nnode_modules\ndist\ndis"
  },
  {
    "path": "07-NFT Minitng dApp on Core/frontend/README.md",
    "chars": 451,
    "preview": "# React + Vite\n\nThis template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.\n\nCur"
  },
  {
    "path": "07-NFT Minitng dApp on Core/frontend/index.html",
    "chars": 361,
    "preview": "<!doctype html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <link rel=\"icon\" type=\"image/svg+xml\" href=\"/"
  },
  {
    "path": "07-NFT Minitng dApp on Core/frontend/package.json",
    "chars": 665,
    "preview": "{\n  \"name\": \"frontend\",\n  \"private\": true,\n  \"version\": \"0.0.0\",\n  \"type\": \"module\",\n  \"scripts\": {\n    \"dev\": \"vite\",\n "
  },
  {
    "path": "07-NFT Minitng dApp on Core/frontend/src/App.css",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "07-NFT Minitng dApp on Core/frontend/src/App.jsx",
    "chars": 2131,
    "preview": "import { useEffect, useState } from \"react\";\nimport { ethers } from \"ethers\";\nimport MyNFTAbi from \"./abis/MyNFTAbi.json"
  },
  {
    "path": "07-NFT Minitng dApp on Core/frontend/src/abis/MyNFTAbi.json",
    "chars": 34920,
    "preview": "{\n    \"_format\": \"hh-sol-artifact-1\",\n    \"contractName\": \"Nft\",\n    \"sourceName\": \"contracts/MyNFT.sol\",\n    \"abi\": [\n "
  },
  {
    "path": "07-NFT Minitng dApp on Core/frontend/src/index.css",
    "chars": 1036,
    "preview": ":root {\n  font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;\n  line-height: 1.5;\n  font-weight: 400;\n\n"
  },
  {
    "path": "07-NFT Minitng dApp on Core/frontend/src/main.jsx",
    "chars": 235,
    "preview": "import React from 'react'\nimport ReactDOM from 'react-dom/client'\nimport App from './App.jsx'\nimport './index.css'\n\nReac"
  },
  {
    "path": "07-NFT Minitng dApp on Core/frontend/vite.config.js",
    "chars": 163,
    "preview": "import { defineConfig } from 'vite'\nimport react from '@vitejs/plugin-react'\n\n// https://vitejs.dev/config/\nexport defau"
  },
  {
    "path": "07-NFT Minitng dApp on Core/hardhat.config.js",
    "chars": 780,
    "preview": "require(\"@nomicfoundation/hardhat-toolbox\");\nrequire(\"dotenv\").config();\n\n/** @type import('hardhat/config').HardhatUser"
  },
  {
    "path": "07-NFT Minitng dApp on Core/ignition/modules/Lock.js",
    "chars": 434,
    "preview": "const { buildModule } = require(\"@nomicfoundation/hardhat-ignition/modules\");\n\nconst JAN_1ST_2030 = 1893456000;\nconst ON"
  },
  {
    "path": "07-NFT Minitng dApp on Core/package.json",
    "chars": 840,
    "preview": "{\n  \"name\": \"NFT_Collection_Tutorial\",\n  \"version\": \"1.0.0\",\n  \"main\": \"index.js\",\n  \"license\": \"MIT\",\n  \"devDependencie"
  },
  {
    "path": "07-NFT Minitng dApp on Core/scripts/deploy.js",
    "chars": 462,
    "preview": "const { ethers } = require(\"hardhat\");\n\nasync function main() {\n  const [deployer] = await ethers.getSigners();\n\n  conso"
  },
  {
    "path": "07-NFT Minitng dApp on Core/test/Lock.js",
    "chars": 4317,
    "preview": "const {\n  time,\n  loadFixture,\n} = require(\"@nomicfoundation/hardhat-toolbox/network-helpers\");\nconst { anyValue } = req"
  },
  {
    "path": "08-Guess-Game/.gitignore",
    "chars": 257,
    "preview": "node_modules\n.env\n\n# Hardhat files\n/cache\n/artifacts\n\n# TypeChain files\n/typechain\n/typechain-types\n\n# solidity-coverage"
  },
  {
    "path": "08-Guess-Game/Frontend/.eslintrc.json",
    "chars": 61,
    "preview": "{\n  \"extends\": [\"next/core-web-vitals\", \"next/typescript\"]\n}\n"
  },
  {
    "path": "08-Guess-Game/Frontend/.gitignore",
    "chars": 462,
    "preview": "# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.\n\n# dependencies\n/node_modules\n/.pn"
  },
  {
    "path": "08-Guess-Game/Frontend/README.md",
    "chars": 1450,
    "preview": "This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-re"
  },
  {
    "path": "08-Guess-Game/Frontend/app/components/ui/button.tsx",
    "chars": 1902,
    "preview": "import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class"
  },
  {
    "path": "08-Guess-Game/Frontend/app/components/ui/card.tsx",
    "chars": 1828,
    "preview": "import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Card = React.forwardRef<\n  HTMLDivElement,\n  Rea"
  },
  {
    "path": "08-Guess-Game/Frontend/app/components/ui/input.tsx",
    "chars": 768,
    "preview": "import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Input = React.forwardRef<HTMLInputElement, React"
  },
  {
    "path": "08-Guess-Game/Frontend/app/constants/config.json",
    "chars": 457,
    "preview": "{\n    \"31337\": {\n        \"guessGame\": {\n            \"address\": \"0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512\"\n        },\n "
  },
  {
    "path": "08-Guess-Game/Frontend/app/constants/solidityABI.json",
    "chars": 6461,
    "preview": "[\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_rewardToken\",\n          \"ty"
  },
  {
    "path": "08-Guess-Game/Frontend/app/globals.css",
    "chars": 1798,
    "preview": "@tailwind base;\n@tailwind components;\n@tailwind utilities;\n\nbody {\n  font-family: Arial, Helvetica, sans-serif;\n}\n\n@laye"
  },
  {
    "path": "08-Guess-Game/Frontend/app/layout.tsx",
    "chars": 742,
    "preview": "import type { Metadata } from \"next\";\nimport localFont from \"next/font/local\";\nimport \"./globals.css\";\n\nconst geistSans "
  },
  {
    "path": "08-Guess-Game/Frontend/app/page.tsx",
    "chars": 7936,
    "preview": "\"use client\"\n\nimport { useState, useEffect } from \"react\"\nimport { Button } from \"@/app/components/ui/button\"\nimport { I"
  },
  {
    "path": "08-Guess-Game/Frontend/components.json",
    "chars": 441,
    "preview": "{\n  \"$schema\": \"https://ui.shadcn.com/schema.json\",\n  \"style\": \"new-york\",\n  \"rsc\": true,\n  \"tsx\": true,\n  \"tailwind\": {"
  },
  {
    "path": "08-Guess-Game/Frontend/lib/utils.ts",
    "chars": 166,
    "preview": "import { clsx, type ClassValue } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: Cla"
  },
  {
    "path": "08-Guess-Game/Frontend/next.config.ts",
    "chars": 133,
    "preview": "import type { NextConfig } from \"next\";\n\nconst nextConfig: NextConfig = {\n  /* config options here */\n};\n\nexport default"
  },
  {
    "path": "08-Guess-Game/Frontend/package.json",
    "chars": 755,
    "preview": "{\n  \"name\": \"reusable\",\n  \"version\": \"0.1.0\",\n  \"private\": true,\n  \"scripts\": {\n    \"dev\": \"next dev\",\n    \"build\": \"nex"
  },
  {
    "path": "08-Guess-Game/Frontend/postcss.config.mjs",
    "chars": 135,
    "preview": "/** @type {import('postcss-load-config').Config} */\nconst config = {\n  plugins: {\n    tailwindcss: {},\n  },\n};\n\nexport d"
  },
  {
    "path": "08-Guess-Game/Frontend/tailwind.config.ts",
    "chars": 1656,
    "preview": "import type { Config } from \"tailwindcss\";\n\nconst config: Config = {\n    darkMode: [\"class\"],\n    content: [\n    \"./page"
  },
  {
    "path": "08-Guess-Game/Frontend/tsconfig.json",
    "chars": 598,
    "preview": "{\n  \"compilerOptions\": {\n    \"target\": \"ES2017\",\n    \"lib\": [\"dom\", \"dom.iterable\", \"esnext\"],\n    \"allowJs\": true,\n    "
  },
  {
    "path": "08-Guess-Game/README.md",
    "chars": 3599,
    "preview": "# Guess the Number Game on Core Blockchain\n\nWelcome to the \"Guess the Number\" game! This decentralized application (dApp"
  },
  {
    "path": "08-Guess-Game/contracts/GuessTheNumber.sol",
    "chars": 2643,
    "preview": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.19;\n\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\nimport \"@"
  },
  {
    "path": "08-Guess-Game/contracts/GuessToken.sol",
    "chars": 361,
    "preview": "// SPDX-License-Identifier: MIT\n// Compatible with OpenZeppelin Contracts ^5.0.0\npragma solidity ^0.8.22;\n\nimport {ERC20"
  },
  {
    "path": "08-Guess-Game/hardhat.config.js",
    "chars": 522,
    "preview": "require(\"@nomicfoundation/hardhat-toolbox\");\nrequire(\"dotenv\").config();\n\n/** @type import('hardhat/config').HardhatUser"
  },
  {
    "path": "08-Guess-Game/ignition/modules/Lock.js",
    "chars": 564,
    "preview": "// This setup uses Hardhat Ignition to manage smart contract deployments.\n// Learn more about it at https://hardhat.org/"
  },
  {
    "path": "08-Guess-Game/package.json",
    "chars": 391,
    "preview": "{\n  \"name\": \"reuse\",\n  \"version\": \"1.0.0\",\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"test\": \"echo \\\"Error: no test speci"
  },
  {
    "path": "08-Guess-Game/scripts/deploy-guess-game.js",
    "chars": 995,
    "preview": "const hre = require(\"hardhat\");\n\nasync function main() {\n\n  const GuessTokenContract = await hre.ethers.getContractFacto"
  },
  {
    "path": "08-Guess-Game/test/Lock.js",
    "chars": 4317,
    "preview": "const {\n  time,\n  loadFixture,\n} = require(\"@nomicfoundation/hardhat-toolbox/network-helpers\");\nconst { anyValue } = req"
  },
  {
    "path": "09-Token-swap-Dapp/.gitignore",
    "chars": 243,
    "preview": "node_modules\n.env\n\n# Hardhat files\n/cache\n/artifacts\n\n# TypeChain files\n/typechain\n/typechain-types\n\n# solidity-coverage"
  },
  {
    "path": "09-Token-swap-Dapp/README.md",
    "chars": 16121,
    "preview": "# Building a Token Swapping Dapp on Core\n\n## What are we building\n\nIn this tutorial, we will guide you through building "
  },
  {
    "path": "09-Token-swap-Dapp/contracts/Swap.sol",
    "chars": 3160,
    "preview": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.24;\n\nimport \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimpor"
  },
  {
    "path": "09-Token-swap-Dapp/contracts/Token.sol",
    "chars": 471,
    "preview": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.24;\n\nimport \"@openzeppelin/contracts/token/ERC20/ERC20.sol\";\nimport"
  },
  {
    "path": "09-Token-swap-Dapp/frontend/.gitignore",
    "chars": 310,
    "preview": "# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.\n\n# dependencies\n/node_modules\n/.pn"
  },
  {
    "path": "09-Token-swap-Dapp/frontend/README.md",
    "chars": 3359,
    "preview": "# Getting Started with Create React App\n\nThis project was bootstrapped with [Create React App](https://github.com/facebo"
  },
  {
    "path": "09-Token-swap-Dapp/frontend/package.json",
    "chars": 859,
    "preview": "{\n  \"name\": \"frontend\",\n  \"version\": \"0.1.0\",\n  \"private\": true,\n  \"dependencies\": {\n    \"@testing-library/jest-dom\": \"5"
  },
  {
    "path": "09-Token-swap-Dapp/frontend/public/index.html",
    "chars": 1721,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <link rel=\"icon\" href=\"%PUBLIC_URL%/favicon.i"
  },
  {
    "path": "09-Token-swap-Dapp/frontend/public/manifest.json",
    "chars": 492,
    "preview": "{\n  \"short_name\": \"React App\",\n  \"name\": \"Create React App Sample\",\n  \"icons\": [\n    {\n      \"src\": \"favicon.ico\",\n     "
  },
  {
    "path": "09-Token-swap-Dapp/frontend/public/robots.txt",
    "chars": 67,
    "preview": "# https://www.robotstxt.org/robotstxt.html\nUser-agent: *\nDisallow:\n"
  },
  {
    "path": "09-Token-swap-Dapp/frontend/src/App.css",
    "chars": 3133,
    "preview": "/* App.css */\nbody {\n  margin: 0;\n  font-family: Arial, sans-serif;\n  background-color: #f4f4f9;\n  color: #333;\n}\n\n.App "
  },
  {
    "path": "09-Token-swap-Dapp/frontend/src/App.js",
    "chars": 7580,
    "preview": "import { useEffect, useState, useCallback } from \"react\";\nimport { ethers } from \"ethers\";\nimport \"./App.css\";\nimport To"
  },
  {
    "path": "09-Token-swap-Dapp/frontend/src/App.test.js",
    "chars": 246,
    "preview": "import { render, screen } from '@testing-library/react';\nimport App from './App';\n\ntest('renders learn react link', () ="
  },
  {
    "path": "09-Token-swap-Dapp/frontend/src/contracts/Swap.json",
    "chars": 4447,
    "preview": "[\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint32\",\n        \"name\": \"_feePercent\",\n        \"type\": \"uint32\"\n"
  },
  {
    "path": "09-Token-swap-Dapp/frontend/src/contracts/Token.json",
    "chars": 7633,
    "preview": "[\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"string\",\n        \"name\": \"_name\",\n        \"type\": \"string\"\n      "
  },
  {
    "path": "09-Token-swap-Dapp/frontend/src/index.css",
    "chars": 366,
    "preview": "body {\n  margin: 0;\n  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',\n    'Ubuntu', 'Can"
  },
  {
    "path": "09-Token-swap-Dapp/frontend/src/index.js",
    "chars": 535,
    "preview": "import React from 'react';\nimport ReactDOM from 'react-dom/client';\nimport './index.css';\nimport App from './App';\nimpor"
  },
  {
    "path": "09-Token-swap-Dapp/frontend/src/reportWebVitals.js",
    "chars": 362,
    "preview": "const reportWebVitals = onPerfEntry => {\n  if (onPerfEntry && onPerfEntry instanceof Function) {\n    import('web-vitals'"
  },
  {
    "path": "09-Token-swap-Dapp/frontend/src/setupTests.js",
    "chars": 241,
    "preview": "// jest-dom adds custom jest matchers for asserting on DOM nodes.\n// allows you to do things like:\n// expect(element).to"
  },
  {
    "path": "09-Token-swap-Dapp/hardhat.config.js",
    "chars": 758,
    "preview": "require(\"@nomicfoundation/hardhat-toolbox\");\nrequire(\"dotenv\").config();\n\n/** @type import('hardhat/config').HardhatUser"
  },
  {
    "path": "09-Token-swap-Dapp/package.json",
    "chars": 819,
    "preview": "{\n  \"name\": \"09-Token-swap-Dapp\",\n  \"version\": \"1.0.0\",\n  \"main\": \"index.js\",\n  \"license\": \"MIT\",\n  \"devDependencies\": {"
  },
  {
    "path": "09-Token-swap-Dapp/scripts/deploy.js",
    "chars": 1106,
    "preview": "const { ethers } = require(\"hardhat\");\n\nasync function main() {\n  const [deployer] = await ethers.getSigners();\n\n  conso"
  }
]

// ... and 1401 more files (download for full content)

About this extraction

This page contains the full source code of the coredao-org/dapp-tutorial GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1601 files (9.7 MB), approximately 2.6M tokens, and a symbol index with 6634 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!