diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 0000000..c3cd0cc --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,97 @@ +name: Bug report +description: Something in the app behaves differently from what it should. +labels: [bug] +body: + - type: markdown + attributes: + value: | + For a wrong answer key, a duplicated question or a broken question, + please use **Question error report** instead — it asks for the chapter + and index needed to find the row. + + - type: textarea + id: what-happened + attributes: + label: What happened + description: What you saw, in one or two sentences. + validations: + required: true + + - type: textarea + id: expected + attributes: + label: What you expected instead + validations: + required: true + + - type: textarea + id: steps + attributes: + label: Steps to reproduce + description: Numbered steps starting from a fresh page load. + placeholder: | + 1. Open /app/practice + 2. Pick Chapter 3 + 3. Answer the first question + 4. ... + validations: + required: true + + - type: input + id: url + attributes: + label: Page or route + placeholder: /app/practice/topic/book-ch3 + validations: + required: false + + - type: dropdown + id: area + attributes: + label: Which part of the app + options: + - Landing page + - Dashboard + - Practice (chapter / topic / quick / custom) + - Mock tests + - Study hub + - Flashcards + - Bookmarks + - Progress + - Profile / Settings + - Not sure + validations: + required: true + + - type: input + id: environment + attributes: + label: Device and browser + description: > + Please be specific. A large share of users are on entry-level Android + over mobile data, and several bugs only appear there. + placeholder: Android 11, Chrome 120, 3G + validations: + required: true + + - type: textarea + id: console + attributes: + label: Console errors + description: > + Open DevTools (or `chrome://inspect` on Android) and paste anything red. + render: text + validations: + required: false + + - type: checkboxes + id: progress-loss + attributes: + label: Did this lose study progress? + description: > + All progress lives in this browser's `localStorage`. There is no account + and no server copy, so lost progress cannot be recovered — these reports + are triaged first. + options: + - label: Yes, saved progress, bookmarks or quiz history disappeared + required: false diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000..b8b22eb --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,5 @@ +blank_issues_enabled: false +contact_links: + - name: Question or idea to discuss first + url: https://github.com/SamirWagle/EngineeringLisenseProject/discussions + about: Not sure it is a bug or a feature yet? Start here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml new file mode 100644 index 0000000..3e3be44 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -0,0 +1,59 @@ +name: Feature request +description: Propose something the app should do that it does not do yet. +labels: [enhancement] +body: + - type: textarea + id: problem + attributes: + label: What problem does this solve for someone studying for the NEC exam + description: > + Describe the situation you are in when you need this, not the feature. + The strongest requests come from someone who hit a wall while revising. + validations: + required: true + + - type: textarea + id: proposal + attributes: + label: What you would like it to do + validations: + required: true + + - type: textarea + id: alternatives + attributes: + label: What you do instead today + description: The workaround, if there is one. + validations: + required: false + + - type: dropdown + id: scope + attributes: + label: Does this need a server + description: > + The app is currently frontend-only: all data is static JSON and all + state is in this browser's `localStorage`. Anything needing an account, + sync across devices, or a leaderboard depends on the backend work that + is still in progress, and will be scheduled behind it. + options: + - No, it can work entirely in the browser + - Yes, it needs accounts or cross-device sync + - Not sure + validations: + required: true + + - type: checkboxes + id: constraints + attributes: + label: Constraints you have considered + options: + - label: > + It does not meaningfully grow the initial page download. CI fails + above 180 kB of gzipped initial-load JavaScript, because much of the + audience is on entry-level Android over 3G. + required: false + - label: It works offline, or degrades cleanly without a network. + required: false + - label: I would be willing to open a PR for this. + required: false diff --git a/.github/ISSUE_TEMPLATE/question_error.yml b/.github/ISSUE_TEMPLATE/question_error.yml new file mode 100644 index 0000000..05a3a57 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/question_error.yml @@ -0,0 +1,86 @@ +name: Question error report +description: A question has the wrong answer, bad options, or is a duplicate. +title: '[question] ' +labels: [question-bank] +body: + - type: markdown + attributes: + value: | + A wrong answer key teaches the wrong thing, so these are the highest + priority reports in the project. + + Before filing, it helps to know that `scripts/validate-questions.mjs` + already catches several classes of defect automatically, and that + questions it proved unanswerable are listed in + `frontend/src/data/quarantine.json` and withheld from practice. If the + question you hit is already in that file, there is nothing to report — + though a suggested correction is very welcome. + + `docs/question-format.md` explains the data format and every failure + mode the validator checks. + + - type: dropdown + id: chapter + attributes: + label: Chapter + description: Shown in the practice header, and in the URL as `book-chN`. + options: + - ch1 + - ch2 + - ch3 + - ch4 + - ch5 + - ch6 + - ch7 + - ch8 + - ch9 + - ch10 + - Not sure + validations: + required: true + + - type: textarea + id: stem + attributes: + label: The question text + description: > + Copy it exactly. This is what we search the JSON for, so an exact copy + locates the row faster than anything else. + render: text + validations: + required: true + + - type: dropdown + id: defect + attributes: + label: What is wrong with it + options: + - The marked correct answer is wrong + - Two or more options are identical + - No option is correct + - More than one option is correct + - The question text is cut off or incomplete + - It is a duplicate of another question + - Typo or formatting only + - Other + validations: + required: true + + - type: textarea + id: correction + attributes: + label: What it should be + description: > + Which option is actually correct, and ideally why — a textbook section, + a formula, or a past paper. A correction with a source can be applied + directly; one without needs independent verification first. + validations: + required: true + + - type: markdown + attributes: + value: | + **Note on option order.** Options are deliberately reordered before they + are shown to you, because the authored bank has a severe answer-position + bias. "Option B is marked correct but it should be C" is therefore + ambiguous — please quote the option *text*, not its letter or number. diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 0000000..8d50cce --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,60 @@ + + +## What changed and why + + + +## How it was tested + + + +## Explain the diff in your own words + + + +--- + +### Checklist + +- [ ] `npx tsc -b`, `npm run lint`, `npx vitest run` and `npm run build` all pass locally +- [ ] `node scripts/validate-questions.mjs` passes — required if this touches question data or the loader +- [ ] Initial-load JS is still within budget (the `Frontend` CI job prints the number) +- [ ] No new `eslint-disable`, `@ts-ignore`, `@ts-expect-error` or skipped test; if there is one, the PR explains why +- [ ] `frontend/src/data/bookChapters.generated.ts` is regenerated and committed, if chapter JSONs changed +- [ ] The README and `docs/` still describe what the code actually does + +### If this changes question data + +- [ ] Every row has `correct_option_index` **1-based** and `correct_option` matching the text at that index exactly +- [ ] No duplicate option text within a question, and no duplicate stems against the existing bank +- [ ] The correct answer is not always in the same position — see `docs/question-format.md` +- [ ] Any ids removed from `frontend/src/data/quarantine.json` have had their underlying rows actually fixed diff --git a/.github/scripts/bundle-budget.mjs b/.github/scripts/bundle-budget.mjs new file mode 100644 index 0000000..870f33a --- /dev/null +++ b/.github/scripts/bundle-budget.mjs @@ -0,0 +1,205 @@ +#!/usr/bin/env node +/** + * bundle-budget.mjs + * + * Fails the build when initial-load JavaScript grows past its budget. + * + * Why a hard gate rather than a dashboard: most of this app's audience sits on + * entry-level Android handsets on 3G in Nepal. On a 400 kbit/s effective link, + * every 50 kB of gzipped JavaScript is roughly another second before anything is + * interactive - and that is before the phone has to parse and compile it. A + * budget that nothing enforces is a number in a README; this one blocks the PR. + * + * What counts as "initial-load": exactly the JavaScript the browser fetches + * before it can render the landing page. Vite declares that set in dist/index.html + * as the entry - - - NEC License Exam + + NECPrep — Nepal Engineering Council License Exam Preparation + + + + + + + + + + + + + + + + + + + + + + +
+ + + diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 171dc13..ed3c52c 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -8,18 +8,18 @@ "name": "frontend", "version": "0.0.0", "dependencies": { - "@react-three/drei": "^10.7.7", - "@react-three/fiber": "^9.5.0", - "@types/three": "^0.182.0", "framer-motion": "^12.29.0", "lucide-react": "^0.563.0", "react": "^19.2.0", "react-dom": "^19.2.0", - "react-router-dom": "^7.13.0", - "three": "^0.182.0" + "react-router-dom": "^7.13.0" }, "devDependencies": { "@eslint/js": "^9.39.1", + "@tailwindcss/vite": "^4.3.3", + "@testing-library/jest-dom": "^7.0.1", + "@testing-library/react": "^16.3.3", + "@testing-library/user-event": "^14.6.8", "@types/node": "^24.10.1", "@types/react": "^19.2.5", "@types/react-dom": "^19.2.3", @@ -28,19 +28,83 @@ "eslint-plugin-react-hooks": "^7.0.1", "eslint-plugin-react-refresh": "^0.4.24", "globals": "^16.5.0", + "jsdom": "^30.1.3", + "tailwindcss": "^4.3.3", "typescript": "~5.9.3", "typescript-eslint": "^8.46.4", - "vite": "^7.2.4" + "vite": "^7.2.4", + "vite-plugin-pwa": "^2.0.0", + "vitest": "^3.2.7" + } + }, + "node_modules/@adobe/css-tools": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.5.0.tgz", + "integrity": "sha512-6OzddxPio9UiWTCemp4N8cYLV2ZN1ncRnV1cVGtve7dhPOtRkleRyx32GQCYSwDYgaHU3USMm84tNsvKzRCa1Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@asamuzakjp/css-color": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-7.1.7.tgz", + "integrity": "sha512-Q7ioeear07HwixdIitIn9KS1LZi97CEDFCSjPNm9v+y8KNbsu9q4Lrd4zUQW4faED+E7qxvfeVnbNRW46wFKuw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@csstools/css-calc": "^3.4.3", + "@csstools/css-color-parser": "^4.2.6", + "@csstools/css-parser-algorithms": "^4.0.2", + "@csstools/css-tokenizer": "^4.0.2", + "lru-cache": "^11.5.3" + }, + "engines": { + "node": "^22.22.2 || ^24.15.0 || >=26.0.0" + } + }, + "node_modules/@asamuzakjp/css-color/node_modules/lru-cache": { + "version": "11.5.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.3.tgz", + "integrity": "sha512-U4N8FgzmWxc8k1VH8Kr6lQg18U7Fjvby6wXHVRX/ZZ7IwWbRMgrRbP0Wrb5q5NVinryp4SQampHKdvtecItxUg==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@asamuzakjp/dom-selector": { + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/@asamuzakjp/dom-selector/-/dom-selector-10.0.4.tgz", + "integrity": "sha512-A6f1nKy99I6tyoK82U6kBHvQQZmdHmTmPzJYPY/0eaOW0r8/qPmEOwjGHs+hL/vCgOwQTupu4LT1XtXNUuDruA==", + "dev": true, + "license": "MIT", + "dependencies": { + "bidi-js": "^1.1.0", + "css-tree": "^3.2.1", + "is-potential-custom-element-name": "^1.0.1", + "lru-cache": "^11.5.3" + }, + "engines": { + "node": "^22.22.2 || ^24.15.0 || >=26.0.0" + } + }, + "node_modules/@asamuzakjp/dom-selector/node_modules/lru-cache": { + "version": "11.5.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.3.tgz", + "integrity": "sha512-U4N8FgzmWxc8k1VH8Kr6lQg18U7Fjvby6wXHVRX/ZZ7IwWbRMgrRbP0Wrb5q5NVinryp4SQampHKdvtecItxUg==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" } }, "node_modules/@babel/code-frame": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.28.6.tgz", - "integrity": "sha512-JYgintcMjRiCvS8mMECzaEn+m3PfoQiyqukOMCCVQtoJGYJw8j/8LBJEiqkHLkfwCcs74E3pbAUFNg7d9VNJ+Q==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", + "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.28.5", + "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" }, @@ -49,9 +113,9 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.6.tgz", - "integrity": "sha512-2lfu57JtzctfIrcGMz992hyLlByuzgIk58+hhGCxjKZ3rWI82NnVLjXcaTqkI2NvlcvOskZaiZ5kjUALo3Lpxg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz", + "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==", "dev": true, "license": "MIT", "engines": { @@ -64,7 +128,6 @@ "integrity": "sha512-H3mcG6ZDLTlYfaSNi0iOKkigqMFvkTKlGUYlD8GW7nNOYRrevuA46iTypPyv+06V3fEmvvazfntkBU34L0azAw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.28.6", "@babel/generator": "^7.28.6", @@ -91,14 +154,14 @@ } }, "node_modules/@babel/generator": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.6.tgz", - "integrity": "sha512-lOoVRwADj8hjf7al89tvQ2a1lf53Z+7tiXMgpZJL3maQPDxh0DgLMN62B2MKUOFcoodBHLMbDM6WAbKgNy5Suw==", + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.8.tgz", + "integrity": "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.28.6", - "@babel/types": "^7.28.6", + "@babel/parser": "^7.29.8", + "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" @@ -107,15 +170,28 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.29.7.tgz", + "integrity": "sha512-OoK6239jHPuSQOoS0kfTVKn0b/rVTk0seKq4Gd2UMLtmOVLjDC0ki3e+c90Trqv2gMfvJFqkiljrr568+qddiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", - "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz", + "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.28.6", - "@babel/helper-validator-option": "^7.27.1", + "@babel/compat-data": "^7.29.7", + "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" @@ -124,40 +200,111 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.29.7.tgz", + "integrity": "sha512-IY3ZD9Tmooqr3TUhc3DUWxiuo8xx1DWLhd5M7hQ+ZWJamqM2BbalrBJb2MisSLoYorOj75U03qULCxQTY9r3hg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.29.7", + "@babel/helper-member-expression-to-functions": "^7.29.7", + "@babel/helper-optimise-call-expression": "^7.29.7", + "@babel/helper-replace-supers": "^7.29.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7", + "@babel/traverse": "^7.29.7", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.29.10", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.29.10.tgz", + "integrity": "sha512-/YY9soQuWa8TURtHXHT+GbklpbAA+dZErxFGHIr6qgDg96xuGWrTAs1+MfjgVJPF0YLQsOVsOYs8lhgsPbOinQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.29.7", + "regexpu-core": "^6.5.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.8.tgz", + "integrity": "sha512-47UwBLPpQi1NoWzLuHNjRoHlYXMwIJoBf7MFou6viC/sIHWYygpvr0B6IAyh5sBdA2nr2LPIRww8lfaUVQINBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "debug": "^4.4.3", + "lodash.debounce": "^4.0.8", + "resolve": "^1.22.11" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, "node_modules/@babel/helper-globals": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", - "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz", + "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.29.7.tgz", + "integrity": "sha512-j+7JYmk1JYDtACIGj0QJqqWZjoUpMoEikQGADMaHgCMCSDqd2+P32rfcibUNrGOMWrlzK1WJBdxrB3JJQZwWtg==", "dev": true, "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" + }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", - "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz", + "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==", "dev": true, "license": "MIT", "dependencies": { - "@babel/traverse": "^7.28.6", - "@babel/types": "^7.28.6" + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", - "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz", + "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.28.6", - "@babel/helper-validator-identifier": "^7.28.5", - "@babel/traverse": "^7.28.6" + "@babel/helper-module-imports": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7", + "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -166,20 +313,83 @@ "@babel/core": "^7.0.0" } }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.29.7.tgz", + "integrity": "sha512-+kmGVjcT9RGYzoDwdwEqEvGgKe3BYq+O1iGzjFubaNgZHwYHP6lsF2Yghf4kEuv9BV7tYDZ913aBW9am6YKong==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", - "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.29.7.tgz", + "integrity": "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==", "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" } }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.29.7.tgz", + "integrity": "sha512-16AMiW26DbXWBbr3B8wNozKM0ydMLB892vaOaJW/fPJdnT8vJk5sdkQcU/isqUxyCE0cEoa8wZOcbgDuC4b6Og==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.29.7", + "@babel/helper-wrap-function": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.29.7.tgz", + "integrity": "sha512-atfGXWSeCiF4DnKZIfmJfQRkSw9b9gNNXR1kqKjbhG4pGYCOnkp8OcTB8E3NXjBu8NpheSnOeNKz8KT7UNFTmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.29.7", + "@babel/helper-optimise-call-expression": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.29.7.tgz", + "integrity": "sha512-brcMGQaVzIeUb+6/bs1Av0f8YuNNjKY2JyvfRCsFuFsdKccEQ5Ges2y74D74NZ1Rz8lKJ9ksJkfqwQFJ/iNEyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", "dev": true, "license": "MIT", "engines": { @@ -187,9 +397,9 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", - "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", "dev": true, "license": "MIT", "engines": { @@ -197,15 +407,30 @@ } }, "node_modules/@babel/helper-validator-option": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", - "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz", + "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==", "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" } }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.29.7.tgz", + "integrity": "sha512-iES0Skag9ERIF68aXadpO6dbXa03mNWK3sEqJaMnLNs/eC3l0lkImdfoy6Y09/SfkpawdAB4RjQ7PVA7TcVGdw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.29.7", + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helpers": { "version": "7.28.6", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.6.tgz", @@ -221,13 +446,13 @@ } }, "node_modules/@babel/parser": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.6.tgz", - "integrity": "sha512-TeR9zWR18BvbfPmGbLampPMW+uW1NZnJlRuuHso8i87QZNq2JRF9i6RgxRqtEq+wQGsS19NNTWr2duhnE49mfQ==", + "version": "7.29.9", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.9.tgz", + "integrity": "sha512-CjXrNHTnvqBVqHgdBysY3vk2T8tpJHb5/RMeHJBTyVa9xgugCB0CJTx/3oO8RV2QRQP391RWpB7D6hLjm8V9uA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.28.6" + "@babel/types": "^7.29.8" }, "bin": { "parser": "bin/babel-parser.js" @@ -236,1004 +461,1390 @@ "node": ">=6.0.0" } }, - "node_modules/@babel/plugin-transform-react-jsx-self": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", - "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", + "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.29.7.tgz", + "integrity": "sha512-j8SrR0zLZrRsC09DlszEx8FpMiwukKffYXMK0d5LmOglO7vGG6sz/BR/20yHqWH+Lnn31JTt2PE3hIWNgM2J6w==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.0.0" } }, - "node_modules/@babel/plugin-transform-react-jsx-source": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz", - "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", + "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.29.7.tgz", + "integrity": "sha512-r8j8escF+U2FUHo0KOhPUdMzUO+jp9fInva6+ACVAF3Y97Ev+5iNZwiqTghmzNeWwDkOPlYuTcfb1vDaoZKmAQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.0.0" } }, - "node_modules/@babel/runtime": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.6.tgz", - "integrity": "sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==", + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.29.7.tgz", + "integrity": "sha512-GE1TFSiuFeGsCxmYXZl8HwoPrVlwe4rHPFE8weieGKZqnDORK+Ar3vgWMgW+AOxQ6/2TgLSKx9p6W7O4rC6qgQ==", + "dev": true, "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@babel/template": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", - "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", + "node_modules/@babel/plugin-bugfix-safari-rest-destructuring-rhs-array": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-rest-destructuring-rhs-array/-/plugin-bugfix-safari-rest-destructuring-rhs-array-7.29.7.tgz", + "integrity": "sha512-oBNVCvnO5tND+xSopWvV8WNGfpTfgP4Zr/YXXSj8zfmcPktp5Ku/aZlsIowgSD4fjmgHn6sGmB9APVsU5zOdhA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.28.6", - "@babel/parser": "^7.28.6", - "@babel/types": "^7.28.6" + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@babel/traverse": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.6.tgz", - "integrity": "sha512-fgWX62k02qtjqdSNTAGxmKYY/7FSL9WAS1o2Hu5+I5m9T0yxZzr4cnrfXQ/MX0rIifthCSs6FKTlzYbJcPtMNg==", + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.29.7.tgz", + "integrity": "sha512-QQt9qKHZ2sg/kivaLr7lnQr8HVrQDdBNSfCsTjiDxRuX/K5ORyKq+Bu8Xr0cDE3Dfkv0cw28Ve0EKyKMvulkOw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.28.6", - "@babel/generator": "^7.28.6", - "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.28.6", - "@babel/template": "^7.28.6", - "@babel/types": "^7.28.6", - "debug": "^4.3.1" + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7", + "@babel/plugin-transform-optional-chaining": "^7.29.7" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" } }, - "node_modules/@babel/types": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.6.tgz", - "integrity": "sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg==", + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.29.7.tgz", + "integrity": "sha512-pn6QacGLgvCcwc+syUhKE/qSjV2D1IHDB84RNxWYSt1mW3K/SCtjinZ2p0cETJxAWBjPy3K/1lHwG5BjjPxNlw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.28.5" + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@dimforge/rapier3d-compat": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@dimforge/rapier3d-compat/-/rapier3d-compat-0.12.0.tgz", - "integrity": "sha512-uekIGetywIgopfD97oDL5PfeezkFpNhwlzlaEYNOA0N6ghdsOvh/HYjSMek5Q2O1PYvRSDFcqFVJl4r4ZBwOow==", - "license": "Apache-2.0" - }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz", - "integrity": "sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==", - "cpu": [ - "ppc64" - ], + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "aix" - ], "engines": { - "node": ">=18" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@esbuild/android-arm": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.2.tgz", - "integrity": "sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==", - "cpu": [ - "arm" - ], + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.29.7.tgz", + "integrity": "sha512-/An1OCBN93thpBAGyfsK2pcf0jvju1SAtKkL2Ny++B5Sy6sqgzXDQH1cZxWbF96Wuk+bn41MDA9bLd4VVAw6rw==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "android" - ], + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, "engines": { - "node": ">=18" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@esbuild/android-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.2.tgz", - "integrity": "sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==", - "cpu": [ - "arm64" - ], + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.29.7.tgz", + "integrity": "sha512-zGYcYfq/WmZ4V+kBIXQon9dSSc8ircGZqw9ZaNhhGj9nZkeBu1jHLBDQqYYi5WA9uawvA2sIMbry2nCFhf5Djg==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "android" - ], + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, "engines": { - "node": ">=18" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@esbuild/android-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.2.tgz", - "integrity": "sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==", - "cpu": [ - "x64" - ], + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "android" - ], + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, "engines": { - "node": ">=18" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.2.tgz", - "integrity": "sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==", - "cpu": [ - "arm64" - ], + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.29.7.tgz", + "integrity": "sha512-N7zArUXWzAMzm+/N0uPBeVB3Fam5lMxtUwMmDK5f/IBBS7a7p1qeUoxd/6CckXoxUdgsntq1Dh8xNW06maZbDQ==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, "engines": { - "node": ">=18" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.2.tgz", - "integrity": "sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==", - "cpu": [ - "x64" - ], + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.29.7.tgz", + "integrity": "sha512-d98gXZkgswvkyohMBABkhm3GeXhYj8psWfwQ2C7gtfrKGTykQa/iOIi+JJhwMjPlZ6Vm2XN+DCf3Es1EoG4ZLA==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-remap-async-to-generator": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, "engines": { - "node": ">=18" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.2.tgz", - "integrity": "sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==", - "cpu": [ - "arm64" - ], + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.29.7.tgz", + "integrity": "sha512-pcUb2SS+RMo9TWVBwKGI5ShtoG7R+zBsFmCKDa6fe8c+hPr3XJlZgoE5j6i8W7gDjhyvy+85vmYexanvXh3d1w==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], + "dependencies": { + "@babel/helper-module-imports": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-remap-async-to-generator": "^7.29.7" + }, "engines": { - "node": ">=18" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.2.tgz", - "integrity": "sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==", - "cpu": [ - "x64" - ], + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.29.7.tgz", + "integrity": "sha512-cUSmjh72N+rN4PrkFlN1dJwNCwjVp5d38/CQrEsFggkD10UiFlBFgdH3tv5dNsLuHY+3S8db2xCHjhZcv5WgvA==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, "engines": { - "node": ">=18" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@esbuild/linux-arm": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.2.tgz", - "integrity": "sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==", - "cpu": [ - "arm" - ], + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.29.7.tgz", + "integrity": "sha512-ONyr4+AZhKh8yKWInVxU9AXA9EbsyeLcL6V0dJy6M2/62vuvpGm29zzuymbTpdc451GEpDIdAyPLP3r+P61yKQ==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, "engines": { - "node": ">=18" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.2.tgz", - "integrity": "sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==", - "cpu": [ - "arm64" - ], + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.29.7.tgz", + "integrity": "sha512-GtcpjFvanPfzNQi3eTitsCqtRRmmqzpy/A+yhTR1HaZo1Ly3EA8ZXxlPyHdR8/IuRMYc3E4wdGBewB2QKQjAaA==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" + }, "engines": { - "node": ">=18" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.2.tgz", - "integrity": "sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==", - "cpu": [ - "ia32" - ], + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.29.7.tgz", + "integrity": "sha512-kibJgmEdX2iMwsHY2tSZNDgj8PwIlCQz7FK9KuGKO8zsuoUwSEhoNnNVp/emKWrbY4HeO6kkXfdMqRKKKXBm2A==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" + }, "engines": { - "node": ">=18" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" } }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.2.tgz", - "integrity": "sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==", - "cpu": [ - "loong64" - ], + "node_modules/@babel/plugin-transform-classes": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.29.7.tgz", + "integrity": "sha512-qV0OGGBVacduzQHE649JyCneOFI/maT+YKsO+K4Yi3xv2wTPNjM/W2o2gdzMwEAZz7fXNTHAe0NcSg30bIN69g==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.29.7", + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-globals": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-replace-supers": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, "engines": { - "node": ">=18" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.2.tgz", - "integrity": "sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==", - "cpu": [ - "mips64el" - ], + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.29.7.tgz", + "integrity": "sha512-RK7/IyU5phpuCdBAuig5VkzG/EnbDaui5SQGdU9BFrHdV+mV4cUjLMQ9lJDjLNtWHsqtiefpGZUXQP2BiTYMsA==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/template": "^7.29.7" + }, "engines": { - "node": ">=18" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.2.tgz", - "integrity": "sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==", - "cpu": [ - "ppc64" - ], + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.29.7.tgz", + "integrity": "sha512-iPX8aD6H9zV5s7ZsqTdNocPN/MGQ5sSMnElKrktxjJRMnB2jN/1p2+R7GkfD6CAYoVFqy5A4XnSIUeGgJzIWpg==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, "engines": { - "node": ">=18" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.2.tgz", - "integrity": "sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==", - "cpu": [ - "riscv64" - ], + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.29.7.tgz", + "integrity": "sha512-3qc18hsD2RdZiyJNDNc7HQpv6xbncwh8FYtxNFFzclSyh/trPD9KkVR9BDECUjDLvb7yJVF15GfYUuC+LMkkiQ==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" + }, "engines": { - "node": ">=18" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.2.tgz", - "integrity": "sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==", - "cpu": [ - "s390x" - ], + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.29.7.tgz", + "integrity": "sha512-6IvRRriEMqnBwD6chtxdLpMYCHWEzN+oL5cyQtjykya19UgzbmKhxmhZgKC/LHxS2nYr9Q/qYPZ5Lr6jOL9+yQ==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, "engines": { - "node": ">=18" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@esbuild/linux-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.2.tgz", - "integrity": "sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==", - "cpu": [ - "x64" - ], + "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.29.7.tgz", + "integrity": "sha512-2wiIyo2BjtgU7HufSeDnL9L2O7zr8jmhFKuSr65VpRkUiRKRNpb0mdlk56+XPPKoIrfHqzbMuglDvZun0RISsA==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" + }, "engines": { - "node": ">=18" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@esbuild/netbsd-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.2.tgz", - "integrity": "sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==", - "cpu": [ - "arm64" - ], + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.29.7.tgz", + "integrity": "sha512-giOlEm/EFjfjr+te9NsdjkUo2v4f8rS/SXPumRVHAtbNcyNlvtREkU1dZzaIDclNpnaVhlCqRdFKhJBjBikzLg==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, "engines": { - "node": ">=18" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.2.tgz", - "integrity": "sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==", - "cpu": [ - "x64" - ], + "node_modules/@babel/plugin-transform-explicit-resource-management": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.29.7.tgz", + "integrity": "sha512-Rstj7coNz8sE+7Ju7ihpHLI564lsK5pUpNNlvptCIC/16E/S5hbl6n3kESPKdNRmqEWlpn5xpS5Q2dvXBsySLw==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/plugin-transform-destructuring": "^7.29.7" + }, "engines": { - "node": ">=18" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@esbuild/openbsd-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.2.tgz", - "integrity": "sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==", - "cpu": [ - "arm64" - ], + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.29.7.tgz", + "integrity": "sha512-zFpMOTLZBdW5LfObqcSbL6kefg4R4eLdmvS0wbN9M6D5Mym/sKm9toOoWyVOa+xDjvCnuWcHls2YonXwHvH3CQ==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, "engines": { - "node": ">=18" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.2.tgz", - "integrity": "sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==", - "cpu": [ - "x64" - ], + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.29.7.tgz", + "integrity": "sha512-24B2nOy2TeJSMheqwPD4DDQOV/elLSIlKxjZt4i05H5AgdPdWR3n18HnNrcJ+j76WJd9gbwb9jPjNYUy6RautA==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, "engines": { - "node": ">=18" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@esbuild/openharmony-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.2.tgz", - "integrity": "sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==", - "cpu": [ - "arm64" - ], + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.29.7.tgz", + "integrity": "sha512-zeSIHh0+E1Um1WJRXCFlHQYu2ieJNdivLLjlBEp+dIBu3S51n+SZZmIXjxnItw6pz56Cn+KvK68BIBVsxq2JiQ==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ], + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7" + }, "engines": { - "node": ">=18" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.2.tgz", - "integrity": "sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==", - "cpu": [ - "x64" - ], + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.29.7.tgz", + "integrity": "sha512-otRWaHXE6fbAGkePvaj/kvs3HsqXfPhlnzwSOlnFgbqCPMd975dW+4wZ00WFBt+/YlBGcJwNrARQTOJOb4ZrIg==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], + "dependencies": { + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, "engines": { - "node": ">=18" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.2.tgz", - "integrity": "sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==", - "cpu": [ - "arm64" - ], + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.29.7.tgz", + "integrity": "sha512-RRnE2+eon1rJAq8MnoF1b5kTpY1vU88twHcvcKMrsqP/jxIRqDVs9iJB5fqPuqyeFAW0wJo4MlUIPpQCq/aRsg==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ], + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, "engines": { - "node": ">=18" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.2.tgz", - "integrity": "sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==", - "cpu": [ - "ia32" - ], + "node_modules/@babel/plugin-transform-literals": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.29.7.tgz", + "integrity": "sha512-DZ/oLP21ZuWx1vKqnoNv6/tvEK48AQOBRai40CX9dTjGluvT/YZCyY3rryDtyUqCEoyNroy5KKPwX2iQCiRvyw==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ], + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, "engines": { - "node": ">=18" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@esbuild/win32-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.2.tgz", - "integrity": "sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==", - "cpu": [ - "x64" - ], + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.29.7.tgz", + "integrity": "sha512-A0H91hh6W8MFRkp5TqJmMr39jzGD1A1E1Ysiv2O06Sfbhkapm+XyIzxWCEh5kqwOZ1/8QZ0dY3SeQ7XBqfJd5Q==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ], + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, "engines": { - "node": ">=18" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", - "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.29.7.tgz", + "integrity": "sha512-hl1kwFZCCiDyfH25Xmco9jTrkPgnS9pmOzSG7W5I4SaGbLeqKv417hcU2RKmaxoPEgsoJh7ZPOrnPGq99bHoUg==", "dev": true, "license": "MIT", "dependencies": { - "eslint-visitor-keys": "^3.4.3" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=6.9.0" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.29.7.tgz", + "integrity": "sha512-fxtQoH3m5ywUSIfaH0FGCzWu4McsYon5bD3K4XnskC7f+OyQMj7rsOMi4NvvmJ83WwBAg4UCe+ov4VZlqEvyew==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" + }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=6.9.0" }, - "funding": { - "url": "https://opencollective.com/eslint" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", - "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.29.7.tgz", + "integrity": "sha512-j0vCldybPC5b5dwCQOJ21uKtHzt7hxLygJTg9eF1ScfaikEDNfzn94XoW5Fi+seBR0nCyL23xaBFFkq7dTM8XQ==", "dev": true, "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" + }, "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@eslint/config-array": { - "version": "0.21.1", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz", - "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==", + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.29.8.tgz", + "integrity": "sha512-6iSnEK0zlkLKU4heofK/AdmRD4e2SHVpJMtrwnTCzhnaM98ria4rTrOXBBi45BTTYnJtO8txnPsX4fChYXkmeA==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "@eslint/object-schema": "^2.1.7", - "debug": "^4.3.1", - "minimatch": "^3.1.2" + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7", + "@babel/traverse": "^7.29.8" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@eslint/config-helpers": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz", - "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==", + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.29.7.tgz", + "integrity": "sha512-B4UkaTK3QpgCwJnrxKfMPKdo92CN7OKXAlpAAnM3UPu0Q0lCCk57ylA9AJbRy2v8dDKOPAAWcoR6CMyeoHwRCA==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "@eslint/core": "^0.17.0" + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@eslint/core": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz", - "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.29.7.tgz", + "integrity": "sha512-vuFoLwr4qnv2xbZ16SQd6uPcH5FNrLHhk/Jzo++0XJFcaDsr4gjJVg6j398oMHiC+83k/GiBzviwF5KBJkPUtQ==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "@types/json-schema": "^7.0.15" + "@babel/helper-create-regexp-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@eslint/eslintrc": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.3.tgz", - "integrity": "sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==", + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.29.7.tgz", + "integrity": "sha512-fEo41GmsOUhOBlw8ioo6zvjX5Xc2Lqkzlyfqbpsk3eB6TReV18uhxZ0esfEokVbY2+PVJAQHNKxER6lGrzNd3A==", "dev": true, "license": "MIT", "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^10.0.1", - "globals": "^14.0.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.1", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=6.9.0" }, - "funding": { - "url": "https://opencollective.com/eslint" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", - "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.29.7.tgz", + "integrity": "sha512-idmp1dFaekP9GbcMvG24Kvw2BfhFZjHnNJCkV4WuIY4PskJzwI3f1N5OdgYke38T7rftO6ERulFRn2cFeZwRkg==", "dev": true, "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, "engines": { - "node": ">=18" + "node": ">=6.9.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@eslint/js": { - "version": "9.39.2", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.2.tgz", - "integrity": "sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==", + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.29.7.tgz", + "integrity": "sha512-zR7fv/z14OjgHl4AgRtkDBvBMhIzCxqV/qN/2BCRC7LjFwvuzjYe7gDWxC4Wl/SNsLM6SE1IWvRPYMgSJaUvNw==", "dev": true, "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=6.9.0" }, - "funding": { - "url": "https://eslint.org/donate" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@eslint/object-schema": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", - "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.29.7.tgz", + "integrity": "sha512-Ld98jn4c0smUywL57m7SgsHq3OpThOa6LqZJif3G6jYOovPleoFhVrBJ1WegRApSFB2wu4+RelAj9AC9G08Z4A==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/plugin-transform-destructuring": "^7.29.7", + "@babel/plugin-transform-parameters": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@eslint/plugin-kit": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz", - "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.29.7.tgz", + "integrity": "sha512-Ea/diGcw0twB5IlZPO5sgET6fJsLJqPABqTuFWIR+iMPGPZJkATEIWx0wa+aEQ5UY1CBQyP/gkAiLEqn1vBiQA==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "@eslint/core": "^0.17.0", - "levn": "^0.4.1" + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-replace-supers": "^7.29.7" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@humanfs/core": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", - "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.29.7.tgz", + "integrity": "sha512-sLsyndxK2VwX6yNUOakMb7Sh553ZTe/vVM1XJ+9Z5aW1ytsc8xOIwmyk05NNjN60vkc5/KqoTH6hB4V41LJhng==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, "engines": { - "node": ">=18.18.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@humanfs/node": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", - "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.29.7.tgz", + "integrity": "sha512-6GM1dhvK3gNODkXcEcMCOLEDCLSoZ/sBbro2Ax8HURyasQ4NshagQixkRFdh5niI6E4gmA/jYI/4aT7rRos3ZQ==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "@humanfs/core": "^0.19.1", - "@humanwhocodes/retry": "^0.4.0" + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7" }, "engines": { - "node": ">=18.18.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.29.7.tgz", + "integrity": "sha512-ZDOBqV/qLYJI0YElr8DcENEyARsFQeESqWXH6gZlghYXuPPjvweuDhP4VyEi4BlUBlLRFZVjxoZDMjxhLW766g==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, "engines": { - "node": ">=12.22" + "node": ">=6.9.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@humanwhocodes/retry": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", - "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.29.7.tgz", + "integrity": "sha512-/6Rz4DK1ETDEM/bWHsPHcaEe7ZaT1EqSXjtSP/L0DijOYuaUhiRiOKcwpZ8P7zR4xXEHc2ITdiCgBm9Tpyv9ug==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" + }, "engines": { - "node": ">=18.18" + "node": ">=6.9.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", - "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.29.7.tgz", + "integrity": "sha512-+BNo06dnrzdNNqCm1X6YUaVv0DKk8Q+JYcoZfOkLhYWNCXzlwTSRq8zGWayT1csjcpNXV9CQTBRRbmTLZac5cA==", "dev": true, "license": "MIT", "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0", - "@jridgewell/trace-mapping": "^0.3.24" + "@babel/helper-annotate-as-pure": "^7.29.7", + "@babel/helper-create-class-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@jridgewell/remapping": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", - "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.29.7.tgz", + "integrity": "sha512-bOMRLQuI0A5ZqHq3OWJ89/rXpJ/NJrbVhXiP4zwPGMs6kpcVsuTUNjwoE30K0Qm3mf48a/TnRYYD6vPNqcg6jA==", "dev": true, "license": "MIT", "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", + "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", "dev": true, "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, "engines": { - "node": ">=6.0.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz", + "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.31", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", - "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.29.8.tgz", + "integrity": "sha512-0UpIXPtdDtMXfnV2OJAVMLpj3H/92vmkA6lpSRakmycJvj3VUy6Xs1dM8tXRugupykr5WB+LpiVl0J8LMVg2mg==", "dev": true, "license": "MIT", "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@mediapipe/tasks-vision": { - "version": "0.10.17", - "resolved": "https://registry.npmjs.org/@mediapipe/tasks-vision/-/tasks-vision-0.10.17.tgz", - "integrity": "sha512-CZWV/q6TTe8ta61cZXjfnnHsfWIdFhms03M9T7Cnd5y2mdpylJM0rF1qRq+wsQVRMLz1OYPVEBU9ph2Bx8cxrg==", - "license": "Apache-2.0" - }, - "node_modules/@monogrid/gainmap-js": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@monogrid/gainmap-js/-/gainmap-js-3.4.0.tgz", - "integrity": "sha512-2Z0FATFHaoYJ8b+Y4y4Hgfn3FRFwuU5zRrk+9dFWp4uGAdHGqVEdP7HP+gLA3X469KXHmfupJaUbKo1b/aDKIg==", + "node_modules/@babel/plugin-transform-regexp-modifiers": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.29.7.tgz", + "integrity": "sha512-mB5Fs0VWrJ42ZCmc8114v60qetdaUVNkj9PmSZRmanCZM3S9hm0CFRLjRmYIsuXav14l2jvZ+4T8iiCGnhj3nQ==", + "dev": true, "license": "MIT", "dependencies": { - "promise-worker-transferable": "^1.0.4" + "@babel/helper-create-regexp-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { - "three": ">= 0.159.0" + "@babel/core": "^7.0.0" } }, - "node_modules/@react-three/drei": { - "version": "10.7.7", - "resolved": "https://registry.npmjs.org/@react-three/drei/-/drei-10.7.7.tgz", - "integrity": "sha512-ff+J5iloR0k4tC++QtD/j9u3w5fzfgFAWDtAGQah9pF2B1YgOq/5JxqY0/aVoQG5r3xSZz0cv5tk2YuBob4xEQ==", + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.29.7.tgz", + "integrity": "sha512-5+YhdpVgmfSmwZyLMftfaiffLRMHjzIRHFHHLdibcSyJm2pasMrKHrO3Ptrt2DRshjvpgjEJJ1zVW14WPq/6QA==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/runtime": "^7.26.0", - "@mediapipe/tasks-vision": "0.10.17", - "@monogrid/gainmap-js": "^3.0.6", - "@use-gesture/react": "^10.3.1", - "camera-controls": "^3.1.0", - "cross-env": "^7.0.3", - "detect-gpu": "^5.0.56", - "glsl-noise": "^0.0.0", - "hls.js": "^1.5.17", - "maath": "^0.10.8", - "meshline": "^3.3.1", - "stats-gl": "^2.2.8", - "stats.js": "^0.17.0", - "suspend-react": "^0.1.3", - "three-mesh-bvh": "^0.8.3", - "three-stdlib": "^2.35.6", - "troika-three-text": "^0.52.4", - "tunnel-rat": "^0.1.2", - "use-sync-external-store": "^1.4.0", - "utility-types": "^3.11.0", - "zustand": "^5.0.1" + "@babel/helper-plugin-utils": "^7.29.7" }, - "peerDependencies": { - "@react-three/fiber": "^9.0.0", - "react": "^19", - "react-dom": "^19", - "three": ">=0.159" + "engines": { + "node": ">=6.9.0" }, - "peerDependenciesMeta": { - "react-dom": { - "optional": true - } + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@react-three/fiber": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/@react-three/fiber/-/fiber-9.5.0.tgz", - "integrity": "sha512-FiUzfYW4wB1+PpmsE47UM+mCads7j2+giRBltfwH7SNhah95rqJs3ltEs9V3pP8rYdS0QlNne+9Aj8dS/SiaIA==", + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.29.7.tgz", + "integrity": "sha512-I+WYbGBAiCn7nA6xBrlgPH+MB7HWb4u8pv5S0Pv7OtwNvIFvCCb24YlttKEeUFVurfBCEaOTnuhlqsb7f0Z5Dg==", + "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "@babel/runtime": "^7.17.8", - "@types/webxr": "*", - "base64-js": "^1.5.1", - "buffer": "^6.0.3", - "its-fine": "^2.0.0", - "react-use-measure": "^2.1.7", - "scheduler": "^0.27.0", - "suspend-react": "^0.1.3", - "use-sync-external-store": "^1.4.0", - "zustand": "^5.0.3" - }, - "peerDependencies": { - "expo": ">=43.0", - "expo-asset": ">=8.4", - "expo-file-system": ">=11.0", - "expo-gl": ">=11.0", - "react": ">=19 <19.3", - "react-dom": ">=19 <19.3", - "react-native": ">=0.78", - "three": ">=0.156" + "@babel/helper-plugin-utils": "^7.29.7" }, - "peerDependenciesMeta": { - "expo": { - "optional": true - }, - "expo-asset": { - "optional": true - }, - "expo-file-system": { - "optional": true - }, - "expo-gl": { - "optional": true - }, - "react-dom": { - "optional": true - }, - "react-native": { - "optional": true - } + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@rolldown/pluginutils": { - "version": "1.0.0-beta.53", - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.53.tgz", - "integrity": "sha512-vENRlFU4YbrwVqNDZ7fLvy+JR1CRkyr01jhSiDpE1u6py3OMzQfztQU2jxykW3ALNxO4kSlqIDeYyD0Y9RcQeQ==", + "node_modules/@babel/plugin-transform-spread": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.29.8.tgz", + "integrity": "sha512-4S9ksMGVWUshvgK0mKfvZky7leuG5/uoFVwMpAomJ8bMoDJiNHRVmc1EglwW/CmGVSqqWpEbXm9FmbRit22qoA==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.59.0.tgz", - "integrity": "sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==", - "cpu": [ - "arm" - ], + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.29.7.tgz", + "integrity": "sha512-BCHzNYJGe9l7EpwwDBN/ztlL2NYFFq8hp9ddjtUEM9f2O7S7kKV/lL6Fwo7IF7NSkYhPK2vO+86nIGltA90MsA==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "android" - ] + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.59.0.tgz", - "integrity": "sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==", - "cpu": [ - "arm64" - ], + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.29.7.tgz", + "integrity": "sha512-NCSEJ4sLFU2gqAub45HYh4fus2yQ36rr6ei6vpU7NdoJqCpxvEG8E6eJpscGyXP3VHD2Ny+fSXr04k1hoUrFqA==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "android" - ] + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.59.0.tgz", - "integrity": "sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==", - "cpu": [ - "arm64" - ], + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.29.7.tgz", + "integrity": "sha512-223mNGoTkBiTEWFoK+Q6Go3tueMRclO8vxxxxquNCYuNI4jWOofFKJRRDu6SDrB8Sgo1UEGW9T4GAQ8ZyRso1A==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.59.0.tgz", - "integrity": "sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==", - "cpu": [ - "x64" + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.29.7.tgz", + "integrity": "sha512-jCfXxSjf94lf4E0hKE0AByxF6F3/pVFqRdUUNkDJhsY0m1ZKjnN6ZYyMeHNpzflxb/0q5b7t3p+BE+SLF1WOtA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.29.7.tgz", + "integrity": "sha512-OgZ+zoAJgZLUCunsTRQ5LAjOywDv5zzZ2/hQ5aMw1pGXyY2rtE8/chXYUmu3AlVHKpm10KEdG9aMwbI/K76ZGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.29.7.tgz", + "integrity": "sha512-7D/x/23/d/3VqZ0QA+LGbZMlGwZjztBygSWWWsfTPoQ1oQ6Q1P6Mr3d0kk42XabyUVw+fha3LqdRsFqeKqvCyA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.29.7.tgz", + "integrity": "sha512-BLOhLht9DOJwIxlmp91wHvkXv1lguuHS3/FwUO8HL1H0u8s4hR1gASVFyilu9iGtcTRYqjTZmlsFFeQletntEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.29.7.tgz", + "integrity": "sha512-GYzX36n1nsciIb0uyH0GHwxwtNwPQIcpxSeiVLDtG/B7jB5xXgchnmL1f/jCX5o+pwnaDBtO60ONSJhEBJfxYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.29.7", + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-validator-option": "^7.29.7", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.29.7", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.29.7", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.29.7", + "@babel/plugin-bugfix-safari-rest-destructuring-rhs-array": "^7.29.7", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.29.7", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.29.7", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-import-assertions": "^7.29.7", + "@babel/plugin-syntax-import-attributes": "^7.29.7", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.29.7", + "@babel/plugin-transform-async-generator-functions": "^7.29.7", + "@babel/plugin-transform-async-to-generator": "^7.29.7", + "@babel/plugin-transform-block-scoped-functions": "^7.29.7", + "@babel/plugin-transform-block-scoping": "^7.29.7", + "@babel/plugin-transform-class-properties": "^7.29.7", + "@babel/plugin-transform-class-static-block": "^7.29.7", + "@babel/plugin-transform-classes": "^7.29.7", + "@babel/plugin-transform-computed-properties": "^7.29.7", + "@babel/plugin-transform-destructuring": "^7.29.7", + "@babel/plugin-transform-dotall-regex": "^7.29.7", + "@babel/plugin-transform-duplicate-keys": "^7.29.7", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.29.7", + "@babel/plugin-transform-dynamic-import": "^7.29.7", + "@babel/plugin-transform-explicit-resource-management": "^7.29.7", + "@babel/plugin-transform-exponentiation-operator": "^7.29.7", + "@babel/plugin-transform-export-namespace-from": "^7.29.7", + "@babel/plugin-transform-for-of": "^7.29.7", + "@babel/plugin-transform-function-name": "^7.29.7", + "@babel/plugin-transform-json-strings": "^7.29.7", + "@babel/plugin-transform-literals": "^7.29.7", + "@babel/plugin-transform-logical-assignment-operators": "^7.29.7", + "@babel/plugin-transform-member-expression-literals": "^7.29.7", + "@babel/plugin-transform-modules-amd": "^7.29.7", + "@babel/plugin-transform-modules-commonjs": "^7.29.7", + "@babel/plugin-transform-modules-systemjs": "^7.29.7", + "@babel/plugin-transform-modules-umd": "^7.29.7", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.29.7", + "@babel/plugin-transform-new-target": "^7.29.7", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.29.7", + "@babel/plugin-transform-numeric-separator": "^7.29.7", + "@babel/plugin-transform-object-rest-spread": "^7.29.7", + "@babel/plugin-transform-object-super": "^7.29.7", + "@babel/plugin-transform-optional-catch-binding": "^7.29.7", + "@babel/plugin-transform-optional-chaining": "^7.29.7", + "@babel/plugin-transform-parameters": "^7.29.7", + "@babel/plugin-transform-private-methods": "^7.29.7", + "@babel/plugin-transform-private-property-in-object": "^7.29.7", + "@babel/plugin-transform-property-literals": "^7.29.7", + "@babel/plugin-transform-regenerator": "^7.29.7", + "@babel/plugin-transform-regexp-modifiers": "^7.29.7", + "@babel/plugin-transform-reserved-words": "^7.29.7", + "@babel/plugin-transform-shorthand-properties": "^7.29.7", + "@babel/plugin-transform-spread": "^7.29.7", + "@babel/plugin-transform-sticky-regex": "^7.29.7", + "@babel/plugin-transform-template-literals": "^7.29.7", + "@babel/plugin-transform-typeof-symbol": "^7.29.7", + "@babel/plugin-transform-unicode-escapes": "^7.29.7", + "@babel/plugin-transform-unicode-property-regex": "^7.29.7", + "@babel/plugin-transform-unicode-regex": "^7.29.7", + "@babel/plugin-transform-unicode-sets-regex": "^7.29.7", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.15", + "babel-plugin-polyfill-corejs3": "^0.14.0", + "babel-plugin-polyfill-regenerator": "^0.6.6", + "core-js-compat": "^3.48.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.29.10", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.10.tgz", + "integrity": "sha512-NpugTzbKgGrNe45Ui32cN8vCFFMxVtP/9rtfwv0nP5FRDAjvYBxJcLVpYA9mr1jxP6cnIT7x9LUzuDTbWYYNRA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz", + "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.29.10", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.10.tgz", + "integrity": "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.8", + "@babel/helper-globals": "^7.29.7", + "@babel/parser": "^7.29.9", + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.8", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz", + "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bramus/specificity": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/@bramus/specificity/-/specificity-2.4.3.tgz", + "integrity": "sha512-0GEz8qJWokkUVYQYRukmkSHIFNoBH8QTreeHrAFbvz1XFYc3Y+puhMs8PQ5x8GNugiC2l5jvDBXKLbBIByeSBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "css-tree": "^3.2.1" + }, + "bin": { + "specificity": "bin/cli.js" + } + }, + "node_modules/@csstools/color-helpers": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-6.1.2.tgz", + "integrity": "sha512-grhRy3OKmniaAEKXMjua5z/EODX0MSqBGjunw8+j/3HQjOnahs2AGhvEOIYVUWcU6ScApbhLhVrQTX8XqrMrow==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=20.19.0" + } + }, + "node_modules/@csstools/css-calc": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-3.4.3.tgz", + "integrity": "sha512-iex20d8CHVkyvg6B7UKV7uHnI2Bqo9g+EFfT9E0y+GvTvhZ/DwONJ+9aKb1dlqm0ZiGsL5RXjp0fCoJYnkeDjA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } ], + "license": "MIT", + "engines": { + "node": ">=20.19.0" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^4.0.2", + "@csstools/css-tokenizer": "^4.0.2" + } + }, + "node_modules/@csstools/css-color-parser": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-4.2.6.tgz", + "integrity": "sha512-iiPQ3iRWwnJkeEn6RIu6SJPr7hYrLz6XZ9s/QZl+2/LI5KQVjpl2fdmDSZKuD4xP6GMmMPgHFFXg6k1Wkz0Trg==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] + "dependencies": { + "@csstools/color-helpers": "^6.1.2", + "@csstools/css-calc": "^3.4.3" + }, + "engines": { + "node": ">=20.19.0" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^4.0.2", + "@csstools/css-tokenizer": "^4.0.2" + } }, - "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.59.0.tgz", - "integrity": "sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==", - "cpu": [ - "arm64" + "node_modules/@csstools/css-parser-algorithms": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-4.0.2.tgz", + "integrity": "sha512-40cSKyMvK+tq4qz6Awrlye2WGuOKt3FwPgtGg6KTfbHOWNw+Rk1rzbAtZnZ6IBhsY491HLRnDXwoyBAijmmILA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=20.19.0" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^4.0.2" + } + }, + "node_modules/@csstools/css-syntax-patches-for-csstree": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.1.15.tgz", + "integrity": "sha512-J0u7HkVl2nzSlhsiTOp4AmwcUQ3D+mGEEKfBy/7To5/y7F2OHwyLrXfrhR0SMgr4p5Lo+eaMVSeai24zUcBIxA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } ], + "license": "MIT-0", + "peerDependencies": { + "css-tree": "^3.2.1" + }, + "peerDependenciesMeta": { + "css-tree": { + "optional": true + } + } + }, + "node_modules/@csstools/css-tokenizer": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-4.0.2.tgz", + "integrity": "sha512-OoKoR0f76dCY666JlcbhmVTs2drYj1GUXZTYTcbUgJjh9Nv41aFfZ21bPQTERm5+L5cBDo466NltB2lplS5GBw==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] + "engines": { + "node": ">=20.19.0" + } }, - "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.59.0.tgz", - "integrity": "sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==", + "node_modules/@esbuild/aix-ppc64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz", + "integrity": "sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==", "cpu": [ - "x64" + "ppc64" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "freebsd" - ] + "aix" + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.59.0.tgz", - "integrity": "sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==", + "node_modules/@esbuild/android-arm": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.2.tgz", + "integrity": "sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==", "cpu": [ "arm" ], @@ -1241,41 +1852,135 @@ "license": "MIT", "optional": true, "os": [ - "linux" - ] + "android" + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.59.0.tgz", - "integrity": "sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==", + "node_modules/@esbuild/android-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.2.tgz", + "integrity": "sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==", "cpu": [ - "arm" + "arm64" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "linux" - ] + "android" + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.59.0.tgz", - "integrity": "sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==", + "node_modules/@esbuild/android-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.2.tgz", + "integrity": "sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.2.tgz", + "integrity": "sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.2.tgz", + "integrity": "sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.2.tgz", + "integrity": "sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==", "cpu": [ "arm64" ], "dev": true, "license": "MIT", "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.2.tgz", + "integrity": "sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.2.tgz", + "integrity": "sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.59.0.tgz", - "integrity": "sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==", + "node_modules/@esbuild/linux-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.2.tgz", + "integrity": "sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==", "cpu": [ "arm64" ], @@ -1284,812 +1989,5313 @@ "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.59.0.tgz", - "integrity": "sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==", + "node_modules/@esbuild/linux-ia32": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.2.tgz", + "integrity": "sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.2.tgz", + "integrity": "sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==", "cpu": [ "loong64" ], "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.2.tgz", + "integrity": "sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.2.tgz", + "integrity": "sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.2.tgz", + "integrity": "sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.2.tgz", + "integrity": "sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.2.tgz", + "integrity": "sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.2.tgz", + "integrity": "sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.2.tgz", + "integrity": "sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.2.tgz", + "integrity": "sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.2.tgz", + "integrity": "sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.2.tgz", + "integrity": "sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.2.tgz", + "integrity": "sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.2.tgz", + "integrity": "sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.2.tgz", + "integrity": "sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.2.tgz", + "integrity": "sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", + "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz", + "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.7", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz", + "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz", + "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.3.tgz", + "integrity": "sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.1", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "9.39.2", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.2.tgz", + "integrity": "sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", + "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz", + "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@exodus/bytes": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/@exodus/bytes/-/bytes-1.16.0.tgz", + "integrity": "sha512-IcpW84uEn3N7ETtNZMlxKhfl6Pec8rUNGOTBtWbK1FKhJxIFAptZyVrvVRVBimAJxJCgc3PxepxkdWWG4DVzfA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + }, + "peerDependencies": { + "@noble/hashes": "^1.8.0 || ^2.0.0" + }, + "peerDependenciesMeta": { + "@noble/hashes": { + "optional": true + } + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", + "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.4.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@isaacs/cliui": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-9.0.0.tgz", + "integrity": "sha512-AokJm4tuBHillT+FpMtxQ60n8ObyXBatq7jD2/JA9dxbDDokKQm8KMht5ibGzLVU9IJDIKK4TPKgMHEYMn3lMg==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", + "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.53", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.53.tgz", + "integrity": "sha512-vENRlFU4YbrwVqNDZ7fLvy+JR1CRkyr01jhSiDpE1u6py3OMzQfztQU2jxykW3ALNxO4kSlqIDeYyD0Y9RcQeQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/plugin-babel": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-6.1.0.tgz", + "integrity": "sha512-dFZNuFD2YRcoomP4oYf+DvQNSUA9ih+A3vUqopQx5EdtPGo3WBnQcI/S8pwpz91UsGfL0HsMSOlaMld8HrbubA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.18.6", + "@rollup/pluginutils": "^5.0.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "@types/babel__core": "^7.1.9", + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "@types/babel__core": { + "optional": true + }, + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-16.0.3.tgz", + "integrity": "sha512-lUYM3UBGuM93CnMPG1YocWu7X802BrNF3jW2zny5gQyLQgRFJhV1Sq0Zi74+dh/6NBx1DxFC4b4GXg9wUCG5Qg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.22.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.78.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-replace": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-6.0.3.tgz", + "integrity": "sha512-J4RZarRvQAm5IF0/LwUUg+obsm+xZhYnbMXmXROyoSE1ATJe3oXSb9L5MMppdxP2ylNSjv6zFBwKYjcKMucVfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "magic-string": "^0.30.3" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-terser": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-terser/-/plugin-terser-1.0.0.tgz", + "integrity": "sha512-FnCxhTBx6bMOYQrar6C8h3scPt8/JwIzw3+AJ2K++6guogH5fYaIFia+zZuhqv0eo1RN7W1Pz630SyvLbDjhtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "serialize-javascript": "^7.0.3", + "smob": "^1.0.0", + "terser": "^5.17.4" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "rollup": "^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.4.0.tgz", + "integrity": "sha512-MfPp06CjRLfXQ3wY0R8vJDYBy/MvVcc9OulEfR0B8Iv9ko+GCNaRZ+EpJYFl27LhKsZK0o420sYCRHCjfCgeUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils/node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.59.0.tgz", + "integrity": "sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.59.0.tgz", + "integrity": "sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.59.0.tgz", + "integrity": "sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.59.0.tgz", + "integrity": "sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.59.0.tgz", + "integrity": "sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.59.0.tgz", + "integrity": "sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.59.0.tgz", + "integrity": "sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.59.0.tgz", + "integrity": "sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.59.0.tgz", + "integrity": "sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.59.0.tgz", + "integrity": "sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.59.0.tgz", + "integrity": "sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.59.0.tgz", + "integrity": "sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.59.0.tgz", + "integrity": "sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.59.0.tgz", + "integrity": "sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.59.0.tgz", + "integrity": "sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.59.0.tgz", + "integrity": "sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.59.0.tgz", + "integrity": "sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.59.0.tgz", + "integrity": "sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.59.0.tgz", + "integrity": "sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.59.0.tgz", + "integrity": "sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.59.0.tgz", + "integrity": "sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.59.0.tgz", + "integrity": "sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.59.0.tgz", + "integrity": "sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.59.0.tgz", + "integrity": "sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.59.0.tgz", + "integrity": "sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@tailwindcss/node": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.3.3.tgz", + "integrity": "sha512-/T8IKEsf9VTU6tLjgC7+sv2mOPtQxzE2jMw7u4Tt40Tx+QSZxpzh95/H6cMKoja9XuW7iMdLJYBB0o9G1CaAgg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.5", + "enhanced-resolve": "^5.24.1", + "jiti": "^2.7.0", + "lightningcss": "1.32.0", + "magic-string": "^0.30.21", + "source-map-js": "^1.2.1", + "tailwindcss": "4.3.3" + } + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.3.3.tgz", + "integrity": "sha512-krXjAikiaFSPaK/FkAQT5UTx3VormQaiZ5hBFlJZ9UFQGB/rwg1MZIhHAG9smMQRTdyJxP6Qt5MwMtdyU5FWrA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.3.3", + "@tailwindcss/oxide-darwin-arm64": "4.3.3", + "@tailwindcss/oxide-darwin-x64": "4.3.3", + "@tailwindcss/oxide-freebsd-x64": "4.3.3", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.3.3", + "@tailwindcss/oxide-linux-arm64-gnu": "4.3.3", + "@tailwindcss/oxide-linux-arm64-musl": "4.3.3", + "@tailwindcss/oxide-linux-x64-gnu": "4.3.3", + "@tailwindcss/oxide-linux-x64-musl": "4.3.3", + "@tailwindcss/oxide-wasm32-wasi": "4.3.3", + "@tailwindcss/oxide-win32-arm64-msvc": "4.3.3", + "@tailwindcss/oxide-win32-x64-msvc": "4.3.3" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.3.3.tgz", + "integrity": "sha512-Y85A2gmPSkl5Ve5qR86GL4HT509cFqQh1aes9p3sSkyTPwt0Pppf3GkwGe4JPACcRYjgJIEhQgM6dBClnr0NYw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.3.3.tgz", + "integrity": "sha512-BiaWatpBcERQFDlOjRDpIVXuFK5PJez5SA4JMg6VYZdBYU+qKfV/vqjcIs+IYmtitf1xYQZTwXvU/8y4lfZUGw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.3.3.tgz", + "integrity": "sha512-fAeUqfV5ndhxRwai8cXGzdLvul9utWOmeTkv69unv4ZXixjn61Z+p9lCWdwOwA3TYboG3BwdVuN/RDjhBRl0mw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.3.3.tgz", + "integrity": "sha512-iyf5bV6+wnAlflVeEy7R25dupxTNECZN5QMI0qNT6eT+EgaGdZcKhGkr5SdoaWiLJ3spLqIY9VCeSGrwmtg4kw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.3.3.tgz", + "integrity": "sha512-aAYUprJAJQWWbRrPvtjdroZ56Md+JM8pMiopS6xGEwDfLhqj+2ver2p4nU4Mb3CRqcMmNBjo8KkUgcxhkzVQGQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.3.3.tgz", + "integrity": "sha512-nDxldcEENOxZRzC2uu9jrutZdAAQtb+8WWDCSnWL1zvBk1+FN+x6MtDViPB5AJMfttVCUhehGWus3XBPgatM/w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.3.3.tgz", + "integrity": "sha512-Md44bD6veX/PC5iyF8cDVnw4HBIANZepRZZ7a8DQOvkfo5WUBwcp6iAuCUz23u+4SUkhJlD3eL7hNdW8ezd/kA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.3.3.tgz", + "integrity": "sha512-tx7us1muwOKAKWao2v/GaafFeQboE6aj88vC6ziN2NCGcRm8gWUhwjzg+YdVB1e4boAtdtma4L43onunI6NS4w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.3.3.tgz", + "integrity": "sha512-SJxX60smvHgasZoBy11dX6YRjXJFovwWBoedhbQPOBzgFWBHGB+TVPWB9BxzR7TTxU8FQZAI2AyiNCMzFm8Img==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.3.3.tgz", + "integrity": "sha512-jx1+rPhY/5Ympkktd656HBWEBLxP7dH06losBLjjf5vgCODXvi9KhtftWcMIwTFIDqBr7cRnQkdLnAG+IOlGvQ==", + "bundleDependencies": [ + "@napi-rs/wasm-runtime", + "@emnapi/core", + "@emnapi/runtime", + "@tybys/wasm-util", + "@emnapi/wasi-threads", + "tslib" + ], + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.11.1", + "@emnapi/runtime": "^1.11.1", + "@emnapi/wasi-threads": "^1.2.2", + "@napi-rs/wasm-runtime": "^1.1.4", + "@tybys/wasm-util": "^0.10.2", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.3.3.tgz", + "integrity": "sha512-3rc292Ca2ceK6Ulcc/bAVnTs/3nDtoPhyEKlgPv+yQJQi/JS/AMJlqzxvlDacL1nekbrcf6bTqp/jV4qgnPxNQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.3.3.tgz", + "integrity": "sha512-yJ0pwIVc/nYeGoV02WtsN8KYyLQv7kyI2wDnkezyJlGGjkd4QLwDGAwl47YpPJeuI0M0ObaXGSPjvWDPeTPggw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/vite": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.3.3.tgz", + "integrity": "sha512-yYU8cogLeSh/ms2jh8Fj7jaba/EWa7Ja6GoUqYZaraEuCI5YS6ms6ObZgjjedm+jm6XZjdNRWBpPP6Z86oOxcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tailwindcss/node": "4.3.3", + "@tailwindcss/oxide": "4.3.3", + "tailwindcss": "4.3.3" + }, + "peerDependencies": { + "vite": "^5.2.0 || ^6 || ^7 || ^8" + } + }, + "node_modules/@testing-library/dom": { + "version": "10.4.2", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.2.tgz", + "integrity": "sha512-yzr2S9HyAIdhz2/6qHgbs665Q7PKVcDF05vsOlHPxG1mo36gKVesdYVeDLnXgfjJ03CrKRk08knc6+E/9m8v2Q==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.3.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "picocolors": "1.1.1", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@testing-library/jest-dom": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-7.0.1.tgz", + "integrity": "sha512-oMDTC3oA+6CXSO2JZnvOI7CA6oVub6kij5ggk9ohwye5slmkwxYDXcPOVxgMw/RQlticjtO0C1RZkR97HgrWMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@adobe/css-tools": "^4.4.0", + "aria-query": "^5.0.0", + "css.escape": "^1.5.1", + "dom-accessibility-api": "^0.6.3", + "picocolors": "^1.1.1", + "redent": "^3.0.0" + }, + "engines": { + "node": ">=22", + "npm": ">=6", + "yarn": ">=1" + }, + "peerDependencies": { + "@testing-library/dom": ">=10 <11", + "vitest": ">= 0.32" + }, + "peerDependenciesMeta": { + "vitest": { + "optional": true + } + } + }, + "node_modules/@testing-library/jest-dom/node_modules/dom-accessibility-api": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz", + "integrity": "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@testing-library/react": { + "version": "16.3.3", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-16.3.3.tgz", + "integrity": "sha512-Uo193NgQbPMz6lrrhtRQQFcMC6Re/ELLFbbuVL30WDlZxlpZf9/lMHTAVxPRLw1q1iu9OJmR1c2BLiENRstdBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@testing-library/dom": "^10.0.0", + "@types/react": "^18.0.0 || ^19.0.0", + "@types/react-dom": "^18.0.0 || ^19.0.0", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@testing-library/user-event": { + "version": "14.6.8", + "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.6.8.tgz", + "integrity": "sha512-vgSSqnANMnkcYR/vUNDbwS7aM3OErRLNUG8vCVVlj4oc6cKffUrccX7UAS5AmJQQNZTSibi9z5GvvRZ0aYgUCQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12", + "npm": ">=6" + }, + "peerDependencies": { + "@testing-library/dom": ">=7.21.4" + } + }, + "node_modules/@trickfilm400/rollup-plugin-off-main-thread": { + "version": "3.0.0-pre1", + "resolved": "https://registry.npmjs.org/@trickfilm400/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-3.0.0-pre1.tgz", + "integrity": "sha512-/67zpWDBLV+oYAEL682s1ktXL0HgqX76f6gaVGkGnVZlBbm1zd0v4Bz8MFF2GGhoX9rvfq3KSQHubFHwa6w6/Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "ejs": "^3.1.10", + "json5": "^2.2.3", + "magic-string": "^0.30.21", + "string.prototype.matchall": "^4.0.12" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@types/aria-query": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", + "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.2" + } + }, + "node_modules/@types/chai": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", + "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/deep-eql": "*", + "assertion-error": "^2.0.1" + } + }, + "node_modules/@types/deep-eql": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", + "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "24.10.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.9.tgz", + "integrity": "sha512-ne4A0IpG3+2ETuREInjPNhUGis1SFjv1d5asp8MzEAGtOZeTeHVDOYqOgqfhvseqg/iXty2hjBf1zAOb7RNiNw==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~7.16.0" + } + }, + "node_modules/@types/react": { + "version": "19.2.9", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.9.tgz", + "integrity": "sha512-Lpo8kgb/igvMIPeNV2rsYKTgaORYdO1XGVZ4Qz3akwOj0ySGYMPlQWa8BaLn0G63D1aSaAQ5ldR06wCpChQCjA==", + "dev": true, + "license": "MIT", + "dependencies": { + "csstype": "^3.2.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz", + "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.2.0" + } + }, + "node_modules/@types/resolve": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.53.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.53.1.tgz", + "integrity": "sha512-cFYYFZ+oQFi6hUnBTbLRXfTJiaQtYE3t4O692agbBl+2Zy+eqSKWtPjhPXJu1G7j4RLjKgeJPDdq3EqOwmX5Ag==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.12.2", + "@typescript-eslint/scope-manager": "8.53.1", + "@typescript-eslint/type-utils": "8.53.1", + "@typescript-eslint/utils": "8.53.1", + "@typescript-eslint/visitor-keys": "8.53.1", + "ignore": "^7.0.5", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.4.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.53.1", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.53.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.53.1.tgz", + "integrity": "sha512-nm3cvFN9SqZGXjmw5bZ6cGmvJSyJPn0wU9gHAZZHDnZl2wF9PhHv78Xf06E0MaNk4zLVHL8hb2/c32XvyJOLQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "8.53.1", + "@typescript-eslint/types": "8.53.1", + "@typescript-eslint/typescript-estree": "8.53.1", + "@typescript-eslint/visitor-keys": "8.53.1", + "debug": "^4.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.53.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.53.1.tgz", + "integrity": "sha512-WYC4FB5Ra0xidsmlPb+1SsnaSKPmS3gsjIARwbEkHkoWloQmuzcfypljaJcR78uyLA1h8sHdWWPHSLDI+MtNog==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.53.1", + "@typescript-eslint/types": "^8.53.1", + "debug": "^4.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.53.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.53.1.tgz", + "integrity": "sha512-Lu23yw1uJMFY8cUeq7JlrizAgeQvWugNQzJp8C3x8Eo5Jw5Q2ykMdiiTB9vBVOOUBysMzmRRmUfwFrZuI2C4SQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.53.1", + "@typescript-eslint/visitor-keys": "8.53.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.53.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.53.1.tgz", + "integrity": "sha512-qfvLXS6F6b1y43pnf0pPbXJ+YoXIC7HKg0UGZ27uMIemKMKA6XH2DTxsEDdpdN29D+vHV07x/pnlPNVLhdhWiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.53.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.53.1.tgz", + "integrity": "sha512-MOrdtNvyhy0rHyv0ENzub1d4wQYKb2NmIqG7qEqPWFW7Mpy2jzFC3pQ2yKDvirZB7jypm5uGjF2Qqs6OIqu47w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.53.1", + "@typescript-eslint/typescript-estree": "8.53.1", + "@typescript-eslint/utils": "8.53.1", + "debug": "^4.4.3", + "ts-api-utils": "^2.4.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.53.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.53.1.tgz", + "integrity": "sha512-jr/swrr2aRmUAUjW5/zQHbMaui//vQlsZcJKijZf3M26bnmLj8LyZUpj8/Rd6uzaek06OWsqdofN/Thenm5O8A==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.53.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.53.1.tgz", + "integrity": "sha512-RGlVipGhQAG4GxV1s34O91cxQ/vWiHJTDHbXRr0li2q/BGg3RR/7NM8QDWgkEgrwQYCvmJV9ichIwyoKCQ+DTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/project-service": "8.53.1", + "@typescript-eslint/tsconfig-utils": "8.53.1", + "@typescript-eslint/types": "8.53.1", + "@typescript-eslint/visitor-keys": "8.53.1", + "debug": "^4.4.3", + "minimatch": "^9.0.5", + "semver": "^7.7.3", + "tinyglobby": "^0.2.15", + "ts-api-utils": "^2.4.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.2" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.53.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.53.1.tgz", + "integrity": "sha512-c4bMvGVWW4hv6JmDUEG7fSYlWOl3II2I4ylt0NM+seinYQlZMQIaKaXIIVJWt9Ofh6whrpM+EdDQXKXjNovvrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.9.1", + "@typescript-eslint/scope-manager": "8.53.1", + "@typescript-eslint/types": "8.53.1", + "@typescript-eslint/typescript-estree": "8.53.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.53.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.53.1.tgz", + "integrity": "sha512-oy+wV7xDKFPRyNggmXuZQSBzvoLnpmJs+GhzRhPjrxl2b/jIlyjVokzm47CZCDUdXKr2zd7ZLodPfOBpOPyPlg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.53.1", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-5.1.2.tgz", + "integrity": "sha512-EcA07pHJouywpzsoTUqNh5NwGayl2PPVEJKUSinGGSxFGYn+shYbqMGBg6FXDqgXum9Ou/ecb+411ssw8HImJQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.28.5", + "@babel/plugin-transform-react-jsx-self": "^7.27.1", + "@babel/plugin-transform-react-jsx-source": "^7.27.1", + "@rolldown/pluginutils": "1.0.0-beta.53", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.18.0" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" + } + }, + "node_modules/@vitest/expect": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.7.tgz", + "integrity": "sha512-E8eBXaKibuvH2pSZErOjdVb5vF4PbKYcrnluBTYxEk1l/VhhwZg1kZQsdtjq+CsF5CFydf2Rdkz7jDHKSisi3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/chai": "^5.2.2", + "@vitest/spy": "3.2.7", + "@vitest/utils": "3.2.7", + "chai": "^5.2.0", + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/mocker": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.2.7.tgz", + "integrity": "sha512-Trr0hYO9CM3Wj6ksWHRhK9IZpIY6wTMO5u/MqXurMxT57sWBaOPEtP3Oq60ihZuh5JsiagKfz95OcxdEP6dBrA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "3.2.7", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.17" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "node_modules/@vitest/pretty-format": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.7.tgz", + "integrity": "sha512-KUHlwqVu0sRlhCdyPdQ/wBoTfRahjUky1MubOmYw9fWfIZy1gNoHpuaaQBPAaMaVYdQYHJLurzj8ECCj5OwTqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.2.7.tgz", + "integrity": "sha512-sB9y4ovltoQP+WaUPwmSxO9WIg9Ig694Di5PalVPsYHklAdE027mehpWF2SQSVq+k6sFgaivbTjTJwZLSHbedA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "3.2.7", + "pathe": "^2.0.3", + "strip-literal": "^3.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.2.7.tgz", + "integrity": "sha512-7C+MwShwtBSI5Buwoyg3s/iY1eHL9PKAf+O1wVh/TdnjXUtkoL/9YQtre90i4MtNXM6edP1wJ2zOBpfCyhIS7g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "3.2.7", + "magic-string": "^0.30.17", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/spy": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.7.tgz", + "integrity": "sha512-Q2eQGI6d2L/hBtZ0qNuKcAGid68XK6cv1xsoaIma6PaJhHPoqcEJhYpXZ/5myCMqkNgtP6UKuBhbc0nHKnrkuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyspy": "^4.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.2.7.tgz", + "integrity": "sha512-x6BDOd7dyo3PFLY3I9/HJ25X/6OurhGXk2/B9gOZNPF7XDVjeBK4k01lQE5uvDpbuheErh91qYuE1E2OEjK3Rw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "3.2.7", + "loupe": "^3.1.4", + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", + "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "dev": true, + "license": "MIT" + }, + "node_modules/async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.17", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.17.tgz", + "integrity": "sha512-aTyf30K/rqAsNwN76zYrdtx8obu0E4KoUME29B1xj+B3WxgvWkp943vYQ+z8Mv3lw9xHXMHpvSPOBxzAkIa94w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.28.6", + "@babel/helper-define-polyfill-provider": "^0.6.8", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.14.2.tgz", + "integrity": "sha512-coWpDLJ410R781Npmn/SIBZEsAetR4xVi0SxLMXPaMO4lSf1MwnkGYMtkFxew0Dn8B3/CpbpYxN0JCgg8mn67g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.8", + "core-js-compat": "^3.48.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.8.tgz", + "integrity": "sha512-M762rNHfSF1EV3SLtnCJXFoQbbIIz0OyRwnCmV0KPC7qosSfCO0QLTSuJX3ayAebubhE6oYBAYPrBA5ljowaZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.8" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/baseline-browser-mapping": { + "version": "2.11.30", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.30.tgz", + "integrity": "sha512-YJs6Pz17RMNv8HoyKREtCY38E3BV1nPkWVmIb+XN1uHC1Vqt3KZCH/uJH9ZKRoiKb/icZ6tvehyee6RZNbFfRA==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/bidi-js": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/bidi-js/-/bidi-js-1.1.0.tgz", + "integrity": "sha512-fX1Onk0tdVPC7obPWB5EbJ1z7NVhLq4m2xZLq2YXBkxzMXIGRpNMU88n0EPgWseKl12J7zXs7qrDxPK4sRs2fg==", + "dev": true, + "license": "MIT", + "dependencies": { + "require-from-string": "^2.0.2" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/browserslist": { + "version": "4.29.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.29.4.tgz", + "integrity": "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.11.29", + "caniuse-lite": "^1.0.30001816", + "electron-to-chromium": "^1.5.459", + "node-releases": "^2.0.59", + "update-browserslist-db": "^1.3.4" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/call-bind": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.9.tgz", + "integrity": "sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "get-intrinsic": "^1.3.0", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001817", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001817.tgz", + "integrity": "sha512-uZ1JG80BwhtMalIAGPxPfmNhHyd/B/nTdr3hITWlRamSyAdUStP1Gop01e7SD5q6J90ixJvWDbvmiFVfDgn4bw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chai": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.3.3.tgz", + "integrity": "sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "assertion-error": "^2.0.1", + "check-error": "^2.1.1", + "deep-eql": "^5.0.1", + "loupe": "^3.1.0", + "pathval": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/check-error": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.3.tgz", + "integrity": "sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/common-tags": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cookie": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz", + "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/core-js-compat": { + "version": "3.51.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.51.0.tgz", + "integrity": "sha512-52r6fkXgxv4GLMjmFcMWRx7X9bw071xTTdrDcdyPGRqU2oE+9pCG0bAOMifSBdLw0JRBZKEF0q3B55qPlLuE8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.29.3" + }, + "engines": { + "node": ">=6.4.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/css-tree": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.2.1.tgz", + "integrity": "sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "mdn-data": "2.27.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/css.escape": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", + "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==", + "dev": true, + "license": "MIT" + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/data-urls": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-8.0.0.tgz", + "integrity": "sha512-JQUCCK+/CAGbGGx618PlFZMXH81Jtj7t73CHv9dd/zVWvxgGT2zLFRjnKb+Ng46GIwcy+f7f88qd4duqllK+WQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-mimetype": "^5.0.0", + "whatwg-url": "^17.1.2" + }, + "engines": { + "node": "^22.14.0 || >=24.0.0" + } + }, + "node_modules/data-view-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/inspect-js" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decimal.js": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", + "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", + "dev": true, + "license": "MIT" + }, + "node_modules/deep-eql": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", + "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/dom-accessibility-api": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", + "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.460", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.460.tgz", + "integrity": "sha512-rRaVC7bNUyGsL+GMtmZfv3AfgG6za7gE9v5bT0PIbjEerddA0IQ+tCK05NFAXqCpNlrxBZqbFqquyxHRQONHTA==", + "dev": true, + "license": "ISC" + }, + "node_modules/enhanced-resolve": { + "version": "5.26.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.26.0.tgz", + "integrity": "sha512-9vhedylFonb2YGogzUKX6+Ja72gOJbN1QHAqdrvqLwhdl/QWbKopzoUC9EbQNVsAns/bx/4uyqalrQAoy1IByw==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.3.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-8.1.0.tgz", + "integrity": "sha512-kxL7msIffSuh9aaFAMD7rxAIuTRMAHMeBtgHW2yUdWw732ZNh4MehkF2gdjvtdmikkaIP9bFDDJOPlsvm7avrA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/es-abstract": { + "version": "1.24.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.2.tgz", + "integrity": "sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.2", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.2.1", + "is-set": "^2.0.3", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.1", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.4", + "object-keys": "^1.1.1", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.4", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "stop-iteration-iterator": "^1.1.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.19" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-abstract-get": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-abstract-get/-/es-abstract-get-1.0.0.tgz", + "integrity": "sha512-6PMWXpdhshVvFp+FoWYs1EvG1Nj0tvk0dZM+XcK0xMEM1czRVcP6ohqPWHy6qPagSpC8j4+p89WXlT+xXJs/fg==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.2", + "is-callable": "^1.2.7", + "object-inspect": "^1.13.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "dev": true, + "license": "MIT" + }, + "node_modules/es-object-atoms": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", + "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-to-primitive": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.4.tgz", + "integrity": "sha512-yPDz7wqpg1/mmHLmS3tcfTfbw5f1eryXvyghYBffGdERwe+mV7ZcWzTR8LR17Kvqt3qfPurjlonmnq3MKXIOXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-abstract-get": "^1.0.0", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "is-callable": "^1.2.7", + "is-date-object": "^1.1.0", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/esbuild": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.2.tgz", + "integrity": "sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.2", + "@esbuild/android-arm": "0.27.2", + "@esbuild/android-arm64": "0.27.2", + "@esbuild/android-x64": "0.27.2", + "@esbuild/darwin-arm64": "0.27.2", + "@esbuild/darwin-x64": "0.27.2", + "@esbuild/freebsd-arm64": "0.27.2", + "@esbuild/freebsd-x64": "0.27.2", + "@esbuild/linux-arm": "0.27.2", + "@esbuild/linux-arm64": "0.27.2", + "@esbuild/linux-ia32": "0.27.2", + "@esbuild/linux-loong64": "0.27.2", + "@esbuild/linux-mips64el": "0.27.2", + "@esbuild/linux-ppc64": "0.27.2", + "@esbuild/linux-riscv64": "0.27.2", + "@esbuild/linux-s390x": "0.27.2", + "@esbuild/linux-x64": "0.27.2", + "@esbuild/netbsd-arm64": "0.27.2", + "@esbuild/netbsd-x64": "0.27.2", + "@esbuild/openbsd-arm64": "0.27.2", + "@esbuild/openbsd-x64": "0.27.2", + "@esbuild/openharmony-arm64": "0.27.2", + "@esbuild/sunos-x64": "0.27.2", + "@esbuild/win32-arm64": "0.27.2", + "@esbuild/win32-ia32": "0.27.2", + "@esbuild/win32-x64": "0.27.2" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.39.2", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.2.tgz", + "integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.1", + "@eslint/config-helpers": "^0.4.2", + "@eslint/core": "^0.17.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.39.2", + "@eslint/plugin-kit": "^0.4.1", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-7.0.1.tgz", + "integrity": "sha512-O0d0m04evaNzEPoSW+59Mezf8Qt0InfgGIBJnpC0h3NH/WjUAR7BIKUfysC6todmtiZ/A0oUVS8Gce0WhBrHsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.24.4", + "@babel/parser": "^7.24.4", + "hermes-parser": "^0.25.1", + "zod": "^3.25.0 || ^4.0.0", + "zod-validation-error": "^3.5.0 || ^4.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" + } + }, + "node_modules/eslint-plugin-react-refresh": { + "version": "0.4.26", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.26.tgz", + "integrity": "sha512-1RETEylht2O6FM/MvgnyvT+8K21wLqDNg4qD51Zj3guhjt433XbnnkVttHMyaVyAFD03QSV4LPS5iE3VQmO7XQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "eslint": ">=8.40" + } + }, + "node_modules/eslint-scope": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eta": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/eta/-/eta-4.6.0.tgz", + "integrity": "sha512-lW6is4T1NFOYnmqGZIfvixqj7A7sSvScF+DN8EK6K58xI5MZ5UvYe0GjopxOXQtZvUn4eDdVuZ8XSoYWTMEKwA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/bgub/eta?sponsor=1" + } + }, + "node_modules/expect-type": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.4.0.tgz", + "integrity": "sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.9.tgz", + "integrity": "sha512-hS/0Wt3Ya043oKXs0sIxrMpKQITXhMLIrVAKKXi4gozGC9v7YRWVnXIZzjNPTO02M9BdxLCWqK1yRXgNziVyJQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/filelist": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.6.tgz", + "integrity": "sha512-5giy2PkLYY1cP39p17Ech+2xlpTRL9HLspOfEgm0L6CwBXBTgsK5ou0JtzYuepxkaQ/tvhCFIJ5uXo0OrM2DxA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.7.tgz", + "integrity": "sha512-uZbew1NqdmPDTMJ8ah1y+b+9QEJrfkXFk3RcTQw3X0jW/xRUvFKsg1CfQdSYGdTbXZWExtU3J3ccxtnfw1Fi0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", + "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true, + "license": "ISC" + }, + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/framer-motion": { + "version": "12.29.0", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.29.0.tgz", + "integrity": "sha512-1gEFGXHYV2BD42ZPTFmSU9buehppU+bCuOnHU0AD18DKh9j4DuTx47MvqY5ax+NNWRtK32qIcJf1UxKo1WwjWg==", + "license": "MIT", + "dependencies": { + "motion-dom": "^12.29.0", + "motion-utils": "^12.27.2", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "@emotion/is-prop-valid": "*", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/is-prop-valid": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.2.0.tgz", + "integrity": "sha512-jObKIik1P2QjPHP5nz5BaOtUlfgS0fWo8IUByNXkM+o+02sJOi94em77GwJKQSJ3gfPHdgzLNrHc1uokV4P/ew==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2", + "hasown": "^2.0.4", + "is-callable": "^1.2.7", + "is-document.all": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/generator-function": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz", + "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", + "dev": true, + "license": "ISC" + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-symbol-description": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.1.0.tgz", + "integrity": "sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "foreground-child": "^3.3.1", + "jackspeak": "^4.1.1", + "minimatch": "^10.1.1", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^2.0.0" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob/node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "5.0.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.12.tgz", + "integrity": "sha512-YovQ3rzhaLMIrDjNDMkNS01tea93qhEhG5xy8f6+R0l+dw3Ki+5sCoIoI942iuLZTHWogWktgwVDhU09iNEimQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "10.2.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.6.tgz", + "integrity": "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.8" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/globals": { + "version": "16.5.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-16.5.0.tgz", + "integrity": "sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/has-bigints": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hermes-estree": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz", + "integrity": "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==", + "dev": true, + "license": "MIT" + }, + "node_modules/hermes-parser": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.25.1.tgz", + "integrity": "sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "hermes-estree": "0.25.1" + } + }, + "node_modules/html-encoding-sniffer": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-7.0.0.tgz", + "integrity": "sha512-UikN5yr7xsCDAq87Or5or0PAlD3HJJOKVzM05az588WnpDJ4Ux7a2A53Qi6gofGg2/EtvF/H4hCi/TXfCW4Y6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@exodus/bytes": "^1.15.1" + }, + "engines": { + "node": "^22.13.0 || >=24.0.0" + } + }, + "node_modules/idb": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", + "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/internal-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-async-function": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-boolean-object": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.17.0.tgz", + "integrity": "sha512-J/vG0zBCbIKOQFfufSwyXdMrsohyJIUNkrnmo6WZGzoM7tr/lsbfW5b2BvisL6zsyMzK9UxV9L6c7AoFbyXHOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-document.all": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-document.all/-/is-document.all-1.0.0.tgz", + "integrity": "sha512-+XSoyS05OdBbhFuELhgTCpFNHkpBOJqtsZfUFFpe5QTw+9Sjbh8zitxhQkYAo6wV7e1Vb8cAPvpCk9jGam/82g==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-generator-function": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz", + "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.4", + "generator-function": "^2.0.0", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/jackspeak": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.2.3.tgz", + "integrity": "sha512-ykkVRwrYvFm1nb2AJfKKYPr0emF6IiXDYUaFx4Zn9ZuIH7MrzEZ3sD5RlqGXNRpHtvUHJyOnCEFxOlNDtGo7wg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^9.0.0" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/jake": { + "version": "10.9.4", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.4.tgz", + "integrity": "sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "async": "^3.2.6", + "filelist": "^1.0.4", + "picocolors": "^1.1.1" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jiti": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.7.0.tgz", + "integrity": "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsdom": { + "version": "30.1.3", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-30.1.3.tgz", + "integrity": "sha512-hQMUPvRgN7KxsfIytDQji7bimuJeRQa6Qo5+iuiZQk5CafeRxLIA10/cG5YCBFNpD9RO3oqIiN4CO1Y44kxqXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@asamuzakjp/css-color": "^7.1.3", + "@asamuzakjp/dom-selector": "^10.0.3", + "@bramus/specificity": "^2.4.2", + "@csstools/css-syntax-patches-for-csstree": "^1.1.15", + "@exodus/bytes": "^1.16.0", + "css-tree": "^3.2.1", + "data-urls": "^8.0.0", + "decimal.js": "^10.6.0", + "html-encoding-sniffer": "^7.0.0", + "is-potential-custom-element-name": "^1.0.1", + "lru-cache": "^11.5.3", + "parse5": "^8.0.1", + "saxes": "^6.0.0", + "tough-cookie": "^6.0.2", + "undici": "^8.12.1", + "w3c-xmlserializer": "^6.0.0", + "webidl-conversions": "^8.0.1", + "whatwg-mimetype": "^5.0.0", + "whatwg-url": "^17.2.0", + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": "^22.22.2 || ^24.15.0 || >=26.0.0" + }, + "peerDependencies": { + "canvas": "^3.2.3" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsdom/node_modules/lru-cache": { + "version": "11.5.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.3.tgz", + "integrity": "sha512-U4N8FgzmWxc8k1VH8Kr6lQg18U7Fjvby6wXHVRX/ZZ7IwWbRMgrRbP0Wrb5q5NVinryp4SQampHKdvtecItxUg==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", + "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } }, - "node_modules/@rollup/rollup-linux-loong64-musl": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.59.0.tgz", - "integrity": "sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==", - "cpu": [ - "loong64" - ], + "node_modules/jsonpointer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", + "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.59.0.tgz", - "integrity": "sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==", - "cpu": [ - "ppc64" - ], + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "dependencies": { + "json-buffer": "3.0.1" + } }, - "node_modules/@rollup/rollup-linux-ppc64-musl": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.59.0.tgz", - "integrity": "sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==", - "cpu": [ - "ppc64" - ], + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "engines": { + "node": ">=6" + } }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.59.0.tgz", - "integrity": "sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==", - "cpu": [ - "riscv64" - ], + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } }, - "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.59.0.tgz", - "integrity": "sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==", + "node_modules/lightningcss": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", + "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.32.0", + "lightningcss-darwin-arm64": "1.32.0", + "lightningcss-darwin-x64": "1.32.0", + "lightningcss-freebsd-x64": "1.32.0", + "lightningcss-linux-arm-gnueabihf": "1.32.0", + "lightningcss-linux-arm64-gnu": "1.32.0", + "lightningcss-linux-arm64-musl": "1.32.0", + "lightningcss-linux-x64-gnu": "1.32.0", + "lightningcss-linux-x64-musl": "1.32.0", + "lightningcss-win32-arm64-msvc": "1.32.0", + "lightningcss-win32-x64-msvc": "1.32.0" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", + "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==", "cpu": [ - "riscv64" + "arm64" ], "dev": true, - "license": "MIT", + "license": "MPL-2.0", "optional": true, "os": [ - "linux" - ] + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.59.0.tgz", - "integrity": "sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==", + "node_modules/lightningcss-darwin-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz", + "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==", "cpu": [ - "s390x" + "arm64" ], "dev": true, - "license": "MIT", + "license": "MPL-2.0", "optional": true, "os": [ - "linux" - ] + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.59.0.tgz", - "integrity": "sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==", + "node_modules/lightningcss-darwin-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", + "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", + "license": "MPL-2.0", "optional": true, "os": [ - "linux" - ] + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.59.0.tgz", - "integrity": "sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==", + "node_modules/lightningcss-freebsd-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", + "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", + "license": "MPL-2.0", "optional": true, "os": [ - "linux" - ] + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } }, - "node_modules/@rollup/rollup-openbsd-x64": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.59.0.tgz", - "integrity": "sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==", + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", + "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==", "cpu": [ - "x64" + "arm" ], "dev": true, - "license": "MIT", + "license": "MPL-2.0", "optional": true, "os": [ - "openbsd" - ] + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } }, - "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.59.0.tgz", - "integrity": "sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==", + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", + "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", + "license": "MPL-2.0", "optional": true, "os": [ - "openharmony" - ] + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.59.0.tgz", - "integrity": "sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==", + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", + "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", + "license": "MPL-2.0", "optional": true, "os": [ - "win32" - ] + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.59.0.tgz", - "integrity": "sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==", + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", + "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==", "cpu": [ - "ia32" + "x64" ], "dev": true, - "license": "MIT", + "license": "MPL-2.0", "optional": true, "os": [ - "win32" - ] + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } }, - "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.59.0.tgz", - "integrity": "sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==", + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", + "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", + "license": "MPL-2.0", "optional": true, "os": [ - "win32" - ] + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.59.0.tgz", - "integrity": "sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==", + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", + "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==", "cpu": [ - "x64" + "arm64" ], "dev": true, - "license": "MIT", + "license": "MPL-2.0", "optional": true, "os": [ "win32" - ] - }, - "node_modules/@tweenjs/tween.js": { - "version": "23.1.3", - "resolved": "https://registry.npmjs.org/@tweenjs/tween.js/-/tween.js-23.1.3.tgz", - "integrity": "sha512-vJmvvwFxYuGnF2axRtPYocag6Clbb5YS7kLL+SO/TeVFzHqDIWrNKYtcsPMibjDx9O+bu+psAy9NKfWklassUA==", - "license": "MIT" - }, - "node_modules/@types/babel__core": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", - "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", - "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.0.0" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@types/babel__template": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", - "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz", + "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==", + "cpu": [ + "x64" + ], "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@types/babel__traverse": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", - "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.28.2" + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@types/draco3d": { - "version": "1.4.10", - "resolved": "https://registry.npmjs.org/@types/draco3d/-/draco3d-1.4.10.tgz", - "integrity": "sha512-AX22jp8Y7wwaBgAixaSvkoG4M/+PlAcm3Qs4OW8yT9DM4xUpWKeFhLueTAyZF39pviAdcDdeJoACapiAceqNcw==", - "license": "MIT" - }, - "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", "dev": true, "license": "MIT" }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true, "license": "MIT" }, - "node_modules/@types/node": { - "version": "24.10.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.9.tgz", - "integrity": "sha512-ne4A0IpG3+2ETuREInjPNhUGis1SFjv1d5asp8MzEAGtOZeTeHVDOYqOgqfhvseqg/iXty2hjBf1zAOb7RNiNw==", + "node_modules/loupe": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.2.1.tgz", + "integrity": "sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==", "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "undici-types": "~7.16.0" - } - }, - "node_modules/@types/offscreencanvas": { - "version": "2019.7.3", - "resolved": "https://registry.npmjs.org/@types/offscreencanvas/-/offscreencanvas-2019.7.3.tgz", - "integrity": "sha512-ieXiYmgSRXUDeOntE1InxjWyvEelZGP63M+cGuquuRLuIKKT1osnkXjxev9B7d1nXSug5vpunx+gNlbVxMlC9A==", "license": "MIT" }, - "node_modules/@types/react": { - "version": "19.2.9", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.9.tgz", - "integrity": "sha512-Lpo8kgb/igvMIPeNV2rsYKTgaORYdO1XGVZ4Qz3akwOj0ySGYMPlQWa8BaLn0G63D1aSaAQ5ldR06wCpChQCjA==", - "license": "MIT", - "peer": true, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", "dependencies": { - "csstype": "^3.2.2" + "yallist": "^3.0.2" } }, - "node_modules/@types/react-dom": { - "version": "19.2.3", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz", - "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", - "dev": true, - "license": "MIT", + "node_modules/lucide-react": { + "version": "0.563.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.563.0.tgz", + "integrity": "sha512-8dXPB2GI4dI8jV4MgUDGBeLdGk8ekfqVZ0BdLcrRzocGgG75ltNEmWS+gE7uokKF/0oSUuczNDT+g9hFJ23FkA==", + "license": "ISC", "peerDependencies": { - "@types/react": "^19.2.0" + "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, - "node_modules/@types/react-reconciler": { - "version": "0.28.9", - "resolved": "https://registry.npmjs.org/@types/react-reconciler/-/react-reconciler-0.28.9.tgz", - "integrity": "sha512-HHM3nxyUZ3zAylX8ZEyrDNd2XZOnQ0D5XfunJF5FLQnZbHHYq4UWvW1QfelQNXv1ICNkwYhfxjwfnqivYB6bFg==", + "node_modules/lz-string": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", + "dev": true, "license": "MIT", - "peerDependencies": { - "@types/react": "*" + "peer": true, + "bin": { + "lz-string": "bin/bin.js" } }, - "node_modules/@types/stats.js": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@types/stats.js/-/stats.js-0.17.4.tgz", - "integrity": "sha512-jIBvWWShCvlBqBNIZt0KAshWpvSjhkwkEu4ZUcASoAvhmrgAUI2t1dXrjSL4xXVLB4FznPrIsX3nKXFl/Dt4vA==", - "license": "MIT" - }, - "node_modules/@types/three": { - "version": "0.182.0", - "resolved": "https://registry.npmjs.org/@types/three/-/three-0.182.0.tgz", - "integrity": "sha512-WByN9V3Sbwbe2OkWuSGyoqQO8Du6yhYaXtXLoA5FkKTUJorZ+yOHBZ35zUUPQXlAKABZmbYp5oAqpA4RBjtJ/Q==", + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "@dimforge/rapier3d-compat": "~0.12.0", - "@tweenjs/tween.js": "~23.1.3", - "@types/stats.js": "*", - "@types/webxr": ">=0.5.17", - "@webgpu/types": "*", - "fflate": "~0.8.2", - "meshoptimizer": "~0.22.0" + "@jridgewell/sourcemap-codec": "^1.5.5" } }, - "node_modules/@types/webxr": { - "version": "0.5.24", - "resolved": "https://registry.npmjs.org/@types/webxr/-/webxr-0.5.24.tgz", - "integrity": "sha512-h8fgEd/DpoS9CBrjEQXR+dIDraopAEfu4wYVNY2tEPwk60stPWhvZMf4Foo5FakuQ7HFZoa8WceaWFervK2Ovg==", - "license": "MIT" - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.53.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.53.1.tgz", - "integrity": "sha512-cFYYFZ+oQFi6hUnBTbLRXfTJiaQtYE3t4O692agbBl+2Zy+eqSKWtPjhPXJu1G7j4RLjKgeJPDdq3EqOwmX5Ag==", + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", "dev": true, "license": "MIT", - "dependencies": { - "@eslint-community/regexpp": "^4.12.2", - "@typescript-eslint/scope-manager": "8.53.1", - "@typescript-eslint/type-utils": "8.53.1", - "@typescript-eslint/utils": "8.53.1", - "@typescript-eslint/visitor-keys": "8.53.1", - "ignore": "^7.0.5", - "natural-compare": "^1.4.0", - "ts-api-utils": "^2.4.0" - }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^8.53.1", - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <6.0.0" + "node": ">= 0.4" } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", - "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "node_modules/mdn-data": { + "version": "2.27.1", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.27.1.tgz", + "integrity": "sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", "dev": true, "license": "MIT", "engines": { - "node": ">= 4" + "node": ">=4" } }, - "node_modules/@typescript-eslint/parser": { - "version": "8.53.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.53.1.tgz", - "integrity": "sha512-nm3cvFN9SqZGXjmw5bZ6cGmvJSyJPn0wU9gHAZZHDnZl2wF9PhHv78Xf06E0MaNk4zLVHL8hb2/c32XvyJOLQg==", + "node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, - "license": "MIT", - "peer": true, + "license": "ISC", "dependencies": { - "@typescript-eslint/scope-manager": "8.53.1", - "@typescript-eslint/types": "8.53.1", - "@typescript-eslint/typescript-estree": "8.53.1", - "@typescript-eslint/visitor-keys": "8.53.1", - "debug": "^4.4.3" + "brace-expansion": "^1.1.7" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <6.0.0" + "node": "*" } }, - "node_modules/@typescript-eslint/project-service": { - "version": "8.53.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.53.1.tgz", - "integrity": "sha512-WYC4FB5Ra0xidsmlPb+1SsnaSKPmS3gsjIARwbEkHkoWloQmuzcfypljaJcR78uyLA1h8sHdWWPHSLDI+MtNog==", + "node_modules/minipass": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.53.1", - "@typescript-eslint/types": "^8.53.1", - "debug": "^4.4.3" - }, + "license": "BlueOak-1.0.0", "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" + "node": ">=16 || 14 >=14.17" } }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "8.53.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.53.1.tgz", - "integrity": "sha512-Lu23yw1uJMFY8cUeq7JlrizAgeQvWugNQzJp8C3x8Eo5Jw5Q2ykMdiiTB9vBVOOUBysMzmRRmUfwFrZuI2C4SQ==", - "dev": true, + "node_modules/motion-dom": { + "version": "12.29.0", + "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.29.0.tgz", + "integrity": "sha512-3eiz9bb32yvY8Q6XNM4AwkSOBPgU//EIKTZwsSWgA9uzbPBhZJeScCVcBuwwYVqhfamewpv7ZNmVKTGp5qnzkA==", "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.53.1", - "@typescript-eslint/visitor-keys": "8.53.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "motion-utils": "^12.27.2" } }, - "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.53.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.53.1.tgz", - "integrity": "sha512-qfvLXS6F6b1y43pnf0pPbXJ+YoXIC7HKg0UGZ27uMIemKMKA6XH2DTxsEDdpdN29D+vHV07x/pnlPNVLhdhWiA==", + "node_modules/motion-utils": { + "version": "12.27.2", + "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.27.2.tgz", + "integrity": "sha512-B55gcoL85Mcdt2IEStY5EEAsrMSVE2sI14xQ/uAdPL+mfQxhKKFaEag9JmfxedJOR4vZpBGoPeC/Gm13I/4g5Q==", + "license": "MIT" + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" - } + "license": "MIT" }, - "node_modules/@typescript-eslint/type-utils": { - "version": "8.53.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.53.1.tgz", - "integrity": "sha512-MOrdtNvyhy0rHyv0ENzub1d4wQYKb2NmIqG7qEqPWFW7Mpy2jzFC3pQ2yKDvirZB7jypm5uGjF2Qqs6OIqu47w==", + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.53.1", - "@typescript-eslint/typescript-estree": "8.53.1", - "@typescript-eslint/utils": "8.53.1", - "debug": "^4.4.3", - "ts-api-utils": "^2.4.0" + "bin": { + "nanoid": "bin/nanoid.cjs" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <6.0.0" + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/@typescript-eslint/types": { - "version": "8.53.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.53.1.tgz", - "integrity": "sha512-jr/swrr2aRmUAUjW5/zQHbMaui//vQlsZcJKijZf3M26bnmLj8LyZUpj8/Rd6uzaek06OWsqdofN/Thenm5O8A==", + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.59", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.59.tgz", + "integrity": "sha512-5qr2okC4ItAI0hG5SaV0HoYMpnM/Y6+Oqr7AmPYy/2uEoGvS+GbSKLeRxSS1uAdu59yz0ouzcuXievSgg///WA==", "dev": true, "license": "MIT", "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">=18" } }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.53.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.53.1.tgz", - "integrity": "sha512-RGlVipGhQAG4GxV1s34O91cxQ/vWiHJTDHbXRr0li2q/BGg3RR/7NM8QDWgkEgrwQYCvmJV9ichIwyoKCQ+DTg==", + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", "dev": true, "license": "MIT", - "dependencies": { - "@typescript-eslint/project-service": "8.53.1", - "@typescript-eslint/tsconfig-utils": "8.53.1", - "@typescript-eslint/types": "8.53.1", - "@typescript-eslint/visitor-keys": "8.53.1", - "debug": "^4.4.3", - "minimatch": "^9.0.5", - "semver": "^7.7.3", - "tinyglobby": "^0.2.15", - "ts-api-utils": "^2.4.0" - }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" + "engines": { + "node": ">= 0.4" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.9", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", - "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", + "node_modules/object.assign": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "brace-expansion": "^2.0.2" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" }, "engines": { - "node": ">=10" + "node": ">= 0.8.0" } }, - "node_modules/@typescript-eslint/utils": { - "version": "8.53.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.53.1.tgz", - "integrity": "sha512-c4bMvGVWW4hv6JmDUEG7fSYlWOl3II2I4ylt0NM+seinYQlZMQIaKaXIIVJWt9Ofh6whrpM+EdDQXKXjNovvrg==", + "node_modules/own-keys": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.2.tgz", + "integrity": "sha512-19YVAg7T+WTrxggPukVq7DjTv6+PJ867TmhCvBsYwmbFCsZd344rq2Ld1p0wo8f8Qrrhgp82c6FJRqdXWtSEhg==", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.9.1", - "@typescript-eslint/scope-manager": "8.53.1", - "@typescript-eslint/types": "8.53.1", - "@typescript-eslint/typescript-estree": "8.53.1" + "call-bound": "^1.0.4", + "get-intrinsic": "^1.3.0", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <6.0.0" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.53.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.53.1.tgz", - "integrity": "sha512-oy+wV7xDKFPRyNggmXuZQSBzvoLnpmJs+GhzRhPjrxl2b/jIlyjVokzm47CZCDUdXKr2zd7ZLodPfOBpOPyPlg==", + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.53.1", - "eslint-visitor-keys": "^4.2.1" + "yocto-queue": "^0.1.0" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@use-gesture/core": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/@use-gesture/core/-/core-10.3.1.tgz", - "integrity": "sha512-WcINiDt8WjqBdUXye25anHiNxPc0VOrlT8F6LLkU6cycrOGUDyY/yyFmsg3k8i5OLvv25llc0QC45GhR/C8llw==", - "license": "MIT" - }, - "node_modules/@use-gesture/react": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/@use-gesture/react/-/react-10.3.1.tgz", - "integrity": "sha512-Yy19y6O2GJq8f7CHf7L0nxL8bf4PZCPaVOCgJrusOeFHY1LvHgYXnmnXg6N5iwAnbgbZCDjo60SiM6IPJi9C5g==", + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, "license": "MIT", "dependencies": { - "@use-gesture/core": "10.3.1" + "p-limit": "^3.0.2" }, - "peerDependencies": { - "react": ">= 16.8.0" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@vitejs/plugin-react": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-5.1.2.tgz", - "integrity": "sha512-EcA07pHJouywpzsoTUqNh5NwGayl2PPVEJKUSinGGSxFGYn+shYbqMGBg6FXDqgXum9Ou/ecb+411ssw8HImJQ==", + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, "license": "MIT", "dependencies": { - "@babel/core": "^7.28.5", - "@babel/plugin-transform-react-jsx-self": "^7.27.1", - "@babel/plugin-transform-react-jsx-source": "^7.27.1", - "@rolldown/pluginutils": "1.0.0-beta.53", - "@types/babel__core": "^7.20.5", - "react-refresh": "^0.18.0" + "callsites": "^3.0.0" }, "engines": { - "node": "^20.19.0 || >=22.12.0" - }, - "peerDependencies": { - "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" + "node": ">=6" } }, - "node_modules/@webgpu/types": { - "version": "0.1.69", - "resolved": "https://registry.npmjs.org/@webgpu/types/-/types-0.1.69.tgz", - "integrity": "sha512-RPmm6kgRbI8e98zSD3RVACvnuktIja5+yLgDAkTmxLr90BEwdTXRQWNLF3ETTTyH/8mKhznZuN5AveXYFEsMGQ==", - "license": "BSD-3-Clause" - }, - "node_modules/acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "node_modules/parse5": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-8.0.1.tgz", + "integrity": "sha512-z1e/HMG90obSGeidlli3hj7cbocou0/wa5HacvI3ASx34PecNjNQeaHNo5WIZpWofN9kgkqV1q5YvXe3F0FoPw==", "dev": true, "license": "MIT", - "peer": true, - "bin": { - "acorn": "bin/acorn" + "dependencies": { + "entities": "^8.0.0" }, - "engines": { - "node": ">=0.4.0" + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" } }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + "engines": { + "node": ">=8" } }, - "node_modules/ajv": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", - "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "engines": { + "node": ">=8" } }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true, - "license": "MIT", + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", + "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", + "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { - "color-convert": "^2.0.1" + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" }, "engines": { - "node": ">=8" + "node": "18 || 20 || >=22" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "11.5.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.3.tgz", + "integrity": "sha512-U4N8FgzmWxc8k1VH8Kr6lQg18U7Fjvby6wXHVRX/ZZ7IwWbRMgrRbP0Wrb5q5NVinryp4SQampHKdvtecItxUg==", "dev": true, - "license": "Python-2.0" + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", "dev": true, "license": "MIT" }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/baseline-browser-mapping": { - "version": "2.9.17", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.17.tgz", - "integrity": "sha512-agD0MgJFUP/4nvjqzIB29zRPUuCF7Ge6mEv9s8dHrtYD7QWXRcx75rOADE/d5ah1NI+0vkDl0yorDd5U852IQQ==", + "node_modules/pathval": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.1.tgz", + "integrity": "sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==", "dev": true, - "license": "Apache-2.0", - "bin": { - "baseline-browser-mapping": "dist/cli.js" + "license": "MIT", + "engines": { + "node": ">= 14.16" } }, - "node_modules/bidi-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/bidi-js/-/bidi-js-1.0.3.tgz", - "integrity": "sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==", + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, "license": "MIT", - "dependencies": { - "require-from-string": "^2.0.2" + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", "dev": true, "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "engines": { + "node": ">= 0.4" } }, - "node_modules/browserslist": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", - "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", "dev": true, "funding": [ { "type": "opencollective", - "url": "https://opencollective.com/browserslist" + "url": "https://opencollective.com/postcss/" }, { "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" + "url": "https://tidelift.com/funding/github/npm/postcss" }, { "type": "github", @@ -2097,1162 +7303,1353 @@ } ], "license": "MIT", - "peer": true, "dependencies": { - "baseline-browser-mapping": "^2.9.0", - "caniuse-lite": "^1.0.30001759", - "electron-to-chromium": "^1.5.263", - "node-releases": "^2.0.27", - "update-browserslist-db": "^1.2.0" - }, - "bin": { - "browserslist": "cli.js" + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" }, "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" + "node": "^10 || ^12 || >=14" } }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, "license": "MIT", "engines": { - "node": ">=6" + "node": ">= 0.8.0" } }, - "node_modules/camera-controls": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/camera-controls/-/camera-controls-3.1.2.tgz", - "integrity": "sha512-xkxfpG2ECZ6Ww5/9+kf4mfg1VEYAoe9aDSY+IwF0UEs7qEzwy0aVRfs2grImIECs/PoBtWFrh7RXsQkwG922JA==", + "node_modules/pretty-bytes": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-6.1.1.tgz", + "integrity": "sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==", + "dev": true, "license": "MIT", "engines": { - "node": ">=22.0.0", - "npm": ">=10.5.1" + "node": "^14.13.1 || >=16.0.0" }, - "peerDependencies": { - "three": ">=0.126.1" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/caniuse-lite": { - "version": "1.0.30001766", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001766.tgz", - "integrity": "sha512-4C0lfJ0/YPjJQHagaE9x2Elb69CIqEPZeG0anQt9SIvIoOH4a4uaRl73IavyO+0qZh6MDLH//DrXThEYKHkmYA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0" - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, + "peer": true, "engines": { - "node": ">=7.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true, - "license": "MIT" - }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, - "license": "MIT" - }, - "node_modules/cookie": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz", - "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==", "license": "MIT", "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "node": ">=6" } }, - "node_modules/cross-env": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", - "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", + "node_modules/react": { + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.3.tgz", + "integrity": "sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==", "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.1" - }, - "bin": { - "cross-env": "src/bin/cross-env.js", - "cross-env-shell": "src/bin/cross-env-shell.js" - }, "engines": { - "node": ">=10.14", - "npm": ">=6", - "yarn": ">=1" + "node": ">=0.10.0" } }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "node_modules/react-dom": { + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.3.tgz", + "integrity": "sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==", "license": "MIT", "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "scheduler": "^0.27.0" }, - "engines": { - "node": ">= 8" + "peerDependencies": { + "react": "^19.2.3" } }, - "node_modules/csstype": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", - "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", - "license": "MIT" + "node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true, + "license": "MIT", + "peer": true }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "node_modules/react-refresh": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.18.0.tgz", + "integrity": "sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==", "dev": true, "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-router": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.13.0.tgz", + "integrity": "sha512-PZgus8ETambRT17BUm/LL8lX3Of+oiLaPuVTRH3l1eLvSPpKO3AvhAEb5N7ihAFZQrYDqkvvWfFh9p0z9VsjLw==", + "license": "MIT", "dependencies": { - "ms": "^2.1.3" + "cookie": "^1.0.1", + "set-cookie-parser": "^2.6.0" }, "engines": { - "node": ">=6.0" + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" }, "peerDependenciesMeta": { - "supports-color": { + "react-dom": { "optional": true } } }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/detect-gpu": { - "version": "5.0.70", - "resolved": "https://registry.npmjs.org/detect-gpu/-/detect-gpu-5.0.70.tgz", - "integrity": "sha512-bqerEP1Ese6nt3rFkwPnGbsUF9a4q+gMmpTVVOEzoCyeCc+y7/RvJnQZJx1JwhgQI5Ntg0Kgat8Uu7XpBqnz1w==", + "node_modules/react-router-dom": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.13.0.tgz", + "integrity": "sha512-5CO/l5Yahi2SKC6rGZ+HDEjpjkGaG/ncEP7eWFTvFxbHP8yeeI0PxTDjimtpXYlR3b3i9/WIL4VJttPrESIf2g==", "license": "MIT", "dependencies": { - "webgl-constants": "^1.1.1" + "react-router": "7.13.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" } }, - "node_modules/draco3d": { - "version": "1.5.7", - "resolved": "https://registry.npmjs.org/draco3d/-/draco3d-1.5.7.tgz", - "integrity": "sha512-m6WCKt/erDXcw+70IJXnG7M3awwQPAsZvJGX5zY7beBqpELw6RDGkYVU0W43AFxye4pDZ5i2Lbyc/NNGqwjUVQ==", - "license": "Apache-2.0" - }, - "node_modules/electron-to-chromium": { - "version": "1.5.278", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.278.tgz", - "integrity": "sha512-dQ0tM1svDRQOwxnXxm+twlGTjr9Upvt8UFWAgmLsxEzFQxhbti4VwxmMjsDxVC51Zo84swW7FVCXEV+VAkhuPw==", + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", "dev": true, - "license": "ISC" + "license": "MIT", + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } }, - "node_modules/esbuild": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.2.tgz", - "integrity": "sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==", + "node_modules/reflect.getprototypeof": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", "dev": true, - "hasInstallScript": true, "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" }, "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.27.2", - "@esbuild/android-arm": "0.27.2", - "@esbuild/android-arm64": "0.27.2", - "@esbuild/android-x64": "0.27.2", - "@esbuild/darwin-arm64": "0.27.2", - "@esbuild/darwin-x64": "0.27.2", - "@esbuild/freebsd-arm64": "0.27.2", - "@esbuild/freebsd-x64": "0.27.2", - "@esbuild/linux-arm": "0.27.2", - "@esbuild/linux-arm64": "0.27.2", - "@esbuild/linux-ia32": "0.27.2", - "@esbuild/linux-loong64": "0.27.2", - "@esbuild/linux-mips64el": "0.27.2", - "@esbuild/linux-ppc64": "0.27.2", - "@esbuild/linux-riscv64": "0.27.2", - "@esbuild/linux-s390x": "0.27.2", - "@esbuild/linux-x64": "0.27.2", - "@esbuild/netbsd-arm64": "0.27.2", - "@esbuild/netbsd-x64": "0.27.2", - "@esbuild/openbsd-arm64": "0.27.2", - "@esbuild/openbsd-x64": "0.27.2", - "@esbuild/openharmony-arm64": "0.27.2", - "@esbuild/sunos-x64": "0.27.2", - "@esbuild/win32-arm64": "0.27.2", - "@esbuild/win32-ia32": "0.27.2", - "@esbuild/win32-x64": "0.27.2" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "node_modules/regenerate": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.5.0.tgz", + "integrity": "sha512-1s+CxXjJ71i7LNVy8nYwg47XV4y6lAnOEhsMtSKq3WpmPfhl9LuKlTqKIn/3yUpE8lBz+W+TT88Bxyhnr0U4yw==", + "dev": true, + "license": "MIT" + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.3.0.tgz", + "integrity": "sha512-9ns8odR8e9q3otKeHj3DE80jZYKg6zVeZKE+zQmRKXFoVUcuiTGeO6iusDhPRoIQQPVPRvH+SfBhrTud4eczuw==", "dev": true, "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2" + }, "engines": { - "node": ">=6" + "node": ">=4" } }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "node_modules/regexp.prototype.flags": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", "dev": true, "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" + }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint": { - "version": "9.39.2", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.2.tgz", - "integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==", + "node_modules/regexpu-core": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.5.3.tgz", + "integrity": "sha512-E8VgUoSK+LMQrLboDxavm76MTBGrQhx9RiNuomRmYnZ10Uw12HrI8fkxOOncktb2hBpzIZ9SV/347euQHG5z+g==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "@eslint-community/eslint-utils": "^4.8.0", - "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.21.1", - "@eslint/config-helpers": "^0.4.2", - "@eslint/core": "^0.17.0", - "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.39.2", - "@eslint/plugin-kit": "^0.4.1", - "@humanfs/node": "^0.16.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.4.2", - "@types/estree": "^1.0.6", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.6", - "debug": "^4.3.2", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^8.4.0", - "eslint-visitor-keys": "^4.2.1", - "espree": "^10.4.0", - "esquery": "^1.5.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^8.0.0", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3" - }, - "bin": { - "eslint": "bin/eslint.js" + "regenerate": "^1.5.0", + "regenerate-unicode-properties": "^10.3.0", + "regjsgen": "^0.8.0", + "regjsparser": "^0.13.0", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.2.1" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "jiti": "*" + "node": ">=4" + } + }, + "node_modules/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/regjsparser": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.4.tgz", + "integrity": "sha512-EWV80YgFaVgFrjGCAsV7oybp4GOxbls5RzBg8OB0nKEVXsBJR1JlV8Di1JhCROg3MzTfe1RI8yitIm1eOs68iA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "jsesc": "~3.1.0" }, - "peerDependenciesMeta": { - "jiti": { - "optional": true - } + "bin": { + "regjsparser": "bin/parser" } }, - "node_modules/eslint-plugin-react-hooks": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-7.0.1.tgz", - "integrity": "sha512-O0d0m04evaNzEPoSW+59Mezf8Qt0InfgGIBJnpC0h3NH/WjUAR7BIKUfysC6todmtiZ/A0oUVS8Gce0WhBrHsA==", + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.13", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.13.tgz", + "integrity": "sha512-Dj/cW9zBV2aRj6XzCxuGIs3ESZKv02jixne3q6jFZYZ3/Tg09gHHviSMDL4kObh9pqSahdRHEnDoaP2gn8YLhA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/core": "^7.24.4", - "@babel/parser": "^7.24.4", - "hermes-parser": "^0.25.1", - "zod": "^3.25.0 || ^4.0.0", - "zod-validation-error": "^3.5.0 || ^4.0.0" + "es-errors": "^1.3.0", + "is-core-module": "^2.17.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" }, "engines": { - "node": ">=18" + "node": ">= 0.4" }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-plugin-react-refresh": { - "version": "0.4.26", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.26.tgz", - "integrity": "sha512-1RETEylht2O6FM/MvgnyvT+8K21wLqDNg4qD51Zj3guhjt433XbnnkVttHMyaVyAFD03QSV4LPS5iE3VQmO7XQ==", + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, "license": "MIT", - "peerDependencies": { - "eslint": ">=8.40" + "engines": { + "node": ">=4" } }, - "node_modules/eslint-scope": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", - "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "node_modules/rollup": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.59.0.tgz", + "integrity": "sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=18.0.0", + "npm": ">=8.0.0" }, - "funding": { - "url": "https://opencollective.com/eslint" + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.59.0", + "@rollup/rollup-android-arm64": "4.59.0", + "@rollup/rollup-darwin-arm64": "4.59.0", + "@rollup/rollup-darwin-x64": "4.59.0", + "@rollup/rollup-freebsd-arm64": "4.59.0", + "@rollup/rollup-freebsd-x64": "4.59.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.59.0", + "@rollup/rollup-linux-arm-musleabihf": "4.59.0", + "@rollup/rollup-linux-arm64-gnu": "4.59.0", + "@rollup/rollup-linux-arm64-musl": "4.59.0", + "@rollup/rollup-linux-loong64-gnu": "4.59.0", + "@rollup/rollup-linux-loong64-musl": "4.59.0", + "@rollup/rollup-linux-ppc64-gnu": "4.59.0", + "@rollup/rollup-linux-ppc64-musl": "4.59.0", + "@rollup/rollup-linux-riscv64-gnu": "4.59.0", + "@rollup/rollup-linux-riscv64-musl": "4.59.0", + "@rollup/rollup-linux-s390x-gnu": "4.59.0", + "@rollup/rollup-linux-x64-gnu": "4.59.0", + "@rollup/rollup-linux-x64-musl": "4.59.0", + "@rollup/rollup-openbsd-x64": "4.59.0", + "@rollup/rollup-openharmony-arm64": "4.59.0", + "@rollup/rollup-win32-arm64-msvc": "4.59.0", + "@rollup/rollup-win32-ia32-msvc": "4.59.0", + "@rollup/rollup-win32-x64-gnu": "4.59.0", + "@rollup/rollup-win32-x64-msvc": "4.59.0", + "fsevents": "~2.3.2" } }, - "node_modules/eslint-visitor-keys": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "node_modules/safe-array-concat": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.4.tgz", + "integrity": "sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "get-intrinsic": "^1.3.0", + "has-symbols": "^1.1.0", + "isarray": "^2.0.5" + }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=0.4" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/espree": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", - "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "node_modules/safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "acorn": "^8.15.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^4.2.1" + "es-errors": "^1.3.0", + "isarray": "^2.0.5" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">= 0.4" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/esquery": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", - "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", + "node_modules/safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", "dependencies": { - "estraverse": "^5.1.0" + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" }, "engines": { - "node": ">=0.10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", "dev": true, - "license": "BSD-2-Clause", + "license": "ISC", "dependencies": { - "estraverse": "^5.2.0" + "xmlchars": "^2.2.0" }, "engines": { - "node": ">=4.0" + "node": ">=v12.22.7" } }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "node_modules/scheduler": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "license": "BSD-2-Clause", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/serialize-javascript": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-7.1.2.tgz", + "integrity": "sha512-GL2BWwVa6JydKO6l/ljVgjAZF4QJ3S7dWDWi53s5GZT8PJzD2fNxi67HANQGKAqPrwEpL5ba7gUBGi0Ls/sEoQ==", + "dev": true, + "license": "BSD-3-Clause", "engines": { - "node": ">=4.0" + "node": ">=20.0.0" } }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "node_modules/set-cookie-parser": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.2.tgz", + "integrity": "sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==", + "license": "MIT" + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" } }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "node_modules/set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "node_modules/side-channel": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.1.tgz", + "integrity": "sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==", "dev": true, "license": "MIT", - "engines": { - "node": ">=12.0.0" + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.4", + "side-channel-list": "^1.0.1", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" }, - "peerDependencies": { - "picomatch": "^3 || ^4" + "engines": { + "node": ">= 0.4" }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/fflate": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz", - "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==", - "license": "MIT" - }, - "node_modules/file-entry-cache": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "node_modules/side-channel-list": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz", + "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", "dev": true, "license": "MIT", "dependencies": { - "flat-cache": "^4.0.0" + "es-errors": "^1.3.0", + "object-inspect": "^1.13.4" }, "engines": { - "node": ">=16.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", "dev": true, "license": "MIT", "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/flat-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", "dev": true, "license": "MIT", "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.4" + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" }, "engines": { - "node": ">=16" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/flatted": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", - "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", "dev": true, "license": "ISC" }, - "node_modules/framer-motion": { - "version": "12.29.0", - "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.29.0.tgz", - "integrity": "sha512-1gEFGXHYV2BD42ZPTFmSU9buehppU+bCuOnHU0AD18DKh9j4DuTx47MvqY5ax+NNWRtK32qIcJf1UxKo1WwjWg==", - "license": "MIT", - "dependencies": { - "motion-dom": "^12.29.0", - "motion-utils": "^12.27.2", - "tslib": "^2.4.0" - }, - "peerDependencies": { - "@emotion/is-prop-valid": "*", - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" }, - "peerDependenciesMeta": { - "@emotion/is-prop-valid": { - "optional": true - }, - "react": { - "optional": true - }, - "react-dom": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "node_modules/smob": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/smob/-/smob-1.6.2.tgz", + "integrity": "sha512-RQsvleCbF8cVHEv+xuDGaA4pOizFqJ0GgjtMSRo6oP8pnN7WsigHgVGey6aILRBKv4W2YOMHLqbKdnB6hpB9fw==", "dev": true, - "hasInstallScript": true, "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + "node": ">=20.0.0" } }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "node_modules/source-map": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0.tgz", + "integrity": "sha512-d8EqvL+k/SOXCreS/SUzg2ciyHqBBLcN/yuRjFsbvVhHTE2pgei7oAhmPM7kWFbkX6OSMQfUq4KbkF3au9lhYQ==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">= 12" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", "engines": { - "node": ">=6.9.0" + "node": ">=0.10.0" } }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", "dev": true, - "license": "ISC", + "license": "MIT" + }, + "node_modules/std-env": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz", + "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==", + "dev": true, + "license": "MIT" + }, + "node_modules/stop-iteration-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", + "dev": true, + "license": "MIT", "dependencies": { - "is-glob": "^4.0.3" + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" }, "engines": { - "node": ">=10.13.0" + "node": ">= 0.4" } }, - "node_modules/globals": { - "version": "16.5.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-16.5.0.tgz", - "integrity": "sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==", + "node_modules/string.prototype.matchall": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.1.0.tgz", + "integrity": "sha512-tHNHTxInrYLCga9O9YGxWA3G9/nnzQw8UGAyqGx3Ar1pSTTzIuM4woFSq4SowkXCjJIwq5sIiQvEfRI9tCH1qQ==", "dev": true, "license": "MIT", - "engines": { - "node": ">=18" + "dependencies": { + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.24.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.2", + "get-intrinsic": "^1.3.0", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "regexp.prototype.flags": "^1.5.4", + "set-function-name": "^2.0.2", + "side-channel": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/glsl-noise": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/glsl-noise/-/glsl-noise-0.0.0.tgz", - "integrity": "sha512-b/ZCF6amfAUb7dJM/MxRs7AetQEahYzJ8PtgfrmEdtw6uyGOr+ZSGtgjFm6mfsBkxJ4d2W7kg+Nlqzqvn3Bc0w==", - "license": "MIT" - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/string.prototype.trim": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.11.tgz", + "integrity": "sha512-PwvK7BU+CMTJGYQCTZb5RWXIML92lftJLhQz1tBzgKiqGxJaMlBAa48POXaNAC2s4y8jr3EFqrkF9+44neS46w==", "dev": true, "license": "MIT", + "dependencies": { + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.24.2", + "es-object-atoms": "^1.1.2", + "has-property-descriptors": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/hermes-estree": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz", - "integrity": "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==", + "node_modules/string.prototype.trimend": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.10.tgz", + "integrity": "sha512-2+3aDAOmPTmuFwjDnmJG2ctEkQKVki7vOSqaxkv42Mowj1V6PnvuwFCRrR5lChUux1TBskPjfkeTOhqczDMxTw==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/hermes-parser": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.25.1.tgz", - "integrity": "sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==", + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, "license": "MIT", "dependencies": { - "hermes-estree": "0.25.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/hls.js": { - "version": "1.6.15", - "resolved": "https://registry.npmjs.org/hls.js/-/hls.js-1.6.15.tgz", - "integrity": "sha512-E3a5VwgXimGHwpRGV+WxRTKeSp2DW5DI5MWv34ulL3t5UNmyJWCQ1KmLEHbYzcfThfXG8amBL+fCYPneGHC4VA==", - "license": "Apache-2.0" - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "BSD-3-Clause" + "node_modules/stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + }, + "engines": { + "node": ">=4" + } }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "node_modules/strip-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", + "integrity": "sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==", "dev": true, "license": "MIT", "engines": { - "node": ">= 4" + "node": ">=10" } }, - "node_modules/immediate": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", - "license": "MIT" - }, - "node_modules/import-fresh": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", - "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", "dev": true, "license": "MIT", "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" + "min-indent": "^1.0.0" }, "engines": { - "node": ">=6" + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "node_modules/strip-literal": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-3.1.0.tgz", + "integrity": "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==", "dev": true, "license": "MIT", - "engines": { - "node": ">=0.8.19" + "dependencies": { + "js-tokens": "^9.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" } }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "node_modules/strip-literal/node_modules/js-tokens": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", + "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-promise": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", - "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", + "node_modules/tailwindcss": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.3.3.tgz", + "integrity": "sha512-gOhV3P7ufE62QDGg1zVaTgCR+EtPv92k2nIhVcVKcLmxT1sUBsQGhnZj175j+MqRt4zLF7ic+sCYjfhxMxj7YQ==", + "dev": true, "license": "MIT" }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "license": "ISC" - }, - "node_modules/its-fine": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/its-fine/-/its-fine-2.0.0.tgz", - "integrity": "sha512-KLViCmWx94zOvpLwSlsx6yOCeMhZYaxrJV87Po5k/FoZzcPSahvK5qJ7fYhS61sZi5ikmh2S3Hz55A2l3U69ng==", + "node_modules/tapable": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.3.tgz", + "integrity": "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==", + "dev": true, "license": "MIT", - "dependencies": { - "@types/react-reconciler": "^0.28.9" + "engines": { + "node": ">=6" }, - "peerDependencies": { - "react": "^19.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "node_modules/temp-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", + "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "node_modules/js-yaml": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", - "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "node_modules/tempy": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.6.0.tgz", + "integrity": "sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==", "dev": true, "license": "MIT", "dependencies": { - "argparse": "^2.0.1" + "is-stream": "^2.0.0", + "temp-dir": "^2.0.0", + "type-fest": "^0.16.0", + "unique-string": "^2.0.0" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jsesc": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", - "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "node_modules/terser": { + "version": "5.51.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.51.2.tgz", + "integrity": "sha512-bWnjSNscmuI+GJze6ZupnHP8G/cTcsJF+bXCeQknk2SHQsgbNJnLrqiH9jZ2W4STPVXH2mDKKRX3iwPhc9Cn/Q==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.15.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, "bin": { - "jsesc": "bin/jsesc" + "terser": "bin/terser" }, "engines": { - "node": ">=6" + "node": ">=10" } }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "node_modules/tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", "dev": true, "license": "MIT" }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "node_modules/tinyexec": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", + "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", "dev": true, "license": "MIT" }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", "dev": true, "license": "MIT", - "bin": { - "json5": "lib/cli.js" + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" }, "engines": { - "node": ">=6" + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" } }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "node_modules/tinypool": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.1.tgz", + "integrity": "sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==", "dev": true, "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" + "engines": { + "node": "^18.0.0 || >=20.0.0" } }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "node_modules/tinyrainbow": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-2.0.0.tgz", + "integrity": "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==", "dev": true, "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, "engines": { - "node": ">= 0.8.0" + "node": ">=14.0.0" } }, - "node_modules/lie": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", - "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "node_modules/tinyspy": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-4.0.6.tgz", + "integrity": "sha512-u8KszXvGfU68hVcZpRHKG28T0krMuv2G5nDhiHaMLen/gIuFEgIJhaJuO69qjnXg5paSrbPMFfx3brNuN8eVSg==", + "dev": true, "license": "MIT", - "dependencies": { - "immediate": "~3.0.5" + "engines": { + "node": ">=14.0.0" } }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "node_modules/tldts": { + "version": "7.4.18", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.4.18.tgz", + "integrity": "sha512-somxA8xKAUzlAxl0TX/jMSYIbRNFIVGnI96pVGJPeMc5BsHmfVXn6mOJT6U++ELnl04eGfzpfcEuZe8WiASkXg==", "dev": true, "license": "MIT", "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" + "tldts-core": "^7.4.18" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "bin": { + "tldts": "bin/cli.js" } }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "node_modules/tldts-core": { + "version": "7.4.18", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.4.18.tgz", + "integrity": "sha512-KI2PKvCmvQI/xD6ypPqkU0i7oxNXR/O58RLRaHR4svsgVUQ2JE/XC8BtMbG6PSehD27I8sZJRcC1ASnCy6lp3g==", "dev": true, "license": "MIT" }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "node_modules/tough-cookie": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-6.0.2.tgz", + "integrity": "sha512-exgYmnmL/sJpR3upZfXG5PoatXQii55xAiXGXzY+sROLZ/Y+SLcp9PgJNI9Vz37HpQ74WvDcLT8eqm+kV3FzrA==", "dev": true, - "license": "ISC", + "license": "BSD-3-Clause", "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/lucide-react": { - "version": "0.563.0", - "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.563.0.tgz", - "integrity": "sha512-8dXPB2GI4dI8jV4MgUDGBeLdGk8ekfqVZ0BdLcrRzocGgG75ltNEmWS+gE7uokKF/0oSUuczNDT+g9hFJ23FkA==", - "license": "ISC", - "peerDependencies": { - "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" + "tldts": "^7.0.5" + }, + "engines": { + "node": ">=16" } }, - "node_modules/maath": { - "version": "0.10.8", - "resolved": "https://registry.npmjs.org/maath/-/maath-0.10.8.tgz", - "integrity": "sha512-tRvbDF0Pgqz+9XUa4jjfgAQ8/aPKmQdWXilFu2tMy4GWj4NOsx99HlULO4IeREfbO3a0sA145DZYyvXPkybm0g==", + "node_modules/tr46": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-7.0.0.tgz", + "integrity": "sha512-BcDSDW+SIGWVOns1Zm6Yg91q9AEj7eaID0QDY9oIqJD1A8dscNwMcl9Sms2DeuWCNov1X0/oXanHGYQBSLwZsg==", + "dev": true, "license": "MIT", - "peerDependencies": { - "@types/three": ">=0.134.0", - "three": ">=0.134.0" + "dependencies": { + "punycode": "^2.3.1" + }, + "engines": { + "node": "^22.14.0 || >=24.0.0" } }, - "node_modules/meshline": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/meshline/-/meshline-3.3.1.tgz", - "integrity": "sha512-/TQj+JdZkeSUOl5Mk2J7eLcYTLiQm2IDzmlSvYm7ov15anEcDJ92GHqqazxTSreeNgfnYu24kiEvvv0WlbCdFQ==", + "node_modules/ts-api-utils": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.4.0.tgz", + "integrity": "sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==", + "dev": true, "license": "MIT", + "engines": { + "node": ">=18.12" + }, "peerDependencies": { - "three": ">=0.137" + "typescript": ">=4.8.4" } }, - "node_modules/meshoptimizer": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/meshoptimizer/-/meshoptimizer-0.22.0.tgz", - "integrity": "sha512-IebiK79sqIy+E4EgOr+CAw+Ke8hAspXKzBd0JdgEmPHiAwmvEj2S4h1rfvo+o/BnfEYd/jAOg5IeeIjzlzSnDg==", - "license": "MIT" + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" }, - "node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "brace-expansion": "^1.1.7" + "prelude-ls": "^1.2.1" }, "engines": { - "node": "*" - } - }, - "node_modules/motion-dom": { - "version": "12.29.0", - "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.29.0.tgz", - "integrity": "sha512-3eiz9bb32yvY8Q6XNM4AwkSOBPgU//EIKTZwsSWgA9uzbPBhZJeScCVcBuwwYVqhfamewpv7ZNmVKTGp5qnzkA==", - "license": "MIT", - "dependencies": { - "motion-utils": "^12.27.2" + "node": ">= 0.8.0" } }, - "node_modules/motion-utils": { - "version": "12.27.2", - "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.27.2.tgz", - "integrity": "sha512-B55gcoL85Mcdt2IEStY5EEAsrMSVE2sI14xQ/uAdPL+mfQxhKKFaEag9JmfxedJOR4vZpBGoPeC/Gm13I/4g5Q==", - "license": "MIT" - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "node_modules/type-fest": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", + "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", "dev": true, - "license": "MIT" + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/nanoid": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" }, "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + "node": ">= 0.4" } }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "node_modules/typed-array-byte-length": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/node-releases": { - "version": "2.0.27", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", - "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", + "node_modules/typed-array-byte-offset": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.5.tgz", + "integrity": "sha512-0FHJvLPqZ7KJzp17O13jfsAjsqazgrxBu2zEK95PmUz8lv2+GjRuxUInCr2Rk9Dms3ihN21zJ929ZO43yJ95QQ==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.9", + "for-each": "^0.3.5", + "gopd": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "node_modules/typed-array-length": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.8.tgz", + "integrity": "sha512-phPGCwqr2+Qo0fwniCE8e4pKnGu/yFb5nD5Y8bf0EEeiI5GklnACYA9GFy/DrAeRrKHXvHn+1SUsOWgJp6RO+g==", "dev": true, "license": "MIT", "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" + "call-bind": "^1.0.9", + "for-each": "^0.3.5", + "gopd": "^1.2.0", + "is-typed-array": "^1.1.15", + "possible-typed-array-names": "^1.1.0", + "reflect.getprototypeof": "^1.0.10" }, "engines": { - "node": ">= 0.8.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typescript-eslint": { + "version": "8.53.1", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.53.1.tgz", + "integrity": "sha512-gB+EVQfP5RDElh9ittfXlhZJdjSU4jUSTyE2+ia8CYyNvet4ElfaLlAIqDvQV9JPknKx0jQH1racTYe/4LaLSg==", "dev": true, "license": "MIT", "dependencies": { - "yocto-queue": "^0.1.0" + "@typescript-eslint/eslint-plugin": "8.53.1", + "@typescript-eslint/parser": "8.53.1", + "@typescript-eslint/typescript-estree": "8.53.1", + "@typescript-eslint/utils": "8.53.1" }, "engines": { - "node": ">=10" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "node_modules/unbox-primitive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", "dev": true, "license": "MIT", "dependencies": { - "p-limit": "^3.0.2" + "call-bound": "^1.0.3", + "has-bigints": "^1.0.2", + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "node_modules/undici": { + "version": "8.12.3", + "resolved": "https://registry.npmjs.org/undici/-/undici-8.12.3.tgz", + "integrity": "sha512-+fdndUTwBP86cVjihTp21hZHo7d6oj1c/47XPA3lL8mM0XHs+C4EkcjmgRsFnFk2f/UONGDy9ItBItmXsLOQHw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=22.19.0" + } + }, + "node_modules/undici-types": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", + "dev": true, + "license": "MIT" + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", + "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", "dev": true, "license": "MIT", "dependencies": { - "callsites": "^3.0.0" + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" }, "engines": { - "node": ">=6" + "node": ">=4" } }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.1.tgz", + "integrity": "sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.2.0.tgz", + "integrity": "sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==", + "dev": true, "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "crypto-random-string": "^2.0.0" + }, "engines": { "node": ">=8" } }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "dev": true, - "license": "ISC" + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } }, - "node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "node_modules/upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", "dev": true, "license": "MIT", - "peer": true, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "node": ">=4", + "yarn": "*" } }, - "node_modules/postcss": { - "version": "8.5.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", - "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "node_modules/update-browserslist-db": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.3.4.tgz", + "integrity": "sha512-t8wonIOdQyOjtPd2VktlBu6QjTVTks6v8bSi7kd0r2Vll8TK1JYDZtRRdbmCHOAMphkZgrzK+L+vXK4pyZ8t4A==", "dev": true, "funding": [ { "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "url": "https://opencollective.com/browserslist" }, { "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" + "url": "https://tidelift.com/funding/github/npm/browserslist" }, { "type": "github", @@ -3261,686 +8658,686 @@ ], "license": "MIT", "dependencies": { - "nanoid": "^3.3.11", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" + "escalade": "^3.2.0", + "picocolors": "^1.1.1" }, - "engines": { - "node": "^10 || ^12 || >=14" + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" } }, - "node_modules/potpack": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/potpack/-/potpack-1.0.2.tgz", - "integrity": "sha512-choctRBIV9EMT9WGAZHn3V7t0Z2pMQyl0EZE6pFc/6ml3ssw7Dlf/oAOvFwjm1HVsqfQN8GfeFyJ+d8tRzqueQ==", - "license": "ISC" - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/promise-worker-transferable": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/promise-worker-transferable/-/promise-worker-transferable-1.0.4.tgz", - "integrity": "sha512-bN+0ehEnrXfxV2ZQvU2PetO0n4gqBD4ulq3MI1WOPLgr7/Mg9yRQkX5+0v1vagr74ZTsl7XtzlaYDo2EuCeYJw==", - "license": "Apache-2.0", + "license": "BSD-2-Clause", "dependencies": { - "is-promise": "^2.1.0", - "lie": "^3.0.2" + "punycode": "^2.1.0" } }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "node_modules/vite": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.1.tgz", + "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", "dev": true, "license": "MIT", + "dependencies": { + "esbuild": "^0.27.0", + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" + }, + "bin": { + "vite": "bin/vite.js" + }, "engines": { - "node": ">=6" - } - }, - "node_modules/react": { - "version": "19.2.3", - "resolved": "https://registry.npmjs.org/react/-/react-19.2.3.tgz", - "integrity": "sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } } }, - "node_modules/react-dom": { - "version": "19.2.3", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.3.tgz", - "integrity": "sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==", + "node_modules/vite-node": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.2.4.tgz", + "integrity": "sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==", + "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "scheduler": "^0.27.0" + "cac": "^6.7.14", + "debug": "^4.4.1", + "es-module-lexer": "^1.7.0", + "pathe": "^2.0.3", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" + }, + "bin": { + "vite-node": "vite-node.mjs" }, - "peerDependencies": { - "react": "^19.2.3" - } - }, - "node_modules/react-refresh": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.18.0.tgz", - "integrity": "sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==", - "dev": true, - "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" } }, - "node_modules/react-router": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.13.0.tgz", - "integrity": "sha512-PZgus8ETambRT17BUm/LL8lX3Of+oiLaPuVTRH3l1eLvSPpKO3AvhAEb5N7ihAFZQrYDqkvvWfFh9p0z9VsjLw==", + "node_modules/vite-plugin-pwa": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/vite-plugin-pwa/-/vite-plugin-pwa-2.0.0.tgz", + "integrity": "sha512-6G9dsPKT9QKYpeTuTLJM28zZL3HsXUTUM/QUZBEgQk2jbfrPJDq2i8gTewAKqi1c9Mt6MiidrL4SFI+HthiQMg==", + "dev": true, "license": "MIT", "dependencies": { - "cookie": "^1.0.1", - "set-cookie-parser": "^2.6.0" + "debug": "^4.3.6", + "pretty-bytes": "^6.1.1", + "tinyglobby": "^0.2.10", + "workbox-build": "^7.4.1", + "workbox-window": "^7.4.1" }, "engines": { - "node": ">=20.0.0" + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" }, "peerDependencies": { - "react": ">=18", - "react-dom": ">=18" + "@vite-pwa/assets-generator": "^1.0.0 || ^2.0.0", + "vite": "^3.1.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0", + "workbox-build": "^7.4.1", + "workbox-window": "^7.4.1" }, "peerDependenciesMeta": { - "react-dom": { + "@vite-pwa/assets-generator": { "optional": true } } }, - "node_modules/react-router-dom": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.13.0.tgz", - "integrity": "sha512-5CO/l5Yahi2SKC6rGZ+HDEjpjkGaG/ncEP7eWFTvFxbHP8yeeI0PxTDjimtpXYlR3b3i9/WIL4VJttPrESIf2g==", + "node_modules/vitest": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.2.7.tgz", + "integrity": "sha512-KrxIJ62Fd89gfysR4WotlgZABiz2dqFPgqGzX7s+CwsqLFomRH7777ZcrOD6+WVAh7khPQP41A+BKbpcJFrdEg==", + "dev": true, "license": "MIT", "dependencies": { - "react-router": "7.13.0" + "@types/chai": "^5.2.2", + "@vitest/expect": "3.2.7", + "@vitest/mocker": "3.2.7", + "@vitest/pretty-format": "^3.2.7", + "@vitest/runner": "3.2.7", + "@vitest/snapshot": "3.2.7", + "@vitest/spy": "3.2.7", + "@vitest/utils": "3.2.7", + "chai": "^5.2.0", + "debug": "^4.4.1", + "expect-type": "^1.2.1", + "magic-string": "^0.30.17", + "pathe": "^2.0.3", + "picomatch": "^4.0.2", + "std-env": "^3.9.0", + "tinybench": "^2.9.0", + "tinyexec": "^0.3.2", + "tinyglobby": "^0.2.14", + "tinypool": "^1.1.1", + "tinyrainbow": "^2.0.0", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", + "vite-node": "3.2.4", + "why-is-node-running": "^2.3.0" + }, + "bin": { + "vitest": "vitest.mjs" }, "engines": { - "node": ">=20.0.0" + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "react": ">=18", - "react-dom": ">=18" - } - }, - "node_modules/react-use-measure": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/react-use-measure/-/react-use-measure-2.1.7.tgz", - "integrity": "sha512-KrvcAo13I/60HpwGO5jpW7E9DfusKyLPLvuHlUyP5zqnmAPhNc6qTRjUQrdTADl0lpPpDVU2/Gg51UlOGHXbdg==", - "license": "MIT", - "peerDependencies": { - "react": ">=16.13", - "react-dom": ">=16.13" + "@edge-runtime/vm": "*", + "@types/debug": "^4.1.12", + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "@vitest/browser": "3.2.7", + "@vitest/ui": "3.2.7", + "happy-dom": "*", + "jsdom": "*" }, "peerDependenciesMeta": { - "react-dom": { + "@edge-runtime/vm": { + "optional": true + }, + "@types/debug": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { "optional": true } } }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "node_modules/w3c-xmlserializer": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-6.0.0.tgz", + "integrity": "sha512-4Nsy8K5Tr6SPDH9jhKJOHf7ChDrc1zufZTVSF7x72hwuEXBqxqk9G6cK+K2NRUtB3iELRJqjXb4JPDMBjMTl2Q==", + "dev": true, "license": "MIT", + "dependencies": { + "xml-name-validator": "^5.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": "^22.22.2 || ^24.15.0 || >=26.0.0" } }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "node_modules/webidl-conversions": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-8.0.1.tgz", + "integrity": "sha512-BMhLD/Sw+GbJC21C/UgyaZX41nPt8bUTg+jWyDeg7e7YN4xOM05YPSIXceACnXVtqyEw/LMClUQMtMZ+PGGpqQ==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=20" + } + }, + "node_modules/whatwg-mimetype": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-5.0.0.tgz", + "integrity": "sha512-sXcNcHOC51uPGF0P/D4NVtrkjSU2fNsm9iog4ZvZJsL3rjoDAzXZhkm2MWt1y+PUdggKAYVoMAIYcs78wJ51Cw==", "dev": true, "license": "MIT", "engines": { - "node": ">=4" + "node": ">=20" } }, - "node_modules/rollup": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.59.0.tgz", - "integrity": "sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==", + "node_modules/whatwg-url": { + "version": "17.3.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-17.3.0.tgz", + "integrity": "sha512-KwOAJrpf+GTgBvcBQJcP38sMF0DsQKdwtG+TxM2pW44P6E5k0hDbWrDmyuJDIF0Uef0aQq0ZoJs+5oI+k8ddhg==", "dev": true, "license": "MIT", "dependencies": { - "@types/estree": "1.0.8" - }, - "bin": { - "rollup": "dist/bin/rollup" + "@exodus/bytes": "^1.16.0", + "tr46": "^7.0.0", + "webidl-conversions": "^8.0.1" }, "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.59.0", - "@rollup/rollup-android-arm64": "4.59.0", - "@rollup/rollup-darwin-arm64": "4.59.0", - "@rollup/rollup-darwin-x64": "4.59.0", - "@rollup/rollup-freebsd-arm64": "4.59.0", - "@rollup/rollup-freebsd-x64": "4.59.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.59.0", - "@rollup/rollup-linux-arm-musleabihf": "4.59.0", - "@rollup/rollup-linux-arm64-gnu": "4.59.0", - "@rollup/rollup-linux-arm64-musl": "4.59.0", - "@rollup/rollup-linux-loong64-gnu": "4.59.0", - "@rollup/rollup-linux-loong64-musl": "4.59.0", - "@rollup/rollup-linux-ppc64-gnu": "4.59.0", - "@rollup/rollup-linux-ppc64-musl": "4.59.0", - "@rollup/rollup-linux-riscv64-gnu": "4.59.0", - "@rollup/rollup-linux-riscv64-musl": "4.59.0", - "@rollup/rollup-linux-s390x-gnu": "4.59.0", - "@rollup/rollup-linux-x64-gnu": "4.59.0", - "@rollup/rollup-linux-x64-musl": "4.59.0", - "@rollup/rollup-openbsd-x64": "4.59.0", - "@rollup/rollup-openharmony-arm64": "4.59.0", - "@rollup/rollup-win32-arm64-msvc": "4.59.0", - "@rollup/rollup-win32-ia32-msvc": "4.59.0", - "@rollup/rollup-win32-x64-gnu": "4.59.0", - "@rollup/rollup-win32-x64-msvc": "4.59.0", - "fsevents": "~2.3.2" + "node": "^22.14.0 || >=24.0.0" } }, - "node_modules/scheduler": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", - "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", - "license": "MIT" - }, - "node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/set-cookie-parser": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.2.tgz", - "integrity": "sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==", - "license": "MIT" - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "license": "MIT", "dependencies": { - "shebang-regex": "^3.0.0" + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" }, "engines": { - "node": ">=8" + "node": ">= 8" } }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "node_modules/which-boxed-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", + "dev": true, "license": "MIT", + "dependencies": { + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/source-map-js": { + "node_modules/which-builtin-type": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/stats-gl": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/stats-gl/-/stats-gl-2.4.2.tgz", - "integrity": "sha512-g5O9B0hm9CvnM36+v7SFl39T7hmAlv541tU81ME8YeSb3i1CIP5/QdDeSB3A0la0bKNHpxpwxOVRo2wFTYEosQ==", + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dev": true, "license": "MIT", "dependencies": { - "@types/three": "*", - "three": "^0.170.0" + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" }, - "peerDependencies": { - "@types/three": "*", - "three": "*" + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/stats-gl/node_modules/three": { - "version": "0.170.0", - "resolved": "https://registry.npmjs.org/three/-/three-0.170.0.tgz", - "integrity": "sha512-FQK+LEpYc0fBD+J8g6oSEyyNzjp+Q7Ks1C568WWaoMRLW+TkNNWmenWeGgJjV105Gd+p/2ql1ZcjYvNiPZBhuQ==", - "license": "MIT" - }, - "node_modules/stats.js": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/stats.js/-/stats.js-0.17.0.tgz", - "integrity": "sha512-hNKz8phvYLPEcRkeG1rsGmV5ChMjKDAWU7/OJJdDErPBNChQXxCo3WZurGpnWc6gZhAzEPFad1aVgyOANH1sMw==", - "license": "MIT" - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "node_modules/which-typed-array": { + "version": "1.1.24", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.24.tgz", + "integrity": "sha512-wk4Mf4pR5mRP7eYuuTBCIQ9d0ud2Fv2jRLQpfgnRjbOxAFHmjKFValgTpitVKzJJS8ajnYQV2Du1SZ8j6b/EUQ==", "dev": true, "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/why-is-node-running": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", "dev": true, "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" }, "engines": { "node": ">=8" } }, - "node_modules/suspend-react": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/suspend-react/-/suspend-react-0.1.3.tgz", - "integrity": "sha512-aqldKgX9aZqpoDp3e8/BZ8Dm7x1pJl+qI3ZKxDN0i/IQTWUwBx/ManmlVJ3wowqbno6c2bmiIfs+Um6LbsjJyQ==", + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, "license": "MIT", - "peerDependencies": { - "react": ">=17.0" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/three": { - "version": "0.182.0", - "resolved": "https://registry.npmjs.org/three/-/three-0.182.0.tgz", - "integrity": "sha512-GbHabT+Irv+ihI1/f5kIIsZ+Ef9Sl5A1Y7imvS5RQjWgtTPfPnZ43JmlYI7NtCRDK9zir20lQpfg8/9Yd02OvQ==", - "license": "MIT", - "peer": true - }, - "node_modules/three-mesh-bvh": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/three-mesh-bvh/-/three-mesh-bvh-0.8.3.tgz", - "integrity": "sha512-4G5lBaF+g2auKX3P0yqx+MJC6oVt6sB5k+CchS6Ob0qvH0YIhuUk1eYr7ktsIpY+albCqE80/FVQGV190PmiAg==", + "node_modules/workbox-background-sync": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-7.4.1.tgz", + "integrity": "sha512-HhT7KE8tOWDm02wRNshXUnUPofMlhenF2DBdUnDPOubhizzPeItkYTmAB6td1Z2cjYPa98vzEiPLEuzn5hN66g==", + "dev": true, "license": "MIT", - "peerDependencies": { - "three": ">= 0.159.0" + "dependencies": { + "idb": "^7.0.1", + "workbox-core": "7.4.1" } }, - "node_modules/three-stdlib": { - "version": "2.36.1", - "resolved": "https://registry.npmjs.org/three-stdlib/-/three-stdlib-2.36.1.tgz", - "integrity": "sha512-XyGQrFmNQ5O/IoKm556ftwKsBg11TIb301MB5dWNicziQBEs2g3gtOYIf7pFiLa0zI2gUwhtCjv9fmjnxKZ1Cg==", + "node_modules/workbox-broadcast-update": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-7.4.1.tgz", + "integrity": "sha512-uAlgslKLvbQY+suirIdnBCSYrcgBhjp81Nj4l1lj/Jmj0MJO2CJERnCJjT0GFVwmReV0N+zs78K6gqd5gr9/+A==", + "dev": true, "license": "MIT", "dependencies": { - "@types/draco3d": "^1.4.0", - "@types/offscreencanvas": "^2019.6.4", - "@types/webxr": "^0.5.2", - "draco3d": "^1.4.1", - "fflate": "^0.6.9", - "potpack": "^1.0.1" - }, - "peerDependencies": { - "three": ">=0.128.0" + "workbox-core": "7.4.1" } }, - "node_modules/three-stdlib/node_modules/fflate": { - "version": "0.6.10", - "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.6.10.tgz", - "integrity": "sha512-IQrh3lEPM93wVCEczc9SaAOvkmcoQn/G8Bo1e8ZPlY3X3bnAxWaBdvTdvM1hP62iZp0BXWDy4vTAy4fF0+Dlpg==", - "license": "MIT" - }, - "node_modules/tinyglobby": { - "version": "0.2.15", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", - "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "node_modules/workbox-build": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-7.4.1.tgz", + "integrity": "sha512-SDhxIvEAde9Gy/5w4Yo1Jh/M49Z0qE3q0oteyE8zGq0DScxFqVBcCtIXFuLtmtxRQZCMbf0prco4VyEu3KBQuw==", "dev": true, "license": "MIT", "dependencies": { - "fdir": "^6.5.0", - "picomatch": "^4.0.3" + "@apideck/better-ajv-errors": "^0.3.1", + "@babel/core": "^7.24.4", + "@babel/preset-env": "^7.11.0", + "@babel/runtime": "^7.11.2", + "@rollup/plugin-babel": "^6.1.0", + "@rollup/plugin-node-resolve": "^16.0.3", + "@rollup/plugin-replace": "^6.0.3", + "@rollup/plugin-terser": "^1.0.0", + "@trickfilm400/rollup-plugin-off-main-thread": "^3.0.0-pre1", + "ajv": "^8.6.0", + "common-tags": "^1.8.0", + "eta": "^4.5.1", + "fast-json-stable-stringify": "^2.1.0", + "fs-extra": "^9.0.1", + "glob": "^11.0.1", + "pretty-bytes": "^5.3.0", + "rollup": "^4.53.3", + "source-map": "^0.8.0-beta.0", + "stringify-object": "^3.3.0", + "strip-comments": "^2.0.1", + "tempy": "^0.6.0", + "upath": "^1.2.0", + "workbox-background-sync": "7.4.1", + "workbox-broadcast-update": "7.4.1", + "workbox-cacheable-response": "7.4.1", + "workbox-core": "7.4.1", + "workbox-expiration": "7.4.1", + "workbox-google-analytics": "7.4.1", + "workbox-navigation-preload": "7.4.1", + "workbox-precaching": "7.4.1", + "workbox-range-requests": "7.4.1", + "workbox-recipes": "7.4.1", + "workbox-routing": "7.4.1", + "workbox-strategies": "7.4.1", + "workbox-streams": "7.4.1", + "workbox-sw": "7.4.1", + "workbox-window": "7.4.1" }, "engines": { - "node": ">=12.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/SuperchupuDev" + "node": ">=20.0.0" } }, - "node_modules/troika-three-text": { - "version": "0.52.4", - "resolved": "https://registry.npmjs.org/troika-three-text/-/troika-three-text-0.52.4.tgz", - "integrity": "sha512-V50EwcYGruV5rUZ9F4aNsrytGdKcXKALjEtQXIOBfhVoZU9VAqZNIoGQ3TMiooVqFAbR1w15T+f+8gkzoFzawg==", + "node_modules/workbox-build/node_modules/@apideck/better-ajv-errors": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.7.tgz", + "integrity": "sha512-TajUJwGWbDwkCx/CZi7tRE8PVB7simCvKJfHUsSdvps+aTM/PDPP4gkLmKnc+x3CE//y9i/nj74GqdL/hwk7Iw==", + "dev": true, "license": "MIT", "dependencies": { - "bidi-js": "^1.0.2", - "troika-three-utils": "^0.52.4", - "troika-worker-utils": "^0.52.0", - "webgl-sdf-generator": "1.1.1" + "jsonpointer": "^5.0.1", + "leven": "^3.1.0" + }, + "engines": { + "node": ">=10" }, "peerDependencies": { - "three": ">=0.125.0" + "ajv": ">=8" } }, - "node_modules/troika-three-utils": { - "version": "0.52.4", - "resolved": "https://registry.npmjs.org/troika-three-utils/-/troika-three-utils-0.52.4.tgz", - "integrity": "sha512-NORAStSVa/BDiG52Mfudk4j1FG4jC4ILutB3foPnfGbOeIs9+G5vZLa0pnmnaftZUGm4UwSoqEpWdqvC7zms3A==", + "node_modules/workbox-build/node_modules/ajv": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz", + "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", + "dev": true, "license": "MIT", - "peerDependencies": { - "three": ">=0.125.0" + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/troika-worker-utils": { - "version": "0.52.0", - "resolved": "https://registry.npmjs.org/troika-worker-utils/-/troika-worker-utils-0.52.0.tgz", - "integrity": "sha512-W1CpvTHykaPH5brv5VHLfQo9D1OYuo0cSBEUQFFT/nBUzM8iD6Lq2/tgG/f1OelbAS1WtaTPQzE5uM49egnngw==", + "node_modules/workbox-build/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, "license": "MIT" }, - "node_modules/ts-api-utils": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.4.0.tgz", - "integrity": "sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==", + "node_modules/workbox-build/node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", "dev": true, "license": "MIT", "engines": { - "node": ">=18.12" + "node": ">=6" }, - "peerDependencies": { - "typescript": ">=4.8.4" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, - "node_modules/tunnel-rat": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/tunnel-rat/-/tunnel-rat-0.1.2.tgz", - "integrity": "sha512-lR5VHmkPhzdhrM092lI2nACsLO4QubF0/yoOhzX7c+wIpbN1GjHNzCc91QlpxBi+cnx8vVJ+Ur6vL5cEoQPFpQ==", + "node_modules/workbox-cacheable-response": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-7.4.1.tgz", + "integrity": "sha512-8xaFoJdDc2OjrlbbL3gEeBO1WKcMwRqwLRupgqahYXu75yXajPLuwrbXMrIGZuWYXrQwk0xDjOxZ/ujCy/oJYw==", + "dev": true, "license": "MIT", "dependencies": { - "zustand": "^4.3.2" + "workbox-core": "7.4.1" } }, - "node_modules/tunnel-rat/node_modules/zustand": { - "version": "4.5.7", - "resolved": "https://registry.npmjs.org/zustand/-/zustand-4.5.7.tgz", - "integrity": "sha512-CHOUy7mu3lbD6o6LJLfllpjkzhHXSBlX8B9+qPddUsIfeF5S/UZ5q0kmCsnRqT1UHFQZchNFDDzMbQsuesHWlw==", + "node_modules/workbox-core": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-7.4.1.tgz", + "integrity": "sha512-DT+vu46eh/2vRsSHTY4Xmc32Z1rr9PRlQUXr1Dx30ZuXRWwOsvZgGgcwxcasubQLQmbTNYZjv44LkBAQ4tT5tQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/workbox-expiration": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-7.4.1.tgz", + "integrity": "sha512-lRKUF7b+OGbeXkQk1s6MHXOa3d7Xxf7Of31W6c6hCfipfIyrtdWZ89stq21AHZMaoG7VNFoHply4Ox+rU31TWg==", + "dev": true, "license": "MIT", "dependencies": { - "use-sync-external-store": "^1.2.2" - }, - "engines": { - "node": ">=12.7.0" - }, - "peerDependencies": { - "@types/react": ">=16.8", - "immer": ">=9.0.6", - "react": ">=16.8" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "immer": { - "optional": true - }, - "react": { - "optional": true - } + "idb": "^7.0.1", + "workbox-core": "7.4.1" } }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "node_modules/workbox-google-analytics": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-7.4.1.tgz", + "integrity": "sha512-Mks1JwLEt++ZAkF6sS1OpSh9RtAMIsiDgRpK+codiHGIPXeaUOgi4cPc3GFadUl8V5QPeypEk8Oxgl3HlwVzHw==", "dev": true, "license": "MIT", "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" + "workbox-background-sync": "7.4.1", + "workbox-core": "7.4.1", + "workbox-routing": "7.4.1", + "workbox-strategies": "7.4.1" } }, - "node_modules/typescript": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "node_modules/workbox-navigation-preload": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-7.4.1.tgz", + "integrity": "sha512-C4KVsjPcYKJOhr631AxR9XoG2rLF3QiTk5aMv36MXOjtWvm8axwNFAtKUPGsWUwLXXAMgYM1En7fsvndaXeXRQ==", "dev": true, - "license": "Apache-2.0", - "peer": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" + "license": "MIT", + "dependencies": { + "workbox-core": "7.4.1" } }, - "node_modules/typescript-eslint": { - "version": "8.53.1", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.53.1.tgz", - "integrity": "sha512-gB+EVQfP5RDElh9ittfXlhZJdjSU4jUSTyE2+ia8CYyNvet4ElfaLlAIqDvQV9JPknKx0jQH1racTYe/4LaLSg==", + "node_modules/workbox-precaching": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-7.4.1.tgz", + "integrity": "sha512-cdr/9qByww7yzEp7zg/qI4ukUrrNjQLgN+ONQRpjy/VqGQXwkgHwr00KksGJK8v0VifwDXBb8a4cWNZH71jn3Q==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.53.1", - "@typescript-eslint/parser": "8.53.1", - "@typescript-eslint/typescript-estree": "8.53.1", - "@typescript-eslint/utils": "8.53.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <6.0.0" + "workbox-core": "7.4.1", + "workbox-routing": "7.4.1", + "workbox-strategies": "7.4.1" } }, - "node_modules/undici-types": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", - "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", - "dev": true, - "license": "MIT" - }, - "node_modules/update-browserslist-db": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", - "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "node_modules/workbox-range-requests": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-7.4.1.tgz", + "integrity": "sha512-7i2oxAUE82gHdAJBCAQ04JzNOdRPqzuOzGfoUyJpFSmeqBNYGPrAH8GPoPjUQTfp+NycwrD2H68VtuF8qxv0vQ==", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], "license": "MIT", "dependencies": { - "escalade": "^3.2.0", - "picocolors": "^1.1.1" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" + "workbox-core": "7.4.1" } }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "node_modules/workbox-recipes": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-7.4.1.tgz", + "integrity": "sha512-gnbVfmV4/TtmQaM4x9AtuXhcdstJsep3XMVeztOrQVPT+R6+6DeBjGTCQ7fFCXm+4GEHUA5VEBTyi5+4gWGeog==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "punycode": "^2.1.0" + "workbox-cacheable-response": "7.4.1", + "workbox-core": "7.4.1", + "workbox-expiration": "7.4.1", + "workbox-precaching": "7.4.1", + "workbox-routing": "7.4.1", + "workbox-strategies": "7.4.1" } }, - "node_modules/use-sync-external-store": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz", - "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==", + "node_modules/workbox-routing": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-7.4.1.tgz", + "integrity": "sha512-yubJGErZOusuidAenaL5ypfhQOa7urxP/f8E0ws7FPb4039RiWXUWBAyUkmUoOL/BcQGen3h0J8872d51IYxtA==", + "dev": true, "license": "MIT", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + "dependencies": { + "workbox-core": "7.4.1" } }, - "node_modules/utility-types": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.11.0.tgz", - "integrity": "sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw==", + "node_modules/workbox-strategies": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-7.4.1.tgz", + "integrity": "sha512-GZxpaw9NbmOelj7667uZ2kpk5BFpOGbO4X0qjwh5ls8XQ8C+Lha5LQchTiUzsTFSS+NlUpftYAyOVXvQUrcqOQ==", + "dev": true, "license": "MIT", - "engines": { - "node": ">= 4" + "dependencies": { + "workbox-core": "7.4.1" } }, - "node_modules/vite": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.1.tgz", - "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", + "node_modules/workbox-streams": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-7.4.1.tgz", + "integrity": "sha512-HWWtraKUbJknd9kgqGcpQ3G114HOPYvqs8HaJMDs2ebLNAimDkVDaWfAXE6Ybl+m8U6KsCE6pWyLYuigWmnAXw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "esbuild": "^0.27.0", - "fdir": "^6.5.0", - "picomatch": "^4.0.3", - "postcss": "^8.5.6", - "rollup": "^4.43.0", - "tinyglobby": "^0.2.15" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^20.19.0 || >=22.12.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^20.19.0 || >=22.12.0", - "jiti": ">=1.21.0", - "less": "^4.0.0", - "lightningcss": "^1.21.0", - "sass": "^1.70.0", - "sass-embedded": "^1.70.0", - "stylus": ">=0.54.8", - "sugarss": "^5.0.0", - "terser": "^5.16.0", - "tsx": "^4.8.1", - "yaml": "^2.4.2" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "jiti": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - }, - "tsx": { - "optional": true - }, - "yaml": { - "optional": true - } + "workbox-core": "7.4.1", + "workbox-routing": "7.4.1" } }, - "node_modules/webgl-constants": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/webgl-constants/-/webgl-constants-1.1.1.tgz", - "integrity": "sha512-LkBXKjU5r9vAW7Gcu3T5u+5cvSvh5WwINdr0C+9jpzVB41cjQAP5ePArDtk/WHYdVj0GefCgM73BA7FlIiNtdg==" - }, - "node_modules/webgl-sdf-generator": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/webgl-sdf-generator/-/webgl-sdf-generator-1.1.1.tgz", - "integrity": "sha512-9Z0JcMTFxeE+b2x1LJTdnaT8rT8aEp7MVxkNwoycNmJWwPdzoXzMh0BjJSh/AEFP+KPYZUli814h8bJZFIZ2jA==", + "node_modules/workbox-sw": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-7.4.1.tgz", + "integrity": "sha512-fez5f2DUlDJWTFYkCWQpY10N8gtztd849NswCbVFk0QlcSM4HT5A8x4g4ii650yem4I8tHY0R7JZahwp3ltIPw==", + "dev": true, "license": "MIT" }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "license": "ISC", + "node_modules/workbox-window": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-7.4.1.tgz", + "integrity": "sha512-notZDH2u8VXaqyuD7xaqIfEFi6SRM4SUSd7ewe9PDsVqADuepxX2ZMY3uvuZGxzY5ZOsGC/vD3A/3smFtJt4/A==", + "dev": true, + "license": "MIT", "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" + "@types/trusted-types": "^2.0.2", + "workbox-core": "7.4.1" } }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "node_modules/xml-name-validator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", + "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "engines": { - "node": ">=0.10.0" + "node": ">=18" } }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true, + "license": "MIT" + }, "node_modules/yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", @@ -3967,7 +9364,6 @@ "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==", "dev": true, "license": "MIT", - "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } @@ -3984,35 +9380,6 @@ "peerDependencies": { "zod": "^3.25.0 || ^4.0.0" } - }, - "node_modules/zustand": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/zustand/-/zustand-5.0.10.tgz", - "integrity": "sha512-U1AiltS1O9hSy3rul+Ub82ut2fqIAefiSuwECWt6jlMVUGejvf+5omLcRBSzqbRagSM3hQZbtzdeRc6QVScXTg==", - "license": "MIT", - "engines": { - "node": ">=12.20.0" - }, - "peerDependencies": { - "@types/react": ">=18.0.0", - "immer": ">=9.0.6", - "react": ">=18.0.0", - "use-sync-external-store": ">=1.2.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "immer": { - "optional": true - }, - "react": { - "optional": true - }, - "use-sync-external-store": { - "optional": true - } - } } } } diff --git a/frontend/package.json b/frontend/package.json index 7aef569..7f26c2e 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -5,23 +5,25 @@ "type": "module", "scripts": { "dev": "node ../scripts/sync-chapters.mjs && vite", - "build": "node ../scripts/sync-chapters.mjs && tsc -b && vite build", + "build": "node ../scripts/sync-chapters.mjs && tsc -b && eslint . && vite build", "lint": "eslint .", - "preview": "vite preview" + "preview": "vite preview", + "test": "vitest run", + "test:watch": "vitest" }, "dependencies": { - "@react-three/drei": "^10.7.7", - "@react-three/fiber": "^9.5.0", - "@types/three": "^0.182.0", "framer-motion": "^12.29.0", "lucide-react": "^0.563.0", "react": "^19.2.0", "react-dom": "^19.2.0", - "react-router-dom": "^7.13.0", - "three": "^0.182.0" + "react-router-dom": "^7.13.0" }, "devDependencies": { "@eslint/js": "^9.39.1", + "@tailwindcss/vite": "^4.3.3", + "@testing-library/jest-dom": "^7.0.1", + "@testing-library/react": "^16.3.3", + "@testing-library/user-event": "^14.6.8", "@types/node": "^24.10.1", "@types/react": "^19.2.5", "@types/react-dom": "^19.2.3", @@ -30,8 +32,12 @@ "eslint-plugin-react-hooks": "^7.0.1", "eslint-plugin-react-refresh": "^0.4.24", "globals": "^16.5.0", + "jsdom": "^30.1.3", + "tailwindcss": "^4.3.3", "typescript": "~5.9.3", "typescript-eslint": "^8.46.4", - "vite": "^7.2.4" + "vite": "^7.2.4", + "vite-plugin-pwa": "^2.0.0", + "vitest": "^3.2.7" } } diff --git a/frontend/public/data/books/ch1.json b/frontend/public/data/books/ch1.json index beda312..f52416c 100644 --- a/frontend/public/data/books/ch1.json +++ b/frontend/public/data/books/ch1.json @@ -1,5285 +1,4727 @@ [ - { - "qsns": "Which of the following best describes Ohm's Law?", - "opt1": "The relationship between voltage and power", - "opt2": "The relationship between current and resistance", - "opt3": "The relationship between voltage and current", - "opt4": "The relationship between resistance and power", - "correct_option": "The relationship between voltage and current", - "correct_option_index": 3 - }, - { - "qsns": "What is the unit of electrical resistance?", - "opt1": "Volt", - "opt2": "Ampere", - "opt3": "Watt", - "opt4": "Ohm", - "correct_option": "Ohm", - "correct_option_index": 4 - }, - { - "qsns": "Which of the following is a correct expression of Ohm's Law?", - "opt1": "I=VR", - "opt2": "R=VI", - "opt3": "V=IR", - "opt4": "R=IV", - "correct_option": "V=IR", - "correct_option_index": 3 - }, - { - "qsns": "A circuit has a voltage of 12 volts and a resistance of 4 ohms. What is the current flowing through the circuit?", - "opt1": "48 amps", - "opt2": "8 amps", - "opt3": "4 amps", - "opt4": "3 amps", - "correct_option": "3 amps", - "correct_option_index": 4 - }, - { - "qsns": "If the voltage across a circuit remains constant and the resistance decreases, what happens to the current?", - "opt1": "It increases", - "opt2": "It decreases", - "opt3": "It stays the same", - "opt4": "It is impossible to determine without more information", - "correct_option": "It increases", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following materials has the highest electrical resistance?", - "opt1": "Copper", - "opt2": "Silver", - "opt3": "Aluminum", - "opt4": "Nichrome", - "correct_option": "Nichrome", - "correct_option_index": 4 - }, - { - "qsns": "A circuit has a resistance of 10 ohms and a current of 2 amps. What is the voltage across the circuit?", - "opt1": "5 volts", - "opt2": "10 volts", - "opt3": "20 volts", - "opt4": "40 volts", - "correct_option": "20 volts", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following is an example of a non-ohmic conductor?", - "opt1": "Copper wire", - "opt2": "Silver wire", - "opt3": "Light bulb filament", - "opt4": "Carbon resistor", - "correct_option": "Light bulb filament", - "correct_option_index": 3 - }, - { - "qsns": "What happens to the current in a circuit if the voltage is doubled while the resistance remains constant?", - "opt1": "It is halved", - "opt2": "It is doubled", - "opt3": "It remains the same", - "opt4": "It is impossible to determine without more information", - "correct_option": "It is doubled", - "correct_option_index": 2 - }, - { - "qsns": "A circuit has a voltage of 20 volts and a current of 4 amps. What is the resistance of the circuit?", - "opt1": "16 ohms", - "opt2": "8 ohms", - "opt3": "5 ohms", - "opt4": "80 ohms", - "correct_option": "5 ohms", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following is a characteristic of a good conductor?", - "opt1": "High resistance", - "opt2": "Low resistance", - "opt3": "High voltage", - "opt4": "Low voltage", - "correct_option": "Low resistance", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following materials has the lowest electrical resistance?", - "opt1": "Aluminum", - "opt2": "Gold", - "opt3": "Copper", - "opt4": "Silver", - "correct_option": "Silver", - "correct_option_index": 4 - }, - { - "qsns": "What happens to the current in a circuit if the resistance is doubled while the voltage remains constant?", - "opt1": "It is halved", - "opt2": "It is doubled", - "opt3": "It remains the same", - "opt4": "It is impossible to determine without more information", - "correct_option": "It is halved", - "correct_option_index": 1 - }, - { - "qsns": "What is the relationship between current and voltage in a circuit with a constant resistance?", - "opt1": "They are directly proportional", - "opt2": "They are inversely proportional", - "opt3": "They are not related", - "opt4": "It is impossible to determine without more information", - "correct_option": "They are directly proportional", - "correct_option_index": 1 - }, - { - "qsns": "What is electric voltage?", - "opt1": "The flow of electric charge through a conductor", - "opt2": "The measure of electric potential energy per unit charge between two points in an electric circuit", - "opt3": "The resistance of a conductor", - "opt4": "The unit of electric voltage", - "correct_option": "The measure of electric potential energy per unit charge between two points in an electric circuit", - "correct_option_index": 2 - }, - { - "qsns": "What is electric current?", - "opt1": "The measure of the electric potential energy per unit charge between two points in an electric circuit", - "opt2": "The flow of electric charge through a conductor", - "opt3": "The resistance of a conductor to the flow of electric charge", - "opt4": "The measure of resistivity of a conductor", - "correct_option": "The flow of electric charge through a conductor", - "correct_option_index": 2 - }, - { - "qsns": "What is the unit of electric voltage?", - "opt1": "Ampere (A)", - "opt2": "Watt (W)", - "opt3": "Volt (V)", - "opt4": "Ohm (Ω)", - "correct_option": "Volt (V)", - "correct_option_index": 3 - }, - { - "qsns": "What is the unit of electric current?", - "opt1": "Amperes", - "opt2": "Watts", - "opt3": "Volts", - "opt4": "Coulombs", - "correct_option": "Amperes", - "correct_option_index": 1 - }, - { - "qsns": "What is the relationship between voltage and current according to Ohm's Law?", - "opt1": "Voltage is inversely proportional to current", - "opt2": "Voltage is directly proportional to current", - "opt3": "Voltage is not related to current", - "opt4": "Voltage is directly proportional to square of current", - "correct_option": "Voltage is directly proportional to current", - "correct_option_index": 2 - }, - { - "qsns": "What instrument is used to measure electric current in a circuit?", - "opt1": "Voltmeter", - "opt2": "Ammeter", - "opt3": "Oscilloscope", - "opt4": "Galvanometer", - "correct_option": "Ammeter", - "correct_option_index": 2 - }, - { - "qsns": "What is power?", - "opt1": "The rate at which energy is transferred in an electric circuit", - "opt2": "The capacity of a system to do work", - "opt3": "The unit of energy", - "opt4": "Energy per unit area", - "correct_option": "The rate at which energy is transferred in an electric circuit", - "correct_option_index": 1 - }, - { - "qsns": "What is the unit of power?", - "opt1": "Amperes", - "opt2": "Volts", - "opt3": "Watts", - "opt4": "Coulombs", - "correct_option": "Watts", - "correct_option_index": 3 - }, - { - "qsns": "What is the formula for calculating power in an electric circuit?", - "opt1": "P=V+I", - "opt2": "P=VI", - "opt3": "P=IR", - "opt4": "P=V/I", - "correct_option": "P=VI", - "correct_option_index": 2 - }, - { - "qsns": "What is the formula for calculating power when resistance is known?", - "opt1": "P=V+I", - "opt2": "P=V", - "opt3": "P=I^2R", - "opt4": "P=I^2R^2", - "correct_option": "P=I^2R", - "correct_option_index": 3 - }, - { - "qsns": "What is energy?", - "opt1": "The rate at which energy is transferred in an electric circuit", - "opt2": "The capacity of a system to do work", - "opt3": "The unit of power", - "opt4": "Work done per unit area", - "correct_option": "The capacity of a system to do work", - "correct_option_index": 2 - }, - { - "qsns": "What is the unit of energy?", - "opt1": "Amperes", - "opt2": "Joules", - "opt3": "Watts", - "opt4": "Coulombs", - "correct_option": "Joules", - "correct_option_index": 2 - }, - { - "qsns": "What is the formula for calculating energy transferred in an electric circuit?", - "opt1": "E=V", - "opt2": "E=P", - "opt3": "E=IR", - "opt4": "E=Pt", - "correct_option": "E=Pt", - "correct_option_index": 4 - }, - { - "qsns": "What is the formula for calculating power if the current and resistance are known?", - "opt1": "P=I^2R", - "opt2": "P=IV", - "opt3": "P=IR", - "opt4": "P=I^2R^2", - "correct_option": "P=I^2R", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following materials is an example of a conducting material?", - "opt1": "Glass", - "opt2": "Rubber", - "opt3": "Copper", - "opt4": "Plastic", - "correct_option": "Copper", - "correct_option_index": 3 - }, - { - "qsns": "What is the resistivity of a conducting material?", - "opt1": "The resistance of a material of unit length and unit cross-sectional area", - "opt2": "The maximum voltage that the material can withstand before it breaks down", - "opt3": "The ability of a material to prevent the flow of electric current", - "opt4": "All of above", - "correct_option": "The resistance of a material of unit length and unit cross-sectional area", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following materials is an example of an insulating material?", - "opt1": "Copper", - "opt2": "Plastic", - "opt3": "Silver", - "opt4": "both a and b", - "correct_option": "Plastic", - "correct_option_index": 2 - }, - { - "qsns": "What is the dielectric strength of an insulating material?", - "opt1": "The resistance of a material of unit length and unit cross-sectional area", - "opt2": "The ability of a material to prevent the flow of electric current", - "opt3": "The maximum voltage that the material can withstand before it breaks down", - "opt4": "None of above", - "correct_option": "The maximum voltage that the material can withstand before it breaks down", - "correct_option_index": 3 - }, - { - "qsns": "What are semiconducting materials?", - "opt1": "Materials that have properties between those of conducting and insulating materials", - "opt2": "Materials that allow electric current to flow through them easily", - "opt3": "Materials that do not allow electric current to flow through them easily", - "opt4": "All of above", - "correct_option": "Materials that have properties between those of conducting and insulating materials", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following materials is commonly used in electronic devices?", - "opt1": "Silicon", - "opt2": "Rubber", - "opt3": "Glass", - "opt4": "Steel", - "correct_option": "Silicon", - "correct_option_index": 1 - }, - { - "qsns": "What is the process of controlling the conductivity of a semiconducting material called?", - "opt1": "Doping", - "opt2": "Refracting", - "opt3": "Conducting", - "opt4": "Insulating", - "correct_option": "Doping", - "correct_option_index": 1 - }, - { - "qsns": "What is the purpose of insulating materials in electrical circuits?", - "opt1": "To separate conductors and prevent the flow of electric current to unintended locations", - "opt2": "To connect components", - "opt3": "To provide a path for the flow of electric current", - "opt4": "None of above", - "correct_option": "To separate conductors and prevent the flow of electric current to unintended locations", - "correct_option_index": 1 - }, - { - "qsns": "In a series circuit, which of the following statements is true?", - "opt1": "The components are connected across each other in multiple paths.", - "opt2": "The same current flows through each component.", - "opt3": "The total resistance is less than the individual resistances of the components", - "opt4": "All of above", - "correct_option": "The same current flows through each component.", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following circuits has a total resistance that is less than the individual resistances of the components?", - "opt1": "Series circuit", - "opt2": "Parallel circuit", - "opt3": "Series-parallel circuit", - "opt4": "both b and c", - "correct_option": "Parallel circuit", - "correct_option_index": 2 - }, - { - "qsns": "In a series circuit, if the resistance of one component increases, what happens to the total resistance of the circuit?", - "opt1": "It decreases", - "opt2": "It increases", - "opt3": "It stays the same", - "opt4": "First increases then stays same", - "correct_option": "It increases", - "correct_option_index": 2 - }, - { - "qsns": "In a parallel circuit, if the resistance of one component increases, what happens to the total resistance of the circuit?", - "opt1": "It decreases", - "opt2": "It increases", - "opt3": "It stays the same", - "opt4": "First increases then stays same", - "correct_option": "It increases", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following circuits is used in applications where voltage regulation is required?", - "opt1": "Series circuit", - "opt2": "Parallel circuit", - "opt3": "Series-parallel circuit", - "opt4": "None of above", - "correct_option": "Parallel circuit", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following circuits is used in applications where current limiting is required?", - "opt1": "Series circuit", - "opt2": "Parallel circuit", - "opt3": "Series-parallel circuit", - "opt4": "None of above", - "correct_option": "Series circuit", - "correct_option_index": 1 - }, - { - "qsns": "In a series-parallel circuit, which components are connected in series?", - "opt1": "No components", - "opt2": "All components", - "opt3": "Some components", - "opt4": "Both a and b", - "correct_option": "Some components", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following circuits is more reliable in terms of component failure?", - "opt1": "Series circuit", - "opt2": "Parallel circuit", - "opt3": "Both circuits are equally reliable", - "opt4": "Series-parallel circuit", - "correct_option": "Parallel circuit", - "correct_option_index": 2 - }, - { - "qsns": "What happens to the current in a parallel circuit if one component fails?", - "opt1": "The current through the other components increases.", - "opt2": "The current through the other components decreases.", - "opt3": "The current through the other components stays the same.", - "opt4": "First Increases then stays same", - "correct_option": "The current through the other components stays the same.", - "correct_option_index": 3 - }, - { - "qsns": "What Is the total resistance of a series circuit?", - "opt1": "The sum of the individual conductance's", - "opt2": "The sum of the individual resistances", - "opt3": "The reciprocal of the sum of the individual resistances", - "opt4": "sum of square of individual resistances", - "correct_option": "The sum of the individual resistances", - "correct_option_index": 2 - }, - { - "qsns": "In a parallel circuit, each component has the same:", - "opt1": "Current flowing through it", - "opt2": "Voltage across it", - "opt3": "Same power consumed", - "opt4": "Energy consumed", - "correct_option": "Voltage across it", - "correct_option_index": 2 - }, - { - "qsns": "What Is the total resistance of a parallel circuit?", - "opt1": "Sum of the individual conductance's", - "opt2": "Sum of the individual resistances", - "opt3": "Reciprocal of the sum of the individual resistances", - "opt4": "Sum of reciprocal of individual conductance", - "correct_option": "Sum of the individual conductance's", - "correct_option_index": 1 - }, - { - "qsns": "What is the purpose of star-delta conversion?", - "opt1": "To reduce the starting current of a motor", - "opt2": "To increase the starting current of a motor", - "opt3": "To regulate the voltage levels of a three-phase supply", - "opt4": "All of above", - "correct_option": "To reduce the starting current of a motor", - "correct_option_index": 1 - }, - { - "qsns": "In which type of circuit is delta-star conversion commonly used?", - "opt1": "Motor control circuits", - "opt2": "Power distribution systems", - "opt3": "Generator", - "opt4": "Both a and b", - "correct_option": "Power distribution systems", - "correct_option_index": 2 - }, - { - "qsns": "What is the purpose of delta-star conversion?", - "opt1": "To reduce the starting current of a motor", - "opt2": "To increase the starting current of a motor", - "opt3": "To regulate the voltage levels of a three-phase supply", - "opt4": "None of above", - "correct_option": "To regulate the voltage levels of a three-phase supply", - "correct_option_index": 3 - }, - { - "qsns": "What is the difference between a star and delta configuration in a three-phase system?", - "opt1": "In a star configuration, the three phases are connected in a closed loop, while in a delta configuration, the three phases are connected to a common point or neutral.", - "opt2": "In a star configuration, the three phases are connected to a common point or neutral, while in a delta configuration, the three phases are connected in a closed loop.", - "opt3": "There is no difference between a star and delta configuration in a three-phase system.", - "opt4": "None of above", - "correct_option": "In a star configuration, the three phases are connected to a common point or neutral, while in a delta configuration, the three phases are connected in a closed loop.", - "correct_option_index": 2 - }, - { - "qsns": "In a star-delta conversion, what is re-arranged?", - "opt1": "The voltage levels of the three-phase supply", - "opt2": "The connections between the components of the circuit", - "opt3": "The starting current of a motor", - "opt4": "None of above", - "correct_option": "The connections between the components of the circuit", - "correct_option_index": 2 - }, - { - "qsns": "Which type of conversion is commonly used in motor control circuits?", - "opt1": "Star-delta conversion", - "opt2": "Delta-star conversion", - "opt3": "Both a and b", - "opt4": "None of above", - "correct_option": "Star-delta conversion", - "correct_option_index": 1 - }, - { - "qsns": "Which type of conversion is commonly used in power distribution systems?", - "opt1": "Star-delta conversion", - "opt2": "Delta-star conversion", - "opt3": "Both a and b", - "opt4": "None of above", - "correct_option": "Delta-star conversion", - "correct_option_index": 2 - }, - { - "qsns": "What is the primary advantage of using star-delta conversion in motor control circuits?", - "opt1": "It increases the starting current of the motor", - "opt2": "It reduces the starting current of the motor", - "opt3": "It regulates the voltage levels of the three-phase supply", - "opt4": "All of above", - "correct_option": "It reduces the starting current of the motor", - "correct_option_index": 2 - }, - { - "qsns": "What is the primary advantage of using delta-star conversion in power distribution systems?", - "opt1": "It increases the voltage levels of the three-phase supply", - "opt2": "It reduces the voltage levels of the three-phase supply", - "opt3": "It regulates the voltage levels of the three-phase supply", - "opt4": "None of above", - "correct_option": "It regulates the voltage levels of the three-phase supply", - "correct_option_index": 3 - }, - { - "qsns": "Which type of conversion is used to regulate the voltage levels of a three-phase supply?", - "opt1": "Star-delta conversion", - "opt2": "Delta-star conversion", - "opt3": "Both A and B", - "opt4": "None of above", - "correct_option": "Delta-star conversion", - "correct_option_index": 2 - }, - { - "qsns": "What is the purpose of star-delta conversion?", - "opt1": "To convert a three-phase system from a delta to a star configuration", - "opt2": "To reduce the starting current of a motor", - "opt3": "To regulate the voltage levels of a power distribution system", - "opt4": "None of above", - "correct_option": "To reduce the starting current of a motor", - "correct_option_index": 2 - }, - { - "qsns": "What is the purpose of delta-star conversion?", - "opt1": "To convert a three-phase system from a star to a delta configuration", - "opt2": "To reduce the starting current of a motor", - "opt3": "To regulate the voltage levels of a power distribution system", - "opt4": "None of above", - "correct_option": "To regulate the voltage levels of a power distribution system", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following connections is used in a star configuration?", - "opt1": "The three phases are connected in a closed loop", - "opt2": "The three phases are connected to a common point or neutral", - "opt3": "Both A and B", - "opt4": "None of above", - "correct_option": "The three phases are connected to a common point or neutral", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following connections is used in a delta configuration?", - "opt1": "The three phases are connected in a closed loop", - "opt2": "The three phases are connected to a common point or neutral", - "opt3": "Both A and B", - "opt4": "None of above", - "correct_option": "The three phases are connected in a closed loop", - "correct_option_index": 1 - }, - { - "qsns": "Which type of conversion is commonly used in motor control circuits?", - "opt1": "Star-delta conversion", - "opt2": "Delta-star conversion", - "opt3": "Both A and B", - "opt4": "None of above", - "correct_option": "Star-delta conversion", - "correct_option_index": 1 - }, - { - "qsns": "Which type of conversion is commonly used in power distribution systems?", - "opt1": "Star-delta conversion", - "opt2": "Delta-star conversion", - "opt3": "Both a and b", - "opt4": "None of above", - "correct_option": "Delta-star conversion", - "correct_option_index": 2 - }, - { - "qsns": "What is the primary benefit of star-delta conversion in motor control circuits?", - "opt1": "It reduces the voltage levels", - "opt2": "It reduces the starting current of the motor", - "opt3": "It increases the speed of the motor", - "opt4": "None of above", - "correct_option": "It reduces the starting current of the motor", - "correct_option_index": 2 - }, - { - "qsns": "What is the primary benefit of delta-star conversion in power distribution systems?", - "opt1": "It reduces the voltage levels", - "opt2": "It regulates the voltage levels of the system", - "opt3": "It reduces the current levels", - "opt4": "It increases the voltage levels", - "correct_option": "It regulates the voltage levels of the system", - "correct_option_index": 2 - }, - { - "qsns": "What is the process involved in converting a three-phase system from a star to a delta configuration?", - "opt1": "Re-arranging the connections between the components of the circuit", - "opt2": "Replacing the components of the circuit", - "opt3": "Increasing the voltage levels of the system", - "opt4": "None of above", - "correct_option": "Re-arranging the connections between the components of the circuit", - "correct_option_index": 1 - }, - { - "qsns": "What is the process involved in converting a three-phase system from a delta to a star configuration?", - "opt1": "Re-arranging the connections between the components of the circuit", - "opt2": "Replacing the components of the circuit", - "opt3": "Decreasing the voltage levels of the system", - "opt4": "None of above", - "correct_option": "Re-arranging the connections between the components of the circuit", - "correct_option_index": 1 - }, - { - "qsns": "What is Kirchhoff's Current Law?", - "opt1": "The sum of voltages around a closed loop is zero", - "opt2": "The total current entering a node is equal to the total current leaving that node", - "opt3": "The sum of currents around a closed loop is zero", - "opt4": "Both a and b", - "correct_option": "The total current entering a node is equal to the total current leaving that node", - "correct_option_index": 2 - }, - { - "qsns": "What is Kirchhoff's Voltage Law?", - "opt1": "The sum of voltages around a closed loop is zero", - "opt2": "The total current entering a node is equal to the total current leaving that node", - "opt3": "The sum of currents around a closed loop is zero", - "opt4": "Both a and c", - "correct_option": "The sum of voltages around a closed loop is zero", - "correct_option_index": 1 - }, - { - "qsns": "What is the principle on which Kirchhoff's Current Law is based?", - "opt1": "Conservation of energy", - "opt2": "Conservation of charge", - "opt3": "Conservation of power", - "opt4": "Conservation of Potential", - "correct_option": "Conservation of charge", - "correct_option_index": 2 - }, - { - "qsns": "What is the principle on which Kirchhoff's Voltage Law is based?", - "opt1": "Conservation of energy", - "opt2": "Conservation of charge", - "opt3": "Conservation of power", - "opt4": "Conservation of Potential", - "correct_option": "Conservation of energy", - "correct_option_index": 1 - }, - { - "qsns": "What is the purpose of using Kirchhoff's laws in circuit analysis?", - "opt1": "To predict the behavior of electrical circuits", - "opt2": "To determine the currents and voltages in a circuit", - "opt3": "To analyze current flow and voltage drops in circuit", - "opt4": "All of above", - "correct_option": "All of above", - "correct_option_index": 4 - }, - { - "qsns": "What type of circuits can be analyzed using Kirchhoff's laws?", - "opt1": "Series circuits", - "opt2": "Parallel circuits", - "opt3": "Complex circuits", - "opt4": "Both a and b", - "correct_option": "Both a and b", - "correct_option_index": 4 - }, - { - "qsns": "What is the algebraic sum of the currents at a node according to Kirchhoff's Current Law?", - "opt1": "Always zero", - "opt2": "Always positive", - "opt3": "Always negative", - "opt4": "Always 1", - "correct_option": "Always zero", - "correct_option_index": 1 - }, - { - "qsns": "What is the algebraic sum of the voltage drops across all the components in a loop according to Kirchhoff's Voltage Law?", - "opt1": "Always zero", - "opt2": "Always positive", - "opt3": "Always negative", - "opt4": "Always 1", - "correct_option": "Always zero", - "correct_option_index": 1 - }, - { - "qsns": "Can Kirchhoff's laws be used to identify problems in a circuit?", - "opt1": "Yes", - "opt2": "No", - "opt3": "Sometimes", - "opt4": "Most of times", - "correct_option": "Yes", - "correct_option_index": 1 - }, - { - "qsns": "Why is understanding Kirchhoff's laws important in electrical and electronics engineering?", - "opt1": "To design and troubleshoot electrical circuits", - "opt2": "To predict the behavior of electrical circuits", - "opt3": "Both a and b", - "opt4": "None of above", - "correct_option": "Both a and b", - "correct_option_index": 3 - }, - { - "qsns": "Kirchhoff's current law is based on the principle of:", - "opt1": "Conservation of energy", - "opt2": "Conservation of charge", - "opt3": "Conservation of power", - "opt4": "Conservation of Potential", - "correct_option": "Conservation of charge", - "correct_option_index": 2 - }, - { - "qsns": "Kirchhoff's voltage law is based on the principle of:", - "opt1": "Conservation of energy", - "opt2": "Conservation of charge", - "opt3": "Conservation of power", - "opt4": "Conservation of Potential", - "correct_option": "Conservation of energy", - "correct_option_index": 1 - }, - { - "qsns": "Kirchhoff's current law states that the total current entering a node is:", - "opt1": "Greater than the total current leaving the node", - "opt2": "Equal to the total current leaving the node", - "opt3": "Less than the total current leaving the node", - "opt4": "None of above", - "correct_option": "Equal to the total current leaving the node", - "correct_option_index": 2 - }, - { - "qsns": "Kirchhoff's voltage law states that the sum of the voltages around any closed loop in a circuit is:", - "opt1": "Equal to zero", - "opt2": "Greater than zero", - "opt3": "Less than zero", - "opt4": "Equal to 1", - "correct_option": "Equal to zero", - "correct_option_index": 1 - }, - { - "qsns": "Kirchhoff's laws are fundamental laws in:", - "opt1": "Electrical circuit analysis", - "opt2": "Mechanical engineering", - "opt3": "Civil engineering", - "opt4": "All of above", - "correct_option": "Electrical circuit analysis", - "correct_option_index": 1 - }, - { - "qsns": "A linear circuit is one where the output response is:", - "opt1": "Directly proportional to the input signal", - "opt2": "Inversely proportional to the input signal", - "opt3": "Not related to the input signal", - "opt4": "None of above", - "correct_option": "Directly proportional to the input signal", - "correct_option_index": 1 - }, - { - "qsns": "Non-linear circuits do not follow a simple scaling rule, meaning that:", - "opt1": "The input and output signals are directly proportional", - "opt2": "The input and output signals are inversely proportional", - "opt3": "The relationship between the input and output signals may be more complex", - "opt4": "None of above", - "correct_option": "The relationship between the input and output signals may be more complex", - "correct_option_index": 3 - }, - { - "qsns": "Linear circuits are easy to analyze using mathematical tools such as:", - "opt1": "Kirchhoff's laws and Ohm's law", - "opt2": "Differential equations and Laplace transforms", - "opt3": "Both a and b", - "opt4": "None of above", - "correct_option": "Kirchhoff's laws and Ohm's law", - "correct_option_index": 1 - }, - { - "qsns": "Non-linear circuits often exhibit a threshold voltage or current, beyond which:", - "opt1": "The output response becomes distorted or unpredictable", - "opt2": "The output response becomes directly proportional to the input signal", - "opt3": "The output response remains constant", - "opt4": "All of above", - "correct_option": "The output response becomes distorted or unpredictable", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following circuits is an example of a non-linear circuit?", - "opt1": "Resistor-capacitor circuit", - "opt2": "Op-amp circuit", - "opt3": "Diode rectifier circuit", - "opt4": "All of above", - "correct_option": "Diode rectifier circuit", - "correct_option_index": 3 - }, - { - "qsns": "In a non-linear circuit, the relationship between the input and output signals may be more complex, meaning that:", - "opt1": "The circuit is always unstable", - "opt2": "The circuit is difficult to analyze", - "opt3": "The circuit is easy to analyze", - "opt4": "None of above", - "correct_option": "The circuit is difficult to analyze", - "correct_option_index": 2 - }, - { - "qsns": "Linear circuits are often used in:", - "opt1": "Simple electronic devices", - "opt2": "Advanced electronic devices", - "opt3": "Both A and B", - "opt4": "None of above", - "correct_option": "Simple electronic devices", - "correct_option_index": 1 - }, - { - "qsns": "Non-linear circuits are often used in:", - "opt1": "Simple electronic devices", - "opt2": "Advanced electronic devices", - "opt3": "Both A and B", - "opt4": "None of above", - "correct_option": "Advanced electronic devices", - "correct_option_index": 2 - }, - { - "qsns": "In a linear circuit, the output response is directly proportional to the input signal, meaning that if the input signal is doubled:", - "opt1": "The output signal will be halved", - "opt2": "The output signal will be doubled", - "opt3": "The output signal will not change", - "opt4": "The output signal will remain same", - "correct_option": "The output signal will be doubled", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following mathematical tools can be used to analyze linear circuits?", - "opt1": "Kirchhoff's laws", - "opt2": "Differential equations", - "opt3": "Both A and B", - "opt4": "None of above", - "correct_option": "Both A and B", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following circuits is an example of a non-linear circuit?", - "opt1": "Resistor-capacitor circuit", - "opt2": "Op-amp circuit", - "opt3": "Diode rectifier circuit", - "opt4": "All of above", - "correct_option": "Diode rectifier circuit", - "correct_option_index": 3 - }, - { - "qsns": "Which type of circuit is easier to analyze using mathematical tools like Kirchhoff's laws?", - "opt1": "Linear circuit", - "opt2": "Non-linear circuit", - "opt3": "Both a and b are equally easier", - "opt4": "none of above circuit can be analyzed", - "correct_option": "Linear circuit", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following techniques is often used to analyze non-linear circuits?", - "opt1": "Nodal analysis", - "opt2": "Mesh analysis", - "opt3": "Nonlinear circuit analysis", - "opt4": "Both b and c", - "correct_option": "Nonlinear circuit analysis", - "correct_option_index": 3 - }, - { - "qsns": "What happens to the output response of a non-linear circuit when the input signal is too large or too small?", - "opt1": "It becomes distorted or unpredictable.", - "opt2": "It remains constant.", - "opt3": "It becomes linear", - "opt4": "It becomes diminished.", - "correct_option": "It becomes distorted or unpredictable.", - "correct_option_index": 1 - }, - { - "qsns": "Which type of circuit is commonly found in applications such as amplifiers and oscillators?", - "opt1": "Linear circuit", - "opt2": "Non-linear circuit", - "opt3": "Both types of circuits are equally common", - "opt4": "None of above", - "correct_option": "Non-linear circuit", - "correct_option_index": 2 - }, - { - "qsns": "What is the main difference between linear and non-linear circuits?", - "opt1": "Linear circuits have a predictable output response, while non-linear circuits do not", - "opt2": "Non-linear circuits follow a simple scaling rule, while linear circuits do not", - "opt3": "Both types of circuits behave in exactly the same way.", - "opt4": "None of above", - "correct_option": "Linear circuits have a predictable output response, while non-linear circuits do not", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following is an example of a linear circuit element?", - "opt1": "Diode", - "opt2": "Capacitor", - "opt3": "Resistor", - "opt4": "Both a and c", - "correct_option": "Resistor", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following is an example of a non-linear circuit element?", - "opt1": "Diode", - "opt2": "Inductor", - "opt3": "Resistor", - "opt4": "Both a and c", - "correct_option": "Diode", - "correct_option_index": 1 - }, - { - "qsns": "Which type of circuit is more commonly used in digital electronics?", - "opt1": "Linear circuit", - "opt2": "Non-linear circuit", - "opt3": "Both types of circuits are equally common", - "opt4": "both a and b not used at all", - "correct_option": "Linear circuit", - "correct_option_index": 1 - }, - { - "qsns": "Which type of circuit requires AC analysis techniques?", - "opt1": "Bilateral circuits", - "opt2": "Unilateral circuits", - "opt3": "Both bilateral and unilateral circuits", - "opt4": "None of the above", - "correct_option": "Bilateral circuits", - "correct_option_index": 1 - }, - { - "qsns": "Which circuit element is an example of a unilateral element?", - "opt1": "Resistor", - "opt2": "Capacitor", - "opt3": "Inductor", - "opt4": "Diode", - "correct_option": "Diode", - "correct_option_index": 4 - }, - { - "qsns": "Which type of circuit can be analyzed using only DC circuit analysis techniques?", - "opt1": "Bilateral circuits", - "opt2": "Unilateral circuits", - "opt3": "Both bilateral and unilateral circuits", - "opt4": "None of the above", - "correct_option": "Bilateral circuits", - "correct_option_index": 1 - }, - { - "qsns": "What is another name for bilateral circuits?", - "opt1": "Asymmetric circuits", - "opt2": "Unilateral circuits", - "opt3": "Symmetric circuits", - "opt4": "AC circuits", - "correct_option": "Symmetric circuits", - "correct_option_index": 3 - }, - { - "qsns": "Which type of circuit element exhibits the same response to signals applied in either direction?", - "opt1": "Unilateral element", - "opt2": "Bilateral element", - "opt3": "Both unilateral and bilateral elements", - "opt4": "None of the above", - "correct_option": "Bilateral element", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following circuits is an example of a unilateral circuit?", - "opt1": "Diode rectifier circuit", - "opt2": "RC circuit", - "opt3": "LC circuit", - "opt4": "AC circuit", - "correct_option": "Diode rectifier circuit", - "correct_option_index": 1 - }, - { - "qsns": "Which type of circuit element requires consideration of the direction of the applied signal?", - "opt1": "Bilateral element", - "opt2": "Unilateral element", - "opt3": "Both A and B", - "opt4": "None of the above", - "correct_option": "Unilateral element", - "correct_option_index": 2 - }, - { - "qsns": "Which type of circuit exhibits both symmetric and asymmetric behavior?", - "opt1": "Unilateral circuit", - "opt2": "Bilateral circuit", - "opt3": "Circuits with both bilateral and unilateral elements", - "opt4": "None of the above", - "correct_option": "Circuits with both bilateral and unilateral elements", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following is true regarding the analysis of circuits with both bilateral and unilateral elements?", - "opt1": "They require only DC circuit analysis techniques.", - "opt2": "They require only AC circuit analysis techniques.", - "opt3": "They require both DC and AC circuit analysis techniques.", - "opt4": "They cannot be analyzed.", - "correct_option": "They require both DC and AC circuit analysis techniques.", - "correct_option_index": 3 - }, - { - "qsns": "Which type of circuit elements respond identically to signals applied in either direction?", - "opt1": "Bilateral", - "opt2": "Unilateral", - "opt3": "Both A and B", - "opt4": "None of above", - "correct_option": "Bilateral", - "correct_option_index": 1 - }, - { - "qsns": "Which type of circuits require only DC circuit analysis techniques?", - "opt1": "Bilateral", - "opt2": "Unilateral", - "opt3": "Both A and B", - "opt4": "None of above", - "correct_option": "Bilateral", - "correct_option_index": 1 - }, - { - "qsns": "Which type of circuit elements respond differently to signals applied in different directions?", - "opt1": "Bilateral", - "opt2": "Unilateral", - "opt3": "Both A and B", - "opt4": "None of above", - "correct_option": "Unilateral", - "correct_option_index": 2 - }, - { - "qsns": "Which type of circuits require AC circuit analysis techniques?", - "opt1": "Bilateral", - "opt2": "Unilateral", - "opt3": "Both A and B", - "opt4": "None of above", - "correct_option": "Bilateral", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following is an example of a bilateral circuit element?", - "opt1": "Diode", - "opt2": "Resistor", - "opt3": "Transistor", - "opt4": "None of above", - "correct_option": "Resistor", - "correct_option_index": 2 - }, - { - "qsns": "Which type of circuits are also known as symmetric circuits?", - "opt1": "Bilateral", - "opt2": "Unilateral", - "opt3": "Both A and B", - "opt4": "None of above", - "correct_option": "Bilateral", - "correct_option_index": 1 - }, - { - "qsns": "Which type of circuits are also known as asymmetric circuits?", - "opt1": "Bilateral", - "opt2": "Unilateral", - "opt3": "Both A and B", - "opt4": "None of above", - "correct_option": "Unilateral", - "correct_option_index": 2 - }, - { - "qsns": "Which type of circuits can have both bilateral and unilateral elements?", - "opt1": "Bilateral circuits only", - "opt2": "Unilateral circuits only", - "opt3": "Circuits with both bilateral and unilateral elements", - "opt4": "None of above", - "correct_option": "Circuits with both bilateral and unilateral elements", - "correct_option_index": 3 - }, - { - "qsns": "In which type of circuits does the direction of the signal matter?", - "opt1": "Bilateral", - "opt2": "Unilateral", - "opt3": "Both A and B", - "opt4": "None of above", - "correct_option": "Unilateral", - "correct_option_index": 2 - }, - { - "qsns": "Which type of circuit must be analyzed using both DC and AC circuit analysis techniques?", - "opt1": "Bilateral circuits only", - "opt2": "Unilateral circuits only", - "opt3": "Circuits with both bilateral and unilateral elements", - "opt4": "None of above", - "correct_option": "Circuits with both bilateral and unilateral elements", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following circuits is an example of a bilateral circuit?", - "opt1": "Diode rectifier circuit", - "opt2": "Resistor-capacitor circuit", - "opt3": "Transistor amplifier circuit", - "opt4": "None of the above", - "correct_option": "Resistor-capacitor circuit", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following circuits requires an external source of power to function?", - "opt1": "Passive circuit", - "opt2": "Active circuit", - "opt3": "Bilateral circuit", - "opt4": "Unilateral circuit", - "correct_option": "Active circuit", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following components is not present in passive circuits?", - "opt1": "Transistors", - "opt2": "Inductors", - "opt3": "Capacitors", - "opt4": "Resistors", - "correct_option": "Transistors", - "correct_option_index": 1 - }, - { - "qsns": "Which type of circuit is used in filters and impedance matching circuits?", - "opt1": "Passive circuits", - "opt2": "Active circuits", - "opt3": "Both a and b", - "opt4": "None of above", - "correct_option": "Passive circuits", - "correct_option_index": 1 - }, - { - "qsns": "Which type of circuit is used in amplifiers and oscillators?", - "opt1": "Passive circuits", - "opt2": "Active circuits", - "opt3": "Both a and b", - "opt4": "None of above", - "correct_option": "Active circuits", - "correct_option_index": 2 - }, - { - "qsns": "Which type of circuit requires an external power source to function?", - "opt1": "Passive circuits", - "opt2": "Active circuits", - "opt3": "Both a and b", - "opt4": "None of above", - "correct_option": "Active circuits", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following circuits can control signals?", - "opt1": "Passive circuits", - "opt2": "Active circuits", - "opt3": "Both a and b", - "opt4": "None of above", - "correct_option": "Active circuits", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following circuits attenuates signals?", - "opt1": "Passive circuits", - "opt2": "Active circuits", - "opt3": "Both a and b", - "opt4": "None of above", - "correct_option": "Passive circuits", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following components is an active component?", - "opt1": "Capacitor", - "opt2": "Transistor", - "opt3": "Resistor", - "opt4": "Inductor", - "correct_option": "Transistor", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following circuits can generate power gain?", - "opt1": "Passive circuit", - "opt2": "Active circuit", - "opt3": "Both A and B", - "opt4": "None of above", - "correct_option": "Active circuit", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following circuits requires an external source of power to function?", - "opt1": "Passive circuit", - "opt2": "Active circuit", - "opt3": "Bilateral circuit", - "opt4": "Unilateral circuit", - "correct_option": "Active circuit", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following circuits can only attenuate or filter a signal?", - "opt1": "Passive circuit", - "opt2": "Active circuit", - "opt3": "Bilateral circuit", - "opt4": "Unilateral circuit", - "correct_option": "Passive circuit", - "correct_option_index": 1 - }, - { - "qsns": "Which type of circuit contains only passive components?", - "opt1": "Active circuit", - "opt2": "Bilateral circuit", - "opt3": "Passive circuit", - "opt4": "Unilateral circuit", - "correct_option": "Passive circuit", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following circuits cannot perform mathematical operations on signals?", - "opt1": "Passive circuit", - "opt2": "Active circuit", - "opt3": "Bilateral circuit", - "opt4": "Unilateral circuit", - "correct_option": "Passive circuit", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following circuits is commonly used in filters and impedance matching circuits?", - "opt1": "Active circuit", - "opt2": "Bilateral circuit", - "opt3": "Unilateral circuit", - "opt4": "Passive circuit", - "correct_option": "Passive circuit", - "correct_option_index": 4 - }, - { - "qsns": "Which type of circuit can both attenuate and amplify signals?", - "opt1": "Passive circuit", - "opt2": "Active circuit", - "opt3": "Unilateral circuit", - "opt4": "Bilateral circuit", - "correct_option": "Active circuit", - "correct_option_index": 2 - }, - { - "qsns": "Which type of circuit exhibits the same behavior in both directions of current flow?", - "opt1": "Passive circuit", - "opt2": "Active circuit", - "opt3": "Bilateral circuit", - "opt4": "Unilateral circuit", - "correct_option": "Bilateral circuit", - "correct_option_index": 3 - }, - { - "qsns": "Which type of circuit can only exhibit behavior in one direction of current flow?", - "opt1": "Passive circuit", - "opt2": "Active circuit", - "opt3": "Bilateral circuit", - "opt4": "Unilateral circuit", - "correct_option": "Unilateral circuit", - "correct_option_index": 4 - }, - { - "qsns": "What is the superposition theorem used for?", - "opt1": "To simplify complex circuits", - "opt2": "To analyze AC circuits", - "opt3": "To analyze non-linear circuits", - "opt4": "To calculate power in circuits", - "correct_option": "To simplify complex circuits", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following is a necessary condition for applying the superposition theorem?", - "opt1": "The circuit must be linear", - "opt2": "The circuit must be passive", - "opt3": "The circuit must be bilateral", - "opt4": "The circuit must contain only resistors", - "correct_option": "The circuit must be linear", - "correct_option_index": 1 - }, - { - "qsns": "In a circuit with multiple voltage sources, how is the superposition theorem applied?", - "opt1": "Each voltage source is turned on individually and the resulting current is added together", - "opt2": "Each voltage source is turned on individually and the resulting voltage is added together", - "opt3": "Each voltage source is turned on individually and the resulting current is subtracted from the total current", - "opt4": "Each voltage source is turned on individually and the resulting voltage is subtracted from the total voltage", - "correct_option": "Each voltage source is turned on individually and the resulting current is added together", - "correct_option_index": 1 - }, - { - "qsns": "In a circuit with multiple current sources, how is the superposition theorem applied?", - "opt1": "Each current source is turned on individually and the resulting voltage is added together", - "opt2": "Each current source is turned on individually and the resulting voltage is subtracted from the total voltage", - "opt3": "Each current source is turned on individually and the resulting current is added together", - "opt4": "Each current source is turned on individually and the resulting current is subtracted from the total current", - "correct_option": "Each current source is turned on individually and the resulting current is added together", - "correct_option_index": 3 - }, - { - "qsns": "What is the main advantage of using the superposition theorem?", - "opt1": "It simplifies complex circuits", - "opt2": "It eliminates the need for Kirchhoff's laws", - "opt3": "It reduces power consumption in circuits", - "opt4": "It can only be used for DC circuits", - "correct_option": "It simplifies complex circuits", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following is a disadvantage of using the superposition theorem?", - "opt1": "It is time-consuming to apply to large circuits", - "opt2": "It can only be used for circuits with few components", - "opt3": "It requires specialized equipment", - "opt4": "It provides accurate results for non-linear circuits", - "correct_option": "It is time-consuming to apply to large circuits", - "correct_option_index": 1 - }, - { - "qsns": "What is the superposition theorem based on?", - "opt1": "Ohm's law", - "opt2": "Faraday's law", - "opt3": "Kirchhoff's laws", - "opt4": "The principle of superposition", - "correct_option": "The principle of superposition", - "correct_option_index": 4 - }, - { - "qsns": "What type of circuits is the superposition theorem used to solve?", - "opt1": "Series circuits", - "opt2": "Parallel circuits", - "opt3": "Complex circuits", - "opt4": "Linear circuits", - "correct_option": "Linear circuits", - "correct_option_index": 4 - }, - { - "qsns": "According to the superposition theorem, what happens when multiple sources are present in a circuit?", - "opt1": "They cancel each other out", - "opt2": "They add together", - "opt3": "Each source is considered independently", - "opt4": "None of the above", - "correct_option": "Each source is considered independently", - "correct_option_index": 3 - }, - { - "qsns": "What is the superposition theorem based on?", - "opt1": "Kirchhoff's current law", - "opt2": "Kirchhoff's voltage law", - "opt3": "Ohm's law", - "opt4": "Faraday's law", - "correct_option": "Ohm's law", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following is a requirement for the superposition theorem to be applicable?", - "opt1": "The circuit must be linear", - "opt2": "The circuit must contain only passive components", - "opt3": "The circuit must have only one voltage source", - "opt4": "The circuit must be in series configuration", - "correct_option": "The circuit must be linear", - "correct_option_index": 1 - }, - { - "qsns": "How is the superposition theorem applied to a circuit with multiple sources?", - "opt1": "Each source is turned on one at a time, with all other sources turned off", - "opt2": "All sources are turned on at the same time", - "opt3": "All sources are turned off", - "opt4": "Each source is turned on in pairs, with all other sources turned off", - "correct_option": "Each source is turned on one at a time, with all other sources turned off", - "correct_option_index": 1 - }, - { - "qsns": "What is the primary advantage of using the superposition theorem to solve circuits?", - "opt1": "It allows for a quick and easy solution", - "opt2": "It can be applied to any type of circuit", - "opt3": "It provides a more accurate solution than other methods", - "opt4": "It simplifies the circuit and reduces the number of components", - "correct_option": "It simplifies the circuit and reduces the number of components", - "correct_option_index": 4 - }, - { - "qsns": "Which of the following is a limitation of the superposition theorem?", - "opt1": "It cannot be used on circuits with more than two sources", - "opt2": "It requires complex calculations", - "opt3": "It can only be used on circuits with passive components", - "opt4": "It is not applicable to non-linear circuits", - "correct_option": "It is not applicable to non-linear circuits", - "correct_option_index": 4 - }, - { - "qsns": "What is the result of applying the superposition theorem to a circuit with multiple sources?", - "opt1": "The total voltage and current in the circuit are calculated", - "opt2": "The voltage and current in each component are calculated", - "opt3": "The power dissipated by each component is calculated", - "opt4": "The resistance of each component is calculated", - "correct_option": "The total voltage and current in the circuit are calculated", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following is a step in applying the superposition theorem to a circuit?", - "opt1": "Calculate the total resistance of the circuit", - "opt2": "Calculate the voltage and current of each source individually", - "opt3": "Add the voltage and current of each source together", - "opt4": "Replace each source with a resistor of equivalent value", - "correct_option": "Add the voltage and current of each source together", - "correct_option_index": 3 - }, - { - "qsns": "What is the formula for calculating the voltage across a component in a circuit using the superposition theorem?", - "opt1": "V=IR", - "opt2": "V=I/R", - "opt3": "V=Sum(V1+V2+...+Vn)", - "opt4": "V=Sum(I1+I2+...+In)", - "correct_option": "V=Sum(V1+V2+...+Vn)", - "correct_option_index": 3 - }, - { - "qsns": "Superposition theorem is applicable to which type of circuits?", - "opt1": "Linear circuits only", - "opt2": "Non-linear circuits only", - "opt3": "Both linear and non-linear circuits", - "opt4": "Passive circuits only", - "correct_option": "Linear circuits only", - "correct_option_index": 1 - }, - { - "qsns": "Superposition theorem states that in a linear circuit with multiple sources, the total response is equal to:", - "opt1": "The sum of all individual responses", - "opt2": "The product of all individual responses", - "opt3": "The average of all individual responses", - "opt4": "None of the above", - "correct_option": "The sum of all individual responses", - "correct_option_index": 1 - }, - { - "qsns": "In superposition theorem, which of the following needs to be kept constant while analyzing each individual source?", - "opt1": "Voltage", - "opt2": "Current", - "opt3": "Resistance", - "opt4": "All of the above", - "correct_option": "Resistance", - "correct_option_index": 3 - }, - { - "qsns": "Superposition theorem is used to calculate which of the following in a circuit?", - "opt1": "Voltage", - "opt2": "Current", - "opt3": "Power", - "opt4": "All of the above", - "correct_option": "All of the above", - "correct_option_index": 4 - }, - { - "qsns": "In a circuit with two voltage sources, how many separate analyses are required using the superposition theorem?", - "opt1": "1", - "opt2": "2", - "opt3": "3", - "opt4": "4", - "correct_option": "2", - "correct_option_index": 2 - }, - { - "qsns": "The superposition theorem is not applicable to circuits with which of the following components?", - "opt1": "Resistors", - "opt2": "Capacitors", - "opt3": "Inductors", - "opt4": "Diodes", - "correct_option": "Diodes", - "correct_option_index": 4 - }, - { - "qsns": "What is the Thevenin equivalent circuit?", - "opt1": "A circuit consisting of a single voltage source and a single resistor", - "opt2": "A circuit consisting of a single current source and a single resistor", - "opt3": "A circuit consisting of multiple voltage sources and resistors", - "opt4": "A circuit consisting of multiple voltage sources and a single resistor", - "correct_option": "A circuit consisting of a single voltage source and a single resistor", - "correct_option_index": 1 - }, - { - "qsns": "What is the purpose of Thevenin's theorem?", - "opt1": "To simplify complex circuits into simpler, equivalent circuits", - "opt2": "To measure voltage and current in a circuit", - "opt3": "To determine the power dissipated in a circuit", - "opt4": "All of above", - "correct_option": "To simplify complex circuits into simpler, equivalent circuits", - "correct_option_index": 1 - }, - { - "qsns": "What is the first step in determining the Thevenin equivalent circuit?", - "opt1": "Identify the load circuit that is connected to the circuit of interest", - "opt2": "Remove the load circuit from the circuit of interest", - "opt3": "Determine the open-circuit voltage Vth across the terminals where the load was connected", - "opt4": "Determine the internal resistance Rth of the circuit between those terminals", - "correct_option": "Identify the load circuit that is connected to the circuit of interest", - "correct_option_index": 1 - }, - { - "qsns": "What is the second step in determining the Thevenin equivalent circuit?", - "opt1": "Identify the load circuit that is connected to the circuit of interest", - "opt2": "Remove the load circuit from the circuit of interest", - "opt3": "Determine the open-circuit voltage Vth across the terminals where the load was connected", - "opt4": "Determine the internal resistance Rth of the circuit between those terminals", - "correct_option": "Remove the load circuit from the circuit of interest", - "correct_option_index": 2 - }, - { - "qsns": "What is the third step in determining the Thevenin equivalent circuit?", - "opt1": "Identify the load circuit that is connected to the circuit of interest", - "opt2": "Determine the open-circuit voltage Vth across the terminals where the load was connected", - "opt3": "Determine the internal resistance Rth of the circuit between those terminals", - "opt4": "None of above", - "correct_option": "Determine the open-circuit voltage Vth across the terminals where the load was connected", - "correct_option_index": 2 - }, - { - "qsns": "What is the fourth step in determining the Thevenin equivalent circuit?", - "opt1": "Identify the load circuit that is connected to the circuit of interest", - "opt2": "Determine the open-circuit voltage Vth across the terminals where the load was connected", - "opt3": "Determine the internal resistance Rth of the circuit between those terminals", - "opt4": "None of above", - "correct_option": "Determine the internal resistance Rth of the circuit between those terminals", - "correct_option_index": 3 - }, - { - "qsns": "What is the final step in determining the Thevenin equivalent circuit?", - "opt1": "Draw the Thevenin equivalent circuit with the voltage source Vth and the resistor Rth", - "opt2": "Draw the Thevenin equivalent circuit with multiple voltage sources and resistors", - "opt3": "Determine the power delivered to the load circuit", - "opt4": "None of above", - "correct_option": "Draw the Thevenin equivalent circuit with the voltage source Vth and the resistor Rth", - "correct_option_index": 1 - }, - { - "qsns": "What is the advantage of using the Thevenin equivalent circuit?", - "opt1": "It simplifies complex circuits into simpler, equivalent circuits", - "opt2": "It allows the voltage and current across the load to be easily determined", - "opt3": "It is useful for designing circuits that are optimized for a specific load", - "opt4": "All of above", - "correct_option": "All of above", - "correct_option_index": 4 - }, - { - "qsns": "Can Thevenin's theorem be used for non-linear circuits?", - "opt1": "No, it only applies to linear circuits", - "opt2": "Yes, it can be applied to both linear and non-linear circuits", - "opt3": "It only applies to circuits with voltage sources and resistors", - "opt4": "It only applies to circuits with current sources", - "correct_option": "No, it only applies to linear circuits", - "correct_option_index": 1 - }, - { - "qsns": "What is the purpose of the Thevenin equivalent circuit?", - "opt1": "To calculate the voltage and current across a load circuit", - "opt2": "To determine the power delivered to a load circuit", - "opt3": "To simplify complex circuits into simpler, equivalent circuits", - "opt4": "All of above", - "correct_option": "All of above", - "correct_option_index": 4 - }, - { - "qsns": "What is Thevenin's theorem used for in electrical engineering?", - "opt1": "To simplify complex circuits", - "opt2": "To increase the resistance of a circuit", - "opt3": "To reduce the voltage of a circuit", - "opt4": "To add more components to a circuit", - "correct_option": "To simplify complex circuits", - "correct_option_index": 1 - }, - { - "qsns": "What is the Thevenin equivalent circuit?", - "opt1": "A circuit consisting of multiple voltage sources and resistors", - "opt2": "A circuit consisting of a single voltage source and a single resistor", - "opt3": "A circuit consisting of multiple voltage sources and a single resistor", - "opt4": "A circuit consisting of a single voltage source and multiple resistors", - "correct_option": "A circuit consisting of a single voltage source and a single resistor", - "correct_option_index": 2 - }, - { - "qsns": "What is the first step in determining the Thevenin equivalent circuit?", - "opt1": "Identify the load circuit that is connected to the circuit of interest", - "opt2": "Remove the load circuit from the circuit of interest", - "opt3": "Determine the internal resistance of the circuit between those terminals", - "opt4": "Determine the open-circuit voltage across the terminals where the load was connected", - "correct_option": "Identify the load circuit that is connected to the circuit of interest", - "correct_option_index": 1 - }, - { - "qsns": "What is the second step in determining the Thevenin equivalent circuit?", - "opt1": "Identify the load circuit that is connected to the circuit of interest", - "opt2": "Determine the internal resistance of the circuit between those terminals", - "opt3": "Determine the open-circuit voltage across the terminals where the load was connected", - "opt4": "Remove the load circuit from the circuit of interest", - "correct_option": "Remove the load circuit from the circuit of interest", - "correct_option_index": 4 - }, - { - "qsns": "What is the third step in determining the Thevenin equivalent circuit?", - "opt1": "Identify the load circuit that is connected to the circuit of interest", - "opt2": "Determine the open-circuit voltage across the terminals where the load was connected", - "opt3": "Determine the internal resistance of the circuit between those terminals", - "opt4": "Remove the load circuit from the circuit of interest", - "correct_option": "Determine the open-circuit voltage across the terminals where the load was connected", - "correct_option_index": 2 - }, - { - "qsns": "What is the fourth step in determining the Thevenin equivalent circuit?", - "opt1": "Identify the load circuit that is connected to the circuit of interest", - "opt2": "Determine the open-circuit voltage across the terminals where the load was connected", - "opt3": "Determine the internal resistance of the circuit between those terminals", - "opt4": "Remove the load circuit from the circuit of interest", - "correct_option": "Determine the internal resistance of the circuit between those terminals", - "correct_option_index": 3 - }, - { - "qsns": "Can Thevenin's theorem be used for non-linear circuits?", - "opt1": "No, it can only be used for linear circuits", - "opt2": "Yes, it can be used for both linear and non-linear circuits", - "opt3": "Yes, but only for circuits with a single non-linear element", - "opt4": "It depends on the complexity of the circuit", - "correct_option": "No, it can only be used for linear circuits", - "correct_option_index": 1 - }, - { - "qsns": "What is the advantage of using Thevenin's theorem to simplify a circuit?", - "opt1": "It reduces the number of components that need to be analyzed", - "opt2": "It increases the voltage of the circuit", - "opt3": "It decreases the resistance of the circuit", - "opt4": "It adds more components to the circuit", - "correct_option": "It reduces the number of components that need to be analyzed", - "correct_option_index": 1 - }, - { - "qsns": "What is the difference between a Thevenin equivalent circuit and a Norton equivalent circuit?", - "opt1": "A Thevenin equivalent circuit uses a voltage source and a resistor, while a Norton equivalent circuit uses a current source and a resistor.", - "opt2": "A Thevenin equivalent circuit uses a current source and a resistor, while a Norton equivalent circuit uses a voltage source and a resistor.", - "opt3": "There is no difference between a Thevenin and Norton equivalent circuit.", - "opt4": "The choice between a Thevenin and Norton equivalent circuit depends on the type of circuit being analyzed.", - "correct_option": "A Thevenin equivalent circuit uses a voltage source and a resistor, while a Norton equivalent circuit uses a current source and a resistor.", - "correct_option_index": 1 - }, - { - "qsns": "What is the primary use of the Thevenin equivalent circuit in circuit design?", - "opt1": "To optimize circuits for a specific load", - "opt2": "To increase the resistance of a circuit", - "opt3": "To reduce the voltage of a circuit", - "opt4": "To add more components to a circuit", - "correct_option": "To optimize circuits for a specific load", - "correct_option_index": 1 - }, - { - "qsns": "What is Norton's theorem?", - "opt1": "A method to calculate the resistance of a circuit.", - "opt2": "A method to simplify complex circuits by using an equivalent voltage source and a series resistor.", - "opt3": "A method to simplify complex circuits by using an equivalent current source and a parallel resistor.", - "opt4": "Both a and c", - "correct_option": "A method to simplify complex circuits by using an equivalent current source and a parallel resistor.", - "correct_option_index": 3 - }, - { - "qsns": "What is the Norton equivalent current?", - "opt1": "The current that flows through a resistor in the circuit.", - "opt2": "The current that would flow if the output terminals of the circuit were short-circuited.", - "opt3": "The current that would flow if the output terminals of the circuit were open-circuited.", - "opt4": "None of above", - "correct_option": "The current that would flow if the output terminals of the circuit were short-circuited.", - "correct_option_index": 2 - }, - { - "qsns": "What is the equivalent resistance seen from the output terminals in Norton's theorem?", - "opt1": "The resistance of the load resistor.", - "opt2": "The resistance of the circuit with all voltage sources replaced by their internal resistances.", - "opt3": "The resistance of the circuit with all current sources replaced by their internal resistances.", - "opt4": "None of above", - "correct_option": "The resistance of the circuit with all voltage sources replaced by their internal resistances.", - "correct_option_index": 2 - }, - { - "qsns": "What is the Norton equivalent circuit of a linear circuit?", - "opt1": "A voltage source and a series resistor", - "opt2": "A current source and a series resistor", - "opt3": "A voltage source and a parallel resistor", - "opt4": "A current source and a parallel resistor", - "correct_option": "A current source and a parallel resistor", - "correct_option_index": 4 - }, - { - "qsns": "What is the relationship between Norton's theorem and Thevenin's theorem?", - "opt1": "They are unrelated.", - "opt2": "They provide different methods to simplify complex circuits", - "opt3": "They are equivalent and can be used interchangeably.", - "opt4": "Thevenin's theorem can be used in place for Norton's theorem but not vice versa", - "correct_option": "They are equivalent and can be used interchangeably.", - "correct_option_index": 3 - }, - { - "qsns": "What is the advantage of using Norton's theorem?", - "opt1": "It simplifies complex circuits", - "opt2": "It allows the calculation of voltage at any point in the circuit", - "opt3": "It is applicable to nonlinear circuits", - "opt4": "It requires only one step to calculate the output", - "correct_option": "It simplifies complex circuits", - "correct_option_index": 1 - }, - { - "qsns": "What is the limitation of Norton's theorem?", - "opt1": "It can provide a method for calculating the power in the circuit.", - "opt2": "It can be used to analyze circuits with capacitors and inductors.", - "opt3": "It cannot be used for circuits with resistors in parallel", - "opt4": "It can only be used for circuits in steady-state conditions.", - "correct_option": "It can only be used for circuits in steady-state conditions.", - "correct_option_index": 4 - }, - { - "qsns": "Can Norton's theorem be used to analyze non-linear circuits?", - "opt1": "Yes, as long as the circuit is simple.", - "opt2": "It depends on the type of non-linearity in the circuit.", - "opt3": "No, Norton's theorem is only applicable to linear circuits.", - "opt4": "Both a and b", - "correct_option": "No, Norton's theorem is only applicable to linear circuits.", - "correct_option_index": 3 - }, - { - "qsns": "How is the Norton equivalent circuit connected to the load resistor?", - "opt1": "In series.", - "opt2": "In parallel", - "opt3": "The Norton equivalent circuit is not connected to the load resistor.", - "opt4": "None of above", - "correct_option": "In parallel", - "correct_option_index": 2 - }, - { - "qsns": "The Norton equivalent circuit must be connected to an external load to obtain the desired output.", - "opt1": "A voltage source and a series resistor", - "opt2": "A current source and a series resistor", - "opt3": "A voltage source and a parallel resistor", - "opt4": "A current source and a parallel resistor", - "correct_option": "A current source and a parallel resistor", - "correct_option_index": 4 - }, - { - "qsns": "What is the Norton equivalent circuit of a linear circuit?", - "opt1": "A voltage source and a series resistor", - "opt2": "A current source and a series resistor", - "opt3": "A voltage source and a parallel resistor", - "opt4": "A current source and a parallel resistor", - "correct_option": "A current source and a parallel resistor", - "correct_option_index": 4 - }, - { - "qsns": "When using Norton's theorem, what must be disconnected from the circuit first?", - "opt1": "The voltage source", - "opt2": "The current source", - "opt3": "The load resistor", - "opt4": "The switch", - "correct_option": "The load resistor", - "correct_option_index": 3 - }, - { - "qsns": "How is the Norton equivalent current calculated?", - "opt1": "By open-circuiting the output terminals and finding the current", - "opt2": "By short-circuiting the output terminals and finding the current", - "opt3": "By connecting a load resistor to the output terminals and finding the current", - "opt4": "By calculating the voltage across the output terminals and dividing by the resistance", - "correct_option": "By short-circuiting the output terminals and finding the current", - "correct_option_index": 2 - }, - { - "qsns": "What is the equivalent resistance seen from the output terminals in Norton's theorem?", - "opt1": "The total resistance of the circuit", - "opt2": "The resistance of the load resistor", - "opt3": "The resistance of the voltage source", - "opt4": "The resistance seen from the output terminals with all voltage sources replaced by their internal resistances", - "correct_option": "The resistance seen from the output terminals with all voltage sources replaced by their internal resistances", - "correct_option_index": 4 - }, - { - "qsns": "What is the advantage of using Norton's theorem?", - "opt1": "It simplifies complex circuits", - "opt2": "It allows the calculation of voltage at any point in the circuit", - "opt3": "It is applicable to nonlinear circuits", - "opt4": "It requires only one step to calculate the output", - "correct_option": "It simplifies complex circuits", - "correct_option_index": 1 - }, - { - "qsns": "In Norton's theorem, what is the Norton equivalent current source dependent on?", - "opt1": "The load resistor", - "opt2": "The voltage across the circuit", - "opt3": "The current through the circuit", - "opt4": "The total resistance of the circuit", - "correct_option": "The current through the circuit", - "correct_option_index": 3 - }, - { - "qsns": "How many steps are involved in applying Norton's theorem?", - "opt1": "Two", - "opt2": "Three", - "opt3": "Four", - "opt4": "Five", - "correct_option": "Five", - "correct_option_index": 4 - }, - { - "qsns": "What is the main requirement for a circuit to be analyzed using Norton's theorem?", - "opt1": "It must be in steady-state conditions", - "opt2": "It must contain only resistors and voltage sources", - "opt3": "It must be a linear circuit", - "opt4": "It must contain only resistors and current sources", - "correct_option": "It must be a linear circuit", - "correct_option_index": 3 - }, - { - "qsns": "What is the equivalent circuit obtained in Norton's theorem?", - "opt1": "A voltage source in series with a resistor", - "opt2": "A current source in series with a resistor", - "opt3": "A voltage source in parallel with a resistor", - "opt4": "A current source in parallel with a resistor", - "correct_option": "A current source in parallel with a resistor", - "correct_option_index": 4 - }, - { - "qsns": "What is the purpose of the Norton equivalent circuit?", - "opt1": "To calculate the resistance of the circuit.", - "opt2": "To replace the original circuit with a simpler circuit.", - "opt3": "To provide a method for calculating the voltage at any point in the circuit.", - "opt4": "All of above", - "correct_option": "To replace the original circuit with a simpler circuit.", - "correct_option_index": 2 - }, - { - "qsns": "What is the maximum power transfer theorem?", - "opt1": "It states that the power transferred from a source to a load is maximum when the load impedance is equal to the source impedance.", - "opt2": "It states that the power transferred from a source to a load is maximum when the load impedance is greater than the source impedance.", - "opt3": "It states that the power transferred from a source to a load is maximum when the load impedance is less than the source impedance.", - "opt4": "None of the above.", - "correct_option": "It states that the power transferred from a source to a load is maximum when the load impedance is equal to the source impedance.", - "correct_option_index": 1 - }, - { - "qsns": "What type of circuits does the maximum power transfer theorem apply to?", - "opt1": "Linear circuits only.", - "opt2": "Non-linear circuits only.", - "opt3": "Both linear and non-linear circuits.", - "opt4": "None of the above.", - "correct_option": "Linear circuits only.", - "correct_option_index": 1 - }, - { - "qsns": "What is the advantage of applying the maximum power transfer theorem in a circuit?", - "opt1": "It reduces the power loss in the circuit.", - "opt2": "It increases the power loss in the circuit.", - "opt3": "It reduces the voltage and current in the circuit.", - "opt4": "None of the above.", - "correct_option": "It reduces the power loss in the circuit.", - "correct_option_index": 1 - }, - { - "qsns": "How does the maximum power transfer theorem help in designing power systems?", - "opt1": "It helps to optimize the power transfer in the system.", - "opt2": "It helps to increase the efficiency of the system.", - "opt3": "It helps to reduce the power loss in the system.", - "opt4": "All of the above.", - "correct_option": "All of the above.", - "correct_option_index": 4 - }, - { - "qsns": "What happens when the load impedance is not equal to the source impedance in a circuit?", - "opt1": "The power transfer is maximum.", - "opt2": "The power transfer is minimum.", - "opt3": "The power transfer is zero.", - "opt4": "None of the above.", - "correct_option": "The power transfer is minimum.", - "correct_option_index": 2 - }, - { - "qsns": "Is the maximum power transfer theorem applicable to AC circuits?", - "opt1": "Yes, it is applicable to AC circuits.", - "opt2": "No, it is applicable only to DC circuits.", - "opt3": "It depends on the type of load.", - "opt4": "None of the above.", - "correct_option": "Yes, it is applicable to AC circuits.", - "correct_option_index": 1 - }, - { - "qsns": "What is the formula for calculating the maximum power transfer in a circuit?", - "opt1": "P=V*2/R", - "opt2": "P=I^2R", - "opt3": "P=V^2/2R", - "opt4": "P=V^2/R+L", - "correct_option": "P=I^2R", - "correct_option_index": 2 - }, - { - "qsns": "Can the maximum power transfer occur at multiple values of load impedance?", - "opt1": "Yes, it can occur at multiple values of load impedance.", - "opt2": "No, it can occur at only one value of load impedance.", - "opt3": "It depends on the source impedance.", - "opt4": "None of the above.", - "correct_option": "No, it can occur at only one value of load impedance.", - "correct_option_index": 2 - }, - { - "qsns": "What is the condition for maximum power transfer in a circuit?", - "opt1": "The load impedance must be equal to the source impedance.", - "opt2": "The load impedance must be greater than the source impedance.", - "opt3": "The load impedance must be less than the source impedance.", - "opt4": "None of the above.", - "correct_option": "The load impedance must be equal to the source impedance.", - "correct_option_index": 1 - }, - { - "qsns": "What is the maximum efficiency that can be achieved in a circuit using the maximum power transfer theorem?", - "opt1": "100%", - "opt2": "50%", - "opt3": "25%", - "opt4": "It depends on the circuit.", - "correct_option": "25%", - "correct_option_index": 3 - }, - { - "qsns": "The maximum power transfer theorem is applicable to:", - "opt1": "Linear circuits only.", - "opt2": "Non-linear circuits only.", - "opt3": "Both linear and non-linear circuits.", - "opt4": "All of above", - "correct_option": "Linear circuits only.", - "correct_option_index": 1 - }, - { - "qsns": "The maximum power transfer occurs when:", - "opt1": "The load impedance is zero.", - "opt2": "The load impedance is equal to the source impedance", - "opt3": "The load impedance is infinite.", - "opt4": "When load impedance is double of source impedance", - "correct_option": "The load impedance is equal to the source impedance", - "correct_option_index": 2 - }, - { - "qsns": "What is the formula for calculating the maximum power transfer?", - "opt1": "Pmax=V*2", - "opt2": "Pmax=V^2 2", - "opt3": "Pmax=V^2/4R", - "opt4": "Pmax=V^2 2/(2R)", - "correct_option": "Pmax=V^2/4R", - "correct_option_index": 3 - }, - { - "qsns": "In which applications is the maximum power transfer theorem useful?", - "opt1": "Audio", - "opt2": "Power supplies", - "opt3": "Power transmission systems", - "opt4": "All of the above", - "correct_option": "All of the above", - "correct_option_index": 4 - }, - { - "qsns": "What happens when the load impedance is much larger than the source impedance?", - "opt1": "The power transfer is maximum", - "opt2": "The power transfer is minimum.", - "opt3": "The power transfer is zero", - "opt4": "None of above", - "correct_option": "The power transfer is minimum.", - "correct_option_index": 2 - }, - { - "qsns": "The maximum power transfer theorem helps to:", - "opt1": "Minimize the amount of energy lost in transmission.", - "opt2": "Maximize the amount of energy lost in transmission.", - "opt3": "Have no effect on the amount of energy lost in transmission.", - "opt4": "Helps to distribute energy evenly in transmission.", - "correct_option": "Minimize the amount of energy lost in transmission.", - "correct_option_index": 1 - }, - { - "qsns": "The maximum power transfer theorem is useful in designing and optimizing:", - "opt1": "Power systems", - "opt2": "Lighting systems", - "opt3": "Communication systems", - "opt4": "Both a and c", - "correct_option": "Power systems", - "correct_option_index": 1 - }, - { - "qsns": "What is the time constant of an R-C circuit consisting of a 1 kΩ resistor and a 100 nF capacitor?", - "opt1": "1 ms", - "opt2": "100 µs", - "opt3": "10 µs", - "opt4": "10 ms", - "correct_option": "1 ms", - "correct_option_index": 1 - }, - { - "qsns": "In an R-L circuit, the voltage across the Inductor lags behind the current by how many degrees?", - "opt1": "0°", - "opt2": "45°", - "opt3": "90°", - "opt4": "180°", - "correct_option": "0°", - "correct_option_index": 1 - }, - { - "qsns": "What is the resonant frequency of an R-L-C circuit with a 100 Ω resistor, 1 mH inductor, and a 100 nF capacitor?", - "opt1": "160 kHz", - "opt2": "16 kHz", - "opt3": "1.6 kHz", - "opt4": "1.6 MHz", - "correct_option": "160 kHz", - "correct_option_index": 1 - }, - { - "qsns": "In an R-L-C circuit, what happens to the Impedance at resonance?", - "opt1": "It is zero", - "opt2": "It is at a minimum", - "opt3": "It is at a maximum", - "opt4": "It is infinite", - "correct_option": "It is infinite", - "correct_option_index": 4 - }, - { - "qsns": "A series R-C circuit has a resistor of 100 Ω and a capacitor of 10 µF. What is the cutoff frequency?", - "opt1": "15.9 Hz", - "opt2": "159 Hz", - "opt3": "1.59 kHz", - "opt4": "1.59 Hz", - "correct_option": "159 Hz", - "correct_option_index": 2 - }, - { - "qsns": "In an R-L circuit, what happens to the impedance as the frequency increases?", - "opt1": "It increases", - "opt2": "It decreases", - "opt3": "It remains constant", - "opt4": "It oscillates", - "correct_option": "It increases", - "correct_option_index": 1 - }, - { - "qsns": "What is the phase angle between the voltage and current in an R-L-C circuit at resonance?", - "opt1": "0°", - "opt2": "45°", - "opt3": "90°", - "opt4": "180°", - "correct_option": "45°", - "correct_option_index": 2 - }, - { - "qsns": "What is the time constant of an R-L circuit consisting of a 100 Ω resistor and a 10 mH inductor?", - "opt1": "100 µs", - "opt2": "1 µs", - "opt3": "10 µs", - "opt4": "1 ms", - "correct_option": "1 µs", - "correct_option_index": 2 - }, - { - "qsns": "In an R-L-C circuit, what happens to the bandwidth as the quality factor increases?", - "opt1": "It increases", - "opt2": "It decreases", - "opt3": "It remains constant", - "opt4": "It oscillates", - "correct_option": "It increases", - "correct_option_index": 1 - }, - { - "qsns": "A parallel R-C circuit has a resistor of 100 kΩ and a capacitor of 1 µF. What is the resonant frequency?", - "opt1": "15.92 Hz", - "opt2": "15.92 kHz", - "opt3": "159.2 Hz", - "opt4": "1.59 kHz", - "correct_option": "15.92 Hz", - "correct_option_index": 1 - }, - { - "qsns": "Which type of circuit contains an inductor and a resistor?", - "opt1": "R-L circuit", - "opt2": "R-C circuit", - "opt3": "R-L-C circuit", - "opt4": "None of the above", - "correct_option": "R-L circuit", - "correct_option_index": 1 - }, - { - "qsns": "What is the time constant of an R-C circuit?", - "opt1": "R/C", - "opt2": "CR", - "opt3": "RC", - "opt4": "1/RC", - "correct_option": "R/C", - "correct_option_index": 1 - }, - { - "qsns": "What is the voltage across an inductor in an R-L circuit at steady state?", - "opt1": "Zero", - "opt2": "Infinite", - "opt3": "The same as the voltage across the resistor", - "opt4": "None of the above", - "correct_option": "Infinite", - "correct_option_index": 2 - }, - { - "qsns": "What happens to the current in an R-L circuit if the inductance is increased?", - "opt1": "The current decreases", - "opt2": "The current increases", - "opt3": "The current remains the same", - "opt4": "The current becomes erratic", - "correct_option": "The current remains the same", - "correct_option_index": 3 - }, - { - "qsns": "In an R-C circuit, what happens to the current as the capacitor becomes fully charged?", - "opt1": "The current increases", - "opt2": "The current decreases", - "opt3": "The current remains the same", - "opt4": "The current becomes zero", - "correct_option": "The current becomes zero", - "correct_option_index": 4 - }, - { - "qsns": "What is the resonance frequency of an R-L-C circuit?", - "opt1": "1/(2pisqrt(LC))", - "opt2": "2pisqrt(LC)", - "opt3": "1/(L*C)", - "opt4": "None of the above", - "correct_option": "2pisqrt(LC)", - "correct_option_index": 2 - }, - { - "qsns": "What happens to the impedance of an R-L-C circuit at resonance?", - "opt1": "The impedance is maximum", - "opt2": "The impedance is minimum", - "opt3": "The impedance is zero", - "opt4": "The impedance remains the same", - "correct_option": "The impedance is maximum", - "correct_option_index": 1 - }, - { - "qsns": "In an R-L-C circuit, what happens to the phase angle at resonance?", - "opt1": "The phase angle is zero", - "opt2": "The phase angle is 180 degrees", - "opt3": "The phase angle is 90 degrees", - "opt4": "The phase angle remains the same", - "correct_option": "The phase angle is zero", - "correct_option_index": 1 - }, - { - "qsns": "What is the resonant frequency of an AC series circuit consisting of a 20mH Inductor and a 10µF capacitor?", - "opt1": "159.15 Hz", - "opt2": "318.3 Hz", - "opt3": "500 Hz", - "opt4": "1000 Hz", - "correct_option": "159.15 Hz", - "correct_option_index": 1 - }, - { - "qsns": "What is the resonant frequency of an AC parallel circuit consisting of a 10mH inductor and a capacitor 100µF?", - "opt1": "318.3 Hz", - "opt2": "1000 Hz", - "opt3": "159.15 Hz", - "opt4": "159.15 Hz", - "correct_option": "159.15 Hz", - "correct_option_index": 4 - }, - { - "qsns": "What happens to the Impedance of an AC series resonant circuit at resonance?", - "opt1": "It is minimum", - "opt2": "It is maximum", - "opt3": "It is zero", - "opt4": "It is infinity", - "correct_option": "It is maximum", - "correct_option_index": 2 - }, - { - "qsns": "What happens to the current in an AC parallel resonant circuit at resonance?", - "opt1": "It is minimum", - "opt2": "It is maximum", - "opt3": "It is zero", - "opt4": "It is infinity", - "correct_option": "It is maximum", - "correct_option_index": 2 - }, - { - "qsns": "What is the power factor of an AC series resonant circuit at resonance?", - "opt1": "Unity", - "opt2": "Zero", - "opt3": "Negative", - "opt4": "Indeterminate", - "correct_option": "Zero", - "correct_option_index": 2 - }, - { - "qsns": "What is the power factor of an AC parallel resonant circuit at resonance?", - "opt1": "Unity", - "opt2": "Zero", - "opt3": "Negative", - "opt4": "Indeterminate", - "correct_option": "Zero", - "correct_option_index": 2 - }, - { - "qsns": "What is the phase angle between the voltage and current in an AC series resonant circuit at resonance?", - "opt1": "0 degrees", - "opt2": "45 degrees", - "opt3": "90 degrees", - "opt4": "180 degrees", - "correct_option": "0 degrees", - "correct_option_index": 1 - }, - { - "qsns": "What is the phase angle between the voltage and current in an AC parallel resonant circuit at resonance?", - "opt1": "0 degrees", - "opt2": "45 degrees", - "opt3": "90 degrees", - "opt4": "180 degrees", - "correct_option": "0 degrees", - "correct_option_index": 1 - }, - { - "qsns": "What happens to the voltage across the capacitor in an AC series resonant circuit at resonance?", - "opt1": "It is maximum", - "opt2": "It is minimum", - "opt3": "It is zero", - "opt4": "It is infinity", - "correct_option": "It is minimum", - "correct_option_index": 2 - }, - { - "qsns": "In an AC series resonant circuit, at the resonant frequency, what is the power factor?", - "opt1": "Zero", - "opt2": "Unity", - "opt3": "Inductive", - "opt4": "Capacitive", - "correct_option": "Unity", - "correct_option_index": 2 - }, - { - "qsns": "What is the resonant frequency of an AC series resonant circuit with an inductance of 5mH and a capacitance 10µF?", - "opt1": "3.18 kHz", - "opt2": "31.8 kHz", - "opt3": "318 kHz", - "opt4": "3.18 MHz", - "correct_option": "3.18 kHz", - "correct_option_index": 1 - }, - { - "qsns": "In an AC parallel resonant circuit, at the resonant frequency, what is the impedance?", - "opt1": "Zero", - "opt2": "Infinite", - "opt3": "Minimum", - "opt4": "Maximum", - "correct_option": "Minimum", - "correct_option_index": 3 - }, - { - "qsns": "What is the resonant frequency of an AC parallel resonant circuit with an inductance of 20mH and a capacitance of 5µF?", - "opt1": "3.57 kHz", - "opt2": "35.7 kHz", - "opt3": "357 kHz", - "opt4": "3.57 MHz", - "correct_option": "35.7 kHz", - "correct_option_index": 2 - }, - { - "qsns": "What is the phase relationship between the voltage across the capacitor and the voltage across the inductor in an AC series resonant circuit at resonance?", - "opt1": "They are in phase", - "opt2": "They are 180 degrees out of phase", - "opt3": "They cancel each other out", - "opt4": "None of the above", - "correct_option": "They are 180 degrees out of phase", - "correct_option_index": 2 - }, - { - "qsns": "What is the phase relationship between the current and the voltage in an AC series resonant circuit at resonance?", - "opt1": "They are in phase", - "opt2": "They are 180 degrees out of phase", - "opt3": "They cancel each other out", - "opt4": "None of the above", - "correct_option": "They are in phase", - "correct_option_index": 1 - }, - { - "qsns": "What is the unit of active power?", - "opt1": "Volt-amperes reactive (VAR)", - "opt2": "Watts (W)", - "opt3": "Volt-amperes (VA)", - "opt4": "None of the above", - "correct_option": "Watts (W)", - "correct_option_index": 2 - }, - { - "qsns": "What is the formula for reactive power?", - "opt1": "Q=V*I", - "opt2": "Q=V*I*cos(theta)", - "opt3": "Q=V*I*sin(theta)", - "opt4": "None of the above", - "correct_option": "Q=V*I*sin(theta)", - "correct_option_index": 3 - }, - { - "qsns": "What is the unit of reactive power?", - "opt1": "Volt-amperes reactive (VAR)", - "opt2": "Watts (W)", - "opt3": "Volt-amperes (VA)", - "opt4": "None of the above", - "correct_option": "Volt-amperes reactive (VAR)", - "correct_option_index": 1 - }, - { - "qsns": "What is the formula for active power?", - "opt1": "P=V^2I", - "opt2": "P=V*I*cos(theta)", - "opt3": "P=V*I*sin(theta)", - "opt4": "None of the above", - "correct_option": "P=V*I*cos(theta)", - "correct_option_index": 2 - }, - { - "qsns": "What is the unit of apparent power?", - "opt1": "Volt-amperes reactive (VAR)", - "opt2": "Watts (W)", - "opt3": "Volt-amperes (VA)", - "opt4": "None of the above", - "correct_option": "Volt-amperes (VA)", - "correct_option_index": 3 - }, - { - "qsns": "What is the formula for power factor?", - "opt1": "pf=Q/S", - "opt2": "pf=P/Q", - "opt3": "pf=P/S", - "opt4": "None of the above", - "correct_option": "pf=P/S", - "correct_option_index": 3 - }, - { - "qsns": "What is the unit of power factor?", - "opt1": "Volt-amperes reactive (VAR)", - "opt2": "Watts (W)", - "opt3": "Volt-amperes (VA)", - "opt4": "None of the above", - "correct_option": "None of the above", - "correct_option_index": 4 - }, - { - "qsns": "What is the relationship between active power and reactive power?", - "opt1": "They are the same thing", - "opt2": "Reactive power is always greater than active power", - "opt3": "Active power is always greater than reactive power", - "opt4": "They are two different types of power", - "correct_option": "They are the same thing", - "correct_option_index": 1 - }, - { - "qsns": "What is the formula for apparent power?", - "opt1": "S=V", - "opt2": "S=V*I*cos(theta)", - "opt3": "S=V^2I*sin(theta)", - "opt4": "None of the above", - "correct_option": "S=V", - "correct_option_index": 1 - }, - { - "qsns": "What is the significance of power factor in electrical circuits?", - "opt1": "It determines the maximum power that can be delivered to the circuit", - "opt2": "It measures the efficiency of the circuit in using the power delivered to it", - "opt3": "It is a measure of the resistance of the circuit", - "opt4": "None of the above", - "correct_option": "It measures the efficiency of the circuit in using the power delivered to it", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following is a measure of how efficiently the circuit is using the power delivered to it?", - "opt1": "Active power", - "opt2": "Reactive power", - "opt3": "Apparent power", - "opt4": "Power factor", - "correct_option": "Power factor", - "correct_option_index": 4 - }, - { - "qsns": "Which type of power is used in the circuit to perform useful work?", - "opt1": "Active power", - "opt2": "Reactive power", - "opt3": "Apparent power", - "opt4": "None of the above", - "correct_option": "Active power", - "correct_option_index": 1 - }, - { - "qsns": "Which type of power is stored and released by the circuit?", - "opt1": "Active power", - "opt2": "Reactive power", - "opt3": "Apparent power", - "opt4": "None of the above", - "correct_option": "Reactive power", - "correct_option_index": 2 - }, - { - "qsns": "What is the power factor of a circuit that has 100 W of active power and 120 VA of apparent power?", - "opt1": "0.83", - "opt2": "1.20", - "opt3": "0.20", - "opt4": "0.01", - "correct_option": "0.83", - "correct_option_index": 1 - }, - { - "qsns": "What happens to the power factor of a circuit if the reactive power increases?", - "opt1": "It increases", - "opt2": "It decreases", - "opt3": "It remains the same", - "opt4": "Cannot be determined", - "correct_option": "It decreases", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following is not a measure of power in an AC circuit?", - "opt1": "Volt-amperes reactive (VAR)", - "opt2": "Watts (W)", - "opt3": "Volt-amperes (VA)", - "opt4": "Hertz (Hz)", - "correct_option": "Hertz (Hz)", - "correct_option_index": 4 - }, - { - "qsns": "What is the maximum power transfer theorem?", - "opt1": "It states that the power transferred from a source to a load is maximum when the load impedance is equal to the source impedance.", - "opt2": "It states that the power transferred from a source to a load is maximum when the load impedance is greater than the source impedance.", - "opt3": "It states that the power transferred from a source to a load is maximum when the load impedance is less than the source impedance.", - "opt4": "None of the above.", - "correct_option": "It states that the power transferred from a source to a load is maximum when the load impedance is equal to the source impedance.", - "correct_option_index": 1 - }, - { - "qsns": "What type of circuits does the maximum power transfer theorem apply to?", - "opt1": "Linear circuits only.", - "opt2": "Non-linear circuits only.", - "opt3": "Both linear and non-linear circuits.", - "opt4": "None of the above.", - "correct_option": "Linear circuits only.", - "correct_option_index": 1 - }, - { - "qsns": "What is the advantage of applying the maximum power transfer theorem in a circuit?", - "opt1": "It reduces the power loss in the circuit.", - "opt2": "It increases the power loss in the circuit.", - "opt3": "It reduces the voltage and current in the circuit.", - "opt4": "None of the above.", - "correct_option": "It reduces the power loss in the circuit.", - "correct_option_index": 1 - }, - { - "qsns": "How does the maximum power transfer theorem help in designing power systems?", - "opt1": "It helps to optimize the power transfer in the system.", - "opt2": "It helps to increase the efficiency of the system.", - "opt3": "It helps to reduce the power loss in the system.", - "opt4": "All of the above.", - "correct_option": "All of the above.", - "correct_option_index": 4 - }, - { - "qsns": "What happens when the load impedance is not equal to the source impedance in a circuit?", - "opt1": "The power transfer is maximum.", - "opt2": "The power transfer is minimum.", - "opt3": "The power transfer is zero.", - "opt4": "None of the above.", - "correct_option": "The power transfer is minimum.", - "correct_option_index": 2 - }, - { - "qsns": "Is the maximum power transfer theorem applicable to AC circuits?", - "opt1": "Yes, it is applicable to AC circuits.", - "opt2": "No, it is applicable only to DC circuits.", - "opt3": "It depends on the type of load.", - "opt4": "None of the above.", - "correct_option": "Yes, it is applicable to AC circuits.", - "correct_option_index": 1 - }, - { - "qsns": "What is the formula for calculating the maximum power transfer in a circuit?", - "opt1": "P=V*2/R", - "opt2": "P=I^2R", - "opt3": "P=V^2/2R", - "opt4": "P=V^2/R+L", - "correct_option": "P=I^2R", - "correct_option_index": 2 - }, - { - "qsns": "Can the maximum power transfer occur at multiple values of load impedance?", - "opt1": "Yes, it can occur at multiple values of load impedance.", - "opt2": "No, it can occur at only one value of load impedance.", - "opt3": "It depends on the source impedance.", - "opt4": "None of the above.", - "correct_option": "No, it can occur at only one value of load impedance.", - "correct_option_index": 2 - }, - { - "qsns": "What is the condition for maximum power transfer in a circuit?", - "opt1": "The load impedance must be equal to the source impedance.", - "opt2": "The load impedance must be greater than the source impedance.", - "opt3": "The load impedance must be less than the source impedance.", - "opt4": "None of the above.", - "correct_option": "The load impedance must be equal to the source impedance.", - "correct_option_index": 1 - }, - { - "qsns": "What is the maximum efficiency that can be achieved in a circuit using the maximum power transfer theorem?", - "opt1": "100%", - "opt2": "50%", - "opt3": "25%", - "opt4": "It depends on the circuit.", - "correct_option": "50%", - "correct_option_index": 2 - }, - { - "qsns": "The maximum power transfer theorem is applicable to:", - "opt1": "Linear circuits only.", - "opt2": "Non-linear circuits only.", - "opt3": "Both linear and non-linear circuits.", - "opt4": "All of above", - "correct_option": "Linear circuits only.", - "correct_option_index": 1 - }, - { - "qsns": "The maximum power transfer occurs when:", - "opt1": "The load impedance is zero.", - "opt2": "The load impedance is equal to the source impedance", - "opt3": "The load impedance is infinite.", - "opt4": "When load impedance is double of source impedance", - "correct_option": "The load impedance is equal to the source impedance", - "correct_option_index": 2 - }, - { - "qsns": "What is the formula for calculating the maximum power transfer?", - "opt1": "Pmax=V*2", - "opt2": "Pmax=V^2 2", - "opt3": "Pmax=V^2/4R", - "opt4": "Pmax=V^2 2/(2R)", - "correct_option": "Pmax=V^2/4R", - "correct_option_index": 3 - }, - { - "qsns": "In which applications is the maximum power transfer theorem useful?", - "opt1": "Audio", - "opt2": "Power supplies", - "opt3": "Power transmission systems", - "opt4": "All of the above", - "correct_option": "All of the above", - "correct_option_index": 4 - }, - { - "qsns": "What happens when the load impedance is much larger than the source impedance?", - "opt1": "The power transfer is maximum", - "opt2": "The power transfer is minimum.", - "opt3": "The power transfer is zero", - "opt4": "None of above", - "correct_option": "The power transfer is minimum.", - "correct_option_index": 2 - }, - { - "qsns": "The maximum power transfer theorem helps to:", - "opt1": "Minimize the amount of energy lost in transmission.", - "opt2": "Maximize the amount of energy lost in transmission.", - "opt3": "Have no effect on the amount of energy lost in transmission.", - "opt4": "Helps to distribute energy evenly in transmission.", - "correct_option": "Minimize the amount of energy lost in transmission.", - "correct_option_index": 1 - }, - { - "qsns": "The maximum power transfer theorem is useful in designing and optimizing:", - "opt1": "Power systems", - "opt2": "Lighting systems", - "opt3": "Communication systems", - "opt4": "Both a and c", - "correct_option": "Power systems", - "correct_option_index": 1 - }, - { - "qsns": "What is the time constant of an R-C circuit consisting of a 1 kΩ resistor and a 100 nF capacitor?", - "opt1": "1 ms", - "opt2": "100 µs", - "opt3": "10 µs", - "opt4": "10 ms", - "correct_option": "100 µs", - "correct_option_index": 2 - }, - { - "qsns": "In an R-L circuit, the voltage across the Inductor lags behind the current by how many degrees?", - "opt1": "0°", - "opt2": "45°", - "opt3": "90°", - "opt4": "180°", - "correct_option": "90°", - "correct_option_index": 3 - }, - { - "qsns": "What is the resonant frequency of an R-L-C circuit with a 100 Ω resistor, 1 mH inductor, and a 100 nF capacitor?", - "opt1": "160 kHz", - "opt2": "16 kHz", - "opt3": "1.6 kHz", - "opt4": "1.6 MHz", - "correct_option": "16 kHz", - "correct_option_index": 2 - }, - { - "qsns": "In an R-L-C circuit, what happens to the Impedance at resonance?", - "opt1": "It is zero", - "opt2": "It is at a minimum", - "opt3": "It is at a maximum", - "opt4": "It is infinite", - "correct_option": "It is at a minimum", - "correct_option_index": 2 - }, - { - "qsns": "A series R-C circuit has a resistor of 100 Ω and a capacitor of 10 µF. What is the cutoff frequency?", - "opt1": "15.9 Hz", - "opt2": "159 Hz", - "opt3": "1.59 kHz", - "opt4": "1.59 Hz", - "correct_option": "159 Hz", - "correct_option_index": 2 - }, - { - "qsns": "In an R-L circuit, what happens to the impedance as the frequency increases?", - "opt1": "It increases", - "opt2": "It decreases", - "opt3": "It remains constant", - "opt4": "It oscillates", - "correct_option": "It increases", - "correct_option_index": 1 - }, - { - "qsns": "What is the phase angle between the voltage and current in an R-L-C circuit at resonance?", - "opt1": "0°", - "opt2": "45°", - "opt3": "90°", - "opt4": "180°", - "correct_option": "0°", - "correct_option_index": 1 - }, - { - "qsns": "What is the time constant of an R-L circuit consisting of a 100 Ω resistor and a 10 mH inductor?", - "opt1": "100 µs", - "opt2": "1 µs", - "opt3": "10 µs", - "opt4": "1 ms", - "correct_option": "100 µs", - "correct_option_index": 1 - }, - { - "qsns": "In an R-L-C circuit, what happens to the bandwidth as the quality factor increases?", - "opt1": "It increases", - "opt2": "It decreases", - "opt3": "It remains constant", - "opt4": "It oscillates", - "correct_option": "It decreases", - "correct_option_index": 2 - }, - { - "qsns": "A parallel R-C circuit has a resistor of 100 kΩ and a capacitor of 1 µF. What is the resonant frequency?", - "opt1": "15.92 Hz", - "opt2": "15.92 kHz", - "opt3": "159.2 Hz", - "opt4": "1.59 kHz", - "correct_option": "1.59 Hz", - "correct_option_index": 4 - }, - { - "qsns": "Which type of circuit contains an inductor and a resistor?", - "opt1": "R-L circuit", - "opt2": "R-C circuit", - "opt3": "R-L-C circuit", - "opt4": "None of the above", - "correct_option": "R-L circuit", - "correct_option_index": 1 - }, - { - "qsns": "What is the time constant of an R-C circuit?", - "opt1": "R/C", - "opt2": "CR", - "opt3": "RC", - "opt4": "1/RC", - "correct_option": "RC", - "correct_option_index": 3 - }, - { - "qsns": "What is the voltage across an inductor in an R-L circuit at steady state?", - "opt1": "Zero", - "opt2": "Infinite", - "opt3": "The same as the voltage across the resistor", - "opt4": "None of the above", - "correct_option": "Zero", - "correct_option_index": 1 - }, - { - "qsns": "What happens to the current in an R-L circuit if the inductance is increased?", - "opt1": "The current decreases", - "opt2": "The current increases", - "opt3": "The current remains the same", - "opt4": "The current becomes erratic", - "correct_option": "The current remains the same", - "correct_option_index": 3 - }, - { - "qsns": "In an R-C circuit, what happens to the current as the capacitor becomes fully charged?", - "opt1": "The current increases", - "opt2": "The current decreases", - "opt3": "The current remains the same", - "opt4": "The current becomes zero", - "correct_option": "The current becomes zero", - "correct_option_index": 4 - }, - { - "qsns": "What is the resonance frequency of an R-L-C circuit?", - "opt1": "1/(2pisqrt(LC))", - "opt2": "2pisqrt(LC)", - "opt3": "1/(L*C)", - "opt4": "None of the above", - "correct_option": "1/(2pisqrt(LC))", - "correct_option_index": 1 - }, - { - "qsns": "What happens to the impedance of an R-L-C circuit at resonance?", - "opt1": "The impedance is maximum", - "opt2": "The impedance is minimum", - "opt3": "The impedance is zero", - "opt4": "The impedance remains the same", - "correct_option": "The impedance is minimum", - "correct_option_index": 2 - }, - { - "qsns": "In an R-L-C circuit, what happens to the phase angle at resonance?", - "opt1": "The phase angle is zero", - "opt2": "The phase angle is 180 degrees", - "opt3": "The phase angle is 90 degrees", - "opt4": "The phase angle remains the same", - "correct_option": "The phase angle is zero", - "correct_option_index": 1 - }, - { - "qsns": "What is the resonant frequency of an AC series circuit consisting of a 20mH Inductor and a 10µF capacitor?", - "opt1": "159.15 Hz", - "opt2": "318.3 Hz", - "opt3": "500 Hz", - "opt4": "1000 Hz", - "correct_option": "159.15 Hz", - "correct_option_index": 1 - }, - { - "qsns": "What is the resonant frequency of an AC parallel circuit consisting of a 10mH inductor and a capacitor 100µF?", - "opt1": "318.3 Hz", - "opt2": "1000 Hz", - "opt3": "159.15 Hz", - "opt4": "159.15 Hz", - "correct_option": "159.15 Hz", - "correct_option_index": 4 - }, - { - "qsns": "What happens to the Impedance of an AC series resonant circuit at resonance?", - "opt1": "It is minimum", - "opt2": "It is maximum", - "opt3": "It is zero", - "opt4": "It is infinity", - "correct_option": "It is minimum", - "correct_option_index": 1 - }, - { - "qsns": "What happens to the current in an AC parallel resonant circuit at resonance?", - "opt1": "It is minimum", - "opt2": "It is maximum", - "opt3": "It is zero", - "opt4": "It is infinity", - "correct_option": "It is minimum", - "correct_option_index": 1 - }, - { - "qsns": "What is the power factor of an AC series resonant circuit at resonance?", - "opt1": "Unity", - "opt2": "Zero", - "opt3": "Negative", - "opt4": "Indeterminate", - "correct_option": "Unity", - "correct_option_index": 1 - }, - { - "qsns": "What is the power factor of an AC parallel resonant circuit at resonance?", - "opt1": "Unity", - "opt2": "Zero", - "opt3": "Negative", - "opt4": "Indeterminate", - "correct_option": "Unity", - "correct_option_index": 1 - }, - { - "qsns": "What is the phase angle between the voltage and current in an AC series resonant circuit at resonance?", - "opt1": "0 degrees", - "opt2": "45 degrees", - "opt3": "90 degrees", - "opt4": "180 degrees", - "correct_option": "0 degrees", - "correct_option_index": 1 - }, - { - "qsns": "What is the phase angle between the voltage and current in an AC parallel resonant circuit at resonance?", - "opt1": "0 degrees", - "opt2": "45 degrees", - "opt3": "90 degrees", - "opt4": "180 degrees", - "correct_option": "0 degrees", - "correct_option_index": 1 - }, - { - "qsns": "What happens to the voltage across the capacitor in an AC series resonant circuit at resonance?", - "opt1": "It is maximum", - "opt2": "It is minimum", - "opt3": "It is zero", - "opt4": "It is infinity", - "correct_option": "It is maximum", - "correct_option_index": 1 - }, - { - "qsns": "In an AC series resonant circuit, at the resonant frequency, what is the power factor?", - "opt1": "Zero", - "opt2": "Unity", - "opt3": "Inductive", - "opt4": "Capacitive", - "correct_option": "Unity", - "correct_option_index": 2 - }, - { - "qsns": "What is the resonant frequency of an AC series resonant circuit with an inductance of 5mH and a capacitance 10µF?", - "opt1": "3.18 kHz", - "opt2": "31.8 kHz", - "opt3": "318 kHz", - "opt4": "3.18 MHz", - "correct_option": "3.18 kHz", - "correct_option_index": 1 - }, - { - "qsns": "In an AC parallel resonant circuit, at the resonant frequency, what is the impedance?", - "opt1": "Zero", - "opt2": "Infinite", - "opt3": "Minimum", - "opt4": "Maximum", - "correct_option": "Maximum", - "correct_option_index": 4 - }, - { - "qsns": "What is the resonant frequency of an AC parallel resonant circuit with an inductance of 20mH and a capacitance of 5µF?", - "opt1": "3.57 kHz", - "opt2": "35.7 kHz", - "opt3": "357 kHz", - "opt4": "3.57 MHz", - "correct_option": "357 kHz", - "correct_option_index": 3 - }, - { - "qsns": "What is the phase relationship between the voltage across the capacitor and the voltage across the inductor in an AC series resonant circuit at resonance?", - "opt1": "They are in phase", - "opt2": "They are 180 degrees out of phase", - "opt3": "They cancel each other out", - "opt4": "None of the above", - "correct_option": "They are 180 degrees out of phase", - "correct_option_index": 2 - }, - { - "qsns": "What is the phase relationship between the current and the voltage in an AC series resonant circuit at resonance?", - "opt1": "They are in phase", - "opt2": "They are 180 degrees out of phase", - "opt3": "They cancel each other out", - "opt4": "None of the above", - "correct_option": "They are in phase", - "correct_option_index": 1 - }, - { - "qsns": "What is the unit of active power?", - "opt1": "Volt-amperes reactive (VAR)", - "opt2": "Watts (W)", - "opt3": "Volt-amperes (VA)", - "opt4": "None of the above", - "correct_option": "Watts (W)", - "correct_option_index": 2 - }, - { - "qsns": "What is the formula for reactive power?", - "opt1": "Q=V*I", - "opt2": "Q=V*I*cos(theta)", - "opt3": "Q=V*I*sin(theta)", - "opt4": "None of the above", - "correct_option": "Q=V*I*sin(theta)", - "correct_option_index": 3 - }, - { - "qsns": "What is the unit of reactive power?", - "opt1": "Volt-amperes reactive (VAR)", - "opt2": "Watts (W)", - "opt3": "Volt-amperes (VA)", - "opt4": "None of the above", - "correct_option": "Volt-amperes reactive (VAR)", - "correct_option_index": 1 - }, - { - "qsns": "What is the formula for active power?", - "opt1": "P=V^2I", - "opt2": "P=V*I*cos(theta)", - "opt3": "P=V*I*sin(theta)", - "opt4": "None of the above", - "correct_option": "P=V*I*cos(theta)", - "correct_option_index": 2 - }, - { - "qsns": "What is the unit of apparent power?", - "opt1": "Volt-amperes reactive (VAR)", - "opt2": "Watts (W)", - "opt3": "Volt-amperes (VA)", - "opt4": "None of the above", - "correct_option": "Volt-amperes (VA)", - "correct_option_index": 3 - }, - { - "qsns": "What is the formula for power factor?", - "opt1": "pf=Q/S", - "opt2": "pf=P/Q", - "opt3": "pf=P/S", - "opt4": "None of the above", - "correct_option": "pf=P/S", - "correct_option_index": 3 - }, - { - "qsns": "What is the unit of power factor?", - "opt1": "Volt-amperes reactive (VAR)", - "opt2": "Watts (W)", - "opt3": "Volt-amperes (VA)", - "opt4": "None of the above", - "correct_option": "None of the above", - "correct_option_index": 4 - }, - { - "qsns": "What is the relationship between active power and reactive power?", - "opt1": "They are the same thing", - "opt2": "Reactive power is always greater than active power", - "opt3": "Active power is always greater than reactive power", - "opt4": "They are two different types of power", - "correct_option": "They are two different types of power", - "correct_option_index": 4 - }, - { - "qsns": "What is the formula for apparent power?", - "opt1": "S=V", - "opt2": "S=V*I*cos(theta)", - "opt3": "S=V^2I*sin(theta)", - "opt4": "None of the above", - "correct_option": "S=V*I (Calculated)", - "correct_option_index": 1 - }, - { - "qsns": "What is the significance of power factor in electrical circuits?", - "opt1": "It determines the maximum power that can be delivered to the circuit", - "opt2": "It measures the efficiency of the circuit in using the power delivered to it", - "opt3": "It is a measure of the resistance of the circuit", - "opt4": "None of the above", - "correct_option": "It measures the efficiency of the circuit in using the power delivered to it", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following is a measure of how efficiently the circuit is using the power delivered to it?", - "opt1": "Active power", - "opt2": "Reactive power", - "opt3": "Apparent power", - "opt4": "Power factor", - "correct_option": "Power factor", - "correct_option_index": 4 - }, - { - "qsns": "Which type of power is used in the circuit to perform useful work?", - "opt1": "Active power", - "opt2": "Reactive power", - "opt3": "Apparent power", - "opt4": "None of the above", - "correct_option": "Active power", - "correct_option_index": 1 - }, - { - "qsns": "Which type of power is stored and released by the circuit?", - "opt1": "Active power", - "opt2": "Reactive power", - "opt3": "Apparent power", - "opt4": "None of the above", - "correct_option": "Reactive power", - "correct_option_index": 2 - }, - { - "qsns": "What is the power factor of a circuit that has 100 W of active power and 120 VA of apparent power?", - "opt1": "0.83", - "opt2": "1.20", - "opt3": "0.20", - "opt4": "0.01", - "correct_option": "0.83", - "correct_option_index": 1 - }, - { - "qsns": "What happens to the power factor of a circuit if the reactive power increases?", - "opt1": "It increases", - "opt2": "It decreases", - "opt3": "It remains the same", - "opt4": "Cannot be determined", - "correct_option": "It decreases", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following is not a measure of power in an AC circuit?", - "opt1": "Volt-amperes reactive (VAR)", - "opt2": "Watts (W)", - "opt3": "Volt-amperes (VA)", - "opt4": "Hertz (Hz)", - "correct_option": "Hertz (Hz)", - "correct_option_index": 4 - }, - { - "qsns": "Which BJT configuration has unity voltage gain?", - "opt1": "Common Emitter", - "opt2": "Common Base", - "opt3": "Common Collector", - "opt4": "Both A and B", - "correct_option": "Common Collector", - "correct_option_index": 3 - }, - { - "qsns": "Which biasing technique uses a fixed DC voltage applied to the base terminal with respect to the emitter terminal?", - "opt1": "Fixed Bias", - "opt2": "Self-Bias", - "opt3": "Both A and B", - "opt4": "None of above", - "correct_option": "Fixed Bias", - "correct_option_index": 1 - }, - { - "qsns": "Which biasing technique uses a resistor in series with the base-emitter junction for negative feedback?", - "opt1": "Fixed Bias", - "opt2": "Self-Bias", - "opt3": "Both A and B", - "opt4": "None of above", - "correct_option": "Self-Bias", - "correct_option_index": 2 - }, - { - "qsns": "Which BJT configuration has low voltage gain and high current gain?", - "opt1": "Common Emitter", - "opt2": "Common Base", - "opt3": "Common Collector", - "opt4": "Both A and B", - "correct_option": "Common Collector", - "correct_option_index": 3 - }, - { - "qsns": "In which BJT configuration is the collector terminal common to both input and output circuits?", - "opt1": "Common Emitter", - "opt2": "Common Base", - "opt3": "Common Collector", - "opt4": "Both b and c", - "correct_option": "Common Collector", - "correct_option_index": 3 - }, - { - "qsns": "Which biasing technique is stable with changes in temperature and transistor parameters?", - "opt1": "Fixed Bias", - "opt2": "Self-Bias", - "opt3": "Both A and B", - "opt4": "None of above", - "correct_option": "Self-Bias", - "correct_option_index": 2 - }, - { - "qsns": "Which BJT configuration is commonly used in voltage amplifier circuits?", - "opt1": "Common Emitter", - "opt2": "Common Base", - "opt3": "Common Collector", - "opt4": "Both A and B", - "correct_option": "Common Emitter", - "correct_option_index": 1 - }, - { - "qsns": "In which BJT configuration is the base terminal common to both input and output circuits?", - "opt1": "Common Emitter", - "opt2": "Common Base", - "opt3": "Common Collector", - "opt4": "Both A and B", - "correct_option": "Common Base", - "correct_option_index": 2 - }, - { - "qsns": "Which model is used to analyze a circuit's behavior when a small AC signal is applied?", - "opt1": "Large Signal Model", - "opt2": "Small Signal Model", - "opt3": "Both A and B", - "opt4": "None of above", - "correct_option": "Small Signal Model", - "correct_option_index": 2 - }, - { - "qsns": "Which model is used to analyze a circuit's behavior when a large DC signal is applied?", - "opt1": "Large Signal Model", - "opt2": "Small Signal Model", - "opt3": "Both A and B", - "opt4": "None of above", - "correct_option": "Large Signal Model", - "correct_option_index": 1 - }, - { - "qsns": "Which model uses linear circuit analysis techniques such as superposition, Thevenin's theorem, and Norton's theorem?", - "opt1": "Large Signal Model", - "opt2": "Small Signal Model", - "opt3": "Both A and B", - "opt4": "None of above", - "correct_option": "Small Signal Model", - "correct_option_index": 2 - }, - { - "qsns": "Which model uses nonlinear circuit analysis techniques such as load-line analysis and graphical analysis?", - "opt1": "Large Signal Model", - "opt2": "Small Signal Model", - "opt3": "Both A and B", - "opt4": "None of above", - "correct_option": "Large Signal Model", - "correct_option_index": 1 - }, - { - "qsns": "Which model represents the transistor as a voltage-controlled current source?", - "opt1": "Large Signal Model", - "opt2": "Small Signal Model", - "opt3": "Both A and B", - "opt4": "None of above", - "correct_option": "Small Signal Model", - "correct_option_index": 2 - }, - { - "qsns": "Which model includes the effects of the nonlinear components such as diodes, transistors, and operational amplifiers?", - "opt1": "Large Signal Model", - "opt2": "Small Signal Model", - "opt3": "Both A and B", - "opt4": "None of above", - "correct_option": "Large Signal Model", - "correct_option_index": 1 - }, - { - "qsns": "Which model is used to analyze switching circuits?", - "opt1": "Large Signal Model of BJT", - "opt2": "Small Signal Model of BJT", - "opt3": "Both A and B", - "opt4": "None of above", - "correct_option": "Large Signal Model of BJT", - "correct_option_index": 1 - }, - { - "qsns": "Which model is used to design and analyze amplifier circuits?", - "opt1": "Large Signal Model of BJT", - "opt2": "Small Signal Model of BJT", - "opt3": "Both A and B", - "opt4": "None of above", - "correct_option": "Small Signal Model of BJT", - "correct_option_index": 2 - }, - { - "qsns": "Which model uses the transistor parameters such as hfe, hie, and hoe to calculate the voltage gain and current gain of the circuit?", - "opt1": "Large Signal Model of BJT", - "opt2": "Small Signal Model of BJT", - "opt3": "Both A and B", - "opt4": "None of above", - "correct_option": "Small Signal Model of BJT", - "correct_option_index": 2 - }, - { - "qsns": "Which model uses the transistor parameters such as saturation voltage, Vce(sat), and cut-off voltage, Vce(cut-off) to analyze the circuit's behavior?", - "opt1": "Large Signal Model of BJT", - "opt2": "Small Signal Model of BJT", - "opt3": "Both A and B", - "opt4": "None of above", - "correct_option": "Large Signal Model of BJT", - "correct_option_index": 1 - }, - { - "qsns": "What does MOSFET stand for?", - "opt1": "Metal-Oxide-Semiconductor Field-Effect Transistor", - "opt2": "Magnetic-Oscillation-Silicon Field-Effect Transistor", - "opt3": "Multi-Oscillator-Silicon Field-Effect Transistor", - "opt4": "None of above", - "correct_option": "Metal-Oxide-Semiconductor Field-Effect Transistor", - "correct_option_index": 1 - }, - { - "qsns": "In which region of operation does the MOSFET act as a voltage-controlled resistor?", - "opt1": "Cut-off region", - "opt2": "Saturation region", - "opt3": "Triode region", - "opt4": "None of above", - "correct_option": "Triode region", - "correct_option_index": 3 - }, - { - "qsns": "What is the threshold voltage of a MOSFET?", - "opt1": "The voltage required to turn on the MOSFET", - "opt2": "The voltage required to turn off the MOSFET", - "opt3": "The voltage at which the MOSFET conducts maximum current", - "opt4": "The voltage at which the MOSFET conducts minimum current", - "correct_option": "The voltage required to turn on the MOSFET", - "correct_option_index": 1 - }, - { - "qsns": "Which type of MOSFET has a lower on-resistance and higher switching speed?", - "opt1": "Enhancement-mode MOSFET", - "opt2": "Depletion-mode MOSFET", - "opt3": "Both have the same characteristics", - "opt4": "None of above", - "correct_option": "Enhancement-mode MOSFET", - "correct_option_index": 1 - }, - { - "qsns": "What is the full form of CMOS?", - "opt1": "Complementary Metal-Oxide-Semiconductor", - "opt2": "Complex Metal-Oxide-Semiconductor", - "opt3": "Complementary Magnetic-Oscillation-Semiconductor", - "opt4": "Complementary Magnetic Oxide Semiconductor", - "correct_option": "Complementary Metal-Oxide-Semiconductor", - "correct_option_index": 1 - }, - { - "qsns": "Which logic family uses CMOS technology?", - "opt1": "TTL", - "opt2": "ECL", - "opt3": "CMOS", - "opt4": "All of above", - "correct_option": "CMOS", - "correct_option_index": 3 - }, - { - "qsns": "Which type of logic gate is used to implement the CMOS circuit?", - "opt1": "NAND gate", - "opt2": "NOR gate", - "opt3": "Both NAND and NOR gates", - "opt4": "None of above", - "correct_option": "Both NAND and NOR gates", - "correct_option_index": 3 - }, - { - "qsns": "What is the main advantage of CMOS technology over other logic families?", - "opt1": "Low power consumption", - "opt2": "High speed", - "opt3": "Low cost", - "opt4": "All of above", - "correct_option": "Low power consumption", - "correct_option_index": 1 - }, - { - "qsns": "Which type of MOSFET is more commonly used in digital logic circuits?", - "opt1": "N-channel MOSFET", - "opt2": "P-channel MOSFET", - "opt3": "Both A and B are equally used", - "opt4": "None of above", - "correct_option": "N-channel MOSFET", - "correct_option_index": 1 - }, - { - "qsns": "Which application of MOSFET is used in power electronics?", - "opt1": "Switching", - "opt2": "Amplification", - "opt3": "Oscillation", - "opt4": "All of above", - "correct_option": "Switching", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following describes the working principle of a MOSFET?", - "opt1": "A voltage applied to the gate terminal creates an electric field that controls the current flow through the channel between the source and drain terminals.", - "opt2": "The current flow through the channel between the source and drain terminals controls the voltage applied to the gate terminal.", - "opt3": "The current flow through the channel between the source and drain terminals is independent of the voltage applied to the gate terminal.", - "opt4": "None of above", - "correct_option": "A voltage applied to the gate terminal creates an electric field that controls the current flow through the channel between the source and drain terminals.", - "correct_option_index": 1 - }, - { - "qsns": "What is the basic building block of a CMOS circuit?", - "opt1": "Bipolar Junction Transistor (BJT)", - "opt2": "Field Effect Transistor (FET)", - "opt3": "Both A and B", - "opt4": "None of above", - "correct_option": "Field Effect Transistor (FET)", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following describes the working principle of a CMOS circuit?", - "opt1": "The output is a function of the input voltage and the current flowing through the transistor.", - "opt2": "The output is a function of the input voltage and the voltage level at the gate of the transistor.", - "opt3": "The output is a function of the input voltage and the logic level of the transistor", - "opt4": "None of above", - "correct_option": "The output is a function of the input voltage and the voltage level at the gate of the transistor.", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following statements is true about MOSFETs?", - "opt1": "They have a high input impedance and a low output impedance.", - "opt2": "They have a low input impedance and a high output impedance.", - "opt3": "They have both high input and output impedances.", - "opt4": "All of above", - "correct_option": "They have a high input impedance and a low output impedance.", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following describes the typical applications of MOSFETs?", - "opt1": "Digital logic circuits and memory devices", - "opt2": "Power amplifiers and switching circuits", - "opt3": "Power switching and amplification", - "opt4": "Both A and B", - "correct_option": "Both A and B", - "correct_option_index": 4 - }, - { - "qsns": "Which of the following is an advantage of CMOS technology?", - "opt1": "Low power consumption", - "opt2": "High speed operation", - "opt3": "High gain", - "opt4": "All of above", - "correct_option": "Low power consumption", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following statements is true about CMOS circuits?", - "opt1": "They are sensitive to noise and interference.", - "opt2": "They have a higher power consumption compared to other technologies.", - "opt3": "They are immune to noise and interference and have low power consumption.", - "opt4": "None of above", - "correct_option": "They are immune to noise and interference and have low power consumption.", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following describes the typical applications of CMOS circuits?", - "opt1": "Microprocessors and digital logic circuits", - "opt2": "Power amplifiers and switching circuits", - "opt3": "Both A and B", - "opt4": "None of above", - "correct_option": "Microprocessors and digital logic circuits", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following statements is true about MOSFETs and CMOS circuits?", - "opt1": "MOSFETs are more suitable for digital logic circuits, while CMOS circuits are more suitable for power switching applications.", - "opt2": "Both MOSFETs and CMOS circuits can be used for power switching and digital logic circuits.", - "opt3": "MOSFETs are more suitable for power switching applications, while CMOS circuits are more suitable for digital logic circuits.", - "opt4": "None of above", - "correct_option": "MOSFETs are more suitable for power switching applications, while CMOS circuits are more suitable for digital logic circuits.", - "correct_option_index": 3 - }, - { - "qsns": "Which type of oscillator uses a resistor and capacitor in a feedback circuit?", - "opt1": "RC oscillator", - "opt2": "LC oscillator", - "opt3": "Crystal oscillator", - "opt4": "None of the above", - "correct_option": "RC oscillator", - "correct_option_index": 1 - }, - { - "qsns": "What determines the frequency of an RC oscillator?", - "opt1": "The time constant of the RC circuit", - "opt2": "The resonant frequency of the tank circuit", - "opt3": "The inductance of a coil", - "opt4": "The capacitance of a capacitor", - "correct_option": "The time constant of the RC circuit", - "correct_option_index": 1 - }, - { - "qsns": "Which type of oscillator uses an inductor and capacitor in a feedback circuit?", - "opt1": "RC oscillator", - "opt2": "LC oscillator", - "opt3": "Crystal oscillator", - "opt4": "None of the above", - "correct_option": "LC oscillator", - "correct_option_index": 2 - }, - { - "qsns": "What determines the frequency of an LC oscillator?", - "opt1": "The time constant of an RC circuit", - "opt2": "The resonant frequency of a tank circuit", - "opt3": "The inductance of a coil", - "opt4": "The capacitance of a capacitor", - "correct_option": "The resonant frequency of a tank circuit", - "correct_option_index": 2 - }, - { - "qsns": "Which type of oscillator uses a quartz crystal as the resonant element in the feedback circuit?", - "opt1": "RC oscillator", - "opt2": "LC oscillator", - "opt3": "Crystal oscillator", - "opt4": "None of the above", - "correct_option": "Crystal oscillator", - "correct_option_index": 3 - }, - { - "qsns": "What is the primary advantage of using a crystal oscillator?", - "opt1": "Low cost", - "opt2": "Simplicity", - "opt3": "High frequency stability and accuracy", - "opt4": "Low power consumption", - "correct_option": "High frequency stability and accuracy", - "correct_option_index": 3 - }, - { - "qsns": "What is the role of the feedback circuit in an oscillator?", - "opt1": "To amplify the input signal", - "opt2": "To filter out unwanted frequencies", - "opt3": "To provide positive feedback to sustain oscillations", - "opt4": "To provide negative feedback to stabilize the oscillations", - "correct_option": "To provide positive feedback to sustain oscillations", - "correct_option_index": 3 - }, - { - "qsns": "Which type of oscillator is commonly used in digital circuits?", - "opt1": "RC oscillator", - "opt2": "LC oscillator", - "opt3": "Crystal oscillator", - "opt4": "Square wave generator", - "correct_option": "Crystal oscillator", - "correct_option_index": 3 - }, - { - "qsns": "Which type of oscillator is typically the most complex and expensive?", - "opt1": "RC oscillator", - "opt2": "LC oscillator", - "opt3": "Crystal oscillator", - "opt4": "None of the above", - "correct_option": "Crystal oscillator", - "correct_option_index": 3 - }, - { - "qsns": "What is the purpose of the resonant circuit in an oscillator?", - "opt1": "To amplify the input signal", - "opt2": "To filter out unwanted frequencies", - "opt3": "To provide positive feedback to sustain oscillations", - "opt4": "To provide negative feedback to stabilize the oscillations", - "correct_option": "To provide positive feedback to sustain oscillations", - "correct_option_index": 3 - }, - { - "qsns": "What is an RC oscillator?", - "opt1": "An oscillator that uses a resistor and capacitor in a feedback circuit", - "opt2": "An oscillator that uses an inductor and capacitor in a feedback circuit", - "opt3": "An oscillator that uses a quartz crystal in a feedback circuit", - "opt4": "An oscillator that uses a diode in a feedback circuit", - "correct_option": "An oscillator that uses a resistor and capacitor in a feedback circuit", - "correct_option_index": 1 - }, - { - "qsns": "What determines the frequency of an RC oscillator?", - "opt1": "The time constant of the RC circuit", - "opt2": "The resonant frequency of the tank circuit", - "opt3": "The frequency of the crystal", - "opt4": "The input voltage of the oscillator", - "correct_option": "The time constant of the RC circuit", - "correct_option_index": 1 - }, - { - "qsns": "What is the advantage of using an LC oscillator over an RC oscillator?", - "opt1": "Greater simplicity and lower cost", - "opt2": "Higher frequency stability and accuracy", - "opt3": "Higher power output", - "opt4": "Greater frequency range", - "correct_option": "Higher frequency stability and accuracy", - "correct_option_index": 2 - }, - { - "qsns": "What is a tank circuit in an LC oscillator?", - "opt1": "A circuit that filters out unwanted frequencies", - "opt2": "A circuit that amplifies the input signal", - "opt3": "A circuit that provides positive feedback", - "opt4": "A circuit that consists of an inductor and capacitor in a feedback circuit", - "correct_option": "A circuit that consists of an inductor and capacitor in a feedback circuit", - "correct_option_index": 4 - }, - { - "qsns": "What is the resonant frequency of a crystal oscillator determined by?", - "opt1": "The time constant of the RC circuit", - "opt2": "The resonant frequency of the tank circuit", - "opt3": "The frequency of the crystal", - "opt4": "The input voltage of the oscillator", - "correct_option": "The frequency of the crystal", - "correct_option_index": 3 - }, - { - "qsns": "What is the advantage of using a crystal oscillator over an LC oscillator?", - "opt1": "Greater simplicity and lower cost", - "opt2": "Higher frequency stability and accuracy", - "opt3": "Higher power output", - "opt4": "Greater frequency range", - "correct_option": "Higher frequency stability and accuracy", - "correct_option_index": 2 - }, - { - "qsns": "Which type of oscillator is typically used in clocks and digital circuits?", - "opt1": "RC oscillator", - "opt2": "LC oscillator", - "opt3": "Crystal oscillator", - "opt4": "Relaxation oscillator", - "correct_option": "Crystal oscillator", - "correct_option_index": 3 - }, - { - "qsns": "What is the purpose of positive feedback in an oscillator?", - "opt1": "To amplify the input signal", - "opt2": "To provide a frequency-selective response", - "opt3": "To sustain oscillations", - "opt4": "To filter out unwanted frequencies", - "correct_option": "To sustain oscillations", - "correct_option_index": 3 - }, - { - "qsns": "What is the role of the resonant circuit in an oscillator?", - "opt1": "To provide positive feedback", - "opt2": "To amplify the input signal", - "opt3": "To filter out unwanted frequencies", - "opt4": "To provide a frequency-selective response", - "correct_option": "To provide a frequency-selective response", - "correct_option_index": 4 - }, - { - "qsns": "What is the advantage of using a high-Q resonant circuit in an oscillator?", - "opt1": "Greater simplicity and lower cost", - "opt2": "Higher frequency stability and accuracy", - "opt3": "Higher power output", - "opt4": "Greater frequency range", - "correct_option": "Higher frequency stability and accuracy", - "correct_option_index": 2 - }, - { - "qsns": "What is the duty cycle of a square wave generator?", - "opt1": "The time period of the waveform", - "opt2": "The ratio of the pulse width to the time period", - "opt3": "The amplitude of the waveform", - "opt4": "The frequency of the waveform", - "correct_option": "The ratio of the pulse width to the time period", - "correct_option_index": 2 - }, - { - "qsns": "What type of waveform is produced by a triangle wave generator?", - "opt1": "A waveform with constant amplitude and frequency", - "opt2": "A waveform with a linearly increasing or decreasing amplitude", - "opt3": "A waveform with a constant frequency and varying amplitude", - "opt4": "A waveform with random fluctuations in amplitude and frequency", - "correct_option": "A waveform with a linearly increasing or decreasing amplitude", - "correct_option_index": 2 - }, - { - "qsns": "What type of circuit is commonly used to generate square wave signals?", - "opt1": "An op-amp circuit", - "opt2": "A transistor circuit", - "opt3": "A flip-flop circuit", - "opt4": "A filter circuit", - "correct_option": "An op-amp circuit", - "correct_option_index": 1 - }, - { - "qsns": "What is the advantage of using a relaxation oscillator for square wave generation?", - "opt1": "Simplicity and low cost", - "opt2": "High frequency stability and accuracy", - "opt3": "High power output", - "opt4": "Greater frequency range", - "correct_option": "Simplicity and low cost", - "correct_option_index": 1 - }, - { - "qsns": "What is the role of a Schmitt trigger in a square wave generator circuit?", - "opt1": "To generate a clean and stable square wave signal", - "opt2": "To provide frequency-selective response", - "opt3": "To amplify the input signal", - "opt4": "To filter out unwanted frequencies", - "correct_option": "To generate a clean and stable square wave signal", - "correct_option_index": 1 - }, - { - "qsns": "What is the frequency of a triangle wave generator determined by?", - "opt1": "The time constant of the RC circuit", - "opt2": "The resonant frequency of the tank circuit", - "opt3": "The frequency of the crystal", - "opt4": "The input voltage of the oscillator", - "correct_option": "The time constant of the RC circuit", - "correct_option_index": 1 - }, - { - "qsns": "What is the advantage of using a ramp generator for triangle wave generation?", - "opt1": "Simplicity and low cost", - "opt2": "High frequency stability and accuracy", - "opt3": "High power output", - "opt4": "Greater frequency range", - "correct_option": "Simplicity and low cost", - "correct_option_index": 1 - }, - { - "qsns": "What type of circuit is commonly used to generate triangle wave signals?", - "opt1": "An op-amp circuit", - "opt2": "An integrator circuit", - "opt3": "A flip-flop circuit", - "opt4": "A transistor circuit", - "correct_option": "An integrator circuit", - "correct_option_index": 2 - }, - { - "qsns": "What is the amplitude of a triangle wave generator determined by?", - "opt1": "The time constant of the RC circuit", - "opt2": "The resonant frequency of the tank circuit", - "opt3": "The frequency of the crystal", - "opt4": "The input voltage of the oscillator", - "correct_option": "The input voltage of the oscillator", - "correct_option_index": 4 - }, - { - "qsns": "What is the advantage of using an op-amp circuit for triangle wave generation?", - "opt1": "Simplicity and low cost", - "opt2": "High frequency stability and accuracy", - "opt3": "High power output", - "opt4": "Greater frequency range", - "correct_option": "Simplicity and low cost", - "correct_option_index": 1 - }, - { - "qsns": "Which waveform generator is typically used for testing digital circuits?", - "opt1": "Sine wave generator", - "opt2": "Square wave generator", - "opt3": "Triangle wave generator", - "opt4": "Sawtooth wave generator", - "correct_option": "Square wave generator", - "correct_option_index": 2 - }, - { - "qsns": "What is the duty cycle of a square wave?", - "opt1": "The time period of the wave", - "opt2": "The ratio of the pulse width to the time period", - "opt3": "The frequency of the wave", - "opt4": "The amplitude of the wave", - "correct_option": "The ratio of the pulse width to the time period", - "correct_option_index": 2 - }, - { - "qsns": "What is the advantage of using a square wave generator over other types of waveform generators?", - "opt1": "Simplicity and low cost", - "opt2": "High frequency stability and accuracy", - "opt3": "High power output", - "opt4": "Wide range of frequency and waveform options", - "correct_option": "Simplicity and low cost", - "correct_option_index": 1 - }, - { - "qsns": "Which waveform generator is capable of producing more complex waveforms than a square wave generator?", - "opt1": "Sine wave generator", - "opt2": "Triangle wave generator", - "opt3": "Sawtooth wave generator", - "opt4": "Arbitrary waveform generator", - "correct_option": "Arbitrary waveform generator", - "correct_option_index": 4 - }, - { - "qsns": "What is the shape of the waveform produced by a triangle wave generator?", - "opt1": "A series of pulses with a constant amplitude", - "opt2": "A smoothly varying waveform with a linear rise and fall", - "opt3": "A waveform with a rapidly changing rise and a slow fall", - "opt4": "A waveform with a rapidly changing fall and a slow rise", - "correct_option": "A smoothly varying waveform with a linear rise and fall", - "correct_option_index": 2 - }, - { - "qsns": "What is the frequency of a triangle wave generator determined by?", - "opt1": "The time period of the waveform", - "opt2": "The amplitude of the waveform", - "opt3": "The duty cycle of the waveform", - "opt4": "The slope of the waveform", - "correct_option": "The slope of the waveform", - "correct_option_index": 4 - }, - { - "qsns": "What is the advantage of using a triangle wave generator over a square wave generator?", - "opt1": "Greater simplicity and lower cost", - "opt2": "Higher frequency stability and accuracy", - "opt3": "Higher power output", - "opt4": "More gradual transitions and reduced harmonic content", - "correct_option": "More gradual transitions and reduced harmonic content", - "correct_option_index": 4 - }, - { - "qsns": "Which type of waveform generator is commonly used in audio applications?", - "opt1": "Sine wave generator", - "opt2": "Square wave generator", - "opt3": "Triangle wave generator", - "opt4": "Sawtooth wave generator", - "correct_option": "Sine wave generator", - "correct_option_index": 1 - }, - { - "qsns": "What is the shape of the waveform produced by a sawtooth wave generator?", - "opt1": "A series of pulses with a constant amplitude", - "opt2": "A smoothly varying waveform with a linear rise and fall", - "opt3": "A waveform with a rapidly changing rise and a slow fall", - "opt4": "A waveform with a rapidly changing fall and a slow rise", - "correct_option": "A waveform with a rapidly changing rise and a slow fall", - "correct_option_index": 3 - }, - { - "qsns": "What is the advantage of using an arbitrary waveform generator over other types of waveform generators?", - "opt1": "Greater simplicity and lower cost", - "opt2": "Higher frequency stability and accuracy", - "opt3": "Higher power output", - "opt4": "The ability to generate complex and customized waveforms", - "correct_option": "The ability to generate complex and customized waveforms", - "correct_option_index": 4 - }, - { - "qsns": "What is the amplifying element used in a Class A output stage?", - "opt1": "Bipolar Junction Transistor", - "opt2": "Field-Effect Transistor", - "opt3": "Operational Amplifier", - "opt4": "Vacuum Tube", - "correct_option": "Bipolar Junction Transistor", - "correct_option_index": 1 - }, - { - "qsns": "What causes crossover distortion in a Class B output stage?", - "opt1": "The amplifying element conducts for the entire input signal cycle", - "opt2": "The amplifying element is biased so that it conducts for less than half of the input signal cycle", - "opt3": "Two amplifying elements are used and each one conducts for half of the input signal cycle", - "opt4": "The switching between the amplifying elements causes a gap in the output signal.", - "correct_option": "The switching between the amplifying elements causes a gap in the output signal.", - "correct_option_index": 4 - }, - { - "qsns": "What is the advantage of a Class AB output stage over a Class B output stage?", - "opt1": "Higher efficiency", - "opt2": "Lower distortion", - "opt3": "Reduced crossover distortion", - "opt4": "Lower cost", - "correct_option": "Reduced crossover distortion", - "correct_option_index": 3 - }, - { - "qsns": "What is the operating mode of a Class C output stage?", - "opt1": "Linear", - "opt2": "Non-linear", - "opt3": "Saturated", - "opt4": "Reverse biased", - "correct_option": "Non-linear", - "correct_option_index": 2 - }, - { - "qsns": "What is the advantage of a Class D output stage over other output stages?", - "opt1": "Low distortion", - "opt2": "High linearity", - "opt3": "High efficiency", - "opt4": "Low switching noise", - "correct_option": "High efficiency", - "correct_option_index": 3 - }, - { - "qsns": "What is the primary disadvantage of a Class A output stage?", - "opt1": "High distortion", - "opt2": "Low efficiency", - "opt3": "High switching noise", - "opt4": "High cost", - "correct_option": "Low efficiency", - "correct_option_index": 2 - }, - { - "qsns": "Which type of output stage is suitable for RF amplifiers?", - "opt1": "Class A", - "opt2": "Class B", - "opt3": "Class AB", - "opt4": "Class C", - "correct_option": "Class C", - "correct_option_index": 4 - }, - { - "qsns": "What is the biasing arrangement used in a Class AB output stage?", - "opt1": "The amplifying element is biased to conduct for the entire input signal cycle.", - "opt2": "The amplifying element is biased to conduct for less than half of the input signal cycle.", - "opt3": "The bias voltage is varied to adjust the conduction angle.", - "opt4": "Two amplifying elements are used and each one conducts for half of the input signal cycle.", - "correct_option": "The bias voltage is varied to adjust the conduction angle.", - "correct_option_index": 3 - }, - { - "qsns": "Which type of output stage is used in audio power amplifiers?", - "opt1": "Class A", - "opt2": "Class B", - "opt3": "Class AB", - "opt4": "Class C", - "correct_option": "Class AB", - "correct_option_index": 3 - }, - { - "qsns": "Which type of output stage is commonly used in switch-mode power supplies?", - "opt1": "Class A", - "opt2": "Class B", - "opt3": "Class AB", - "opt4": "Class D", - "correct_option": "Class D", - "correct_option_index": 4 - }, - { - "qsns": "Which of the following is a characteristic of a class A output stage?", - "opt1": "High efficiency", - "opt2": "Low distortion", - "opt3": "Crossover distortion", - "opt4": "Conducts for less than half of the input signal cycle", - "correct_option": "Low distortion", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following output stages uses two amplifying elements that conduct for half of the input signal cycle each?", - "opt1": "Class A", - "opt2": "Class B", - "opt3": "Class C", - "opt4": "Class AB", - "correct_option": "Class B", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following output stages is a combination of class A and class B?", - "opt1": "Class A", - "opt2": "Class B", - "opt3": "Class AB", - "opt4": "Class C", - "correct_option": "Class AB", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following output stages is suitable for RF amplifiers?", - "opt1": "Class A", - "opt2": "Class B", - "opt3": "Class AB", - "opt4": "Class C", - "correct_option": "Class C", - "correct_option_index": 4 - }, - { - "qsns": "Which of the following output stages uses pulse width modulation to convert the input signal into a train of pulses?", - "opt1": "Class A", - "opt2": "Class B", - "opt3": "Class C", - "opt4": "Class D", - "correct_option": "Class D", - "correct_option_index": 4 - }, - { - "qsns": "Which of the following is a disadvantage of a class B output stage?", - "opt1": "Low distortion", - "opt2": "High efficiency", - "opt3": "Crossover distortion", - "opt4": "Conducts for the entire input signal cycle", - "correct_option": "Crossover distortion", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following output stages is the most efficient?", - "opt1": "Class A", - "opt2": "Class B", - "opt3": "Class AB", - "opt4": "Class C", - "correct_option": "Class C", - "correct_option_index": 4 - }, - { - "qsns": "Which of the following output stages is the least efficient?", - "opt1": "Class A", - "opt2": "Class B", - "opt3": "Class AB", - "opt4": "Class C", - "correct_option": "Class A", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following output stages has a biasing arrangement that allows the amplifying element to conduct slightly even when there is no input signal?", - "opt1": "Class A", - "opt2": "Class B", - "opt3": "Class AB", - "opt4": "Class C", - "correct_option": "Class AB", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following output stages is suitable for high power audio amplifiers?", - "opt1": "Class A", - "opt2": "Class B", - "opt3": "Class AB", - "opt4": "Class C", - "correct_option": "Class AB", - "correct_option_index": 3 - }, - { - "qsns": "What is the main advantage of a Class A output stage?", - "opt1": "High efficiency", - "opt2": "Low distortion", - "opt3": "Low power consumption", - "opt4": "High output power", - "correct_option": "Low distortion", - "correct_option_index": 2 - }, - { - "qsns": "What is the main disadvantage of a Class A output stage?", - "opt1": "High distortion", - "opt2": "Low efficiency", - "opt3": "High power consumption", - "opt4": "Low output power", - "correct_option": "Low efficiency", - "correct_option_index": 2 - }, - { - "qsns": "What type of biasing is commonly used in Class A output stages?", - "opt1": "Fixed bias", - "opt2": "Self-bias", - "opt3": "Voltage divider bias", - "opt4": "Current mirror bias", - "correct_option": "Fixed bias", - "correct_option_index": 1 - }, - { - "qsns": "What is the DC bias point of a Class A output stage?", - "opt1": "Equal to the positive supply voltage", - "opt2": "Halfway between the positive and negative supply voltage", - "opt3": "Equal to the negative supply voltage", - "opt4": "Zero", - "correct_option": "Halfway between the positive and negative supply voltage", - "correct_option_index": 2 - }, - { - "qsns": "What is the maximum theoretical efficiency of a Class A output stage?", - "opt1": "25%", - "opt2": "50%", - "opt3": "75%", - "opt4": "100%", - "correct_option": "50%", - "correct_option_index": 2 - }, - { - "qsns": "What is the typical output power of a Class A amplifier?", - "opt1": "Less than 1 watt", - "opt2": "1 watt to 10 watts", - "opt3": "10 watts to 100 watts", - "opt4": "More than 100 watts", - "correct_option": "1 watt to 10 watts", - "correct_option_index": 2 - }, - { - "qsns": "What type of load is commonly used in Class A output stages?", - "opt1": "Resistive load", - "opt2": "Capacitive load", - "opt3": "Inductive load", - "opt4": "Reactive load", - "correct_option": "Resistive load", - "correct_option_index": 1 - }, - { - "qsns": "What is the main advantage of a Class A output stage over other amplifier configurations?", - "opt1": "High efficiency", - "opt2": "High output power", - "opt3": "Low distortion", - "opt4": "Low power consumption", - "correct_option": "Low distortion", - "correct_option_index": 3 - }, - { - "qsns": "What type of input signal is best suited for a Class A output stage?", - "opt1": "Sinusoidal signal", - "opt2": "Square wave signal", - "opt3": "Triangular wave signal", - "opt4": "Pulse signal", - "correct_option": "Sinusoidal signal", - "correct_option_index": 1 - }, - { - "qsns": "What is the typical voltage gain of a Class A amplifier?", - "opt1": "Less than 10", - "opt2": "10 to 100", - "opt3": "100 to 1000", - "opt4": "More than 1000", - "correct_option": "10 to 100", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following is a characteristic of a Class A output stage?", - "opt1": "High efficiency", - "opt2": "Low distortion", - "opt3": "Crossover distortion", - "opt4": "Conducts for less than half of the input signal cycle", - "correct_option": "Low distortion", - "correct_option_index": 2 - }, - { - "qsns": "In a Class A output stage, the amplifying device conducts for:", - "opt1": "Half of the input signal cycle", - "opt2": "Less than half of the input signal cycle", - "opt3": "More than half of the input signal cycle", - "opt4": "The entire input signal cycle", - "correct_option": "The entire input signal cycle", - "correct_option_index": 4 - }, - { - "qsns": "The efficiency of a Class A output stage is:", - "opt1": "High", - "opt2": "Low", - "opt3": "Moderate", - "opt4": "Not applicable", - "correct_option": "Low", - "correct_option_index": 2 - }, - { - "qsns": "What is the advantage of a Class A output stage over other classes of amplifiers?", - "opt1": "Higher efficiency", - "opt2": "Lower distortion", - "opt3": "Lower cost", - "opt4": "Higher power output", - "correct_option": "Lower distortion", - "correct_option_index": 2 - }, - { - "qsns": "What is the key feature of a Class A output stage?", - "opt1": "The amplifying device conducts for the entire input signal cycle", - "opt2": "The amplifying device conducts for only half of the input signal cycle", - "opt3": "The amplifying device conducts for less than half of the input signal cycle", - "opt4": "The amplifying device is biased to a cutoff state", - "correct_option": "The amplifying device conducts for the entire input signal cycle", - "correct_option_index": 1 - }, - { - "qsns": "What is the typical efficiency of a Class A output stage?", - "opt1": "100%", - "opt2": "50%", - "opt3": "25%", - "opt4": "Less than 10%", - "correct_option": "25%", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following is a disadvantage of a Class A output stage?", - "opt1": "High efficiency", - "opt2": "High distortion", - "opt3": "High cost", - "opt4": "Low power output", - "correct_option": "Low power output", - "correct_option_index": 4 - }, - { - "qsns": "Which type of amplifying device is commonly used in Class A output stages?", - "opt1": "Bipolar Junction Transistor (BJT)", - "opt2": "Metal-Oxide-Semiconductor Field-Effect Transistor (MOSFET)", - "opt3": "Junction Field-Effect Transistor (JFET)", - "opt4": "All of the above", - "correct_option": "All of the above", - "correct_option_index": 4 - }, - { - "qsns": "What is the purpose of the biasing circuit in a Class A output stage?", - "opt1": "To set the operating point of the amplifying device", - "opt2": "To provide negative feedback", - "opt3": "To boost the output signal", - "opt4": "To reduce distortion", - "correct_option": "To set the operating point of the amplifying device", - "correct_option_index": 1 - }, - { - "qsns": "What is the quiescent current of a Class A output stage?", - "opt1": "The maximum current the amplifying device can handle", - "opt2": "The current flowing through the load resistor when there is no input signal", - "opt3": "The current required to bias the amplifying device", - "opt4": "The current flowing through the amplifying device when there is no input signal", - "correct_option": "The current flowing through the amplifying device when there is no input signal", - "correct_option_index": 4 - }, - { - "qsns": "Which of the following is a common application of a Class A output stage?", - "opt1": "Audio power amplifiers", - "opt2": "RF amplifiers", - "opt3": "Voltage regulators", - "opt4": "Digital circuits", - "correct_option": "Audio power amplifiers", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following is a characteristic of the output signal of a Class A output stage?", - "opt1": "It is a square wave", - "opt2": "It is a sine wave", - "opt3": "It is a triangular wave", - "opt4": "It depends on the input signal", - "correct_option": "It depends on the input signal", - "correct_option_index": 4 - }, - { - "qsns": "Which of the following is a disadvantage of a Class A output stage in terms of power efficiency?", - "opt1": "It generates more heat than other classes of amplifiers", - "opt2": "It consumes more power than other classes of amplifiers", - "opt3": "It is more expensive than other classes of amplifiers", - "opt4": "It has a lower power output than other classes of amplifiers", - "correct_option": "It generates more heat than other classes of amplifiers", - "correct_option_index": 1 - }, - { - "qsns": "What is a Class B output stage in amplifiers?", - "opt1": "An amplifier configuration where the amplifying device conducts for the full input signal cycle", - "opt2": "An amplifier configuration where the amplifying device conducts only for half of the input signal cycle", - "opt3": "An amplifier configuration where the output signal is inverted with respect to the input signal", - "opt4": "An amplifier configuration where two input signals are combined to produce the output signal", - "correct_option": "An amplifier configuration where the amplifying device conducts only for half of the input signal cycle", - "correct_option_index": 2 - }, - { - "qsns": "What is the advantage of a Class B output stage?", - "opt1": "High power efficiency", - "opt2": "Low distortion", - "opt3": "High linearity", - "opt4": "Large voltage gain", - "correct_option": "High power efficiency", - "correct_option_index": 1 - }, - { - "qsns": "What is crossover distortion in a Class B output stage?", - "opt1": "A reduction in the voltage gain of the amplifier", - "opt2": "A discontinuity in the output signal at the point where one device switches off and the other switches on", - "opt3": "A change in the phase shift of the output signal", - "opt4": "An increase in the noise level of the amplifier", - "correct_option": "A discontinuity in the output signal at the point where one device switches off and the other switches on", - "correct_option_index": 2 - }, - { - "qsns": "How is crossover distortion reduced in a Class B output stage?", - "opt1": "By increasing the voltage gain of the amplifier", - "opt2": "By decreasing the load impedance of the amplifier", - "opt3": "By applying a small amount of bias current to the amplifying devices", - "opt4": "By using a feedback network in the amplifier", - "correct_option": "By applying a small amount of bias current to the amplifying devices", - "correct_option_index": 3 - }, - { - "qsns": "What is the main application of Class B output stages?", - "opt1": "Audio power amplifiers", - "opt2": "Voltage amplifiers", - "opt3": "Current amplifiers", - "opt4": "Low noise amplifiers", - "correct_option": "Audio power amplifiers", - "correct_option_index": 1 - }, - { - "qsns": "What is the main disadvantage of Class B output stages?", - "opt1": "Crossover distortion", - "opt2": "Low power efficiency", - "opt3": "High distortion", - "opt4": "Poor linearity", - "correct_option": "Crossover distortion", - "correct_option_index": 1 - }, - { - "qsns": "What is the purpose of biasing in a Class B output stage?", - "opt1": "To keep the amplifying devices slightly conductive even when there is no input signal", - "opt2": "To increase the voltage gain of the amplifier", - "opt3": "To decrease the noise level of the amplifier", - "opt4": "To reduce the distortion of the amplifier", - "correct_option": "To keep the amplifying devices slightly conductive even when there is no input signal", - "correct_option_index": 1 - }, - { - "qsns": "What is the output signal waveform of a Class B output stage?", - "opt1": "A square wave", - "opt2": "A sawtooth wave", - "opt3": "A sine wave", - "opt4": "A combination of the signals produced by each device", - "correct_option": "A combination of the signals produced by each device", - "correct_option_index": 4 - }, - { - "qsns": "What type of load is typically used with a Class B output stage?", - "opt1": "Resistive load", - "opt2": "Capacitive load", - "opt3": "Inductive load", - "opt4": "None of the above", - "correct_option": "Resistive load", - "correct_option_index": 1 - }, - { - "qsns": "What is the maximum theoretical efficiency of a Class B output stage?", - "opt1": "50%", - "opt2": "75%", - "opt3": "90%", - "opt4": "100%", - "correct_option": "75%", - "correct_option_index": 2 - }, - { - "qsns": "In a Class B output stage, how many amplifying devices are used?", - "opt1": "One", - "opt2": "Two", - "opt3": "Three", - "opt4": "Four", - "correct_option": "Two", - "correct_option_index": 2 - }, - { - "qsns": "What is the key advantage of a Class B output stage?", - "opt1": "Low power consumption", - "opt2": "High distortion", - "opt3": "High power efficiency", - "opt4": "Low heat generation", - "correct_option": "High power efficiency", - "correct_option_index": 3 - }, - { - "qsns": "What is the major disadvantage of a Class B output stage?", - "opt1": "Low power efficiency", - "opt2": "High power consumption", - "opt3": "High distortion", - "opt4": "Crossover distortion", - "correct_option": "Crossover distortion", - "correct_option_index": 4 - }, - { - "qsns": "How does bias current help to address the issue of crossover distortion in a Class B output stage?", - "opt1": "By increasing power consumption", - "opt2": "By reducing power efficiency", - "opt3": "By keeping the amplifying devices slightly conductive", - "opt4": "By increasing the gain of the amplifier", - "correct_option": "By keeping the amplifying devices slightly conductive", - "correct_option_index": 3 - }, - { - "qsns": "Which application is Class B output stage commonly used in?", - "opt1": "Low-distortion audio power amplifiers", - "opt2": "Low-power RF amplifiers", - "opt3": "High-distortion audio power amplifiers", - "opt4": "High-power RF amplifiers", - "correct_option": "High-power RF amplifiers", - "correct_option_index": 4 - }, - { - "qsns": "What is the output signal of a Class B output stage?", - "opt1": "A combination of the input signal and the bias current", - "opt2": "A combination of two signals produced by each device", - "opt3": "A constant voltage signal", - "opt4": "A high distortion signal", - "correct_option": "A combination of two signals produced by each device", - "correct_option_index": 2 - }, - { - "qsns": "Which type of amplifiers produce less distortion than Class B amplifiers?", - "opt1": "Class A amplifiers", - "opt2": "Class AB amplifiers", - "opt3": "Class C amplifiers", - "opt4": "Class D amplifiers", - "correct_option": "Class AB amplifiers", - "correct_option_index": 2 - }, - { - "qsns": "What is the function of the load resistor in a Class B output stage?", - "opt1": "To provide a bias current to the amplifying devices", - "opt2": "To reduce the power consumption of the amplifying devices", - "opt3": "To eliminate the crossover distortion", - "opt4": "To increase the gain of the amplifier", - "correct_option": "To eliminate the crossover distortion", - "correct_option_index": 3 - }, - { - "qsns": "Which type of distortion is commonly associated with Class B output stages?", - "opt1": "Harmonic distortion", - "opt2": "Frequency distortion", - "opt3": "Amplitude distortion", - "opt4": "Crossover distortion", - "correct_option": "Crossover distortion", - "correct_option_index": 4 - }, - { - "qsns": "Which of the following is a limitation of using Class B amplifiers?", - "opt1": "High power efficiency", - "opt2": "Low distortion", - "opt3": "High linearity", - "opt4": "High power consumption", - "correct_option": "Low distortion", - "correct_option_index": 2 - }, - { - "qsns": "What is the main advantage of a Class AB output stage over a Class B output stage?", - "opt1": "Higher power efficiency", - "opt2": "Lower distortion", - "opt3": "High distortion", - "opt4": "None of the above", - "correct_option": "Lower distortion", - "correct_option_index": 2 - }, - { - "qsns": "What is the purpose of biasing both amplifying devices in a Class AB output stage?", - "opt1": "To eliminate crossover distortion", - "opt2": "To improve power efficiency", - "opt3": "To increase linearity", - "opt4": "None of the above", - "correct_option": "To eliminate crossover distortion", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following is not a characteristic of Class AB output stages?", - "opt1": "High linearity", - "opt2": "High power efficiency", - "opt3": "Low distortion", - "opt4": "High bias", - "correct_option": "High bias", - "correct_option_index": 4 - }, - { - "qsns": "In which application are Class AB output stages commonly used?", - "opt1": "Low-power audio amplifiers", - "opt2": "High-fidelity audio amplifiers", - "opt3": "Power supplies", - "opt4": "None of the above", - "correct_option": "High-fidelity audio amplifiers", - "correct_option_index": 2 - }, - { - "qsns": "Which type of output stage offers the highest linearity?", - "opt1": "Class A", - "opt2": "Class B", - "opt3": "Class AB", - "opt4": "None of the above", - "correct_option": "Class A", - "correct_option_index": 1 - }, - { - "qsns": "What is the disadvantage of Class AB output stages compared to Class B output stages?", - "opt1": "Lower power efficiency", - "opt2": "Higher distortion", - "opt3": "More complex design", - "opt4": "None of the above", - "correct_option": "Lower power efficiency", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following is not a benefit of using a Class AB output stage?", - "opt1": "High power output", - "opt2": "Low distortion", - "opt3": "High power efficiency", - "opt4": "None of the above", - "correct_option": "None of the above", - "correct_option_index": 4 - }, - { - "qsns": "Which type of output stage produces lower distortion than Class B output stages?", - "opt1": "Class A", - "opt2": "Class AB", - "opt3": "Class C", - "opt4": "Both A and B", - "correct_option": "Both A and B", - "correct_option_index": 4 - }, - { - "qsns": "What is the key advantage of using a Class AB output stage?", - "opt1": "High power efficiency", - "opt2": "Low distortion", - "opt3": "High power efficiency and low distortion", - "opt4": "Low power efficiency and high distortion", - "correct_option": "High power efficiency and low distortion", - "correct_option_index": 3 - }, - { - "qsns": "What is the main disadvantage of Class A output stages compared to Class AB output stages?", - "opt1": "Lower linearity", - "opt2": "Lower power efficiency", - "opt3": "Higher distortion", - "opt4": "None of the above", - "correct_option": "Lower power efficiency", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following statements is true about a Class AB output stage?", - "opt1": "It has high power efficiency and high distortion.", - "opt2": "It has low power efficiency and low distortion.", - "opt3": "It has high power efficiency and low distortion.", - "opt4": "It has low power efficiency and high distortion.", - "correct_option": "It has high power efficiency and low distortion.", - "correct_option_index": 3 - }, - { - "qsns": "Which type of output stage is commonly used in power supplies?", - "opt1": "Class A", - "opt2": "Class B", - "opt3": "Class AB", - "opt4": "None of the above", - "correct_option": "Class B", - "correct_option_index": 2 - }, - { - "qsns": "What is the main advantage of using a Class AB output stage in an audio amplifier?", - "opt1": "High distortion", - "opt2": "Low efficiency", - "opt3": "High efficiency and low distortion", - "opt4": "Low efficiency and high distortion", - "correct_option": "High efficiency and low distortion", - "correct_option_index": 3 - }, - { - "qsns": "In a Class AB output stage, both amplifying devices are biased to conduct a small amount of current even when there is no input signal. What is the purpose of this bias current?", - "opt1": "To increase distortion", - "opt2": "To reduce power efficiency", - "opt3": "To maintain high power efficiency", - "opt4": "To decrease linearity", - "correct_option": "To reduce power efficiency", - "correct_option_index": 2 - }, - { - "qsns": "Which type of output stage is commonly used in high-fidelity audio amplifiers?", - "opt1": "Class A", - "opt2": "Class B", - "opt3": "Class AB", - "opt4": "Class C", - "correct_option": "Class AB", - "correct_option_index": 3 - }, - { - "qsns": "What is the process of gradual conduction transfer in a Class AB output stage known as?", - "opt1": "Crossover", - "opt2": "Biasing", - "opt3": "Amplification", - "opt4": "Distortion", - "correct_option": "Crossover", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following is a disadvantage of using a Class AB output stage?", - "opt1": "High distortion", - "opt2": "Low power efficiency", - "opt3": "Low linearity", - "opt4": "High cost", - "correct_option": "Low power efficiency", - "correct_option_index": 2 - }, - { - "qsns": "In a Class AB output stage, how do the amplifying devices behave when there is an input signal?", - "opt1": "They both conduct fully.", - "opt2": "One conducts fully and the other conducts partially.", - "opt3": "They both conduct partially.", - "opt4": "One conducts partially and the other is turned off.", - "correct_option": "One conducts fully and the other conducts partially.", - "correct_option_index": 2 - }, - { - "qsns": "What is the main purpose of a Class AB output stage?", - "opt1": "To reduce distortion", - "opt2": "To increase power efficiency", - "opt3": "To increase distortion", - "opt4": "To reduce power efficiency", - "correct_option": "To reduce distortion", - "correct_option_index": 1 - }, - { - "qsns": "What is the purpose of biasing the Class AB output stage in amplifiers?", - "opt1": "To set the operating point of the amplifying devices", - "opt2": "To reduce distortion in the output signal", - "opt3": "To ensure that the amplifying devices operate in the active region of their characteristic curves", - "opt4": "All of the above", - "correct_option": "All of the above", - "correct_option_index": 4 - }, - { - "qsns": "What is a common biasing technique for the Class AB output stage?", - "opt1": "Voltage divider network", - "opt2": "Diode biasing", - "opt3": "Transistor biasing", - "opt4": "All of the above", - "correct_option": "All of the above", - "correct_option_index": 4 - }, - { - "qsns": "In a voltage divider biasing network, where is the bias voltage set?", - "opt1": "At the base or gate of the amplifying device", - "opt2": "At the power supply voltage", - "opt3": "At ground", - "opt4": "None of the above", - "correct_option": "At the base or gate of the amplifying device", - "correct_option_index": 1 - }, - { - "qsns": "How does a diode biasing circuit work?", - "opt1": "By using a transistor configured as a voltage divider", - "opt2": "By connecting a diode in series with the base or gate of the amplifying device", - "opt3": "By using a voltage divider network", - "opt4": "None of the above", - "correct_option": "By connecting a diode in series with the base or gate of the amplifying device", - "correct_option_index": 2 - }, - { - "qsns": "Which biasing technique allows for fine-tuning of the operating point?", - "opt1": "Voltage divider network", - "opt2": "Diode biasing", - "opt3": "Transistor biasing", - "opt4": "None of the above", - "correct_option": "Voltage divider network", - "correct_option_index": 1 - }, - { - "qsns": "What is the goal of biasing the Class AB stage?", - "opt1": "To maximize power efficiency", - "opt2": "To minimize power dissipation", - "opt3": "To ensure linear operation with low distortion", - "opt4": "None of the above", - "correct_option": "To ensure linear operation with low distortion", - "correct_option_index": 3 - }, - { - "qsns": "Which type of amplifying device is typically used in a Class AB output stage?", - "opt1": "Bipolar junction transistor (BJT)", - "opt2": "Field-effect transistor (FET)", - "opt3": "Operational amplifier (Op-amp)", - "opt4": "None of the above", - "correct_option": "Bipolar junction transistor (BJT)", - "correct_option_index": 1 - }, - { - "qsns": "Which biasing technique uses a transistor configured as a voltage divider?", - "opt1": "Voltage divider network", - "opt2": "Diode biasing", - "opt3": "Transistor biasing", - "opt4": "None of the above", - "correct_option": "Transistor biasing", - "correct_option_index": 3 - }, - { - "qsns": "Why is biasing necessary for Class AB amplifiers?", - "opt1": "To prevent the amplifying devices from saturating", - "opt2": "To ensure that the amplifying devices operate in the active region", - "opt3": "To decrease the gain of the amplifier", - "opt4": "None of the above", - "correct_option": "To ensure that the amplifying devices operate in the active region", - "correct_option_index": 2 - }, - { - "qsns": "What is the main advantage of using a Class AB output stage in amplifiers?", - "opt1": "High power efficiency", - "opt2": "Low power dissipation", - "opt3": "High linearity with low distortion", - "opt4": "None of the above", - "correct_option": "High linearity with low distortion", - "correct_option_index": 3 - }, - { - "qsns": "What is the bias voltage typically set to in the Class AB output stage?", - "opt1": "The forward voltage drop of a diode", - "opt2": "The power supply voltage", - "opt3": "Zero volts", - "opt4": "The voltage across a capacitor", - "correct_option": "The forward voltage drop of a diode", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following is a disadvantage of using a diode biasing circuit?", - "opt1": "It is more complex than other biasing techniques", - "opt2": "It is less stable than other biasing techniques", - "opt3": "It requires more power to operate", - "opt4": "It is less accurate than other biasing techniques", - "correct_option": "It is less stable than other biasing techniques", - "correct_option_index": 2 - }, - { - "qsns": "What is the purpose of using a transistor biasing circuit?", - "opt1": "To set the bias voltage", - "opt2": "To amplify the input signal", - "opt3": "To reduce distortion in the output signal", - "opt4": "To increase power efficiency", - "correct_option": "To set the bias voltage", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following biasing techniques is commonly used in Class AB amplifiers?", - "opt1": "Voltage divider network", - "opt2": "Diode biasing", - "opt3": "Transistor biasing", - "opt4": "All of the above", - "correct_option": "Diode biasing", - "correct_option_index": 2 - }, - { - "qsns": "How does the choice of biasing technique affect the power efficiency of the amplifier?", - "opt1": "It has no effect on power efficiency", - "opt2": "It can increase power efficiency", - "opt3": "It can decrease power efficiency", - "opt4": "It can cause the amplifier to malfunction", - "correct_option": "It can decrease power efficiency", - "correct_option_index": 3 - }, - { - "qsns": "What is the disadvantage of using an adjustable biasing network?", - "opt1": "It is less accurate than a fixed biasing network", - "opt2": "It is less stable than a fixed biasing network", - "opt3": "It is more complex than a fixed biasing network", - "opt4": "It is more expensive than a fixed biasing network", - "correct_option": "It is more complex than a fixed biasing network", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following is a key consideration when selecting a biasing technique for the Class AB output stage?", - "opt1": "Power efficiency", - "opt2": "Cost", - "opt3": "Stability", - "opt4": "Input impedance", - "correct_option": "Power efficiency", - "correct_option_index": 1 - }, - { - "qsns": "What is the primary application of power BJTs in amplifier circuits?", - "opt1": "High frequency amplification", - "opt2": "Low noise amplification", - "opt3": "Power amplification", - "opt4": "Voltage amplification", - "correct_option": "Power amplification", - "correct_option_index": 3 - }, - { - "qsns": "Which type of power BJT is more commonly used in power amplifier circuits?", - "opt1": "PNP", - "opt2": "NPN", - "opt3": "Both are used equally", - "opt4": "None of the above", - "correct_option": "NPN", - "correct_option_index": 2 - }, - { - "qsns": "What is the operating region of the power BJT?", - "opt1": "Saturation", - "opt2": "Cutoff", - "opt3": "Active", - "opt4": "Reverse breakdown", - "correct_option": "Active", - "correct_option_index": 3 - }, - { - "qsns": "Which configuration is most commonly used for low-power amplifiers?", - "opt1": "Class A", - "opt2": "Class AB", - "opt3": "Class B", - "opt4": "Class C", - "correct_option": "Class A", - "correct_option_index": 1 - }, - { - "qsns": "What is the main advantage of power BJTs over small signal BJTs?", - "opt1": "Higher frequency response", - "opt2": "Lower noise", - "opt3": "Higher power handling capability", - "opt4": "Lower distortion", - "correct_option": "Higher power handling capability", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following is a common application of power BJTs?", - "opt1": "Voltage regulators", - "opt2": "Oscillators", - "opt3": "Audio amplifiers", - "opt4": "Digital circuits", - "correct_option": "Audio amplifiers", - "correct_option_index": 3 - }, - { - "qsns": "What is the primary purpose of switching amplifiers?", - "opt1": "To increase power gain", - "opt2": "To reduce distortion", - "opt3": "To improve efficiency", - "opt4": "To increase frequency response", - "correct_option": "To improve efficiency", - "correct_option_index": 3 - }, - { - "qsns": "Which type of amplifier uses power MOSFETs to provide high efficiency?", - "opt1": "Class A", - "opt2": "Class B", - "opt3": "Class D", - "opt4": "Class AB", - "correct_option": "Class D", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following is not a technique used to improve the efficiency of power amplifiers?", - "opt1": "Class G and H amplifiers", - "opt2": "Switching amplifiers", - "opt3": "Feedback amplifiers", - "opt4": "Class D amplifiers", - "correct_option": "Feedback amplifiers", - "correct_option_index": 3 - }, - { - "qsns": "What is the main disadvantage of power BJTs in amplifier circuits?", - "opt1": "High distortion", - "opt2": "Low power handling capability", - "opt3": "Low frequency response", - "opt4": "High heat dissipation", - "correct_option": "High heat dissipation", - "correct_option_index": 4 - }, - { - "qsns": "What is the primary function of power BJTs in amplifier circuits?", - "opt1": "To provide high voltage gain", - "opt2": "To provide low noise amplification", - "opt3": "To provide high power gain and efficiency", - "opt4": "To provide high frequency response", - "correct_option": "To provide high power gain and efficiency", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following is a commonly used configuration for power BJTs in low-power amplifiers?", - "opt1": "Class A", - "opt2": "Class AB", - "opt3": "Class B", - "opt4": "Class C", - "correct_option": "Class A", - "correct_option_index": 1 - }, - { - "qsns": "Which type of power BJT is commonly used in power amplifier circuits?", - "opt1": "PNP", - "opt2": "NPN", - "opt3": "JFET", - "opt4": "MOSFET", - "correct_option": "NPN", - "correct_option_index": 2 - }, - { - "qsns": "In which region of operation does the power BJT operate?", - "opt1": "Saturation region", - "opt2": "Cutoff region", - "opt3": "Active region", - "opt4": "Reverse-bias region", - "correct_option": "Active region", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following is a technique used to improve the efficiency of power amplifiers?", - "opt1": "Class A amplification", - "opt2": "Switching amplifiers", - "opt3": "Class AB amplification", - "opt4": "Linear amplifiers", - "correct_option": "Switching amplifiers", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following is an application of power BJTs?", - "opt1": "Audio amplifiers", - "opt2": "Radio receivers", - "opt3": "Logic gates", - "opt4": "Voltage regulators", - "correct_option": "Audio amplifiers", - "correct_option_index": 1 - }, - { - "qsns": "What is the primary difference between small signal BJTs and power BJTs?", - "opt1": "Current gain", - "opt2": "Voltage gain", - "opt3": "Frequency response", - "opt4": "High power handling capability", - "correct_option": "High power handling capability", - "correct_option_index": 4 - }, - { - "qsns": "Which type of power BJT has a higher current gain?", - "opt1": "PNP", - "opt2": "NPN", - "opt3": "JFET", - "opt4": "MOSFET", - "correct_option": "NPN", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following is a benefit of using power BJTs in amplifier circuits?", - "opt1": "High frequency response", - "opt2": "Low power consumption", - "opt3": "Low distortion", - "opt4": "High power gain", - "correct_option": "High power gain", - "correct_option_index": 4 - }, - { - "qsns": "Which of the following amplifier configurations is commonly used in high-power amplifiers?", - "opt1": "Class A", - "opt2": "Class AB", - "opt3": "Class B", - "opt4": "Class D", - "correct_option": "Class D", - "correct_option_index": 4 - }, - { - "qsns": "In a transformer-coupled push-pull amplifier, the primary winding of the output transformer is connected to:", - "opt1": "The input signal", - "opt2": "The collector of the NPN transistor in the driver stage", - "opt3": "The base of the NPN transistor in the driver stage", - "opt4": "The collector of both transistors", - "correct_option": "The collector of both transistors", - "correct_option_index": 4 - }, - { - "qsns": "The transformer in a transformer-coupled push-pull amplifier is used to:", - "opt1": "Provide impedance matching between the driver and output stages", - "opt2": "Amplify the signal", - "opt3": "Provide voltage gain", - "opt4": "Provide current gain", - "correct_option": "Provide impedance matching between the driver and output stages", - "correct_option_index": 1 - }, - { - "qsns": "In a transformer-coupled push-pull amplifier, the two output transistors are biased so that they conduct:", - "opt1": "Simultaneously", - "opt2": "Randomly", - "opt3": "Alternately", - "opt4": "None of the above", - "correct_option": "Alternately", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following is an advantage of a transformer-coupled push-pull amplifier?", - "opt1": "High efficiency", - "opt2": "Low distortion", - "opt3": "High gain", - "opt4": "All of the above", - "correct_option": "All of the above", - "correct_option_index": 4 - }, - { - "qsns": "The output of a transformer-coupled push-pull amplifier is taken from:", - "opt1": "The primary winding of the output transformer", - "opt2": "The secondary winding of the output transformer", - "opt3": "The center tap of the output transformer", - "opt4": "None of the above", - "correct_option": "The secondary winding of the output transformer", - "correct_option_index": 2 - }, - { - "qsns": "The load impedance in a transformer-coupled push-pull amplifier is:", - "opt1": "Always equal to the output impedance of the amplifier", - "opt2": "Always lower than the output impedance of the amplifier", - "opt3": "Always higher than the output impedance of the amplifier", - "opt4": "None of the above", - "correct_option": "Always equal to the output impedance of the amplifier", - "correct_option_index": 1 - }, - { - "qsns": "The DC bias voltage for the output transistors in a transformer-coupled push-pull amplifier is provided by:", - "opt1": "The input signal", - "opt2": "The driver stage", - "opt3": "A separate bias circuit", - "opt4": "None of the above", - "correct_option": "A separate bias circuit", - "correct_option_index": 3 - }, - { - "qsns": "The crossover distortion in a transformer-coupled push-pull amplifier is caused by:", - "opt1": "The mismatch between the two output transistors", - "opt2": "The bias voltage being too high", - "opt3": "The load impedance being too low", - "opt4": "None of the above", - "correct_option": "The mismatch between the two output transistors", - "correct_option_index": 1 - }, - { - "qsns": "The transformer in a transformer-coupled push-pull amplifier is usually:", - "opt1": "A step-up transformer", - "opt2": "A step-down transformer", - "opt3": "A transformer with a 1:1 turns ratio", - "opt4": "None of the above", - "correct_option": "A step-down transformer", - "correct_option_index": 2 - }, - { - "qsns": "In a transformer-coupled push-pull amplifier, the output transistors are typically:", - "opt1": "Darlington transistors", - "opt2": "Complementary pair transistors", - "opt3": "MOSFETs", - "opt4": "None of the above", - "correct_option": "None of the above", - "correct_option_index": 4 - }, - { - "qsns": "In a transformer-coupled push-pull stage, two identical transistors are used with one conducting during the positive half-cycle of the input signal and the other conducting during the negative half-cycle. What is the main advantage of using two transistors in this configuration?", - "opt1": "Increased efficiency", - "opt2": "Increased voltage gain", - "opt3": "Reduced distortion", - "opt4": "All of the above", - "correct_option": "All of the above", - "correct_option_index": 4 - }, - { - "qsns": "Which of the following statements about the transformer-coupled push-pull stage is true?", - "opt1": "It is commonly used in audio power amplifiers", - "opt2": "It is a type of class A amplifier", - "opt3": "It requires a large amount of power for operation", - "opt4": "It has a low voltage gain", - "correct_option": "It is commonly used in audio power amplifiers", - "correct_option_index": 1 - }, - { - "qsns": "The transformer in a transformer-coupled push-pull stage is used to:", - "opt1": "Increase the voltage gain of the amplifier", - "opt2": "Couple the output signal to the load", - "opt3": "Provide impedance matching between the amplifier and the load", - "opt4": "All of the above", - "correct_option": "Provide impedance matching between the amplifier and the load", - "correct_option_index": 3 - }, - { - "qsns": "In a transformer-coupled push-pull stage, the transformer is typically wound with a center-tapped secondary winding. What is the purpose of the center tap?", - "opt1": "To provide a reference voltage for biasing the transistors", - "opt2": "To provide a means for adjusting the gain of the amplifier", - "opt3": "To provide a balanced load for the transistors", - "opt4": "None of the above", - "correct_option": "To provide a reference voltage for biasing the transistors", - "correct_option_index": 1 - }, - { - "qsns": "The transformer-coupled push-pull stage is a type of:", - "opt1": "Class A amplifier", - "opt2": "Class B amplifier", - "opt3": "Class AB amplifier", - "opt4": "None of the above", - "correct_option": "Class B amplifier", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following is an advantage of using a transformer-coupled push-pull stage over a single-ended output stage?", - "opt1": "Higher efficiency", - "opt2": "Higher voltage gain", - "opt3": "Reduced distortion", - "opt4": "All of the above", - "correct_option": "All of the above", - "correct_option_index": 4 - }, - { - "qsns": "The output of a transformer-coupled push-pull stage is taken from:", - "opt1": "The collector of one transistor", - "opt2": "The center tap of the transformer secondary winding", - "opt3": "The collector of both transistors", - "opt4": "The primary winding of the transformer", - "correct_option": "The center tap of the transformer secondary winding", - "correct_option_index": 2 - }, - { - "qsns": "What is the main disadvantage of a transformer-coupled push-pull stage compared to other output stage configurations?", - "opt1": "Reduced efficiency", - "opt2": "Increased distortion", - "opt3": "Limited frequency response", - "opt4": "All of the above", - "correct_option": "Limited frequency response", - "correct_option_index": 3 - }, - { - "qsns": "The transformer in a transformer-coupled push-pull stage should be designed with:", - "opt1": "High primary-to-secondary turns ratio", - "opt2": "Low primary-to-secondary turns ratio", - "opt3": "High frequency response", - "opt4": "Low leakage inductance", - "correct_option": "Low leakage inductance", - "correct_option_index": 4 - }, - { - "qsns": "What is the main advantage of using a transformer in a push-pull output stage?", - "opt1": "Increased voltage gain", - "opt2": "Impedance matching to the load", - "opt3": "Reduced distortion", - "opt4": "Increased efficiency", - "correct_option": "Impedance matching to the load", - "correct_option_index": 2 - }, - { - "qsns": "What is the basic function of a tuned amplifier?", - "opt1": "To provide high power amplification", - "opt2": "To provide high selectivity and gain", - "opt3": "To filter out unwanted signals", - "opt4": "To provide high frequency stability", - "correct_option": "To provide high selectivity and gain", - "correct_option_index": 2 - }, - { - "qsns": "Which type of resonant circuit is typically used in tuned amplifiers?", - "opt1": "RC circuits", - "opt2": "RL circuits", - "opt3": "LC circuits", - "opt4": "RLC circuits", - "correct_option": "LC circuits", - "correct_option_index": 3 - }, - { - "qsns": "What is the Q factor of a resonant circuit?", - "opt1": "The frequency at which the circuit resonates", - "opt2": "The voltage gain of the circuit", - "opt3": "The energy stored in the circuit", - "opt4": "The ratio of energy stored in the circuit to energy lost per cycle", - "correct_option": "The ratio of energy stored in the circuit to energy lost per cycle", - "correct_option_index": 4 - }, - { - "qsns": "What is the difference between a single tuned amplifier and a double tuned amplifier?", - "opt1": "A single tuned amplifier is more selective than a double tuned amplifier.", - "opt2": "A single tuned amplifier uses one resonant circuit, while a double tuned amplifier uses two.", - "opt3": "A double tuned amplifier provides more gain than a single tuned amplifier.", - "opt4": "A double tuned amplifier uses a transformer to couple the resonant circuits.", - "correct_option": "A single tuned amplifier uses one resonant circuit, while a double tuned amplifier uses two.", - "correct_option_index": 2 - }, - { - "qsns": "Which type of amplifier is commonly used in radio receivers and transmitters?", - "opt1": "Class A amplifier", - "opt2": "Class B amplifier", - "opt3": "Class AB amplifier", - "opt4": "Tuned amplifier", - "correct_option": "Tuned amplifier", - "correct_option_index": 4 - }, - { - "qsns": "Which electronic device can be used as the active element in a tuned amplifier?", - "opt1": "Capacitor", - "opt2": "Resistor", - "opt3": "Inductor", - "opt4": "Transistor", - "correct_option": "Transistor", - "correct_option_index": 4 - }, - { - "qsns": "What is the function of the Q multiplier in a tuned amplifier?", - "opt1": "To provide additional gain at the center frequency of the circuit", - "opt2": "To increase the bandwidth of the circuit", - "opt3": "To improve the stability of the circuit", - "opt4": "To reduce distortion in the output signal", - "correct_option": "To provide additional gain at the center frequency of the circuit", - "correct_option_index": 1 - }, - { - "qsns": "What is a tuned amplifier?", - "opt1": "An amplifier with no selectivity or gain", - "opt2": "An amplifier that only works with specific types of signals", - "opt3": "An amplifier that uses tuned circuits to achieve high selectivity and gain", - "opt4": "An amplifier that is not commonly used in electronic applications", - "correct_option": "An amplifier that uses tuned circuits to achieve high selectivity and gain", - "correct_option_index": 3 - }, - { - "qsns": "What type of resonant circuits are used in tuned amplifiers?", - "opt1": "RC circuits", - "opt2": "LC circuits", - "opt3": "RL circuits", - "opt4": "RLC circuits", - "correct_option": "LC circuits", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following is a key factor in determining the gain and selectivity of a tuned amplifier?", - "opt1": "The type of amplifier used", - "opt2": "The power supply voltage", - "opt3": "The Q factor of the resonant circuits", - "opt4": "The input signal frequency", - "correct_option": "The Q factor of the resonant circuits", - "correct_option_index": 3 - }, - { - "qsns": "What is the difference between a single tuned amplifier and a double tuned amplifier?", - "opt1": "A single tuned amplifier uses one resonant circuit, while a double tuned amplifier uses two resonant circuits.", - "opt2": "A single tuned amplifier is only used in audio applications, while a double tuned amplifier is only used in radio applications.", - "opt3": "A single tuned amplifier is less efficient than a double tuned amplifier.", - "opt4": "A single tuned amplifier has a lower Q factor than a double tuned amplifier.", - "correct_option": "A single tuned amplifier uses one resonant circuit, while a double tuned amplifier uses two resonant circuits.", - "correct_option_index": 1 - }, - { - "qsns": "Where are tuned amplifiers commonly used?", - "opt1": "In power supplies", - "opt2": "In digital circuits", - "opt3": "In radio receivers and transmitters", - "opt4": "In microcontrollers", - "correct_option": "In radio receivers and transmitters", - "correct_option_index": 3 - }, - { - "qsns": "What is the Q factor of a resonant circuit?", - "opt1": "The amount of power dissipated in the circuit", - "opt2": "The amount of power supplied to the circuit", - "opt3": "The ratio of energy stored in the circuit to energy lost per cycle", - "opt4": "The ratio of energy lost in the circuit to energy stored per cycle", - "correct_option": "The ratio of energy stored in the circuit to energy lost per cycle", - "correct_option_index": 3 - }, - { - "qsns": "Which type of amplifying device can be used in tuned amplifiers?", - "opt1": "BJTs", - "opt2": "MOSFETs", - "opt3": "Vacuum tubes", - "opt4": "All of the above", - "correct_option": "All of the above", - "correct_option_index": 4 - }, - { - "qsns": "What is the purpose of a tuned amplifier in a radio receiver?", - "opt1": "To amplify all incoming signals equally", - "opt2": "To amplify only the desired signal while rejecting other signals", - "opt3": "To reduce the strength of the incoming signal", - "opt4": "To generate a new signal at a different frequency", - "correct_option": "To amplify only the desired signal while rejecting other signals", - "correct_option_index": 2 - }, - { - "qsns": "What is the main advantage of a double tuned amplifier over a single tuned amplifier?", - "opt1": "Higher efficiency", - "opt2": "Higher gain", - "opt3": "Higher selectivity", - "opt4": "Lower distortion", - "correct_option": "Higher selectivity", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following is a disadvantage of tuned amplifiers?", - "opt1": "They are expensive to produce.", - "opt2": "They are large in size.", - "opt3": "They can be difficult to tune and adjust.", - "opt4": "They are not capable of providing high gain.", - "correct_option": "They can be difficult to tune and adjust.", - "correct_option_index": 3 - }, - { - "qsns": "What does op-amp stand for?", - "opt1": "Operational amplifier", - "opt2": "Optimal amplifier", - "opt3": "Organic amplifier", - "opt4": "Oscillating amplifier", - "correct_option": "Operational amplifier", - "correct_option_index": 1 - }, - { - "qsns": "Which configuration is most commonly used in op-amp circuits?", - "opt1": "Inverting amplifier", - "opt2": "Non-inverting amplifier", - "opt3": "Differential amplifier", - "opt4": "Voltage follower", - "correct_option": "Inverting amplifier", - "correct_option_index": 1 - }, - { - "qsns": "What is the gain of an inverting amplifier with a feedback resistor of 10 kΩ and an input resistor of 1 kΩ?", - "opt1": "-1", - "opt2": "-10", - "opt3": "10", - "opt4": "100", - "correct_option": "-10", - "correct_option_index": 2 - }, - { - "qsns": "Which parameter determines the maximum output voltage swing of an op-amp?", - "opt1": "Input offset voltage", - "opt2": "Gain-bandwidth product", - "opt3": "Slew rate", - "opt4": "Output saturation voltage", - "correct_option": "Output saturation voltage", - "correct_option_index": 4 - }, - { - "qsns": "What is the purpose of a voltage follower op-amp circuit?", - "opt1": "To provide high gain", - "opt2": "To provide low gain", - "opt3": "To buffer a signal", - "opt4": "To invert a signal", - "correct_option": "To buffer a signal", - "correct_option_index": 3 - }, - { - "qsns": "What is the transfer function of a non-inverting amplifier with a feedback resistor of 10 kΩ and an input resistor of 1 kΩ?", - "opt1": "Vout = Vin", - "opt2": "Vout = -10Vin", - "opt3": "Vout = 10Vin", - "opt4": "Vout = (1 + 10kΩ/1kΩ)Vin", - "correct_option": "Vout = (1 + 10kΩ/1kΩ)Vin", - "correct_option_index": 4 - }, - { - "qsns": "Which op-amp parameter determines the rate at which the output can change in response to changes in the input?", - "opt1": "Input offset voltage", - "opt2": "Gain-bandwidth product", - "opt3": "Slew rate", - "opt4": "Input bias current", - "correct_option": "Slew rate", - "correct_option_index": 3 - }, - { - "qsns": "What is the purpose of a differential amplifier?", - "opt1": "To amplify the difference between two input signals", - "opt2": "To amplify the sum of two input signals", - "opt3": "To invert a signal", - "opt4": "To provide a high-impedance input", - "correct_option": "To amplify the difference between two input signals", - "correct_option_index": 1 - }, - { - "qsns": "Which op-amp configuration is used to perform mathematical operations, such as addition and subtraction?", - "opt1": "Inverting amplifier", - "opt2": "Non-inverting amplifier", - "opt3": "Summing amplifier", - "opt4": "Differentiator", - "correct_option": "Summing amplifier", - "correct_option_index": 3 - }, - { - "qsns": "What is the output voltage of an inverting amplifier with an input voltage of 2 V and a feedback resistor of 10 kΩ, assuming an ideal op-amp?", - "opt1": "-2V", - "opt2": "-20 V", - "opt3": "2V", - "opt4": "20 V", - "correct_option": "-20 V", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following is a characteristic of an ideal operational amplifier?", - "opt1": "Infinite input impedance", - "opt2": "Infinite output impedance", - "opt3": "Infinite gain", - "opt4": "All of the above", - "correct_option": "All of the above", - "correct_option_index": 4 - }, - { - "qsns": "Which of the following is not a type of operational amplifier?", - "opt1": "Differential amplifier", - "opt2": "Inverting amplifier", - "opt3": "Non-inverting amplifier", - "opt4": "Power amplifier", - "correct_option": "Power amplifier", - "correct_option_index": 4 - }, - { - "qsns": "What is the function of a summing amplifier?", - "opt1": "To amplify a single input signal", - "opt2": "To sum multiple input signals and provide an amplified output signal", - "opt3": "To provide an inverted output signal", - "opt4": "To provide a non-inverted output signal", - "correct_option": "To sum multiple input signals and provide an amplified output signal", - "correct_option_index": 2 - }, - { - "qsns": "What is the output voltage of an inverting amplifier with a gain of -10 if the input voltage is 2V?", - "opt1": "-10V", - "opt2": "-20V", - "opt3": "10V", - "opt4": "20V", - "correct_option": "-20V", - "correct_option_index": 2 - }, - { - "qsns": "What is the function of a voltage follower?", - "opt1": "To amplify a voltage", - "opt2": "To provide a high input impedance", - "opt3": "To provide a low output impedance", - "opt4": "To provide unity gain and high input and output impedances", - "correct_option": "To provide unity gain and high input and output impedances", - "correct_option_index": 4 - }, - { - "qsns": "What is the advantage of using an op-amp as a comparator?", - "opt1": "It has a very high input impedance", - "opt2": "It has a very low output impedance", - "opt3": "It has a very high gain", - "opt4": "It has a very low bandwidth", - "correct_option": "It has a very high gain", - "correct_option_index": 3 - }, - { - "qsns": "What is the function of a differentiator circuit?", - "opt1": "To differentiate the input signal with respect to time", - "opt2": "To integrate the input signal with respect to time", - "opt3": "To amplify the input signal", - "opt4": "To provide a DC offset to the input signal", - "correct_option": "To differentiate the input signal with respect to time", - "correct_option_index": 1 - }, - { - "qsns": "What is the function of an integrator circuit?", - "opt1": "To differentiate the input signal with respect to time", - "opt2": "To integrate the input signal with respect to time", - "opt3": "To amplify the input signal", - "opt4": "To provide a DC offset to the input signal", - "correct_option": "To integrate the input signal with respect to time", - "correct_option_index": 2 - }, - { - "qsns": "What is the advantage of using a non-inverting amplifier instead of an inverting amplifier?", - "opt1": "The input signal is not inverted", - "opt2": "The output impedance is lower", - "opt3": "The gain is higher", - "opt4": "The bandwidth is wider", - "correct_option": "The input signal is not inverted", - "correct_option_index": 1 - }, - { - "qsns": "What is the function of a Schmitt trigger circuit?", - "opt1": "To amplify a signal", - "opt2": "To filter a signal", - "opt3": "To generate a square wave signal from a triangular wave signal", - "opt4": "To provide hysteresis to a signal", - "correct_option": "To provide hysteresis to a signal", - "correct_option_index": 4 - } -] \ No newline at end of file + { + "qsns": "Which of the following best describes Ohm's Law?", + "opt1": "The relationship between voltage and power", + "opt2": "The relationship between current and resistance", + "opt3": "The relationship between voltage and current", + "opt4": "The relationship between resistance and power", + "correct_option": "The relationship between voltage and current", + "correct_option_index": 3 + }, + { + "qsns": "What is the unit of electrical resistance?", + "opt1": "Volt", + "opt2": "Ampere", + "opt3": "Watt", + "opt4": "Ohm", + "correct_option": "Ohm", + "correct_option_index": 4 + }, + { + "qsns": "Which of the following is a correct expression of Ohm's Law?", + "opt1": "I=VR", + "opt2": "R=VI", + "opt3": "V=IR", + "opt4": "R=IV", + "correct_option": "V=IR", + "correct_option_index": 3 + }, + { + "qsns": "A circuit has a voltage of 12 volts and a resistance of 4 ohms. What is the current flowing through the circuit?", + "opt1": "48 amps", + "opt2": "8 amps", + "opt3": "4 amps", + "opt4": "3 amps", + "correct_option": "3 amps", + "correct_option_index": 4 + }, + { + "qsns": "If the voltage across a circuit remains constant and the resistance decreases, what happens to the current?", + "opt1": "It increases", + "opt2": "It decreases", + "opt3": "It stays the same", + "opt4": "It is impossible to determine without more information", + "correct_option": "It increases", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following materials has the highest electrical resistance?", + "opt1": "Copper", + "opt2": "Silver", + "opt3": "Aluminum", + "opt4": "Nichrome", + "correct_option": "Nichrome", + "correct_option_index": 4 + }, + { + "qsns": "A circuit has a resistance of 10 ohms and a current of 2 amps. What is the voltage across the circuit?", + "opt1": "5 volts", + "opt2": "10 volts", + "opt3": "20 volts", + "opt4": "40 volts", + "correct_option": "20 volts", + "correct_option_index": 3 + }, + { + "qsns": "Which of the following is an example of a non-ohmic conductor?", + "opt1": "Copper wire", + "opt2": "Silver wire", + "opt3": "Light bulb filament", + "opt4": "Carbon resistor", + "correct_option": "Light bulb filament", + "correct_option_index": 3 + }, + { + "qsns": "What happens to the current in a circuit if the voltage is doubled while the resistance remains constant?", + "opt1": "It is halved", + "opt2": "It is doubled", + "opt3": "It remains the same", + "opt4": "It is impossible to determine without more information", + "correct_option": "It is doubled", + "correct_option_index": 2 + }, + { + "qsns": "A circuit has a voltage of 20 volts and a current of 4 amps. What is the resistance of the circuit?", + "opt1": "16 ohms", + "opt2": "8 ohms", + "opt3": "5 ohms", + "opt4": "80 ohms", + "correct_option": "5 ohms", + "correct_option_index": 3 + }, + { + "qsns": "Which of the following is a characteristic of a good conductor?", + "opt1": "High resistance", + "opt2": "Low resistance", + "opt3": "High voltage", + "opt4": "Low voltage", + "correct_option": "Low resistance", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following materials has the lowest electrical resistance?", + "opt1": "Aluminum", + "opt2": "Gold", + "opt3": "Copper", + "opt4": "Silver", + "correct_option": "Silver", + "correct_option_index": 4 + }, + { + "qsns": "What happens to the current in a circuit if the resistance is doubled while the voltage remains constant?", + "opt1": "It is halved", + "opt2": "It is doubled", + "opt3": "It remains the same", + "opt4": "It is impossible to determine without more information", + "correct_option": "It is halved", + "correct_option_index": 1 + }, + { + "qsns": "What is the relationship between current and voltage in a circuit with a constant resistance?", + "opt1": "They are directly proportional", + "opt2": "They are inversely proportional", + "opt3": "They are not related", + "opt4": "It is impossible to determine without more information", + "correct_option": "They are directly proportional", + "correct_option_index": 1 + }, + { + "qsns": "What is electric voltage?", + "opt1": "The flow of electric charge through a conductor", + "opt2": "The measure of electric potential energy per unit charge between two points in an electric circuit", + "opt3": "The resistance of a conductor", + "opt4": "The unit of electric voltage", + "correct_option": "The measure of electric potential energy per unit charge between two points in an electric circuit", + "correct_option_index": 2 + }, + { + "qsns": "What is electric current?", + "opt1": "The measure of the electric potential energy per unit charge between two points in an electric circuit", + "opt2": "The flow of electric charge through a conductor", + "opt3": "The resistance of a conductor to the flow of electric charge", + "opt4": "The measure of resistivity of a conductor", + "correct_option": "The flow of electric charge through a conductor", + "correct_option_index": 2 + }, + { + "qsns": "What is the unit of electric voltage?", + "opt1": "Ampere (A)", + "opt2": "Watt (W)", + "opt3": "Volt (V)", + "opt4": "Ohm (Ω)", + "correct_option": "Volt (V)", + "correct_option_index": 3 + }, + { + "qsns": "What is the unit of electric current?", + "opt1": "Amperes", + "opt2": "Watts", + "opt3": "Volts", + "opt4": "Coulombs", + "correct_option": "Amperes", + "correct_option_index": 1 + }, + { + "qsns": "What is the relationship between voltage and current according to Ohm's Law?", + "opt1": "Voltage is inversely proportional to current", + "opt2": "Voltage is directly proportional to current", + "opt3": "Voltage is not related to current", + "opt4": "Voltage is directly proportional to square of current", + "correct_option": "Voltage is directly proportional to current", + "correct_option_index": 2 + }, + { + "qsns": "What instrument is used to measure electric current in a circuit?", + "opt1": "Voltmeter", + "opt2": "Ammeter", + "opt3": "Oscilloscope", + "opt4": "Galvanometer", + "correct_option": "Ammeter", + "correct_option_index": 2 + }, + { + "qsns": "What is power?", + "opt1": "The rate at which energy is transferred in an electric circuit", + "opt2": "The capacity of a system to do work", + "opt3": "The unit of energy", + "opt4": "Energy per unit area", + "correct_option": "The rate at which energy is transferred in an electric circuit", + "correct_option_index": 1 + }, + { + "qsns": "What is the unit of power?", + "opt1": "Amperes", + "opt2": "Volts", + "opt3": "Watts", + "opt4": "Coulombs", + "correct_option": "Watts", + "correct_option_index": 3 + }, + { + "qsns": "What is the formula for calculating power in an electric circuit?", + "opt1": "P=V+I", + "opt2": "P=VI", + "opt3": "P=IR", + "opt4": "P=V/I", + "correct_option": "P=VI", + "correct_option_index": 2 + }, + { + "qsns": "What is the formula for calculating power when resistance is known?", + "opt1": "P=V+I", + "opt2": "P=V", + "opt3": "P=I^2R", + "opt4": "P=I^2R^2", + "correct_option": "P=I^2R", + "correct_option_index": 3 + }, + { + "qsns": "What is energy?", + "opt1": "The rate at which energy is transferred in an electric circuit", + "opt2": "The capacity of a system to do work", + "opt3": "The unit of power", + "opt4": "Work done per unit area", + "correct_option": "The capacity of a system to do work", + "correct_option_index": 2 + }, + { + "qsns": "What is the unit of energy?", + "opt1": "Amperes", + "opt2": "Joules", + "opt3": "Watts", + "opt4": "Coulombs", + "correct_option": "Joules", + "correct_option_index": 2 + }, + { + "qsns": "What is the formula for calculating energy transferred in an electric circuit?", + "opt1": "E=V", + "opt2": "E=P", + "opt3": "E=IR", + "opt4": "E=Pt", + "correct_option": "E=Pt", + "correct_option_index": 4 + }, + { + "qsns": "What is the formula for calculating power if the current and resistance are known?", + "opt1": "P=I^2R", + "opt2": "P=IV", + "opt3": "P=IR", + "opt4": "P=I^2R^2", + "correct_option": "P=I^2R", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following materials is an example of a conducting material?", + "opt1": "Glass", + "opt2": "Rubber", + "opt3": "Copper", + "opt4": "Plastic", + "correct_option": "Copper", + "correct_option_index": 3 + }, + { + "qsns": "What is the resistivity of a conducting material?", + "opt1": "The resistance of a material of unit length and unit cross-sectional area", + "opt2": "The maximum voltage that the material can withstand before it breaks down", + "opt3": "The ability of a material to prevent the flow of electric current", + "opt4": "All of above", + "correct_option": "The resistance of a material of unit length and unit cross-sectional area", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following materials is an example of an insulating material?", + "opt1": "Copper", + "opt2": "Plastic", + "opt3": "Silver", + "opt4": "both a and b", + "correct_option": "Plastic", + "correct_option_index": 2 + }, + { + "qsns": "What is the dielectric strength of an insulating material?", + "opt1": "The resistance of a material of unit length and unit cross-sectional area", + "opt2": "The ability of a material to prevent the flow of electric current", + "opt3": "The maximum voltage that the material can withstand before it breaks down", + "opt4": "None of above", + "correct_option": "The maximum voltage that the material can withstand before it breaks down", + "correct_option_index": 3 + }, + { + "qsns": "What are semiconducting materials?", + "opt1": "Materials that have properties between those of conducting and insulating materials", + "opt2": "Materials that allow electric current to flow through them easily", + "opt3": "Materials that do not allow electric current to flow through them easily", + "opt4": "All of above", + "correct_option": "Materials that have properties between those of conducting and insulating materials", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following materials is commonly used in electronic devices?", + "opt1": "Silicon", + "opt2": "Rubber", + "opt3": "Glass", + "opt4": "Steel", + "correct_option": "Silicon", + "correct_option_index": 1 + }, + { + "qsns": "What is the process of controlling the conductivity of a semiconducting material called?", + "opt1": "Doping", + "opt2": "Refracting", + "opt3": "Conducting", + "opt4": "Insulating", + "correct_option": "Doping", + "correct_option_index": 1 + }, + { + "qsns": "What is the purpose of insulating materials in electrical circuits?", + "opt1": "To separate conductors and prevent the flow of electric current to unintended locations", + "opt2": "To connect components", + "opt3": "To provide a path for the flow of electric current", + "opt4": "None of above", + "correct_option": "To separate conductors and prevent the flow of electric current to unintended locations", + "correct_option_index": 1 + }, + { + "qsns": "In a series circuit, which of the following statements is true?", + "opt1": "The components are connected across each other in multiple paths.", + "opt2": "The same current flows through each component.", + "opt3": "The total resistance is less than the individual resistances of the components", + "opt4": "All of above", + "correct_option": "The same current flows through each component.", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following circuits has a total resistance that is less than the individual resistances of the components?", + "opt1": "Series circuit", + "opt2": "Parallel circuit", + "opt3": "Series-parallel circuit", + "opt4": "both b and c", + "correct_option": "Parallel circuit", + "correct_option_index": 2 + }, + { + "qsns": "In a series circuit, if the resistance of one component increases, what happens to the total resistance of the circuit?", + "opt1": "It decreases", + "opt2": "It increases", + "opt3": "It stays the same", + "opt4": "First increases then stays same", + "correct_option": "It increases", + "correct_option_index": 2 + }, + { + "qsns": "In a parallel circuit, if the resistance of one component increases, what happens to the total resistance of the circuit?", + "opt1": "It decreases", + "opt2": "It increases", + "opt3": "It stays the same", + "opt4": "First increases then stays same", + "correct_option": "It increases", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following circuits is used in applications where voltage regulation is required?", + "opt1": "Series circuit", + "opt2": "Parallel circuit", + "opt3": "Series-parallel circuit", + "opt4": "None of above", + "correct_option": "Parallel circuit", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following circuits is used in applications where current limiting is required?", + "opt1": "Series circuit", + "opt2": "Parallel circuit", + "opt3": "Series-parallel circuit", + "opt4": "None of above", + "correct_option": "Series circuit", + "correct_option_index": 1 + }, + { + "qsns": "In a series-parallel circuit, which components are connected in series?", + "opt1": "No components", + "opt2": "All components", + "opt3": "Some components", + "opt4": "Both a and b", + "correct_option": "Some components", + "correct_option_index": 3 + }, + { + "qsns": "Which of the following circuits is more reliable in terms of component failure?", + "opt1": "Series circuit", + "opt2": "Parallel circuit", + "opt3": "Both circuits are equally reliable", + "opt4": "Series-parallel circuit", + "correct_option": "Parallel circuit", + "correct_option_index": 2 + }, + { + "qsns": "What happens to the current in a parallel circuit if one component fails?", + "opt1": "The current through the other components increases.", + "opt2": "The current through the other components decreases.", + "opt3": "The current through the other components stays the same.", + "opt4": "First Increases then stays same", + "correct_option": "The current through the other components stays the same.", + "correct_option_index": 3 + }, + { + "qsns": "What Is the total resistance of a series circuit?", + "opt1": "The sum of the individual conductance's", + "opt2": "The sum of the individual resistances", + "opt3": "The reciprocal of the sum of the individual resistances", + "opt4": "sum of square of individual resistances", + "correct_option": "The sum of the individual resistances", + "correct_option_index": 2 + }, + { + "qsns": "In a parallel circuit, each component has the same:", + "opt1": "Current flowing through it", + "opt2": "Voltage across it", + "opt3": "Same power consumed", + "opt4": "Energy consumed", + "correct_option": "Voltage across it", + "correct_option_index": 2 + }, + { + "qsns": "What Is the total resistance of a parallel circuit?", + "opt1": "Sum of the individual conductance's", + "opt2": "Sum of the individual resistances", + "opt3": "Reciprocal of the sum of the individual resistances", + "opt4": "Sum of reciprocal of individual conductance", + "correct_option": "Sum of the individual conductance's", + "correct_option_index": 1 + }, + { + "qsns": "What is the purpose of star-delta conversion?", + "opt1": "To reduce the starting current of a motor", + "opt2": "To increase the starting current of a motor", + "opt3": "To regulate the voltage levels of a three-phase supply", + "opt4": "All of above", + "correct_option": "To reduce the starting current of a motor", + "correct_option_index": 1 + }, + { + "qsns": "In which type of circuit is delta-star conversion commonly used?", + "opt1": "Motor control circuits", + "opt2": "Power distribution systems", + "opt3": "Generator", + "opt4": "Both a and b", + "correct_option": "Power distribution systems", + "correct_option_index": 2 + }, + { + "qsns": "What is the purpose of delta-star conversion?", + "opt1": "To reduce the starting current of a motor", + "opt2": "To increase the starting current of a motor", + "opt3": "To regulate the voltage levels of a three-phase supply", + "opt4": "None of above", + "correct_option": "To regulate the voltage levels of a three-phase supply", + "correct_option_index": 3 + }, + { + "qsns": "What is the difference between a star and delta configuration in a three-phase system?", + "opt1": "In a star configuration, the three phases are connected in a closed loop, while in a delta configuration, the three phases are connected to a common point or neutral.", + "opt2": "In a star configuration, the three phases are connected to a common point or neutral, while in a delta configuration, the three phases are connected in a closed loop.", + "opt3": "There is no difference between a star and delta configuration in a three-phase system.", + "opt4": "None of above", + "correct_option": "In a star configuration, the three phases are connected to a common point or neutral, while in a delta configuration, the three phases are connected in a closed loop.", + "correct_option_index": 2 + }, + { + "qsns": "In a star-delta conversion, what is re-arranged?", + "opt1": "The voltage levels of the three-phase supply", + "opt2": "The connections between the components of the circuit", + "opt3": "The starting current of a motor", + "opt4": "None of above", + "correct_option": "The connections between the components of the circuit", + "correct_option_index": 2 + }, + { + "qsns": "Which type of conversion is commonly used in motor control circuits?", + "opt1": "Star-delta conversion", + "opt2": "Delta-star conversion", + "opt3": "Both a and b", + "opt4": "None of above", + "correct_option": "Star-delta conversion", + "correct_option_index": 1 + }, + { + "qsns": "Which type of conversion is commonly used in power distribution systems?", + "opt1": "Star-delta conversion", + "opt2": "Delta-star conversion", + "opt3": "Both a and b", + "opt4": "None of above", + "correct_option": "Delta-star conversion", + "correct_option_index": 2 + }, + { + "qsns": "What is the primary advantage of using star-delta conversion in motor control circuits?", + "opt1": "It increases the starting current of the motor", + "opt2": "It reduces the starting current of the motor", + "opt3": "It regulates the voltage levels of the three-phase supply", + "opt4": "All of above", + "correct_option": "It reduces the starting current of the motor", + "correct_option_index": 2 + }, + { + "qsns": "What is the primary advantage of using delta-star conversion in power distribution systems?", + "opt1": "It increases the voltage levels of the three-phase supply", + "opt2": "It reduces the voltage levels of the three-phase supply", + "opt3": "It regulates the voltage levels of the three-phase supply", + "opt4": "None of above", + "correct_option": "It regulates the voltage levels of the three-phase supply", + "correct_option_index": 3 + }, + { + "qsns": "Which type of conversion is used to regulate the voltage levels of a three-phase supply?", + "opt1": "Star-delta conversion", + "opt2": "Delta-star conversion", + "opt3": "Both A and B", + "opt4": "None of above", + "correct_option": "Delta-star conversion", + "correct_option_index": 2 + }, + { + "qsns": "What is the purpose of delta-star conversion?", + "opt1": "To convert a three-phase system from a star to a delta configuration", + "opt2": "To reduce the starting current of a motor", + "opt3": "To regulate the voltage levels of a power distribution system", + "opt4": "None of above", + "correct_option": "To regulate the voltage levels of a power distribution system", + "correct_option_index": 3 + }, + { + "qsns": "Which of the following connections is used in a star configuration?", + "opt1": "The three phases are connected in a closed loop", + "opt2": "The three phases are connected to a common point or neutral", + "opt3": "Both A and B", + "opt4": "None of above", + "correct_option": "The three phases are connected to a common point or neutral", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following connections is used in a delta configuration?", + "opt1": "The three phases are connected in a closed loop", + "opt2": "The three phases are connected to a common point or neutral", + "opt3": "Both A and B", + "opt4": "None of above", + "correct_option": "The three phases are connected in a closed loop", + "correct_option_index": 1 + }, + { + "qsns": "What is the primary benefit of star-delta conversion in motor control circuits?", + "opt1": "It reduces the voltage levels", + "opt2": "It reduces the starting current of the motor", + "opt3": "It increases the speed of the motor", + "opt4": "None of above", + "correct_option": "It reduces the starting current of the motor", + "correct_option_index": 2 + }, + { + "qsns": "What is the primary benefit of delta-star conversion in power distribution systems?", + "opt1": "It reduces the voltage levels", + "opt2": "It regulates the voltage levels of the system", + "opt3": "It reduces the current levels", + "opt4": "It increases the voltage levels", + "correct_option": "It regulates the voltage levels of the system", + "correct_option_index": 2 + }, + { + "qsns": "What is the process involved in converting a three-phase system from a star to a delta configuration?", + "opt1": "Re-arranging the connections between the components of the circuit", + "opt2": "Replacing the components of the circuit", + "opt3": "Increasing the voltage levels of the system", + "opt4": "None of above", + "correct_option": "Re-arranging the connections between the components of the circuit", + "correct_option_index": 1 + }, + { + "qsns": "What is the process involved in converting a three-phase system from a delta to a star configuration?", + "opt1": "Re-arranging the connections between the components of the circuit", + "opt2": "Replacing the components of the circuit", + "opt3": "Decreasing the voltage levels of the system", + "opt4": "None of above", + "correct_option": "Re-arranging the connections between the components of the circuit", + "correct_option_index": 1 + }, + { + "qsns": "What is Kirchhoff's Current Law?", + "opt1": "The sum of voltages around a closed loop is zero", + "opt2": "The total current entering a node is equal to the total current leaving that node", + "opt3": "The sum of currents around a closed loop is zero", + "opt4": "Both a and b", + "correct_option": "The total current entering a node is equal to the total current leaving that node", + "correct_option_index": 2 + }, + { + "qsns": "What is Kirchhoff's Voltage Law?", + "opt1": "The sum of voltages around a closed loop is zero", + "opt2": "The total current entering a node is equal to the total current leaving that node", + "opt3": "The sum of currents around a closed loop is zero", + "opt4": "Both a and c", + "correct_option": "The sum of voltages around a closed loop is zero", + "correct_option_index": 1 + }, + { + "qsns": "What is the principle on which Kirchhoff's Current Law is based?", + "opt1": "Conservation of energy", + "opt2": "Conservation of charge", + "opt3": "Conservation of power", + "opt4": "Conservation of Potential", + "correct_option": "Conservation of charge", + "correct_option_index": 2 + }, + { + "qsns": "What is the principle on which Kirchhoff's Voltage Law is based?", + "opt1": "Conservation of energy", + "opt2": "Conservation of charge", + "opt3": "Conservation of power", + "opt4": "Conservation of Potential", + "correct_option": "Conservation of energy", + "correct_option_index": 1 + }, + { + "qsns": "What is the purpose of using Kirchhoff's laws in circuit analysis?", + "opt1": "To predict the behavior of electrical circuits", + "opt2": "To determine the currents and voltages in a circuit", + "opt3": "To analyze current flow and voltage drops in circuit", + "opt4": "All of above", + "correct_option": "All of above", + "correct_option_index": 4 + }, + { + "qsns": "What type of circuits can be analyzed using Kirchhoff's laws?", + "opt1": "Series circuits", + "opt2": "Parallel circuits", + "opt3": "Complex circuits", + "opt4": "Both a and b", + "correct_option": "Both a and b", + "correct_option_index": 4 + }, + { + "qsns": "What is the algebraic sum of the currents at a node according to Kirchhoff's Current Law?", + "opt1": "Always zero", + "opt2": "Always positive", + "opt3": "Always negative", + "opt4": "Always 1", + "correct_option": "Always zero", + "correct_option_index": 1 + }, + { + "qsns": "What is the algebraic sum of the voltage drops across all the components in a loop according to Kirchhoff's Voltage Law?", + "opt1": "Always zero", + "opt2": "Always positive", + "opt3": "Always negative", + "opt4": "Always 1", + "correct_option": "Always zero", + "correct_option_index": 1 + }, + { + "qsns": "Can Kirchhoff's laws be used to identify problems in a circuit?", + "opt1": "Yes", + "opt2": "No", + "opt3": "Sometimes", + "opt4": "Most of times", + "correct_option": "Yes", + "correct_option_index": 1 + }, + { + "qsns": "Why is understanding Kirchhoff's laws important in electrical and electronics engineering?", + "opt1": "To design and troubleshoot electrical circuits", + "opt2": "To predict the behavior of electrical circuits", + "opt3": "Both a and b", + "opt4": "None of above", + "correct_option": "Both a and b", + "correct_option_index": 3 + }, + { + "qsns": "Kirchhoff's current law is based on the principle of:", + "opt1": "Conservation of energy", + "opt2": "Conservation of charge", + "opt3": "Conservation of power", + "opt4": "Conservation of Potential", + "correct_option": "Conservation of charge", + "correct_option_index": 2 + }, + { + "qsns": "Kirchhoff's voltage law is based on the principle of:", + "opt1": "Conservation of energy", + "opt2": "Conservation of charge", + "opt3": "Conservation of power", + "opt4": "Conservation of Potential", + "correct_option": "Conservation of energy", + "correct_option_index": 1 + }, + { + "qsns": "Kirchhoff's current law states that the total current entering a node is:", + "opt1": "Greater than the total current leaving the node", + "opt2": "Equal to the total current leaving the node", + "opt3": "Less than the total current leaving the node", + "opt4": "None of above", + "correct_option": "Equal to the total current leaving the node", + "correct_option_index": 2 + }, + { + "qsns": "Kirchhoff's voltage law states that the sum of the voltages around any closed loop in a circuit is:", + "opt1": "Equal to zero", + "opt2": "Greater than zero", + "opt3": "Less than zero", + "opt4": "Equal to 1", + "correct_option": "Equal to zero", + "correct_option_index": 1 + }, + { + "qsns": "Kirchhoff's laws are fundamental laws in:", + "opt1": "Electrical circuit analysis", + "opt2": "Mechanical engineering", + "opt3": "Civil engineering", + "opt4": "All of above", + "correct_option": "Electrical circuit analysis", + "correct_option_index": 1 + }, + { + "qsns": "A linear circuit is one where the output response is:", + "opt1": "Directly proportional to the input signal", + "opt2": "Inversely proportional to the input signal", + "opt3": "Not related to the input signal", + "opt4": "None of above", + "correct_option": "Directly proportional to the input signal", + "correct_option_index": 1 + }, + { + "qsns": "Non-linear circuits do not follow a simple scaling rule, meaning that:", + "opt1": "The input and output signals are directly proportional", + "opt2": "The input and output signals are inversely proportional", + "opt3": "The relationship between the input and output signals may be more complex", + "opt4": "None of above", + "correct_option": "The relationship between the input and output signals may be more complex", + "correct_option_index": 3 + }, + { + "qsns": "Linear circuits are easy to analyze using mathematical tools such as:", + "opt1": "Kirchhoff's laws and Ohm's law", + "opt2": "Differential equations and Laplace transforms", + "opt3": "Both a and b", + "opt4": "None of above", + "correct_option": "Kirchhoff's laws and Ohm's law", + "correct_option_index": 1 + }, + { + "qsns": "Non-linear circuits often exhibit a threshold voltage or current, beyond which:", + "opt1": "The output response becomes distorted or unpredictable", + "opt2": "The output response becomes directly proportional to the input signal", + "opt3": "The output response remains constant", + "opt4": "All of above", + "correct_option": "The output response becomes distorted or unpredictable", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following circuits is an example of a non-linear circuit?", + "opt1": "Resistor-capacitor circuit", + "opt2": "Op-amp circuit", + "opt3": "Diode rectifier circuit", + "opt4": "All of above", + "correct_option": "Diode rectifier circuit", + "correct_option_index": 3 + }, + { + "qsns": "In a non-linear circuit, the relationship between the input and output signals may be more complex, meaning that:", + "opt1": "The circuit is always unstable", + "opt2": "The circuit is difficult to analyze", + "opt3": "The circuit is easy to analyze", + "opt4": "None of above", + "correct_option": "The circuit is difficult to analyze", + "correct_option_index": 2 + }, + { + "qsns": "Linear circuits are often used in:", + "opt1": "Simple electronic devices", + "opt2": "Advanced electronic devices", + "opt3": "Both A and B", + "opt4": "None of above", + "correct_option": "Simple electronic devices", + "correct_option_index": 1 + }, + { + "qsns": "Non-linear circuits are often used in:", + "opt1": "Simple electronic devices", + "opt2": "Advanced electronic devices", + "opt3": "Both A and B", + "opt4": "None of above", + "correct_option": "Advanced electronic devices", + "correct_option_index": 2 + }, + { + "qsns": "In a linear circuit, the output response is directly proportional to the input signal, meaning that if the input signal is doubled:", + "opt1": "The output signal will be halved", + "opt2": "The output signal will be doubled", + "opt3": "The output signal will not change", + "opt4": "The output signal will remain same", + "correct_option": "The output signal will be doubled", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following mathematical tools can be used to analyze linear circuits?", + "opt1": "Kirchhoff's laws", + "opt2": "Differential equations", + "opt3": "Both A and B", + "opt4": "None of above", + "correct_option": "Both A and B", + "correct_option_index": 3 + }, + { + "qsns": "Which type of circuit is easier to analyze using mathematical tools like Kirchhoff's laws?", + "opt1": "Linear circuit", + "opt2": "Non-linear circuit", + "opt3": "Both a and b are equally easier", + "opt4": "none of above circuit can be analyzed", + "correct_option": "Linear circuit", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following techniques is often used to analyze non-linear circuits?", + "opt1": "Nodal analysis", + "opt2": "Mesh analysis", + "opt3": "Nonlinear circuit analysis", + "opt4": "Both b and c", + "correct_option": "Nonlinear circuit analysis", + "correct_option_index": 3 + }, + { + "qsns": "What happens to the output response of a non-linear circuit when the input signal is too large or too small?", + "opt1": "It becomes distorted or unpredictable.", + "opt2": "It remains constant.", + "opt3": "It becomes linear", + "opt4": "It becomes diminished.", + "correct_option": "It becomes distorted or unpredictable.", + "correct_option_index": 1 + }, + { + "qsns": "Which type of circuit is commonly found in applications such as amplifiers and oscillators?", + "opt1": "Linear circuit", + "opt2": "Non-linear circuit", + "opt3": "Both types of circuits are equally common", + "opt4": "None of above", + "correct_option": "Non-linear circuit", + "correct_option_index": 2 + }, + { + "qsns": "What is the main difference between linear and non-linear circuits?", + "opt1": "Linear circuits have a predictable output response, while non-linear circuits do not", + "opt2": "Non-linear circuits follow a simple scaling rule, while linear circuits do not", + "opt3": "Both types of circuits behave in exactly the same way.", + "opt4": "None of above", + "correct_option": "Linear circuits have a predictable output response, while non-linear circuits do not", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following is an example of a linear circuit element?", + "opt1": "Diode", + "opt2": "Capacitor", + "opt3": "Resistor", + "opt4": "Both a and c", + "correct_option": "Resistor", + "correct_option_index": 3 + }, + { + "qsns": "Which of the following is an example of a non-linear circuit element?", + "opt1": "Diode", + "opt2": "Inductor", + "opt3": "Resistor", + "opt4": "Both a and c", + "correct_option": "Diode", + "correct_option_index": 1 + }, + { + "qsns": "Which type of circuit is more commonly used in digital electronics?", + "opt1": "Linear circuit", + "opt2": "Non-linear circuit", + "opt3": "Both types of circuits are equally common", + "opt4": "both a and b not used at all", + "correct_option": "Linear circuit", + "correct_option_index": 1 + }, + { + "qsns": "Which type of circuit requires AC analysis techniques?", + "opt1": "Bilateral circuits", + "opt2": "Unilateral circuits", + "opt3": "Both bilateral and unilateral circuits", + "opt4": "None of the above", + "correct_option": "Bilateral circuits", + "correct_option_index": 1 + }, + { + "qsns": "Which circuit element is an example of a unilateral element?", + "opt1": "Resistor", + "opt2": "Capacitor", + "opt3": "Inductor", + "opt4": "Diode", + "correct_option": "Diode", + "correct_option_index": 4 + }, + { + "qsns": "Which type of circuit can be analyzed using only DC circuit analysis techniques?", + "opt1": "Bilateral circuits", + "opt2": "Unilateral circuits", + "opt3": "Both bilateral and unilateral circuits", + "opt4": "None of the above", + "correct_option": "Bilateral circuits", + "correct_option_index": 1 + }, + { + "qsns": "What is another name for bilateral circuits?", + "opt1": "Asymmetric circuits", + "opt2": "Unilateral circuits", + "opt3": "Symmetric circuits", + "opt4": "AC circuits", + "correct_option": "Symmetric circuits", + "correct_option_index": 3 + }, + { + "qsns": "Which type of circuit element exhibits the same response to signals applied in either direction?", + "opt1": "Unilateral element", + "opt2": "Bilateral element", + "opt3": "Both unilateral and bilateral elements", + "opt4": "None of the above", + "correct_option": "Bilateral element", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following circuits is an example of a unilateral circuit?", + "opt1": "Diode rectifier circuit", + "opt2": "RC circuit", + "opt3": "LC circuit", + "opt4": "AC circuit", + "correct_option": "Diode rectifier circuit", + "correct_option_index": 1 + }, + { + "qsns": "Which type of circuit element requires consideration of the direction of the applied signal?", + "opt1": "Bilateral element", + "opt2": "Unilateral element", + "opt3": "Both A and B", + "opt4": "None of the above", + "correct_option": "Unilateral element", + "correct_option_index": 2 + }, + { + "qsns": "Which type of circuit exhibits both symmetric and asymmetric behavior?", + "opt1": "Unilateral circuit", + "opt2": "Bilateral circuit", + "opt3": "Circuits with both bilateral and unilateral elements", + "opt4": "None of the above", + "correct_option": "Circuits with both bilateral and unilateral elements", + "correct_option_index": 3 + }, + { + "qsns": "Which of the following is true regarding the analysis of circuits with both bilateral and unilateral elements?", + "opt1": "They require only DC circuit analysis techniques.", + "opt2": "They require only AC circuit analysis techniques.", + "opt3": "They require both DC and AC circuit analysis techniques.", + "opt4": "They cannot be analyzed.", + "correct_option": "They require both DC and AC circuit analysis techniques.", + "correct_option_index": 3 + }, + { + "qsns": "Which type of circuit elements respond identically to signals applied in either direction?", + "opt1": "Bilateral", + "opt2": "Unilateral", + "opt3": "Both A and B", + "opt4": "None of above", + "correct_option": "Bilateral", + "correct_option_index": 1 + }, + { + "qsns": "Which type of circuits require only DC circuit analysis techniques?", + "opt1": "Bilateral", + "opt2": "Unilateral", + "opt3": "Both A and B", + "opt4": "None of above", + "correct_option": "Bilateral", + "correct_option_index": 1 + }, + { + "qsns": "Which type of circuit elements respond differently to signals applied in different directions?", + "opt1": "Bilateral", + "opt2": "Unilateral", + "opt3": "Both A and B", + "opt4": "None of above", + "correct_option": "Unilateral", + "correct_option_index": 2 + }, + { + "qsns": "Which type of circuits require AC circuit analysis techniques?", + "opt1": "Bilateral", + "opt2": "Unilateral", + "opt3": "Both A and B", + "opt4": "None of above", + "correct_option": "Bilateral", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following is an example of a bilateral circuit element?", + "opt1": "Diode", + "opt2": "Resistor", + "opt3": "Transistor", + "opt4": "None of above", + "correct_option": "Resistor", + "correct_option_index": 2 + }, + { + "qsns": "Which type of circuits are also known as symmetric circuits?", + "opt1": "Bilateral", + "opt2": "Unilateral", + "opt3": "Both A and B", + "opt4": "None of above", + "correct_option": "Bilateral", + "correct_option_index": 1 + }, + { + "qsns": "Which type of circuits are also known as asymmetric circuits?", + "opt1": "Bilateral", + "opt2": "Unilateral", + "opt3": "Both A and B", + "opt4": "None of above", + "correct_option": "Unilateral", + "correct_option_index": 2 + }, + { + "qsns": "Which type of circuits can have both bilateral and unilateral elements?", + "opt1": "Bilateral circuits only", + "opt2": "Unilateral circuits only", + "opt3": "Circuits with both bilateral and unilateral elements", + "opt4": "None of above", + "correct_option": "Circuits with both bilateral and unilateral elements", + "correct_option_index": 3 + }, + { + "qsns": "In which type of circuits does the direction of the signal matter?", + "opt1": "Bilateral", + "opt2": "Unilateral", + "opt3": "Both A and B", + "opt4": "None of above", + "correct_option": "Unilateral", + "correct_option_index": 2 + }, + { + "qsns": "Which type of circuit must be analyzed using both DC and AC circuit analysis techniques?", + "opt1": "Bilateral circuits only", + "opt2": "Unilateral circuits only", + "opt3": "Circuits with both bilateral and unilateral elements", + "opt4": "None of above", + "correct_option": "Circuits with both bilateral and unilateral elements", + "correct_option_index": 3 + }, + { + "qsns": "Which of the following circuits is an example of a bilateral circuit?", + "opt1": "Diode rectifier circuit", + "opt2": "Resistor-capacitor circuit", + "opt3": "Transistor amplifier circuit", + "opt4": "None of the above", + "correct_option": "Resistor-capacitor circuit", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following circuits requires an external source of power to function?", + "opt1": "Passive circuit", + "opt2": "Active circuit", + "opt3": "Bilateral circuit", + "opt4": "Unilateral circuit", + "correct_option": "Active circuit", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following components is not present in passive circuits?", + "opt1": "Transistors", + "opt2": "Inductors", + "opt3": "Capacitors", + "opt4": "Resistors", + "correct_option": "Transistors", + "correct_option_index": 1 + }, + { + "qsns": "Which type of circuit is used in filters and impedance matching circuits?", + "opt1": "Passive circuits", + "opt2": "Active circuits", + "opt3": "Both a and b", + "opt4": "None of above", + "correct_option": "Passive circuits", + "correct_option_index": 1 + }, + { + "qsns": "Which type of circuit is used in amplifiers and oscillators?", + "opt1": "Passive circuits", + "opt2": "Active circuits", + "opt3": "Both a and b", + "opt4": "None of above", + "correct_option": "Active circuits", + "correct_option_index": 2 + }, + { + "qsns": "Which type of circuit requires an external power source to function?", + "opt1": "Passive circuits", + "opt2": "Active circuits", + "opt3": "Both a and b", + "opt4": "None of above", + "correct_option": "Active circuits", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following circuits can control signals?", + "opt1": "Passive circuits", + "opt2": "Active circuits", + "opt3": "Both a and b", + "opt4": "None of above", + "correct_option": "Active circuits", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following circuits attenuates signals?", + "opt1": "Passive circuits", + "opt2": "Active circuits", + "opt3": "Both a and b", + "opt4": "None of above", + "correct_option": "Passive circuits", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following components is an active component?", + "opt1": "Capacitor", + "opt2": "Transistor", + "opt3": "Resistor", + "opt4": "Inductor", + "correct_option": "Transistor", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following circuits can generate power gain?", + "opt1": "Passive circuit", + "opt2": "Active circuit", + "opt3": "Both A and B", + "opt4": "None of above", + "correct_option": "Active circuit", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following circuits can only attenuate or filter a signal?", + "opt1": "Passive circuit", + "opt2": "Active circuit", + "opt3": "Bilateral circuit", + "opt4": "Unilateral circuit", + "correct_option": "Passive circuit", + "correct_option_index": 1 + }, + { + "qsns": "Which type of circuit contains only passive components?", + "opt1": "Active circuit", + "opt2": "Bilateral circuit", + "opt3": "Passive circuit", + "opt4": "Unilateral circuit", + "correct_option": "Passive circuit", + "correct_option_index": 3 + }, + { + "qsns": "Which of the following circuits cannot perform mathematical operations on signals?", + "opt1": "Passive circuit", + "opt2": "Active circuit", + "opt3": "Bilateral circuit", + "opt4": "Unilateral circuit", + "correct_option": "Passive circuit", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following circuits is commonly used in filters and impedance matching circuits?", + "opt1": "Active circuit", + "opt2": "Bilateral circuit", + "opt3": "Unilateral circuit", + "opt4": "Passive circuit", + "correct_option": "Passive circuit", + "correct_option_index": 4 + }, + { + "qsns": "Which type of circuit can both attenuate and amplify signals?", + "opt1": "Passive circuit", + "opt2": "Active circuit", + "opt3": "Unilateral circuit", + "opt4": "Bilateral circuit", + "correct_option": "Active circuit", + "correct_option_index": 2 + }, + { + "qsns": "Which type of circuit exhibits the same behavior in both directions of current flow?", + "opt1": "Passive circuit", + "opt2": "Active circuit", + "opt3": "Bilateral circuit", + "opt4": "Unilateral circuit", + "correct_option": "Bilateral circuit", + "correct_option_index": 3 + }, + { + "qsns": "Which type of circuit can only exhibit behavior in one direction of current flow?", + "opt1": "Passive circuit", + "opt2": "Active circuit", + "opt3": "Bilateral circuit", + "opt4": "Unilateral circuit", + "correct_option": "Unilateral circuit", + "correct_option_index": 4 + }, + { + "qsns": "What is the superposition theorem used for?", + "opt1": "To simplify complex circuits", + "opt2": "To analyze AC circuits", + "opt3": "To analyze non-linear circuits", + "opt4": "To calculate power in circuits", + "correct_option": "To simplify complex circuits", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following is a necessary condition for applying the superposition theorem?", + "opt1": "The circuit must be linear", + "opt2": "The circuit must be passive", + "opt3": "The circuit must be bilateral", + "opt4": "The circuit must contain only resistors", + "correct_option": "The circuit must be linear", + "correct_option_index": 1 + }, + { + "qsns": "In a circuit with multiple voltage sources, how is the superposition theorem applied?", + "opt1": "Each voltage source is turned on individually and the resulting current is added together", + "opt2": "Each voltage source is turned on individually and the resulting voltage is added together", + "opt3": "Each voltage source is turned on individually and the resulting current is subtracted from the total current", + "opt4": "Each voltage source is turned on individually and the resulting voltage is subtracted from the total voltage", + "correct_option": "Each voltage source is turned on individually and the resulting current is added together", + "correct_option_index": 1 + }, + { + "qsns": "In a circuit with multiple current sources, how is the superposition theorem applied?", + "opt1": "Each current source is turned on individually and the resulting voltage is added together", + "opt2": "Each current source is turned on individually and the resulting voltage is subtracted from the total voltage", + "opt3": "Each current source is turned on individually and the resulting current is added together", + "opt4": "Each current source is turned on individually and the resulting current is subtracted from the total current", + "correct_option": "Each current source is turned on individually and the resulting current is added together", + "correct_option_index": 3 + }, + { + "qsns": "What is the main advantage of using the superposition theorem?", + "opt1": "It simplifies complex circuits", + "opt2": "It eliminates the need for Kirchhoff's laws", + "opt3": "It reduces power consumption in circuits", + "opt4": "It can only be used for DC circuits", + "correct_option": "It simplifies complex circuits", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following is a disadvantage of using the superposition theorem?", + "opt1": "It is time-consuming to apply to large circuits", + "opt2": "It can only be used for circuits with few components", + "opt3": "It requires specialized equipment", + "opt4": "It provides accurate results for non-linear circuits", + "correct_option": "It is time-consuming to apply to large circuits", + "correct_option_index": 1 + }, + { + "qsns": "What is the superposition theorem based on?", + "opt1": "Ohm's law", + "opt2": "Faraday's law", + "opt3": "Kirchhoff's laws", + "opt4": "The principle of superposition", + "correct_option": "The principle of superposition", + "correct_option_index": 4 + }, + { + "qsns": "What type of circuits is the superposition theorem used to solve?", + "opt1": "Series circuits", + "opt2": "Parallel circuits", + "opt3": "Complex circuits", + "opt4": "Linear circuits", + "correct_option": "Linear circuits", + "correct_option_index": 4 + }, + { + "qsns": "According to the superposition theorem, what happens when multiple sources are present in a circuit?", + "opt1": "They cancel each other out", + "opt2": "They add together", + "opt3": "Each source is considered independently", + "opt4": "None of the above", + "correct_option": "Each source is considered independently", + "correct_option_index": 3 + }, + { + "qsns": "What is the superposition theorem based on?", + "opt1": "Kirchhoff's current law", + "opt2": "Kirchhoff's voltage law", + "opt3": "Ohm's law", + "opt4": "Faraday's law", + "correct_option": "Ohm's law", + "correct_option_index": 3 + }, + { + "qsns": "Which of the following is a requirement for the superposition theorem to be applicable?", + "opt1": "The circuit must be linear", + "opt2": "The circuit must contain only passive components", + "opt3": "The circuit must have only one voltage source", + "opt4": "The circuit must be in series configuration", + "correct_option": "The circuit must be linear", + "correct_option_index": 1 + }, + { + "qsns": "How is the superposition theorem applied to a circuit with multiple sources?", + "opt1": "Each source is turned on one at a time, with all other sources turned off", + "opt2": "All sources are turned on at the same time", + "opt3": "All sources are turned off", + "opt4": "Each source is turned on in pairs, with all other sources turned off", + "correct_option": "Each source is turned on one at a time, with all other sources turned off", + "correct_option_index": 1 + }, + { + "qsns": "What is the primary advantage of using the superposition theorem to solve circuits?", + "opt1": "It allows for a quick and easy solution", + "opt2": "It can be applied to any type of circuit", + "opt3": "It provides a more accurate solution than other methods", + "opt4": "It simplifies the circuit and reduces the number of components", + "correct_option": "It simplifies the circuit and reduces the number of components", + "correct_option_index": 4 + }, + { + "qsns": "Which of the following is a limitation of the superposition theorem?", + "opt1": "It cannot be used on circuits with more than two sources", + "opt2": "It requires complex calculations", + "opt3": "It can only be used on circuits with passive components", + "opt4": "It is not applicable to non-linear circuits", + "correct_option": "It is not applicable to non-linear circuits", + "correct_option_index": 4 + }, + { + "qsns": "What is the result of applying the superposition theorem to a circuit with multiple sources?", + "opt1": "The total voltage and current in the circuit are calculated", + "opt2": "The voltage and current in each component are calculated", + "opt3": "The power dissipated by each component is calculated", + "opt4": "The resistance of each component is calculated", + "correct_option": "The total voltage and current in the circuit are calculated", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following is a step in applying the superposition theorem to a circuit?", + "opt1": "Calculate the total resistance of the circuit", + "opt2": "Calculate the voltage and current of each source individually", + "opt3": "Add the voltage and current of each source together", + "opt4": "Replace each source with a resistor of equivalent value", + "correct_option": "Add the voltage and current of each source together", + "correct_option_index": 3 + }, + { + "qsns": "What is the formula for calculating the voltage across a component in a circuit using the superposition theorem?", + "opt1": "V=IR", + "opt2": "V=I/R", + "opt3": "V=Sum(V1+V2+...+Vn)", + "opt4": "V=Sum(I1+I2+...+In)", + "correct_option": "V=Sum(V1+V2+...+Vn)", + "correct_option_index": 3 + }, + { + "qsns": "Superposition theorem is applicable to which type of circuits?", + "opt1": "Linear circuits only", + "opt2": "Non-linear circuits only", + "opt3": "Both linear and non-linear circuits", + "opt4": "Passive circuits only", + "correct_option": "Linear circuits only", + "correct_option_index": 1 + }, + { + "qsns": "Superposition theorem states that in a linear circuit with multiple sources, the total response is equal to:", + "opt1": "The sum of all individual responses", + "opt2": "The product of all individual responses", + "opt3": "The average of all individual responses", + "opt4": "None of the above", + "correct_option": "The sum of all individual responses", + "correct_option_index": 1 + }, + { + "qsns": "In superposition theorem, which of the following needs to be kept constant while analyzing each individual source?", + "opt1": "Voltage", + "opt2": "Current", + "opt3": "Resistance", + "opt4": "All of the above", + "correct_option": "Resistance", + "correct_option_index": 3 + }, + { + "qsns": "Superposition theorem is used to calculate which of the following in a circuit?", + "opt1": "Voltage", + "opt2": "Current", + "opt3": "Power", + "opt4": "All of the above", + "correct_option": "All of the above", + "correct_option_index": 4 + }, + { + "qsns": "In a circuit with two voltage sources, how many separate analyses are required using the superposition theorem?", + "opt1": "1", + "opt2": "2", + "opt3": "3", + "opt4": "4", + "correct_option": "2", + "correct_option_index": 2 + }, + { + "qsns": "The superposition theorem is not applicable to circuits with which of the following components?", + "opt1": "Resistors", + "opt2": "Capacitors", + "opt3": "Inductors", + "opt4": "Diodes", + "correct_option": "Diodes", + "correct_option_index": 4 + }, + { + "qsns": "What is the Thevenin equivalent circuit?", + "opt1": "A circuit consisting of a single voltage source and a single resistor", + "opt2": "A circuit consisting of a single current source and a single resistor", + "opt3": "A circuit consisting of multiple voltage sources and resistors", + "opt4": "A circuit consisting of multiple voltage sources and a single resistor", + "correct_option": "A circuit consisting of a single voltage source and a single resistor", + "correct_option_index": 1 + }, + { + "qsns": "What is the purpose of Thevenin's theorem?", + "opt1": "To simplify complex circuits into simpler, equivalent circuits", + "opt2": "To measure voltage and current in a circuit", + "opt3": "To determine the power dissipated in a circuit", + "opt4": "All of above", + "correct_option": "To simplify complex circuits into simpler, equivalent circuits", + "correct_option_index": 1 + }, + { + "qsns": "What is the first step in determining the Thevenin equivalent circuit?", + "opt1": "Identify the load circuit that is connected to the circuit of interest", + "opt2": "Remove the load circuit from the circuit of interest", + "opt3": "Determine the open-circuit voltage Vth across the terminals where the load was connected", + "opt4": "Determine the internal resistance Rth of the circuit between those terminals", + "correct_option": "Identify the load circuit that is connected to the circuit of interest", + "correct_option_index": 1 + }, + { + "qsns": "What is the second step in determining the Thevenin equivalent circuit?", + "opt1": "Identify the load circuit that is connected to the circuit of interest", + "opt2": "Remove the load circuit from the circuit of interest", + "opt3": "Determine the open-circuit voltage Vth across the terminals where the load was connected", + "opt4": "Determine the internal resistance Rth of the circuit between those terminals", + "correct_option": "Remove the load circuit from the circuit of interest", + "correct_option_index": 2 + }, + { + "qsns": "What is the third step in determining the Thevenin equivalent circuit?", + "opt1": "Identify the load circuit that is connected to the circuit of interest", + "opt2": "Determine the open-circuit voltage Vth across the terminals where the load was connected", + "opt3": "Determine the internal resistance Rth of the circuit between those terminals", + "opt4": "None of above", + "correct_option": "Determine the open-circuit voltage Vth across the terminals where the load was connected", + "correct_option_index": 2 + }, + { + "qsns": "What is the fourth step in determining the Thevenin equivalent circuit?", + "opt1": "Identify the load circuit that is connected to the circuit of interest", + "opt2": "Determine the open-circuit voltage Vth across the terminals where the load was connected", + "opt3": "Determine the internal resistance Rth of the circuit between those terminals", + "opt4": "None of above", + "correct_option": "Determine the internal resistance Rth of the circuit between those terminals", + "correct_option_index": 3 + }, + { + "qsns": "What is the final step in determining the Thevenin equivalent circuit?", + "opt1": "Draw the Thevenin equivalent circuit with the voltage source Vth and the resistor Rth", + "opt2": "Draw the Thevenin equivalent circuit with multiple voltage sources and resistors", + "opt3": "Determine the power delivered to the load circuit", + "opt4": "None of above", + "correct_option": "Draw the Thevenin equivalent circuit with the voltage source Vth and the resistor Rth", + "correct_option_index": 1 + }, + { + "qsns": "What is the advantage of using the Thevenin equivalent circuit?", + "opt1": "It simplifies complex circuits into simpler, equivalent circuits", + "opt2": "It allows the voltage and current across the load to be easily determined", + "opt3": "It is useful for designing circuits that are optimized for a specific load", + "opt4": "All of above", + "correct_option": "All of above", + "correct_option_index": 4 + }, + { + "qsns": "Can Thevenin's theorem be used for non-linear circuits?", + "opt1": "No, it only applies to linear circuits", + "opt2": "Yes, it can be applied to both linear and non-linear circuits", + "opt3": "It only applies to circuits with voltage sources and resistors", + "opt4": "It only applies to circuits with current sources", + "correct_option": "No, it only applies to linear circuits", + "correct_option_index": 1 + }, + { + "qsns": "What is the purpose of the Thevenin equivalent circuit?", + "opt1": "To calculate the voltage and current across a load circuit", + "opt2": "To determine the power delivered to a load circuit", + "opt3": "To simplify complex circuits into simpler, equivalent circuits", + "opt4": "All of above", + "correct_option": "All of above", + "correct_option_index": 4 + }, + { + "qsns": "What is Thevenin's theorem used for in electrical engineering?", + "opt1": "To simplify complex circuits", + "opt2": "To increase the resistance of a circuit", + "opt3": "To reduce the voltage of a circuit", + "opt4": "To add more components to a circuit", + "correct_option": "To simplify complex circuits", + "correct_option_index": 1 + }, + { + "qsns": "What is the advantage of using Thevenin's theorem to simplify a circuit?", + "opt1": "It reduces the number of components that need to be analyzed", + "opt2": "It increases the voltage of the circuit", + "opt3": "It decreases the resistance of the circuit", + "opt4": "It adds more components to the circuit", + "correct_option": "It reduces the number of components that need to be analyzed", + "correct_option_index": 1 + }, + { + "qsns": "What is the difference between a Thevenin equivalent circuit and a Norton equivalent circuit?", + "opt1": "A Thevenin equivalent circuit uses a voltage source and a resistor, while a Norton equivalent circuit uses a current source and a resistor.", + "opt2": "A Thevenin equivalent circuit uses a current source and a resistor, while a Norton equivalent circuit uses a voltage source and a resistor.", + "opt3": "There is no difference between a Thevenin and Norton equivalent circuit.", + "opt4": "The choice between a Thevenin and Norton equivalent circuit depends on the type of circuit being analyzed.", + "correct_option": "A Thevenin equivalent circuit uses a voltage source and a resistor, while a Norton equivalent circuit uses a current source and a resistor.", + "correct_option_index": 1 + }, + { + "qsns": "What is the primary use of the Thevenin equivalent circuit in circuit design?", + "opt1": "To optimize circuits for a specific load", + "opt2": "To increase the resistance of a circuit", + "opt3": "To reduce the voltage of a circuit", + "opt4": "To add more components to a circuit", + "correct_option": "To optimize circuits for a specific load", + "correct_option_index": 1 + }, + { + "qsns": "What is Norton's theorem?", + "opt1": "A method to calculate the resistance of a circuit.", + "opt2": "A method to simplify complex circuits by using an equivalent voltage source and a series resistor.", + "opt3": "A method to simplify complex circuits by using an equivalent current source and a parallel resistor.", + "opt4": "Both a and c", + "correct_option": "A method to simplify complex circuits by using an equivalent current source and a parallel resistor.", + "correct_option_index": 3 + }, + { + "qsns": "What is the Norton equivalent current?", + "opt1": "The current that flows through a resistor in the circuit.", + "opt2": "The current that would flow if the output terminals of the circuit were short-circuited.", + "opt3": "The current that would flow if the output terminals of the circuit were open-circuited.", + "opt4": "None of above", + "correct_option": "The current that would flow if the output terminals of the circuit were short-circuited.", + "correct_option_index": 2 + }, + { + "qsns": "What is the equivalent resistance seen from the output terminals in Norton's theorem?", + "opt1": "The resistance of the load resistor.", + "opt2": "The resistance of the circuit with all voltage sources replaced by their internal resistances.", + "opt3": "The resistance of the circuit with all current sources replaced by their internal resistances.", + "opt4": "None of above", + "correct_option": "The resistance of the circuit with all voltage sources replaced by their internal resistances.", + "correct_option_index": 2 + }, + { + "qsns": "What is the Norton equivalent circuit of a linear circuit?", + "opt1": "A voltage source and a series resistor", + "opt2": "A current source and a series resistor", + "opt3": "A voltage source and a parallel resistor", + "opt4": "A current source and a parallel resistor", + "correct_option": "A current source and a parallel resistor", + "correct_option_index": 4 + }, + { + "qsns": "What is the relationship between Norton's theorem and Thevenin's theorem?", + "opt1": "They are unrelated.", + "opt2": "They provide different methods to simplify complex circuits", + "opt3": "They are equivalent and can be used interchangeably.", + "opt4": "Thevenin's theorem can be used in place for Norton's theorem but not vice versa", + "correct_option": "They are equivalent and can be used interchangeably.", + "correct_option_index": 3 + }, + { + "qsns": "What is the advantage of using Norton's theorem?", + "opt1": "It simplifies complex circuits", + "opt2": "It allows the calculation of voltage at any point in the circuit", + "opt3": "It is applicable to nonlinear circuits", + "opt4": "It requires only one step to calculate the output", + "correct_option": "It simplifies complex circuits", + "correct_option_index": 1 + }, + { + "qsns": "What is the limitation of Norton's theorem?", + "opt1": "It can provide a method for calculating the power in the circuit.", + "opt2": "It can be used to analyze circuits with capacitors and inductors.", + "opt3": "It cannot be used for circuits with resistors in parallel", + "opt4": "It can only be used for circuits in steady-state conditions.", + "correct_option": "It can only be used for circuits in steady-state conditions.", + "correct_option_index": 4 + }, + { + "qsns": "Can Norton's theorem be used to analyze non-linear circuits?", + "opt1": "Yes, as long as the circuit is simple.", + "opt2": "It depends on the type of non-linearity in the circuit.", + "opt3": "No, Norton's theorem is only applicable to linear circuits.", + "opt4": "Both a and b", + "correct_option": "No, Norton's theorem is only applicable to linear circuits.", + "correct_option_index": 3 + }, + { + "qsns": "How is the Norton equivalent circuit connected to the load resistor?", + "opt1": "In series.", + "opt2": "In parallel", + "opt3": "The Norton equivalent circuit is not connected to the load resistor.", + "opt4": "None of above", + "correct_option": "In parallel", + "correct_option_index": 2 + }, + { + "qsns": "The Norton equivalent circuit must be connected to an external load to obtain the desired output.", + "opt1": "A voltage source and a series resistor", + "opt2": "A current source and a series resistor", + "opt3": "A voltage source and a parallel resistor", + "opt4": "A current source and a parallel resistor", + "correct_option": "A current source and a parallel resistor", + "correct_option_index": 4 + }, + { + "qsns": "When using Norton's theorem, what must be disconnected from the circuit first?", + "opt1": "The voltage source", + "opt2": "The current source", + "opt3": "The load resistor", + "opt4": "The switch", + "correct_option": "The load resistor", + "correct_option_index": 3 + }, + { + "qsns": "How is the Norton equivalent current calculated?", + "opt1": "By open-circuiting the output terminals and finding the current", + "opt2": "By short-circuiting the output terminals and finding the current", + "opt3": "By connecting a load resistor to the output terminals and finding the current", + "opt4": "By calculating the voltage across the output terminals and dividing by the resistance", + "correct_option": "By short-circuiting the output terminals and finding the current", + "correct_option_index": 2 + }, + { + "qsns": "What is the equivalent resistance seen from the output terminals in Norton's theorem?", + "opt1": "The total resistance of the circuit", + "opt2": "The resistance of the load resistor", + "opt3": "The resistance of the voltage source", + "opt4": "The resistance seen from the output terminals with all voltage sources replaced by their internal resistances", + "correct_option": "The resistance seen from the output terminals with all voltage sources replaced by their internal resistances", + "correct_option_index": 4 + }, + { + "qsns": "In Norton's theorem, what is the Norton equivalent current source dependent on?", + "opt1": "The load resistor", + "opt2": "The voltage across the circuit", + "opt3": "The current through the circuit", + "opt4": "The total resistance of the circuit", + "correct_option": "The current through the circuit", + "correct_option_index": 3 + }, + { + "qsns": "How many steps are involved in applying Norton's theorem?", + "opt1": "Two", + "opt2": "Three", + "opt3": "Four", + "opt4": "Five", + "correct_option": "Five", + "correct_option_index": 4 + }, + { + "qsns": "What is the main requirement for a circuit to be analyzed using Norton's theorem?", + "opt1": "It must be in steady-state conditions", + "opt2": "It must contain only resistors and voltage sources", + "opt3": "It must be a linear circuit", + "opt4": "It must contain only resistors and current sources", + "correct_option": "It must be a linear circuit", + "correct_option_index": 3 + }, + { + "qsns": "What is the equivalent circuit obtained in Norton's theorem?", + "opt1": "A voltage source in series with a resistor", + "opt2": "A current source in series with a resistor", + "opt3": "A voltage source in parallel with a resistor", + "opt4": "A current source in parallel with a resistor", + "correct_option": "A current source in parallel with a resistor", + "correct_option_index": 4 + }, + { + "qsns": "What is the purpose of the Norton equivalent circuit?", + "opt1": "To calculate the resistance of the circuit.", + "opt2": "To replace the original circuit with a simpler circuit.", + "opt3": "To provide a method for calculating the voltage at any point in the circuit.", + "opt4": "All of above", + "correct_option": "To replace the original circuit with a simpler circuit.", + "correct_option_index": 2 + }, + { + "qsns": "What is the maximum power transfer theorem?", + "opt1": "It states that the power transferred from a source to a load is maximum when the load impedance is equal to the source impedance.", + "opt2": "It states that the power transferred from a source to a load is maximum when the load impedance is greater than the source impedance.", + "opt3": "It states that the power transferred from a source to a load is maximum when the load impedance is less than the source impedance.", + "opt4": "None of the above.", + "correct_option": "It states that the power transferred from a source to a load is maximum when the load impedance is equal to the source impedance.", + "correct_option_index": 1 + }, + { + "qsns": "What type of circuits does the maximum power transfer theorem apply to?", + "opt1": "Linear circuits only.", + "opt2": "Non-linear circuits only.", + "opt3": "Both linear and non-linear circuits.", + "opt4": "None of the above.", + "correct_option": "Linear circuits only.", + "correct_option_index": 1 + }, + { + "qsns": "What is the advantage of applying the maximum power transfer theorem in a circuit?", + "opt1": "It reduces the power loss in the circuit.", + "opt2": "It increases the power loss in the circuit.", + "opt3": "It reduces the voltage and current in the circuit.", + "opt4": "None of the above.", + "correct_option": "It reduces the power loss in the circuit.", + "correct_option_index": 1 + }, + { + "qsns": "How does the maximum power transfer theorem help in designing power systems?", + "opt1": "It helps to optimize the power transfer in the system.", + "opt2": "It helps to increase the efficiency of the system.", + "opt3": "It helps to reduce the power loss in the system.", + "opt4": "All of the above.", + "correct_option": "All of the above.", + "correct_option_index": 4 + }, + { + "qsns": "What happens when the load impedance is not equal to the source impedance in a circuit?", + "opt1": "The power transfer is maximum.", + "opt2": "The power transfer is minimum.", + "opt3": "The power transfer is zero.", + "opt4": "None of the above.", + "correct_option": "The power transfer is minimum.", + "correct_option_index": 2 + }, + { + "qsns": "Is the maximum power transfer theorem applicable to AC circuits?", + "opt1": "Yes, it is applicable to AC circuits.", + "opt2": "No, it is applicable only to DC circuits.", + "opt3": "It depends on the type of load.", + "opt4": "None of the above.", + "correct_option": "Yes, it is applicable to AC circuits.", + "correct_option_index": 1 + }, + { + "qsns": "What is the formula for calculating the maximum power transfer in a circuit?", + "opt1": "P=V*2/R", + "opt2": "P=I^2R", + "opt3": "P=V^2/2R", + "opt4": "P=V^2/R+L", + "correct_option": "P=I^2R", + "correct_option_index": 2 + }, + { + "qsns": "Can the maximum power transfer occur at multiple values of load impedance?", + "opt1": "Yes, it can occur at multiple values of load impedance.", + "opt2": "No, it can occur at only one value of load impedance.", + "opt3": "It depends on the source impedance.", + "opt4": "None of the above.", + "correct_option": "No, it can occur at only one value of load impedance.", + "correct_option_index": 2 + }, + { + "qsns": "What is the condition for maximum power transfer in a circuit?", + "opt1": "The load impedance must be equal to the source impedance.", + "opt2": "The load impedance must be greater than the source impedance.", + "opt3": "The load impedance must be less than the source impedance.", + "opt4": "None of the above.", + "correct_option": "The load impedance must be equal to the source impedance.", + "correct_option_index": 1 + }, + { + "qsns": "What is the maximum efficiency that can be achieved in a circuit using the maximum power transfer theorem?", + "opt1": "100%", + "opt2": "50%", + "opt3": "25%", + "opt4": "It depends on the circuit.", + "correct_option": "50%", + "correct_option_index": 2 + }, + { + "qsns": "The maximum power transfer theorem is applicable to:", + "opt1": "Linear circuits only.", + "opt2": "Non-linear circuits only.", + "opt3": "Both linear and non-linear circuits.", + "opt4": "All of above", + "correct_option": "Linear circuits only.", + "correct_option_index": 1 + }, + { + "qsns": "The maximum power transfer occurs when:", + "opt1": "The load impedance is zero.", + "opt2": "The load impedance is equal to the source impedance", + "opt3": "The load impedance is infinite.", + "opt4": "When load impedance is double of source impedance", + "correct_option": "The load impedance is equal to the source impedance", + "correct_option_index": 2 + }, + { + "qsns": "What is the formula for calculating the maximum power transfer?", + "opt1": "Pmax=V*2", + "opt2": "Pmax=V^2 2", + "opt3": "Pmax=V^2/4R", + "opt4": "Pmax=V^2 2/(2R)", + "correct_option": "Pmax=V^2/4R", + "correct_option_index": 3 + }, + { + "qsns": "In which applications is the maximum power transfer theorem useful?", + "opt1": "Audio", + "opt2": "Power supplies", + "opt3": "Power transmission systems", + "opt4": "All of the above", + "correct_option": "All of the above", + "correct_option_index": 4 + }, + { + "qsns": "What happens when the load impedance is much larger than the source impedance?", + "opt1": "The power transfer is maximum", + "opt2": "The power transfer is minimum.", + "opt3": "The power transfer is zero", + "opt4": "None of above", + "correct_option": "The power transfer is minimum.", + "correct_option_index": 2 + }, + { + "qsns": "The maximum power transfer theorem helps to:", + "opt1": "Minimize the amount of energy lost in transmission.", + "opt2": "Maximize the amount of energy lost in transmission.", + "opt3": "Have no effect on the amount of energy lost in transmission.", + "opt4": "Helps to distribute energy evenly in transmission.", + "correct_option": "Minimize the amount of energy lost in transmission.", + "correct_option_index": 1 + }, + { + "qsns": "The maximum power transfer theorem is useful in designing and optimizing:", + "opt1": "Power systems", + "opt2": "Lighting systems", + "opt3": "Communication systems", + "opt4": "Both a and c", + "correct_option": "Power systems", + "correct_option_index": 1 + }, + { + "qsns": "What is the time constant of an R-C circuit consisting of a 1 kΩ resistor and a 100 nF capacitor?", + "opt1": "1 ms", + "opt2": "100 µs", + "opt3": "10 µs", + "opt4": "10 ms", + "correct_option": "100 µs", + "correct_option_index": 2 + }, + { + "qsns": "In an R-L circuit, the voltage across the inductor leads the current by how many degrees?", + "opt1": "0°", + "opt2": "45°", + "opt3": "90°", + "opt4": "180°", + "correct_option": "90°", + "correct_option_index": 3 + }, + { + "qsns": "What is the resonant frequency of an R-L-C circuit with a 100 Ω resistor, 1 mH inductor, and a 100 nF capacitor?", + "opt1": "160 kHz", + "opt2": "16 kHz", + "opt3": "1.6 kHz", + "opt4": "1.6 MHz", + "correct_option": "16 kHz", + "correct_option_index": 2 + }, + { + "qsns": "In an R-L-C circuit, what happens to the Impedance at resonance?", + "opt1": "It is zero", + "opt2": "It is at a minimum", + "opt3": "It is at a maximum", + "opt4": "It is infinite", + "correct_option": "It is infinite", + "correct_option_index": 4 + }, + { + "qsns": "A series R-C circuit has a resistor of 100 Ω and a capacitor of 10 µF. What is the cutoff frequency?", + "opt1": "15.9 Hz", + "opt2": "159 Hz", + "opt3": "1.59 kHz", + "opt4": "1.59 Hz", + "correct_option": "159 Hz", + "correct_option_index": 2 + }, + { + "qsns": "In an R-L circuit, what happens to the impedance as the frequency increases?", + "opt1": "It increases", + "opt2": "It decreases", + "opt3": "It remains constant", + "opt4": "It oscillates", + "correct_option": "It increases", + "correct_option_index": 1 + }, + { + "qsns": "What is the phase angle between the voltage and current in an R-L-C circuit at resonance?", + "opt1": "0°", + "opt2": "45°", + "opt3": "90°", + "opt4": "180°", + "correct_option": "0°", + "correct_option_index": 1 + }, + { + "qsns": "What is the time constant of an R-L circuit consisting of a 100 Ω resistor and a 10 mH inductor?", + "opt1": "100 µs", + "opt2": "1 µs", + "opt3": "10 µs", + "opt4": "1 ms", + "correct_option": "100 µs", + "correct_option_index": 1 + }, + { + "qsns": "In an R-L-C circuit, what happens to the bandwidth as the quality factor increases?", + "opt1": "It increases", + "opt2": "It decreases", + "opt3": "It remains constant", + "opt4": "It oscillates", + "correct_option": "It increases", + "correct_option_index": 1 + }, + { + "qsns": "A parallel R-C circuit has a resistor of 100 kΩ and a capacitor of 1 µF. What is the cutoff (corner) frequency?", + "opt1": "15.92 Hz", + "opt2": "15.92 kHz", + "opt3": "159.2 Hz", + "opt4": "1.59 Hz", + "correct_option": "1.59 Hz", + "correct_option_index": 4 + }, + { + "qsns": "Which type of circuit contains an inductor and a resistor?", + "opt1": "R-L circuit", + "opt2": "R-C circuit", + "opt3": "R-L-C circuit", + "opt4": "None of the above", + "correct_option": "R-L circuit", + "correct_option_index": 1 + }, + { + "qsns": "What is the time constant of an R-C circuit?", + "opt1": "R/C", + "opt2": "CR", + "opt3": "RC", + "opt4": "1/RC", + "correct_option": "R/C", + "correct_option_index": 1 + }, + { + "qsns": "What is the voltage across an inductor in an R-L circuit at steady state?", + "opt1": "Zero", + "opt2": "Infinite", + "opt3": "The same as the voltage across the resistor", + "opt4": "None of the above", + "correct_option": "Infinite", + "correct_option_index": 2 + }, + { + "qsns": "What happens to the current in an R-L circuit if the inductance is increased?", + "opt1": "The current decreases", + "opt2": "The current increases", + "opt3": "The current remains the same", + "opt4": "The current becomes erratic", + "correct_option": "The current remains the same", + "correct_option_index": 3 + }, + { + "qsns": "In an R-C circuit, what happens to the current as the capacitor becomes fully charged?", + "opt1": "The current increases", + "opt2": "The current decreases", + "opt3": "The current remains the same", + "opt4": "The current becomes zero", + "correct_option": "The current becomes zero", + "correct_option_index": 4 + }, + { + "qsns": "What is the resonance frequency of an R-L-C circuit?", + "opt1": "1/(2pisqrt(LC))", + "opt2": "2pisqrt(LC)", + "opt3": "1/(L*C)", + "opt4": "None of the above", + "correct_option": "1/(2pisqrt(LC))", + "correct_option_index": 1 + }, + { + "qsns": "What happens to the impedance of an R-L-C circuit at resonance?", + "opt1": "The impedance is maximum", + "opt2": "The impedance is minimum", + "opt3": "The impedance is zero", + "opt4": "The impedance remains the same", + "correct_option": "The impedance is maximum", + "correct_option_index": 1 + }, + { + "qsns": "In an R-L-C circuit, what happens to the phase angle at resonance?", + "opt1": "The phase angle is zero", + "opt2": "The phase angle is 180 degrees", + "opt3": "The phase angle is 90 degrees", + "opt4": "The phase angle remains the same", + "correct_option": "The phase angle is zero", + "correct_option_index": 1 + }, + { + "qsns": "What is the resonant frequency of an AC series circuit consisting of a 20mH Inductor and a 10µF capacitor?", + "opt1": "159.15 Hz", + "opt2": "318.3 Hz", + "opt3": "500 Hz", + "opt4": "1000 Hz", + "correct_option": "159.15 Hz", + "correct_option_index": 1 + }, + { + "qsns": "What is the resonant frequency of an AC parallel circuit consisting of a 10mH inductor and a capacitor 100µF?", + "opt1": "318.3 Hz", + "opt2": "1000 Hz", + "opt3": "159.15 Hz", + "opt4": "159.15 Hz", + "correct_option": "159.15 Hz", + "correct_option_index": 4 + }, + { + "qsns": "What happens to the Impedance of an AC series resonant circuit at resonance?", + "opt1": "It is minimum", + "opt2": "It is maximum", + "opt3": "It is zero", + "opt4": "It is infinity", + "correct_option": "It is maximum", + "correct_option_index": 2 + }, + { + "qsns": "What happens to the current in an AC parallel resonant circuit at resonance?", + "opt1": "It is minimum", + "opt2": "It is maximum", + "opt3": "It is zero", + "opt4": "It is infinity", + "correct_option": "It is maximum", + "correct_option_index": 2 + }, + { + "qsns": "What is the power factor of an AC series resonant circuit at resonance?", + "opt1": "Unity", + "opt2": "Zero", + "opt3": "Negative", + "opt4": "Indeterminate", + "correct_option": "Zero", + "correct_option_index": 2 + }, + { + "qsns": "What is the power factor of an AC parallel resonant circuit at resonance?", + "opt1": "Unity", + "opt2": "Zero", + "opt3": "Negative", + "opt4": "Indeterminate", + "correct_option": "Zero", + "correct_option_index": 2 + }, + { + "qsns": "What is the phase angle between the voltage and current in an AC series resonant circuit at resonance?", + "opt1": "0 degrees", + "opt2": "45 degrees", + "opt3": "90 degrees", + "opt4": "180 degrees", + "correct_option": "0 degrees", + "correct_option_index": 1 + }, + { + "qsns": "What is the phase angle between the voltage and current in an AC parallel resonant circuit at resonance?", + "opt1": "0 degrees", + "opt2": "45 degrees", + "opt3": "90 degrees", + "opt4": "180 degrees", + "correct_option": "0 degrees", + "correct_option_index": 1 + }, + { + "qsns": "What happens to the voltage across the capacitor in an AC series resonant circuit at resonance?", + "opt1": "It is maximum", + "opt2": "It is minimum", + "opt3": "It is zero", + "opt4": "It is infinity", + "correct_option": "It is minimum", + "correct_option_index": 2 + }, + { + "qsns": "In an AC series resonant circuit, at the resonant frequency, what is the power factor?", + "opt1": "Zero", + "opt2": "Unity", + "opt3": "Inductive", + "opt4": "Capacitive", + "correct_option": "Unity", + "correct_option_index": 2 + }, + { + "qsns": "What is the resonant frequency of an AC series resonant circuit with an inductance of 5mH and a capacitance 10µF?", + "opt1": "3.18 kHz", + "opt2": "31.8 kHz", + "opt3": "318 kHz", + "opt4": "3.18 MHz", + "correct_option": "3.18 kHz", + "correct_option_index": 1 + }, + { + "qsns": "In an AC parallel resonant circuit, at the resonant frequency, what is the impedance?", + "opt1": "Zero", + "opt2": "Infinite", + "opt3": "Minimum", + "opt4": "Maximum", + "correct_option": "Minimum", + "correct_option_index": 3 + }, + { + "qsns": "What is the resonant frequency of an AC parallel resonant circuit with an inductance of 20mH and a capacitance of 0.1µF?", + "opt1": "3.57 kHz", + "opt2": "35.7 kHz", + "opt3": "357 kHz", + "opt4": "3.57 MHz", + "correct_option": "3.57 kHz", + "correct_option_index": 1 + }, + { + "qsns": "What is the phase relationship between the voltage across the capacitor and the voltage across the inductor in an AC series resonant circuit at resonance?", + "opt1": "They are in phase", + "opt2": "They are 180 degrees out of phase", + "opt3": "They cancel each other out", + "opt4": "None of the above", + "correct_option": "They are 180 degrees out of phase", + "correct_option_index": 2 + }, + { + "qsns": "What is the phase relationship between the current and the voltage in an AC series resonant circuit at resonance?", + "opt1": "They are in phase", + "opt2": "They are 180 degrees out of phase", + "opt3": "They cancel each other out", + "opt4": "None of the above", + "correct_option": "They are in phase", + "correct_option_index": 1 + }, + { + "qsns": "What is the unit of active power?", + "opt1": "Volt-amperes reactive (VAR)", + "opt2": "Watts (W)", + "opt3": "Volt-amperes (VA)", + "opt4": "None of the above", + "correct_option": "Watts (W)", + "correct_option_index": 2 + }, + { + "qsns": "What is the formula for reactive power?", + "opt1": "Q=V*I", + "opt2": "Q=V*I*cos(theta)", + "opt3": "Q=V*I*sin(theta)", + "opt4": "None of the above", + "correct_option": "Q=V*I*sin(theta)", + "correct_option_index": 3 + }, + { + "qsns": "What is the unit of reactive power?", + "opt1": "Volt-amperes reactive (VAR)", + "opt2": "Watts (W)", + "opt3": "Volt-amperes (VA)", + "opt4": "None of the above", + "correct_option": "Volt-amperes reactive (VAR)", + "correct_option_index": 1 + }, + { + "qsns": "What is the formula for active power?", + "opt1": "P=V^2I", + "opt2": "P=V*I*cos(theta)", + "opt3": "P=V*I*sin(theta)", + "opt4": "None of the above", + "correct_option": "P=V*I*cos(theta)", + "correct_option_index": 2 + }, + { + "qsns": "What is the unit of apparent power?", + "opt1": "Volt-amperes reactive (VAR)", + "opt2": "Watts (W)", + "opt3": "Volt-amperes (VA)", + "opt4": "None of the above", + "correct_option": "Volt-amperes (VA)", + "correct_option_index": 3 + }, + { + "qsns": "What is the formula for power factor?", + "opt1": "pf=Q/S", + "opt2": "pf=P/Q", + "opt3": "pf=P/S", + "opt4": "None of the above", + "correct_option": "pf=P/S", + "correct_option_index": 3 + }, + { + "qsns": "What is the unit of power factor?", + "opt1": "Volt-amperes reactive (VAR)", + "opt2": "Watts (W)", + "opt3": "Volt-amperes (VA)", + "opt4": "None of the above", + "correct_option": "None of the above", + "correct_option_index": 4 + }, + { + "qsns": "What is the relationship between active power and reactive power?", + "opt1": "They are the same thing", + "opt2": "Reactive power is always greater than active power", + "opt3": "Active power is always greater than reactive power", + "opt4": "They are two different types of power", + "correct_option": "They are the same thing", + "correct_option_index": 1 + }, + { + "qsns": "What is the formula for apparent power?", + "opt1": "S=V", + "opt2": "S=V*I*cos(theta)", + "opt3": "S=V^2I*sin(theta)", + "opt4": "None of the above", + "correct_option": "S=V", + "correct_option_index": 1 + }, + { + "qsns": "What is the significance of power factor in electrical circuits?", + "opt1": "It determines the maximum power that can be delivered to the circuit", + "opt2": "It measures the efficiency of the circuit in using the power delivered to it", + "opt3": "It is a measure of the resistance of the circuit", + "opt4": "None of the above", + "correct_option": "It measures the efficiency of the circuit in using the power delivered to it", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following is a measure of how efficiently the circuit is using the power delivered to it?", + "opt1": "Active power", + "opt2": "Reactive power", + "opt3": "Apparent power", + "opt4": "Power factor", + "correct_option": "Power factor", + "correct_option_index": 4 + }, + { + "qsns": "Which type of power is used in the circuit to perform useful work?", + "opt1": "Active power", + "opt2": "Reactive power", + "opt3": "Apparent power", + "opt4": "None of the above", + "correct_option": "Active power", + "correct_option_index": 1 + }, + { + "qsns": "Which type of power is stored and released by the circuit?", + "opt1": "Active power", + "opt2": "Reactive power", + "opt3": "Apparent power", + "opt4": "None of the above", + "correct_option": "Reactive power", + "correct_option_index": 2 + }, + { + "qsns": "What is the power factor of a circuit that has 100 W of active power and 120 VA of apparent power?", + "opt1": "0.83", + "opt2": "1.20", + "opt3": "0.20", + "opt4": "0.01", + "correct_option": "0.83", + "correct_option_index": 1 + }, + { + "qsns": "What happens to the power factor of a circuit if the reactive power increases?", + "opt1": "It increases", + "opt2": "It decreases", + "opt3": "It remains the same", + "opt4": "Cannot be determined", + "correct_option": "It decreases", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following is not a measure of power in an AC circuit?", + "opt1": "Volt-amperes reactive (VAR)", + "opt2": "Watts (W)", + "opt3": "Volt-amperes (VA)", + "opt4": "Hertz (Hz)", + "correct_option": "Hertz (Hz)", + "correct_option_index": 4 + }, + { + "qsns": "What is the maximum efficiency that can be achieved in a circuit using the maximum power transfer theorem?", + "opt1": "100%", + "opt2": "50%", + "opt3": "25%", + "opt4": "It depends on the circuit.", + "correct_option": "50%", + "correct_option_index": 2 + }, + { + "qsns": "What is the time constant of an R-C circuit consisting of a 1 kΩ resistor and a 100 nF capacitor?", + "opt1": "1 ms", + "opt2": "100 µs", + "opt3": "10 µs", + "opt4": "10 ms", + "correct_option": "100 µs", + "correct_option_index": 2 + }, + { + "qsns": "In an R-L circuit, the voltage across the inductor leads the current by how many degrees?", + "opt1": "0°", + "opt2": "45°", + "opt3": "90°", + "opt4": "180°", + "correct_option": "90°", + "correct_option_index": 3 + }, + { + "qsns": "What is the resonant frequency of an R-L-C circuit with a 100 Ω resistor, 1 mH inductor, and a 100 nF capacitor?", + "opt1": "160 kHz", + "opt2": "16 kHz", + "opt3": "1.6 kHz", + "opt4": "1.6 MHz", + "correct_option": "16 kHz", + "correct_option_index": 2 + }, + { + "qsns": "In an R-L-C circuit, what happens to the Impedance at resonance?", + "opt1": "It is zero", + "opt2": "It is at a minimum", + "opt3": "It is at a maximum", + "opt4": "It is infinite", + "correct_option": "It is at a minimum", + "correct_option_index": 2 + }, + { + "qsns": "What is the phase angle between the voltage and current in an R-L-C circuit at resonance?", + "opt1": "0°", + "opt2": "45°", + "opt3": "90°", + "opt4": "180°", + "correct_option": "0°", + "correct_option_index": 1 + }, + { + "qsns": "What is the time constant of an R-L circuit consisting of a 100 Ω resistor and a 10 mH inductor?", + "opt1": "100 µs", + "opt2": "1 µs", + "opt3": "10 µs", + "opt4": "1 ms", + "correct_option": "100 µs", + "correct_option_index": 1 + }, + { + "qsns": "In an R-L-C circuit, what happens to the bandwidth as the quality factor increases?", + "opt1": "It increases", + "opt2": "It decreases", + "opt3": "It remains constant", + "opt4": "It oscillates", + "correct_option": "It decreases", + "correct_option_index": 2 + }, + { + "qsns": "A parallel R-C circuit has a resistor of 100 kΩ and a capacitor of 1 µF. What is the cutoff (corner) frequency?", + "opt1": "15.92 Hz", + "opt2": "15.92 kHz", + "opt3": "159.2 Hz", + "opt4": "1.59 Hz", + "correct_option": "1.59 Hz", + "correct_option_index": 4 + }, + { + "qsns": "What is the time constant of an R-C circuit?", + "opt1": "R/C", + "opt2": "CR", + "opt3": "RC", + "opt4": "1/RC", + "correct_option": "RC", + "correct_option_index": 3 + }, + { + "qsns": "What is the voltage across an inductor in an R-L circuit at steady state?", + "opt1": "Zero", + "opt2": "Infinite", + "opt3": "The same as the voltage across the resistor", + "opt4": "None of the above", + "correct_option": "Zero", + "correct_option_index": 1 + }, + { + "qsns": "What is the resonance frequency of an R-L-C circuit?", + "opt1": "1/(2pisqrt(LC))", + "opt2": "2pisqrt(LC)", + "opt3": "1/(L*C)", + "opt4": "None of the above", + "correct_option": "1/(2pisqrt(LC))", + "correct_option_index": 1 + }, + { + "qsns": "What happens to the impedance of an R-L-C circuit at resonance?", + "opt1": "The impedance is maximum", + "opt2": "The impedance is minimum", + "opt3": "The impedance is zero", + "opt4": "The impedance remains the same", + "correct_option": "The impedance is minimum", + "correct_option_index": 2 + }, + { + "qsns": "What happens to the Impedance of an AC series resonant circuit at resonance?", + "opt1": "It is minimum", + "opt2": "It is maximum", + "opt3": "It is zero", + "opt4": "It is infinity", + "correct_option": "It is minimum", + "correct_option_index": 1 + }, + { + "qsns": "What happens to the current in an AC parallel resonant circuit at resonance?", + "opt1": "It is minimum", + "opt2": "It is maximum", + "opt3": "It is zero", + "opt4": "It is infinity", + "correct_option": "It is minimum", + "correct_option_index": 1 + }, + { + "qsns": "What is the power factor of an AC series resonant circuit at resonance?", + "opt1": "Unity", + "opt2": "Zero", + "opt3": "Negative", + "opt4": "Indeterminate", + "correct_option": "Unity", + "correct_option_index": 1 + }, + { + "qsns": "What is the power factor of an AC parallel resonant circuit at resonance?", + "opt1": "Unity", + "opt2": "Zero", + "opt3": "Negative", + "opt4": "Indeterminate", + "correct_option": "Unity", + "correct_option_index": 1 + }, + { + "qsns": "What happens to the voltage across the capacitor in an AC series resonant circuit at resonance?", + "opt1": "It is maximum", + "opt2": "It is minimum", + "opt3": "It is zero", + "opt4": "It is infinity", + "correct_option": "It is maximum", + "correct_option_index": 1 + }, + { + "qsns": "In an AC parallel resonant circuit, at the resonant frequency, what is the impedance?", + "opt1": "Zero", + "opt2": "Infinite", + "opt3": "Minimum", + "opt4": "Maximum", + "correct_option": "Maximum", + "correct_option_index": 4 + }, + { + "qsns": "What is the resonant frequency of an AC parallel resonant circuit with an inductance of 20mH and a capacitance of 0.1µF?", + "opt1": "3.57 kHz", + "opt2": "35.7 kHz", + "opt3": "357 kHz", + "opt4": "3.57 MHz", + "correct_option": "3.57 kHz", + "correct_option_index": 1 + }, + { + "qsns": "What is the relationship between active power and reactive power?", + "opt1": "They are the same thing", + "opt2": "Reactive power is always greater than active power", + "opt3": "Active power is always greater than reactive power", + "opt4": "They are two different types of power", + "correct_option": "They are two different types of power", + "correct_option_index": 4 + }, + { + "qsns": "Which BJT configuration has unity voltage gain?", + "opt1": "Common Emitter", + "opt2": "Common Base", + "opt3": "Common Collector", + "opt4": "Both A and B", + "correct_option": "Common Collector", + "correct_option_index": 3 + }, + { + "qsns": "Which biasing technique uses a fixed DC voltage applied to the base terminal with respect to the emitter terminal?", + "opt1": "Fixed Bias", + "opt2": "Self-Bias", + "opt3": "Both A and B", + "opt4": "None of above", + "correct_option": "Fixed Bias", + "correct_option_index": 1 + }, + { + "qsns": "Which biasing technique uses a resistor in series with the base-emitter junction for negative feedback?", + "opt1": "Fixed Bias", + "opt2": "Self-Bias", + "opt3": "Both A and B", + "opt4": "None of above", + "correct_option": "Self-Bias", + "correct_option_index": 2 + }, + { + "qsns": "Which BJT configuration has low voltage gain and high current gain?", + "opt1": "Common Emitter", + "opt2": "Common Base", + "opt3": "Common Collector", + "opt4": "Both A and B", + "correct_option": "Common Collector", + "correct_option_index": 3 + }, + { + "qsns": "In which BJT configuration is the collector terminal common to both input and output circuits?", + "opt1": "Common Emitter", + "opt2": "Common Base", + "opt3": "Common Collector", + "opt4": "Both b and c", + "correct_option": "Common Collector", + "correct_option_index": 3 + }, + { + "qsns": "Which biasing technique is stable with changes in temperature and transistor parameters?", + "opt1": "Fixed Bias", + "opt2": "Self-Bias", + "opt3": "Both A and B", + "opt4": "None of above", + "correct_option": "Self-Bias", + "correct_option_index": 2 + }, + { + "qsns": "Which BJT configuration is commonly used in voltage amplifier circuits?", + "opt1": "Common Emitter", + "opt2": "Common Base", + "opt3": "Common Collector", + "opt4": "Both A and B", + "correct_option": "Common Emitter", + "correct_option_index": 1 + }, + { + "qsns": "In which BJT configuration is the base terminal common to both input and output circuits?", + "opt1": "Common Emitter", + "opt2": "Common Base", + "opt3": "Common Collector", + "opt4": "Both A and B", + "correct_option": "Common Base", + "correct_option_index": 2 + }, + { + "qsns": "Which model is used to analyze a circuit's behavior when a small AC signal is applied?", + "opt1": "Large Signal Model", + "opt2": "Small Signal Model", + "opt3": "Both A and B", + "opt4": "None of above", + "correct_option": "Small Signal Model", + "correct_option_index": 2 + }, + { + "qsns": "Which model is used to analyze a circuit's behavior when a large DC signal is applied?", + "opt1": "Large Signal Model", + "opt2": "Small Signal Model", + "opt3": "Both A and B", + "opt4": "None of above", + "correct_option": "Large Signal Model", + "correct_option_index": 1 + }, + { + "qsns": "Which model uses linear circuit analysis techniques such as superposition, Thevenin's theorem, and Norton's theorem?", + "opt1": "Large Signal Model", + "opt2": "Small Signal Model", + "opt3": "Both A and B", + "opt4": "None of above", + "correct_option": "Small Signal Model", + "correct_option_index": 2 + }, + { + "qsns": "Which model uses nonlinear circuit analysis techniques such as load-line analysis and graphical analysis?", + "opt1": "Large Signal Model", + "opt2": "Small Signal Model", + "opt3": "Both A and B", + "opt4": "None of above", + "correct_option": "Large Signal Model", + "correct_option_index": 1 + }, + { + "qsns": "Which model represents the transistor as a voltage-controlled current source?", + "opt1": "Large Signal Model", + "opt2": "Small Signal Model", + "opt3": "Both A and B", + "opt4": "None of above", + "correct_option": "Small Signal Model", + "correct_option_index": 2 + }, + { + "qsns": "Which model includes the effects of the nonlinear components such as diodes, transistors, and operational amplifiers?", + "opt1": "Large Signal Model", + "opt2": "Small Signal Model", + "opt3": "Both A and B", + "opt4": "None of above", + "correct_option": "Large Signal Model", + "correct_option_index": 1 + }, + { + "qsns": "Which model is used to analyze switching circuits?", + "opt1": "Large Signal Model of BJT", + "opt2": "Small Signal Model of BJT", + "opt3": "Both A and B", + "opt4": "None of above", + "correct_option": "Large Signal Model of BJT", + "correct_option_index": 1 + }, + { + "qsns": "Which model is used to design and analyze amplifier circuits?", + "opt1": "Large Signal Model of BJT", + "opt2": "Small Signal Model of BJT", + "opt3": "Both A and B", + "opt4": "None of above", + "correct_option": "Small Signal Model of BJT", + "correct_option_index": 2 + }, + { + "qsns": "Which model uses the transistor parameters such as hfe, hie, and hoe to calculate the voltage gain and current gain of the circuit?", + "opt1": "Large Signal Model of BJT", + "opt2": "Small Signal Model of BJT", + "opt3": "Both A and B", + "opt4": "None of above", + "correct_option": "Small Signal Model of BJT", + "correct_option_index": 2 + }, + { + "qsns": "Which model uses the transistor parameters such as saturation voltage, Vce(sat), and cut-off voltage, Vce(cut-off) to analyze the circuit's behavior?", + "opt1": "Large Signal Model of BJT", + "opt2": "Small Signal Model of BJT", + "opt3": "Both A and B", + "opt4": "None of above", + "correct_option": "Large Signal Model of BJT", + "correct_option_index": 1 + }, + { + "qsns": "What does MOSFET stand for?", + "opt1": "Metal-Oxide-Semiconductor Field-Effect Transistor", + "opt2": "Magnetic-Oscillation-Silicon Field-Effect Transistor", + "opt3": "Multi-Oscillator-Silicon Field-Effect Transistor", + "opt4": "None of above", + "correct_option": "Metal-Oxide-Semiconductor Field-Effect Transistor", + "correct_option_index": 1 + }, + { + "qsns": "In which region of operation does the MOSFET act as a voltage-controlled resistor?", + "opt1": "Cut-off region", + "opt2": "Saturation region", + "opt3": "Triode region", + "opt4": "None of above", + "correct_option": "Triode region", + "correct_option_index": 3 + }, + { + "qsns": "What is the threshold voltage of a MOSFET?", + "opt1": "The voltage required to turn on the MOSFET", + "opt2": "The voltage required to turn off the MOSFET", + "opt3": "The voltage at which the MOSFET conducts maximum current", + "opt4": "The voltage at which the MOSFET conducts minimum current", + "correct_option": "The voltage required to turn on the MOSFET", + "correct_option_index": 1 + }, + { + "qsns": "Which type of MOSFET has a lower on-resistance and higher switching speed?", + "opt1": "Enhancement-mode MOSFET", + "opt2": "Depletion-mode MOSFET", + "opt3": "Both have the same characteristics", + "opt4": "None of above", + "correct_option": "Enhancement-mode MOSFET", + "correct_option_index": 1 + }, + { + "qsns": "What is the full form of CMOS?", + "opt1": "Complementary Metal-Oxide-Semiconductor", + "opt2": "Complex Metal-Oxide-Semiconductor", + "opt3": "Complementary Magnetic-Oscillation-Semiconductor", + "opt4": "Complementary Magnetic Oxide Semiconductor", + "correct_option": "Complementary Metal-Oxide-Semiconductor", + "correct_option_index": 1 + }, + { + "qsns": "Which logic family uses CMOS technology?", + "opt1": "TTL", + "opt2": "ECL", + "opt3": "CMOS", + "opt4": "All of above", + "correct_option": "CMOS", + "correct_option_index": 3 + }, + { + "qsns": "Which type of logic gate is used to implement the CMOS circuit?", + "opt1": "NAND gate", + "opt2": "NOR gate", + "opt3": "Both NAND and NOR gates", + "opt4": "None of above", + "correct_option": "Both NAND and NOR gates", + "correct_option_index": 3 + }, + { + "qsns": "What is the main advantage of CMOS technology over other logic families?", + "opt1": "Low power consumption", + "opt2": "High speed", + "opt3": "Low cost", + "opt4": "All of above", + "correct_option": "Low power consumption", + "correct_option_index": 1 + }, + { + "qsns": "Which type of MOSFET is more commonly used in digital logic circuits?", + "opt1": "N-channel MOSFET", + "opt2": "P-channel MOSFET", + "opt3": "Both A and B are equally used", + "opt4": "None of above", + "correct_option": "N-channel MOSFET", + "correct_option_index": 1 + }, + { + "qsns": "Which application of MOSFET is used in power electronics?", + "opt1": "Switching", + "opt2": "Amplification", + "opt3": "Oscillation", + "opt4": "All of above", + "correct_option": "Switching", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following describes the working principle of a MOSFET?", + "opt1": "A voltage applied to the gate terminal creates an electric field that controls the current flow through the channel between the source and drain terminals.", + "opt2": "The current flow through the channel between the source and drain terminals controls the voltage applied to the gate terminal.", + "opt3": "The current flow through the channel between the source and drain terminals is independent of the voltage applied to the gate terminal.", + "opt4": "None of above", + "correct_option": "A voltage applied to the gate terminal creates an electric field that controls the current flow through the channel between the source and drain terminals.", + "correct_option_index": 1 + }, + { + "qsns": "What is the basic building block of a CMOS circuit?", + "opt1": "Bipolar Junction Transistor (BJT)", + "opt2": "Field Effect Transistor (FET)", + "opt3": "Both A and B", + "opt4": "None of above", + "correct_option": "Field Effect Transistor (FET)", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following describes the working principle of a CMOS circuit?", + "opt1": "The output is a function of the input voltage and the current flowing through the transistor.", + "opt2": "The output is a function of the input voltage and the voltage level at the gate of the transistor.", + "opt3": "The output is a function of the input voltage and the logic level of the transistor", + "opt4": "None of above", + "correct_option": "The output is a function of the input voltage and the voltage level at the gate of the transistor.", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following statements is true about MOSFETs?", + "opt1": "They have a high input impedance and a low output impedance.", + "opt2": "They have a low input impedance and a high output impedance.", + "opt3": "They have both high input and output impedances.", + "opt4": "All of above", + "correct_option": "They have a high input impedance and a low output impedance.", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following describes the typical applications of MOSFETs?", + "opt1": "Digital logic circuits and memory devices", + "opt2": "Power amplifiers and switching circuits", + "opt3": "Power switching and amplification", + "opt4": "Both A and B", + "correct_option": "Both A and B", + "correct_option_index": 4 + }, + { + "qsns": "Which of the following is an advantage of CMOS technology?", + "opt1": "Low power consumption", + "opt2": "High speed operation", + "opt3": "High gain", + "opt4": "All of above", + "correct_option": "Low power consumption", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following statements is true about CMOS circuits?", + "opt1": "They are sensitive to noise and interference.", + "opt2": "They have a higher power consumption compared to other technologies.", + "opt3": "They are immune to noise and interference and have low power consumption.", + "opt4": "None of above", + "correct_option": "They are immune to noise and interference and have low power consumption.", + "correct_option_index": 3 + }, + { + "qsns": "Which of the following describes the typical applications of CMOS circuits?", + "opt1": "Microprocessors and digital logic circuits", + "opt2": "Power amplifiers and switching circuits", + "opt3": "Both A and B", + "opt4": "None of above", + "correct_option": "Microprocessors and digital logic circuits", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following statements is true about MOSFETs and CMOS circuits?", + "opt1": "MOSFETs are more suitable for digital logic circuits, while CMOS circuits are more suitable for power switching applications.", + "opt2": "Both MOSFETs and CMOS circuits can be used for power switching and digital logic circuits.", + "opt3": "MOSFETs are more suitable for power switching applications, while CMOS circuits are more suitable for digital logic circuits.", + "opt4": "None of above", + "correct_option": "MOSFETs are more suitable for power switching applications, while CMOS circuits are more suitable for digital logic circuits.", + "correct_option_index": 3 + }, + { + "qsns": "Which type of oscillator uses a resistor and capacitor in a feedback circuit?", + "opt1": "RC oscillator", + "opt2": "LC oscillator", + "opt3": "Crystal oscillator", + "opt4": "None of the above", + "correct_option": "RC oscillator", + "correct_option_index": 1 + }, + { + "qsns": "What determines the frequency of an RC oscillator?", + "opt1": "The time constant of the RC circuit", + "opt2": "The resonant frequency of the tank circuit", + "opt3": "The inductance of a coil", + "opt4": "The capacitance of a capacitor", + "correct_option": "The time constant of the RC circuit", + "correct_option_index": 1 + }, + { + "qsns": "Which type of oscillator uses an inductor and capacitor in a feedback circuit?", + "opt1": "RC oscillator", + "opt2": "LC oscillator", + "opt3": "Crystal oscillator", + "opt4": "None of the above", + "correct_option": "LC oscillator", + "correct_option_index": 2 + }, + { + "qsns": "What determines the frequency of an LC oscillator?", + "opt1": "The time constant of an RC circuit", + "opt2": "The resonant frequency of a tank circuit", + "opt3": "The inductance of a coil", + "opt4": "The capacitance of a capacitor", + "correct_option": "The resonant frequency of a tank circuit", + "correct_option_index": 2 + }, + { + "qsns": "Which type of oscillator uses a quartz crystal as the resonant element in the feedback circuit?", + "opt1": "RC oscillator", + "opt2": "LC oscillator", + "opt3": "Crystal oscillator", + "opt4": "None of the above", + "correct_option": "Crystal oscillator", + "correct_option_index": 3 + }, + { + "qsns": "What is the primary advantage of using a crystal oscillator?", + "opt1": "Low cost", + "opt2": "Simplicity", + "opt3": "High frequency stability and accuracy", + "opt4": "Low power consumption", + "correct_option": "High frequency stability and accuracy", + "correct_option_index": 3 + }, + { + "qsns": "What is the role of the feedback circuit in an oscillator?", + "opt1": "To amplify the input signal", + "opt2": "To filter out unwanted frequencies", + "opt3": "To provide positive feedback to sustain oscillations", + "opt4": "To provide negative feedback to stabilize the oscillations", + "correct_option": "To provide positive feedback to sustain oscillations", + "correct_option_index": 3 + }, + { + "qsns": "Which type of oscillator is commonly used in digital circuits?", + "opt1": "RC oscillator", + "opt2": "LC oscillator", + "opt3": "Crystal oscillator", + "opt4": "Square wave generator", + "correct_option": "Crystal oscillator", + "correct_option_index": 3 + }, + { + "qsns": "Which type of oscillator is typically the most complex and expensive?", + "opt1": "RC oscillator", + "opt2": "LC oscillator", + "opt3": "Crystal oscillator", + "opt4": "None of the above", + "correct_option": "Crystal oscillator", + "correct_option_index": 3 + }, + { + "qsns": "What is the purpose of the resonant circuit in an oscillator?", + "opt1": "To amplify the input signal", + "opt2": "To filter out unwanted frequencies", + "opt3": "To provide positive feedback to sustain oscillations", + "opt4": "To provide negative feedback to stabilize the oscillations", + "correct_option": "To provide positive feedback to sustain oscillations", + "correct_option_index": 3 + }, + { + "qsns": "What is an RC oscillator?", + "opt1": "An oscillator that uses a resistor and capacitor in a feedback circuit", + "opt2": "An oscillator that uses an inductor and capacitor in a feedback circuit", + "opt3": "An oscillator that uses a quartz crystal in a feedback circuit", + "opt4": "An oscillator that uses a diode in a feedback circuit", + "correct_option": "An oscillator that uses a resistor and capacitor in a feedback circuit", + "correct_option_index": 1 + }, + { + "qsns": "What is the advantage of using an LC oscillator over an RC oscillator?", + "opt1": "Greater simplicity and lower cost", + "opt2": "Higher frequency stability and accuracy", + "opt3": "Higher power output", + "opt4": "Greater frequency range", + "correct_option": "Higher frequency stability and accuracy", + "correct_option_index": 2 + }, + { + "qsns": "What is a tank circuit in an LC oscillator?", + "opt1": "A circuit that filters out unwanted frequencies", + "opt2": "A circuit that amplifies the input signal", + "opt3": "A circuit that provides positive feedback", + "opt4": "A circuit that consists of an inductor and capacitor in a feedback circuit", + "correct_option": "A circuit that consists of an inductor and capacitor in a feedback circuit", + "correct_option_index": 4 + }, + { + "qsns": "What is the resonant frequency of a crystal oscillator determined by?", + "opt1": "The time constant of the RC circuit", + "opt2": "The resonant frequency of the tank circuit", + "opt3": "The frequency of the crystal", + "opt4": "The input voltage of the oscillator", + "correct_option": "The frequency of the crystal", + "correct_option_index": 3 + }, + { + "qsns": "What is the advantage of using a crystal oscillator over an LC oscillator?", + "opt1": "Greater simplicity and lower cost", + "opt2": "Higher frequency stability and accuracy", + "opt3": "Higher power output", + "opt4": "Greater frequency range", + "correct_option": "Higher frequency stability and accuracy", + "correct_option_index": 2 + }, + { + "qsns": "Which type of oscillator is typically used in clocks and digital circuits?", + "opt1": "RC oscillator", + "opt2": "LC oscillator", + "opt3": "Crystal oscillator", + "opt4": "Relaxation oscillator", + "correct_option": "Crystal oscillator", + "correct_option_index": 3 + }, + { + "qsns": "What is the purpose of positive feedback in an oscillator?", + "opt1": "To amplify the input signal", + "opt2": "To provide a frequency-selective response", + "opt3": "To sustain oscillations", + "opt4": "To filter out unwanted frequencies", + "correct_option": "To sustain oscillations", + "correct_option_index": 3 + }, + { + "qsns": "What is the role of the resonant circuit in an oscillator?", + "opt1": "To provide positive feedback", + "opt2": "To amplify the input signal", + "opt3": "To filter out unwanted frequencies", + "opt4": "To provide a frequency-selective response", + "correct_option": "To provide a frequency-selective response", + "correct_option_index": 4 + }, + { + "qsns": "What is the advantage of using a high-Q resonant circuit in an oscillator?", + "opt1": "Greater simplicity and lower cost", + "opt2": "Higher frequency stability and accuracy", + "opt3": "Higher power output", + "opt4": "Greater frequency range", + "correct_option": "Higher frequency stability and accuracy", + "correct_option_index": 2 + }, + { + "qsns": "What is the duty cycle of a square wave generator?", + "opt1": "The time period of the waveform", + "opt2": "The ratio of the pulse width to the time period", + "opt3": "The amplitude of the waveform", + "opt4": "The frequency of the waveform", + "correct_option": "The ratio of the pulse width to the time period", + "correct_option_index": 2 + }, + { + "qsns": "What type of waveform is produced by a triangle wave generator?", + "opt1": "A waveform with constant amplitude and frequency", + "opt2": "A waveform with a linearly increasing or decreasing amplitude", + "opt3": "A waveform with a constant frequency and varying amplitude", + "opt4": "A waveform with random fluctuations in amplitude and frequency", + "correct_option": "A waveform with a linearly increasing or decreasing amplitude", + "correct_option_index": 2 + }, + { + "qsns": "What type of circuit is commonly used to generate square wave signals?", + "opt1": "An op-amp circuit", + "opt2": "A transistor circuit", + "opt3": "A flip-flop circuit", + "opt4": "A filter circuit", + "correct_option": "An op-amp circuit", + "correct_option_index": 1 + }, + { + "qsns": "What is the advantage of using a relaxation oscillator for square wave generation?", + "opt1": "Simplicity and low cost", + "opt2": "High frequency stability and accuracy", + "opt3": "High power output", + "opt4": "Greater frequency range", + "correct_option": "Simplicity and low cost", + "correct_option_index": 1 + }, + { + "qsns": "What is the role of a Schmitt trigger in a square wave generator circuit?", + "opt1": "To generate a clean and stable square wave signal", + "opt2": "To provide frequency-selective response", + "opt3": "To amplify the input signal", + "opt4": "To filter out unwanted frequencies", + "correct_option": "To generate a clean and stable square wave signal", + "correct_option_index": 1 + }, + { + "qsns": "What is the frequency of a triangle wave generator determined by?", + "opt1": "The time constant of the RC circuit", + "opt2": "The resonant frequency of the tank circuit", + "opt3": "The frequency of the crystal", + "opt4": "The input voltage of the oscillator", + "correct_option": "The time constant of the RC circuit", + "correct_option_index": 1 + }, + { + "qsns": "What is the advantage of using a ramp generator for triangle wave generation?", + "opt1": "Simplicity and low cost", + "opt2": "High frequency stability and accuracy", + "opt3": "High power output", + "opt4": "Greater frequency range", + "correct_option": "Simplicity and low cost", + "correct_option_index": 1 + }, + { + "qsns": "What type of circuit is commonly used to generate triangle wave signals?", + "opt1": "An op-amp circuit", + "opt2": "An integrator circuit", + "opt3": "A flip-flop circuit", + "opt4": "A transistor circuit", + "correct_option": "An integrator circuit", + "correct_option_index": 2 + }, + { + "qsns": "What is the amplitude of a triangle wave generator determined by?", + "opt1": "The time constant of the RC circuit", + "opt2": "The resonant frequency of the tank circuit", + "opt3": "The frequency of the crystal", + "opt4": "The input voltage of the oscillator", + "correct_option": "The input voltage of the oscillator", + "correct_option_index": 4 + }, + { + "qsns": "What is the advantage of using an op-amp circuit for triangle wave generation?", + "opt1": "Simplicity and low cost", + "opt2": "High frequency stability and accuracy", + "opt3": "High power output", + "opt4": "Greater frequency range", + "correct_option": "Simplicity and low cost", + "correct_option_index": 1 + }, + { + "qsns": "Which waveform generator is typically used for testing digital circuits?", + "opt1": "Sine wave generator", + "opt2": "Square wave generator", + "opt3": "Triangle wave generator", + "opt4": "Sawtooth wave generator", + "correct_option": "Square wave generator", + "correct_option_index": 2 + }, + { + "qsns": "What is the duty cycle of a square wave?", + "opt1": "The time period of the wave", + "opt2": "The ratio of the pulse width to the time period", + "opt3": "The frequency of the wave", + "opt4": "The amplitude of the wave", + "correct_option": "The ratio of the pulse width to the time period", + "correct_option_index": 2 + }, + { + "qsns": "What is the advantage of using a square wave generator over other types of waveform generators?", + "opt1": "Simplicity and low cost", + "opt2": "High frequency stability and accuracy", + "opt3": "High power output", + "opt4": "Wide range of frequency and waveform options", + "correct_option": "Simplicity and low cost", + "correct_option_index": 1 + }, + { + "qsns": "Which waveform generator is capable of producing more complex waveforms than a square wave generator?", + "opt1": "Sine wave generator", + "opt2": "Triangle wave generator", + "opt3": "Sawtooth wave generator", + "opt4": "Arbitrary waveform generator", + "correct_option": "Arbitrary waveform generator", + "correct_option_index": 4 + }, + { + "qsns": "What is the shape of the waveform produced by a triangle wave generator?", + "opt1": "A series of pulses with a constant amplitude", + "opt2": "A smoothly varying waveform with a linear rise and fall", + "opt3": "A waveform with a rapidly changing rise and a slow fall", + "opt4": "A waveform with a rapidly changing fall and a slow rise", + "correct_option": "A smoothly varying waveform with a linear rise and fall", + "correct_option_index": 2 + }, + { + "qsns": "What is the frequency of a triangle wave generator determined by?", + "opt1": "The time period of the waveform", + "opt2": "The amplitude of the waveform", + "opt3": "The duty cycle of the waveform", + "opt4": "The slope of the waveform", + "correct_option": "The slope of the waveform", + "correct_option_index": 4 + }, + { + "qsns": "What is the advantage of using a triangle wave generator over a square wave generator?", + "opt1": "Greater simplicity and lower cost", + "opt2": "Higher frequency stability and accuracy", + "opt3": "Higher power output", + "opt4": "More gradual transitions and reduced harmonic content", + "correct_option": "More gradual transitions and reduced harmonic content", + "correct_option_index": 4 + }, + { + "qsns": "Which type of waveform generator is commonly used in audio applications?", + "opt1": "Sine wave generator", + "opt2": "Square wave generator", + "opt3": "Triangle wave generator", + "opt4": "Sawtooth wave generator", + "correct_option": "Sine wave generator", + "correct_option_index": 1 + }, + { + "qsns": "What is the shape of the waveform produced by a sawtooth wave generator?", + "opt1": "A series of pulses with a constant amplitude", + "opt2": "A smoothly varying waveform with a linear rise and fall", + "opt3": "A waveform with a rapidly changing rise and a slow fall", + "opt4": "A waveform with a rapidly changing fall and a slow rise", + "correct_option": "A waveform with a rapidly changing rise and a slow fall", + "correct_option_index": 3 + }, + { + "qsns": "What is the advantage of using an arbitrary waveform generator over other types of waveform generators?", + "opt1": "Greater simplicity and lower cost", + "opt2": "Higher frequency stability and accuracy", + "opt3": "Higher power output", + "opt4": "The ability to generate complex and customized waveforms", + "correct_option": "The ability to generate complex and customized waveforms", + "correct_option_index": 4 + }, + { + "qsns": "What is the amplifying element used in a Class A output stage?", + "opt1": "Bipolar Junction Transistor", + "opt2": "Field-Effect Transistor", + "opt3": "Operational Amplifier", + "opt4": "Vacuum Tube", + "correct_option": "Bipolar Junction Transistor", + "correct_option_index": 1 + }, + { + "qsns": "What causes crossover distortion in a Class B output stage?", + "opt1": "The amplifying element conducts for the entire input signal cycle", + "opt2": "The amplifying element is biased so that it conducts for less than half of the input signal cycle", + "opt3": "Two amplifying elements are used and each one conducts for half of the input signal cycle", + "opt4": "The switching between the amplifying elements causes a gap in the output signal.", + "correct_option": "The switching between the amplifying elements causes a gap in the output signal.", + "correct_option_index": 4 + }, + { + "qsns": "What is the advantage of a Class AB output stage over a Class B output stage?", + "opt1": "Higher efficiency", + "opt2": "Lower distortion", + "opt3": "Reduced crossover distortion", + "opt4": "Lower cost", + "correct_option": "Reduced crossover distortion", + "correct_option_index": 3 + }, + { + "qsns": "What is the operating mode of a Class C output stage?", + "opt1": "Linear", + "opt2": "Non-linear", + "opt3": "Saturated", + "opt4": "Reverse biased", + "correct_option": "Non-linear", + "correct_option_index": 2 + }, + { + "qsns": "What is the advantage of a Class D output stage over other output stages?", + "opt1": "Low distortion", + "opt2": "High linearity", + "opt3": "High efficiency", + "opt4": "Low switching noise", + "correct_option": "High efficiency", + "correct_option_index": 3 + }, + { + "qsns": "What is the primary disadvantage of a Class A output stage?", + "opt1": "High distortion", + "opt2": "Low efficiency", + "opt3": "High switching noise", + "opt4": "High cost", + "correct_option": "Low efficiency", + "correct_option_index": 2 + }, + { + "qsns": "Which type of output stage is suitable for RF amplifiers?", + "opt1": "Class A", + "opt2": "Class B", + "opt3": "Class AB", + "opt4": "Class C", + "correct_option": "Class C", + "correct_option_index": 4 + }, + { + "qsns": "What is the biasing arrangement used in a Class AB output stage?", + "opt1": "The amplifying element is biased to conduct for the entire input signal cycle.", + "opt2": "The amplifying element is biased to conduct for less than half of the input signal cycle.", + "opt3": "The bias voltage is varied to adjust the conduction angle.", + "opt4": "Two amplifying elements are used and each one conducts for half of the input signal cycle.", + "correct_option": "The bias voltage is varied to adjust the conduction angle.", + "correct_option_index": 3 + }, + { + "qsns": "Which type of output stage is used in audio power amplifiers?", + "opt1": "Class A", + "opt2": "Class B", + "opt3": "Class AB", + "opt4": "Class C", + "correct_option": "Class AB", + "correct_option_index": 3 + }, + { + "qsns": "Which type of output stage is commonly used in switch-mode power supplies?", + "opt1": "Class A", + "opt2": "Class B", + "opt3": "Class AB", + "opt4": "Class D", + "correct_option": "Class D", + "correct_option_index": 4 + }, + { + "qsns": "Which of the following is a characteristic of a class A output stage?", + "opt1": "High efficiency", + "opt2": "Low distortion", + "opt3": "Crossover distortion", + "opt4": "Conducts for less than half of the input signal cycle", + "correct_option": "Low distortion", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following output stages uses two amplifying elements that conduct for half of the input signal cycle each?", + "opt1": "Class A", + "opt2": "Class B", + "opt3": "Class C", + "opt4": "Class AB", + "correct_option": "Class B", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following output stages is a combination of class A and class B?", + "opt1": "Class A", + "opt2": "Class B", + "opt3": "Class AB", + "opt4": "Class C", + "correct_option": "Class AB", + "correct_option_index": 3 + }, + { + "qsns": "Which of the following output stages is suitable for RF amplifiers?", + "opt1": "Class A", + "opt2": "Class B", + "opt3": "Class AB", + "opt4": "Class C", + "correct_option": "Class C", + "correct_option_index": 4 + }, + { + "qsns": "Which of the following output stages uses pulse width modulation to convert the input signal into a train of pulses?", + "opt1": "Class A", + "opt2": "Class B", + "opt3": "Class C", + "opt4": "Class D", + "correct_option": "Class D", + "correct_option_index": 4 + }, + { + "qsns": "Which of the following is a disadvantage of a class B output stage?", + "opt1": "Low distortion", + "opt2": "High efficiency", + "opt3": "Crossover distortion", + "opt4": "Conducts for the entire input signal cycle", + "correct_option": "Crossover distortion", + "correct_option_index": 3 + }, + { + "qsns": "Which of the following output stages is the most efficient?", + "opt1": "Class A", + "opt2": "Class B", + "opt3": "Class AB", + "opt4": "Class C", + "correct_option": "Class C", + "correct_option_index": 4 + }, + { + "qsns": "Which of the following output stages is the least efficient?", + "opt1": "Class A", + "opt2": "Class B", + "opt3": "Class AB", + "opt4": "Class C", + "correct_option": "Class A", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following output stages has a biasing arrangement that allows the amplifying element to conduct slightly even when there is no input signal?", + "opt1": "Class A", + "opt2": "Class B", + "opt3": "Class AB", + "opt4": "Class C", + "correct_option": "Class AB", + "correct_option_index": 3 + }, + { + "qsns": "Which of the following output stages is suitable for high power audio amplifiers?", + "opt1": "Class A", + "opt2": "Class B", + "opt3": "Class AB", + "opt4": "Class C", + "correct_option": "Class AB", + "correct_option_index": 3 + }, + { + "qsns": "What is the main advantage of a Class A output stage?", + "opt1": "High efficiency", + "opt2": "Low distortion", + "opt3": "Low power consumption", + "opt4": "High output power", + "correct_option": "Low distortion", + "correct_option_index": 2 + }, + { + "qsns": "What is the main disadvantage of a Class A output stage?", + "opt1": "High distortion", + "opt2": "Low efficiency", + "opt3": "High power consumption", + "opt4": "Low output power", + "correct_option": "Low efficiency", + "correct_option_index": 2 + }, + { + "qsns": "What type of biasing is commonly used in Class A output stages?", + "opt1": "Fixed bias", + "opt2": "Self-bias", + "opt3": "Voltage divider bias", + "opt4": "Current mirror bias", + "correct_option": "Fixed bias", + "correct_option_index": 1 + }, + { + "qsns": "What is the DC bias point of a Class A output stage?", + "opt1": "Equal to the positive supply voltage", + "opt2": "Halfway between the positive and negative supply voltage", + "opt3": "Equal to the negative supply voltage", + "opt4": "Zero", + "correct_option": "Halfway between the positive and negative supply voltage", + "correct_option_index": 2 + }, + { + "qsns": "What is the maximum theoretical efficiency of a Class A output stage?", + "opt1": "25%", + "opt2": "50%", + "opt3": "75%", + "opt4": "100%", + "correct_option": "50%", + "correct_option_index": 2 + }, + { + "qsns": "What is the typical output power of a Class A amplifier?", + "opt1": "Less than 1 watt", + "opt2": "1 watt to 10 watts", + "opt3": "10 watts to 100 watts", + "opt4": "More than 100 watts", + "correct_option": "1 watt to 10 watts", + "correct_option_index": 2 + }, + { + "qsns": "What type of load is commonly used in Class A output stages?", + "opt1": "Resistive load", + "opt2": "Capacitive load", + "opt3": "Inductive load", + "opt4": "Reactive load", + "correct_option": "Resistive load", + "correct_option_index": 1 + }, + { + "qsns": "What is the main advantage of a Class A output stage over other amplifier configurations?", + "opt1": "High efficiency", + "opt2": "High output power", + "opt3": "Low distortion", + "opt4": "Low power consumption", + "correct_option": "Low distortion", + "correct_option_index": 3 + }, + { + "qsns": "What type of input signal is best suited for a Class A output stage?", + "opt1": "Sinusoidal signal", + "opt2": "Square wave signal", + "opt3": "Triangular wave signal", + "opt4": "Pulse signal", + "correct_option": "Sinusoidal signal", + "correct_option_index": 1 + }, + { + "qsns": "What is the typical voltage gain of a Class A amplifier?", + "opt1": "Less than 10", + "opt2": "10 to 100", + "opt3": "100 to 1000", + "opt4": "More than 1000", + "correct_option": "10 to 100", + "correct_option_index": 2 + }, + { + "qsns": "In a Class A output stage, the amplifying device conducts for:", + "opt1": "Half of the input signal cycle", + "opt2": "Less than half of the input signal cycle", + "opt3": "More than half of the input signal cycle", + "opt4": "The entire input signal cycle", + "correct_option": "The entire input signal cycle", + "correct_option_index": 4 + }, + { + "qsns": "The efficiency of a Class A output stage is:", + "opt1": "High", + "opt2": "Low", + "opt3": "Moderate", + "opt4": "Not applicable", + "correct_option": "Low", + "correct_option_index": 2 + }, + { + "qsns": "What is the advantage of a Class A output stage over other classes of amplifiers?", + "opt1": "Higher efficiency", + "opt2": "Lower distortion", + "opt3": "Lower cost", + "opt4": "Higher power output", + "correct_option": "Lower distortion", + "correct_option_index": 2 + }, + { + "qsns": "What is the key feature of a Class A output stage?", + "opt1": "The amplifying device conducts for the entire input signal cycle", + "opt2": "The amplifying device conducts for only half of the input signal cycle", + "opt3": "The amplifying device conducts for less than half of the input signal cycle", + "opt4": "The amplifying device is biased to a cutoff state", + "correct_option": "The amplifying device conducts for the entire input signal cycle", + "correct_option_index": 1 + }, + { + "qsns": "What is the typical efficiency of a Class A output stage?", + "opt1": "100%", + "opt2": "50%", + "opt3": "25%", + "opt4": "Less than 10%", + "correct_option": "25%", + "correct_option_index": 3 + }, + { + "qsns": "Which of the following is a disadvantage of a Class A output stage?", + "opt1": "High efficiency", + "opt2": "High distortion", + "opt3": "High cost", + "opt4": "Low power output", + "correct_option": "Low power output", + "correct_option_index": 4 + }, + { + "qsns": "Which type of amplifying device is commonly used in Class A output stages?", + "opt1": "Bipolar Junction Transistor (BJT)", + "opt2": "Metal-Oxide-Semiconductor Field-Effect Transistor (MOSFET)", + "opt3": "Junction Field-Effect Transistor (JFET)", + "opt4": "All of the above", + "correct_option": "All of the above", + "correct_option_index": 4 + }, + { + "qsns": "What is the purpose of the biasing circuit in a Class A output stage?", + "opt1": "To set the operating point of the amplifying device", + "opt2": "To provide negative feedback", + "opt3": "To boost the output signal", + "opt4": "To reduce distortion", + "correct_option": "To set the operating point of the amplifying device", + "correct_option_index": 1 + }, + { + "qsns": "What is the quiescent current of a Class A output stage?", + "opt1": "The maximum current the amplifying device can handle", + "opt2": "The current flowing through the load resistor when there is no input signal", + "opt3": "The current required to bias the amplifying device", + "opt4": "The current flowing through the amplifying device when there is no input signal", + "correct_option": "The current flowing through the amplifying device when there is no input signal", + "correct_option_index": 4 + }, + { + "qsns": "Which of the following is a common application of a Class A output stage?", + "opt1": "Audio power amplifiers", + "opt2": "RF amplifiers", + "opt3": "Voltage regulators", + "opt4": "Digital circuits", + "correct_option": "Audio power amplifiers", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following is a characteristic of the output signal of a Class A output stage?", + "opt1": "It is a square wave", + "opt2": "It is a sine wave", + "opt3": "It is a triangular wave", + "opt4": "It depends on the input signal", + "correct_option": "It depends on the input signal", + "correct_option_index": 4 + }, + { + "qsns": "Which of the following is a disadvantage of a Class A output stage in terms of power efficiency?", + "opt1": "It generates more heat than other classes of amplifiers", + "opt2": "It consumes more power than other classes of amplifiers", + "opt3": "It is more expensive than other classes of amplifiers", + "opt4": "It has a lower power output than other classes of amplifiers", + "correct_option": "It generates more heat than other classes of amplifiers", + "correct_option_index": 1 + }, + { + "qsns": "What is a Class B output stage in amplifiers?", + "opt1": "An amplifier configuration where the amplifying device conducts for the full input signal cycle", + "opt2": "An amplifier configuration where the amplifying device conducts only for half of the input signal cycle", + "opt3": "An amplifier configuration where the output signal is inverted with respect to the input signal", + "opt4": "An amplifier configuration where two input signals are combined to produce the output signal", + "correct_option": "An amplifier configuration where the amplifying device conducts only for half of the input signal cycle", + "correct_option_index": 2 + }, + { + "qsns": "What is the advantage of a Class B output stage?", + "opt1": "High power efficiency", + "opt2": "Low distortion", + "opt3": "High linearity", + "opt4": "Large voltage gain", + "correct_option": "High power efficiency", + "correct_option_index": 1 + }, + { + "qsns": "What is crossover distortion in a Class B output stage?", + "opt1": "A reduction in the voltage gain of the amplifier", + "opt2": "A discontinuity in the output signal at the point where one device switches off and the other switches on", + "opt3": "A change in the phase shift of the output signal", + "opt4": "An increase in the noise level of the amplifier", + "correct_option": "A discontinuity in the output signal at the point where one device switches off and the other switches on", + "correct_option_index": 2 + }, + { + "qsns": "How is crossover distortion reduced in a Class B output stage?", + "opt1": "By increasing the voltage gain of the amplifier", + "opt2": "By decreasing the load impedance of the amplifier", + "opt3": "By applying a small amount of bias current to the amplifying devices", + "opt4": "By using a feedback network in the amplifier", + "correct_option": "By applying a small amount of bias current to the amplifying devices", + "correct_option_index": 3 + }, + { + "qsns": "What is the main application of Class B output stages?", + "opt1": "Audio power amplifiers", + "opt2": "Voltage amplifiers", + "opt3": "Current amplifiers", + "opt4": "Low noise amplifiers", + "correct_option": "Audio power amplifiers", + "correct_option_index": 1 + }, + { + "qsns": "What is the main disadvantage of Class B output stages?", + "opt1": "Crossover distortion", + "opt2": "Low power efficiency", + "opt3": "High distortion", + "opt4": "Poor linearity", + "correct_option": "Crossover distortion", + "correct_option_index": 1 + }, + { + "qsns": "What is the purpose of biasing in a Class B output stage?", + "opt1": "To keep the amplifying devices slightly conductive even when there is no input signal", + "opt2": "To increase the voltage gain of the amplifier", + "opt3": "To decrease the noise level of the amplifier", + "opt4": "To reduce the distortion of the amplifier", + "correct_option": "To keep the amplifying devices slightly conductive even when there is no input signal", + "correct_option_index": 1 + }, + { + "qsns": "What is the output signal waveform of a Class B output stage?", + "opt1": "A square wave", + "opt2": "A sawtooth wave", + "opt3": "A sine wave", + "opt4": "A combination of the signals produced by each device", + "correct_option": "A combination of the signals produced by each device", + "correct_option_index": 4 + }, + { + "qsns": "What type of load is typically used with a Class B output stage?", + "opt1": "Resistive load", + "opt2": "Capacitive load", + "opt3": "Inductive load", + "opt4": "None of the above", + "correct_option": "Resistive load", + "correct_option_index": 1 + }, + { + "qsns": "What is the maximum theoretical efficiency of a Class B output stage?", + "opt1": "50%", + "opt2": "75%", + "opt3": "90%", + "opt4": "100%", + "correct_option": "75%", + "correct_option_index": 2 + }, + { + "qsns": "In a Class B output stage, how many amplifying devices are used?", + "opt1": "One", + "opt2": "Two", + "opt3": "Three", + "opt4": "Four", + "correct_option": "Two", + "correct_option_index": 2 + }, + { + "qsns": "What is the key advantage of a Class B output stage?", + "opt1": "Low power consumption", + "opt2": "High distortion", + "opt3": "High power efficiency", + "opt4": "Low heat generation", + "correct_option": "High power efficiency", + "correct_option_index": 3 + }, + { + "qsns": "What is the major disadvantage of a Class B output stage?", + "opt1": "Low power efficiency", + "opt2": "High power consumption", + "opt3": "High distortion", + "opt4": "Crossover distortion", + "correct_option": "Crossover distortion", + "correct_option_index": 4 + }, + { + "qsns": "How does bias current help to address the issue of crossover distortion in a Class B output stage?", + "opt1": "By increasing power consumption", + "opt2": "By reducing power efficiency", + "opt3": "By keeping the amplifying devices slightly conductive", + "opt4": "By increasing the gain of the amplifier", + "correct_option": "By keeping the amplifying devices slightly conductive", + "correct_option_index": 3 + }, + { + "qsns": "Which application is Class B output stage commonly used in?", + "opt1": "Low-distortion audio power amplifiers", + "opt2": "Low-power RF amplifiers", + "opt3": "High-distortion audio power amplifiers", + "opt4": "High-power RF amplifiers", + "correct_option": "High-power RF amplifiers", + "correct_option_index": 4 + }, + { + "qsns": "What is the output signal of a Class B output stage?", + "opt1": "A combination of the input signal and the bias current", + "opt2": "A combination of two signals produced by each device", + "opt3": "A constant voltage signal", + "opt4": "A high distortion signal", + "correct_option": "A combination of two signals produced by each device", + "correct_option_index": 2 + }, + { + "qsns": "Which type of amplifiers produce less distortion than Class B amplifiers?", + "opt1": "Class A amplifiers", + "opt2": "Class AB amplifiers", + "opt3": "Class C amplifiers", + "opt4": "Class D amplifiers", + "correct_option": "Class AB amplifiers", + "correct_option_index": 2 + }, + { + "qsns": "What is the function of the load resistor in a Class B output stage?", + "opt1": "To provide a bias current to the amplifying devices", + "opt2": "To reduce the power consumption of the amplifying devices", + "opt3": "To eliminate the crossover distortion", + "opt4": "To increase the gain of the amplifier", + "correct_option": "To eliminate the crossover distortion", + "correct_option_index": 3 + }, + { + "qsns": "Which type of distortion is commonly associated with Class B output stages?", + "opt1": "Harmonic distortion", + "opt2": "Frequency distortion", + "opt3": "Amplitude distortion", + "opt4": "Crossover distortion", + "correct_option": "Crossover distortion", + "correct_option_index": 4 + }, + { + "qsns": "Which of the following is a limitation of using Class B amplifiers?", + "opt1": "High power efficiency", + "opt2": "Low distortion", + "opt3": "High linearity", + "opt4": "High power consumption", + "correct_option": "Low distortion", + "correct_option_index": 2 + }, + { + "qsns": "What is the main advantage of a Class AB output stage over a Class B output stage?", + "opt1": "Higher power efficiency", + "opt2": "Lower distortion", + "opt3": "High distortion", + "opt4": "None of the above", + "correct_option": "Lower distortion", + "correct_option_index": 2 + }, + { + "qsns": "What is the purpose of biasing both amplifying devices in a Class AB output stage?", + "opt1": "To eliminate crossover distortion", + "opt2": "To improve power efficiency", + "opt3": "To increase linearity", + "opt4": "None of the above", + "correct_option": "To eliminate crossover distortion", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following is not a characteristic of Class AB output stages?", + "opt1": "High linearity", + "opt2": "High power efficiency", + "opt3": "Low distortion", + "opt4": "High bias", + "correct_option": "High bias", + "correct_option_index": 4 + }, + { + "qsns": "In which application are Class AB output stages commonly used?", + "opt1": "Low-power audio amplifiers", + "opt2": "High-fidelity audio amplifiers", + "opt3": "Power supplies", + "opt4": "None of the above", + "correct_option": "High-fidelity audio amplifiers", + "correct_option_index": 2 + }, + { + "qsns": "Which type of output stage offers the highest linearity?", + "opt1": "Class A", + "opt2": "Class B", + "opt3": "Class AB", + "opt4": "None of the above", + "correct_option": "Class A", + "correct_option_index": 1 + }, + { + "qsns": "What is the disadvantage of Class AB output stages compared to Class B output stages?", + "opt1": "Lower power efficiency", + "opt2": "Higher distortion", + "opt3": "More complex design", + "opt4": "None of the above", + "correct_option": "Lower power efficiency", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following is not a benefit of using a Class AB output stage?", + "opt1": "High power output", + "opt2": "Low distortion", + "opt3": "High power efficiency", + "opt4": "None of the above", + "correct_option": "None of the above", + "correct_option_index": 4 + }, + { + "qsns": "Which type of output stage produces lower distortion than Class B output stages?", + "opt1": "Class A", + "opt2": "Class AB", + "opt3": "Class C", + "opt4": "Both A and B", + "correct_option": "Both A and B", + "correct_option_index": 4 + }, + { + "qsns": "What is the key advantage of using a Class AB output stage?", + "opt1": "High power efficiency", + "opt2": "Low distortion", + "opt3": "High power efficiency and low distortion", + "opt4": "Low power efficiency and high distortion", + "correct_option": "High power efficiency and low distortion", + "correct_option_index": 3 + }, + { + "qsns": "What is the main disadvantage of Class A output stages compared to Class AB output stages?", + "opt1": "Lower linearity", + "opt2": "Lower power efficiency", + "opt3": "Higher distortion", + "opt4": "None of the above", + "correct_option": "Lower power efficiency", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following statements is true about a Class AB output stage?", + "opt1": "It has high power efficiency and high distortion.", + "opt2": "It has low power efficiency and low distortion.", + "opt3": "It has high power efficiency and low distortion.", + "opt4": "It has low power efficiency and high distortion.", + "correct_option": "It has high power efficiency and low distortion.", + "correct_option_index": 3 + }, + { + "qsns": "Which type of output stage is commonly used in power supplies?", + "opt1": "Class A", + "opt2": "Class B", + "opt3": "Class AB", + "opt4": "None of the above", + "correct_option": "Class B", + "correct_option_index": 2 + }, + { + "qsns": "What is the main advantage of using a Class AB output stage in an audio amplifier?", + "opt1": "High distortion", + "opt2": "Low efficiency", + "opt3": "High efficiency and low distortion", + "opt4": "Low efficiency and high distortion", + "correct_option": "High efficiency and low distortion", + "correct_option_index": 3 + }, + { + "qsns": "In a Class AB output stage, both amplifying devices are biased to conduct a small amount of current even when there is no input signal. What is the purpose of this bias current?", + "opt1": "To increase distortion", + "opt2": "To reduce power efficiency", + "opt3": "To maintain high power efficiency", + "opt4": "To decrease linearity", + "correct_option": "To reduce power efficiency", + "correct_option_index": 2 + }, + { + "qsns": "Which type of output stage is commonly used in high-fidelity audio amplifiers?", + "opt1": "Class A", + "opt2": "Class B", + "opt3": "Class AB", + "opt4": "Class C", + "correct_option": "Class AB", + "correct_option_index": 3 + }, + { + "qsns": "What is the process of gradual conduction transfer in a Class AB output stage known as?", + "opt1": "Crossover", + "opt2": "Biasing", + "opt3": "Amplification", + "opt4": "Distortion", + "correct_option": "Crossover", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following is a disadvantage of using a Class AB output stage?", + "opt1": "High distortion", + "opt2": "Low power efficiency", + "opt3": "Low linearity", + "opt4": "High cost", + "correct_option": "Low power efficiency", + "correct_option_index": 2 + }, + { + "qsns": "In a Class AB output stage, how do the amplifying devices behave when there is an input signal?", + "opt1": "They both conduct fully.", + "opt2": "One conducts fully and the other conducts partially.", + "opt3": "They both conduct partially.", + "opt4": "One conducts partially and the other is turned off.", + "correct_option": "One conducts fully and the other conducts partially.", + "correct_option_index": 2 + }, + { + "qsns": "What is the main purpose of a Class AB output stage?", + "opt1": "To reduce distortion", + "opt2": "To increase power efficiency", + "opt3": "To increase distortion", + "opt4": "To reduce power efficiency", + "correct_option": "To reduce distortion", + "correct_option_index": 1 + }, + { + "qsns": "What is the purpose of biasing the Class AB output stage in amplifiers?", + "opt1": "To set the operating point of the amplifying devices", + "opt2": "To reduce distortion in the output signal", + "opt3": "To ensure that the amplifying devices operate in the active region of their characteristic curves", + "opt4": "All of the above", + "correct_option": "All of the above", + "correct_option_index": 4 + }, + { + "qsns": "What is a common biasing technique for the Class AB output stage?", + "opt1": "Voltage divider network", + "opt2": "Diode biasing", + "opt3": "Transistor biasing", + "opt4": "All of the above", + "correct_option": "All of the above", + "correct_option_index": 4 + }, + { + "qsns": "In a voltage divider biasing network, where is the bias voltage set?", + "opt1": "At the base or gate of the amplifying device", + "opt2": "At the power supply voltage", + "opt3": "At ground", + "opt4": "None of the above", + "correct_option": "At the base or gate of the amplifying device", + "correct_option_index": 1 + }, + { + "qsns": "How does a diode biasing circuit work?", + "opt1": "By using a transistor configured as a voltage divider", + "opt2": "By connecting a diode in series with the base or gate of the amplifying device", + "opt3": "By using a voltage divider network", + "opt4": "None of the above", + "correct_option": "By connecting a diode in series with the base or gate of the amplifying device", + "correct_option_index": 2 + }, + { + "qsns": "Which biasing technique allows for fine-tuning of the operating point?", + "opt1": "Voltage divider network", + "opt2": "Diode biasing", + "opt3": "Transistor biasing", + "opt4": "None of the above", + "correct_option": "Voltage divider network", + "correct_option_index": 1 + }, + { + "qsns": "What is the goal of biasing the Class AB stage?", + "opt1": "To maximize power efficiency", + "opt2": "To minimize power dissipation", + "opt3": "To ensure linear operation with low distortion", + "opt4": "None of the above", + "correct_option": "To ensure linear operation with low distortion", + "correct_option_index": 3 + }, + { + "qsns": "Which type of amplifying device is typically used in a Class AB output stage?", + "opt1": "Bipolar junction transistor (BJT)", + "opt2": "Field-effect transistor (FET)", + "opt3": "Operational amplifier (Op-amp)", + "opt4": "None of the above", + "correct_option": "Bipolar junction transistor (BJT)", + "correct_option_index": 1 + }, + { + "qsns": "Which biasing technique uses a transistor configured as a voltage divider?", + "opt1": "Voltage divider network", + "opt2": "Diode biasing", + "opt3": "Transistor biasing", + "opt4": "None of the above", + "correct_option": "Transistor biasing", + "correct_option_index": 3 + }, + { + "qsns": "Why is biasing necessary for Class AB amplifiers?", + "opt1": "To prevent the amplifying devices from saturating", + "opt2": "To ensure that the amplifying devices operate in the active region", + "opt3": "To decrease the gain of the amplifier", + "opt4": "None of the above", + "correct_option": "To ensure that the amplifying devices operate in the active region", + "correct_option_index": 2 + }, + { + "qsns": "What is the main advantage of using a Class AB output stage in amplifiers?", + "opt1": "High power efficiency", + "opt2": "Low power dissipation", + "opt3": "High linearity with low distortion", + "opt4": "None of the above", + "correct_option": "High linearity with low distortion", + "correct_option_index": 3 + }, + { + "qsns": "What is the bias voltage typically set to in the Class AB output stage?", + "opt1": "The forward voltage drop of a diode", + "opt2": "The power supply voltage", + "opt3": "Zero volts", + "opt4": "The voltage across a capacitor", + "correct_option": "The forward voltage drop of a diode", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following is a disadvantage of using a diode biasing circuit?", + "opt1": "It is more complex than other biasing techniques", + "opt2": "It is less stable than other biasing techniques", + "opt3": "It requires more power to operate", + "opt4": "It is less accurate than other biasing techniques", + "correct_option": "It is less stable than other biasing techniques", + "correct_option_index": 2 + }, + { + "qsns": "What is the purpose of using a transistor biasing circuit?", + "opt1": "To set the bias voltage", + "opt2": "To amplify the input signal", + "opt3": "To reduce distortion in the output signal", + "opt4": "To increase power efficiency", + "correct_option": "To set the bias voltage", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following biasing techniques is commonly used in Class AB amplifiers?", + "opt1": "Voltage divider network", + "opt2": "Diode biasing", + "opt3": "Transistor biasing", + "opt4": "All of the above", + "correct_option": "Diode biasing", + "correct_option_index": 2 + }, + { + "qsns": "How does the choice of biasing technique affect the power efficiency of the amplifier?", + "opt1": "It has no effect on power efficiency", + "opt2": "It can increase power efficiency", + "opt3": "It can decrease power efficiency", + "opt4": "It can cause the amplifier to malfunction", + "correct_option": "It can decrease power efficiency", + "correct_option_index": 3 + }, + { + "qsns": "What is the disadvantage of using an adjustable biasing network?", + "opt1": "It is less accurate than a fixed biasing network", + "opt2": "It is less stable than a fixed biasing network", + "opt3": "It is more complex than a fixed biasing network", + "opt4": "It is more expensive than a fixed biasing network", + "correct_option": "It is more complex than a fixed biasing network", + "correct_option_index": 3 + }, + { + "qsns": "Which of the following is a key consideration when selecting a biasing technique for the Class AB output stage?", + "opt1": "Power efficiency", + "opt2": "Cost", + "opt3": "Stability", + "opt4": "Input impedance", + "correct_option": "Power efficiency", + "correct_option_index": 1 + }, + { + "qsns": "What is the primary application of power BJTs in amplifier circuits?", + "opt1": "High frequency amplification", + "opt2": "Low noise amplification", + "opt3": "Power amplification", + "opt4": "Voltage amplification", + "correct_option": "Power amplification", + "correct_option_index": 3 + }, + { + "qsns": "Which type of power BJT is more commonly used in power amplifier circuits?", + "opt1": "PNP", + "opt2": "NPN", + "opt3": "Both are used equally", + "opt4": "None of the above", + "correct_option": "NPN", + "correct_option_index": 2 + }, + { + "qsns": "What is the operating region of the power BJT?", + "opt1": "Saturation", + "opt2": "Cutoff", + "opt3": "Active", + "opt4": "Reverse breakdown", + "correct_option": "Active", + "correct_option_index": 3 + }, + { + "qsns": "Which configuration is most commonly used for low-power amplifiers?", + "opt1": "Class A", + "opt2": "Class AB", + "opt3": "Class B", + "opt4": "Class C", + "correct_option": "Class A", + "correct_option_index": 1 + }, + { + "qsns": "What is the main advantage of power BJTs over small signal BJTs?", + "opt1": "Higher frequency response", + "opt2": "Lower noise", + "opt3": "Higher power handling capability", + "opt4": "Lower distortion", + "correct_option": "Higher power handling capability", + "correct_option_index": 3 + }, + { + "qsns": "Which of the following is a common application of power BJTs?", + "opt1": "Voltage regulators", + "opt2": "Oscillators", + "opt3": "Audio amplifiers", + "opt4": "Digital circuits", + "correct_option": "Audio amplifiers", + "correct_option_index": 3 + }, + { + "qsns": "What is the primary purpose of switching amplifiers?", + "opt1": "To increase power gain", + "opt2": "To reduce distortion", + "opt3": "To improve efficiency", + "opt4": "To increase frequency response", + "correct_option": "To improve efficiency", + "correct_option_index": 3 + }, + { + "qsns": "Which type of amplifier uses power MOSFETs to provide high efficiency?", + "opt1": "Class A", + "opt2": "Class B", + "opt3": "Class D", + "opt4": "Class AB", + "correct_option": "Class D", + "correct_option_index": 3 + }, + { + "qsns": "Which of the following is not a technique used to improve the efficiency of power amplifiers?", + "opt1": "Class G and H amplifiers", + "opt2": "Switching amplifiers", + "opt3": "Feedback amplifiers", + "opt4": "Class D amplifiers", + "correct_option": "Feedback amplifiers", + "correct_option_index": 3 + }, + { + "qsns": "What is the main disadvantage of power BJTs in amplifier circuits?", + "opt1": "High distortion", + "opt2": "Low power handling capability", + "opt3": "Low frequency response", + "opt4": "High heat dissipation", + "correct_option": "High heat dissipation", + "correct_option_index": 4 + }, + { + "qsns": "What is the primary function of power BJTs in amplifier circuits?", + "opt1": "To provide high voltage gain", + "opt2": "To provide low noise amplification", + "opt3": "To provide high power gain and efficiency", + "opt4": "To provide high frequency response", + "correct_option": "To provide high power gain and efficiency", + "correct_option_index": 3 + }, + { + "qsns": "Which of the following is a commonly used configuration for power BJTs in low-power amplifiers?", + "opt1": "Class A", + "opt2": "Class AB", + "opt3": "Class B", + "opt4": "Class C", + "correct_option": "Class A", + "correct_option_index": 1 + }, + { + "qsns": "Which type of power BJT is commonly used in power amplifier circuits?", + "opt1": "PNP", + "opt2": "NPN", + "opt3": "JFET", + "opt4": "MOSFET", + "correct_option": "NPN", + "correct_option_index": 2 + }, + { + "qsns": "In which region of operation does the power BJT operate?", + "opt1": "Saturation region", + "opt2": "Cutoff region", + "opt3": "Active region", + "opt4": "Reverse-bias region", + "correct_option": "Active region", + "correct_option_index": 3 + }, + { + "qsns": "Which of the following is a technique used to improve the efficiency of power amplifiers?", + "opt1": "Class A amplification", + "opt2": "Switching amplifiers", + "opt3": "Class AB amplification", + "opt4": "Linear amplifiers", + "correct_option": "Switching amplifiers", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following is an application of power BJTs?", + "opt1": "Audio amplifiers", + "opt2": "Radio receivers", + "opt3": "Logic gates", + "opt4": "Voltage regulators", + "correct_option": "Audio amplifiers", + "correct_option_index": 1 + }, + { + "qsns": "What is the primary difference between small signal BJTs and power BJTs?", + "opt1": "Current gain", + "opt2": "Voltage gain", + "opt3": "Frequency response", + "opt4": "High power handling capability", + "correct_option": "High power handling capability", + "correct_option_index": 4 + }, + { + "qsns": "Which type of power BJT has a higher current gain?", + "opt1": "PNP", + "opt2": "NPN", + "opt3": "JFET", + "opt4": "MOSFET", + "correct_option": "NPN", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following is a benefit of using power BJTs in amplifier circuits?", + "opt1": "High frequency response", + "opt2": "Low power consumption", + "opt3": "Low distortion", + "opt4": "High power gain", + "correct_option": "High power gain", + "correct_option_index": 4 + }, + { + "qsns": "Which of the following amplifier configurations is commonly used in high-power amplifiers?", + "opt1": "Class A", + "opt2": "Class AB", + "opt3": "Class B", + "opt4": "Class D", + "correct_option": "Class D", + "correct_option_index": 4 + }, + { + "qsns": "In a transformer-coupled push-pull amplifier, the primary winding of the output transformer is connected to:", + "opt1": "The input signal", + "opt2": "The collector of the NPN transistor in the driver stage", + "opt3": "The base of the NPN transistor in the driver stage", + "opt4": "The collector of both transistors", + "correct_option": "The collector of both transistors", + "correct_option_index": 4 + }, + { + "qsns": "The transformer in a transformer-coupled push-pull amplifier is used to:", + "opt1": "Provide impedance matching between the driver and output stages", + "opt2": "Amplify the signal", + "opt3": "Provide voltage gain", + "opt4": "Provide current gain", + "correct_option": "Provide impedance matching between the driver and output stages", + "correct_option_index": 1 + }, + { + "qsns": "In a transformer-coupled push-pull amplifier, the two output transistors are biased so that they conduct:", + "opt1": "Simultaneously", + "opt2": "Randomly", + "opt3": "Alternately", + "opt4": "None of the above", + "correct_option": "Alternately", + "correct_option_index": 3 + }, + { + "qsns": "Which of the following is an advantage of a transformer-coupled push-pull amplifier?", + "opt1": "High efficiency", + "opt2": "Low distortion", + "opt3": "High gain", + "opt4": "All of the above", + "correct_option": "All of the above", + "correct_option_index": 4 + }, + { + "qsns": "The output of a transformer-coupled push-pull amplifier is taken from:", + "opt1": "The primary winding of the output transformer", + "opt2": "The secondary winding of the output transformer", + "opt3": "The center tap of the output transformer", + "opt4": "None of the above", + "correct_option": "The secondary winding of the output transformer", + "correct_option_index": 2 + }, + { + "qsns": "The load impedance in a transformer-coupled push-pull amplifier is:", + "opt1": "Always equal to the output impedance of the amplifier", + "opt2": "Always lower than the output impedance of the amplifier", + "opt3": "Always higher than the output impedance of the amplifier", + "opt4": "None of the above", + "correct_option": "Always equal to the output impedance of the amplifier", + "correct_option_index": 1 + }, + { + "qsns": "The DC bias voltage for the output transistors in a transformer-coupled push-pull amplifier is provided by:", + "opt1": "The input signal", + "opt2": "The driver stage", + "opt3": "A separate bias circuit", + "opt4": "None of the above", + "correct_option": "A separate bias circuit", + "correct_option_index": 3 + }, + { + "qsns": "The crossover distortion in a transformer-coupled push-pull amplifier is caused by:", + "opt1": "The mismatch between the two output transistors", + "opt2": "The bias voltage being too high", + "opt3": "The load impedance being too low", + "opt4": "None of the above", + "correct_option": "The mismatch between the two output transistors", + "correct_option_index": 1 + }, + { + "qsns": "The transformer in a transformer-coupled push-pull amplifier is usually:", + "opt1": "A step-up transformer", + "opt2": "A step-down transformer", + "opt3": "A transformer with a 1:1 turns ratio", + "opt4": "None of the above", + "correct_option": "A step-down transformer", + "correct_option_index": 2 + }, + { + "qsns": "In a transformer-coupled push-pull amplifier, the output transistors are typically:", + "opt1": "Darlington transistors", + "opt2": "Complementary pair transistors", + "opt3": "MOSFETs", + "opt4": "None of the above", + "correct_option": "None of the above", + "correct_option_index": 4 + }, + { + "qsns": "In a transformer-coupled push-pull stage, two identical transistors are used with one conducting during the positive half-cycle of the input signal and the other conducting during the negative half-cycle. What is the main advantage of using two transistors in this configuration?", + "opt1": "Increased efficiency", + "opt2": "Increased voltage gain", + "opt3": "Reduced distortion", + "opt4": "All of the above", + "correct_option": "All of the above", + "correct_option_index": 4 + }, + { + "qsns": "Which of the following statements about the transformer-coupled push-pull stage is true?", + "opt1": "It is commonly used in audio power amplifiers", + "opt2": "It is a type of class A amplifier", + "opt3": "It requires a large amount of power for operation", + "opt4": "It has a low voltage gain", + "correct_option": "It is commonly used in audio power amplifiers", + "correct_option_index": 1 + }, + { + "qsns": "The transformer in a transformer-coupled push-pull stage is used to:", + "opt1": "Increase the voltage gain of the amplifier", + "opt2": "Couple the output signal to the load", + "opt3": "Provide impedance matching between the amplifier and the load", + "opt4": "All of the above", + "correct_option": "Provide impedance matching between the amplifier and the load", + "correct_option_index": 3 + }, + { + "qsns": "In a transformer-coupled push-pull stage, the transformer is typically wound with a center-tapped secondary winding. What is the purpose of the center tap?", + "opt1": "To provide a reference voltage for biasing the transistors", + "opt2": "To provide a means for adjusting the gain of the amplifier", + "opt3": "To provide a balanced load for the transistors", + "opt4": "None of the above", + "correct_option": "To provide a reference voltage for biasing the transistors", + "correct_option_index": 1 + }, + { + "qsns": "The transformer-coupled push-pull stage is a type of:", + "opt1": "Class A amplifier", + "opt2": "Class B amplifier", + "opt3": "Class AB amplifier", + "opt4": "None of the above", + "correct_option": "Class B amplifier", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following is an advantage of using a transformer-coupled push-pull stage over a single-ended output stage?", + "opt1": "Higher efficiency", + "opt2": "Higher voltage gain", + "opt3": "Reduced distortion", + "opt4": "All of the above", + "correct_option": "All of the above", + "correct_option_index": 4 + }, + { + "qsns": "The output of a transformer-coupled push-pull stage is taken from:", + "opt1": "The collector of one transistor", + "opt2": "The center tap of the transformer secondary winding", + "opt3": "The collector of both transistors", + "opt4": "The primary winding of the transformer", + "correct_option": "The center tap of the transformer secondary winding", + "correct_option_index": 2 + }, + { + "qsns": "What is the main disadvantage of a transformer-coupled push-pull stage compared to other output stage configurations?", + "opt1": "Reduced efficiency", + "opt2": "Increased distortion", + "opt3": "Limited frequency response", + "opt4": "All of the above", + "correct_option": "Limited frequency response", + "correct_option_index": 3 + }, + { + "qsns": "The transformer in a transformer-coupled push-pull stage should be designed with:", + "opt1": "High primary-to-secondary turns ratio", + "opt2": "Low primary-to-secondary turns ratio", + "opt3": "High frequency response", + "opt4": "Low leakage inductance", + "correct_option": "Low leakage inductance", + "correct_option_index": 4 + }, + { + "qsns": "What is the main advantage of using a transformer in a push-pull output stage?", + "opt1": "Increased voltage gain", + "opt2": "Impedance matching to the load", + "opt3": "Reduced distortion", + "opt4": "Increased efficiency", + "correct_option": "Impedance matching to the load", + "correct_option_index": 2 + }, + { + "qsns": "What is the basic function of a tuned amplifier?", + "opt1": "To provide high power amplification", + "opt2": "To provide high selectivity and gain", + "opt3": "To filter out unwanted signals", + "opt4": "To provide high frequency stability", + "correct_option": "To provide high selectivity and gain", + "correct_option_index": 2 + }, + { + "qsns": "Which type of resonant circuit is typically used in tuned amplifiers?", + "opt1": "RC circuits", + "opt2": "RL circuits", + "opt3": "LC circuits", + "opt4": "RLC circuits", + "correct_option": "LC circuits", + "correct_option_index": 3 + }, + { + "qsns": "What is the Q factor of a resonant circuit?", + "opt1": "The frequency at which the circuit resonates", + "opt2": "The voltage gain of the circuit", + "opt3": "The energy stored in the circuit", + "opt4": "The ratio of energy stored in the circuit to energy lost per cycle", + "correct_option": "The ratio of energy stored in the circuit to energy lost per cycle", + "correct_option_index": 4 + }, + { + "qsns": "What is the difference between a single tuned amplifier and a double tuned amplifier?", + "opt1": "A single tuned amplifier is more selective than a double tuned amplifier.", + "opt2": "A single tuned amplifier uses one resonant circuit, while a double tuned amplifier uses two.", + "opt3": "A double tuned amplifier provides more gain than a single tuned amplifier.", + "opt4": "A double tuned amplifier uses a transformer to couple the resonant circuits.", + "correct_option": "A single tuned amplifier uses one resonant circuit, while a double tuned amplifier uses two.", + "correct_option_index": 2 + }, + { + "qsns": "Which type of amplifier is commonly used in radio receivers and transmitters?", + "opt1": "Class A amplifier", + "opt2": "Class B amplifier", + "opt3": "Class AB amplifier", + "opt4": "Tuned amplifier", + "correct_option": "Tuned amplifier", + "correct_option_index": 4 + }, + { + "qsns": "Which electronic device can be used as the active element in a tuned amplifier?", + "opt1": "Capacitor", + "opt2": "Resistor", + "opt3": "Inductor", + "opt4": "Transistor", + "correct_option": "Transistor", + "correct_option_index": 4 + }, + { + "qsns": "What is the function of the Q multiplier in a tuned amplifier?", + "opt1": "To provide additional gain at the center frequency of the circuit", + "opt2": "To increase the bandwidth of the circuit", + "opt3": "To improve the stability of the circuit", + "opt4": "To reduce distortion in the output signal", + "correct_option": "To provide additional gain at the center frequency of the circuit", + "correct_option_index": 1 + }, + { + "qsns": "What is a tuned amplifier?", + "opt1": "An amplifier with no selectivity or gain", + "opt2": "An amplifier that only works with specific types of signals", + "opt3": "An amplifier that uses tuned circuits to achieve high selectivity and gain", + "opt4": "An amplifier that is not commonly used in electronic applications", + "correct_option": "An amplifier that uses tuned circuits to achieve high selectivity and gain", + "correct_option_index": 3 + }, + { + "qsns": "What type of resonant circuits are used in tuned amplifiers?", + "opt1": "RC circuits", + "opt2": "LC circuits", + "opt3": "RL circuits", + "opt4": "RLC circuits", + "correct_option": "LC circuits", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following is a key factor in determining the gain and selectivity of a tuned amplifier?", + "opt1": "The type of amplifier used", + "opt2": "The power supply voltage", + "opt3": "The Q factor of the resonant circuits", + "opt4": "The input signal frequency", + "correct_option": "The Q factor of the resonant circuits", + "correct_option_index": 3 + }, + { + "qsns": "Where are tuned amplifiers commonly used?", + "opt1": "In power supplies", + "opt2": "In digital circuits", + "opt3": "In radio receivers and transmitters", + "opt4": "In microcontrollers", + "correct_option": "In radio receivers and transmitters", + "correct_option_index": 3 + }, + { + "qsns": "Which type of amplifying device can be used in tuned amplifiers?", + "opt1": "BJTs", + "opt2": "MOSFETs", + "opt3": "Vacuum tubes", + "opt4": "All of the above", + "correct_option": "All of the above", + "correct_option_index": 4 + }, + { + "qsns": "What is the purpose of a tuned amplifier in a radio receiver?", + "opt1": "To amplify all incoming signals equally", + "opt2": "To amplify only the desired signal while rejecting other signals", + "opt3": "To reduce the strength of the incoming signal", + "opt4": "To generate a new signal at a different frequency", + "correct_option": "To amplify only the desired signal while rejecting other signals", + "correct_option_index": 2 + }, + { + "qsns": "What is the main advantage of a double tuned amplifier over a single tuned amplifier?", + "opt1": "Higher efficiency", + "opt2": "Higher gain", + "opt3": "Higher selectivity", + "opt4": "Lower distortion", + "correct_option": "Higher selectivity", + "correct_option_index": 3 + }, + { + "qsns": "Which of the following is a disadvantage of tuned amplifiers?", + "opt1": "They are expensive to produce.", + "opt2": "They are large in size.", + "opt3": "They can be difficult to tune and adjust.", + "opt4": "They are not capable of providing high gain.", + "correct_option": "They can be difficult to tune and adjust.", + "correct_option_index": 3 + }, + { + "qsns": "What does op-amp stand for?", + "opt1": "Operational amplifier", + "opt2": "Optimal amplifier", + "opt3": "Organic amplifier", + "opt4": "Oscillating amplifier", + "correct_option": "Operational amplifier", + "correct_option_index": 1 + }, + { + "qsns": "Which configuration is most commonly used in op-amp circuits?", + "opt1": "Inverting amplifier", + "opt2": "Non-inverting amplifier", + "opt3": "Differential amplifier", + "opt4": "Voltage follower", + "correct_option": "Inverting amplifier", + "correct_option_index": 1 + }, + { + "qsns": "What is the gain of an inverting amplifier with a feedback resistor of 10 kΩ and an input resistor of 1 kΩ?", + "opt1": "-1", + "opt2": "-10", + "opt3": "10", + "opt4": "100", + "correct_option": "-10", + "correct_option_index": 2 + }, + { + "qsns": "Which parameter determines the maximum output voltage swing of an op-amp?", + "opt1": "Input offset voltage", + "opt2": "Gain-bandwidth product", + "opt3": "Slew rate", + "opt4": "Output saturation voltage", + "correct_option": "Output saturation voltage", + "correct_option_index": 4 + }, + { + "qsns": "What is the purpose of a voltage follower op-amp circuit?", + "opt1": "To provide high gain", + "opt2": "To provide low gain", + "opt3": "To buffer a signal", + "opt4": "To invert a signal", + "correct_option": "To buffer a signal", + "correct_option_index": 3 + }, + { + "qsns": "What is the transfer function of a non-inverting amplifier with a feedback resistor of 10 kΩ and an input resistor of 1 kΩ?", + "opt1": "Vout = Vin", + "opt2": "Vout = -10Vin", + "opt3": "Vout = 10Vin", + "opt4": "Vout = (1 + 10kΩ/1kΩ)Vin", + "correct_option": "Vout = (1 + 10kΩ/1kΩ)Vin", + "correct_option_index": 4 + }, + { + "qsns": "Which op-amp parameter determines the rate at which the output can change in response to changes in the input?", + "opt1": "Input offset voltage", + "opt2": "Gain-bandwidth product", + "opt3": "Slew rate", + "opt4": "Input bias current", + "correct_option": "Slew rate", + "correct_option_index": 3 + }, + { + "qsns": "What is the purpose of a differential amplifier?", + "opt1": "To amplify the difference between two input signals", + "opt2": "To amplify the sum of two input signals", + "opt3": "To invert a signal", + "opt4": "To provide a high-impedance input", + "correct_option": "To amplify the difference between two input signals", + "correct_option_index": 1 + }, + { + "qsns": "Which op-amp configuration is used to perform mathematical operations, such as addition and subtraction?", + "opt1": "Inverting amplifier", + "opt2": "Non-inverting amplifier", + "opt3": "Summing amplifier", + "opt4": "Differentiator", + "correct_option": "Summing amplifier", + "correct_option_index": 3 + }, + { + "qsns": "What is the output voltage of an inverting amplifier with an input voltage of 2 V and a feedback resistor of 10 kΩ, assuming an ideal op-amp?", + "opt1": "-2V", + "opt2": "-20 V", + "opt3": "2V", + "opt4": "20 V", + "correct_option": "-20 V", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following is a characteristic of an ideal operational amplifier?", + "opt1": "Infinite input impedance", + "opt2": "Infinite output impedance", + "opt3": "Infinite gain", + "opt4": "All of the above", + "correct_option": "All of the above", + "correct_option_index": 4 + }, + { + "qsns": "Which of the following is not a type of operational amplifier?", + "opt1": "Differential amplifier", + "opt2": "Inverting amplifier", + "opt3": "Non-inverting amplifier", + "opt4": "Power amplifier", + "correct_option": "Power amplifier", + "correct_option_index": 4 + }, + { + "qsns": "What is the function of a summing amplifier?", + "opt1": "To amplify a single input signal", + "opt2": "To sum multiple input signals and provide an amplified output signal", + "opt3": "To provide an inverted output signal", + "opt4": "To provide a non-inverted output signal", + "correct_option": "To sum multiple input signals and provide an amplified output signal", + "correct_option_index": 2 + }, + { + "qsns": "What is the output voltage of an inverting amplifier with a gain of -10 if the input voltage is 2V?", + "opt1": "-10V", + "opt2": "-20V", + "opt3": "10V", + "opt4": "20V", + "correct_option": "-20V", + "correct_option_index": 2 + }, + { + "qsns": "What is the function of a voltage follower?", + "opt1": "To amplify a voltage", + "opt2": "To provide a high input impedance", + "opt3": "To provide a low output impedance", + "opt4": "To provide unity gain and high input and output impedances", + "correct_option": "To provide unity gain and high input and output impedances", + "correct_option_index": 4 + }, + { + "qsns": "What is the advantage of using an op-amp as a comparator?", + "opt1": "It has a very high input impedance", + "opt2": "It has a very low output impedance", + "opt3": "It has a very high gain", + "opt4": "It has a very low bandwidth", + "correct_option": "It has a very high gain", + "correct_option_index": 3 + }, + { + "qsns": "What is the function of a differentiator circuit?", + "opt1": "To differentiate the input signal with respect to time", + "opt2": "To integrate the input signal with respect to time", + "opt3": "To amplify the input signal", + "opt4": "To provide a DC offset to the input signal", + "correct_option": "To differentiate the input signal with respect to time", + "correct_option_index": 1 + }, + { + "qsns": "What is the function of an integrator circuit?", + "opt1": "To differentiate the input signal with respect to time", + "opt2": "To integrate the input signal with respect to time", + "opt3": "To amplify the input signal", + "opt4": "To provide a DC offset to the input signal", + "correct_option": "To integrate the input signal with respect to time", + "correct_option_index": 2 + }, + { + "qsns": "What is the advantage of using a non-inverting amplifier instead of an inverting amplifier?", + "opt1": "The input signal is not inverted", + "opt2": "The output impedance is lower", + "opt3": "The gain is higher", + "opt4": "The bandwidth is wider", + "correct_option": "The input signal is not inverted", + "correct_option_index": 1 + }, + { + "qsns": "What is the function of a Schmitt trigger circuit?", + "opt1": "To amplify a signal", + "opt2": "To filter a signal", + "opt3": "To generate a square wave signal from a triangular wave signal", + "opt4": "To provide hysteresis to a signal", + "correct_option": "To provide hysteresis to a signal", + "correct_option_index": 4 + } +] diff --git a/frontend/public/data/books/ch10.json b/frontend/public/data/books/ch10.json index d902eed..df9e4ae 100644 --- a/frontend/public/data/books/ch10.json +++ b/frontend/public/data/books/ch10.json @@ -1538,15 +1538,6 @@ "correct_option": "one", "correct_option_index": 2 }, - { - "qsns": "Sinking fund is", - "opt1": "The fund for rebuilding a structure when its economic life is over", - "opt2": "Raised to meet maintenance costs", - "opt3": "The total sum to be paid to the municipal authorities by the tenants", - "opt4": "A part of the money kept in reserve for providing additional structures and structural modifications", - "correct_option": "The fund for rebuilding a structure when its economic life is over", - "correct_option_index": 1 - }, { "qsns": "The rules of Ethics are also called as a", "opt1": "Rules", @@ -1583,15 +1574,6 @@ "correct_option": "Evaluation of policy alternatives", "correct_option_index": 4 }, - { - "qsns": "Resource smoothing is", - "opt1": "An optimization and economical utilization of resources", - "opt2": "An adjustment of resources without affecting project duration", - "opt3": "A gradual increase in resources", - "opt4": "A gradual decrease in resources", - "correct_option": "An adjustment of resources without affecting project duration", - "correct_option_index": 2 - }, { "qsns": "The estimated time Te can be found if To. Tp and Tm are given in PERT activity as", "opt1": "Te=(To+Tp+2 Tm)/6", @@ -2177,4 +2159,4 @@ "correct_option": "same rate", "correct_option_index": 1 } -] \ No newline at end of file +] diff --git a/frontend/public/data/books/ch2.json b/frontend/public/data/books/ch2.json index 4ecdbc1..58a0cd9 100644 --- a/frontend/public/data/books/ch2.json +++ b/frontend/public/data/books/ch2.json @@ -1,6716 +1,2990 @@ [ - { - "qsns": "What is the base of the decimal number system?", - "opt1": "2", - "opt2": "8", - "opt3": "10", - "opt4": "16", - "correct_option": "10", - "correct_option_index": 3 - }, - { - "qsns": "How many digits are used in the binary number system?", - "opt1": "8", - "opt2": "10", - "opt3": "2", - "opt4": "16", - "correct_option": "2", - "correct_option_index": 3 - }, - { - "qsns": "Which number system is often used in computer programming to represent sets of 3 bits?", - "opt1": "Decimal", - "opt2": "Binary", - "opt3": "Octal", - "opt4": "Hexadecimal", - "correct_option": "Octal", - "correct_option_index": 3 - }, - { - "qsns": "What is the base of the hexadecimal number system?", - "opt1": "2", - "opt2": "8", - "opt3": "10", - "opt4": "16", - "correct_option": "16", - "correct_option_index": 4 - }, - { - "qsns": "What is the decimal equivalent of the binary number 1011?", - "opt1": "3", - "opt2": "7", - "opt3": "11", - "opt4": "13", - "correct_option": "11", - "correct_option_index": 3 - }, - { - "qsns": "Which number system is easy to represent using electronic devices like switches?", - "opt1": "Decimal", - "opt2": "Binary", - "opt3": "Octal", - "opt4": "Hexadecimal", - "correct_option": "Binary", - "correct_option_index": 2 - }, - { - "qsns": "What is the octal equivalent of the decimal number 11?", - "opt1": "3", - "opt2": "7", - "opt3": "5", - "opt4": "13", - "correct_option": "13", - "correct_option_index": 4 - }, - { - "qsns": "Which number system is often used in computer science to represent memory addresses?", - "opt1": "Decimal", - "opt2": "Binary", - "opt3": "Octal", - "opt4": "Hexadecimal", - "correct_option": "Hexadecimal", - "correct_option_index": 4 - }, - { - "qsns": "What is the binary equivalent of the decimal number 23?", - "opt1": "10111", - "opt2": "11011", - "opt3": "11101", - "opt4": "11110", - "correct_option": "10111", - "correct_option_index": 1 - }, - { - "qsns": "What is the decimal equivalent of the hexadecimal number 2F?", - "opt1": "32", - "opt2": "45", - "opt3": "47", - "opt4": "52", - "correct_option": "47", - "correct_option_index": 3 - }, - { - "qsns": "Which number system has a base of 8?", - "opt1": "Decimal", - "opt2": "Binary", - "opt3": "Octal", - "opt4": "Hexadecimal", - "correct_option": "Octal", - "correct_option_index": 3 - }, - { - "qsns": "What is the binary equivalent of the decimal number 17?", - "opt1": "10000", - "opt2": "10010", - "opt3": "10001", - "opt4": "10011", - "correct_option": "10001", - "correct_option_index": 3 - }, - { - "qsns": "What is the hexadecimal equivalent of the binary number 1101?", - "opt1": "D", - "opt2": "E", - "opt3": "F", - "opt4": "10", - "correct_option": "D", - "correct_option_index": 1 - }, - { - "qsns": "What is the base of the binary number system?", - "opt1": "2", - "opt2": "8", - "opt3": "10", - "opt4": "16", - "correct_option": "2", - "correct_option_index": 1 - }, - { - "qsns": "What is the octal equivalent of the decimal number 27?", - "opt1": "33", - "opt2": "37", - "opt3": "43", - "opt4": "47", - "correct_option": "33", - "correct_option_index": 1 - }, - { - "qsns": "What is the decimal equivalent of the hexadecimal number FF?", - "opt1": "255", - "opt2": "256", - "opt3": "257", - "opt4": "258", - "correct_option": "255", - "correct_option_index": 1 - }, - { - "qsns": "What is the binary equivalent of the octal number 76?", - "opt1": "111011", - "opt2": "110110", - "opt3": "110111", - "opt4": "111000", - "correct_option": "111110", - "correct_option_index": 2 - }, - { - "qsns": "Which number system is used in digital electronics?", - "opt1": "Decimal", - "opt2": "Binary", - "opt3": "Octal", - "opt4": "Hexadecimal", - "correct_option": "Binary", - "correct_option_index": 2 - }, - { - "qsns": "What is the hexadecimal equivalent of the binary number 101011?", - "opt1": "28", - "opt2": "20", - "opt3": "2F", - "opt4": "31", - "correct_option": "2B", - "correct_option_index": 1 - }, - { - "qsns": "What is the decimal equivalent of the octal number 63?", - "opt1": "51", - "opt2": "53", - "opt3": "55", - "opt4": "57", - "correct_option": "51", - "correct_option_index": 1 - }, - { - "qsns": "Which logic family defines a voltage range of 0 V to 0.8 V for a logical 0 and 2 V to 5V for a logical 1?", - "opt1": "TTL", - "opt2": "CMOS", - "opt3": "ECL", - "opt4": "None of the above", - "correct_option": "TTL", - "correct_option_index": 1 - }, - { - "qsns": "Which logic family consumes less power than TTL?", - "opt1": "TTL", - "opt2": "CMOS", - "opt3": "ECL", - "opt4": "None of the above", - "correct_option": "CMOS", - "correct_option_index": 2 - }, - { - "qsns": "What is the voltage range for a logical 0 in CMOS logic?", - "opt1": "0V to 0.5 V", - "opt2": "0V to 0.8 V", - "opt3": "0V to 1.5 V", - "opt4": "0V to 3.5 V", - "correct_option": "0V to 1.5 V", - "correct_option_index": 3 - }, - { - "qsns": "What is the voltage range for a logical 1 in CMOS logic?", - "opt1": "0V to 1.5 V", - "opt2": "1.5 V to 3.5 V", - "opt3": "2V to 5V", - "opt4": "3.5 V to 5V", - "correct_option": "3.5 V to 5V", - "correct_option_index": 4 - }, - { - "qsns": "Which logic family is known for its high speed and low power consumption?", - "opt1": "TTL", - "opt2": "CMOS", - "opt3": "ECL", - "opt4": "None of the above", - "correct_option": "CMOS", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following is true about logic levels?", - "opt1": "They determine the power consumption of a digital circuit.", - "opt2": "They determine the speed of a digital circuit.", - "opt3": "They determine how digital circuits interpret input signals.", - "opt4": "They determine the size of a digital circuit.", - "correct_option": "They determine how digital circuits interpret input signals.", - "correct_option_index": 3 - }, - { - "qsns": "What happens if a signal voltage falls outside the specified range for a logical 0 or 1?", - "opt1": "The circuit will interpret it as a logical 0.", - "opt2": "The circuit will interpret it as a logical 1.", - "opt3": "The circuit may interpret it incorrectly, leading to errors or circuit failure.", - "opt4": "The circuit will ignore the signal.", - "correct_option": "The circuit may interpret it incorrectly, leading to errors or circuit failure.", - "correct_option_index": 3 - }, - { - "qsns": "What are the two most common logic levels used in digital logic?", - "opt1": "Low and High", - "opt2": "0 and 1", - "opt3": "Negative and Positive", - "opt4": "True and False", - "correct_option": "0 and 1", - "correct_option_index": 2 - }, - { - "qsns": "Which logic level represents a logic 1 in a digital circuit?", - "opt1": "High", - "opt2": "Low", - "opt3": "Negative", - "opt4": "Positive", - "correct_option": "High", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following is NOT a typical voltage range for a logic 0?", - "opt1": "0V to 0.8V", - "opt2": "0V to 1.0V", - "opt3": "0V to 1.5V", - "opt4": "0V to 2.0V", - "correct_option": "0V to 2.0V", - "correct_option_index": 4 - }, - { - "qsns": "Which logic level is represented by a voltage above the high threshold voltage and below the low threshold voltage?", - "opt1": "Positive", - "opt2": "Negative", - "opt3": "Indeterminate", - "opt4": "None of the above", - "correct_option": "Indeterminate", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following logic gates has a single input and an inverted output?", - "opt1": "NOT gate", - "opt2": "OR gate", - "opt3": "AND gate", - "opt4": "NAND gate", - "correct_option": "NOT gate", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following logic gates requires all inputs to be high in order to produce a high output?", - "opt1": "OR gate", - "opt2": "AND gate", - "opt3": "XOR gate", - "opt4": "NOR gate", - "correct_option": "AND gate", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following logic gates produces a high output only when all inputs are low?", - "opt1": "OR gate", - "opt2": "AND gate", - "opt3": "NOR gate", - "opt4": "XOR gate", - "correct_option": "NOR gate", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following logic gates has two or more inputs and produces a high output if any one input is high?", - "opt1": "NOR gate", - "opt2": "XOR gate", - "opt3": "AND gate", - "opt4": "OR gate", - "correct_option": "OR gate", - "correct_option_index": 4 - }, - { - "qsns": "What is the output of an AND gate if one input is 1 and the other input is 0?", - "opt1": "0", - "opt2": "1", - "opt3": "Depends on the gate", - "opt4": "Cannot be determined", - "correct_option": "0", - "correct_option_index": 1 - }, - { - "qsns": "What is the output of a NAND gate if one input is 1 and the other input is 0?", - "opt1": "0", - "opt2": "1", - "opt3": "Depends on the gate", - "opt4": "Cannot be determined", - "correct_option": "1", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following logic gates has an output that is the inverse of the input?", - "opt1": "NOT gate", - "opt2": "AND gate", - "opt3": "OR gate", - "opt4": "XOR gate", - "correct_option": "NOT gate", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following logic gates has an output that is the opposite of the OR gate?", - "opt1": "OR gate", - "opt2": "NAND gate", - "opt3": "NOR gate", - "opt4": "XOR gate", - "correct_option": "NOR gate", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following logic gates has two or more inputs and produces a high output only when all inputs are high?", - "opt1": "OR gate", - "opt2": "XOR gate", - "opt3": "AND gate", - "opt4": "NOR gate", - "correct_option": "AND gate", - "correct_option_index": 3 - }, - { - "qsns": "What is the output of a XOR gate if both inputs are 1?", - "opt1": "0", - "opt2": "1", - "opt3": "Depends on the gate", - "opt4": "Cannot be determined", - "correct_option": "0", - "correct_option_index": 1 - }, - { - "qsns": "Which logic gate has the output opposite in logic level to its input?", - "opt1": "OR GATE", - "opt2": "AND gate", - "opt3": "NOT gate", - "opt4": "XOR gate", - "correct_option": "NOT gate", - "correct_option_index": 3 - }, - { - "qsns": "Which logic gate produces a high output only when all inputs are high?", - "opt1": "OR gate", - "opt2": "AND gate", - "opt3": "NOT gate", - "opt4": "XOR gate", - "correct_option": "AND gate", - "correct_option_index": 2 - }, - { - "qsns": "Which logic gate produces a high output when any input is high?", - "opt1": "OR gate", - "opt2": "AND gate", - "opt3": "NOT gate", - "opt4": "XOR gate", - "correct_option": "OR gate", - "correct_option_index": 1 - }, - { - "qsns": "Which logic gate produces a low output only when all inputs are low?", - "opt1": "OR gate", - "opt2": "AND gate", - "opt3": "NOT gate", - "opt4": "XOR gate", - "correct_option": "OR gate", - "correct_option_index": 1 - }, - { - "qsns": "Which logic gate produces a high output when the inputs are different?", - "opt1": "OR gate", - "opt2": "AND gate", - "opt3": "NOT gate", - "opt4": "XOR gate", - "correct_option": "XOR gate", - "correct_option_index": 4 - }, - { - "qsns": "Which of the following is NOT a basic operation in Boolean algebra?", - "opt1": "AND", - "opt2": "OR", - "opt3": "NOT", - "opt4": "XOR", - "correct_option": "XOR", - "correct_option_index": 4 - }, - { - "qsns": "What is the Boolean expression for the NAND gate?", - "opt1": "A + B", - "opt2": "AB", - "opt3": "A' + B'", - "opt4": "A'B'", - "correct_option": "A' + B'", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following Boolean identities is NOT true?", - "opt1": "A + 0 = A", - "opt2": "A + A' = 1", - "opt3": "A + B = B + A", - "opt4": "A + A = A", - "correct_option": "A + A = A", - "correct_option_index": 4 - }, - { - "qsns": "What is the Boolean expression for the NOR gate?", - "opt1": "A + B", - "opt2": "AB", - "opt3": "A' + B'", - "opt4": "A'B'", - "correct_option": "A'B'", - "correct_option_index": 4 - }, - { - "qsns": "What is the complement of the Boolean expression A'B + AB'?", - "opt1": "A' + B'", - "opt2": "A + B", - "opt3": "A'B", - "opt4": "AB", - "correct_option": "A + B", - "correct_option_index": 2 - }, - { - "qsns": "Which Boolean operator has the highest precedence?", - "opt1": "NOT", - "opt2": "AND", - "opt3": "OR", - "opt4": "XOR", - "correct_option": "NOT", - "correct_option_index": 1 - }, - { - "qsns": "Which Boolean operator has the lowest precedence?", - "opt1": "NOT", - "opt2": "AND", - "opt3": "OR", - "opt4": "XOR", - "correct_option": "OR", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following is a Boolean operator?", - "opt1": "+", - "opt2": "*", - "opt3": "&", - "opt4": "/", - "correct_option": "/", - "correct_option_index": 4 - }, - { - "qsns": "What is the Boolean expression for the OR gate?", - "opt1": "A+B", - "opt2": "A*B", - "opt3": "A/B", - "opt4": "A&B", - "correct_option": "A+B", - "correct_option_index": 1 - }, - { - "qsns": "What is the Boolean expression for the AND gate?", - "opt1": "A+B", - "opt2": "A*B", - "opt3": "A/B", - "opt4": "A&B", - "correct_option": "A*B", - "correct_option_index": 2 - }, - { - "qsns": "What is the Boolean expression for the NOT gate?", - "opt1": "A+B", - "opt2": "A*B", - "opt3": "A'", - "opt4": "A&B'", - "correct_option": "A'", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following is an example of a Boolean equation?", - "opt1": "y=x+2", - "opt2": "y=x*2", - "opt3": "y=xORz", - "opt4": "y=xAND2", - "correct_option": "y=xAND2", - "correct_option_index": 4 - }, - { - "qsns": "Which of the following is a Boolean identity?", - "opt1": "A+0=A", - "opt2": "A/1=A", - "opt3": "A*0=A", - "opt4": "A-1=A", - "correct_option": "A+0=A", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following is a Boolean simplification rule?", - "opt1": "A+A=A", - "opt2": "A*A=A", - "opt3": "A+B=B+A", - "opt4": "A*B=B*A", - "correct_option": "A+B=B+A", - "correct_option_index": 3 - }, - { - "qsns": "What is the result of the Boolean operation A OR (B AND C)?", - "opt1": "A+B*C", - "opt2": "A+B+C", - "opt3": "A*B*C", - "opt4": "A*B+C", - "correct_option": "A+B*C", - "correct_option_index": 1 - }, - { - "qsns": "What is the result of the Boolean operation (A OR B) AND (A OR C)?", - "opt1": "A+B+C", - "opt2": "A*B*C", - "opt3": "A+B*C", - "opt4": "A*B+C", - "correct_option": "A+B+C", - "correct_option_index": 1 - }, - { - "qsns": "What is the Boolean expression for the exclusive-OR (XOR) gate?", - "opt1": "A+B", - "opt2": "A*B", - "opt3": "A/B", - "opt4": "AB", - "correct_option": "AB", - "correct_option_index": 4 - }, - { - "qsns": "What is Boolean algebra?", - "opt1": "A branch of mathematics that deals with logic gates", - "opt2": "A branch of mathematics that deals with Boolean functions", - "opt3": "A branch of mathematics that deals with calculus", - "opt4": "A branch of mathematics that deals with programming languages", - "correct_option": "A branch of mathematics that deals with Boolean functions", - "correct_option_index": 2 - }, - { - "qsns": "What is a Boolean variable?", - "opt1": "A variable that can take on any value, including true or false", - "opt2": "A variable that can only take on two values, true or false", - "opt3": "A variable that can take on multiple values at once", - "opt4": "A variable that is always true", - "correct_option": "A variable that can only take on two values, true or false", - "correct_option_index": 2 - }, - { - "qsns": "What is a Boolean expression?", - "opt1": "A mathematical expression that uses Boolean variables, operators, and constants", - "opt2": "A mathematical expression that uses only integers and operators", - "opt3": "A mathematical expression that uses real numbers and operators", - "opt4": "A mathematical expression that uses only constants and operators", - "correct_option": "A mathematical expression that uses Boolean variables, operators, and constants", - "correct_option_index": 1 - }, - { - "qsns": "Which Boolean operator represents logical AND?", - "opt1": "+", - "opt2": "*", - "opt3": ".", - "opt4": "-", - "correct_option": ".", - "correct_option_index": 3 - }, - { - "qsns": "Which Boolean operator represents logical OR?", - "opt1": "+", - "opt2": "*", - "opt3": "/", - "opt4": "-", - "correct_option": "+", - "correct_option_index": 1 - }, - { - "qsns": "Which Boolean operator represents logical NOT?", - "opt1": "+", - "opt2": "*", - "opt3": "'", - "opt4": "/", - "correct_option": "'", - "correct_option_index": 3 - }, - { - "qsns": "What is the complement of A in Boolean algebra?", - "opt1": "A'", - "opt2": "A+", - "opt3": "A*", - "opt4": "A-", - "correct_option": "A'", - "correct_option_index": 1 - }, - { - "qsns": "What is the simplified expression for A + AB?", - "opt1": "A", - "opt2": "B", - "opt3": "AB", - "opt4": "1", - "correct_option": "A", - "correct_option_index": 1 - }, - { - "qsns": "What is the simplified expression for AB + A'B?", - "opt1": "AB + A'", - "opt2": "AB", - "opt3": "A+B", - "opt4": "AB'", - "correct_option": "AB'", - "correct_option_index": 4 - }, - { - "qsns": "What is the Sum-of-Products (SOP) method in digital logic?", - "opt1": "A technique used to simplify Boolean expressions", - "opt2": "A technique used to convert decimal numbers to binary", - "opt3": "A technique used to convert binary numbers to decimal", - "opt4": "A technique used to convert octal numbers to hexadecimal", - "correct_option": "A technique used to simplify Boolean expressions", - "correct_option_index": 1 - }, - { - "qsns": "What is the first step in using the SOP method to simplify a Boolean expression?", - "opt1": "Create a truth table", - "opt2": "Write the expression in standard form", - "opt3": "Identify the rows where the expression evaluates to 1", - "opt4": "Combine the rows with an OR operator", - "correct_option": "Write the expression in standard form", - "correct_option_index": 2 - }, - { - "qsns": "What are the Boolean operators used in the standard form of a Boolean expression?", - "opt1": "AND, OR, and XOR", - "opt2": "AND, OR, and NOT", - "opt3": "XOR, NAND, and NOR", - "opt4": "XOR, NOT, and NAND", - "correct_option": "AND, OR, and NOT", - "correct_option_index": 2 - }, - { - "qsns": "In the SOP method, what is the next step after creating a truth table for the Boolean expression?", - "opt1": "Identify the rows where the expression evaluates to 0", - "opt2": "Identify the rows where the expression evaluates to 1", - "opt3": "Convert the binary inputs to decimal", - "opt4": "Simplify the expression using a Karnaugh map", - "correct_option": "Identify the rows where the expression evaluates to 1", - "correct_option_index": 2 - }, - { - "qsns": "What is the final step in using the SOP method to simplify a Boolean expression?", - "opt1": "Combine the rows with an AND operator", - "opt2": "Combine the rows with an OR operator", - "opt3": "Convert the expression to hexadecimal", - "opt4": "Convert the expression to binary", - "correct_option": "Combine the rows with an OR operator", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following is an example of a Boolean expression that can be simplified using the SOP method?", - "opt1": "F=A+B", - "opt2": "F=A*B", - "opt3": "F=A XOR B", - "opt4": "F=AB+A'B+AB'", - "correct_option": "F=AB+A'B+AB'", - "correct_option_index": 4 - }, - { - "qsns": "How many rows are in the truth table for a Boolean expression with two input variables?", - "opt1": "2", - "opt2": "4", - "opt3": "6", - "opt4": "8", - "correct_option": "4", - "correct_option_index": 2 - }, - { - "qsns": "What is the purpose of the SOP method in digital logic?", - "opt1": "To convert decimal numbers to binary", - "opt2": "To simplify complex Boolean expressions", - "opt3": "To implement logic gates using a truth table", - "opt4": "To convert binary numbers to hexadecimal", - "correct_option": "To simplify complex Boolean expressions", - "correct_option_index": 2 - }, - { - "qsns": "What is the meaning of \"sum of products\" in the SOP method?", - "opt1": "The sum of the input variables in the Boolean expression", - "opt2": "The sum of the rows in the truth table where the expression evaluates to 1", - "opt3": "The sum of the Boolean operators used in the expression", - "opt4": "The sum of the binary values in the truth table", - "correct_option": "The sum of the rows in the truth table where the expression evaluates to 1", - "correct_option_index": 2 - }, - { - "qsns": "What is the Sum-of-Products (SOP) method used for in digital logic?", - "opt1": "To create a truth table for a given Boolean expression", - "opt2": "To simplify a given Boolean expression", - "opt3": "To convert a decimal number to binary", - "opt4": "To perform arithmetic operations on binary numbers", - "correct_option": "To simplify a given Boolean expression", - "correct_option_index": 2 - }, - { - "qsns": "What is the first step when using the SOP method to simplify a Boolean expression?", - "opt1": "Create a truth table for the expression", - "opt2": "Identify the rows where the expression evaluates to 1", - "opt3": "Write the expression in the standard form", - "opt4": "Combine the rows with an OR operator", - "correct_option": "Write the expression in the standard form", - "correct_option_index": 3 - }, - { - "qsns": "What is the standard form of a Boolean expression?", - "opt1": "A form without parentheses", - "opt2": "A form without negation", - "opt3": "A form with parentheses and Boolean operators", - "opt4": "A form with only one variable", - "correct_option": "A form with parentheses and Boolean operators", - "correct_option_index": 3 - }, - { - "qsns": "How do you identify the rows in a truth table where the expression evaluates to 1 when using the SOP method?", - "opt1": "Identify the rows where all variables are 1", - "opt2": "Identify the rows where all variables are 0", - "opt3": "Identify the rows where the expression is true", - "opt4": "Identify the rows where the expression is false", - "correct_option": "Identify the rows where the expression is true", - "correct_option_index": 3 - }, - { - "qsns": "In the SOP method, what is the next step after identifying the rows where the expression evaluates to 1?", - "opt1": "Write down each row in terms of the input variables", - "opt2": "Combine the rows with an AND operator", - "opt3": "Combine the rows with an OR operator", - "opt4": "Create a Karnaugh map", - "correct_option": "Write down each row in terms of the input variables", - "correct_option_index": 1 - }, - { - "qsns": "What Boolean operator is used to combine the rows in the SOP method?", - "opt1": "AND", - "opt2": "OR", - "opt3": "NOT", - "opt4": "XOR", - "correct_option": "OR", - "correct_option_index": 2 - }, - { - "qsns": "What is the final result of the SOP method?", - "opt1": "A simplified sum of products expression", - "opt2": "A simplified product of sums expression", - "opt3": "A truth table", - "opt4": "A Karnaugh map", - "correct_option": "A simplified sum of products expression", - "correct_option_index": 1 - }, - { - "qsns": "How is a row with a value of 0 represented in the SOP method?", - "opt1": "With the corresponding variable", - "opt2": "With the complement of the corresponding variable", - "opt3": "With the negation of the corresponding variable", - "opt4": "With a 0", - "correct_option": "With the complement of the corresponding variable", - "correct_option_index": 2 - }, - { - "qsns": "What is the main advantage of using the SOP method to simplify Boolean expressions?", - "opt1": "It results in a smaller truth table", - "opt2": "It is easier to understand than other methods", - "opt3": "It results in a more efficient circuit design", - "opt4": "It works for any type of Boolean expression", - "correct_option": "It results in a more efficient circuit design", - "correct_option_index": 3 - }, - { - "qsns": "Can the SOP method be used to simplify any Boolean expression?", - "opt1": "Yes, it can be used for any expression", - "opt2": "No, it can only be used for expressions with three variables or fewer", - "opt3": "No, it can only be used for expressions in standard form", - "opt4": "No, it can only be used for expressions with a small number of terms", - "correct_option": "Yes, it can be used for any expression", - "correct_option_index": 1 - }, - { - "qsns": "What is the Product-of-Sums (POS) method used for in digital logic?", - "opt1": "Generating truth tables", - "opt2": "Simplifying Boolean expressions", - "opt3": "Building digital circuits", - "opt4": "Converting binary to decimal", - "correct_option": "Simplifying Boolean expressions", - "correct_option_index": 2 - }, - { - "qsns": "In the POS method, what is the first step in simplifying a Boolean expression?", - "opt1": "Identify the rows of the truth table where the expression evaluates to 0", - "opt2": "Group the variables into terms and combine them with OR operators", - "opt3": "Write the expression in the standard form", - "opt4": "Combine the terms using AND operators", - "correct_option": "Write the expression in the standard form", - "correct_option_index": 3 - }, - { - "qsns": "In the POS method, what is the second step in simplifying a Boolean expression?", - "opt1": "Identify the rows of the truth table where the expression evaluates to 0", - "opt2": "Group the variables into terms and combine them with OR operators", - "opt3": "Write the expression in the standard form", - "opt4": "Combine the terms using AND operators", - "correct_option": "Identify the rows of the truth table where the expression evaluates to 0", - "correct_option_index": 1 - }, - { - "qsns": "What is the final result of applying the POS method to a Boolean expression?", - "opt1": "A simplified sum of products expression", - "opt2": "A simplified product of sums expression", - "opt3": "A minimized truth table", - "opt4": "A circuit diagram", - "correct_option": "A simplified product of sums expression", - "correct_option_index": 2 - }, - { - "qsns": "In the POS method, how are the rows of the truth table where the expression evaluates to 0 combined?", - "opt1": "Using AND operators", - "opt2": "Using OR operators", - "opt3": "Using XOR operators", - "opt4": "Using NOT operators", - "correct_option": "Using OR operators", - "correct_option_index": 2 - }, - { - "qsns": "When is the POS method particularly useful?", - "opt1": "When the expression contains few terms", - "opt2": "When the expression contains many terms", - "opt3": "When the expression contains only one variable", - "opt4": "When the expression contains only constants", - "correct_option": "When the expression contains many terms", - "correct_option_index": 2 - }, - { - "qsns": "To complement a Boolean expression using the POS method, what must be done to the final result?", - "opt1": "It must be inverted", - "opt2": "It must be negated", - "opt3": "It must be squared", - "opt4": "It must be cubed", - "correct_option": "It must be inverted", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following is a benefit of using the POS method in digital logic?", - "opt1": "It simplifies truth tables", - "opt2": "It reduces the size and complexity of digital circuits", - "opt3": "It converts decimal to binary", - "opt4": "It generates random binary numbers", - "correct_option": "It reduces the size and complexity of digital circuits", - "correct_option_index": 2 - }, - { - "qsns": "What is the Product-of-Sums method in digital logic?", - "opt1": "A method for simplifying Boolean expressions by combining sums of variables", - "opt2": "A method for simplifying Boolean expressions by combining products of variables", - "opt3": "A method for generating truth tables from Boolean expressions", - "opt4": "A method for generating Boolean expressions from truth tables", - "correct_option": "A method for simplifying Boolean expressions by combining products of variables", - "correct_option_index": 2 - }, - { - "qsns": "What is the dual of the Product-of-Sums method?", - "opt1": "Sum-of-Products method", - "opt2": "Combinational logic", - "opt3": "Sequential logic", - "opt4": "None of the above", - "correct_option": "Sum-of-Products method", - "correct_option_index": 1 - }, - { - "qsns": "What is the first step in the Product-of-Sums method?", - "opt1": "Identify the rows where the expression evaluates to 1", - "opt2": "Identify the rows where the expression evaluates to 0", - "opt3": "Write the expression in terms of the input variables", - "opt4": "None of the above", - "correct_option": "Identify the rows where the expression evaluates to 0", - "correct_option_index": 2 - }, - { - "qsns": "What is the second step in the Product-of-Sums method?", - "opt1": "Identify the rows where the expression evaluates to 1", - "opt2": "Identify the rows where the expression evaluates to 0", - "opt3": "Write the expression in terms of the input variables", - "opt4": "None of the above", - "correct_option": "Write the expression in terms of the input variables", - "correct_option_index": 3 - }, - { - "qsns": "What is the final step in the Product-of-Sums method?", - "opt1": "Combine the rows using OR operators", - "opt2": "Simplify the expression using DeMorgan's theorem", - "opt3": "Combine the rows using AND operators", - "opt4": "None of the above", - "correct_option": "Combine the rows using OR operators", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following is an advantage of using the Product-of-Sums method?", - "opt1": "It is faster than other simplification methods", - "opt2": "It is easier to understand than other simplification methods", - "opt3": "It is more accurate than other simplification methods", - "opt4": "It is useful in cases where the expression contains many terms", - "correct_option": "It is easier to understand than other simplification methods", - "correct_option_index": 2 - }, - { - "qsns": "What is the purpose of applying the Product-of-Sums method to the complement of an expression?", - "opt1": "To generate a truth table for the expression", - "opt2": "To simplify the expression using DeMorgan's theorem", - "opt3": "To generate a simplified expression that is the complement of the original expression", - "opt4": "None of the above", - "correct_option": "To generate a simplified expression that is the complement of the original expression", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following is true about the Product-of-Sums method?", - "opt1": "It can only be used with binary variables", - "opt2": "It can be used with any type of variable", - "opt3": "It can only be used with Boolean expressions that contain AND operators", - "opt4": "None of the above", - "correct_option": "It can be used with any type of variable", - "correct_option_index": 2 - }, - { - "qsns": "What is the advantage of using the Product-of-Sums method over the Sum-of-Products method?", - "opt1": "The resulting expression is easier to understand", - "opt2": "The resulting expression is shorter and requires fewer gates", - "opt3": "The method is faster and requires less computation", - "opt4": "None of the above", - "correct_option": "The resulting expression is shorter and requires fewer gates", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following is an application of the Product-of-Sums method?", - "opt1": "Simplifying Boolean expressions in digital circuits", - "opt2": "Generating truth tables for digital circuits", - "opt3": "Designing sequential logic circuits", - "opt4": "None of the above", - "correct_option": "Simplifying Boolean expressions in digital circuits", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following is a graphical tool used to simplify Boolean expressions?", - "opt1": "Truth table", - "opt2": "Karnaugh map", - "opt3": "Logic gate", - "opt4": "Logic circuit", - "correct_option": "Karnaugh map", - "correct_option_index": 2 - }, - { - "qsns": "How are cells identified in a Karnaugh map?", - "opt1": "By their input variable combinations", - "opt2": "By their output values", - "opt3": "By their row and column numbers", - "opt4": "By their position on the map", - "correct_option": "By their input variable combinations", - "correct_option_index": 1 - }, - { - "qsns": "In the Karnaugh map, which cells can be combined to form a simplified expression?", - "opt1": "Diagonal cells", - "opt2": "Horizontal cells", - "opt3": "Vertical cells", - "opt4": "Adjacent cells", - "correct_option": "Adjacent cells", - "correct_option_index": 4 - }, - { - "qsns": "What does SOP stand for in the context of digital logic?", - "opt1": "Sum of Products", - "opt2": "Product of Sums", - "opt3": "Sum of Squares", - "opt4": "Product of Squares", - "correct_option": "Sum of Products", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following is true for the cells of a Karnaugh map?", - "opt1": "Each cell can only contain a 0 or a 1", - "opt2": "Each cell can contain a 0, 1, or X", - "opt3": "Each cell can contain any value between 0 and 1", - "opt4": "Each cell can contain a 1, 2, or 3", - "correct_option": "Each cell can only contain a 0 or a 1", - "correct_option_index": 1 - }, - { - "qsns": "What is a Karnaugh map used for?", - "opt1": "To generate a truth table", - "opt2": "To simplify Boolean expressions", - "opt3": "To convert a Boolean expression to a logic circuit", - "opt4": "To convert a Boolean expression to a logic gate", - "correct_option": "To simplify Boolean expressions", - "correct_option_index": 2 - }, - { - "qsns": "How many cells does a Karnaugh map have if the corresponding Boolean expression has three input variables?", - "opt1": "12", - "opt2": "8", - "opt3": "16", - "opt4": "4", - "correct_option": "8", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following is not a valid combination of input variables in a Karnaugh map for a two-variable expression?", - "opt1": "00", - "opt2": "01", - "opt3": "10", - "opt4": "11", - "correct_option": "21", - "correct_option_index": 5 - }, - { - "qsns": "How are adjacent cells identified in a Karnaugh map?", - "opt1": "By diagonal lines", - "opt2": "By vertical lines", - "opt3": "By horizontal lines", - "opt4": "Both b and c", - "correct_option": "Both b and c", - "correct_option_index": 4 - }, - { - "qsns": "Which of the following is a simplified expression for the Karnaugh map shown below?", - "opt1": "AB + BC + AD", - "opt2": "AB + CD", - "opt3": "AC + BD", - "opt4": "ACD + BCD", - "correct_option": "AB + CD", - "correct_option_index": 2 - }, - { - "qsns": "How is a truth table converted into a Karnaugh map?", - "opt1": "By graphing the data points", - "opt2": "By plotting the input and output values on a grid", - "opt3": "By counting the number of 0's and 1's", - "opt4": "By entering the data into a computer program", - "correct_option": "By plotting the input and output values on a grid", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following Boolean expressions is equivalent to the Karnaugh map shown below?", - "opt1": "AB + BC + AD", - "opt2": "AB + CD", - "opt3": "AC + BD", - "opt4": "ACD + BCD", - "correct_option": "AB + CD", - "correct_option_index": 2 - }, - { - "qsns": "How many cells in a Karnaugh map can be combined to form a simplified expression?", - "opt1": "1", - "opt2": "2", - "opt3": "3", - "opt4": "Both A and B", - "correct_option": "Both A and B", - "correct_option_index": 4 - }, - { - "qsns": "How is a simplified expression converted back into a standard SOP or POS expression?", - "opt1": "By using De Morgan's theorem", - "opt2": "By applying the distributive property", - "opt3": "By factoring out common terms", - "opt4": "Both A and B", - "correct_option": "Both A and B", - "correct_option_index": 4 - }, - { - "qsns": "What is the duty cycle of a square wave generator?", - "opt1": "The time period of the waveform", - "opt2": "The ratio of the pulse width to the time period", - "opt3": "The amplitude of the waveform", - "opt4": "The frequency of the waveform", - "correct_option": "The ratio of the pulse width to the time period", - "correct_option_index": 2 - }, - { - "qsns": "What type of waveform is produced by a triangle wave generator?", - "opt1": "A waveform with constant amplitude and frequency", - "opt2": "A waveform with a linearly increasing or decreasing amplitude", - "opt3": "A waveform with a constant frequency and varying amplitude", - "opt4": "A waveform with random fluctuations in amplitude and frequency", - "correct_option": "A waveform with a linearly increasing or decreasing amplitude", - "correct_option_index": 2 - }, - { - "qsns": "What type of circuit is commonly used to generate square wave signals?", - "opt1": "An op-amp circuit", - "opt2": "A transistor circuit", - "opt3": "A flip-flop circuit", - "opt4": "A filter circuit", - "correct_option": "An op-amp circuit", - "correct_option_index": 1 - }, - { - "qsns": "What is the advantage of using a relaxation oscillator for square wave generation?", - "opt1": "Simplicity and low cost", - "opt2": "High frequency stability and accuracy", - "opt3": "High power output", - "opt4": "Greater frequency range", - "correct_option": "Simplicity and low cost", - "correct_option_index": 1 - }, - { - "qsns": "What is the role of a Schmitt trigger in a square wave generator circuit?", - "opt1": "To generate a clean and stable square wave signal", - "opt2": "To provide frequency-selective response", - "opt3": "To amplify the input signal", - "opt4": "To filter out unwanted frequencies", - "correct_option": "To generate a clean and stable square wave signal", - "correct_option_index": 1 - }, - { - "qsns": "What is the frequency of a triangle wave generator determined by?", - "opt1": "The time constant of the RC circuit", - "opt2": "The resonant frequency of the tank circuit", - "opt3": "The frequency of the crystal", - "opt4": "The input voltage of the oscillator", - "correct_option": "The time constant of the RC circuit", - "correct_option_index": 1 - }, - { - "qsns": "What is the advantage of using a ramp generator for triangle wave generation?", - "opt1": "Simplicity and low cost", - "opt2": "High frequency stability and accuracy", - "opt3": "High power output", - "opt4": "Greater frequency range", - "correct_option": "Simplicity and low cost", - "correct_option_index": 1 - }, - { - "qsns": "What type of circuit is commonly used to generate triangle wave signals?", - "opt1": "An op-amp circuit", - "opt2": "An integrator circuit", - "opt3": "A flip-flop circuit", - "opt4": "A transistor circuit", - "correct_option": "An integrator circuit", - "correct_option_index": 2 - }, - { - "qsns": "What is the amplitude of a triangle wave generator determined by?", - "opt1": "The time constant of the RC circuit", - "opt2": "The resonant frequency of the tank circuit", - "opt3": "The frequency of the crystal", - "opt4": "The input voltage of the oscillator", - "correct_option": "The input voltage of the oscillator", - "correct_option_index": 4 - }, - { - "qsns": "What is the advantage of using an op-amp circuit for triangle wave generation?", - "opt1": "Simplicity and low cost", - "opt2": "High frequency stability and accuracy", - "opt3": "High power output", - "opt4": "Greater frequency range", - "correct_option": "Simplicity and low cost", - "correct_option_index": 1 - }, - { - "qsns": "Which waveform generator is typically used for testing digital circuits?", - "opt1": "Sine wave generator", - "opt2": "Square wave generator", - "opt3": "Triangle wave generator", - "opt4": "Sawtooth wave generator", - "correct_option": "Square wave generator", - "correct_option_index": 2 - }, - { - "qsns": "What is the duty cycle of a square wave?", - "opt1": "The time period of the wave", - "opt2": "The ratio of the pulse width to the time period", - "opt3": "The frequency of the wave", - "opt4": "The amplitude of the wave", - "correct_option": "The ratio of the pulse width to the time period", - "correct_option_index": 2 - }, - { - "qsns": "What is the advantage of using a square wave generator over other types of waveform generators?", - "opt1": "Simplicity and low cost", - "opt2": "High frequency stability and accuracy", - "opt3": "High power output", - "opt4": "Wide range of frequency and waveform options", - "correct_option": "Simplicity and low cost", - "correct_option_index": 1 - }, - { - "qsns": "Which waveform generator is capable of producing more complex waveforms than a square wave generator?", - "opt1": "Sine wave generator", - "opt2": "Triangle wave generator", - "opt3": "Sawtooth wave generator", - "opt4": "Arbitrary waveform generator", - "correct_option": "Arbitrary waveform generator", - "correct_option_index": 4 - }, - { - "qsns": "What is the shape of the waveform produced by a triangle wave generator?", - "opt1": "A series of pulses with a constant amplitude", - "opt2": "A smoothly varying waveform with a linear rise and fall", - "opt3": "A waveform with a rapidly changing rise and a slow fall", - "opt4": "A waveform with a rapidly changing fall and a slow rise", - "correct_option": "A smoothly varying waveform with a linear rise and fall", - "correct_option_index": 2 - }, - { - "qsns": "What is the frequency of a triangle wave generator determined by?", - "opt1": "The time period of the waveform", - "opt2": "The amplitude of the waveform", - "opt3": "The duty cycle of the waveform", - "opt4": "The slope of the waveform", - "correct_option": "The slope of the waveform", - "correct_option_index": 4 - }, - { - "qsns": "What is the advantage of using a triangle wave generator over a square wave generator?", - "opt1": "Greater simplicity and lower cost", - "opt2": "Higher frequency stability and accuracy", - "opt3": "Higher power output", - "opt4": "More gradual transitions and reduced harmonic content", - "correct_option": "More gradual transitions and reduced harmonic content", - "correct_option_index": 4 - }, - { - "qsns": "Which type of waveform generator is commonly used in audio applications?", - "opt1": "Sine wave generator", - "opt2": "Square wave generator", - "opt3": "Triangle wave generator", - "opt4": "Sawtooth wave generator", - "correct_option": "Sine wave generator", - "correct_option_index": 1 - }, - { - "qsns": "What is the shape of the waveform produced by a sawtooth wave generator?", - "opt1": "A series of pulses with a constant amplitude", - "opt2": "A smoothly varying waveform with a linear rise and fall", - "opt3": "A waveform with a rapidly changing rise and a slow fall", - "opt4": "A waveform with a rapidly changing fall and a slow rise", - "correct_option": "A waveform with a rapidly changing rise and a slow fall", - "correct_option_index": 3 - }, - { - "qsns": "What is the advantage of using an arbitrary waveform generator over other types of waveform generators?", - "opt1": "Greater simplicity and lower cost", - "opt2": "Higher frequency stability and accuracy", - "opt3": "Higher power output", - "opt4": "The ability to generate complex and customized waveforms", - "correct_option": "The ability to generate complex and customized waveforms", - "correct_option_index": 4 - }, - { - "qsns": "What is the amplifying element used in a Class A output stage?", - "opt1": "Bipolar Junction Transistor", - "opt2": "Field-Effect Transistor", - "opt3": "Operational Amplifier", - "opt4": "Vacuum Tube", - "correct_option": "Bipolar Junction Transistor", - "correct_option_index": 1 - }, - { - "qsns": "What causes crossover distortion in a Class B output stage?", - "opt1": "The amplifying element conducts for the entire input signal cycle", - "opt2": "The amplifying element is biased so that it conducts for less than half of the input signal cycle", - "opt3": "Two amplifying elements are used and each one conducts for half of the input signal cycle", - "opt4": "The switching between the amplifying elements causes a gap in the output signal.", - "correct_option": "The switching between the amplifying elements causes a gap in the output signal.", - "correct_option_index": 4 - }, - { - "qsns": "What is the advantage of a Class AB output stage over a Class B output stage?", - "opt1": "Higher efficiency", - "opt2": "Lower distortion", - "opt3": "Reduced crossover distortion", - "opt4": "Lower cost", - "correct_option": "Reduced crossover distortion", - "correct_option_index": 3 - }, - { - "qsns": "What is the operating mode of a Class C output stage?", - "opt1": "Linear", - "opt2": "Non-linear", - "opt3": "Saturated", - "opt4": "Reverse biased", - "correct_option": "Non-linear", - "correct_option_index": 2 - }, - { - "qsns": "What is the advantage of a Class D output stage over other output stages?", - "opt1": "Low distortion", - "opt2": "High linearity", - "opt3": "High efficiency", - "opt4": "Low switching noise", - "correct_option": "High efficiency", - "correct_option_index": 3 - }, - { - "qsns": "What is the primary disadvantage of a Class A output stage?", - "opt1": "High distortion", - "opt2": "Low efficiency", - "opt3": "High switching noise", - "opt4": "High cost", - "correct_option": "Low efficiency", - "correct_option_index": 2 - }, - { - "qsns": "Which type of output stage is suitable for RF amplifiers?", - "opt1": "Class A", - "opt2": "Class B", - "opt3": "Class AB", - "opt4": "Class C", - "correct_option": "Class C", - "correct_option_index": 4 - }, - { - "qsns": "What is the biasing arrangement used in a Class AB output stage?", - "opt1": "The amplifying element is biased to conduct for the entire input signal cycle.", - "opt2": "The amplifying element is biased to conduct for less than half of the input signal cycle.", - "opt3": "The bias voltage is varied to adjust the conduction angle.", - "opt4": "Two amplifying elements are used and each one conducts for half of the input signal cycle.", - "correct_option": "The bias voltage is varied to adjust the conduction angle.", - "correct_option_index": 3 - }, - { - "qsns": "Which type of output stage is used in audio power amplifiers?", - "opt1": "Class A", - "opt2": "Class B", - "opt3": "Class AB", - "opt4": "Class C", - "correct_option": "Class AB", - "correct_option_index": 3 - }, - { - "qsns": "Which type of output stage is commonly used in switch-mode power supplies?", - "opt1": "Class A", - "opt2": "Class B", - "opt3": "Class AB", - "opt4": "Class D", - "correct_option": "Class D", - "correct_option_index": 4 - }, - { - "qsns": "Which of the following is a characteristic of a class A output stage?", - "opt1": "High efficiency", - "opt2": "Low distortion", - "opt3": "Crossover distortion", - "opt4": "Conducts for less than half of the input signal cycle", - "correct_option": "Low distortion", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following output stages uses two amplifying elements that conduct for half of the input signal cycle each?", - "opt1": "Class A", - "opt2": "Class B", - "opt3": "Class C", - "opt4": "Class AB", - "correct_option": "Class B", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following output stages is a combination of class A and class B?", - "opt1": "Class A", - "opt2": "Class B", - "opt3": "Class AB", - "opt4": "Class C", - "correct_option": "Class AB", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following output stages is suitable for RF amplifiers?", - "opt1": "Class A", - "opt2": "Class B", - "opt3": "Class AB", - "opt4": "Class C", - "correct_option": "Class C", - "correct_option_index": 4 - }, - { - "qsns": "Which of the following output stages uses pulse width modulation to convert the input signal into a train of pulses?", - "opt1": "Class A", - "opt2": "Class B", - "opt3": "Class C", - "opt4": "Class D", - "correct_option": "Class D", - "correct_option_index": 4 - }, - { - "qsns": "Which of the following is a disadvantage of a class B output stage?", - "opt1": "Low distortion", - "opt2": "High efficiency", - "opt3": "Crossover distortion", - "opt4": "Conducts for the entire input signal cycle", - "correct_option": "Crossover distortion", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following output stages is the most efficient?", - "opt1": "Class A", - "opt2": "Class B", - "opt3": "Class AB", - "opt4": "Class C", - "correct_option": "Class C", - "correct_option_index": 4 - }, - { - "qsns": "Which of the following output stages is the least efficient?", - "opt1": "Class A", - "opt2": "Class B", - "opt3": "Class AB", - "opt4": "Class C", - "correct_option": "Class A", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following output stages has a biasing arrangement that allows the amplifying element to conduct slightly even when there is no input signal?", - "opt1": "Class A", - "opt2": "Class B", - "opt3": "Class AB", - "opt4": "Class C", - "correct_option": "Class AB", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following output stages is suitable for high power audio amplifiers?", - "opt1": "Class A", - "opt2": "Class B", - "opt3": "Class AB", - "opt4": "Class C", - "correct_option": "Class AB", - "correct_option_index": 3 - }, - { - "qsns": "What is the main advantage of a Class A output stage?", - "opt1": "High efficiency", - "opt2": "Low distortion", - "opt3": "Low power consumption", - "opt4": "High output power", - "correct_option": "Low distortion", - "correct_option_index": 2 - }, - { - "qsns": "What is the main disadvantage of a Class A output stage?", - "opt1": "High distortion", - "opt2": "Low efficiency", - "opt3": "High power consumption", - "opt4": "Low output power", - "correct_option": "Low efficiency", - "correct_option_index": 2 - }, - { - "qsns": "What type of biasing is commonly used in Class A output stages?", - "opt1": "Fixed bias", - "opt2": "Self-bias", - "opt3": "Voltage divider bias", - "opt4": "Current mirror bias", - "correct_option": "Fixed bias", - "correct_option_index": 1 - }, - { - "qsns": "What is the DC bias point of a Class A output stage?", - "opt1": "Equal to the positive supply voltage", - "opt2": "Halfway between the positive and negative supply voltage", - "opt3": "Equal to the negative supply voltage", - "opt4": "Zero", - "correct_option": "Halfway between the positive and negative supply voltage", - "correct_option_index": 2 - }, - { - "qsns": "What is the maximum theoretical efficiency of a Class A output stage?", - "opt1": "25%", - "opt2": "50%", - "opt3": "75%", - "opt4": "100%", - "correct_option": "50%", - "correct_option_index": 2 - }, - { - "qsns": "What is the typical output power of a Class A amplifier?", - "opt1": "Less than 1 watt", - "opt2": "1 watt to 10 watts", - "opt3": "10 watts to 100 watts", - "opt4": "More than 100 watts", - "correct_option": "1 watt to 10 watts", - "correct_option_index": 2 - }, - { - "qsns": "What type of load is commonly used in Class A output stages?", - "opt1": "Resistive load", - "opt2": "Capacitive load", - "opt3": "Inductive load", - "opt4": "Reactive load", - "correct_option": "Resistive load", - "correct_option_index": 1 - }, - { - "qsns": "What is the main advantage of a Class A output stage over other amplifier configurations?", - "opt1": "High efficiency", - "opt2": "High output power", - "opt3": "Low distortion", - "opt4": "Low power consumption", - "correct_option": "Low distortion", - "correct_option_index": 3 - }, - { - "qsns": "What type of input signal is best suited for a Class A output stage?", - "opt1": "Sinusoidal signal", - "opt2": "Square wave signal", - "opt3": "Triangular wave signal", - "opt4": "Pulse signal", - "correct_option": "Sinusoidal signal", - "correct_option_index": 1 - }, - { - "qsns": "What is the typical voltage gain of a Class A amplifier?", - "opt1": "Less than 10", - "opt2": "10 to 100", - "opt3": "100 to 1000", - "opt4": "More than 1000", - "correct_option": "10 to 100", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following is a characteristic of a Class A output stage?", - "opt1": "High efficiency", - "opt2": "Low distortion", - "opt3": "Crossover distortion", - "opt4": "Conducts for less than half of the input signal cycle", - "correct_option": "Low distortion", - "correct_option_index": 2 - }, - { - "qsns": "In a Class A output stage, the amplifying device conducts for:", - "opt1": "Half of the input signal cycle", - "opt2": "Less than half of the input signal cycle", - "opt3": "More than half of the input signal cycle", - "opt4": "The entire input signal cycle", - "correct_option": "The entire input signal cycle", - "correct_option_index": 4 - }, - { - "qsns": "The efficiency of a Class A output stage is:", - "opt1": "High", - "opt2": "Low", - "opt3": "Moderate", - "opt4": "Not applicable", - "correct_option": "Low", - "correct_option_index": 2 - }, - { - "qsns": "What is the advantage of a Class A output stage over other classes of amplifiers?", - "opt1": "Higher efficiency", - "opt2": "Lower distortion", - "opt3": "Lower cost", - "opt4": "Higher power output", - "correct_option": "Lower distortion", - "correct_option_index": 2 - }, - { - "qsns": "What is the key feature of a Class A output stage?", - "opt1": "The amplifying device conducts for the entire input signal cycle", - "opt2": "The amplifying device conducts for only half of the input signal cycle", - "opt3": "The amplifying device conducts for less than half of the input signal cycle", - "opt4": "The amplifying device is biased to a cutoff state", - "correct_option": "The amplifying device conducts for the entire input signal cycle", - "correct_option_index": 1 - }, - { - "qsns": "What is the typical efficiency of a Class A output stage?", - "opt1": "100%", - "opt2": "50%", - "opt3": "25%", - "opt4": "Less than 10%", - "correct_option": "25%", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following is a disadvantage of a Class A output stage?", - "opt1": "High efficiency", - "opt2": "High distortion", - "opt3": "High cost", - "opt4": "Low power output", - "correct_option": "Low power output", - "correct_option_index": 4 - }, - { - "qsns": "Which type of amplifying device is commonly used in Class A output stages?", - "opt1": "Bipolar Junction Transistor (BJT)", - "opt2": "Metal-Oxide-Semiconductor Field-Effect Transistor (MOSFET)", - "opt3": "Junction Field-Effect Transistor (JFET)", - "opt4": "All of the above", - "correct_option": "All of the above", - "correct_option_index": 4 - }, - { - "qsns": "What is the purpose of the biasing circuit in a Class A output stage?", - "opt1": "To set the operating point of the amplifying device", - "opt2": "To provide negative feedback", - "opt3": "To boost the output signal", - "opt4": "To reduce distortion", - "correct_option": "To set the operating point of the amplifying device", - "correct_option_index": 1 - }, - { - "qsns": "What is the quiescent current of a Class A output stage?", - "opt1": "The maximum current the amplifying device can handle", - "opt2": "The current flowing through the load resistor when there is no input signal", - "opt3": "The current required to bias the amplifying device", - "opt4": "The current flowing through the amplifying device when there is no input signal", - "correct_option": "The current flowing through the amplifying device when there is no input signal", - "correct_option_index": 4 - }, - { - "qsns": "Which of the following is a common application of a Class A output stage?", - "opt1": "Audio power amplifiers", - "opt2": "RF amplifiers", - "opt3": "Voltage regulators", - "opt4": "Digital circuits", - "correct_option": "Audio power amplifiers", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following is a characteristic of the output signal of a Class A output stage?", - "opt1": "It is a square wave", - "opt2": "It is a sine wave", - "opt3": "It is a triangular wave", - "opt4": "It depends on the input signal", - "correct_option": "It depends on the input signal", - "correct_option_index": 4 - }, - { - "qsns": "Which of the following is a disadvantage of a Class A output stage in terms of power efficiency?", - "opt1": "It generates more heat than other classes of amplifiers", - "opt2": "It consumes more power than other classes of amplifiers", - "opt3": "It is more expensive than other classes of amplifiers", - "opt4": "It has a lower power output than other classes of amplifiers", - "correct_option": "It generates more heat than other classes of amplifiers", - "correct_option_index": 1 - }, - { - "qsns": "What is a Class B output stage in amplifiers?", - "opt1": "An amplifier configuration where the amplifying device conducts for the full input signal cycle", - "opt2": "An amplifier configuration where the amplifying device conducts only for half of the input signal cycle", - "opt3": "An amplifier configuration where the output signal is inverted with respect to the input signal", - "opt4": "An amplifier configuration where two input signals are combined to produce the output signal", - "correct_option": "An amplifier configuration where the amplifying device conducts only for half of the input signal cycle", - "correct_option_index": 2 - }, - { - "qsns": "What is the advantage of a Class B output stage?", - "opt1": "High power efficiency", - "opt2": "Low distortion", - "opt3": "High linearity", - "opt4": "Large voltage gain", - "correct_option": "High power efficiency", - "correct_option_index": 1 - }, - { - "qsns": "What is crossover distortion in a Class B output stage?", - "opt1": "A reduction in the voltage gain of the amplifier", - "opt2": "A discontinuity in the output signal at the point where one device switches off and the other switches on", - "opt3": "A change in the phase shift of the output signal", - "opt4": "An increase in the noise level of the amplifier", - "correct_option": "A discontinuity in the output signal at the point where one device switches off and the other switches on", - "correct_option_index": 2 - }, - { - "qsns": "How is crossover distortion reduced in a Class B output stage?", - "opt1": "By increasing the voltage gain of the amplifier", - "opt2": "By decreasing the load impedance of the amplifier", - "opt3": "By applying a small amount of bias current to the amplifying devices", - "opt4": "By using a feedback network in the amplifier", - "correct_option": "By applying a small amount of bias current to the amplifying devices", - "correct_option_index": 3 - }, - { - "qsns": "What is the main application of Class B output stages?", - "opt1": "Audio power amplifiers", - "opt2": "Voltage amplifiers", - "opt3": "Current amplifiers", - "opt4": "Low noise amplifiers", - "correct_option": "Audio power amplifiers", - "correct_option_index": 1 - }, - { - "qsns": "What is the main disadvantage of Class B output stages?", - "opt1": "Crossover distortion", - "opt2": "Low power efficiency", - "opt3": "High distortion", - "opt4": "Poor linearity", - "correct_option": "Crossover distortion", - "correct_option_index": 1 - }, - { - "qsns": "What is the purpose of biasing in a Class B output stage?", - "opt1": "To keep the amplifying devices slightly conductive even when there is no input signal", - "opt2": "To increase the voltage gain of the amplifier", - "opt3": "To decrease the noise level of the amplifier", - "opt4": "To reduce the distortion of the amplifier", - "correct_option": "To keep the amplifying devices slightly conductive even when there is no input signal", - "correct_option_index": 1 - }, - { - "qsns": "What is the output signal waveform of a Class B output stage?", - "opt1": "A square wave", - "opt2": "A sawtooth wave", - "opt3": "A sine wave", - "opt4": "A combination of the signals produced by each device", - "correct_option": "A combination of the signals produced by each device", - "correct_option_index": 4 - }, - { - "qsns": "What type of load is typically used with a Class B output stage?", - "opt1": "Resistive load", - "opt2": "Capacitive load", - "opt3": "Inductive load", - "opt4": "None of the above", - "correct_option": "Resistive load", - "correct_option_index": 1 - }, - { - "qsns": "What is the maximum theoretical efficiency of a Class B output stage?", - "opt1": "50%", - "opt2": "75%", - "opt3": "90%", - "opt4": "100%", - "correct_option": "75%", - "correct_option_index": 2 - }, - { - "qsns": "In a Class B output stage, how many amplifying devices are used?", - "opt1": "One", - "opt2": "Two", - "opt3": "Three", - "opt4": "Four", - "correct_option": "Two", - "correct_option_index": 2 - }, - { - "qsns": "What is the key advantage of a Class B output stage?", - "opt1": "Low power consumption", - "opt2": "High distortion", - "opt3": "High power efficiency", - "opt4": "Low heat generation", - "correct_option": "High power efficiency", - "correct_option_index": 3 - }, - { - "qsns": "What is the major disadvantage of a Class B output stage?", - "opt1": "Low power efficiency", - "opt2": "High power consumption", - "opt3": "High distortion", - "opt4": "Crossover distortion", - "correct_option": "Crossover distortion", - "correct_option_index": 4 - }, - { - "qsns": "How does bias current help to address the issue of crossover distortion in a Class B output stage?", - "opt1": "By increasing power consumption", - "opt2": "By reducing power efficiency", - "opt3": "By keeping the amplifying devices slightly conductive", - "opt4": "By increasing the gain of the amplifier", - "correct_option": "By keeping the amplifying devices slightly conductive", - "correct_option_index": 3 - }, - { - "qsns": "Which application is Class B output stage commonly used in?", - "opt1": "Low-distortion audio power amplifiers", - "opt2": "Low-power RF amplifiers", - "opt3": "High-distortion audio power amplifiers", - "opt4": "High-power RF amplifiers", - "correct_option": "High-power RF amplifiers", - "correct_option_index": 4 - }, - { - "qsns": "What is the output signal of a Class B output stage?", - "opt1": "A combination of the input signal and the bias current", - "opt2": "A combination of two signals produced by each device", - "opt3": "A constant voltage signal", - "opt4": "A high distortion signal", - "correct_option": "A combination of two signals produced by each device", - "correct_option_index": 2 - }, - { - "qsns": "Which type of amplifiers produce less distortion than Class B amplifiers?", - "opt1": "Class A amplifiers", - "opt2": "Class AB amplifiers", - "opt3": "Class C amplifiers", - "opt4": "Class D amplifiers", - "correct_option": "Class AB amplifiers", - "correct_option_index": 2 - }, - { - "qsns": "What is the function of the load resistor in a Class B output stage?", - "opt1": "To provide a bias current to the amplifying devices", - "opt2": "To reduce the power consumption of the amplifying devices", - "opt3": "To eliminate the crossover distortion", - "opt4": "To increase the gain of the amplifier", - "correct_option": "To eliminate the crossover distortion", - "correct_option_index": 3 - }, - { - "qsns": "Which type of distortion is commonly associated with Class B output stages?", - "opt1": "Harmonic distortion", - "opt2": "Frequency distortion", - "opt3": "Amplitude distortion", - "opt4": "Crossover distortion", - "correct_option": "Crossover distortion", - "correct_option_index": 4 - }, - { - "qsns": "Which of the following is a limitation of using Class B amplifiers?", - "opt1": "High power efficiency", - "opt2": "Low distortion", - "opt3": "High linearity", - "opt4": "High power consumption", - "correct_option": "Low distortion", - "correct_option_index": 2 - }, - { - "qsns": "What is the main advantage of a Class AB output stage over a Class B output stage?", - "opt1": "Higher power efficiency", - "opt2": "Lower distortion", - "opt3": "High distortion", - "opt4": "None of the above", - "correct_option": "Lower distortion", - "correct_option_index": 2 - }, - { - "qsns": "What is the purpose of biasing both amplifying devices in a Class AB output stage?", - "opt1": "To eliminate crossover distortion", - "opt2": "To improve power efficiency", - "opt3": "To increase linearity", - "opt4": "None of the above", - "correct_option": "To eliminate crossover distortion", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following is not a characteristic of Class AB output stages?", - "opt1": "High linearity", - "opt2": "High power efficiency", - "opt3": "Low distortion", - "opt4": "High bias", - "correct_option": "High bias", - "correct_option_index": 4 - }, - { - "qsns": "In which application are Class AB output stages commonly used?", - "opt1": "Low-power audio amplifiers", - "opt2": "High-fidelity audio amplifiers", - "opt3": "Power supplies", - "opt4": "None of the above", - "correct_option": "High-fidelity audio amplifiers", - "correct_option_index": 2 - }, - { - "qsns": "Which type of output stage offers the highest linearity?", - "opt1": "Class A", - "opt2": "Class B", - "opt3": "Class AB", - "opt4": "None of the above", - "correct_option": "Class A", - "correct_option_index": 1 - }, - { - "qsns": "What is the disadvantage of Class AB output stages compared to Class B output stages?", - "opt1": "Lower power efficiency", - "opt2": "Higher distortion", - "opt3": "More complex design", - "opt4": "None of the above", - "correct_option": "Lower power efficiency", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following is not a benefit of using a Class AB output stage?", - "opt1": "High power output", - "opt2": "Low distortion", - "opt3": "High power efficiency", - "opt4": "None of the above", - "correct_option": "None of the above", - "correct_option_index": 4 - }, - { - "qsns": "Which type of output stage produces lower distortion than Class B output stages?", - "opt1": "Class A", - "opt2": "Class AB", - "opt3": "Class C", - "opt4": "Both A and B", - "correct_option": "Both A and B", - "correct_option_index": 4 - }, - { - "qsns": "What is the key advantage of using a Class AB output stage?", - "opt1": "High power efficiency", - "opt2": "Low distortion", - "opt3": "High power efficiency and low distortion", - "opt4": "Low power efficiency and high distortion", - "correct_option": "High power efficiency and low distortion", - "correct_option_index": 3 - }, - { - "qsns": "What is the main disadvantage of Class A output stages compared to Class AB output stages?", - "opt1": "Lower linearity", - "opt2": "Lower power efficiency", - "opt3": "Higher distortion", - "opt4": "None of the above", - "correct_option": "Lower power efficiency", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following statements is true about a Class AB output stage?", - "opt1": "It has high power efficiency and high distortion.", - "opt2": "It has low power efficiency and low distortion.", - "opt3": "It has high power efficiency and low distortion.", - "opt4": "It has low power efficiency and high distortion.", - "correct_option": "It has high power efficiency and low distortion.", - "correct_option_index": 3 - }, - { - "qsns": "Which type of output stage is commonly used in power supplies?", - "opt1": "Class A", - "opt2": "Class B", - "opt3": "Class AB", - "opt4": "None of the above", - "correct_option": "Class B", - "correct_option_index": 2 - }, - { - "qsns": "What is the main advantage of using a Class AB output stage in an audio amplifier?", - "opt1": "High distortion", - "opt2": "Low efficiency", - "opt3": "High efficiency and low distortion", - "opt4": "Low efficiency and high distortion", - "correct_option": "High efficiency and low distortion", - "correct_option_index": 3 - }, - { - "qsns": "In a Class AB output stage, both amplifying devices are biased to conduct a small amount of current even when there is no input signal. What is the purpose of this bias current?", - "opt1": "To increase distortion", - "opt2": "To reduce power efficiency", - "opt3": "To maintain high power efficiency", - "opt4": "To decrease linearity", - "correct_option": "To reduce power efficiency", - "correct_option_index": 2 - }, - { - "qsns": "Which type of output stage is commonly used in high-fidelity audio amplifiers?", - "opt1": "Class A", - "opt2": "Class B", - "opt3": "Class AB", - "opt4": "Class C", - "correct_option": "Class AB", - "correct_option_index": 3 - }, - { - "qsns": "What is the process of gradual conduction transfer in a Class AB output stage known as?", - "opt1": "Crossover", - "opt2": "Biasing", - "opt3": "Amplification", - "opt4": "Distortion", - "correct_option": "Crossover", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following is a disadvantage of using a Class AB output stage?", - "opt1": "High distortion", - "opt2": "Low power efficiency", - "opt3": "Low linearity", - "opt4": "High cost", - "correct_option": "Low power efficiency", - "correct_option_index": 2 - }, - { - "qsns": "In a Class AB output stage, how do the amplifying devices behave when there is an input signal?", - "opt1": "They both conduct fully.", - "opt2": "One conducts fully and the other conducts partially.", - "opt3": "They both conduct partially.", - "opt4": "One conducts partially and the other is turned off.", - "correct_option": "One conducts fully and the other conducts partially.", - "correct_option_index": 2 - }, - { - "qsns": "What is the main purpose of a Class AB output stage?", - "opt1": "To reduce distortion", - "opt2": "To increase power efficiency", - "opt3": "To increase distortion", - "opt4": "To reduce power efficiency", - "correct_option": "To reduce distortion", - "correct_option_index": 1 - }, - { - "qsns": "What is the purpose of biasing the Class AB output stage in amplifiers?", - "opt1": "To set the operating point of the amplifying devices", - "opt2": "To reduce distortion in the output signal", - "opt3": "To ensure that the amplifying devices operate in the active region of their characteristic curves", - "opt4": "All of the above", - "correct_option": "All of the above", - "correct_option_index": 4 - }, - { - "qsns": "What is a common biasing technique for the Class AB output stage?", - "opt1": "Voltage divider network", - "opt2": "Diode biasing", - "opt3": "Transistor biasing", - "opt4": "All of the above", - "correct_option": "All of the above", - "correct_option_index": 4 - }, - { - "qsns": "In a voltage divider biasing network, where is the bias voltage set?", - "opt1": "At the base or gate of the amplifying device", - "opt2": "At the power supply voltage", - "opt3": "At ground", - "opt4": "None of the above", - "correct_option": "At the base or gate of the amplifying device", - "correct_option_index": 1 - }, - { - "qsns": "How does a diode biasing circuit work?", - "opt1": "By using a transistor configured as a voltage divider", - "opt2": "By connecting a diode in series with the base or gate of the amplifying device", - "opt3": "By using a voltage divider network", - "opt4": "None of the above", - "correct_option": "By connecting a diode in series with the base or gate of the amplifying device", - "correct_option_index": 2 - }, - { - "qsns": "Which biasing technique allows for fine-tuning of the operating point?", - "opt1": "Voltage divider network", - "opt2": "Diode biasing", - "opt3": "Transistor biasing", - "opt4": "None of the above", - "correct_option": "Voltage divider network", - "correct_option_index": 1 - }, - { - "qsns": "What is the goal of biasing the Class AB stage?", - "opt1": "To maximize power efficiency", - "opt2": "To minimize power dissipation", - "opt3": "To ensure linear operation with low distortion", - "opt4": "None of the above", - "correct_option": "To ensure linear operation with low distortion", - "correct_option_index": 3 - }, - { - "qsns": "Which type of amplifying device is typically used in a Class AB output stage?", - "opt1": "Bipolar junction transistor (BJT)", - "opt2": "Field-effect transistor (FET)", - "opt3": "Operational amplifier (Op-amp)", - "opt4": "None of the above", - "correct_option": "Bipolar junction transistor (BJT)", - "correct_option_index": 1 - }, - { - "qsns": "Which biasing technique uses a transistor configured as a voltage divider?", - "opt1": "Voltage divider network", - "opt2": "Diode biasing", - "opt3": "Transistor biasing", - "opt4": "None of the above", - "correct_option": "Transistor biasing", - "correct_option_index": 3 - }, - { - "qsns": "Why is biasing necessary for Class AB amplifiers?", - "opt1": "To prevent the amplifying devices from saturating", - "opt2": "To ensure that the amplifying devices operate in the active region", - "opt3": "To decrease the gain of the amplifier", - "opt4": "None of the above", - "correct_option": "To ensure that the amplifying devices operate in the active region", - "correct_option_index": 2 - }, - { - "qsns": "What is the main advantage of using a Class AB output stage in amplifiers?", - "opt1": "High power efficiency", - "opt2": "Low power dissipation", - "opt3": "High linearity with low distortion", - "opt4": "None of the above", - "correct_option": "High linearity with low distortion", - "correct_option_index": 3 - }, - { - "qsns": "What is the bias voltage typically set to in the Class AB output stage?", - "opt1": "The forward voltage drop of a diode", - "opt2": "The power supply voltage", - "opt3": "Zero volts", - "opt4": "The voltage across a capacitor", - "correct_option": "The forward voltage drop of a diode", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following is a disadvantage of using a diode biasing circuit?", - "opt1": "It is more complex than other biasing techniques", - "opt2": "It is less stable than other biasing techniques", - "opt3": "It requires more power to operate", - "opt4": "It is less accurate than other biasing techniques", - "correct_option": "It is less stable than other biasing techniques", - "correct_option_index": 2 - }, - { - "qsns": "What is the purpose of using a transistor biasing circuit?", - "opt1": "To set the bias voltage", - "opt2": "To amplify the input signal", - "opt3": "To reduce distortion in the output signal", - "opt4": "To increase power efficiency", - "correct_option": "To set the bias voltage", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following biasing techniques is commonly used in Class AB amplifiers?", - "opt1": "Voltage divider network", - "opt2": "Diode biasing", - "opt3": "Transistor biasing", - "opt4": "All of the above", - "correct_option": "Diode biasing", - "correct_option_index": 2 - }, - { - "qsns": "How does the choice of biasing technique affect the power efficiency of the amplifier?", - "opt1": "It has no effect on power efficiency", - "opt2": "It can increase power efficiency", - "opt3": "It can decrease power efficiency", - "opt4": "It can cause the amplifier to malfunction", - "correct_option": "It can decrease power efficiency", - "correct_option_index": 3 - }, - { - "qsns": "What is the disadvantage of using an adjustable biasing network?", - "opt1": "It is less accurate than a fixed biasing network", - "opt2": "It is less stable than a fixed biasing network", - "opt3": "It is more complex than a fixed biasing network", - "opt4": "It is more expensive than a fixed biasing network", - "correct_option": "It is more complex than a fixed biasing network", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following is a key consideration when selecting a biasing technique for the Class AB output stage?", - "opt1": "Power efficiency", - "opt2": "Cost", - "opt3": "Stability", - "opt4": "Input impedance", - "correct_option": "Power efficiency", - "correct_option_index": 1 - }, - { - "qsns": "What is the primary application of power BJTs in amplifier circuits?", - "opt1": "High frequency amplification", - "opt2": "Low noise amplification", - "opt3": "Power amplification", - "opt4": "Voltage amplification", - "correct_option": "Power amplification", - "correct_option_index": 3 - }, - { - "qsns": "Which type of power BJT is more commonly used in power amplifier circuits?", - "opt1": "PNP", - "opt2": "NPN", - "opt3": "Both are used equally", - "opt4": "None of the above", - "correct_option": "NPN", - "correct_option_index": 2 - }, - { - "qsns": "What is the operating region of the power BJT?", - "opt1": "Saturation", - "opt2": "Cutoff", - "opt3": "Active", - "opt4": "Reverse breakdown", - "correct_option": "Active", - "correct_option_index": 3 - }, - { - "qsns": "Which configuration is most commonly used for low-power amplifiers?", - "opt1": "Class A", - "opt2": "Class AB", - "opt3": "Class B", - "opt4": "Class C", - "correct_option": "Class A", - "correct_option_index": 1 - }, - { - "qsns": "What is the main advantage of power BJTs over small signal BJTs?", - "opt1": "Higher frequency response", - "opt2": "Lower noise", - "opt3": "Higher power handling capability", - "opt4": "Lower distortion", - "correct_option": "Higher power handling capability", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following is a common application of power BJTs?", - "opt1": "Voltage regulators", - "opt2": "Oscillators", - "opt3": "Audio amplifiers", - "opt4": "Digital circuits", - "correct_option": "Audio amplifiers", - "correct_option_index": 3 - }, - { - "qsns": "What is the primary purpose of switching amplifiers?", - "opt1": "To increase power gain", - "opt2": "To reduce distortion", - "opt3": "To improve efficiency", - "opt4": "To increase frequency response", - "correct_option": "To improve efficiency", - "correct_option_index": 3 - }, - { - "qsns": "Which type of amplifier uses power MOSFETs to provide high efficiency?", - "opt1": "Class A", - "opt2": "Class B", - "opt3": "Class D", - "opt4": "Class AB", - "correct_option": "Class D", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following is not a technique used to improve the efficiency of power amplifiers?", - "opt1": "Class G and H amplifiers", - "opt2": "Switching amplifiers", - "opt3": "Feedback amplifiers", - "opt4": "Class D amplifiers", - "correct_option": "Feedback amplifiers", - "correct_option_index": 3 - }, - { - "qsns": "What is the main disadvantage of power BJTs in amplifier circuits?", - "opt1": "High distortion", - "opt2": "Low power handling capability", - "opt3": "Low frequency response", - "opt4": "High heat dissipation", - "correct_option": "High heat dissipation", - "correct_option_index": 4 - }, - { - "qsns": "What is the primary function of power BJTs in amplifier circuits?", - "opt1": "To provide high voltage gain", - "opt2": "To provide low noise amplification", - "opt3": "To provide high power gain and efficiency", - "opt4": "To provide high frequency response", - "correct_option": "To provide high power gain and efficiency", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following is a commonly used configuration for power BJTs in low-power amplifiers?", - "opt1": "Class A", - "opt2": "Class AB", - "opt3": "Class B", - "opt4": "Class C", - "correct_option": "Class A", - "correct_option_index": 1 - }, - { - "qsns": "Which type of power BJT is commonly used in power amplifier circuits?", - "opt1": "PNP", - "opt2": "NPN", - "opt3": "JFET", - "opt4": "MOSFET", - "correct_option": "NPN", - "correct_option_index": 2 - }, - { - "qsns": "In which region of operation does the power BJT operate?", - "opt1": "Saturation region", - "opt2": "Cutoff region", - "opt3": "Active region", - "opt4": "Reverse-bias region", - "correct_option": "Active region", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following is a technique used to improve the efficiency of power amplifiers?", - "opt1": "Class A amplification", - "opt2": "Switching amplifiers", - "opt3": "Class AB amplification", - "opt4": "Linear amplifiers", - "correct_option": "Switching amplifiers", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following is an application of power BJTs?", - "opt1": "Audio amplifiers", - "opt2": "Radio receivers", - "opt3": "Logic gates", - "opt4": "Voltage regulators", - "correct_option": "Audio amplifiers", - "correct_option_index": 1 - }, - { - "qsns": "What is the primary difference between small signal BJTs and power BJTs?", - "opt1": "Current gain", - "opt2": "Voltage gain", - "opt3": "Frequency response", - "opt4": "High power handling capability", - "correct_option": "High power handling capability", - "correct_option_index": 4 - }, - { - "qsns": "Which type of power BJT has a higher current gain?", - "opt1": "PNP", - "opt2": "NPN", - "opt3": "JFET", - "opt4": "MOSFET", - "correct_option": "NPN", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following is a benefit of using power BJTs in amplifier circuits?", - "opt1": "High frequency response", - "opt2": "Low power consumption", - "opt3": "Low distortion", - "opt4": "High power gain", - "correct_option": "High power gain", - "correct_option_index": 4 - }, - { - "qsns": "Which of the following amplifier configurations is commonly used in high-power amplifiers?", - "opt1": "Class A", - "opt2": "Class AB", - "opt3": "Class B", - "opt4": "Class D", - "correct_option": "Class D", - "correct_option_index": 4 - }, - { - "qsns": "In a transformer-coupled push-pull amplifier, the primary winding of the output transformer is connected to:", - "opt1": "The input signal", - "opt2": "The collector of the NPN transistor in the driver stage", - "opt3": "The base of the NPN transistor in the driver stage", - "opt4": "The collector of both transistors", - "correct_option": "The collector of both transistors", - "correct_option_index": 4 - }, - { - "qsns": "The transformer in a transformer-coupled push-pull amplifier is used to:", - "opt1": "Provide impedance matching between the driver and output stages", - "opt2": "Amplify the signal", - "opt3": "Provide voltage gain", - "opt4": "Provide current gain", - "correct_option": "Provide impedance matching between the driver and output stages", - "correct_option_index": 1 - }, - { - "qsns": "In a transformer-coupled push-pull amplifier, the two output transistors are biased so that they conduct:", - "opt1": "Simultaneously", - "opt2": "Randomly", - "opt3": "Alternately", - "opt4": "None of the above", - "correct_option": "Alternately", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following is an advantage of a transformer-coupled push-pull amplifier?", - "opt1": "High efficiency", - "opt2": "Low distortion", - "opt3": "High gain", - "opt4": "All of the above", - "correct_option": "All of the above", - "correct_option_index": 4 - }, - { - "qsns": "The output of a transformer-coupled push-pull amplifier is taken from:", - "opt1": "The primary winding of the output transformer", - "opt2": "The secondary winding of the output transformer", - "opt3": "The center tap of the output transformer", - "opt4": "None of the above", - "correct_option": "The secondary winding of the output transformer", - "correct_option_index": 2 - }, - { - "qsns": "The load impedance in a transformer-coupled push-pull amplifier is:", - "opt1": "Always equal to the output impedance of the amplifier", - "opt2": "Always lower than the output impedance of the amplifier", - "opt3": "Always higher than the output impedance of the amplifier", - "opt4": "None of the above", - "correct_option": "Always equal to the output impedance of the amplifier", - "correct_option_index": 1 - }, - { - "qsns": "The DC bias voltage for the output transistors in a transformer-coupled push-pull amplifier is provided by:", - "opt1": "The input signal", - "opt2": "The driver stage", - "opt3": "A separate bias circuit", - "opt4": "None of the above", - "correct_option": "A separate bias circuit", - "correct_option_index": 3 - }, - { - "qsns": "The crossover distortion in a transformer-coupled push-pull amplifier is caused by:", - "opt1": "The mismatch between the two output transistors", - "opt2": "The bias voltage being too high", - "opt3": "The load impedance being too low", - "opt4": "None of the above", - "correct_option": "The mismatch between the two output transistors", - "correct_option_index": 1 - }, - { - "qsns": "The transformer in a transformer-coupled push-pull amplifier is usually:", - "opt1": "A step-up transformer", - "opt2": "A step-down transformer", - "opt3": "A transformer with a 1:1 turns ratio", - "opt4": "None of the above", - "correct_option": "A step-down transformer", - "correct_option_index": 2 - }, - { - "qsns": "In a transformer-coupled push-pull amplifier, the output transistors are typically:", - "opt1": "Darlington transistors", - "opt2": "Complementary pair transistors", - "opt3": "MOSFETs", - "opt4": "None of the above", - "correct_option": "None of the above", - "correct_option_index": 4 - }, - { - "qsns": "In a transformer-coupled push-pull stage, two identical transistors are used with one conducting during the positive half-cycle of the input signal and the other conducting during the negative half-cycle. What is the main advantage of using two transistors in this configuration?", - "opt1": "Increased efficiency", - "opt2": "Increased voltage gain", - "opt3": "Reduced distortion", - "opt4": "All of the above", - "correct_option": "All of the above", - "correct_option_index": 4 - }, - { - "qsns": "Which of the following statements about the transformer-coupled push-pull stage is true?", - "opt1": "It is commonly used in audio power amplifiers", - "opt2": "It is a type of class A amplifier", - "opt3": "It requires a large amount of power for operation", - "opt4": "It has a low voltage gain", - "correct_option": "It is commonly used in audio power amplifiers", - "correct_option_index": 1 - }, - { - "qsns": "The transformer in a transformer-coupled push-pull stage is used to:", - "opt1": "Increase the voltage gain of the amplifier", - "opt2": "Couple the output signal to the load", - "opt3": "Provide impedance matching between the amplifier and the load", - "opt4": "All of the above", - "correct_option": "Provide impedance matching between the amplifier and the load", - "correct_option_index": 3 - }, - { - "qsns": "In a transformer-coupled push-pull stage, the transformer is typically wound with a center-tapped secondary winding. What is the purpose of the center tap?", - "opt1": "To provide a reference voltage for biasing the transistors", - "opt2": "To provide a means for adjusting the gain of the amplifier", - "opt3": "To provide a balanced load for the transistors", - "opt4": "None of the above", - "correct_option": "To provide a reference voltage for biasing the transistors", - "correct_option_index": 1 - }, - { - "qsns": "The transformer-coupled push-pull stage is a type of:", - "opt1": "Class A amplifier", - "opt2": "Class B amplifier", - "opt3": "Class AB amplifier", - "opt4": "None of the above", - "correct_option": "Class B amplifier", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following is an advantage of using a transformer-coupled push-pull stage over a single-ended output stage?", - "opt1": "Higher efficiency", - "opt2": "Higher voltage gain", - "opt3": "Reduced distortion", - "opt4": "All of the above", - "correct_option": "All of the above", - "correct_option_index": 4 - }, - { - "qsns": "The output of a transformer-coupled push-pull stage is taken from:", - "opt1": "The collector of one transistor", - "opt2": "The center tap of the transformer secondary winding", - "opt3": "The collector of both transistors", - "opt4": "The primary winding of the transformer", - "correct_option": "The center tap of the transformer secondary winding", - "correct_option_index": 2 - }, - { - "qsns": "What is the main disadvantage of a transformer-coupled push-pull stage compared to other output stage configurations?", - "opt1": "Reduced efficiency", - "opt2": "Increased distortion", - "opt3": "Limited frequency response", - "opt4": "All of the above", - "correct_option": "Limited frequency response", - "correct_option_index": 3 - }, - { - "qsns": "The transformer in a transformer-coupled push-pull stage should be designed with:", - "opt1": "High primary-to-secondary turns ratio", - "opt2": "Low primary-to-secondary turns ratio", - "opt3": "High frequency response", - "opt4": "Low leakage inductance", - "correct_option": "Low leakage inductance", - "correct_option_index": 4 - }, - { - "qsns": "What is the main advantage of using a transformer in a push-pull output stage?", - "opt1": "Increased voltage gain", - "opt2": "Impedance matching to the load", - "opt3": "Reduced distortion", - "opt4": "Increased efficiency", - "correct_option": "Impedance matching to the load", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following is a Boolean operator?", - "opt1": "+", - "opt2": "*", - "opt3": "&", - "opt4": "/", - "correct_option": "/", - "correct_option_index": 4 - }, - { - "qsns": "What is the Boolean expression for the OR gate?", - "opt1": "A+B", - "opt2": "A*B", - "opt3": "A/B", - "opt4": "A&B", - "correct_option": "A+B", - "correct_option_index": 1 - }, - { - "qsns": "What is the Boolean expression for the AND gate?", - "opt1": "A+B", - "opt2": "A*B", - "opt3": "A/B", - "opt4": "A&B", - "correct_option": "A*B", - "correct_option_index": 2 - }, - { - "qsns": "What is the Boolean expression for the NOT gate?", - "opt1": "A+B", - "opt2": "A*B", - "opt3": "A'", - "opt4": "A&B'", - "correct_option": "A'", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following is an example of a Boolean equation?", - "opt1": "y=x+2", - "opt2": "y=x*2", - "opt3": "y=xORz", - "opt4": "y=xAND2", - "correct_option": "y=xAND2", - "correct_option_index": 4 - }, - { - "qsns": "Which of the following is a Boolean identity?", - "opt1": "A+0=A", - "opt2": "A/1=A", - "opt3": "A*0=A", - "opt4": "A-1=A", - "correct_option": "A+0=A", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following is a Boolean simplification rule?", - "opt1": "A+A=A", - "opt2": "A*A=A", - "opt3": "A+B=B+A", - "opt4": "A*B=B*A", - "correct_option": "A+B=B+A", - "correct_option_index": 3 - }, - { - "qsns": "What is the result of the Boolean operation A OR (B AND C)?", - "opt1": "A+B*C", - "opt2": "A+B+C", - "opt3": "A*B*C", - "opt4": "A*B+C", - "correct_option": "A+B*C", - "correct_option_index": 1 - }, - { - "qsns": "What is the result of the Boolean operation (A OR B) AND (A OR C)?", - "opt1": "A+B+C", - "opt2": "A*B*C", - "opt3": "A+B*C", - "opt4": "A*B+C", - "correct_option": "A+B+C", - "correct_option_index": 1 - }, - { - "qsns": "What is the Boolean expression for the exclusive-OR (XOR) gate?", - "opt1": "A+B", - "opt2": "A*B", - "opt3": "A/B", - "opt4": "AB", - "correct_option": "AB", - "correct_option_index": 4 - }, - { - "qsns": "What is Boolean algebra?", - "opt1": "A branch of mathematics that deals with logic gates", - "opt2": "A branch of mathematics that deals with Boolean functions", - "opt3": "A branch of mathematics that deals with calculus", - "opt4": "A branch of mathematics that deals with programming languages", - "correct_option": "A branch of mathematics that deals with Boolean functions", - "correct_option_index": 2 - }, - { - "qsns": "What is a Boolean variable?", - "opt1": "A variable that can take on any value, including true or false", - "opt2": "A variable that can only take on two values, true or false", - "opt3": "A variable that can take on multiple values at once", - "opt4": "A variable that is always true", - "correct_option": "A variable that can only take on two values, true or false", - "correct_option_index": 2 - }, - { - "qsns": "What is a Boolean expression?", - "opt1": "A mathematical expression that uses Boolean variables, operators, and constants", - "opt2": "A mathematical expression that uses only integers and operators", - "opt3": "A mathematical expression that uses real numbers and operators", - "opt4": "A mathematical expression that uses only constants and operators", - "correct_option": "A mathematical expression that uses Boolean variables, operators, and constants", - "correct_option_index": 1 - }, - { - "qsns": "Which Boolean operator represents logical AND?", - "opt1": "+", - "opt2": "*", - "opt3": ".", - "opt4": "-", - "correct_option": ".", - "correct_option_index": 3 - }, - { - "qsns": "Which Boolean operator represents logical OR?", - "opt1": "+", - "opt2": "*", - "opt3": "/", - "opt4": "-", - "correct_option": "+", - "correct_option_index": 1 - }, - { - "qsns": "Which Boolean operator represents logical NOT?", - "opt1": "+", - "opt2": "*", - "opt3": "'", - "opt4": "/", - "correct_option": "'", - "correct_option_index": 3 - }, - { - "qsns": "What is the complement of A in Boolean algebra?", - "opt1": "A'", - "opt2": "A+", - "opt3": "A*", - "opt4": "A-", - "correct_option": "A'", - "correct_option_index": 1 - }, - { - "qsns": "What is the simplified expression for A + AB?", - "opt1": "A", - "opt2": "B", - "opt3": "AB", - "opt4": "1", - "correct_option": "A", - "correct_option_index": 1 - }, - { - "qsns": "What is the simplified expression for AB + A'B?", - "opt1": "AB + A'", - "opt2": "AB", - "opt3": "A+B", - "opt4": "AB'", - "correct_option": "AB'", - "correct_option_index": 4 - }, - { - "qsns": "What is the Sum-of-Products (SOP) method in digital logic?", - "opt1": "A technique used to simplify Boolean expressions", - "opt2": "A technique used to convert decimal numbers to binary", - "opt3": "A technique used to convert binary numbers to decimal", - "opt4": "A technique used to convert octal numbers to hexadecimal", - "correct_option": "A technique used to simplify Boolean expressions", - "correct_option_index": 1 - }, - { - "qsns": "What is the first step in using the SOP method to simplify a Boolean expression?", - "opt1": "Create a truth table", - "opt2": "Write the expression in standard form", - "opt3": "Identify the rows where the expression evaluates to 1", - "opt4": "Combine the rows with an OR operator", - "correct_option": "Write the expression in standard form", - "correct_option_index": 2 - }, - { - "qsns": "What are the Boolean operators used in the standard form of a Boolean expression?", - "opt1": "AND, OR, and XOR", - "opt2": "AND, OR, and NOT", - "opt3": "XOR, NAND, and NOR", - "opt4": "XOR, NOT, and NAND", - "correct_option": "AND, OR, and NOT", - "correct_option_index": 2 - }, - { - "qsns": "In the SOP method, what is the next step after creating a truth table for the Boolean expression?", - "opt1": "Identify the rows where the expression evaluates to 0", - "opt2": "Identify the rows where the expression evaluates to 1", - "opt3": "Convert the binary inputs to decimal", - "opt4": "Simplify the expression using a Karnaugh map", - "correct_option": "Identify the rows where the expression evaluates to 1", - "correct_option_index": 2 - }, - { - "qsns": "What is the final step in using the SOP method to simplify a Boolean expression?", - "opt1": "Combine the rows with an AND operator", - "opt2": "Combine the rows with an OR operator", - "opt3": "Convert the expression to hexadecimal", - "opt4": "Convert the expression to binary", - "correct_option": "Combine the rows with an OR operator", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following is an example of a Boolean expression that can be simplified using the SOP method?", - "opt1": "F=A+B", - "opt2": "F=A*B", - "opt3": "F=A XOR B", - "opt4": "F=AB+A'B+AB'", - "correct_option": "F=AB+A'B+AB'", - "correct_option_index": 4 - }, - { - "qsns": "How many rows are in the truth table for a Boolean expression with two input variables?", - "opt1": "2", - "opt2": "4", - "opt3": "6", - "opt4": "8", - "correct_option": "4", - "correct_option_index": 2 - }, - { - "qsns": "What is the purpose of the SOP method in digital logic?", - "opt1": "To convert decimal numbers to binary", - "opt2": "To simplify complex Boolean expressions", - "opt3": "To implement logic gates using a truth table", - "opt4": "To convert binary numbers to hexadecimal", - "correct_option": "To simplify complex Boolean expressions", - "correct_option_index": 2 - }, - { - "qsns": "What is the meaning of \"sum of products\" in the SOP method?", - "opt1": "The sum of the input variables in the Boolean expression", - "opt2": "The sum of the rows in the truth table where the expression evaluates to 1", - "opt3": "The sum of the Boolean operators used in the expression", - "opt4": "The sum of the binary values in the truth table", - "correct_option": "The sum of the rows in the truth table where the expression evaluates to 1", - "correct_option_index": 2 - }, - { - "qsns": "What is the Sum-of-Products (SOP) method used for in digital logic?", - "opt1": "To create a truth table for a given Boolean expression", - "opt2": "To simplify a given Boolean expression", - "opt3": "To convert a decimal number to binary", - "opt4": "To perform arithmetic operations on binary numbers", - "correct_option": "To simplify a given Boolean expression", - "correct_option_index": 2 - }, - { - "qsns": "What is the first step when using the SOP method to simplify a Boolean expression?", - "opt1": "Create a truth table for the expression", - "opt2": "Identify the rows where the expression evaluates to 1", - "opt3": "Write the expression in the standard form", - "opt4": "Combine the rows with an OR operator", - "correct_option": "Write the expression in the standard form", - "correct_option_index": 3 - }, - { - "qsns": "What is the standard form of a Boolean expression?", - "opt1": "A form without parentheses", - "opt2": "A form without negation", - "opt3": "A form with parentheses and Boolean operators", - "opt4": "A form with only one variable", - "correct_option": "A form with parentheses and Boolean operators", - "correct_option_index": 3 - }, - { - "qsns": "How do you identify the rows in a truth table where the expression evaluates to 1 when using the SOP method?", - "opt1": "Identify the rows where all variables are 1", - "opt2": "Identify the rows where all variables are 0", - "opt3": "Identify the rows where the expression is true", - "opt4": "Identify the rows where the expression is false", - "correct_option": "Identify the rows where the expression is true", - "correct_option_index": 3 - }, - { - "qsns": "In the SOP method, what is the next step after identifying the rows where the expression evaluates to 1?", - "opt1": "Write down each row in terms of the input variables", - "opt2": "Combine the rows with an AND operator", - "opt3": "Combine the rows with an OR operator", - "opt4": "Create a Karnaugh map", - "correct_option": "Write down each row in terms of the input variables", - "correct_option_index": 1 - }, - { - "qsns": "What Boolean operator is used to combine the rows in the SOP method?", - "opt1": "AND", - "opt2": "OR", - "opt3": "NOT", - "opt4": "XOR", - "correct_option": "OR", - "correct_option_index": 2 - }, - { - "qsns": "What is the final result of the SOP method?", - "opt1": "A simplified sum of products expression", - "opt2": "A simplified product of sums expression", - "opt3": "A truth table", - "opt4": "A Karnaugh map", - "correct_option": "A simplified sum of products expression", - "correct_option_index": 1 - }, - { - "qsns": "How is a row with a value of 0 represented in the SOP method?", - "opt1": "With the corresponding variable", - "opt2": "With the complement of the corresponding variable", - "opt3": "With the negation of the corresponding variable", - "opt4": "With a 0", - "correct_option": "With the complement of the corresponding variable", - "correct_option_index": 2 - }, - { - "qsns": "What is the main advantage of using the SOP method to simplify Boolean expressions?", - "opt1": "It results in a smaller truth table", - "opt2": "It is easier to understand than other methods", - "opt3": "It results in a more efficient circuit design", - "opt4": "It works for any type of Boolean expression", - "correct_option": "It results in a more efficient circuit design", - "correct_option_index": 3 - }, - { - "qsns": "Can the SOP method be used to simplify any Boolean expression?", - "opt1": "Yes, it can be used for any expression", - "opt2": "No, it can only be used for expressions with three variables or fewer", - "opt3": "No, it can only be used for expressions in standard form", - "opt4": "No, it can only be used for expressions with a small number of terms", - "correct_option": "Yes, it can be used for any expression", - "correct_option_index": 1 - }, - { - "qsns": "What is the Product-of-Sums (POS) method used for in digital logic?", - "opt1": "Generating truth tables", - "opt2": "Simplifying Boolean expressions", - "opt3": "Building digital circuits", - "opt4": "Converting binary to decimal", - "correct_option": "Simplifying Boolean expressions", - "correct_option_index": 2 - }, - { - "qsns": "In the POS method, what is the first step in simplifying a Boolean expression?", - "opt1": "Identify the rows of the truth table where the expression evaluates to 0", - "opt2": "Group the variables into terms and combine them with OR operators", - "opt3": "Write the expression in the standard form", - "opt4": "Combine the terms using AND operators", - "correct_option": "Write the expression in the standard form", - "correct_option_index": 3 - }, - { - "qsns": "In the POS method, what is the second step in simplifying a Boolean expression?", - "opt1": "Identify the rows of the truth table where the expression evaluates to 0", - "opt2": "Group the variables into terms and combine them with OR operators", - "opt3": "Write the expression in the standard form", - "opt4": "Combine the terms using AND operators", - "correct_option": "Identify the rows of the truth table where the expression evaluates to 0", - "correct_option_index": 1 - }, - { - "qsns": "What is the final result of applying the POS method to a Boolean expression?", - "opt1": "A simplified sum of products expression", - "opt2": "A simplified product of sums expression", - "opt3": "A minimized truth table", - "opt4": "A circuit diagram", - "correct_option": "A simplified product of sums expression", - "correct_option_index": 2 - }, - { - "qsns": "In the POS method, how are the rows of the truth table where the expression evaluates to 0 combined?", - "opt1": "Using AND operators", - "opt2": "Using OR operators", - "opt3": "Using XOR operators", - "opt4": "Using NOT operators", - "correct_option": "Using OR operators", - "correct_option_index": 2 - }, - { - "qsns": "When is the POS method particularly useful?", - "opt1": "When the expression contains few terms", - "opt2": "When the expression contains many terms", - "opt3": "When the expression contains only one variable", - "opt4": "When the expression contains only constants", - "correct_option": "When the expression contains many terms", - "correct_option_index": 2 - }, - { - "qsns": "To complement a Boolean expression using the POS method, what must be done to the final result?", - "opt1": "It must be inverted", - "opt2": "It must be negated", - "opt3": "It must be squared", - "opt4": "It must be cubed", - "correct_option": "It must be inverted", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following is a benefit of using the POS method in digital logic?", - "opt1": "It simplifies truth tables", - "opt2": "It reduces the size and complexity of digital circuits", - "opt3": "It converts decimal to binary", - "opt4": "It generates random binary numbers", - "correct_option": "It reduces the size and complexity of digital circuits", - "correct_option_index": 2 - }, - { - "qsns": "What is the Product-of-Sums method in digital logic?", - "opt1": "A method for simplifying Boolean expressions by combining sums of variables", - "opt2": "A method for simplifying Boolean expressions by combining products of variables", - "opt3": "A method for generating truth tables from Boolean expressions", - "opt4": "A method for generating Boolean expressions from truth tables", - "correct_option": "A method for simplifying Boolean expressions by combining products of variables", - "correct_option_index": 2 - }, - { - "qsns": "What is the dual of the Product-of-Sums method?", - "opt1": "Sum-of-Products method", - "opt2": "Combinational logic", - "opt3": "Sequential logic", - "opt4": "None of the above", - "correct_option": "Sum-of-Products method", - "correct_option_index": 1 - }, - { - "qsns": "What is the first step in the Product-of-Sums method?", - "opt1": "Identify the rows where the expression evaluates to 1", - "opt2": "Identify the rows where the expression evaluates to 0", - "opt3": "Write the expression in terms of the input variables", - "opt4": "None of the above", - "correct_option": "Identify the rows where the expression evaluates to 0", - "correct_option_index": 2 - }, - { - "qsns": "What is the second step in the Product-of-Sums method?", - "opt1": "Identify the rows where the expression evaluates to 1", - "opt2": "Identify the rows where the expression evaluates to 0", - "opt3": "Write the expression in terms of the input variables", - "opt4": "None of the above", - "correct_option": "Write the expression in terms of the input variables", - "correct_option_index": 3 - }, - { - "qsns": "What is the final step in the Product-of-Sums method?", - "opt1": "Combine the rows using OR operators", - "opt2": "Simplify the expression using DeMorgan's theorem", - "opt3": "Combine the rows using AND operators", - "opt4": "None of the above", - "correct_option": "Combine the rows using OR operators", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following is an advantage of using the Product-of-Sums method?", - "opt1": "It is faster than other simplification methods", - "opt2": "It is easier to understand than other simplification methods", - "opt3": "It is more accurate than other simplification methods", - "opt4": "It is useful in cases where the expression contains many terms", - "correct_option": "It is easier to understand than other simplification methods", - "correct_option_index": 2 - }, - { - "qsns": "What is the purpose of applying the Product-of-Sums method to the complement of an expression?", - "opt1": "To generate a truth table for the expression", - "opt2": "To simplify the expression using DeMorgan's theorem", - "opt3": "To generate a simplified expression that is the complement of the original expression", - "opt4": "None of the above", - "correct_option": "To generate a simplified expression that is the complement of the original expression", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following is true about the Product-of-Sums method?", - "opt1": "It can only be used with binary variables", - "opt2": "It can be used with any type of variable", - "opt3": "It can only be used with Boolean expressions that contain AND operators", - "opt4": "None of the above", - "correct_option": "It can be used with any type of variable", - "correct_option_index": 2 - }, - { - "qsns": "What is the advantage of using the Product-of-Sums method over the Sum-of-Products method?", - "opt1": "The resulting expression is easier to understand", - "opt2": "The resulting expression is shorter and requires fewer gates", - "opt3": "The method is faster and requires less computation", - "opt4": "None of the above", - "correct_option": "The resulting expression is shorter and requires fewer gates", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following is an application of the Product-of-Sums method?", - "opt1": "Simplifying Boolean expressions in digital circuits", - "opt2": "Generating truth tables for digital circuits", - "opt3": "Designing sequential logic circuits", - "opt4": "None of the above", - "correct_option": "Simplifying Boolean expressions in digital circuits", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following is a graphical tool used to simplify Boolean expressions?", - "opt1": "Truth table", - "opt2": "Karnaugh map", - "opt3": "Logic gate", - "opt4": "Logic circuit", - "correct_option": "Karnaugh map", - "correct_option_index": 2 - }, - { - "qsns": "How are cells identified in a Karnaugh map?", - "opt1": "By their input variable combinations", - "opt2": "By their output values", - "opt3": "By their row and column numbers", - "opt4": "By their position on the map", - "correct_option": "By their input variable combinations", - "correct_option_index": 1 - }, - { - "qsns": "In the Karnaugh map, which cells can be combined to form a simplified expression?", - "opt1": "Diagonal cells", - "opt2": "Horizontal cells", - "opt3": "Vertical cells", - "opt4": "Adjacent cells", - "correct_option": "Adjacent cells", - "correct_option_index": 4 - }, - { - "qsns": "What does SOP stand for in the context of digital logic?", - "opt1": "Sum of Products", - "opt2": "Product of Sums", - "opt3": "Sum of Squares", - "opt4": "Product of Squares", - "correct_option": "Sum of Products", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following is true for the cells of a Karnaugh map?", - "opt1": "Each cell can only contain a 0 or a 1", - "opt2": "Each cell can contain a 0, 1, or X", - "opt3": "Each cell can contain any value between 0 and 1", - "opt4": "Each cell can contain a 1, 2, or 3", - "correct_option": "Each cell can only contain a 0 or a 1", - "correct_option_index": 1 - }, - { - "qsns": "What is a Karnaugh map used for?", - "opt1": "To generate a truth table", - "opt2": "To simplify Boolean expressions", - "opt3": "To convert a Boolean expression to a logic circuit", - "opt4": "To convert a Boolean expression to a logic gate", - "correct_option": "To simplify Boolean expressions", - "correct_option_index": 2 - }, - { - "qsns": "How many cells does a Karnaugh map have if the corresponding Boolean expression has three input variables?", - "opt1": "12", - "opt2": "8", - "opt3": "16", - "opt4": "4", - "correct_option": "8", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following is not a valid combination of input variables in a Karnaugh map for a two-variable expression?", - "opt1": "00", - "opt2": "01", - "opt3": "10", - "opt4": "11", - "correct_option": "21", - "correct_option_index": 5 - }, - { - "qsns": "How are adjacent cells identified in a Karnaugh map?", - "opt1": "By diagonal lines", - "opt2": "By vertical lines", - "opt3": "By horizontal lines", - "opt4": "Both b and c", - "correct_option": "Both b and c", - "correct_option_index": 4 - }, - { - "qsns": "Which of the following is a simplified expression for the Karnaugh map shown below?", - "opt1": "AB + BC + AD", - "opt2": "AB + CD", - "opt3": "AC + BD", - "opt4": "ACD + BCD", - "correct_option": "AB + CD", - "correct_option_index": 2 - }, - { - "qsns": "How is a truth table converted into a Karnaugh map?", - "opt1": "By graphing the data points", - "opt2": "By plotting the input and output values on a grid", - "opt3": "By counting the number of 0's and 1's", - "opt4": "By entering the data into a computer program", - "correct_option": "By plotting the input and output values on a grid", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following Boolean expressions is equivalent to the Karnaugh map shown below?", - "opt1": "AB + BC + AD", - "opt2": "AB + CD", - "opt3": "AC + BD", - "opt4": "ACD + BCD", - "correct_option": "AB + CD", - "correct_option_index": 2 - }, - { - "qsns": "How many cells in a Karnaugh map can be combined to form a simplified expression?", - "opt1": "1", - "opt2": "2", - "opt3": "3", - "opt4": "Both A and B", - "correct_option": "Both A and B", - "correct_option_index": 4 - }, - { - "qsns": "How is a simplified expression converted back into a standard SOP or POS expression?", - "opt1": "By using De Morgan's theorem", - "opt2": "By applying the distributive property", - "opt3": "By factoring out common terms", - "opt4": "Both A and B", - "correct_option": "Both A and B", - "correct_option_index": 4 - }, - { - "qsns": "What is a gated flip-flop?", - "opt1": "A type of logic gate", - "opt2": "A type of sequential circuit", - "opt3": "A type of combinational circuit", - "opt4": "A type of adder", - "correct_option": "A type of sequential circuit", - "correct_option_index": 2 - }, - { - "qsns": "Which type of flip-flop uses an AND gate to control the clock input?", - "opt1": "D flip-flop", - "opt2": "T flip-flop", - "opt3": "JK flip-flop", - "opt4": "SR flip-flop", - "correct_option": "T flip-flop", - "correct_option_index": 2 - }, - { - "qsns": "What is the advantage of using gated flip-flops?", - "opt1": "They are faster than regular flip-flops", - "opt2": "They use less power than regular flip-flops", - "opt3": "They can selectively enable or disable the clock input", - "opt4": "They can be used in parallel circuits", - "correct_option": "They can selectively enable or disable the clock input", - "correct_option_index": 3 - }, - { - "qsns": "Which type of flip-flop uses a NAND gate to control the J and K inputs?", - "opt1": "D flip-flop", - "opt2": "T flip-flop", - "opt3": "JK flip-flop", - "opt4": "SR flip-flop", - "correct_option": "JK flip-flop", - "correct_option_index": 3 - }, - { - "qsns": "What happens to the output of a T gated flip-flop when the clock and gate inputs are both high?", - "opt1": "The output remains the same", - "opt2": "The output toggles between 0 and 1", - "opt3": "The output becomes 0", - "opt4": "The output becomes 1", - "correct_option": "The output toggles between 0 and 1", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following is not a type of gated flip-flop?", - "opt1": "D flip-flop", - "opt2": "SR flip-flop", - "opt3": "T flip-flop", - "opt4": "JK flip-flop", - "correct_option": "SR flip-flop", - "correct_option_index": 2 - }, - { - "qsns": "What is the purpose of biasing the Class AB output stage in amplifiers?", - "opt1": "To set the operating point of the amplifying devices", - "opt2": "To reduce distortion in the output signal", - "opt3": "To ensure that the amplifying devices operate in the active region of their characteristic curves", - "opt4": "All of the above", - "correct_option": "All of the above", - "correct_option_index": 4 - }, - { - "qsns": "What is a common biasing technique for the Class AB output stage?", - "opt1": "Voltage divider network", - "opt2": "Diode biasing", - "opt3": "Transistor biasing", - "opt4": "All of the above", - "correct_option": "All of the above", - "correct_option_index": 4 - }, - { - "qsns": "In a voltage divider biasing network, where is the bias voltage set?", - "opt1": "At the base or gate of the amplifying device", - "opt2": "At the power supply voltage", - "opt3": "At ground", - "opt4": "None of the above", - "correct_option": "At the base or gate of the amplifying device", - "correct_option_index": 1 - }, - { - "qsns": "How does a diode biasing circuit work?", - "opt1": "By using a transistor configured as a voltage divider", - "opt2": "By connecting a diode in series with the base or gate of the amplifying device", - "opt3": "By using a voltage divider network", - "opt4": "None of the above", - "correct_option": "By connecting a diode in series with the base or gate of the amplifying device", - "correct_option_index": 2 - }, - { - "qsns": "Which biasing technique allows for fine-tuning of the operating point?", - "opt1": "Voltage divider network", - "opt2": "Diode biasing", - "opt3": "Transistor biasing", - "opt4": "None of the above", - "correct_option": "Voltage divider network", - "correct_option_index": 1 - }, - { - "qsns": "What is the goal of biasing the Class AB stage?", - "opt1": "To maximize power efficiency", - "opt2": "To minimize power dissipation", - "opt3": "To ensure linear operation with low distortion", - "opt4": "None of the above", - "correct_option": "To ensure linear operation with low distortion", - "correct_option_index": 3 - }, - { - "qsns": "Which type of amplifying device is typically used in a Class AB output stage?", - "opt1": "Bipolar junction transistor (BJT)", - "opt2": "Field-effect transistor (FET)", - "opt3": "Operational amplifier (Op-amp)", - "opt4": "None of the above", - "correct_option": "Bipolar junction transistor (BJT)", - "correct_option_index": 1 - }, - { - "qsns": "Which biasing technique uses a transistor configured as a voltage divider?", - "opt1": "Voltage divider network", - "opt2": "Diode biasing", - "opt3": "Transistor biasing", - "opt4": "None of the above", - "correct_option": "Transistor biasing", - "correct_option_index": 3 - }, - { - "qsns": "Why is biasing necessary for Class AB amplifiers?", - "opt1": "To prevent the amplifying devices from saturating", - "opt2": "To ensure that the amplifying devices operate in the active region", - "opt3": "To decrease the gain of the amplifier", - "opt4": "None of the above", - "correct_option": "To ensure that the amplifying devices operate in the active region", - "correct_option_index": 2 - }, - { - "qsns": "What is the main advantage of using a Class AB output stage in amplifiers?", - "opt1": "High power efficiency", - "opt2": "Low power dissipation", - "opt3": "High linearity with low distortion", - "opt4": "None of the above", - "correct_option": "High linearity with low distortion", - "correct_option_index": 3 - }, - { - "qsns": "What is the bias voltage typically set to in the Class AB output stage?", - "opt1": "The forward voltage drop of a diode", - "opt2": "The power supply voltage", - "opt3": "Zero volts", - "opt4": "The voltage across a capacitor", - "correct_option": "The forward voltage drop of a diode", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following is a disadvantage of using a diode biasing circuit?", - "opt1": "It is more complex than other biasing techniques", - "opt2": "It is less stable than other biasing techniques", - "opt3": "It requires more power to operate", - "opt4": "It is less accurate than other biasing techniques", - "correct_option": "It is less stable than other biasing techniques", - "correct_option_index": 2 - }, - { - "qsns": "What is the purpose of using a transistor biasing circuit?", - "opt1": "To set the bias voltage", - "opt2": "To amplify the input signal", - "opt3": "To reduce distortion in the output signal", - "opt4": "To increase power efficiency", - "correct_option": "To set the bias voltage", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following biasing techniques is commonly used in Class AB amplifiers?", - "opt1": "Voltage divider network", - "opt2": "Diode biasing", - "opt3": "Transistor biasing", - "opt4": "All of the above", - "correct_option": "Diode biasing", - "correct_option_index": 2 - }, - { - "qsns": "How does the choice of biasing technique affect the power efficiency of the amplifier?", - "opt1": "It has no effect on power efficiency", - "opt2": "It can increase power efficiency", - "opt3": "It can decrease power efficiency", - "opt4": "It can cause the amplifier to malfunction", - "correct_option": "It can decrease power efficiency", - "correct_option_index": 3 - }, - { - "qsns": "What is the disadvantage of using an adjustable biasing network?", - "opt1": "It is less accurate than a fixed biasing network", - "opt2": "It is less stable than a fixed biasing network", - "opt3": "It is more complex than a fixed biasing network", - "opt4": "It is more expensive than a fixed biasing network", - "correct_option": "It is more complex than a fixed biasing network", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following is a key consideration when selecting a biasing technique for the Class AB output stage?", - "opt1": "Power efficiency", - "opt2": "Cost", - "opt3": "Stability", - "opt4": "Input impedance", - "correct_option": "Power efficiency", - "correct_option_index": 1 - }, - { - "qsns": "What is the primary application of power BJTs in amplifier circuits?", - "opt1": "High frequency amplification", - "opt2": "Low noise amplification", - "opt3": "Power amplification", - "opt4": "Voltage amplification", - "correct_option": "Power amplification", - "correct_option_index": 3 - }, - { - "qsns": "Which type of power BJT is more commonly used in power amplifier circuits?", - "opt1": "PNP", - "opt2": "NPN", - "opt3": "Both are used equally", - "opt4": "None of the above", - "correct_option": "NPN", - "correct_option_index": 2 - }, - { - "qsns": "What is the operating region of the power BJT?", - "opt1": "Saturation", - "opt2": "Cutoff", - "opt3": "Active", - "opt4": "Reverse breakdown", - "correct_option": "Active", - "correct_option_index": 3 - }, - { - "qsns": "Which configuration is most commonly used for low-power amplifiers?", - "opt1": "Class A", - "opt2": "Class AB", - "opt3": "Class B", - "opt4": "Class C", - "correct_option": "Class A", - "correct_option_index": 1 - }, - { - "qsns": "What is the main advantage of power BJTs over small signal BJTs?", - "opt1": "Higher frequency response", - "opt2": "Lower noise", - "opt3": "Higher power handling capability", - "opt4": "Lower distortion", - "correct_option": "Higher power handling capability", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following is a common application of power BJTs?", - "opt1": "Voltage regulators", - "opt2": "Oscillators", - "opt3": "Audio amplifiers", - "opt4": "Digital circuits", - "correct_option": "Audio amplifiers", - "correct_option_index": 3 - }, - { - "qsns": "What is the primary purpose of switching amplifiers?", - "opt1": "To increase power gain", - "opt2": "To reduce distortion", - "opt3": "To improve efficiency", - "opt4": "To increase frequency response", - "correct_option": "To improve efficiency", - "correct_option_index": 3 - }, - { - "qsns": "Which type of amplifier uses power MOSFETs to provide high efficiency?", - "opt1": "Class A", - "opt2": "Class B", - "opt3": "Class D", - "opt4": "Class AB", - "correct_option": "Class D", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following is not a technique used to improve the efficiency of power amplifiers?", - "opt1": "Class G and H amplifiers", - "opt2": "Switching amplifiers", - "opt3": "Feedback amplifiers", - "opt4": "Class D amplifiers", - "correct_option": "Feedback amplifiers", - "correct_option_index": 3 - }, - { - "qsns": "What is the main disadvantage of power BJTs in amplifier circuits?", - "opt1": "High distortion", - "opt2": "Low power handling capability", - "opt3": "Low frequency response", - "opt4": "High heat dissipation", - "correct_option": "High heat dissipation", - "correct_option_index": 4 - }, - { - "qsns": "What is the primary function of power BJTs in amplifier circuits?", - "opt1": "To provide high voltage gain", - "opt2": "To provide low noise amplification", - "opt3": "To provide high power gain and efficiency", - "opt4": "To provide high frequency response", - "correct_option": "To provide high power gain and efficiency", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following is a commonly used configuration for power BJTs in low-power amplifiers?", - "opt1": "Class A", - "opt2": "Class AB", - "opt3": "Class B", - "opt4": "Class C", - "correct_option": "Class A", - "correct_option_index": 1 - }, - { - "qsns": "Which type of power BJT is commonly used in power amplifier circuits?", - "opt1": "PNP", - "opt2": "NPN", - "opt3": "JFET", - "opt4": "MOSFET", - "correct_option": "NPN", - "correct_option_index": 2 - }, - { - "qsns": "In which region of operation does the power BJT operate?", - "opt1": "Saturation region", - "opt2": "Cutoff region", - "opt3": "Active region", - "opt4": "Reverse-bias region", - "correct_option": "Active region", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following is a technique used to improve the efficiency of power amplifiers?", - "opt1": "Class A amplification", - "opt2": "Switching amplifiers", - "opt3": "Class AB amplification", - "opt4": "Linear amplifiers", - "correct_option": "Switching amplifiers", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following is an application of power BJTs?", - "opt1": "Audio amplifiers", - "opt2": "Radio receivers", - "opt3": "Logic gates", - "opt4": "Voltage regulators", - "correct_option": "Audio amplifiers", - "correct_option_index": 1 - }, - { - "qsns": "What is the primary difference between small signal BJTs and power BJTs?", - "opt1": "Current gain", - "opt2": "Voltage gain", - "opt3": "Frequency response", - "opt4": "High power handling capability", - "correct_option": "High power handling capability", - "correct_option_index": 4 - }, - { - "qsns": "Which type of power BJT has a higher current gain?", - "opt1": "PNP", - "opt2": "NPN", - "opt3": "JFET", - "opt4": "MOSFET", - "correct_option": "NPN", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following is a benefit of using power BJTs in amplifier circuits?", - "opt1": "High frequency response", - "opt2": "Low power consumption", - "opt3": "Low distortion", - "opt4": "High power gain", - "correct_option": "High power gain", - "correct_option_index": 4 - }, - { - "qsns": "Which of the following amplifier configurations is commonly used in high-power amplifiers?", - "opt1": "Class A", - "opt2": "Class AB", - "opt3": "Class B", - "opt4": "Class D", - "correct_option": "Class D", - "correct_option_index": 4 - }, - { - "qsns": "In a transformer-coupled push-pull amplifier, the primary winding of the output transformer is connected to:", - "opt1": "The input signal", - "opt2": "The collector of the NPN transistor in the driver stage", - "opt3": "The base of the NPN transistor in the driver stage", - "opt4": "The collector of both transistors", - "correct_option": "The collector of both transistors", - "correct_option_index": 4 - }, - { - "qsns": "The transformer in a transformer-coupled push-pull amplifier is used to:", - "opt1": "Provide impedance matching between the driver and output stages", - "opt2": "Amplify the signal", - "opt3": "Provide voltage gain", - "opt4": "Provide current gain", - "correct_option": "Provide impedance matching between the driver and output stages", - "correct_option_index": 1 - }, - { - "qsns": "In a transformer-coupled push-pull amplifier, the two output transistors are biased so that they conduct:", - "opt1": "Simultaneously", - "opt2": "Randomly", - "opt3": "Alternately", - "opt4": "None of the above", - "correct_option": "Alternately", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following is an advantage of a transformer-coupled push-pull amplifier?", - "opt1": "High efficiency", - "opt2": "Low distortion", - "opt3": "High gain", - "opt4": "All of the above", - "correct_option": "All of the above", - "correct_option_index": 4 - }, - { - "qsns": "The output of a transformer-coupled push-pull amplifier is taken from:", - "opt1": "The primary winding of the output transformer", - "opt2": "The secondary winding of the output transformer", - "opt3": "The center tap of the output transformer", - "opt4": "None of the above", - "correct_option": "The secondary winding of the output transformer", - "correct_option_index": 2 - }, - { - "qsns": "The load impedance in a transformer-coupled push-pull amplifier is:", - "opt1": "Always equal to the output impedance of the amplifier", - "opt2": "Always lower than the output impedance of the amplifier", - "opt3": "Always higher than the output impedance of the amplifier", - "opt4": "None of the above", - "correct_option": "Always equal to the output impedance of the amplifier", - "correct_option_index": 1 - }, - { - "qsns": "The DC bias voltage for the output transistors in a transformer-coupled push-pull amplifier is provided by:", - "opt1": "The input signal", - "opt2": "The driver stage", - "opt3": "A separate bias circuit", - "opt4": "None of the above", - "correct_option": "A separate bias circuit", - "correct_option_index": 3 - }, - { - "qsns": "The crossover distortion in a transformer-coupled push-pull amplifier is caused by:", - "opt1": "The mismatch between the two output transistors", - "opt2": "The bias voltage being too high", - "opt3": "The load impedance being too low", - "opt4": "None of the above", - "correct_option": "The mismatch between the two output transistors", - "correct_option_index": 1 - }, - { - "qsns": "The transformer in a transformer-coupled push-pull amplifier is usually:", - "opt1": "A step-up transformer", - "opt2": "A step-down transformer", - "opt3": "A transformer with a 1:1 turns ratio", - "opt4": "None of the above", - "correct_option": "A step-down transformer", - "correct_option_index": 2 - }, - { - "qsns": "In a transformer-coupled push-pull amplifier, the output transistors are typically:", - "opt1": "Darlington transistors", - "opt2": "Complementary pair transistors", - "opt3": "MOSFETs", - "opt4": "None of the above", - "correct_option": "None of the above", - "correct_option_index": 4 - }, - { - "qsns": "In a transformer-coupled push-pull stage, two identical transistors are used with one conducting during the positive half-cycle of the input signal and the other conducting during the negative half-cycle. What is the main advantage of using two transistors in this configuration?", - "opt1": "Increased efficiency", - "opt2": "Increased voltage gain", - "opt3": "Reduced distortion", - "opt4": "All of the above", - "correct_option": "All of the above", - "correct_option_index": 4 - }, - { - "qsns": "Which of the following statements about the transformer-coupled push-pull stage is true?", - "opt1": "It is commonly used in audio power amplifiers", - "opt2": "It is a type of class A amplifier", - "opt3": "It requires a large amount of power for operation", - "opt4": "It has a low voltage gain", - "correct_option": "It is commonly used in audio power amplifiers", - "correct_option_index": 1 - }, - { - "qsns": "The transformer in a transformer-coupled push-pull stage is used to:", - "opt1": "Increase the voltage gain of the amplifier", - "opt2": "Couple the output signal to the load", - "opt3": "Provide impedance matching between the amplifier and the load", - "opt4": "All of the above", - "correct_option": "Provide impedance matching between the amplifier and the load", - "correct_option_index": 3 - }, - { - "qsns": "In a transformer-coupled push-pull stage, the transformer is typically wound with a center-tapped secondary winding. What is the purpose of the center tap?", - "opt1": "To provide a reference voltage for biasing the transistors", - "opt2": "To provide a means for adjusting the gain of the amplifier", - "opt3": "To provide a balanced load for the transistors", - "opt4": "None of the above", - "correct_option": "To provide a reference voltage for biasing the transistors", - "correct_option_index": 1 - }, - { - "qsns": "The transformer-coupled push-pull stage is a type of:", - "opt1": "Class A amplifier", - "opt2": "Class B amplifier", - "opt3": "Class AB amplifier", - "opt4": "None of the above", - "correct_option": "Class B amplifier", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following is an advantage of using a transformer-coupled push-pull stage over a single-ended output stage?", - "opt1": "Higher efficiency", - "opt2": "Higher voltage gain", - "opt3": "Reduced distortion", - "opt4": "All of the above", - "correct_option": "All of the above", - "correct_option_index": 4 - }, - { - "qsns": "The output of a transformer-coupled push-pull stage is taken from:", - "opt1": "The collector of one transistor", - "opt2": "The center tap of the transformer secondary winding", - "opt3": "The collector of both transistors", - "opt4": "The primary winding of the transformer", - "correct_option": "The center tap of the transformer secondary winding", - "correct_option_index": 2 - }, - { - "qsns": "What is the main disadvantage of a transformer-coupled push-pull stage compared to other output stage configurations?", - "opt1": "Reduced efficiency", - "opt2": "Increased distortion", - "opt3": "Limited frequency response", - "opt4": "All of the above", - "correct_option": "Limited frequency response", - "correct_option_index": 3 - }, - { - "qsns": "The transformer in a transformer-coupled push-pull stage should be designed with:", - "opt1": "High primary-to-secondary turns ratio", - "opt2": "Low primary-to-secondary turns ratio", - "opt3": "High frequency response", - "opt4": "Low leakage inductance", - "correct_option": "Low leakage inductance", - "correct_option_index": 4 - }, - { - "qsns": "What is the main advantage of using a transformer in a push-pull output stage?", - "opt1": "Increased voltage gain", - "opt2": "Impedance matching to the load", - "opt3": "Reduced distortion", - "opt4": "Increased efficiency", - "correct_option": "Impedance matching to the load", - "correct_option_index": 2 - }, - { - "qsns": "What is the basic function of a tuned amplifier?", - "opt1": "To provide high power amplification", - "opt2": "To provide high selectivity and gain", - "opt3": "To filter out unwanted signals", - "opt4": "To provide high frequency stability", - "correct_option": "To provide high selectivity and gain", - "correct_option_index": 2 - }, - { - "qsns": "Which type of resonant circuit is typically used in tuned amplifiers?", - "opt1": "RC circuits", - "opt2": "RL circuits", - "opt3": "LC circuits", - "opt4": "RLC circuits", - "correct_option": "LC circuits", - "correct_option_index": 3 - }, - { - "qsns": "What is the Q factor of a resonant circuit?", - "opt1": "The frequency at which the circuit resonates", - "opt2": "The voltage gain of the circuit", - "opt3": "The energy stored in the circuit", - "opt4": "The ratio of energy stored in the circuit to energy lost per cycle", - "correct_option": "The ratio of energy stored in the circuit to energy lost per cycle", - "correct_option_index": 4 - }, - { - "qsns": "What is the difference between a single tuned amplifier and a double tuned amplifier?", - "opt1": "A single tuned amplifier is more selective than a double tuned amplifier.", - "opt2": "A single tuned amplifier uses one resonant circuit, while a double tuned amplifier uses two.", - "opt3": "A double tuned amplifier provides more gain than a single tuned amplifier.", - "opt4": "A double tuned amplifier uses a transformer to couple the resonant circuits.", - "correct_option": "A single tuned amplifier uses one resonant circuit, while a double tuned amplifier uses two.", - "correct_option_index": 2 - }, - { - "qsns": "Which type of amplifier is commonly used in radio receivers and transmitters?", - "opt1": "Class A amplifier", - "opt2": "Class B amplifier", - "opt3": "Class AB amplifier", - "opt4": "Tuned amplifier", - "correct_option": "Tuned amplifier", - "correct_option_index": 4 - }, - { - "qsns": "Which electronic device can be used as the active element in a tuned amplifier?", - "opt1": "Capacitor", - "opt2": "Resistor", - "opt3": "Inductor", - "opt4": "Transistor", - "correct_option": "Transistor", - "correct_option_index": 4 - }, - { - "qsns": "What is the function of the Q multiplier in a tuned amplifier?", - "opt1": "To provide additional gain at the center frequency of the circuit", - "opt2": "To increase the bandwidth of the circuit", - "opt3": "To improve the stability of the circuit", - "opt4": "To reduce distortion in the output signal", - "correct_option": "To provide additional gain at the center frequency of the circuit", - "correct_option_index": 1 - }, - { - "qsns": "What is a tuned amplifier?", - "opt1": "An amplifier with no selectivity or gain", - "opt2": "An amplifier that only works with specific types of signals", - "opt3": "An amplifier that uses tuned circuits to achieve high selectivity and gain", - "opt4": "An amplifier that is not commonly used in electronic applications", - "correct_option": "An amplifier that uses tuned circuits to achieve high selectivity and gain", - "correct_option_index": 3 - }, - { - "qsns": "What type of resonant circuits are used in tuned amplifiers?", - "opt1": "RC circuits", - "opt2": "LC circuits", - "opt3": "RL circuits", - "opt4": "RLC circuits", - "correct_option": "LC circuits", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following is a key factor in determining the gain and selectivity of a tuned amplifier?", - "opt1": "The type of amplifier used", - "opt2": "The power supply voltage", - "opt3": "The Q factor of the resonant circuits", - "opt4": "The input signal frequency", - "correct_option": "The Q factor of the resonant circuits", - "correct_option_index": 3 - }, - { - "qsns": "What is the difference between a single tuned amplifier and a double tuned amplifier?", - "opt1": "A single tuned amplifier uses one resonant circuit, while a double tuned amplifier uses two resonant circuits.", - "opt2": "A single tuned amplifier is only used in audio applications, while a double tuned amplifier is only used in radio applications.", - "opt3": "A single tuned amplifier is less efficient than a double tuned amplifier.", - "opt4": "A single tuned amplifier has a lower Q factor than a double tuned amplifier.", - "correct_option": "A single tuned amplifier uses one resonant circuit, while a double tuned amplifier uses two resonant circuits.", - "correct_option_index": 1 - }, - { - "qsns": "Where are tuned amplifiers commonly used?", - "opt1": "In power supplies", - "opt2": "In digital circuits", - "opt3": "In radio receivers and transmitters", - "opt4": "In microcontrollers", - "correct_option": "In radio receivers and transmitters", - "correct_option_index": 3 - }, - { - "qsns": "What is the Q factor of a resonant circuit?", - "opt1": "The amount of power dissipated in the circuit", - "opt2": "The amount of power supplied to the circuit", - "opt3": "The ratio of energy stored in the circuit to energy lost per cycle", - "opt4": "The ratio of energy lost in the circuit to energy stored per cycle", - "correct_option": "The ratio of energy stored in the circuit to energy lost per cycle", - "correct_option_index": 3 - }, - { - "qsns": "Which type of amplifying device can be used in tuned amplifiers?", - "opt1": "BJTs", - "opt2": "MOSFETs", - "opt3": "Vacuum tubes", - "opt4": "All of the above", - "correct_option": "All of the above", - "correct_option_index": 4 - }, - { - "qsns": "What is the purpose of a tuned amplifier in a radio receiver?", - "opt1": "To amplify all incoming signals equally", - "opt2": "To amplify only the desired signal while rejecting other signals", - "opt3": "To reduce the strength of the incoming signal", - "opt4": "To generate a new signal at a different frequency", - "correct_option": "To amplify only the desired signal while rejecting other signals", - "correct_option_index": 2 - }, - { - "qsns": "What is the main advantage of a double tuned amplifier over a single tuned amplifier?", - "opt1": "Higher efficiency", - "opt2": "Higher gain", - "opt3": "Higher selectivity", - "opt4": "Lower distortion", - "correct_option": "Higher selectivity", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following is a disadvantage of tuned amplifiers?", - "opt1": "They are expensive to produce.", - "opt2": "They are large in size.", - "opt3": "They can be difficult to tune and adjust.", - "opt4": "They are not capable of providing high gain.", - "correct_option": "They can be difficult to tune and adjust.", - "correct_option_index": 3 - }, - { - "qsns": "What does op-amp stand for?", - "opt1": "Operational amplifier", - "opt2": "Optimal amplifier", - "opt3": "Organic amplifier", - "opt4": "Oscillating amplifier", - "correct_option": "Operational amplifier", - "correct_option_index": 1 - }, - { - "qsns": "Which configuration is most commonly used in op-amp circuits?", - "opt1": "Inverting amplifier", - "opt2": "Non-inverting amplifier", - "opt3": "Differential amplifier", - "opt4": "Voltage follower", - "correct_option": "Inverting amplifier", - "correct_option_index": 1 - }, - { - "qsns": "What is the gain of an inverting amplifier with a feedback resistor of 10 kΩ and an input resistor of 1 kΩ?", - "opt1": "-1", - "opt2": "-10", - "opt3": "10", - "opt4": "100", - "correct_option": "-10", - "correct_option_index": 2 - }, - { - "qsns": "Which parameter determines the maximum output voltage swing of an op-amp?", - "opt1": "Input offset voltage", - "opt2": "Gain-bandwidth product", - "opt3": "Slew rate", - "opt4": "Output saturation voltage", - "correct_option": "Output saturation voltage", - "correct_option_index": 4 - }, - { - "qsns": "What is the purpose of a voltage follower op-amp circuit?", - "opt1": "To provide high gain", - "opt2": "To provide low gain", - "opt3": "To buffer a signal", - "opt4": "To invert a signal", - "correct_option": "To buffer a signal", - "correct_option_index": 3 - }, - { - "qsns": "What is the transfer function of a non-inverting amplifier with a feedback resistor of 10 kΩ and an input resistor of 1 kΩ?", - "opt1": "Vout = Vin", - "opt2": "Vout = -10Vin", - "opt3": "Vout = 10Vin", - "opt4": "Vout = (1 + 10kΩ/1kΩ)Vin", - "correct_option": "Vout = (1 + 10kΩ/1kΩ)Vin", - "correct_option_index": 4 - }, - { - "qsns": "Which op-amp parameter determines the rate at which the output can change in response to changes in the input?", - "opt1": "Input offset voltage", - "opt2": "Gain-bandwidth product", - "opt3": "Slew rate", - "opt4": "Input bias current", - "correct_option": "Slew rate", - "correct_option_index": 3 - }, - { - "qsns": "What is the purpose of a differential amplifier?", - "opt1": "To amplify the difference between two input signals", - "opt2": "To amplify the sum of two input signals", - "opt3": "To invert a signal", - "opt4": "To provide a high-impedance input", - "correct_option": "To amplify the difference between two input signals", - "correct_option_index": 1 - }, - { - "qsns": "Which op-amp configuration is used to perform mathematical operations, such as addition and subtraction?", - "opt1": "Inverting amplifier", - "opt2": "Non-inverting amplifier", - "opt3": "Summing amplifier", - "opt4": "Differentiator", - "correct_option": "Summing amplifier", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following is a characteristic of an ideal operational amplifier?", - "opt1": "Infinite input impedance", - "opt2": "Infinite output impedance", - "opt3": "Infinite gain", - "opt4": "All of the above", - "correct_option": "All of the above", - "correct_option_index": 4 - }, - { - "qsns": "What is the output voltage of an inverting amplifier with an input voltage of 2 V and a feedback resistor of 10 kΩ, assuming an ideal op-amp?", - "opt1": "-2V", - "opt2": "-20 V", - "opt3": "2V", - "opt4": "20 V", - "correct_option": "-20 V", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following is not a type of operational amplifier?", - "opt1": "Differential amplifier", - "opt2": "Inverting amplifier", - "opt3": "Non-inverting amplifier", - "opt4": "Power amplifier", - "correct_option": "Power amplifier", - "correct_option_index": 4 - }, - { - "qsns": "What is the function of a summing amplifier?", - "opt1": "To amplify a single input signal", - "opt2": "To sum multiple input signals and provide an amplified output signal", - "opt3": "To provide an inverted output signal", - "opt4": "To provide a non-inverted output signal", - "correct_option": "To sum multiple input signals and provide an amplified output signal", - "correct_option_index": 2 - }, - { - "qsns": "What is the output voltage of an inverting amplifier with a gain of -10 if the input voltage is 2V?", - "opt1": "-10V", - "opt2": "-20V", - "opt3": "10V", - "opt4": "20V", - "correct_option": "-20V", - "correct_option_index": 2 - }, - { - "qsns": "What is the function of a voltage follower?", - "opt1": "To amplify a voltage", - "opt2": "To provide a high input impedance", - "opt3": "To provide a low output impedance", - "opt4": "To provide unity gain and high input and output impedances", - "correct_option": "To provide unity gain and high input and output impedances", - "correct_option_index": 4 - }, - { - "qsns": "What is the advantage of using an op-amp as a comparator?", - "opt1": "It has a very high input impedance", - "opt2": "It has a very low output impedance", - "opt3": "It has a very high gain", - "opt4": "It has a very low bandwidth", - "correct_option": "It has a very high gain", - "correct_option_index": 3 - }, - { - "qsns": "What is the function of a differentiator circuit?", - "opt1": "To differentiate the input signal with respect to time", - "opt2": "To integrate the input signal with respect to time", - "opt3": "To amplify the input signal", - "opt4": "To provide a DC offset to the input signal", - "correct_option": "To differentiate the input signal with respect to time", - "correct_option_index": 1 - }, - { - "qsns": "What is the function of an integrator circuit?", - "opt1": "To differentiate the input signal with respect to time", - "opt2": "To integrate the input signal with respect to time", - "opt3": "To amplify the input signal", - "opt4": "To provide a DC offset to the input signal", - "correct_option": "To integrate the input signal with respect to time", - "correct_option_index": 2 - }, - { - "qsns": "What is the advantage of using a non-inverting amplifier instead of an inverting amplifier?", - "opt1": "The input signal is not inverted", - "opt2": "The output impedance is lower", - "opt3": "The gain is higher", - "opt4": "The bandwidth is wider", - "correct_option": "The input signal is not inverted", - "correct_option_index": 1 - }, - { - "qsns": "What is the function of a Schmitt trigger circuit?", - "opt1": "To amplify a signal", - "opt2": "To filter a signal", - "opt3": "To generate a square wave signal from a triangular wave signal", - "opt4": "To provide hysteresis to a signal", - "correct_option": "To provide hysteresis to a signal", - "correct_option_index": 4 - }, - { - "qsns": "What is the purpose of biasing the Class AB output stage in amplifiers?", - "opt1": "To set the operating point of the amplifying devices", - "opt2": "To reduce distortion in the output signal", - "opt3": "To ensure that the amplifying devices operate in the active region of their characteristic curves", - "opt4": "All of the above", - "correct_option": "All of the above", - "correct_option_index": 4 - }, - { - "qsns": "What is a common biasing technique for the Class AB output stage?", - "opt1": "Voltage divider network", - "opt2": "Diode biasing", - "opt3": "Transistor biasing", - "opt4": "All of the above", - "correct_option": "All of the above", - "correct_option_index": 4 - }, - { - "qsns": "In a voltage divider biasing network, where is the bias voltage set?", - "opt1": "At the base or gate of the amplifying device", - "opt2": "At the power supply voltage", - "opt3": "At ground", - "opt4": "None of the above", - "correct_option": "At the base or gate of the amplifying device", - "correct_option_index": 1 - }, - { - "qsns": "How does a diode biasing circuit work?", - "opt1": "By using a transistor configured as a voltage divider", - "opt2": "By connecting a diode in series with the base or gate of the amplifying device", - "opt3": "By using a voltage divider network", - "opt4": "None of the above", - "correct_option": "By connecting a diode in series with the base or gate of the amplifying device", - "correct_option_index": 2 - }, - { - "qsns": "Which biasing technique allows for fine-tuning of the operating point?", - "opt1": "Voltage divider network", - "opt2": "Diode biasing", - "opt3": "Transistor biasing", - "opt4": "None of the above", - "correct_option": "Voltage divider network", - "correct_option_index": 1 - }, - { - "qsns": "What is the goal of biasing the Class AB stage?", - "opt1": "To maximize power efficiency", - "opt2": "To minimize power dissipation", - "opt3": "To ensure linear operation with low distortion", - "opt4": "None of the above", - "correct_option": "To ensure linear operation with low distortion", - "correct_option_index": 3 - }, - { - "qsns": "Which type of amplifying device is typically used in a Class AB output stage?", - "opt1": "Bipolar junction transistor (BJT)", - "opt2": "Field-effect transistor (FET)", - "opt3": "Operational amplifier (Op-amp)", - "opt4": "None of the above", - "correct_option": "Bipolar junction transistor (BJT)", - "correct_option_index": 1 - }, - { - "qsns": "Which biasing technique uses a transistor configured as a voltage divider?", - "opt1": "Voltage divider network", - "opt2": "Diode biasing", - "opt3": "Transistor biasing", - "opt4": "None of the above", - "correct_option": "Transistor biasing", - "correct_option_index": 3 - }, - { - "qsns": "Why is biasing necessary for Class AB amplifiers?", - "opt1": "To prevent the amplifying devices from saturating", - "opt2": "To ensure that the amplifying devices operate in the active region", - "opt3": "To decrease the gain of the amplifier", - "opt4": "None of the above", - "correct_option": "To ensure that the amplifying devices operate in the active region", - "correct_option_index": 2 - }, - { - "qsns": "What is the main advantage of using a Class AB output stage in amplifiers?", - "opt1": "High power efficiency", - "opt2": "Low power dissipation", - "opt3": "High linearity with low distortion", - "opt4": "None of the above", - "correct_option": "High linearity with low distortion", - "correct_option_index": 3 - }, - { - "qsns": "What is the bias voltage typically set to in the Class AB output stage?", - "opt1": "The forward voltage drop of a diode", - "opt2": "The power supply voltage", - "opt3": "Zero volts", - "opt4": "The voltage across a capacitor", - "correct_option": "The forward voltage drop of a diode", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following is a disadvantage of using a diode biasing circuit?", - "opt1": "It is more complex than other biasing techniques", - "opt2": "It is less stable than other biasing techniques", - "opt3": "It requires more power to operate", - "opt4": "It is less accurate than other biasing techniques", - "correct_option": "It is less stable than other biasing techniques", - "correct_option_index": 2 - }, - { - "qsns": "What is the purpose of using a transistor biasing circuit?", - "opt1": "To set the bias voltage", - "opt2": "To amplify the input signal", - "opt3": "To reduce distortion in the output signal", - "opt4": "To increase power efficiency", - "correct_option": "To set the bias voltage", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following biasing techniques is commonly used in Class AB amplifiers?", - "opt1": "Voltage divider network", - "opt2": "Diode biasing", - "opt3": "Transistor biasing", - "opt4": "All of the above", - "correct_option": "Diode biasing", - "correct_option_index": 2 - }, - { - "qsns": "How does the choice of biasing technique affect the power efficiency of the amplifier?", - "opt1": "It has no effect on power efficiency", - "opt2": "It can increase power efficiency", - "opt3": "It can decrease power efficiency", - "opt4": "It can cause the amplifier to malfunction", - "correct_option": "It can decrease power efficiency", - "correct_option_index": 3 - }, - { - "qsns": "What is the disadvantage of using an adjustable biasing network?", - "opt1": "It is less accurate than a fixed biasing network", - "opt2": "It is less stable than a fixed biasing network", - "opt3": "It is more complex than a fixed biasing network", - "opt4": "It is more expensive than a fixed biasing network", - "correct_option": "It is more complex than a fixed biasing network", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following is a key consideration when selecting a biasing technique for the Class AB output stage?", - "opt1": "Power efficiency", - "opt2": "Cost", - "opt3": "Stability", - "opt4": "Input impedance", - "correct_option": "Power efficiency", - "correct_option_index": 1 - }, - { - "qsns": "What is the primary application of power BJTs in amplifier circuits?", - "opt1": "High frequency amplification", - "opt2": "Low noise amplification", - "opt3": "Power amplification", - "opt4": "Voltage amplification", - "correct_option": "Power amplification", - "correct_option_index": 3 - }, - { - "qsns": "Which type of power BJT is more commonly used in power amplifier circuits?", - "opt1": "PNP", - "opt2": "NPN", - "opt3": "Both are used equally", - "opt4": "None of the above", - "correct_option": "NPN", - "correct_option_index": 2 - }, - { - "qsns": "What is the operating region of the power BJT?", - "opt1": "Saturation", - "opt2": "Cutoff", - "opt3": "Active", - "opt4": "Reverse breakdown", - "correct_option": "Active", - "correct_option_index": 3 - }, - { - "qsns": "Which configuration is most commonly used for low-power amplifiers?", - "opt1": "Class A", - "opt2": "Class AB", - "opt3": "Class B", - "opt4": "Class C", - "correct_option": "Class A", - "correct_option_index": 1 - }, - { - "qsns": "What is the main advantage of power BJTs over small signal BJTs?", - "opt1": "Higher frequency response", - "opt2": "Lower noise", - "opt3": "Higher power handling capability", - "opt4": "Lower distortion", - "correct_option": "Higher power handling capability", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following is a common application of power BJTs?", - "opt1": "Voltage regulators", - "opt2": "Oscillators", - "opt3": "Audio amplifiers", - "opt4": "Digital circuits", - "correct_option": "Audio amplifiers", - "correct_option_index": 3 - }, - { - "qsns": "What is the primary purpose of switching amplifiers?", - "opt1": "To increase power gain", - "opt2": "To reduce distortion", - "opt3": "To improve efficiency", - "opt4": "To increase frequency response", - "correct_option": "To improve efficiency", - "correct_option_index": 3 - }, - { - "qsns": "Which type of amplifier uses power MOSFETs to provide high efficiency?", - "opt1": "Class A", - "opt2": "Class B", - "opt3": "Class D", - "opt4": "Class AB", - "correct_option": "Class D", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following is not a technique used to improve the efficiency of power amplifiers?", - "opt1": "Class G and H amplifiers", - "opt2": "Switching amplifiers", - "opt3": "Feedback amplifiers", - "opt4": "Class D amplifiers", - "correct_option": "Feedback amplifiers", - "correct_option_index": 3 - }, - { - "qsns": "What is the main disadvantage of power BJTs in amplifier circuits?", - "opt1": "High distortion", - "opt2": "Low power handling capability", - "opt3": "Low frequency response", - "opt4": "High heat dissipation", - "correct_option": "High heat dissipation", - "correct_option_index": 4 - }, - { - "qsns": "What is the primary function of power BJTs in amplifier circuits?", - "opt1": "To provide high voltage gain", - "opt2": "To provide low noise amplification", - "opt3": "To provide high power gain and efficiency", - "opt4": "To provide high frequency response", - "correct_option": "To provide high power gain and efficiency", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following is a commonly used configuration for power BJTs in low-power amplifiers?", - "opt1": "Class A", - "opt2": "Class AB", - "opt3": "Class B", - "opt4": "Class C", - "correct_option": "Class A", - "correct_option_index": 1 - }, - { - "qsns": "Which type of power BJT is commonly used in power amplifier circuits?", - "opt1": "PNP", - "opt2": "NPN", - "opt3": "JFET", - "opt4": "MOSFET", - "correct_option": "NPN", - "correct_option_index": 2 - }, - { - "qsns": "In which region of operation does the power BJT operate?", - "opt1": "Saturation region", - "opt2": "Cutoff region", - "opt3": "Active region", - "opt4": "Reverse-bias region", - "correct_option": "Active region", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following is a technique used to improve the efficiency of power amplifiers?", - "opt1": "Class A amplification", - "opt2": "Switching amplifiers", - "opt3": "Class AB amplification", - "opt4": "Linear amplifiers", - "correct_option": "Switching amplifiers", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following is an application of power BJTs?", - "opt1": "Audio amplifiers", - "opt2": "Radio receivers", - "opt3": "Logic gates", - "opt4": "Voltage regulators", - "correct_option": "Audio amplifiers", - "correct_option_index": 1 - }, - { - "qsns": "What is the primary difference between small signal BJTs and power BJTs?", - "opt1": "Current gain", - "opt2": "Voltage gain", - "opt3": "Frequency response", - "opt4": "High power handling capability", - "correct_option": "High power handling capability", - "correct_option_index": 4 - }, - { - "qsns": "Which type of power BJT has a higher current gain?", - "opt1": "PNP", - "opt2": "NPN", - "opt3": "JFET", - "opt4": "MOSFET", - "correct_option": "NPN", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following is a benefit of using power BJTs in amplifier circuits?", - "opt1": "High frequency response", - "opt2": "Low power consumption", - "opt3": "Low distortion", - "opt4": "High power gain", - "correct_option": "High power gain", - "correct_option_index": 4 - }, - { - "qsns": "Which of the following amplifier configurations is commonly used in high-power amplifiers?", - "opt1": "Class A", - "opt2": "Class AB", - "opt3": "Class B", - "opt4": "Class D", - "correct_option": "Class D", - "correct_option_index": 4 - }, - { - "qsns": "In a transformer-coupled push-pull amplifier, the primary winding of the output transformer is connected to:", - "opt1": "The input signal", - "opt2": "The collector of the NPN transistor in the driver stage", - "opt3": "The base of the NPN transistor in the driver stage", - "opt4": "The collector of both transistors", - "correct_option": "The collector of both transistors", - "correct_option_index": 4 - }, - { - "qsns": "The transformer in a transformer-coupled push-pull amplifier is used to:", - "opt1": "Provide impedance matching between the driver and output stages", - "opt2": "Amplify the signal", - "opt3": "Provide voltage gain", - "opt4": "Provide current gain", - "correct_option": "Provide impedance matching between the driver and output stages", - "correct_option_index": 1 - }, - { - "qsns": "In a transformer-coupled push-pull amplifier, the two output transistors are biased so that they conduct:", - "opt1": "Simultaneously", - "opt2": "Randomly", - "opt3": "Alternately", - "opt4": "None of the above", - "correct_option": "Alternately", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following is an advantage of a transformer-coupled push-pull amplifier?", - "opt1": "High efficiency", - "opt2": "Low distortion", - "opt3": "High gain", - "opt4": "All of the above", - "correct_option": "All of the above", - "correct_option_index": 4 - }, - { - "qsns": "The output of a transformer-coupled push-pull amplifier is taken from:", - "opt1": "The primary winding of the output transformer", - "opt2": "The secondary winding of the output transformer", - "opt3": "The center tap of the output transformer", - "opt4": "None of the above", - "correct_option": "The secondary winding of the output transformer", - "correct_option_index": 2 - }, - { - "qsns": "The load impedance in a transformer-coupled push-pull amplifier is:", - "opt1": "Always equal to the output impedance of the amplifier", - "opt2": "Always lower than the output impedance of the amplifier", - "opt3": "Always higher than the output impedance of the amplifier", - "opt4": "None of the above", - "correct_option": "Always equal to the output impedance of the amplifier", - "correct_option_index": 1 - }, - { - "qsns": "The DC bias voltage for the output transistors in a transformer-coupled push-pull amplifier is provided by:", - "opt1": "The input signal", - "opt2": "The driver stage", - "opt3": "A separate bias circuit", - "opt4": "None of the above", - "correct_option": "A separate bias circuit", - "correct_option_index": 3 - }, - { - "qsns": "The crossover distortion in a transformer-coupled push-pull amplifier is caused by:", - "opt1": "The mismatch between the two output transistors", - "opt2": "The bias voltage being too high", - "opt3": "The load impedance being too low", - "opt4": "None of the above", - "correct_option": "The mismatch between the two output transistors", - "correct_option_index": 1 - }, - { - "qsns": "The transformer in a transformer-coupled push-pull amplifier is usually:", - "opt1": "A step-up transformer", - "opt2": "A step-down transformer", - "opt3": "A transformer with a 1:1 turns ratio", - "opt4": "None of the above", - "correct_option": "A step-down transformer", - "correct_option_index": 2 - }, - { - "qsns": "In a transformer-coupled push-pull amplifier, the output transistors are typically:", - "opt1": "Darlington transistors", - "opt2": "Complementary pair transistors", - "opt3": "MOSFETs", - "opt4": "None of the above", - "correct_option": "None of the above", - "correct_option_index": 4 - }, - { - "qsns": "In a transformer-coupled push-pull stage, two identical transistors are used with one conducting during the positive half-cycle of the input signal and the other conducting during the negative half-cycle. What is the main advantage of using two transistors in this configuration?", - "opt1": "Increased efficiency", - "opt2": "Increased voltage gain", - "opt3": "Reduced distortion", - "opt4": "All of the above", - "correct_option": "All of the above", - "correct_option_index": 4 - }, - { - "qsns": "Which of the following statements about the transformer-coupled push-pull stage is true?", - "opt1": "It is commonly used in audio power amplifiers", - "opt2": "It is a type of class A amplifier", - "opt3": "It requires a large amount of power for operation", - "opt4": "It has a low voltage gain", - "correct_option": "It is commonly used in audio power amplifiers", - "correct_option_index": 1 - }, - { - "qsns": "The transformer in a transformer-coupled push-pull stage is used to:", - "opt1": "Increase the voltage gain of the amplifier", - "opt2": "Couple the output signal to the load", - "opt3": "Provide impedance matching between the amplifier and the load", - "opt4": "All of the above", - "correct_option": "Provide impedance matching between the amplifier and the load", - "correct_option_index": 3 - }, - { - "qsns": "In a transformer-coupled push-pull stage, the transformer is typically wound with a center-tapped secondary winding. What is the purpose of the center tap?", - "opt1": "To provide a reference voltage for biasing the transistors", - "opt2": "To provide a means for adjusting the gain of the amplifier", - "opt3": "To provide a balanced load for the transistors", - "opt4": "None of the above", - "correct_option": "To provide a reference voltage for biasing the transistors", - "correct_option_index": 1 - }, - { - "qsns": "The transformer-coupled push-pull stage is a type of:", - "opt1": "Class A amplifier", - "opt2": "Class B amplifier", - "opt3": "Class AB amplifier", - "opt4": "None of the above", - "correct_option": "Class B amplifier", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following is an advantage of using a transformer-coupled push-pull stage over a single-ended output stage?", - "opt1": "Higher efficiency", - "opt2": "Higher voltage gain", - "opt3": "Reduced distortion", - "opt4": "All of the above", - "correct_option": "All of the above", - "correct_option_index": 4 - }, - { - "qsns": "The output of a transformer-coupled push-pull stage is taken from:", - "opt1": "The collector of one transistor", - "opt2": "The center tap of the transformer secondary winding", - "opt3": "The collector of both transistors", - "opt4": "The primary winding of the transformer", - "correct_option": "The center tap of the transformer secondary winding", - "correct_option_index": 2 - }, - { - "qsns": "What is the main disadvantage of a transformer-coupled push-pull stage compared to other output stage configurations?", - "opt1": "Reduced efficiency", - "opt2": "Increased distortion", - "opt3": "Limited frequency response", - "opt4": "All of the above", - "correct_option": "Limited frequency response", - "correct_option_index": 3 - }, - { - "qsns": "The transformer in a transformer-coupled push-pull stage should be designed with:", - "opt1": "High primary-to-secondary turns ratio", - "opt2": "Low primary-to-secondary turns ratio", - "opt3": "High frequency response", - "opt4": "Low leakage inductance", - "correct_option": "Low leakage inductance", - "correct_option_index": 4 - }, - { - "qsns": "What is the main advantage of using a transformer in a push-pull output stage?", - "opt1": "Increased voltage gain", - "opt2": "Impedance matching to the load", - "opt3": "Reduced distortion", - "opt4": "Increased efficiency", - "correct_option": "Impedance matching to the load", - "correct_option_index": 2 - }, - { - "qsns": "What is the basic function of a tuned amplifier?", - "opt1": "To provide high power amplification", - "opt2": "To provide high selectivity and gain", - "opt3": "To filter out unwanted signals", - "opt4": "To provide high frequency stability", - "correct_option": "To provide high selectivity and gain", - "correct_option_index": 2 - }, - { - "qsns": "Which type of resonant circuit is typically used in tuned amplifiers?", - "opt1": "RC circuits", - "opt2": "RL circuits", - "opt3": "LC circuits", - "opt4": "RLC circuits", - "correct_option": "LC circuits", - "correct_option_index": 3 - }, - { - "qsns": "What is the Q factor of a resonant circuit?", - "opt1": "The frequency at which the circuit resonates", - "opt2": "The voltage gain of the circuit", - "opt3": "The energy stored in the circuit", - "opt4": "The ratio of energy stored in the circuit to energy lost per cycle", - "correct_option": "The ratio of energy stored in the circuit to energy lost per cycle", - "correct_option_index": 4 - }, - { - "qsns": "What is the difference between a single tuned amplifier and a double tuned amplifier?", - "opt1": "A single tuned amplifier is more selective than a double tuned amplifier.", - "opt2": "A single tuned amplifier uses one resonant circuit, while a double tuned amplifier uses two.", - "opt3": "A double tuned amplifier provides more gain than a single tuned amplifier.", - "opt4": "A double tuned amplifier uses a transformer to couple the resonant circuits.", - "correct_option": "A single tuned amplifier uses one resonant circuit, while a double tuned amplifier uses two.", - "correct_option_index": 2 - }, - { - "qsns": "Which type of amplifier is commonly used in radio receivers and transmitters?", - "opt1": "Class A amplifier", - "opt2": "Class B amplifier", - "opt3": "Class AB amplifier", - "opt4": "Tuned amplifier", - "correct_option": "Tuned amplifier", - "correct_option_index": 4 - }, - { - "qsns": "Which electronic device can be used as the active element in a tuned amplifier?", - "opt1": "Capacitor", - "opt2": "Resistor", - "opt3": "Inductor", - "opt4": "Transistor", - "correct_option": "Transistor", - "correct_option_index": 4 - }, - { - "qsns": "What is the function of the Q multiplier in a tuned amplifier?", - "opt1": "To provide additional gain at the center frequency of the circuit", - "opt2": "To increase the bandwidth of the circuit", - "opt3": "To improve the stability of the circuit", - "opt4": "To reduce distortion in the output signal", - "correct_option": "To provide additional gain at the center frequency of the circuit", - "correct_option_index": 1 - }, - { - "qsns": "What is a tuned amplifier?", - "opt1": "An amplifier with no selectivity or gain", - "opt2": "An amplifier that only works with specific types of signals", - "opt3": "An amplifier that uses tuned circuits to achieve high selectivity and gain", - "opt4": "An amplifier that is not commonly used in electronic applications", - "correct_option": "An amplifier that uses tuned circuits to achieve high selectivity and gain", - "correct_option_index": 3 - }, - { - "qsns": "What type of resonant circuits are used in tuned amplifiers?", - "opt1": "RC circuits", - "opt2": "LC circuits", - "opt3": "RL circuits", - "opt4": "RLC circuits", - "correct_option": "LC circuits", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following is a key factor in determining the gain and selectivity of a tuned amplifier?", - "opt1": "The type of amplifier used", - "opt2": "The power supply voltage", - "opt3": "The Q factor of the resonant circuits", - "opt4": "The input signal frequency", - "correct_option": "The Q factor of the resonant circuits", - "correct_option_index": 3 - }, - { - "qsns": "What is the difference between a single tuned amplifier and a double tuned amplifier?", - "opt1": "A single tuned amplifier uses one resonant circuit, while a double tuned amplifier uses two resonant circuits.", - "opt2": "A single tuned amplifier is only used in audio applications, while a double tuned amplifier is only used in radio applications.", - "opt3": "A single tuned amplifier is less efficient than a double tuned amplifier.", - "opt4": "A single tuned amplifier has a lower Q factor than a double tuned amplifier.", - "correct_option": "A single tuned amplifier uses one resonant circuit, while a double tuned amplifier uses two resonant circuits.", - "correct_option_index": 1 - }, - { - "qsns": "Where are tuned amplifiers commonly used?", - "opt1": "In power supplies", - "opt2": "In digital circuits", - "opt3": "In radio receivers and transmitters", - "opt4": "In microcontrollers", - "correct_option": "In radio receivers and transmitters", - "correct_option_index": 3 - }, - { - "qsns": "What is the Q factor of a resonant circuit?", - "opt1": "The amount of power dissipated in the circuit", - "opt2": "The amount of power supplied to the circuit", - "opt3": "The ratio of energy stored in the circuit to energy lost per cycle", - "opt4": "The ratio of energy lost in the circuit to energy stored per cycle", - "correct_option": "The ratio of energy stored in the circuit to energy lost per cycle", - "correct_option_index": 3 - }, - { - "qsns": "Which type of amplifying device can be used in tuned amplifiers?", - "opt1": "BJTs", - "opt2": "MOSFETs", - "opt3": "Vacuum tubes", - "opt4": "All of the above", - "correct_option": "All of the above", - "correct_option_index": 4 - }, - { - "qsns": "What is the purpose of a tuned amplifier in a radio receiver?", - "opt1": "To amplify all incoming signals equally", - "opt2": "To amplify only the desired signal while rejecting other signals", - "opt3": "To reduce the strength of the incoming signal", - "opt4": "To generate a new signal at a different frequency", - "correct_option": "To amplify only the desired signal while rejecting other signals", - "correct_option_index": 2 - }, - { - "qsns": "What is the main advantage of a double tuned amplifier over a single tuned amplifier?", - "opt1": "Higher efficiency", - "opt2": "Higher gain", - "opt3": "Higher selectivity", - "opt4": "Lower distortion", - "correct_option": "Higher selectivity", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following is a disadvantage of tuned amplifiers?", - "opt1": "They are expensive to produce.", - "opt2": "They are large in size.", - "opt3": "They can be difficult to tune and adjust.", - "opt4": "They are not capable of providing high gain.", - "correct_option": "They can be difficult to tune and adjust.", - "correct_option_index": 3 - }, - { - "qsns": "What does op-amp stand for?", - "opt1": "Operational amplifier", - "opt2": "Optimal amplifier", - "opt3": "Organic amplifier", - "opt4": "Oscillating amplifier", - "correct_option": "Operational amplifier", - "correct_option_index": 1 - }, - { - "qsns": "Which configuration is most commonly used in op-amp circuits?", - "opt1": "Inverting amplifier", - "opt2": "Non-inverting amplifier", - "opt3": "Differential amplifier", - "opt4": "Voltage follower", - "correct_option": "Inverting amplifier", - "correct_option_index": 1 - }, - { - "qsns": "What is the gain of an inverting amplifier with a feedback resistor of 10 kΩ and an input resistor of 1 kΩ?", - "opt1": "-1", - "opt2": "-10", - "opt3": "10", - "opt4": "100", - "correct_option": "-10", - "correct_option_index": 2 - }, - { - "qsns": "Which parameter determines the maximum output voltage swing of an op-amp?", - "opt1": "Input offset voltage", - "opt2": "Gain-bandwidth product", - "opt3": "Slew rate", - "opt4": "Output saturation voltage", - "correct_option": "Output saturation voltage", - "correct_option_index": 4 - }, - { - "qsns": "What is the purpose of a voltage follower op-amp circuit?", - "opt1": "To provide high gain", - "opt2": "To provide low gain", - "opt3": "To buffer a signal", - "opt4": "To invert a signal", - "correct_option": "To buffer a signal", - "correct_option_index": 3 - }, - { - "qsns": "What is the transfer function of a non-inverting amplifier with a feedback resistor of 10 kΩ and an input resistor of 1 kΩ?", - "opt1": "Vout = Vin", - "opt2": "Vout = -10Vin", - "opt3": "Vout = 10Vin", - "opt4": "Vout = (1 + 10kΩ/1kΩ)Vin", - "correct_option": "Vout = (1 + 10kΩ/1kΩ)Vin", - "correct_option_index": 4 - }, - { - "qsns": "Which op-amp parameter determines the rate at which the output can change in response to changes in the input?", - "opt1": "Input offset voltage", - "opt2": "Gain-bandwidth product", - "opt3": "Slew rate", - "opt4": "Input bias current", - "correct_option": "Slew rate", - "correct_option_index": 3 - }, - { - "qsns": "What is the purpose of a differential amplifier?", - "opt1": "To amplify the difference between two input signals", - "opt2": "To amplify the sum of two input signals", - "opt3": "To invert a signal", - "opt4": "To provide a high-impedance input", - "correct_option": "To amplify the difference between two input signals", - "correct_option_index": 1 - }, - { - "qsns": "Which op-amp configuration is used to perform mathematical operations, such as addition and subtraction?", - "opt1": "Inverting amplifier", - "opt2": "Non-inverting amplifier", - "opt3": "Summing amplifier", - "opt4": "Differentiator", - "correct_option": "Summing amplifier", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following is a characteristic of an ideal operational amplifier?", - "opt1": "Infinite input impedance", - "opt2": "Infinite output impedance", - "opt3": "Infinite gain", - "opt4": "All of the above", - "correct_option": "All of the above", - "correct_option_index": 4 - }, - { - "qsns": "What is the output voltage of an inverting amplifier with an input voltage of 2 V and a feedback resistor of 10 kΩ, assuming an ideal op-amp?", - "opt1": "-2V", - "opt2": "-20 V", - "opt3": "2V", - "opt4": "20 V", - "correct_option": "-20 V", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following is not a type of operational amplifier?", - "opt1": "Differential amplifier", - "opt2": "Inverting amplifier", - "opt3": "Non-inverting amplifier", - "opt4": "Power amplifier", - "correct_option": "Power amplifier", - "correct_option_index": 4 - }, - { - "qsns": "What is the function of a summing amplifier?", - "opt1": "To amplify a single input signal", - "opt2": "To sum multiple input signals and provide an amplified output signal", - "opt3": "To provide an inverted output signal", - "opt4": "To provide a non-inverted output signal", - "correct_option": "To sum multiple input signals and provide an amplified output signal", - "correct_option_index": 2 - }, - { - "qsns": "What is the output voltage of an inverting amplifier with a gain of -10 if the input voltage is 2V?", - "opt1": "-10V", - "opt2": "-20V", - "opt3": "10V", - "opt4": "20V", - "correct_option": "-20V", - "correct_option_index": 2 - }, - { - "qsns": "What is the function of a voltage follower?", - "opt1": "To amplify a voltage", - "opt2": "To provide a high input impedance", - "opt3": "To provide a low output impedance", - "opt4": "To provide unity gain and high input and output impedances", - "correct_option": "To provide unity gain and high input and output impedances", - "correct_option_index": 4 - }, - { - "qsns": "What is the advantage of using an op-amp as a comparator?", - "opt1": "It has a very high input impedance", - "opt2": "It has a very low output impedance", - "opt3": "It has a very high gain", - "opt4": "It has a very low bandwidth", - "correct_option": "It has a very high gain", - "correct_option_index": 3 - }, - { - "qsns": "What is the function of a differentiator circuit?", - "opt1": "To differentiate the input signal with respect to time", - "opt2": "To integrate the input signal with respect to time", - "opt3": "To amplify the input signal", - "opt4": "To provide a DC offset to the input signal", - "correct_option": "To differentiate the input signal with respect to time", - "correct_option_index": 1 - }, - { - "qsns": "What is the function of an integrator circuit?", - "opt1": "To differentiate the input signal with respect to time", - "opt2": "To integrate the input signal with respect to time", - "opt3": "To amplify the input signal", - "opt4": "To provide a DC offset to the input signal", - "correct_option": "To integrate the input signal with respect to time", - "correct_option_index": 2 - }, - { - "qsns": "What is the advantage of using a non-inverting amplifier instead of an inverting amplifier?", - "opt1": "The input signal is not inverted", - "opt2": "The output impedance is lower", - "opt3": "The gain is higher", - "opt4": "The bandwidth is wider", - "correct_option": "The input signal is not inverted", - "correct_option_index": 1 - }, - { - "qsns": "What is the function of a Schmitt trigger circuit?", - "opt1": "To amplify a signal", - "opt2": "To filter a signal", - "opt3": "To generate a square wave signal from a triangular wave signal", - "opt4": "To provide hysteresis to a signal", - "correct_option": "To provide hysteresis to a signal", - "correct_option_index": 4 - }, - { - "qsns": "What is the output of a binary decoder if the input code is all zeros?", - "opt1": "The first output line will be selected", - "opt2": "The last output line will be selected", - "opt3": "No output lines will be selected", - "opt4": "None of the above", - "correct_option": "The first output line will be selected", - "correct_option_index": 1 - }, - { - "qsns": "Which type of decoder is commonly used in digital clocks and calculators?", - "opt1": "Binary decoder", - "opt2": "BCD decoder", - "opt3": "Priority decoder", - "opt4": "None of the above", - "correct_option": "BCD decoder", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following is an advantage of a decoder?", - "opt1": "It can be used to convert any type of code into an output signal", - "opt2": "It is easy to implement and use", - "opt3": "It can be used in sequential circuits", - "opt4": "None of the above", - "correct_option": "It is easy to implement and use", - "correct_option_index": 2 - }, - { - "qsns": "What is the purpose of an encoder?", - "opt1": "To convert an input signal into a coded output signal", - "opt2": "To store and retrieve digital data", - "opt3": "To perform arithmetic and logical operations on binary data", - "opt4": "To generate an output based on the input and the previous state", - "correct_option": "To convert an input signal into a coded output signal", - "correct_option_index": 1 - }, - { - "qsns": "What is the difference between a binary encoder and a priority encoder?", - "opt1": "A binary encoder converts a binary input signal into an n-bit coded output signal, while a priority encoder generates a binary code corresponding to the highest priority input signal.", - "opt2": "A binary encoder generates a binary code corresponding to the highest priority input signal, while a priority encoder converts a binary input signal into an n-bit coded output signal.", - "opt3": "A binary encoder and a priority encoder are the same thing.", - "opt4": "A binary encoder and a priority encoder have no difference.", - "correct_option": "A binary encoder converts a binary input signal into an n-bit coded output signal, while a priority encoder generates a binary code corresponding to the highest priority input signal.", - "correct_option_index": 1 - }, - { - "qsns": "What is the advantage of using a priority encoder?", - "opt1": "It simplifies the design of complex digital circuits", - "opt2": "It reduces the number of input lines required", - "opt3": "It increases the speed of data processing", - "opt4": "All of the above", - "correct_option": "It simplifies the design of complex digital circuits", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following is NOT a type of encoder?", - "opt1": "Binary encoder", - "opt2": "Priority encoder", - "opt3": "BCD encoder", - "opt4": "Multiplexer", - "correct_option": "Multiplexer", - "correct_option_index": 4 - }, - { - "qsns": "What is the purpose of an encoder in digital logic?", - "opt1": "To convert a binary input signal into an n-bit coded output signal", - "opt2": "To generate a binary code corresponding to the highest priority input signal", - "opt3": "To convert a decimal input signal into a 4-bit BCD output signal", - "opt4": "To perform arithmetic operations on binary numbers", - "correct_option": "To convert a binary input signal into an n-bit coded output signal", - "correct_option_index": 1 - }, - { - "qsns": "How many input lines and output lines does a binary encoder have?", - "opt1": "n input lines and m output lines", - "opt2": "2^n input lines and n output lines", - "opt3": "n input lines and log2n output lines", - "opt4": "10 input lines and 4 output lines", - "correct_option": "2^n input lines and n output lines", - "correct_option_index": 2 - }, - { - "qsns": "What is the purpose of a priority encoder in digital logic?", - "opt1": "To convert a binary input signal into an n-bit coded output signal", - "opt2": "To generate a binary code corresponding to the highest priority input signal", - "opt3": "To convert a decimal input signal into a 4-bit BCD output signal", - "opt4": "To perform arithmetic operations on binary numbers", - "correct_option": "To generate a binary code corresponding to the highest priority input signal", - "correct_option_index": 2 - }, - { - "qsns": "How many input lines and output lines does a priority encoder have?", - "opt1": "n input lines and m output lines", - "opt2": "2^n input lines and n output lines", - "opt3": "n input lines and log2n output lines", - "opt4": "10 input lines and 4 output lines", - "correct_option": "n input lines and log2n output lines", - "correct_option_index": 3 - }, - { - "qsns": "What is the purpose of a BCD encoder in digital logic?", - "opt1": "To convert a binary input signal into an n-bit coded output signal", - "opt2": "To generate a binary code corresponding to the highest priority input signal", - "opt3": "To convert a decimal input signal into a 4-bit BCD output signal", - "opt4": "To perform arithmetic operations on binary numbers", - "correct_option": "To convert a decimal input signal into a 4-bit BCD output signal", - "correct_option_index": 3 - }, - { - "qsns": "How many input lines and output lines does a BCD encoder have?", - "opt1": "n input lines and m output lines", - "opt2": "2^n input lines and n output lines", - "opt3": "n input lines and log2n output lines", - "opt4": "10 input lines and 4 output lines", - "correct_option": "10 input lines and 4 output lines", - "correct_option_index": 4 - }, - { - "qsns": "What is the difference between a binary encoder and a priority encoder?", - "opt1": "A binary encoder converts a binary input signal into an n-bit coded output signal, while a priority encoder generates a binary code corresponding to the highest priority input signal.", - "opt2": "A binary encoder generates a binary code corresponding to the highest priority input signal, while a priority encoder converts a binary input signal into an n-bit coded output signal.", - "opt3": "A binary encoder converts a decimal input signal into a 4-bit BCD output signal, while a priority encoder generates a binary code corresponding to the highest priority input signal.", - "opt4": "A binary encoder has 2^n input lines and n output lines, while a priority encoder has n input lines and log2n output lines.", - "correct_option": "A binary encoder has 2^n input lines and n output lines, while a priority encoder has n input lines and log2n output lines.", - "correct_option_index": 4 - }, - { - "qsns": "What is the purpose of using an encoder in data communication?", - "opt1": "To convert analog signals into digital signals", - "opt2": "To compress digital signals for efficient transmission", - "opt3": "To encrypt digital signals for secure transmission", - "opt4": "To convert digital signals into a coded output signal for transmission", - "correct_option": "To convert digital signals into a coded output signal for transmission", - "correct_option_index": 4 - }, - { - "qsns": "What is the purpose of using a BCD encoder in digital signal processing?", - "opt1": "To convert a binary input signal into an n-bit coded output signal", - "opt2": "To generate a binary code corresponding to the highest priority input signal", - "opt3": "To convert a decimal input signal into a 4-bit BCD output signal", - "opt4": "To perform arithmetic operations on binary numbers", - "correct_option": "To convert a decimal input signal into a 4-bit BCD output signal", - "correct_option_index": 3 - }, - { - "qsns": "What is the result of binary addition of 0110 and 0101?", - "opt1": "1101", - "opt2": "1111", - "opt3": "1011", - "opt4": "0011", - "correct_option": "1011", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following is the correct binary addition of 1111 and 0011?", - "opt1": "11010", - "opt2": "10010", - "opt3": "10100", - "opt4": "10000", - "correct_option": "10010", - "correct_option_index": 2 - }, - { - "qsns": "What is the binary addition of 10101 and 11111?", - "opt1": "110010", - "opt2": "110111", - "opt3": "110110", - "opt4": "100010", - "correct_option": "110100", - "correct_option_index": 3 - }, - { - "qsns": "What is the binary addition of 1101 and 0110?", - "opt1": "1110", - "opt2": "10010", - "opt3": "10011", - "opt4": "1100", - "correct_option": "10011", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following represents the correct binary addition of 1010 and 0110?", - "opt1": "1000", - "opt2": "1011", - "opt3": "10000", - "opt4": "11111", - "correct_option": "10000", - "correct_option_index": 3 - }, - { - "qsns": "What is the result of binary addition of 11111 and 00001?", - "opt1": "11110", - "opt2": "100000", - "opt3": "10000", - "opt4": "11111", - "correct_option": "100000", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following represents the correct binary addition of 111 and 101?", - "opt1": "1100", - "opt2": "1010", - "opt3": "1111", - "opt4": "1001", - "correct_option": "1100", - "correct_option_index": 1 - }, - { - "qsns": "What is the result of binary addition of 0101 and 0010?", - "opt1": "0111", - "opt2": "1000", - "opt3": "1011", - "opt4": "1001", - "correct_option": "0111", - "correct_option_index": 1 - }, - { - "qsns": "What is the binary sum of 1011 and 1101?", - "opt1": "10011", - "opt2": "10101", - "opt3": "0110", - "opt4": "0100", - "correct_option": "11000", - "correct_option_index": 4 - }, - { - "qsns": "What is the binary sum of 1110 and 0111?", - "opt1": "10001", - "opt2": "10101", - "opt3": "1110", - "opt4": "100110", - "correct_option": "10101", - "correct_option_index": 2 - }, - { - "qsns": "What is the binary sum of 10101010 and 11001100?", - "opt1": "10111111", - "opt2": "10110110", - "opt3": "1101-", - "opt4": "0100", - "correct_option": "101110110", - "correct_option_index": 2 - }, - { - "qsns": "What is the binary sum of 11111111 and 00000001?", - "opt1": "11111110", - "opt2": "11111111", - "opt3": "10100100", - "opt4": "100000000", - "correct_option": "100000000", - "correct_option_index": 4 - }, - { - "qsns": "Which of the following represents the correct binary addition of 1101 and 0011?", - "opt1": "1111", - "opt2": "1010", - "opt3": "10011100", - "opt4": "00000010", - "correct_option": "10000", - "correct_option_index": 4 - }, - { - "qsns": "What is the binary addition of 1010 and 1101?", - "opt1": "1000", - "opt2": "1111", - "opt3": "10111", - "opt4": "00000000", - "correct_option": "10111", - "correct_option_index": 3 - }, - { - "qsns": "What is the carry generated when adding 1101 and 1011?", - "opt1": "1", - "opt2": "0", - "opt3": "2", - "opt4": "3", - "correct_option": "1", - "correct_option_index": 1 - }, - { - "qsns": "What is the binary sum of 111 and 101?", - "opt1": "1011", - "opt2": "1110", - "opt3": "110", - "opt4": "1001", - "correct_option": "1100", - "correct_option_index": 2 - }, - { - "qsns": "What is the result of adding 1011 and 1110 using a full adder circuit?", - "opt1": "1101", - "opt2": "10000", - "opt3": "11001", - "opt4": "1010", - "correct_option": "11001", - "correct_option_index": 3 - }, - { - "qsns": "What is the binary sum of 1111 and 0111 using a half adder circuit?", - "opt1": "1110", - "opt2": "1101", - "opt3": "1000", - "opt4": "10110", - "correct_option": "10110", - "correct_option_index": 4 - }, - { - "qsns": "What is the result of adding 1011 and 1100 using a carry look-ahead adder (CLA) circuit?", - "opt1": "1101", - "opt2": "10100", - "opt3": "10111", - "opt4": "10011", - "correct_option": "10111", - "correct_option_index": 3 - }, - { - "qsns": "What is the binary sum of 1001 and 0110?", - "opt1": "1011", - "opt2": "1110", - "opt3": "1111", - "opt4": "0011", - "correct_option": "1111", - "correct_option_index": 3 - }, - { - "qsns": "What is the complement of the binary number 1111?", - "opt1": "1110", - "opt2": "0000", - "opt3": "0001", - "opt4": "1000", - "correct_option": "0000", - "correct_option_index": 2 - }, - { - "qsns": "What is the complement of the binary number 0011?", - "opt1": "0010", - "opt2": "1101", - "opt3": "1100", - "opt4": "0100", - "correct_option": "1100", - "correct_option_index": 3 - }, - { - "qsns": "What is the result of subtracting the binary number 0110 from the binary number 1011?", - "opt1": "1001", - "opt2": "0101", - "opt3": "0010", - "opt4": "1101", - "correct_option": "0101", - "correct_option_index": 2 - }, - { - "qsns": "What is the complement of the binary number 0001?", - "opt1": "0000", - "opt2": "1110", - "opt3": "1111", - "opt4": "0010", - "correct_option": "1110", - "correct_option_index": 2 - }, - { - "qsns": "What is the result of subtracting the binary number 1101 from the binary number 1110?", - "opt1": "0000", - "opt2": "0001", - "opt3": "0011", - "opt4": "0111", - "correct_option": "0001", - "correct_option_index": 2 - }, - { - "qsns": "What is the complement of the binary number 0101?", - "opt1": "0100", - "opt2": "1010", - "opt3": "1011", - "opt4": "1001", - "correct_option": "1010", - "correct_option_index": 2 - }, - { - "qsns": "What is the result of subtracting the binary number 0010 from the binary number 1111?", - "opt1": "0101", - "opt2": "1101", - "opt3": "0110", - "opt4": "1011", - "correct_option": "1101", - "correct_option_index": 2 - }, - { - "qsns": "What is the complement of the binary number 1000?", - "opt1": "0111", - "opt2": "1011", - "opt3": "1001", - "opt4": "1001", - "correct_option": "0111", - "correct_option_index": 1 - }, - { - "qsns": "What is the first step in binary subtraction?", - "opt1": "Find the complement of the minuend", - "opt2": "Invert all the bits of the minuend", - "opt3": "Find the complement of the subtrahend", - "opt4": "Invert all the bits of the subtrahend", - "correct_option": "Find the complement of the subtrahend", - "correct_option_index": 3 - }, - { - "qsns": "What is the complement of the binary number 1011?", - "opt1": "1100", - "opt2": "0100", - "opt3": "1000", - "opt4": "0001", - "correct_option": "0100", - "correct_option_index": 2 - }, - { - "qsns": "What is the binary equivalent of the decimal value 7?", - "opt1": "110", - "opt2": "101", - "opt3": "111", - "opt4": "1110", - "correct_option": "111", - "correct_option_index": 3 - }, - { - "qsns": "What is the result of subtracting the binary number 1101 from the binary number 1111?", - "opt1": "0010", - "opt2": "0100", - "opt3": "0001", - "opt4": "1110", - "correct_option": "0010", - "correct_option_index": 1 - }, - { - "qsns": "What is the second step in binary subtraction?", - "opt1": "Find the complement of the subtrahend", - "opt2": "Invert all the bits of the subtrahend", - "opt3": "Find the complement of the minuend", - "opt4": "Invert all the bits of the minuend", - "correct_option": "Invert all the bits of the subtrahend", - "correct_option_index": 2 - }, - { - "qsns": "What is the binary equivalent of the decimal value 10?", - "opt1": "1010", - "opt2": "1100", - "opt3": "1110", - "opt4": "1001", - "correct_option": "1010", - "correct_option_index": 1 - }, - { - "qsns": "What is the complement of the binary number 1001?", - "opt1": "0110", - "opt2": "0111", - "opt3": "1010", - "opt4": "1011", - "correct_option": "0110", - "correct_option_index": 1 - }, - { - "qsns": "What is the result of subtracting the binary number 1111 from the binary number 1111?", - "opt1": "1111", - "opt2": "0000", - "opt3": "1110", - "opt4": "0001", - "correct_option": "0000", - "correct_option_index": 2 - }, - { - "qsns": "What is the third step in binary subtraction?", - "opt1": "Add the complement to the minuend using binary subtraction", - "opt2": "Add the complement to the minuend using binary addition", - "opt3": "Subtract the complement from the minuend using binary subtraction", - "opt4": "Subtract the complement from the minuend using binary addition", - "correct_option": "Add the complement to the minuend using binary addition", - "correct_option_index": 2 - }, - { - "qsns": "What is the binary equivalent of the decimal value 13?", - "opt1": "1011", - "opt2": "1101", - "opt3": "1110", - "opt4": "1001", - "correct_option": "1101", - "correct_option_index": 2 - }, - { - "qsns": "What is the difference between unsigned and signed binary numbers?", - "opt1": "Unsigned binary numbers have a signed bit while signed binary numbers do not.", - "opt2": "Unsigned binary numbers can represent only positive numbers while signed binary numbers can represent both positive and negative numbers.", - "opt3": "Unsigned binary numbers use a different base than signed binary numbers.", - "opt4": "There is no difference between unsigned and signed binary numbers.", - "correct_option": "Unsigned binary numbers can represent only positive numbers while signed binary numbers can represent both positive and negative numbers.", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following is the most significant bit in an 8-bit signed binary number?", - "opt1": "Bit 0", - "opt2": "Bit 1", - "opt3": "Bit 7", - "opt4": "There is no most significant bit", - "correct_option": "Bit 7", - "correct_option_index": 3 - }, - { - "qsns": "What is the range of 8-bit signed binary numbers?", - "opt1": "0 to 255", - "opt2": "-128 to 127", - "opt3": "-127 to 127", - "opt4": "0 to 127", - "correct_option": "-128 to 127", - "correct_option_index": 2 - }, - { - "qsns": "What is the range of unsigned 8-bit binary numbers?", - "opt1": "0 to 127", - "opt2": "-128 to 127", - "opt3": "-127 to 127", - "opt4": "0 to 255", - "correct_option": "0 to 255", - "correct_option_index": 4 - }, - { - "qsns": "Which of the following operations can be performed on signed binary numbers but not on unsigned binary numbers?", - "opt1": "Addition", - "opt2": "Subtraction", - "opt3": "Multiplication", - "opt4": "Division", - "correct_option": "Subtraction", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following operations can be performed on unsigned binary numbers?", - "opt1": "Only addition", - "opt2": "Addition and subtraction", - "opt3": "Multiplication and division", - "opt4": "Only subtraction", - "correct_option": "Addition and subtraction", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following is the correct representation of the unsigned binary number 1011 in decimal?", - "opt1": "10", - "opt2": "11", - "opt3": "12", - "opt4": "9", - "correct_option": "11", - "correct_option_index": 2 - }, - { - "qsns": "What is the range of unsigned 8-bit binary numbers?", - "opt1": "-128 to 127", - "opt2": "0 to 256", - "opt3": "0 to 127", - "opt4": "0 to 128", - "correct_option": "0 to 255", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following is the correct representation of the signed binary number 11111111 in decimal using two's complement?", - "opt1": "-127", - "opt2": "-128", - "opt3": "127", - "opt4": "-1", - "correct_option": "-1", - "correct_option_index": 4 - }, - { - "qsns": "What is the range of signed 8-bit binary numbers using two's complement?", - "opt1": "-127 to 128", - "opt2": "-128 to 127", - "opt3": "-256 to 255", - "opt4": "-255 to 256", - "correct_option": "-128 to 127", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following operations can be performed on signed binary numbers using two's complement?", - "opt1": "Only addition", - "opt2": "Addition and subtraction", - "opt3": "Multiplication and division", - "opt4": "Only subtraction", - "correct_option": "Addition and subtraction", - "correct_option_index": 2 - }, - { - "qsns": "What is the result of adding the signed binary numbers 0111 and 1010 using two's complement?", - "opt1": "0001", - "opt2": "1101", - "opt3": "1111", - "opt4": "1001", - "correct_option": "0001", - "correct_option_index": 1 - }, - { - "qsns": "What is the result of subtracting the signed binary numbers 1010 and 0111 using two's complement?", - "opt1": "0001", - "opt2": "1101", - "opt3": "1001", - "opt4": "1111", - "correct_option": "0011", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following is the correct representation of the signed binary number 11111000 in decimal using two's complement?", - "opt1": "-8", - "opt2": "-24", - "opt3": "8", - "opt4": "24", - "correct_option": "-8", - "correct_option_index": 1 - }, - { - "qsns": "What is the complement of the binary number 1010?", - "opt1": "0100", - "opt2": "0010", - "opt3": "1001", - "opt4": "0110", - "correct_option": "0101", - "correct_option_index": 2 - }, - { - "qsns": "What is the result of adding the signed binary numbers 0110 and 1011?", - "opt1": "1101", - "opt2": "1001", - "opt3": "0001", - "opt4": "0010", - "correct_option": "0001", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following is the two's complement of the binary number 1101?", - "opt1": "0010", - "opt2": "0011", - "opt3": "0101", - "opt4": "0110", - "correct_option": "0011", - "correct_option_index": 2 - }, - { - "qsns": "What is the result of multiplying the unsigned binary numbers 1010 and 0011?", - "opt1": "0010", - "opt2": "0110", - "opt3": "1110", - "opt4": "1011", - "correct_option": "11110", - "correct_option_index": 2 - }, - { - "qsns": "What is the result of subtracting the signed binary number 0101 from the signed binary number 1010?", - "opt1": "1101", - "opt2": "1001", - "opt3": "0101", - "opt4": "0011", - "correct_option": "0101", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following is the sign bit in an 8-bit signed binary number?", - "opt1": "Bit 0", - "opt2": "Bit 1", - "opt3": "Bit 7", - "opt4": "There is no sign bit", - "correct_option": "Bit 7", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following describes an asynchronous counter?", - "opt1": "A counter that uses external clock pulses to advance its count", - "opt2": "A counter that uses feedback to generate its own clock pulses", - "opt3": "A counter that counts in parallel", - "opt4": "A counter that counts in series", - "correct_option": "A counter that uses external clock pulses to advance its count", - "correct_option_index": 1 - }, - { - "qsns": "Which type of asynchronous counter is also known as a ripple counter?", - "opt1": "Synchronous counter", - "opt2": "Binary counter", - "opt3": "Johnson counter", - "opt4": "Modulus counter", - "correct_option": "Binary counter", - "correct_option_index": 2 - }, - { - "qsns": "How many flip-flops are needed to implement a 3-bit asynchronous counter?", - "opt1": "2", - "opt2": "3", - "opt3": "4", - "opt4": "5", - "correct_option": "3", - "correct_option_index": 2 - }, - { - "qsns": "What is the maximum number of states a 4-bit asynchronous counter can have?", - "opt1": "4", - "opt2": "8", - "opt3": "12", - "opt4": "16", - "correct_option": "16", - "correct_option_index": 4 - }, - { - "qsns": "In an asynchronous counter, which flip-flop receives the external clock signal?", - "opt1": "The first flip-flop", - "opt2": "The last flip-flop", - "opt3": "All flip-flops receive the external clock signal", - "opt4": "None of the flip-flops receive the external clock signal", - "correct_option": "The first flip-flop", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following is an advantage of asynchronous counters over synchronous counters?", - "opt1": "Asynchronous counters are faster", - "opt2": "Asynchronous counters are more reliable", - "opt3": "Asynchronous counters require fewer components", - "opt4": "Asynchronous counters are easier to design", - "correct_option": "Asynchronous counters require fewer components", - "correct_option_index": 3 - }, - { - "qsns": "In a 3-bit asynchronous counter, what is the maximum count sequence that can be generated?", - "opt1": "0,1,2,3,4,5,6,7", - "opt2": "0,1,2,3,2,1,0", - "opt3": "0,1,2, 1.0, 1.2,1.D", - "opt4": "0, 1, 0, 1 0, 1, 0, 1", - "correct_option": "0,1,2,3,4,5,6,7", - "correct_option_index": 1 - }, - { - "qsns": "Which type of asynchronous counter uses a series of D flip-flops?", - "opt1": "Binary counter", - "opt2": "Ripple counter", - "opt3": "Johnson counter", - "opt4": "Modulus counter", - "correct_option": "Johnson counter", - "correct_option_index": 3 - }, - { - "qsns": "In a Johnson counter, how many states are there for n flip-flops?", - "opt1": "2n", - "opt2": "n", - "opt3": "n/2", - "opt4": "2^n-1", - "correct_option": "2n", - "correct_option_index": 1 - }, - { - "qsns": "What is the main disadvantage of asynchronous counters?", - "opt1": "They are slower than synchronous counters", - "opt2": "They suffer from glitches in the output waveform", - "opt3": "They are more complex to design than synchronous counters", - "opt4": "They are not suitable for use in digital circuits", - "correct_option": "They are slower than synchronous counters", - "correct_option_index": 1 - }, - { - "qsns": "What is an asynchronous counter?", - "opt1": "A counter that uses asynchronous clock", - "opt2": "A counter that uses synchronous clock pulses", - "opt3": "A counter that uses both synchronous and asynchronous clock pulses", - "opt4": "A counter that does not use clock pulses", - "correct_option": "A counter that uses asynchronous clock", - "correct_option_index": 1 - }, - { - "qsns": "What is the basic building block of an asynchronous counter?", - "opt1": "Flip-flop", - "opt2": "Encoder", - "opt3": "Decoder", - "opt4": "Multiplexer", - "correct_option": "Flip-flop", - "correct_option_index": 1 - }, - { - "qsns": "How many flip-flops are required for a 3-bit asynchronous counter?", - "opt1": "1", - "opt2": "2", - "opt3": "3", - "opt4": "4", - "correct_option": "3", - "correct_option_index": 3 - }, - { - "qsns": "Which type of flip-flop is used in an asynchronous counter?", - "opt1": "D flip-flop", - "opt2": "T flip-flop", - "opt3": "JK flip-flop", - "opt4": "All of the above", - "correct_option": "All of the above", - "correct_option_index": 4 - }, - { - "qsns": "What is the maximum count for a 4-bit asynchronous counter?", - "opt1": "8", - "opt2": "16", - "opt3": "32", - "opt4": "64", - "correct_option": "16", - "correct_option_index": 2 - }, - { - "qsns": "What is the advantage of using an asynchronous counter over a synchronous counter?", - "opt1": "Higher speed", - "opt2": "Lower power consumption", - "opt3": "Lower cost", - "opt4": "Simpler design", - "correct_option": "Simpler design", - "correct_option_index": 4 - }, - { - "qsns": "In an asynchronous counter, what is the function of the enable input?", - "opt1": "To start the counting process", - "opt2": "To stop the counting process", - "opt3": "To reset the counter", - "opt4": "To enable or disable the counting process", - "correct_option": "To enable or disable the counting process", - "correct_option_index": 4 - }, - { - "qsns": "What is the propagation delay of an asynchronous counter?", - "opt1": "The time it takes for the counter to start counting", - "opt2": "The time it takes for the counter to stop counting", - "opt3": "The time it takes for the output of one flip-flop to propagate to the input of the next flip-flop", - "opt4": "The time it takes for the clock pulse to propagate through the counter", - "correct_option": "The time it takes for the output of one flip-flop to propagate to the input of the next flip-flop", - "correct_option_index": 3 - }, - { - "qsns": "What is the drawback of using an asynchronous counter?", - "opt1": "Higher power consumption", - "opt2": "Higher cost", - "opt3": "Limited speed", - "opt4": "Limited scalability", - "correct_option": "Limited speed", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following is an example of an application that requires an asynchronous counter?", - "opt1": "Digital clock", - "opt2": "Traffic light controller", - "opt3": "Computer processor", - "opt4": "Wireless router", - "correct_option": "Digital clock", - "correct_option_index": 1 - }, - { - "qsns": "What is a synchronous counter?", - "opt1": "A counter that uses synchronous clock pulses", - "opt2": "A counter that uses asynchronous clock pulses", - "opt3": "A counter that uses both synchronous and asynchronous clock pulses", - "opt4": "A counter that does not use clock pulses", - "correct_option": "A counter that uses synchronous clock pulses", - "correct_option_index": 1 - }, - { - "qsns": "What is the basic building block of a synchronous counter?", - "opt1": "Flip-flop", - "opt2": "Encoder", - "opt3": "Decoder", - "opt4": "Multiplexer", - "correct_option": "Flip-flop", - "correct_option_index": 1 - }, - { - "qsns": "How many flip-flops are required for a 4-bit synchronous counter?", - "opt1": "1", - "opt2": "2", - "opt3": "3", - "opt4": "4", - "correct_option": "4", - "correct_option_index": 4 - }, - { - "qsns": "Which type of flip-flop is used in a synchronous counter?", - "opt1": "D flip-flop", - "opt2": "T flip-flop", - "opt3": "JK flip-flop", - "opt4": "All of the above", - "correct_option": "All of the above", - "correct_option_index": 4 - }, - { - "qsns": "What is the maximum count for a 3-bit synchronous counter?", - "opt1": "4", - "opt2": "6", - "opt3": "8", - "opt4": "10", - "correct_option": "8", - "correct_option_index": 3 - }, - { - "qsns": "What is the advantage of using a synchronous counter over an asynchronous counter?", - "opt1": "Simpler design", - "opt2": "Lower power consumption", - "opt3": "Lower cost", - "opt4": "Higher speed", - "correct_option": "Higher speed", - "correct_option_index": 4 - }, - { - "qsns": "In a synchronous counter, what is the function of the clock input?", - "opt1": "To start the counting process", - "opt2": "To stop the counting process", - "opt3": "To reset the counter", - "opt4": "To synchronize the counting process", - "correct_option": "To synchronize the counting process", - "correct_option_index": 4 - }, - { - "qsns": "What is the propagation delay of a synchronous counter?", - "opt1": "The time it takes for the counter to start counting", - "opt2": "The time it takes for the counter to stop counting", - "opt3": "The time it takes for the output of one flip-flop to propagate to the input of the next flip-flop", - "opt4": "The time it takes for the clock pulse to propagate through the counter", - "correct_option": "The time it takes for the clock pulse to propagate through the counter", - "correct_option_index": 4 - }, - { - "qsns": "What is the drawback of using a synchronous counter?", - "opt1": "Higher power consumption", - "opt2": "Higher cost", - "opt3": "Limited speed", - "opt4": "Limited scalability", - "correct_option": "Higher power consumption", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following is an example of an application that requires a synchronous counter?", - "opt1": "Digital clock", - "opt2": "Traffic light controller", - "opt3": "Computer processor", - "opt4": "Wireless router", - "correct_option": "Computer processor", - "correct_option_index": 3 - }, - { - "qsns": "What is a microprocessor?", - "opt1": "A computer memory device", - "opt2": "A device that performs arithmetic and logical operations", - "opt3": "A device that stores data", - "opt4": "A device that displays data", - "correct_option": "A device that performs arithmetic and logical operations", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following is not a component of the internal architecture of a microprocessor?", - "opt1": "Arithmetic and Logic Unit (ALU)", - "opt2": "Control Unit (CU)", - "opt3": "Memory Unit", - "opt4": "Input/Output Unit (IOU)", - "correct_option": "Input/Output Unit (IOU)", - "correct_option_index": 4 - }, - { - "qsns": "What is the function of the Control Unit (CU) in a microprocessor?", - "opt1": "It performs arithmetic and logical operations", - "opt2": "It stores data", - "opt3": "It controls the flow of data within the microprocessor", - "opt4": "It interfaces with input/output devices", - "correct_option": "It controls the flow of data within the microprocessor", - "correct_option_index": 3 - }, - { - "qsns": "What is the function of the Arithmetic and Logic Unit (ALU) in a microprocessor?", - "opt1": "It controls the flow of data within the microprocessor", - "opt2": "It performs arithmetic and logical operations", - "opt3": "It stores data", - "opt4": "It interfaces with Input/output devices", - "correct_option": "It performs arithmetic and logical operations", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following is not a feature of a microprocessor?", - "opt1": "Interrupt handling capability", - "opt2": "Pipelining", - "opt3": "Cache memory", - "opt4": "Secondary storage", - "correct_option": "Secondary storage", - "correct_option_index": 4 - }, - { - "qsns": "What is pipelining in a microprocessor?", - "opt1": "The process of dividing instructions into smaller parts", - "opt2": "The process of executing multiple instructions simultaneously", - "opt3": "The process of storing frequently accessed data", - "opt4": "The process of handling interrupts", - "correct_option": "The process of executing multiple instructions simultaneously", - "correct_option_index": 2 - }, - { - "qsns": "What is the function of the Memory Management Unit (MMU) in a microprocessor?", - "opt1": "It performs arithmetic and logical operations", - "opt2": "It stores data", - "opt3": "It manages the memory resources of the system", - "opt4": "It interfaces with input/output devices", - "correct_option": "It manages the memory resources of the system", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following is an example of an instruction set architecture (ISA)?", - "opt1": "HTML", - "opt2": "x86", - "opt3": "Java", - "opt4": "Python", - "correct_option": "x86", - "correct_option_index": 2 - }, - { - "qsns": "What is cache memory in a microprocessor?", - "opt1": "A type of secondary storage", - "opt2": "A type of RAM", - "opt3": "A type of memory that stores frequently accessed data", - "opt4": "A type of input/output device", - "correct_option": "A type of memory that stores frequently accessed data", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following is a type of bus in a microprocessor?", - "opt1": "Address bus", - "opt2": "Data bus", - "opt3": "Control bus", - "opt4": "All of the above", - "correct_option": "All of the above", - "correct_option_index": 4 - }, - { - "qsns": "What is the function of the ALU in a microprocessor?", - "opt1": "To execute instructions", - "opt2": "To store data", - "opt3": "To perform arithmetic and logical operations", - "opt4": "To communicate with external devices", - "correct_option": "To perform arithmetic and logical operations", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following is NOT a register in a microprocessor?", - "opt1": "Program Counter", - "opt2": "Instruction Register", - "opt3": "Data Memory Register", - "opt4": "Input Output Register", - "correct_option": "Input Output Register", - "correct_option_index": 4 - }, - { - "qsns": "What is the function of the Program Counter in a microprocessor?", - "opt1": "To store data", - "opt2": "To execute instructions", - "opt3": "To perform arithmetic and logical operations", - "opt4": "To store the address of the next instruction to be executed", - "correct_option": "To store the address of the next instruction to be executed", - "correct_option_index": 4 - }, - { - "qsns": "Which bus is used to transfer data between the CPU and memory in a microprocessor?", - "opt1": "Address bus", - "opt2": "Data bus", - "opt3": "Control bus", - "opt4": "All of the above", - "correct_option": "Data bus", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following is NOT a component of the Control Unit in a microprocessor?", - "opt1": "Instruction Decoder", - "opt2": "Clock Generator", - "opt3": "Address Register", - "opt4": "Control Logic", - "correct_option": "Address Register", - "correct_option_index": 3 - }, - { - "qsns": "What is the function of the Instruction Register in a microprocessor?", - "opt1": "To store data", - "opt2": "To execute instructions", - "opt3": "To perform arithmetic and logical operations", - "opt4": "To store the current instruction being executed", - "correct_option": "To store the current instruction being executed", - "correct_option_index": 4 - }, - { - "qsns": "What is the purpose of the Interrupt Controller in a microprocessor?", - "opt1": "To generate interrupts", - "opt2": "To handle interrupts", - "opt3": "To store interrupt vectors", - "opt4": "To communicate with external devices", - "correct_option": "To handle interrupts", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following is NOT a feature of a microprocessor?", - "opt1": "Multitasking", - "opt2": "Multiprocessing", - "opt3": "Multithreading", - "opt4": "Multiuser", - "correct_option": "Multiuser", - "correct_option_index": 4 - }, - { - "qsns": "Which of the following components is responsible for fetching instructions from memory in a microprocessor?", - "opt1": "Control Unit", - "opt2": "ALU", - "opt3": "Interrupt Controller", - "opt4": "Input/Output Controller", - "correct_option": "Control Unit", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following is an example of a microprocessor?", - "opt1": "Intel Core i7", - "opt2": "Nvidia GeForce RTX 3080", - "opt3": "Raspberry Pi 4", - "opt4": "Apple M1", - "correct_option": "Intel Core i7", - "correct_option_index": 1 - }, - { - "qsns": "What is Assembly Language?", - "opt1": "A high-level programming language", - "opt2": "A low-level programming language", - "opt3": "An interpreted programming language", - "opt4": "An object-oriented programming language", - "correct_option": "A low-level programming language", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following is NOT a basic data type in Assembly Language?", - "opt1": "Integer", - "opt2": "Floating-point", - "opt3": "Character", - "opt4": "Boolean", - "correct_option": "Boolean", - "correct_option_index": 4 - }, - { - "qsns": "Which of the following is the correct syntax to define a variable in Assembly Language?", - "opt1": "VAR name, data type, value", - "opt2": "name data type value", - "opt3": "data type name value", - "opt4": "NAME VAR data type, value", - "correct_option": "name data type value", - "correct_option_index": 2 - }, - { - "qsns": "What is the function of the Assembler in Assembly Language Programming?", - "opt1": "To execute Assembly Language code", - "opt2": "To translate Assembly Language code into machine code", - "opt3": "To debug Assembly Language code", - "opt4": "To optimize Assembly Language code", - "correct_option": "To translate Assembly Language code into machine code", - "correct_option_index": 2 - }, - { - "qsns": "Which register is used to store the memory address in Assembly Language Programming?", - "opt1": "AX", - "opt2": "BX", - "opt3": "CX", - "opt4": "IP", - "correct_option": "BX", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following is NOT a branch instruction in Assembly Language Programming?", - "opt1": "JMP", - "opt2": "JZ", - "opt3": "JNZ", - "opt4": "MOV", - "correct_option": "MOV", - "correct_option_index": 4 - }, - { - "qsns": "What is the function of the RET instruction in Assembly Language Programming?", - "opt1": "To return a value from a function", - "opt2": "To jump to a memory address", - "opt3": "To store a value in a register", - "opt4": "To return from a subroutine", - "correct_option": "To return from a subroutine", - "correct_option_index": 4 - }, - { - "qsns": "Which of the following is the correct syntax for the ADD instruction in Assembly Language Programming?", - "opt1": "ADD source, destination", - "opt2": "ADD destination, source", - "opt3": "ADD source", - "opt4": "ADD destination", - "correct_option": "ADD destination, source", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following is an example of an addressing mode in Assembly Language Programming?", - "opt1": "Immediate", - "opt2": "Direct", - "opt3": "Indirect", - "opt4": "All of the above", - "correct_option": "All of the above", - "correct_option_index": 4 - }, - { - "qsns": "What is the purpose of the INT instruction in Assembly Language Programming?", - "opt1": "To perform an arithmetic operation", - "opt2": "To compare two values", - "opt3": "To generate a software interrupt", - "opt4": "To move data between registers", - "correct_option": "To generate a software interrupt", - "correct_option_index": 3 - }, - { - "qsns": "What is Assembly Language Programming?", - "opt1": "A high-level programming language", - "opt2": "A low-level programming language", - "opt3": "A scripting language", - "opt4": "A markup language", - "correct_option": "A low-level programming language", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following is NOT a common Assembly Language instruction?", - "opt1": "MOV", - "opt2": "ADD", - "opt3": "PRINT", - "opt4": "JUMP", - "correct_option": "PRINT", - "correct_option_index": 3 - }, - { - "qsns": "Which instruction is used to move data from a register to memory in Assembly Language Programming?", - "opt1": "MOV", - "opt2": "ADD", - "opt3": "JMP", - "opt4": "PUSH", - "correct_option": "MOV", - "correct_option_index": 1 - }, - { - "qsns": "Which instruction is used to perform addition in Assembly Language Programming?", - "opt1": "MOV", - "opt2": "ADD", - "opt3": "JMP", - "opt4": "PUSH", - "correct_option": "ADD", - "correct_option_index": 2 - }, - { - "qsns": "Which instruction is used to jump to a specific memory location in Assembly Language Programming?", - "opt1": "MOV", - "opt2": "ADD", - "opt3": "JMP", - "opt4": "PUSH", - "correct_option": "JMP", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following is NOT a register in Assembly Language Programming?", - "opt1": "A", - "opt2": "B", - "opt3": "C", - "opt4": "D", - "correct_option": "D", - "correct_option_index": 4 - }, - { - "qsns": "Which instruction is used to compare two values in Assembly Language Programming?", - "opt1": "CMP", - "opt2": "ADD", - "opt3": "JMP", - "opt4": "PUSH", - "correct_option": "CMP", - "correct_option_index": 1 - }, - { - "qsns": "Which instruction is used to perform multiplication in Assembly Language Programming?", - "opt1": "MUL", - "opt2": "ADD", - "opt3": "JMP", - "opt4": "POP", - "correct_option": "MUL", - "correct_option_index": 1 - }, - { - "qsns": "Which instruction is used to move data from memory to a register in Assembly Language Programming?", - "opt1": "MOV", - "opt2": "ADD", - "opt3": "JMP", - "opt4": "PUSH", - "correct_option": "MOV", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following is NOT a common Assembly Language Directive?", - "opt1": "DB", - "opt2": "DW", - "opt3": "DS", - "opt4": "INPUT", - "correct_option": "INPUT", - "correct_option_index": 4 - }, - { - "qsns": "Which type of memory is used for long-term storage of data and programs even when the power is turned off?", - "opt1": "Primary Memory", - "opt2": "Secondary Memory", - "opt3": "Cache Memory", - "opt4": "Virtual Memory", - "correct_option": "Secondary Memory", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following is a type of non-volatile memory?", - "opt1": "Dynamic RAM (DRAM)", - "opt2": "Static RAM (SRAM)", - "opt3": "Flash Memory", - "opt4": "Synchronous DRAM (SDRAM)", - "correct_option": "Flash Memory", - "correct_option_index": 3 - }, - { - "qsns": "Which type of memory is used as an extension of primary memory when there is not enough space to store all the necessary programs and data?", - "opt1": "Primary Memory", - "opt2": "Secondary Memory", - "opt3": "Cache Memory", - "opt4": "Virtual Memory", - "correct_option": "Virtual Memory", - "correct_option_index": 4 - }, - { - "qsns": "Which type of memory has the fastest access time and is located closest to the CPU in the memory hierarchy?", - "opt1": "Primary Memory", - "opt2": "Secondary Memory", - "opt3": "Cache Memory", - "opt4": "Virtual Memory", - "correct_option": "Cache Memory", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following is a type of Double Data Rate (DDR) synchronous dynamic RAM (SDRAM)?", - "opt1": "DDR2 SDRAM", - "opt2": "DDR3 SDRAM", - "opt3": "DDR5 SDRAM", - "opt4": "All of the above", - "correct_option": "All of the above", - "correct_option_index": 4 - }, - { - "qsns": "What is the main difference between primary and secondary memory?", - "opt1": "Primary memory is faster than secondary memory", - "opt2": "Secondary memory is faster than primary memory", - "opt3": "Primary memory is volatile while secondary memory is non-volatile", - "opt4": "Secondary memory is volatile while primary memory is non-volatile", - "correct_option": "Primary memory is volatile while secondary memory is non-volatile", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following is NOT a type of primary memory?", - "opt1": "ROM", - "opt2": "RAM", - "opt3": "Cache", - "opt4": "Hard Disk Drive", - "correct_option": "Hard Disk Drive", - "correct_option_index": 4 - }, - { - "qsns": "Which of the following is NOT a type of secondary memory?", - "opt1": "Hard Disk Drive", - "opt2": "Solid State Drive", - "opt3": "USB Drive", - "opt4": "CPU Cache", - "correct_option": "CPU Cache", - "correct_option_index": 4 - }, - { - "qsns": "Which memory device has the fastest access time in a microprocessor system?", - "opt1": "RAM", - "opt2": "ROM", - "opt3": "Cache", - "opt4": "Hard Disk Drive", - "correct_option": "Cache", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following is NOT a characteristic of volatile memory?", - "opt1": "It is faster than non-volatile memory", - "opt2": "It requires constant power to retain data", - "opt3": "It is used for long-term storage", - "opt4": "It is typically smaller in capacity than non-volatile memory", - "correct_option": "It is used for long-term storage", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following is NOT a characteristic of non-volatile memory?", - "opt1": "It retains data even when power is removed", - "opt2": "It is typically used for long-term storage", - "opt3": "It is slower than volatile memory", - "opt4": "It is larger in capacity than volatile memory", - "correct_option": "It is larger in capacity than volatile memory", - "correct_option_index": 4 - }, - { - "qsns": "Which of the following is NOT a level of cache in a microprocessor system?", - "opt1": "L1", - "opt2": "L2", - "opt3": "L3", - "opt4": "L4", - "correct_option": "L4", - "correct_option_index": 4 - }, - { - "qsns": "Which of the following is NOT a type of ROM?", - "opt1": "PROM", - "opt2": "EPROM", - "opt3": "EEPROM", - "opt4": "DRAM", - "correct_option": "DRAM", - "correct_option_index": 4 - }, - { - "qsns": "What is an interrupt service routine (ISR) in a microprocessor?", - "opt1": "A software routine that responds to a specific interrupt", - "opt2": "A hardware circuit that triggers an interrupt", - "opt3": "A type of memory used for storing interrupt data", - "opt4": "A type of instruction that modifies the contents of a register", - "correct_option": "A software routine that responds to a specific interrupt", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following statements is true about the execution of an ISR?", - "opt1": "It always starts from the beginning of the program", - "opt2": "It always resumes from the point where the interrupted program left off", - "opt3": "It may start from the beginning or resume from the point where the interrupted program left off, depending on microprocessor architecture", - "opt4": "It never resumes from the point where the interrupted program left off", - "correct_option": "It may start from the beginning or resume from the point where the interrupted program left off, depending on microprocessor architecture", - "correct_option_index": 3 - }, - { - "qsns": "What is the purpose of saving the context of the interrupted program in an ISR?", - "opt1": "To allow the ISR to modify the state of the interrupted program", - "opt2": "To resume execution of the interrupted program after the ISR is finished", - "opt3": "To allow the ISR to save data for future use", - "opt4": "To allow the ISR to execute faster", - "correct_option": "To resume execution of the interrupted program after the ISR is finished", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following statements is true about the priority of an ISR?", - "opt1": "The highest priority ISR is always executed first", - "opt2": "ISRs are executed in the order they are received", - "opt3": "The lowest priority ISR is always executed first", - "opt4": "ISRs are executed in the order of their priority", - "correct_option": "The highest priority ISR is always executed first", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following statements is true about re-entrant ISRs?", - "opt1": "They cannot be interrupted by other ISRs", - "opt2": "They can be interrupted by other ISRs", - "opt3": "They can only be called by other ISRs", - "opt4": "They can only be called by the main program", - "correct_option": "They can be interrupted by other ISRs", - "correct_option_index": 2 - }, - { - "qsns": "What is the purpose of an exit routine in an ISR?", - "opt1": "To terminate the ISR", - "opt2": "To clear the interrupt flag", - "opt3": "To restore the context of the interrupted program", - "opt4": "To store data for future use", - "correct_option": "To restore the context of the interrupted program", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following statements is true about nested ISRs?", - "opt1": "They cannot occur in a microprocessor", - "opt2": "They occur when an ISR is triggered while another ISR is being serviced", - "opt3": "They occur when two ISRs are triggered simultaneously", - "opt4": "They occur when an ISR takes longer than expected to execute", - "correct_option": "They occur when an ISR is triggered while another ISR is being serviced", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following statements is true about the use of global variables in ISRs?", - "opt1": "Global variables should not be used in ISRs", - "opt2": "Global variables are safe to use in ISRs", - "opt3": "Global variables should only be used in re-entrant ISRs", - "opt4": "Global variables should only be used in high-priority ISRs", - "correct_option": "Global variables should not be used in ISRs", - "correct_option_index": 1 - }, - { - "qsns": "What is the purpose of a spinlock in an ISR?", - "opt1": "To prevent other ISRs from executing while the current ISR is running", - "opt2": "To allow other ISRs to execute while the current ISR is running", - "opt3": "To synchronize access to shared resources", - "opt4": "To optimize the performance of the ISR", - "correct_option": "To synchronize access to shared resources", - "correct_option_index": 3 - }, - { - "qsns": "What is an interrupt service routine (ISR)?", - "opt1": "A program that triggers an interrupt", - "opt2": "A program that executes when an interrupt is triggered", - "opt3": "A program that disables interrupts", - "opt4": "A program that clears interrupt flags", - "correct_option": "A program that executes when an interrupt is triggered", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following is not a common task performed by an ISR?", - "opt1": "Reading data from an I/O device", - "opt2": "Updating the interrupt enable flag", - "opt3": "Saving and restoring the processor state", - "opt4": "Clearing the interrupt flag", - "correct_option": "Updating the interrupt enable flag", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following statements is true about the stack in an ISR?", - "opt1": "The stack is not used in an ISR", - "opt2": "The stack is used to store data received from an I/O device", - "opt3": "The stack is used to store the return address and processor state", - "opt4": "The stack is used to store data that will be written to memory", - "correct_option": "The stack is used to store the return address and processor state", - "correct_option_index": 3 - }, - { - "qsns": "What is the purpose of the return from interrupt (RTI) instruction?", - "opt1": "To return control to the ISR after an interrupt", - "opt2": "To return control to the main program after an interrupt", - "opt3": "To clear the interrupt flag", - "opt4": "To save the processor state and interrupt enable flag", - "correct_option": "To return control to the main program after an interrupt", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following is an example of a non-maskable interrupt (NMI)?", - "opt1": "Keyboard interrupt", - "opt2": "Timer interrupt", - "opt3": "Power failure interrupt", - "opt4": "DMA interrupt", - "correct_option": "Power failure interrupt", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following statements is true about nested interrupts?", - "opt1": "They are not allowed in most microprocessors", - "opt2": "They occur when an ISR triggers another interrupt", - "opt3": "They occur when multiple interrupts are triggered simultaneously", - "opt4": "They occur when an ISR takes too long to execute", - "correct_option": "They occur when an ISR triggers another interrupt", - "correct_option_index": 2 - }, - { - "qsns": "What is the purpose of the interrupt enable flag in an ISR?", - "opt1": "To indicate that an interrupt has occurred", - "opt2": "To enable or disable interrupts", - "opt3": "To store the address of an ISR", - "opt4": "To clear the interrupt flag", - "correct_option": "To enable or disable interrupts", - "correct_option_index": 2 - }, - { - "qsns": "What is interrupt processing in a microprocessor?", - "opt1": "The process of interrupting a running program", - "opt2": "The process of handling an interrupt request from an external device", - "opt3": "The process of prioritizing interrupts", - "opt4": "The process of executing the interrupt service routine", - "correct_option": "The process of handling an interrupt request from an external device", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following is a common method of handling multiple interrupts in a microprocessor?", - "opt1": "Polling", - "opt2": "Queuing", - "opt3": "Sorting", - "opt4": "Multiplexing", - "correct_option": "Polling", - "correct_option_index": 1 - }, - { - "qsns": "What is the purpose of an interrupt vector in a microprocessor?", - "opt1": "To store the interrupt priority levels", - "opt2": "To store the addresses of the interrupt service routines", - "opt3": "To store the status of the interrupt flag", - "opt4": "To store the current program counter", - "correct_option": "To store the addresses of the interrupt service routines", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following statements is true about the interrupt priority levels in a microprocessor?", - "opt1": "Lower priority levels have higher priority", - "opt2": "Higher priority levels have higher priority", - "opt3": "The priority levels are not important in interrupt processing", - "opt4": "The priority levels are determined by the external devices", - "correct_option": "Higher priority levels have higher priority", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following is a disadvantage of using the polling method for interrupt processing?", - "opt1": "It is slower than other methods", - "opt2": "It requires more hardware resources", - "opt3": "It may cause a delay in responding to interrupts", - "opt4": "It may cause errors in the interrupt processing", - "correct_option": "It may cause a delay in responding to interrupts", - "correct_option_index": 3 - }, - { - "qsns": "What is the purpose of the interrupt enable bit in a microprocessor?", - "opt1": "To enable the interrupt processing", - "opt2": "To disable the interrupt processing", - "opt3": "To enable the interrupt request from external devices", - "opt4": "To disable the interrupt request from external devices", - "correct_option": "To enable the interrupt processing", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following is an advantage of using the interrupt method for interrupt processing?", - "opt1": "It requires less hardware resources", - "opt2": "It is faster than other methods", - "opt3": "It does not cause a delay in responding to interrupts", - "opt4": "It does not require interrupt vectors", - "correct_option": "It does not cause a delay in responding to interrupts", - "correct_option_index": 3 - }, - { - "qsns": "What is interrupt processing in a microprocessor?", - "opt1": "The process of generating interrupts", - "opt2": "The process of handling interrupts", - "opt3": "The process of disabling interrupts", - "opt4": "The process of prioritizing interrupts", - "correct_option": "The process of handling interrupts", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following statements is true about interrupt processing time?", - "opt1": "It is always shorter than the interrupt response time", - "opt2": "It is always longer than the interrupt response time", - "opt3": "It is equal to the interrupt response time", - "opt4": "It depends on the complexity of the interrupt handling routine", - "correct_option": "It depends on the complexity of the interrupt handling routine", - "correct_option_index": 4 - }, - { - "qsns": "What is the purpose of an interrupt vector table?", - "opt1": "To store the priority of each interrupt", - "opt2": "To store the memory location of the interrupt service routine (ISR) for each interrupt", - "opt3": "To store the interrupt mask for each interrupt", - "opt4": "To store the status of each interrupt", - "correct_option": "To store the memory location of the interrupt service routine (ISR) for each interrupt", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following statements is true about interrupt latency?", - "opt1": "It is the time between the occurrence of an interrupt and the start of the ISR", - "opt2": "It is the time between the start of the ISR and the end of the ISR", - "opt3": "It is the time between the end of the ISR and the resumption of the interrupted program", - "opt4": "It is the time between the occurrence of an interrupt and the resumption of the interrupted program", - "correct_option": "It is the time between the occurrence of an interrupt and the start of the ISR", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following statements is true about interrupt nesting?", - "opt1": "It is the process of triggering multiple interrupts simultaneously", - "opt2": "It is the process of handling interrupts in the order they are received", - "opt3": "It is the process of disabling interrupts while an ISR is being executed", - "opt4": "It is the process of handling an interrupt while another ISR is being executed", - "correct_option": "It is the process of handling an interrupt while another ISR is being executed", - "correct_option_index": 4 - }, - { - "qsns": "What is the purpose of an interrupt mask in a microprocessor?", - "opt1": "To enable or disable interrupts", - "opt2": "To prioritize interrupts", - "opt3": "To store the status of interrupts", - "opt4": "To store the memory location of ISRs", - "correct_option": "To enable or disable interrupts", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following statements is true about interrupt handling in a multitasking environment?", - "opt1": "Interrupts should be enabled while a task is executing", - "opt2": "Interrupts should be disabled while a task is executing", - "opt3": "Interrupts should be ignored in a multitasking environment", - "opt4": "Interrupts should be prioritized based on the task being executed", - "correct_option": "Interrupts should be enabled while a task is executing", - "correct_option_index": 1 - }, - { - "qsns": "What is the purpose of an interrupt acknowledgment signal?", - "opt1": "To enable or disable an interrupt", - "opt2": "To acknowledge the occurrence of an interrupt", - "opt3": "To trigger an interrupt", - "opt4": "To prioritize interrupts", - "correct_option": "To acknowledge the occurrence of an interrupt", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following statements is true about edge-triggered interrupts?", - "opt1": "They are triggered by the presence of a signal for a specified period of time", - "opt2": "They are triggered by the rising or falling edge of a signal", - "opt3": "They are triggered by the amplitude of a signal", - "opt4": "They are triggered by the frequency of a signal", - "correct_option": "They are triggered by the rising or falling edge of a signal", - "correct_option_index": 2 - }, - { - "qsns": "What is the purpose of an interrupt request (IRQ) line in a microprocessor?", - "opt1": "To trigger an interrupt", - "opt2": "To acknowledge an interrupt", - "opt3": "To prioritize interrupts", - "opt4": "To enable or disable interrupts", - "correct_option": "To trigger an interrupt", - "correct_option_index": 1 - }, - { - "qsns": "What is the purpose of the interrupt acknowledge signal in a microprocessor?", - "opt1": "To request an interrupt from an external device", - "opt2": "To acknowledge receipt of an interrupt request from an external device", - "opt3": "To enable the interrupt processing", - "opt4": "To disable the interrupt processing", - "correct_option": "To acknowledge receipt of an interrupt request from an external device", - "correct_option_index": 2 - }, - { - "qsns": "What is an interrupt vector table in a microprocessor?", - "opt1": "A table that stores the priority of each interrupt", - "opt2": "A table that stores the address of each ISR", - "opt3": "A table that stores the context of the interrupted program", - "opt4": "A table that stores the status of each interrupt flag", - "correct_option": "A table that stores the address of each ISR", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following statements is true about interrupt latency?", - "opt1": "It refers to the time required for an ISR to execute", - "opt2": "It refers to the time required for an interrupt to be detected and an ISR to be initiated", - "opt3": "It refers to the time required for the interrupted program to resume after an ISR is finished", - "opt4": "It refers to the time required for the microprocessor to switch between different ISRs", - "correct_option": "It refers to the time required for an interrupt to be detected and an ISR to be initiated", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following statements is true about nested interrupts?", - "opt1": "They occur when an ISR is triggered while another ISR is being serviced", - "opt2": "They occur when two ISRs are triggered simultaneously", - "opt3": "They occur when an ISR takes longer than expected to execute", - "opt4": "They never occur in a microprocessor", - "correct_option": "They occur when an ISR is triggered while another ISR is being serviced", - "correct_option_index": 1 - }, - { - "qsns": "What is the purpose of an interrupt enable flag in a microprocessor?", - "opt1": "To disable all interrupts", - "opt2": "To enable all interrupts", - "opt3": "To enable specific interrupts", - "opt4": "To disable specific interrupts", - "correct_option": "To enable all interrupts", - "correct_option_index": 2 - }, - { - "qsns": "What is the purpose of a maskable interrupt in a microprocessor?", - "opt1": "To disable all interrupts", - "opt2": "To enable all interrupts", - "opt3": "To enable specific interrupts", - "opt4": "To disable specific interrupts", - "correct_option": "To disable specific interrupts", - "correct_option_index": 4 - }, - { - "qsns": "Which of the following statements is true about non-maskable interrupts?", - "opt1": "They can be disabled by software", - "opt2": "They can be disabled by hardware", - "opt3": "They can be ignored by the microprocessor", - "opt4": "They cannot be ignored by the microprocessor", - "correct_option": "They cannot be ignored by the microprocessor", - "correct_option_index": 4 - }, - { - "qsns": "What is the purpose of an interrupt acknowledge signal in a microprocessor?", - "opt1": "To acknowledge the occurrence of an interrupt", - "opt2": "To acknowledge the receipt of an interrupt request", - "opt3": "To clear the interrupt enable flag", - "opt4": "To clear the interrupt flag", - "correct_option": "To acknowledge the receipt of an interrupt request", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following statements is true about edge-triggered interrupts?", - "opt1": "They are triggered by a change in the interrupt request signal", - "opt2": "They are triggered by the level of the interrupt request signal", - "opt3": "They are not used in microprocessors", - "opt4": "They are always maskable interrupts", - "correct_option": "They are triggered by a change in the interrupt request signal", - "correct_option_index": 1 - }, - { - "qsns": "What is the purpose of a vectored interrupt in a microprocessor?", - "opt1": "To enable multiple interrupts to be serviced simultaneously", - "opt2": "To prioritize interrupts based on their importance", - "opt3": "To reduce interrupt latency", - "opt4": "To allow each interrupt to have a unique ISR address", - "correct_option": "To allow each interrupt to have a unique ISR address", - "correct_option_index": 4 - } -] \ No newline at end of file + { + "qsns": "What is the base of the decimal number system?", + "opt1": "2", + "opt2": "8", + "opt3": "10", + "opt4": "16", + "correct_option": "10", + "correct_option_index": 3 + }, + { + "qsns": "How many digits are used in the binary number system?", + "opt1": "8", + "opt2": "10", + "opt3": "2", + "opt4": "16", + "correct_option": "2", + "correct_option_index": 3 + }, + { + "qsns": "Which number system is often used in computer programming to represent sets of 3 bits?", + "opt1": "Decimal", + "opt2": "Binary", + "opt3": "Octal", + "opt4": "Hexadecimal", + "correct_option": "Octal", + "correct_option_index": 3 + }, + { + "qsns": "What is the base of the hexadecimal number system?", + "opt1": "2", + "opt2": "8", + "opt3": "10", + "opt4": "16", + "correct_option": "16", + "correct_option_index": 4 + }, + { + "qsns": "What is the decimal equivalent of the binary number 1011?", + "opt1": "3", + "opt2": "7", + "opt3": "11", + "opt4": "13", + "correct_option": "11", + "correct_option_index": 3 + }, + { + "qsns": "Which number system is easy to represent using electronic devices like switches?", + "opt1": "Decimal", + "opt2": "Binary", + "opt3": "Octal", + "opt4": "Hexadecimal", + "correct_option": "Binary", + "correct_option_index": 2 + }, + { + "qsns": "What is the octal equivalent of the decimal number 11?", + "opt1": "3", + "opt2": "7", + "opt3": "5", + "opt4": "13", + "correct_option": "13", + "correct_option_index": 4 + }, + { + "qsns": "Which number system is often used in computer science to represent memory addresses?", + "opt1": "Decimal", + "opt2": "Binary", + "opt3": "Octal", + "opt4": "Hexadecimal", + "correct_option": "Hexadecimal", + "correct_option_index": 4 + }, + { + "qsns": "What is the binary equivalent of the decimal number 23?", + "opt1": "10111", + "opt2": "11011", + "opt3": "11101", + "opt4": "11110", + "correct_option": "10111", + "correct_option_index": 1 + }, + { + "qsns": "What is the decimal equivalent of the hexadecimal number 2F?", + "opt1": "32", + "opt2": "45", + "opt3": "47", + "opt4": "52", + "correct_option": "47", + "correct_option_index": 3 + }, + { + "qsns": "Which number system has a base of 8?", + "opt1": "Decimal", + "opt2": "Binary", + "opt3": "Octal", + "opt4": "Hexadecimal", + "correct_option": "Octal", + "correct_option_index": 3 + }, + { + "qsns": "What is the binary equivalent of the decimal number 17?", + "opt1": "10000", + "opt2": "10010", + "opt3": "10001", + "opt4": "10011", + "correct_option": "10001", + "correct_option_index": 3 + }, + { + "qsns": "What is the hexadecimal equivalent of the binary number 1101?", + "opt1": "D", + "opt2": "E", + "opt3": "F", + "opt4": "10", + "correct_option": "D", + "correct_option_index": 1 + }, + { + "qsns": "What is the base of the binary number system?", + "opt1": "2", + "opt2": "8", + "opt3": "10", + "opt4": "16", + "correct_option": "2", + "correct_option_index": 1 + }, + { + "qsns": "What is the octal equivalent of the decimal number 27?", + "opt1": "33", + "opt2": "37", + "opt3": "43", + "opt4": "47", + "correct_option": "33", + "correct_option_index": 1 + }, + { + "qsns": "What is the decimal equivalent of the hexadecimal number FF?", + "opt1": "255", + "opt2": "256", + "opt3": "257", + "opt4": "258", + "correct_option": "255", + "correct_option_index": 1 + }, + { + "qsns": "What is the binary equivalent of the octal number 76?", + "opt1": "111011", + "opt2": "110110", + "opt3": "110111", + "opt4": "111000", + "correct_option": "111110", + "correct_option_index": 2 + }, + { + "qsns": "Which number system is used in digital electronics?", + "opt1": "Decimal", + "opt2": "Binary", + "opt3": "Octal", + "opt4": "Hexadecimal", + "correct_option": "Binary", + "correct_option_index": 2 + }, + { + "qsns": "What is the hexadecimal equivalent of the binary number 101011?", + "opt1": "28", + "opt2": "20", + "opt3": "2F", + "opt4": "31", + "correct_option": "2B", + "correct_option_index": 1 + }, + { + "qsns": "What is the decimal equivalent of the octal number 63?", + "opt1": "51", + "opt2": "53", + "opt3": "55", + "opt4": "57", + "correct_option": "51", + "correct_option_index": 1 + }, + { + "qsns": "Which logic family defines a voltage range of 0 V to 0.8 V for a logical 0 and 2 V to 5V for a logical 1?", + "opt1": "TTL", + "opt2": "CMOS", + "opt3": "ECL", + "opt4": "None of the above", + "correct_option": "TTL", + "correct_option_index": 1 + }, + { + "qsns": "Which logic family consumes less power than TTL?", + "opt1": "TTL", + "opt2": "CMOS", + "opt3": "ECL", + "opt4": "None of the above", + "correct_option": "CMOS", + "correct_option_index": 2 + }, + { + "qsns": "What is the voltage range for a logical 0 in CMOS logic?", + "opt1": "0V to 0.5 V", + "opt2": "0V to 0.8 V", + "opt3": "0V to 1.5 V", + "opt4": "0V to 3.5 V", + "correct_option": "0V to 1.5 V", + "correct_option_index": 3 + }, + { + "qsns": "What is the voltage range for a logical 1 in CMOS logic?", + "opt1": "0V to 1.5 V", + "opt2": "1.5 V to 3.5 V", + "opt3": "2V to 5V", + "opt4": "3.5 V to 5V", + "correct_option": "3.5 V to 5V", + "correct_option_index": 4 + }, + { + "qsns": "Which logic family is known for its high speed and low power consumption?", + "opt1": "TTL", + "opt2": "CMOS", + "opt3": "ECL", + "opt4": "None of the above", + "correct_option": "CMOS", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following is true about logic levels?", + "opt1": "They determine the power consumption of a digital circuit.", + "opt2": "They determine the speed of a digital circuit.", + "opt3": "They determine how digital circuits interpret input signals.", + "opt4": "They determine the size of a digital circuit.", + "correct_option": "They determine how digital circuits interpret input signals.", + "correct_option_index": 3 + }, + { + "qsns": "What happens if a signal voltage falls outside the specified range for a logical 0 or 1?", + "opt1": "The circuit will interpret it as a logical 0.", + "opt2": "The circuit will interpret it as a logical 1.", + "opt3": "The circuit may interpret it incorrectly, leading to errors or circuit failure.", + "opt4": "The circuit will ignore the signal.", + "correct_option": "The circuit may interpret it incorrectly, leading to errors or circuit failure.", + "correct_option_index": 3 + }, + { + "qsns": "What are the two most common logic levels used in digital logic?", + "opt1": "Low and High", + "opt2": "0 and 1", + "opt3": "Negative and Positive", + "opt4": "True and False", + "correct_option": "0 and 1", + "correct_option_index": 2 + }, + { + "qsns": "Which logic level represents a logic 1 in a digital circuit?", + "opt1": "High", + "opt2": "Low", + "opt3": "Negative", + "opt4": "Positive", + "correct_option": "High", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following is NOT a typical voltage range for a logic 0?", + "opt1": "0V to 0.8V", + "opt2": "0V to 1.0V", + "opt3": "0V to 1.5V", + "opt4": "0V to 2.0V", + "correct_option": "0V to 2.0V", + "correct_option_index": 4 + }, + { + "qsns": "Which logic level is represented by a voltage above the high threshold voltage and below the low threshold voltage?", + "opt1": "Positive", + "opt2": "Negative", + "opt3": "Indeterminate", + "opt4": "None of the above", + "correct_option": "Indeterminate", + "correct_option_index": 3 + }, + { + "qsns": "Which of the following logic gates has a single input and an inverted output?", + "opt1": "NOT gate", + "opt2": "OR gate", + "opt3": "AND gate", + "opt4": "NAND gate", + "correct_option": "NOT gate", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following logic gates requires all inputs to be high in order to produce a high output?", + "opt1": "OR gate", + "opt2": "AND gate", + "opt3": "XOR gate", + "opt4": "NOR gate", + "correct_option": "AND gate", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following logic gates produces a high output only when all inputs are low?", + "opt1": "OR gate", + "opt2": "AND gate", + "opt3": "NOR gate", + "opt4": "XOR gate", + "correct_option": "NOR gate", + "correct_option_index": 3 + }, + { + "qsns": "Which of the following logic gates has two or more inputs and produces a high output if any one input is high?", + "opt1": "NOR gate", + "opt2": "XOR gate", + "opt3": "AND gate", + "opt4": "OR gate", + "correct_option": "OR gate", + "correct_option_index": 4 + }, + { + "qsns": "What is the output of an AND gate if one input is 1 and the other input is 0?", + "opt1": "0", + "opt2": "1", + "opt3": "Depends on the gate", + "opt4": "Cannot be determined", + "correct_option": "0", + "correct_option_index": 1 + }, + { + "qsns": "What is the output of a NAND gate if one input is 1 and the other input is 0?", + "opt1": "0", + "opt2": "1", + "opt3": "Depends on the gate", + "opt4": "Cannot be determined", + "correct_option": "1", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following logic gates has an output that is the inverse of the input?", + "opt1": "NOT gate", + "opt2": "AND gate", + "opt3": "OR gate", + "opt4": "XOR gate", + "correct_option": "NOT gate", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following logic gates has an output that is the opposite of the OR gate?", + "opt1": "OR gate", + "opt2": "NAND gate", + "opt3": "NOR gate", + "opt4": "XOR gate", + "correct_option": "NOR gate", + "correct_option_index": 3 + }, + { + "qsns": "Which of the following logic gates has two or more inputs and produces a high output only when all inputs are high?", + "opt1": "OR gate", + "opt2": "XOR gate", + "opt3": "AND gate", + "opt4": "NOR gate", + "correct_option": "AND gate", + "correct_option_index": 3 + }, + { + "qsns": "What is the output of a XOR gate if both inputs are 1?", + "opt1": "0", + "opt2": "1", + "opt3": "Depends on the gate", + "opt4": "Cannot be determined", + "correct_option": "0", + "correct_option_index": 1 + }, + { + "qsns": "Which logic gate has the output opposite in logic level to its input?", + "opt1": "OR GATE", + "opt2": "AND gate", + "opt3": "NOT gate", + "opt4": "XOR gate", + "correct_option": "NOT gate", + "correct_option_index": 3 + }, + { + "qsns": "Which logic gate produces a high output only when all inputs are high?", + "opt1": "OR gate", + "opt2": "AND gate", + "opt3": "NOT gate", + "opt4": "XOR gate", + "correct_option": "AND gate", + "correct_option_index": 2 + }, + { + "qsns": "Which logic gate produces a high output when any input is high?", + "opt1": "OR gate", + "opt2": "AND gate", + "opt3": "NOT gate", + "opt4": "XOR gate", + "correct_option": "OR gate", + "correct_option_index": 1 + }, + { + "qsns": "Which logic gate produces a low output only when all inputs are low?", + "opt1": "OR gate", + "opt2": "AND gate", + "opt3": "NOT gate", + "opt4": "XOR gate", + "correct_option": "OR gate", + "correct_option_index": 1 + }, + { + "qsns": "Which logic gate produces a high output when the inputs are different?", + "opt1": "OR gate", + "opt2": "AND gate", + "opt3": "NOT gate", + "opt4": "XOR gate", + "correct_option": "XOR gate", + "correct_option_index": 4 + }, + { + "qsns": "Which of the following is NOT a basic operation in Boolean algebra?", + "opt1": "AND", + "opt2": "OR", + "opt3": "NOT", + "opt4": "XOR", + "correct_option": "XOR", + "correct_option_index": 4 + }, + { + "qsns": "What is the Boolean expression for the NAND gate?", + "opt1": "A + B", + "opt2": "AB", + "opt3": "A' + B'", + "opt4": "A'B'", + "correct_option": "A' + B'", + "correct_option_index": 3 + }, + { + "qsns": "Which of the following Boolean identities is NOT true?", + "opt1": "A + 0 = A", + "opt2": "A + A' = 1", + "opt3": "A + B = B + A", + "opt4": "A + A = A", + "correct_option": "A + A = A", + "correct_option_index": 4 + }, + { + "qsns": "What is the Boolean expression for the NOR gate?", + "opt1": "A + B", + "opt2": "AB", + "opt3": "A' + B'", + "opt4": "A'B'", + "correct_option": "A'B'", + "correct_option_index": 4 + }, + { + "qsns": "What is the complement of the Boolean expression A'B + AB'?", + "opt1": "A' + B'", + "opt2": "A + B", + "opt3": "A'B", + "opt4": "AB", + "correct_option": "A + B", + "correct_option_index": 2 + }, + { + "qsns": "Which Boolean operator has the highest precedence?", + "opt1": "NOT", + "opt2": "AND", + "opt3": "OR", + "opt4": "XOR", + "correct_option": "NOT", + "correct_option_index": 1 + }, + { + "qsns": "Which Boolean operator has the lowest precedence?", + "opt1": "NOT", + "opt2": "AND", + "opt3": "OR", + "opt4": "XOR", + "correct_option": "OR", + "correct_option_index": 3 + }, + { + "qsns": "Which of the following is a Boolean operator?", + "opt1": "+", + "opt2": "*", + "opt3": "&", + "opt4": "/", + "correct_option": "/", + "correct_option_index": 4 + }, + { + "qsns": "What is the Boolean expression for the OR gate?", + "opt1": "A+B", + "opt2": "A*B", + "opt3": "A/B", + "opt4": "A&B", + "correct_option": "A+B", + "correct_option_index": 1 + }, + { + "qsns": "What is the Boolean expression for the AND gate?", + "opt1": "A+B", + "opt2": "A*B", + "opt3": "A/B", + "opt4": "A&B", + "correct_option": "A*B", + "correct_option_index": 2 + }, + { + "qsns": "What is the Boolean expression for the NOT gate?", + "opt1": "A+B", + "opt2": "A*B", + "opt3": "A'", + "opt4": "A&B'", + "correct_option": "A'", + "correct_option_index": 3 + }, + { + "qsns": "Which of the following is an example of a Boolean equation?", + "opt1": "y=x+2", + "opt2": "y=x*2", + "opt3": "y=xORz", + "opt4": "y=xAND2", + "correct_option": "y=xAND2", + "correct_option_index": 4 + }, + { + "qsns": "Which of the following is a Boolean identity?", + "opt1": "A+0=A", + "opt2": "A/1=A", + "opt3": "A*0=A", + "opt4": "A-1=A", + "correct_option": "A+0=A", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following is a Boolean simplification rule?", + "opt1": "A+A=A", + "opt2": "A*A=A", + "opt3": "A+B=B+A", + "opt4": "A*B=B*A", + "correct_option": "A+B=B+A", + "correct_option_index": 3 + }, + { + "qsns": "What is the result of the Boolean operation A OR (B AND C)?", + "opt1": "A+B*C", + "opt2": "A+B+C", + "opt3": "A*B*C", + "opt4": "A*B+C", + "correct_option": "A+B*C", + "correct_option_index": 1 + }, + { + "qsns": "What is the result of the Boolean operation (A OR B) AND (A OR C)?", + "opt1": "A+B+C", + "opt2": "A*B*C", + "opt3": "A+B*C", + "opt4": "A*B+C", + "correct_option": "A+B+C", + "correct_option_index": 1 + }, + { + "qsns": "What is the Boolean expression for the exclusive-OR (XOR) gate?", + "opt1": "A+B", + "opt2": "A*B", + "opt3": "A/B", + "opt4": "AB", + "correct_option": "AB", + "correct_option_index": 4 + }, + { + "qsns": "What is Boolean algebra?", + "opt1": "A branch of mathematics that deals with logic gates", + "opt2": "A branch of mathematics that deals with Boolean functions", + "opt3": "A branch of mathematics that deals with calculus", + "opt4": "A branch of mathematics that deals with programming languages", + "correct_option": "A branch of mathematics that deals with Boolean functions", + "correct_option_index": 2 + }, + { + "qsns": "What is a Boolean variable?", + "opt1": "A variable that can take on any value, including true or false", + "opt2": "A variable that can only take on two values, true or false", + "opt3": "A variable that can take on multiple values at once", + "opt4": "A variable that is always true", + "correct_option": "A variable that can only take on two values, true or false", + "correct_option_index": 2 + }, + { + "qsns": "What is a Boolean expression?", + "opt1": "A mathematical expression that uses Boolean variables, operators, and constants", + "opt2": "A mathematical expression that uses only integers and operators", + "opt3": "A mathematical expression that uses real numbers and operators", + "opt4": "A mathematical expression that uses only constants and operators", + "correct_option": "A mathematical expression that uses Boolean variables, operators, and constants", + "correct_option_index": 1 + }, + { + "qsns": "Which Boolean operator represents logical AND?", + "opt1": "+", + "opt2": "*", + "opt3": ".", + "opt4": "-", + "correct_option": ".", + "correct_option_index": 3 + }, + { + "qsns": "Which Boolean operator represents logical OR?", + "opt1": "+", + "opt2": "*", + "opt3": "/", + "opt4": "-", + "correct_option": "+", + "correct_option_index": 1 + }, + { + "qsns": "Which Boolean operator represents logical NOT?", + "opt1": "+", + "opt2": "*", + "opt3": "'", + "opt4": "/", + "correct_option": "'", + "correct_option_index": 3 + }, + { + "qsns": "What is the complement of A in Boolean algebra?", + "opt1": "A'", + "opt2": "A+", + "opt3": "A*", + "opt4": "A-", + "correct_option": "A'", + "correct_option_index": 1 + }, + { + "qsns": "What is the simplified expression for A + AB?", + "opt1": "A", + "opt2": "B", + "opt3": "AB", + "opt4": "1", + "correct_option": "A", + "correct_option_index": 1 + }, + { + "qsns": "What is the simplified expression for AB + A'B?", + "opt1": "AB + A'", + "opt2": "AB", + "opt3": "A+B", + "opt4": "AB'", + "correct_option": "AB'", + "correct_option_index": 4 + }, + { + "qsns": "What is the Sum-of-Products (SOP) method in digital logic?", + "opt1": "A technique used to simplify Boolean expressions", + "opt2": "A technique used to convert decimal numbers to binary", + "opt3": "A technique used to convert binary numbers to decimal", + "opt4": "A technique used to convert octal numbers to hexadecimal", + "correct_option": "A technique used to simplify Boolean expressions", + "correct_option_index": 1 + }, + { + "qsns": "What is the first step in using the SOP method to simplify a Boolean expression?", + "opt1": "Create a truth table", + "opt2": "Write the expression in standard form", + "opt3": "Identify the rows where the expression evaluates to 1", + "opt4": "Combine the rows with an OR operator", + "correct_option": "Write the expression in standard form", + "correct_option_index": 2 + }, + { + "qsns": "What are the Boolean operators used in the standard form of a Boolean expression?", + "opt1": "AND, OR, and XOR", + "opt2": "AND, OR, and NOT", + "opt3": "XOR, NAND, and NOR", + "opt4": "XOR, NOT, and NAND", + "correct_option": "AND, OR, and NOT", + "correct_option_index": 2 + }, + { + "qsns": "In the SOP method, what is the next step after creating a truth table for the Boolean expression?", + "opt1": "Identify the rows where the expression evaluates to 0", + "opt2": "Identify the rows where the expression evaluates to 1", + "opt3": "Convert the binary inputs to decimal", + "opt4": "Simplify the expression using a Karnaugh map", + "correct_option": "Identify the rows where the expression evaluates to 1", + "correct_option_index": 2 + }, + { + "qsns": "What is the final step in using the SOP method to simplify a Boolean expression?", + "opt1": "Combine the rows with an AND operator", + "opt2": "Combine the rows with an OR operator", + "opt3": "Convert the expression to hexadecimal", + "opt4": "Convert the expression to binary", + "correct_option": "Combine the rows with an OR operator", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following is an example of a Boolean expression that can be simplified using the SOP method?", + "opt1": "F=A+B", + "opt2": "F=A*B", + "opt3": "F=A XOR B", + "opt4": "F=AB+A'B+AB'", + "correct_option": "F=AB+A'B+AB'", + "correct_option_index": 4 + }, + { + "qsns": "How many rows are in the truth table for a Boolean expression with two input variables?", + "opt1": "2", + "opt2": "4", + "opt3": "6", + "opt4": "8", + "correct_option": "4", + "correct_option_index": 2 + }, + { + "qsns": "What is the purpose of the SOP method in digital logic?", + "opt1": "To convert decimal numbers to binary", + "opt2": "To simplify complex Boolean expressions", + "opt3": "To implement logic gates using a truth table", + "opt4": "To convert binary numbers to hexadecimal", + "correct_option": "To simplify complex Boolean expressions", + "correct_option_index": 2 + }, + { + "qsns": "What is the meaning of \"sum of products\" in the SOP method?", + "opt1": "The sum of the input variables in the Boolean expression", + "opt2": "The sum of the rows in the truth table where the expression evaluates to 1", + "opt3": "The sum of the Boolean operators used in the expression", + "opt4": "The sum of the binary values in the truth table", + "correct_option": "The sum of the rows in the truth table where the expression evaluates to 1", + "correct_option_index": 2 + }, + { + "qsns": "What is the Sum-of-Products (SOP) method used for in digital logic?", + "opt1": "To create a truth table for a given Boolean expression", + "opt2": "To simplify a given Boolean expression", + "opt3": "To convert a decimal number to binary", + "opt4": "To perform arithmetic operations on binary numbers", + "correct_option": "To simplify a given Boolean expression", + "correct_option_index": 2 + }, + { + "qsns": "What is the first step when using the SOP method to simplify a Boolean expression?", + "opt1": "Create a truth table for the expression", + "opt2": "Identify the rows where the expression evaluates to 1", + "opt3": "Write the expression in the standard form", + "opt4": "Combine the rows with an OR operator", + "correct_option": "Write the expression in the standard form", + "correct_option_index": 3 + }, + { + "qsns": "What is the standard form of a Boolean expression?", + "opt1": "A form without parentheses", + "opt2": "A form without negation", + "opt3": "A form with parentheses and Boolean operators", + "opt4": "A form with only one variable", + "correct_option": "A form with parentheses and Boolean operators", + "correct_option_index": 3 + }, + { + "qsns": "How do you identify the rows in a truth table where the expression evaluates to 1 when using the SOP method?", + "opt1": "Identify the rows where all variables are 1", + "opt2": "Identify the rows where all variables are 0", + "opt3": "Identify the rows where the expression is true", + "opt4": "Identify the rows where the expression is false", + "correct_option": "Identify the rows where the expression is true", + "correct_option_index": 3 + }, + { + "qsns": "In the SOP method, what is the next step after identifying the rows where the expression evaluates to 1?", + "opt1": "Write down each row in terms of the input variables", + "opt2": "Combine the rows with an AND operator", + "opt3": "Combine the rows with an OR operator", + "opt4": "Create a Karnaugh map", + "correct_option": "Write down each row in terms of the input variables", + "correct_option_index": 1 + }, + { + "qsns": "What Boolean operator is used to combine the rows in the SOP method?", + "opt1": "AND", + "opt2": "OR", + "opt3": "NOT", + "opt4": "XOR", + "correct_option": "OR", + "correct_option_index": 2 + }, + { + "qsns": "What is the final result of the SOP method?", + "opt1": "A simplified sum of products expression", + "opt2": "A simplified product of sums expression", + "opt3": "A truth table", + "opt4": "A Karnaugh map", + "correct_option": "A simplified sum of products expression", + "correct_option_index": 1 + }, + { + "qsns": "How is a row with a value of 0 represented in the SOP method?", + "opt1": "With the corresponding variable", + "opt2": "With the complement of the corresponding variable", + "opt3": "With the negation of the corresponding variable", + "opt4": "With a 0", + "correct_option": "With the complement of the corresponding variable", + "correct_option_index": 2 + }, + { + "qsns": "What is the main advantage of using the SOP method to simplify Boolean expressions?", + "opt1": "It results in a smaller truth table", + "opt2": "It is easier to understand than other methods", + "opt3": "It results in a more efficient circuit design", + "opt4": "It works for any type of Boolean expression", + "correct_option": "It results in a more efficient circuit design", + "correct_option_index": 3 + }, + { + "qsns": "Can the SOP method be used to simplify any Boolean expression?", + "opt1": "Yes, it can be used for any expression", + "opt2": "No, it can only be used for expressions with three variables or fewer", + "opt3": "No, it can only be used for expressions in standard form", + "opt4": "No, it can only be used for expressions with a small number of terms", + "correct_option": "Yes, it can be used for any expression", + "correct_option_index": 1 + }, + { + "qsns": "What is the Product-of-Sums (POS) method used for in digital logic?", + "opt1": "Generating truth tables", + "opt2": "Simplifying Boolean expressions", + "opt3": "Building digital circuits", + "opt4": "Converting binary to decimal", + "correct_option": "Simplifying Boolean expressions", + "correct_option_index": 2 + }, + { + "qsns": "In the POS method, what is the first step in simplifying a Boolean expression?", + "opt1": "Identify the rows of the truth table where the expression evaluates to 0", + "opt2": "Group the variables into terms and combine them with OR operators", + "opt3": "Write the expression in the standard form", + "opt4": "Combine the terms using AND operators", + "correct_option": "Write the expression in the standard form", + "correct_option_index": 3 + }, + { + "qsns": "In the POS method, what is the second step in simplifying a Boolean expression?", + "opt1": "Identify the rows of the truth table where the expression evaluates to 0", + "opt2": "Group the variables into terms and combine them with OR operators", + "opt3": "Write the expression in the standard form", + "opt4": "Combine the terms using AND operators", + "correct_option": "Identify the rows of the truth table where the expression evaluates to 0", + "correct_option_index": 1 + }, + { + "qsns": "What is the final result of applying the POS method to a Boolean expression?", + "opt1": "A simplified sum of products expression", + "opt2": "A simplified product of sums expression", + "opt3": "A minimized truth table", + "opt4": "A circuit diagram", + "correct_option": "A simplified product of sums expression", + "correct_option_index": 2 + }, + { + "qsns": "In the POS method, how are the rows of the truth table where the expression evaluates to 0 combined?", + "opt1": "Using AND operators", + "opt2": "Using OR operators", + "opt3": "Using XOR operators", + "opt4": "Using NOT operators", + "correct_option": "Using OR operators", + "correct_option_index": 2 + }, + { + "qsns": "When is the POS method particularly useful?", + "opt1": "When the expression contains few terms", + "opt2": "When the expression contains many terms", + "opt3": "When the expression contains only one variable", + "opt4": "When the expression contains only constants", + "correct_option": "When the expression contains many terms", + "correct_option_index": 2 + }, + { + "qsns": "To complement a Boolean expression using the POS method, what must be done to the final result?", + "opt1": "It must be inverted", + "opt2": "It must be negated", + "opt3": "It must be squared", + "opt4": "It must be cubed", + "correct_option": "It must be inverted", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following is a benefit of using the POS method in digital logic?", + "opt1": "It simplifies truth tables", + "opt2": "It reduces the size and complexity of digital circuits", + "opt3": "It converts decimal to binary", + "opt4": "It generates random binary numbers", + "correct_option": "It reduces the size and complexity of digital circuits", + "correct_option_index": 2 + }, + { + "qsns": "What is the Product-of-Sums method in digital logic?", + "opt1": "A method for simplifying Boolean expressions by combining sums of variables", + "opt2": "A method for simplifying Boolean expressions by combining products of variables", + "opt3": "A method for generating truth tables from Boolean expressions", + "opt4": "A method for generating Boolean expressions from truth tables", + "correct_option": "A method for simplifying Boolean expressions by combining products of variables", + "correct_option_index": 2 + }, + { + "qsns": "What is the dual of the Product-of-Sums method?", + "opt1": "Sum-of-Products method", + "opt2": "Combinational logic", + "opt3": "Sequential logic", + "opt4": "None of the above", + "correct_option": "Sum-of-Products method", + "correct_option_index": 1 + }, + { + "qsns": "What is the first step in the Product-of-Sums method?", + "opt1": "Identify the rows where the expression evaluates to 1", + "opt2": "Identify the rows where the expression evaluates to 0", + "opt3": "Write the expression in terms of the input variables", + "opt4": "None of the above", + "correct_option": "Identify the rows where the expression evaluates to 0", + "correct_option_index": 2 + }, + { + "qsns": "What is the second step in the Product-of-Sums method?", + "opt1": "Identify the rows where the expression evaluates to 1", + "opt2": "Identify the rows where the expression evaluates to 0", + "opt3": "Write the expression in terms of the input variables", + "opt4": "None of the above", + "correct_option": "Write the expression in terms of the input variables", + "correct_option_index": 3 + }, + { + "qsns": "What is the final step in the Product-of-Sums method?", + "opt1": "Combine the rows using OR operators", + "opt2": "Simplify the expression using DeMorgan's theorem", + "opt3": "Combine the rows using AND operators", + "opt4": "None of the above", + "correct_option": "Combine the rows using OR operators", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following is an advantage of using the Product-of-Sums method?", + "opt1": "It is faster than other simplification methods", + "opt2": "It is easier to understand than other simplification methods", + "opt3": "It is more accurate than other simplification methods", + "opt4": "It is useful in cases where the expression contains many terms", + "correct_option": "It is easier to understand than other simplification methods", + "correct_option_index": 2 + }, + { + "qsns": "What is the purpose of applying the Product-of-Sums method to the complement of an expression?", + "opt1": "To generate a truth table for the expression", + "opt2": "To simplify the expression using DeMorgan's theorem", + "opt3": "To generate a simplified expression that is the complement of the original expression", + "opt4": "None of the above", + "correct_option": "To generate a simplified expression that is the complement of the original expression", + "correct_option_index": 3 + }, + { + "qsns": "Which of the following is true about the Product-of-Sums method?", + "opt1": "It can only be used with binary variables", + "opt2": "It can be used with any type of variable", + "opt3": "It can only be used with Boolean expressions that contain AND operators", + "opt4": "None of the above", + "correct_option": "It can be used with any type of variable", + "correct_option_index": 2 + }, + { + "qsns": "What is the advantage of using the Product-of-Sums method over the Sum-of-Products method?", + "opt1": "The resulting expression is easier to understand", + "opt2": "The resulting expression is shorter and requires fewer gates", + "opt3": "The method is faster and requires less computation", + "opt4": "None of the above", + "correct_option": "The resulting expression is shorter and requires fewer gates", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following is an application of the Product-of-Sums method?", + "opt1": "Simplifying Boolean expressions in digital circuits", + "opt2": "Generating truth tables for digital circuits", + "opt3": "Designing sequential logic circuits", + "opt4": "None of the above", + "correct_option": "Simplifying Boolean expressions in digital circuits", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following is a graphical tool used to simplify Boolean expressions?", + "opt1": "Truth table", + "opt2": "Karnaugh map", + "opt3": "Logic gate", + "opt4": "Logic circuit", + "correct_option": "Karnaugh map", + "correct_option_index": 2 + }, + { + "qsns": "How are cells identified in a Karnaugh map?", + "opt1": "By their input variable combinations", + "opt2": "By their output values", + "opt3": "By their row and column numbers", + "opt4": "By their position on the map", + "correct_option": "By their input variable combinations", + "correct_option_index": 1 + }, + { + "qsns": "In the Karnaugh map, which cells can be combined to form a simplified expression?", + "opt1": "Diagonal cells", + "opt2": "Horizontal cells", + "opt3": "Vertical cells", + "opt4": "Adjacent cells", + "correct_option": "Adjacent cells", + "correct_option_index": 4 + }, + { + "qsns": "What does SOP stand for in the context of digital logic?", + "opt1": "Sum of Products", + "opt2": "Product of Sums", + "opt3": "Sum of Squares", + "opt4": "Product of Squares", + "correct_option": "Sum of Products", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following is true for the cells of a Karnaugh map?", + "opt1": "Each cell can only contain a 0 or a 1", + "opt2": "Each cell can contain a 0, 1, or X", + "opt3": "Each cell can contain any value between 0 and 1", + "opt4": "Each cell can contain a 1, 2, or 3", + "correct_option": "Each cell can only contain a 0 or a 1", + "correct_option_index": 1 + }, + { + "qsns": "What is a Karnaugh map used for?", + "opt1": "To generate a truth table", + "opt2": "To simplify Boolean expressions", + "opt3": "To convert a Boolean expression to a logic circuit", + "opt4": "To convert a Boolean expression to a logic gate", + "correct_option": "To simplify Boolean expressions", + "correct_option_index": 2 + }, + { + "qsns": "How many cells does a Karnaugh map have if the corresponding Boolean expression has three input variables?", + "opt1": "12", + "opt2": "8", + "opt3": "16", + "opt4": "4", + "correct_option": "8", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following is not a valid combination of input variables in a Karnaugh map for a two-variable expression?", + "opt1": "00", + "opt2": "01", + "opt3": "10", + "opt4": "21", + "correct_option": "21", + "correct_option_index": 4 + }, + { + "qsns": "How are adjacent cells identified in a Karnaugh map?", + "opt1": "By diagonal lines", + "opt2": "By vertical lines", + "opt3": "By horizontal lines", + "opt4": "Both b and c", + "correct_option": "Both b and c", + "correct_option_index": 4 + }, + { + "qsns": "Which of the following is a simplified expression for the Karnaugh map shown below?", + "opt1": "AB + BC + AD", + "opt2": "AB + CD", + "opt3": "AC + BD", + "opt4": "ACD + BCD", + "correct_option": "AB + CD", + "correct_option_index": 2 + }, + { + "qsns": "How is a truth table converted into a Karnaugh map?", + "opt1": "By graphing the data points", + "opt2": "By plotting the input and output values on a grid", + "opt3": "By counting the number of 0's and 1's", + "opt4": "By entering the data into a computer program", + "correct_option": "By plotting the input and output values on a grid", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following Boolean expressions is equivalent to the Karnaugh map shown below?", + "opt1": "AB + BC + AD", + "opt2": "AB + CD", + "opt3": "AC + BD", + "opt4": "ACD + BCD", + "correct_option": "AB + CD", + "correct_option_index": 2 + }, + { + "qsns": "How many cells in a Karnaugh map can be combined to form a simplified expression?", + "opt1": "1", + "opt2": "2", + "opt3": "3", + "opt4": "Both A and B", + "correct_option": "Both A and B", + "correct_option_index": 4 + }, + { + "qsns": "How is a simplified expression converted back into a standard SOP or POS expression?", + "opt1": "By using De Morgan's theorem", + "opt2": "By applying the distributive property", + "opt3": "By factoring out common terms", + "opt4": "Both A and B", + "correct_option": "Both A and B", + "correct_option_index": 4 + }, + { + "qsns": "What is the frequency of a triangle wave generator determined by?", + "opt1": "The time constant of the RC circuit", + "opt2": "The resonant frequency of the tank circuit", + "opt3": "The frequency of the crystal", + "opt4": "The input voltage of the oscillator", + "correct_option": "The time constant of the RC circuit", + "correct_option_index": 1 + }, + { + "qsns": "What is the frequency of a triangle wave generator determined by?", + "opt1": "The time period of the waveform", + "opt2": "The amplitude of the waveform", + "opt3": "The duty cycle of the waveform", + "opt4": "The slope of the waveform", + "correct_option": "The slope of the waveform", + "correct_option_index": 4 + }, + { + "qsns": "Which of the following is not a valid combination of input variables in a Karnaugh map for a two-variable expression?", + "opt1": "00", + "opt2": "01", + "opt3": "10", + "opt4": "21", + "correct_option": "21", + "correct_option_index": 4 + }, + { + "qsns": "What is a gated flip-flop?", + "opt1": "A type of logic gate", + "opt2": "A type of sequential circuit", + "opt3": "A type of combinational circuit", + "opt4": "A type of adder", + "correct_option": "A type of sequential circuit", + "correct_option_index": 2 + }, + { + "qsns": "Which type of flip-flop uses an AND gate to control the clock input?", + "opt1": "D flip-flop", + "opt2": "T flip-flop", + "opt3": "JK flip-flop", + "opt4": "SR flip-flop", + "correct_option": "T flip-flop", + "correct_option_index": 2 + }, + { + "qsns": "What is the advantage of using gated flip-flops?", + "opt1": "They are faster than regular flip-flops", + "opt2": "They use less power than regular flip-flops", + "opt3": "They can selectively enable or disable the clock input", + "opt4": "They can be used in parallel circuits", + "correct_option": "They can selectively enable or disable the clock input", + "correct_option_index": 3 + }, + { + "qsns": "Which type of flip-flop uses a NAND gate to control the J and K inputs?", + "opt1": "D flip-flop", + "opt2": "T flip-flop", + "opt3": "JK flip-flop", + "opt4": "SR flip-flop", + "correct_option": "JK flip-flop", + "correct_option_index": 3 + }, + { + "qsns": "What happens to the output of a T gated flip-flop when the clock and gate inputs are both high?", + "opt1": "The output remains the same", + "opt2": "The output toggles between 0 and 1", + "opt3": "The output becomes 0", + "opt4": "The output becomes 1", + "correct_option": "The output toggles between 0 and 1", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following is not a type of gated flip-flop?", + "opt1": "D flip-flop", + "opt2": "SR flip-flop", + "opt3": "T flip-flop", + "opt4": "JK flip-flop", + "correct_option": "SR flip-flop", + "correct_option_index": 2 + }, + { + "qsns": "What is the output of a binary decoder if the input code is all zeros?", + "opt1": "The first output line will be selected", + "opt2": "The last output line will be selected", + "opt3": "No output lines will be selected", + "opt4": "None of the above", + "correct_option": "The first output line will be selected", + "correct_option_index": 1 + }, + { + "qsns": "Which type of decoder is commonly used in digital clocks and calculators?", + "opt1": "Binary decoder", + "opt2": "BCD decoder", + "opt3": "Priority decoder", + "opt4": "None of the above", + "correct_option": "BCD decoder", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following is an advantage of a decoder?", + "opt1": "It can be used to convert any type of code into an output signal", + "opt2": "It is easy to implement and use", + "opt3": "It can be used in sequential circuits", + "opt4": "None of the above", + "correct_option": "It is easy to implement and use", + "correct_option_index": 2 + }, + { + "qsns": "What is the purpose of an encoder?", + "opt1": "To convert an input signal into a coded output signal", + "opt2": "To store and retrieve digital data", + "opt3": "To perform arithmetic and logical operations on binary data", + "opt4": "To generate an output based on the input and the previous state", + "correct_option": "To convert an input signal into a coded output signal", + "correct_option_index": 1 + }, + { + "qsns": "What is the difference between a binary encoder and a priority encoder?", + "opt1": "A binary encoder converts a binary input signal into an n-bit coded output signal, while a priority encoder generates a binary code corresponding to the highest priority input signal.", + "opt2": "A binary encoder generates a binary code corresponding to the highest priority input signal, while a priority encoder converts a binary input signal into an n-bit coded output signal.", + "opt3": "A binary encoder and a priority encoder are the same thing.", + "opt4": "A binary encoder and a priority encoder have no difference.", + "correct_option": "A binary encoder converts a binary input signal into an n-bit coded output signal, while a priority encoder generates a binary code corresponding to the highest priority input signal.", + "correct_option_index": 1 + }, + { + "qsns": "What is the advantage of using a priority encoder?", + "opt1": "It simplifies the design of complex digital circuits", + "opt2": "It reduces the number of input lines required", + "opt3": "It increases the speed of data processing", + "opt4": "All of the above", + "correct_option": "It simplifies the design of complex digital circuits", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following is NOT a type of encoder?", + "opt1": "Binary encoder", + "opt2": "Priority encoder", + "opt3": "BCD encoder", + "opt4": "Multiplexer", + "correct_option": "Multiplexer", + "correct_option_index": 4 + }, + { + "qsns": "What is the purpose of an encoder in digital logic?", + "opt1": "To convert a binary input signal into an n-bit coded output signal", + "opt2": "To generate a binary code corresponding to the highest priority input signal", + "opt3": "To convert a decimal input signal into a 4-bit BCD output signal", + "opt4": "To perform arithmetic operations on binary numbers", + "correct_option": "To convert a binary input signal into an n-bit coded output signal", + "correct_option_index": 1 + }, + { + "qsns": "How many input lines and output lines does a binary encoder have?", + "opt1": "n input lines and m output lines", + "opt2": "2^n input lines and n output lines", + "opt3": "n input lines and log2n output lines", + "opt4": "10 input lines and 4 output lines", + "correct_option": "2^n input lines and n output lines", + "correct_option_index": 2 + }, + { + "qsns": "What is the purpose of a priority encoder in digital logic?", + "opt1": "To convert a binary input signal into an n-bit coded output signal", + "opt2": "To generate a binary code corresponding to the highest priority input signal", + "opt3": "To convert a decimal input signal into a 4-bit BCD output signal", + "opt4": "To perform arithmetic operations on binary numbers", + "correct_option": "To generate a binary code corresponding to the highest priority input signal", + "correct_option_index": 2 + }, + { + "qsns": "How many input lines and output lines does a priority encoder have?", + "opt1": "n input lines and m output lines", + "opt2": "2^n input lines and n output lines", + "opt3": "n input lines and log2n output lines", + "opt4": "10 input lines and 4 output lines", + "correct_option": "n input lines and log2n output lines", + "correct_option_index": 3 + }, + { + "qsns": "What is the purpose of a BCD encoder in digital logic?", + "opt1": "To convert a binary input signal into an n-bit coded output signal", + "opt2": "To generate a binary code corresponding to the highest priority input signal", + "opt3": "To convert a decimal input signal into a 4-bit BCD output signal", + "opt4": "To perform arithmetic operations on binary numbers", + "correct_option": "To convert a decimal input signal into a 4-bit BCD output signal", + "correct_option_index": 3 + }, + { + "qsns": "How many input lines and output lines does a BCD encoder have?", + "opt1": "n input lines and m output lines", + "opt2": "2^n input lines and n output lines", + "opt3": "n input lines and log2n output lines", + "opt4": "10 input lines and 4 output lines", + "correct_option": "10 input lines and 4 output lines", + "correct_option_index": 4 + }, + { + "qsns": "What is the difference between a binary encoder and a priority encoder?", + "opt1": "A binary encoder converts a binary input signal into an n-bit coded output signal, while a priority encoder generates a binary code corresponding to the highest priority input signal.", + "opt2": "A binary encoder generates a binary code corresponding to the highest priority input signal, while a priority encoder converts a binary input signal into an n-bit coded output signal.", + "opt3": "A binary encoder converts a decimal input signal into a 4-bit BCD output signal, while a priority encoder generates a binary code corresponding to the highest priority input signal.", + "opt4": "A binary encoder has 2^n input lines and n output lines, while a priority encoder has n input lines and log2n output lines.", + "correct_option": "A binary encoder converts a binary input signal into an n-bit coded output signal, while a priority encoder generates a binary code corresponding to the highest priority input signal.", + "correct_option_index": 1 + }, + { + "qsns": "What is the purpose of using an encoder in data communication?", + "opt1": "To convert analog signals into digital signals", + "opt2": "To compress digital signals for efficient transmission", + "opt3": "To encrypt digital signals for secure transmission", + "opt4": "To convert digital signals into a coded output signal for transmission", + "correct_option": "To convert digital signals into a coded output signal for transmission", + "correct_option_index": 4 + }, + { + "qsns": "What is the purpose of using a BCD encoder in digital signal processing?", + "opt1": "To convert a binary input signal into an n-bit coded output signal", + "opt2": "To generate a binary code corresponding to the highest priority input signal", + "opt3": "To convert a decimal input signal into a 4-bit BCD output signal", + "opt4": "To perform arithmetic operations on binary numbers", + "correct_option": "To convert a decimal input signal into a 4-bit BCD output signal", + "correct_option_index": 3 + }, + { + "qsns": "What is the result of binary addition of 0110 and 0101?", + "opt1": "1101", + "opt2": "1111", + "opt3": "1011", + "opt4": "0011", + "correct_option": "1011", + "correct_option_index": 3 + }, + { + "qsns": "Which of the following is the correct binary addition of 1111 and 0011?", + "opt1": "11010", + "opt2": "10010", + "opt3": "10100", + "opt4": "10000", + "correct_option": "10010", + "correct_option_index": 2 + }, + { + "qsns": "What is the binary addition of 10101 and 11111?", + "opt1": "110010", + "opt2": "110111", + "opt3": "110110", + "opt4": "100010", + "correct_option": "110100", + "correct_option_index": 3 + }, + { + "qsns": "What is the binary addition of 1101 and 0110?", + "opt1": "1110", + "opt2": "10010", + "opt3": "10011", + "opt4": "1100", + "correct_option": "10011", + "correct_option_index": 3 + }, + { + "qsns": "Which of the following represents the correct binary addition of 1010 and 0110?", + "opt1": "1000", + "opt2": "1011", + "opt3": "10000", + "opt4": "11111", + "correct_option": "10000", + "correct_option_index": 3 + }, + { + "qsns": "What is the result of binary addition of 11111 and 00001?", + "opt1": "11110", + "opt2": "100000", + "opt3": "10000", + "opt4": "11111", + "correct_option": "100000", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following represents the correct binary addition of 111 and 101?", + "opt1": "1100", + "opt2": "1010", + "opt3": "1111", + "opt4": "1001", + "correct_option": "1100", + "correct_option_index": 1 + }, + { + "qsns": "What is the result of binary addition of 0101 and 0010?", + "opt1": "0111", + "opt2": "1000", + "opt3": "1011", + "opt4": "1001", + "correct_option": "0111", + "correct_option_index": 1 + }, + { + "qsns": "What is the binary sum of 1011 and 1101?", + "opt1": "10011", + "opt2": "10101", + "opt3": "0110", + "opt4": "0100", + "correct_option": "11000", + "correct_option_index": 4 + }, + { + "qsns": "What is the binary sum of 1110 and 0111?", + "opt1": "10001", + "opt2": "10101", + "opt3": "1110", + "opt4": "100110", + "correct_option": "10101", + "correct_option_index": 2 + }, + { + "qsns": "What is the binary sum of 10101010 and 11001100?", + "opt1": "10111111", + "opt2": "10110110", + "opt3": "1101-", + "opt4": "0100", + "correct_option": "101110110", + "correct_option_index": 2 + }, + { + "qsns": "What is the binary sum of 11111111 and 00000001?", + "opt1": "11111110", + "opt2": "11111111", + "opt3": "10100100", + "opt4": "100000000", + "correct_option": "100000000", + "correct_option_index": 4 + }, + { + "qsns": "Which of the following represents the correct binary addition of 1101 and 0011?", + "opt1": "1111", + "opt2": "1010", + "opt3": "10011100", + "opt4": "00000010", + "correct_option": "10000", + "correct_option_index": 4 + }, + { + "qsns": "What is the binary addition of 1010 and 1101?", + "opt1": "1000", + "opt2": "1111", + "opt3": "10111", + "opt4": "00000000", + "correct_option": "10111", + "correct_option_index": 3 + }, + { + "qsns": "What is the carry generated when adding 1101 and 1011?", + "opt1": "1", + "opt2": "0", + "opt3": "2", + "opt4": "3", + "correct_option": "1", + "correct_option_index": 1 + }, + { + "qsns": "What is the binary sum of 111 and 101?", + "opt1": "1011", + "opt2": "1110", + "opt3": "110", + "opt4": "1001", + "correct_option": "1100", + "correct_option_index": 2 + }, + { + "qsns": "What is the result of adding 1011 and 1110 using a full adder circuit?", + "opt1": "1101", + "opt2": "10000", + "opt3": "11001", + "opt4": "1010", + "correct_option": "11001", + "correct_option_index": 3 + }, + { + "qsns": "What is the binary sum of 1111 and 0111 using a half adder circuit?", + "opt1": "1110", + "opt2": "1101", + "opt3": "1000", + "opt4": "10110", + "correct_option": "10110", + "correct_option_index": 4 + }, + { + "qsns": "What is the result of adding 1011 and 1100 using a carry look-ahead adder (CLA) circuit?", + "opt1": "1101", + "opt2": "10100", + "opt3": "10111", + "opt4": "10011", + "correct_option": "10111", + "correct_option_index": 3 + }, + { + "qsns": "What is the binary sum of 1001 and 0110?", + "opt1": "1011", + "opt2": "1110", + "opt3": "1111", + "opt4": "0011", + "correct_option": "1111", + "correct_option_index": 3 + }, + { + "qsns": "What is the complement of the binary number 1111?", + "opt1": "1110", + "opt2": "0000", + "opt3": "0001", + "opt4": "1000", + "correct_option": "0000", + "correct_option_index": 2 + }, + { + "qsns": "What is the complement of the binary number 0011?", + "opt1": "0010", + "opt2": "1101", + "opt3": "1100", + "opt4": "0100", + "correct_option": "1100", + "correct_option_index": 3 + }, + { + "qsns": "What is the result of subtracting the binary number 0110 from the binary number 1011?", + "opt1": "1001", + "opt2": "0101", + "opt3": "0010", + "opt4": "1101", + "correct_option": "0101", + "correct_option_index": 2 + }, + { + "qsns": "What is the complement of the binary number 0001?", + "opt1": "0000", + "opt2": "1110", + "opt3": "1111", + "opt4": "0010", + "correct_option": "1110", + "correct_option_index": 2 + }, + { + "qsns": "What is the result of subtracting the binary number 1101 from the binary number 1110?", + "opt1": "0000", + "opt2": "0001", + "opt3": "0011", + "opt4": "0111", + "correct_option": "0001", + "correct_option_index": 2 + }, + { + "qsns": "What is the complement of the binary number 0101?", + "opt1": "0100", + "opt2": "1010", + "opt3": "1011", + "opt4": "1001", + "correct_option": "1010", + "correct_option_index": 2 + }, + { + "qsns": "What is the result of subtracting the binary number 0010 from the binary number 1111?", + "opt1": "0101", + "opt2": "1101", + "opt3": "0110", + "opt4": "1011", + "correct_option": "1101", + "correct_option_index": 2 + }, + { + "qsns": "What is the complement of the binary number 1000?", + "opt1": "0111", + "opt2": "1011", + "opt3": "1001", + "opt4": "1001", + "correct_option": "0111", + "correct_option_index": 1 + }, + { + "qsns": "What is the first step in binary subtraction?", + "opt1": "Find the complement of the minuend", + "opt2": "Invert all the bits of the minuend", + "opt3": "Find the complement of the subtrahend", + "opt4": "Invert all the bits of the subtrahend", + "correct_option": "Find the complement of the subtrahend", + "correct_option_index": 3 + }, + { + "qsns": "What is the complement of the binary number 1011?", + "opt1": "1100", + "opt2": "0100", + "opt3": "1000", + "opt4": "0001", + "correct_option": "0100", + "correct_option_index": 2 + }, + { + "qsns": "What is the binary equivalent of the decimal value 7?", + "opt1": "110", + "opt2": "101", + "opt3": "111", + "opt4": "1110", + "correct_option": "111", + "correct_option_index": 3 + }, + { + "qsns": "What is the result of subtracting the binary number 1101 from the binary number 1111?", + "opt1": "0010", + "opt2": "0100", + "opt3": "0001", + "opt4": "1110", + "correct_option": "0010", + "correct_option_index": 1 + }, + { + "qsns": "What is the second step in binary subtraction?", + "opt1": "Find the complement of the subtrahend", + "opt2": "Invert all the bits of the subtrahend", + "opt3": "Find the complement of the minuend", + "opt4": "Invert all the bits of the minuend", + "correct_option": "Invert all the bits of the subtrahend", + "correct_option_index": 2 + }, + { + "qsns": "What is the binary equivalent of the decimal value 10?", + "opt1": "1010", + "opt2": "1100", + "opt3": "1110", + "opt4": "1001", + "correct_option": "1010", + "correct_option_index": 1 + }, + { + "qsns": "What is the complement of the binary number 1001?", + "opt1": "0110", + "opt2": "0111", + "opt3": "1010", + "opt4": "1011", + "correct_option": "0110", + "correct_option_index": 1 + }, + { + "qsns": "What is the result of subtracting the binary number 1111 from the binary number 1111?", + "opt1": "1111", + "opt2": "0000", + "opt3": "1110", + "opt4": "0001", + "correct_option": "0000", + "correct_option_index": 2 + }, + { + "qsns": "What is the third step in binary subtraction?", + "opt1": "Add the complement to the minuend using binary subtraction", + "opt2": "Add the complement to the minuend using binary addition", + "opt3": "Subtract the complement from the minuend using binary subtraction", + "opt4": "Subtract the complement from the minuend using binary addition", + "correct_option": "Add the complement to the minuend using binary addition", + "correct_option_index": 2 + }, + { + "qsns": "What is the binary equivalent of the decimal value 13?", + "opt1": "1011", + "opt2": "1101", + "opt3": "1110", + "opt4": "1001", + "correct_option": "1101", + "correct_option_index": 2 + }, + { + "qsns": "What is the difference between unsigned and signed binary numbers?", + "opt1": "Unsigned binary numbers have a signed bit while signed binary numbers do not.", + "opt2": "Unsigned binary numbers can represent only positive numbers while signed binary numbers can represent both positive and negative numbers.", + "opt3": "Unsigned binary numbers use a different base than signed binary numbers.", + "opt4": "There is no difference between unsigned and signed binary numbers.", + "correct_option": "Unsigned binary numbers can represent only positive numbers while signed binary numbers can represent both positive and negative numbers.", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following is the most significant bit in an 8-bit signed binary number?", + "opt1": "Bit 0", + "opt2": "Bit 1", + "opt3": "Bit 7", + "opt4": "There is no most significant bit", + "correct_option": "Bit 7", + "correct_option_index": 3 + }, + { + "qsns": "What is the range of 8-bit signed binary numbers?", + "opt1": "0 to 255", + "opt2": "-128 to 127", + "opt3": "-127 to 127", + "opt4": "0 to 127", + "correct_option": "-128 to 127", + "correct_option_index": 2 + }, + { + "qsns": "What is the range of unsigned 8-bit binary numbers?", + "opt1": "0 to 127", + "opt2": "-128 to 127", + "opt3": "-127 to 127", + "opt4": "0 to 255", + "correct_option": "0 to 255", + "correct_option_index": 4 + }, + { + "qsns": "Which of the following operations can be performed on signed binary numbers but not on unsigned binary numbers?", + "opt1": "Addition", + "opt2": "Subtraction", + "opt3": "Multiplication", + "opt4": "Division", + "correct_option": "Subtraction", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following operations can be performed on unsigned binary numbers?", + "opt1": "Only addition", + "opt2": "Addition and subtraction", + "opt3": "Multiplication and division", + "opt4": "Only subtraction", + "correct_option": "Addition and subtraction", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following is the correct representation of the unsigned binary number 1011 in decimal?", + "opt1": "10", + "opt2": "11", + "opt3": "12", + "opt4": "9", + "correct_option": "11", + "correct_option_index": 2 + }, + { + "qsns": "What is the range of unsigned 8-bit binary numbers?", + "opt1": "-128 to 127", + "opt2": "0 to 255", + "opt3": "0 to 127", + "opt4": "0 to 128", + "correct_option": "0 to 255", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following is the correct representation of the signed binary number 11111111 in decimal using two's complement?", + "opt1": "-127", + "opt2": "-128", + "opt3": "127", + "opt4": "-1", + "correct_option": "-1", + "correct_option_index": 4 + }, + { + "qsns": "What is the range of signed 8-bit binary numbers using two's complement?", + "opt1": "-127 to 128", + "opt2": "-128 to 127", + "opt3": "-256 to 255", + "opt4": "-255 to 256", + "correct_option": "-128 to 127", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following operations can be performed on signed binary numbers using two's complement?", + "opt1": "Only addition", + "opt2": "Addition and subtraction", + "opt3": "Multiplication and division", + "opt4": "Only subtraction", + "correct_option": "Addition and subtraction", + "correct_option_index": 2 + }, + { + "qsns": "What is the result of adding the signed binary numbers 0111 and 1010 using two's complement?", + "opt1": "0001", + "opt2": "1101", + "opt3": "1111", + "opt4": "1001", + "correct_option": "0001", + "correct_option_index": 1 + }, + { + "qsns": "What is the result of subtracting the signed binary numbers 1010 and 0111 using two's complement?", + "opt1": "0001", + "opt2": "1101", + "opt3": "1001", + "opt4": "1111", + "correct_option": "0011", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following is the correct representation of the signed binary number 11111000 in decimal using two's complement?", + "opt1": "-8", + "opt2": "-24", + "opt3": "8", + "opt4": "24", + "correct_option": "-8", + "correct_option_index": 1 + }, + { + "qsns": "What is the complement of the binary number 1010?", + "opt1": "0100", + "opt2": "0010", + "opt3": "1001", + "opt4": "0110", + "correct_option": "0101", + "correct_option_index": 2 + }, + { + "qsns": "What is the result of adding the signed binary numbers 0110 and 1011?", + "opt1": "1101", + "opt2": "1001", + "opt3": "0001", + "opt4": "0010", + "correct_option": "0001", + "correct_option_index": 3 + }, + { + "qsns": "Which of the following is the two's complement of the binary number 1101?", + "opt1": "0010", + "opt2": "0011", + "opt3": "0101", + "opt4": "0110", + "correct_option": "0011", + "correct_option_index": 2 + }, + { + "qsns": "What is the result of multiplying the unsigned binary numbers 1010 and 0011?", + "opt1": "0010", + "opt2": "0110", + "opt3": "1110", + "opt4": "1011", + "correct_option": "11110", + "correct_option_index": 2 + }, + { + "qsns": "What is the result of subtracting the signed binary number 0101 from the signed binary number 1010?", + "opt1": "1101", + "opt2": "1001", + "opt3": "0101", + "opt4": "0011", + "correct_option": "0101", + "correct_option_index": 3 + }, + { + "qsns": "Which of the following is the sign bit in an 8-bit signed binary number?", + "opt1": "Bit 0", + "opt2": "Bit 1", + "opt3": "Bit 7", + "opt4": "There is no sign bit", + "correct_option": "Bit 7", + "correct_option_index": 3 + }, + { + "qsns": "Which of the following describes an asynchronous counter?", + "opt1": "A counter that uses external clock pulses to advance its count", + "opt2": "A counter that uses feedback to generate its own clock pulses", + "opt3": "A counter that counts in parallel", + "opt4": "A counter that counts in series", + "correct_option": "A counter that uses external clock pulses to advance its count", + "correct_option_index": 1 + }, + { + "qsns": "Which type of asynchronous counter is also known as a ripple counter?", + "opt1": "Synchronous counter", + "opt2": "Binary counter", + "opt3": "Johnson counter", + "opt4": "Modulus counter", + "correct_option": "Binary counter", + "correct_option_index": 2 + }, + { + "qsns": "How many flip-flops are needed to implement a 3-bit asynchronous counter?", + "opt1": "2", + "opt2": "3", + "opt3": "4", + "opt4": "5", + "correct_option": "3", + "correct_option_index": 2 + }, + { + "qsns": "What is the maximum number of states a 4-bit asynchronous counter can have?", + "opt1": "4", + "opt2": "8", + "opt3": "12", + "opt4": "16", + "correct_option": "16", + "correct_option_index": 4 + }, + { + "qsns": "In an asynchronous counter, which flip-flop receives the external clock signal?", + "opt1": "The first flip-flop", + "opt2": "The last flip-flop", + "opt3": "All flip-flops receive the external clock signal", + "opt4": "None of the flip-flops receive the external clock signal", + "correct_option": "The first flip-flop", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following is an advantage of asynchronous counters over synchronous counters?", + "opt1": "Asynchronous counters are faster", + "opt2": "Asynchronous counters are more reliable", + "opt3": "Asynchronous counters require fewer components", + "opt4": "Asynchronous counters are easier to design", + "correct_option": "Asynchronous counters require fewer components", + "correct_option_index": 3 + }, + { + "qsns": "In a 3-bit asynchronous counter, what is the maximum count sequence that can be generated?", + "opt1": "0,1,2,3,4,5,6,7", + "opt2": "0,1,2,3,2,1,0", + "opt3": "0,1,2, 1.0, 1.2,1.D", + "opt4": "0, 1, 0, 1 0, 1, 0, 1", + "correct_option": "0,1,2,3,4,5,6,7", + "correct_option_index": 1 + }, + { + "qsns": "Which type of asynchronous counter uses a series of D flip-flops?", + "opt1": "Binary counter", + "opt2": "Ripple counter", + "opt3": "Johnson counter", + "opt4": "Modulus counter", + "correct_option": "Johnson counter", + "correct_option_index": 3 + }, + { + "qsns": "In a Johnson counter, how many states are there for n flip-flops?", + "opt1": "2n", + "opt2": "n", + "opt3": "n/2", + "opt4": "2^n-1", + "correct_option": "2n", + "correct_option_index": 1 + }, + { + "qsns": "What is the main disadvantage of asynchronous counters?", + "opt1": "They are slower than synchronous counters", + "opt2": "They suffer from glitches in the output waveform", + "opt3": "They are more complex to design than synchronous counters", + "opt4": "They are not suitable for use in digital circuits", + "correct_option": "They are slower than synchronous counters", + "correct_option_index": 1 + }, + { + "qsns": "What is an asynchronous counter?", + "opt1": "A counter that uses asynchronous clock", + "opt2": "A counter that uses synchronous clock pulses", + "opt3": "A counter that uses both synchronous and asynchronous clock pulses", + "opt4": "A counter that does not use clock pulses", + "correct_option": "A counter that uses asynchronous clock", + "correct_option_index": 1 + }, + { + "qsns": "What is the basic building block of an asynchronous counter?", + "opt1": "Flip-flop", + "opt2": "Encoder", + "opt3": "Decoder", + "opt4": "Multiplexer", + "correct_option": "Flip-flop", + "correct_option_index": 1 + }, + { + "qsns": "How many flip-flops are required for a 3-bit asynchronous counter?", + "opt1": "1", + "opt2": "2", + "opt3": "3", + "opt4": "4", + "correct_option": "3", + "correct_option_index": 3 + }, + { + "qsns": "Which type of flip-flop is used in an asynchronous counter?", + "opt1": "D flip-flop", + "opt2": "T flip-flop", + "opt3": "JK flip-flop", + "opt4": "All of the above", + "correct_option": "All of the above", + "correct_option_index": 4 + }, + { + "qsns": "What is the maximum count for a 4-bit asynchronous counter?", + "opt1": "8", + "opt2": "16", + "opt3": "32", + "opt4": "64", + "correct_option": "16", + "correct_option_index": 2 + }, + { + "qsns": "What is the advantage of using an asynchronous counter over a synchronous counter?", + "opt1": "Higher speed", + "opt2": "Lower power consumption", + "opt3": "Lower cost", + "opt4": "Simpler design", + "correct_option": "Simpler design", + "correct_option_index": 4 + }, + { + "qsns": "In an asynchronous counter, what is the function of the enable input?", + "opt1": "To start the counting process", + "opt2": "To stop the counting process", + "opt3": "To reset the counter", + "opt4": "To enable or disable the counting process", + "correct_option": "To enable or disable the counting process", + "correct_option_index": 4 + }, + { + "qsns": "What is the propagation delay of an asynchronous counter?", + "opt1": "The time it takes for the counter to start counting", + "opt2": "The time it takes for the counter to stop counting", + "opt3": "The time it takes for the output of one flip-flop to propagate to the input of the next flip-flop", + "opt4": "The time it takes for the clock pulse to propagate through the counter", + "correct_option": "The time it takes for the output of one flip-flop to propagate to the input of the next flip-flop", + "correct_option_index": 3 + }, + { + "qsns": "What is the drawback of using an asynchronous counter?", + "opt1": "Higher power consumption", + "opt2": "Higher cost", + "opt3": "Limited speed", + "opt4": "Limited scalability", + "correct_option": "Limited speed", + "correct_option_index": 3 + }, + { + "qsns": "Which of the following is an example of an application that requires an asynchronous counter?", + "opt1": "Digital clock", + "opt2": "Traffic light controller", + "opt3": "Computer processor", + "opt4": "Wireless router", + "correct_option": "Digital clock", + "correct_option_index": 1 + }, + { + "qsns": "What is a synchronous counter?", + "opt1": "A counter that uses synchronous clock pulses", + "opt2": "A counter that uses asynchronous clock pulses", + "opt3": "A counter that uses both synchronous and asynchronous clock pulses", + "opt4": "A counter that does not use clock pulses", + "correct_option": "A counter that uses synchronous clock pulses", + "correct_option_index": 1 + }, + { + "qsns": "What is the basic building block of a synchronous counter?", + "opt1": "Flip-flop", + "opt2": "Encoder", + "opt3": "Decoder", + "opt4": "Multiplexer", + "correct_option": "Flip-flop", + "correct_option_index": 1 + }, + { + "qsns": "How many flip-flops are required for a 4-bit synchronous counter?", + "opt1": "1", + "opt2": "2", + "opt3": "3", + "opt4": "4", + "correct_option": "4", + "correct_option_index": 4 + }, + { + "qsns": "Which type of flip-flop is used in a synchronous counter?", + "opt1": "D flip-flop", + "opt2": "T flip-flop", + "opt3": "JK flip-flop", + "opt4": "All of the above", + "correct_option": "All of the above", + "correct_option_index": 4 + }, + { + "qsns": "What is the maximum count for a 3-bit synchronous counter?", + "opt1": "4", + "opt2": "6", + "opt3": "8", + "opt4": "10", + "correct_option": "8", + "correct_option_index": 3 + }, + { + "qsns": "What is the advantage of using a synchronous counter over an asynchronous counter?", + "opt1": "Simpler design", + "opt2": "Lower power consumption", + "opt3": "Lower cost", + "opt4": "Higher speed", + "correct_option": "Higher speed", + "correct_option_index": 4 + }, + { + "qsns": "In a synchronous counter, what is the function of the clock input?", + "opt1": "To start the counting process", + "opt2": "To stop the counting process", + "opt3": "To reset the counter", + "opt4": "To synchronize the counting process", + "correct_option": "To synchronize the counting process", + "correct_option_index": 4 + }, + { + "qsns": "What is the propagation delay of a synchronous counter?", + "opt1": "The time it takes for the counter to start counting", + "opt2": "The time it takes for the counter to stop counting", + "opt3": "The time it takes for the output of one flip-flop to propagate to the input of the next flip-flop", + "opt4": "The time it takes for the clock pulse to propagate through the counter", + "correct_option": "The time it takes for the clock pulse to propagate through the counter", + "correct_option_index": 4 + }, + { + "qsns": "What is the drawback of using a synchronous counter?", + "opt1": "Higher power consumption", + "opt2": "Higher cost", + "opt3": "Limited speed", + "opt4": "Limited scalability", + "correct_option": "Higher power consumption", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following is an example of an application that requires a synchronous counter?", + "opt1": "Digital clock", + "opt2": "Traffic light controller", + "opt3": "Computer processor", + "opt4": "Wireless router", + "correct_option": "Computer processor", + "correct_option_index": 3 + }, + { + "qsns": "What is a microprocessor?", + "opt1": "A computer memory device", + "opt2": "A device that performs arithmetic and logical operations", + "opt3": "A device that stores data", + "opt4": "A device that displays data", + "correct_option": "A device that performs arithmetic and logical operations", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following is not a component of the internal architecture of a microprocessor?", + "opt1": "Arithmetic and Logic Unit (ALU)", + "opt2": "Control Unit (CU)", + "opt3": "Memory Unit", + "opt4": "Input/Output Unit (IOU)", + "correct_option": "Input/Output Unit (IOU)", + "correct_option_index": 4 + }, + { + "qsns": "What is the function of the Control Unit (CU) in a microprocessor?", + "opt1": "It performs arithmetic and logical operations", + "opt2": "It stores data", + "opt3": "It controls the flow of data within the microprocessor", + "opt4": "It interfaces with input/output devices", + "correct_option": "It controls the flow of data within the microprocessor", + "correct_option_index": 3 + }, + { + "qsns": "What is the function of the Arithmetic and Logic Unit (ALU) in a microprocessor?", + "opt1": "It controls the flow of data within the microprocessor", + "opt2": "It performs arithmetic and logical operations", + "opt3": "It stores data", + "opt4": "It interfaces with Input/output devices", + "correct_option": "It performs arithmetic and logical operations", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following is not a feature of a microprocessor?", + "opt1": "Interrupt handling capability", + "opt2": "Pipelining", + "opt3": "Cache memory", + "opt4": "Secondary storage", + "correct_option": "Secondary storage", + "correct_option_index": 4 + }, + { + "qsns": "What is pipelining in a microprocessor?", + "opt1": "The process of dividing instructions into smaller parts", + "opt2": "The process of executing multiple instructions simultaneously", + "opt3": "The process of storing frequently accessed data", + "opt4": "The process of handling interrupts", + "correct_option": "The process of executing multiple instructions simultaneously", + "correct_option_index": 2 + }, + { + "qsns": "What is the function of the Memory Management Unit (MMU) in a microprocessor?", + "opt1": "It performs arithmetic and logical operations", + "opt2": "It stores data", + "opt3": "It manages the memory resources of the system", + "opt4": "It interfaces with input/output devices", + "correct_option": "It manages the memory resources of the system", + "correct_option_index": 3 + }, + { + "qsns": "Which of the following is an example of an instruction set architecture (ISA)?", + "opt1": "HTML", + "opt2": "x86", + "opt3": "Java", + "opt4": "Python", + "correct_option": "x86", + "correct_option_index": 2 + }, + { + "qsns": "What is cache memory in a microprocessor?", + "opt1": "A type of secondary storage", + "opt2": "A type of RAM", + "opt3": "A type of memory that stores frequently accessed data", + "opt4": "A type of input/output device", + "correct_option": "A type of memory that stores frequently accessed data", + "correct_option_index": 3 + }, + { + "qsns": "Which of the following is a type of bus in a microprocessor?", + "opt1": "Address bus", + "opt2": "Data bus", + "opt3": "Control bus", + "opt4": "All of the above", + "correct_option": "All of the above", + "correct_option_index": 4 + }, + { + "qsns": "What is the function of the ALU in a microprocessor?", + "opt1": "To execute instructions", + "opt2": "To store data", + "opt3": "To perform arithmetic and logical operations", + "opt4": "To communicate with external devices", + "correct_option": "To perform arithmetic and logical operations", + "correct_option_index": 3 + }, + { + "qsns": "Which of the following is NOT a register in a microprocessor?", + "opt1": "Program Counter", + "opt2": "Instruction Register", + "opt3": "Data Memory Register", + "opt4": "Input Output Register", + "correct_option": "Input Output Register", + "correct_option_index": 4 + }, + { + "qsns": "What is the function of the Program Counter in a microprocessor?", + "opt1": "To store data", + "opt2": "To execute instructions", + "opt3": "To perform arithmetic and logical operations", + "opt4": "To store the address of the next instruction to be executed", + "correct_option": "To store the address of the next instruction to be executed", + "correct_option_index": 4 + }, + { + "qsns": "Which bus is used to transfer data between the CPU and memory in a microprocessor?", + "opt1": "Address bus", + "opt2": "Data bus", + "opt3": "Control bus", + "opt4": "All of the above", + "correct_option": "Data bus", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following is NOT a component of the Control Unit in a microprocessor?", + "opt1": "Instruction Decoder", + "opt2": "Clock Generator", + "opt3": "Address Register", + "opt4": "Control Logic", + "correct_option": "Address Register", + "correct_option_index": 3 + }, + { + "qsns": "What is the function of the Instruction Register in a microprocessor?", + "opt1": "To store data", + "opt2": "To execute instructions", + "opt3": "To perform arithmetic and logical operations", + "opt4": "To store the current instruction being executed", + "correct_option": "To store the current instruction being executed", + "correct_option_index": 4 + }, + { + "qsns": "What is the purpose of the Interrupt Controller in a microprocessor?", + "opt1": "To generate interrupts", + "opt2": "To handle interrupts", + "opt3": "To store interrupt vectors", + "opt4": "To communicate with external devices", + "correct_option": "To handle interrupts", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following is NOT a feature of a microprocessor?", + "opt1": "Multitasking", + "opt2": "Multiprocessing", + "opt3": "Multithreading", + "opt4": "Multiuser", + "correct_option": "Multiuser", + "correct_option_index": 4 + }, + { + "qsns": "Which of the following components is responsible for fetching instructions from memory in a microprocessor?", + "opt1": "Control Unit", + "opt2": "ALU", + "opt3": "Interrupt Controller", + "opt4": "Input/Output Controller", + "correct_option": "Control Unit", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following is an example of a microprocessor?", + "opt1": "Intel Core i7", + "opt2": "Nvidia GeForce RTX 3080", + "opt3": "Raspberry Pi 4", + "opt4": "Apple M1", + "correct_option": "Intel Core i7", + "correct_option_index": 1 + }, + { + "qsns": "What is Assembly Language?", + "opt1": "A high-level programming language", + "opt2": "A low-level programming language", + "opt3": "An interpreted programming language", + "opt4": "An object-oriented programming language", + "correct_option": "A low-level programming language", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following is NOT a basic data type in Assembly Language?", + "opt1": "Integer", + "opt2": "Floating-point", + "opt3": "Character", + "opt4": "Boolean", + "correct_option": "Boolean", + "correct_option_index": 4 + }, + { + "qsns": "Which of the following is the correct syntax to define a variable in Assembly Language?", + "opt1": "VAR name, data type, value", + "opt2": "name data type value", + "opt3": "data type name value", + "opt4": "NAME VAR data type, value", + "correct_option": "name data type value", + "correct_option_index": 2 + }, + { + "qsns": "What is the function of the Assembler in Assembly Language Programming?", + "opt1": "To execute Assembly Language code", + "opt2": "To translate Assembly Language code into machine code", + "opt3": "To debug Assembly Language code", + "opt4": "To optimize Assembly Language code", + "correct_option": "To translate Assembly Language code into machine code", + "correct_option_index": 2 + }, + { + "qsns": "Which register is used to store the memory address in Assembly Language Programming?", + "opt1": "AX", + "opt2": "BX", + "opt3": "CX", + "opt4": "IP", + "correct_option": "BX", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following is NOT a branch instruction in Assembly Language Programming?", + "opt1": "JMP", + "opt2": "JZ", + "opt3": "JNZ", + "opt4": "MOV", + "correct_option": "MOV", + "correct_option_index": 4 + }, + { + "qsns": "What is the function of the RET instruction in Assembly Language Programming?", + "opt1": "To return a value from a function", + "opt2": "To jump to a memory address", + "opt3": "To store a value in a register", + "opt4": "To return from a subroutine", + "correct_option": "To return from a subroutine", + "correct_option_index": 4 + }, + { + "qsns": "Which of the following is the correct syntax for the ADD instruction in Assembly Language Programming?", + "opt1": "ADD source, destination", + "opt2": "ADD destination, source", + "opt3": "ADD source", + "opt4": "ADD destination", + "correct_option": "ADD destination, source", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following is an example of an addressing mode in Assembly Language Programming?", + "opt1": "Immediate", + "opt2": "Direct", + "opt3": "Indirect", + "opt4": "All of the above", + "correct_option": "All of the above", + "correct_option_index": 4 + }, + { + "qsns": "What is the purpose of the INT instruction in Assembly Language Programming?", + "opt1": "To perform an arithmetic operation", + "opt2": "To compare two values", + "opt3": "To generate a software interrupt", + "opt4": "To move data between registers", + "correct_option": "To generate a software interrupt", + "correct_option_index": 3 + }, + { + "qsns": "What is Assembly Language Programming?", + "opt1": "A high-level programming language", + "opt2": "A low-level programming language", + "opt3": "A scripting language", + "opt4": "A markup language", + "correct_option": "A low-level programming language", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following is NOT a common Assembly Language instruction?", + "opt1": "MOV", + "opt2": "ADD", + "opt3": "PRINT", + "opt4": "JUMP", + "correct_option": "PRINT", + "correct_option_index": 3 + }, + { + "qsns": "Which instruction is used to move data from a register to memory in Assembly Language Programming?", + "opt1": "MOV", + "opt2": "ADD", + "opt3": "JMP", + "opt4": "PUSH", + "correct_option": "MOV", + "correct_option_index": 1 + }, + { + "qsns": "Which instruction is used to perform addition in Assembly Language Programming?", + "opt1": "MOV", + "opt2": "ADD", + "opt3": "JMP", + "opt4": "PUSH", + "correct_option": "ADD", + "correct_option_index": 2 + }, + { + "qsns": "Which instruction is used to jump to a specific memory location in Assembly Language Programming?", + "opt1": "MOV", + "opt2": "ADD", + "opt3": "JMP", + "opt4": "PUSH", + "correct_option": "JMP", + "correct_option_index": 3 + }, + { + "qsns": "Which of the following is NOT a register in Assembly Language Programming?", + "opt1": "A", + "opt2": "B", + "opt3": "C", + "opt4": "D", + "correct_option": "D", + "correct_option_index": 4 + }, + { + "qsns": "Which instruction is used to compare two values in Assembly Language Programming?", + "opt1": "CMP", + "opt2": "ADD", + "opt3": "JMP", + "opt4": "PUSH", + "correct_option": "CMP", + "correct_option_index": 1 + }, + { + "qsns": "Which instruction is used to perform multiplication in Assembly Language Programming?", + "opt1": "MUL", + "opt2": "ADD", + "opt3": "JMP", + "opt4": "POP", + "correct_option": "MUL", + "correct_option_index": 1 + }, + { + "qsns": "Which instruction is used to move data from memory to a register in Assembly Language Programming?", + "opt1": "MOV", + "opt2": "ADD", + "opt3": "JMP", + "opt4": "PUSH", + "correct_option": "MOV", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following is NOT a common Assembly Language Directive?", + "opt1": "DB", + "opt2": "DW", + "opt3": "DS", + "opt4": "INPUT", + "correct_option": "INPUT", + "correct_option_index": 4 + }, + { + "qsns": "Which type of memory is used for long-term storage of data and programs even when the power is turned off?", + "opt1": "Primary Memory", + "opt2": "Secondary Memory", + "opt3": "Cache Memory", + "opt4": "Virtual Memory", + "correct_option": "Secondary Memory", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following is a type of non-volatile memory?", + "opt1": "Dynamic RAM (DRAM)", + "opt2": "Static RAM (SRAM)", + "opt3": "Flash Memory", + "opt4": "Synchronous DRAM (SDRAM)", + "correct_option": "Flash Memory", + "correct_option_index": 3 + }, + { + "qsns": "Which type of memory is used as an extension of primary memory when there is not enough space to store all the necessary programs and data?", + "opt1": "Primary Memory", + "opt2": "Secondary Memory", + "opt3": "Cache Memory", + "opt4": "Virtual Memory", + "correct_option": "Virtual Memory", + "correct_option_index": 4 + }, + { + "qsns": "Which type of memory has the fastest access time and is located closest to the CPU in the memory hierarchy?", + "opt1": "Primary Memory", + "opt2": "Secondary Memory", + "opt3": "Cache Memory", + "opt4": "Virtual Memory", + "correct_option": "Cache Memory", + "correct_option_index": 3 + }, + { + "qsns": "Which of the following is a type of Double Data Rate (DDR) synchronous dynamic RAM (SDRAM)?", + "opt1": "DDR2 SDRAM", + "opt2": "DDR3 SDRAM", + "opt3": "DDR5 SDRAM", + "opt4": "All of the above", + "correct_option": "All of the above", + "correct_option_index": 4 + }, + { + "qsns": "What is the main difference between primary and secondary memory?", + "opt1": "Primary memory is faster than secondary memory", + "opt2": "Secondary memory is faster than primary memory", + "opt3": "Primary memory is volatile while secondary memory is non-volatile", + "opt4": "Secondary memory is volatile while primary memory is non-volatile", + "correct_option": "Primary memory is volatile while secondary memory is non-volatile", + "correct_option_index": 3 + }, + { + "qsns": "Which of the following is NOT a type of primary memory?", + "opt1": "ROM", + "opt2": "RAM", + "opt3": "Cache", + "opt4": "Hard Disk Drive", + "correct_option": "Hard Disk Drive", + "correct_option_index": 4 + }, + { + "qsns": "Which of the following is NOT a type of secondary memory?", + "opt1": "Hard Disk Drive", + "opt2": "Solid State Drive", + "opt3": "USB Drive", + "opt4": "CPU Cache", + "correct_option": "CPU Cache", + "correct_option_index": 4 + }, + { + "qsns": "Which memory device has the fastest access time in a microprocessor system?", + "opt1": "RAM", + "opt2": "ROM", + "opt3": "Cache", + "opt4": "Hard Disk Drive", + "correct_option": "Cache", + "correct_option_index": 3 + }, + { + "qsns": "Which of the following is NOT a characteristic of volatile memory?", + "opt1": "It is faster than non-volatile memory", + "opt2": "It requires constant power to retain data", + "opt3": "It is used for long-term storage", + "opt4": "It is typically smaller in capacity than non-volatile memory", + "correct_option": "It is used for long-term storage", + "correct_option_index": 3 + }, + { + "qsns": "Which of the following is NOT a characteristic of non-volatile memory?", + "opt1": "It retains data even when power is removed", + "opt2": "It is typically used for long-term storage", + "opt3": "It is slower than volatile memory", + "opt4": "It is larger in capacity than volatile memory", + "correct_option": "It is larger in capacity than volatile memory", + "correct_option_index": 4 + }, + { + "qsns": "Which of the following is NOT a level of cache in a microprocessor system?", + "opt1": "L1", + "opt2": "L2", + "opt3": "L3", + "opt4": "L4", + "correct_option": "L4", + "correct_option_index": 4 + }, + { + "qsns": "Which of the following is NOT a type of ROM?", + "opt1": "PROM", + "opt2": "EPROM", + "opt3": "EEPROM", + "opt4": "DRAM", + "correct_option": "DRAM", + "correct_option_index": 4 + }, + { + "qsns": "What is an interrupt service routine (ISR) in a microprocessor?", + "opt1": "A software routine that responds to a specific interrupt", + "opt2": "A hardware circuit that triggers an interrupt", + "opt3": "A type of memory used for storing interrupt data", + "opt4": "A type of instruction that modifies the contents of a register", + "correct_option": "A software routine that responds to a specific interrupt", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following statements is true about the execution of an ISR?", + "opt1": "It always starts from the beginning of the program", + "opt2": "It always resumes from the point where the interrupted program left off", + "opt3": "It may start from the beginning or resume from the point where the interrupted program left off, depending on microprocessor architecture", + "opt4": "It never resumes from the point where the interrupted program left off", + "correct_option": "It may start from the beginning or resume from the point where the interrupted program left off, depending on microprocessor architecture", + "correct_option_index": 3 + }, + { + "qsns": "What is the purpose of saving the context of the interrupted program in an ISR?", + "opt1": "To allow the ISR to modify the state of the interrupted program", + "opt2": "To resume execution of the interrupted program after the ISR is finished", + "opt3": "To allow the ISR to save data for future use", + "opt4": "To allow the ISR to execute faster", + "correct_option": "To resume execution of the interrupted program after the ISR is finished", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following statements is true about the priority of an ISR?", + "opt1": "The highest priority ISR is always executed first", + "opt2": "ISRs are executed in the order they are received", + "opt3": "The lowest priority ISR is always executed first", + "opt4": "ISRs are executed in the order of their priority", + "correct_option": "The highest priority ISR is always executed first", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following statements is true about re-entrant ISRs?", + "opt1": "They cannot be interrupted by other ISRs", + "opt2": "They can be interrupted by other ISRs", + "opt3": "They can only be called by other ISRs", + "opt4": "They can only be called by the main program", + "correct_option": "They can be interrupted by other ISRs", + "correct_option_index": 2 + }, + { + "qsns": "What is the purpose of an exit routine in an ISR?", + "opt1": "To terminate the ISR", + "opt2": "To clear the interrupt flag", + "opt3": "To restore the context of the interrupted program", + "opt4": "To store data for future use", + "correct_option": "To restore the context of the interrupted program", + "correct_option_index": 3 + }, + { + "qsns": "Which of the following statements is true about nested ISRs?", + "opt1": "They cannot occur in a microprocessor", + "opt2": "They occur when an ISR is triggered while another ISR is being serviced", + "opt3": "They occur when two ISRs are triggered simultaneously", + "opt4": "They occur when an ISR takes longer than expected to execute", + "correct_option": "They occur when an ISR is triggered while another ISR is being serviced", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following statements is true about the use of global variables in ISRs?", + "opt1": "Global variables should not be used in ISRs", + "opt2": "Global variables are safe to use in ISRs", + "opt3": "Global variables should only be used in re-entrant ISRs", + "opt4": "Global variables should only be used in high-priority ISRs", + "correct_option": "Global variables should not be used in ISRs", + "correct_option_index": 1 + }, + { + "qsns": "What is the purpose of a spinlock in an ISR?", + "opt1": "To prevent other ISRs from executing while the current ISR is running", + "opt2": "To allow other ISRs to execute while the current ISR is running", + "opt3": "To synchronize access to shared resources", + "opt4": "To optimize the performance of the ISR", + "correct_option": "To synchronize access to shared resources", + "correct_option_index": 3 + }, + { + "qsns": "What is an interrupt service routine (ISR)?", + "opt1": "A program that triggers an interrupt", + "opt2": "A program that executes when an interrupt is triggered", + "opt3": "A program that disables interrupts", + "opt4": "A program that clears interrupt flags", + "correct_option": "A program that executes when an interrupt is triggered", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following is not a common task performed by an ISR?", + "opt1": "Reading data from an I/O device", + "opt2": "Updating the interrupt enable flag", + "opt3": "Saving and restoring the processor state", + "opt4": "Clearing the interrupt flag", + "correct_option": "Updating the interrupt enable flag", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following statements is true about the stack in an ISR?", + "opt1": "The stack is not used in an ISR", + "opt2": "The stack is used to store data received from an I/O device", + "opt3": "The stack is used to store the return address and processor state", + "opt4": "The stack is used to store data that will be written to memory", + "correct_option": "The stack is used to store the return address and processor state", + "correct_option_index": 3 + }, + { + "qsns": "What is the purpose of the return from interrupt (RTI) instruction?", + "opt1": "To return control to the ISR after an interrupt", + "opt2": "To return control to the main program after an interrupt", + "opt3": "To clear the interrupt flag", + "opt4": "To save the processor state and interrupt enable flag", + "correct_option": "To return control to the main program after an interrupt", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following is an example of a non-maskable interrupt (NMI)?", + "opt1": "Keyboard interrupt", + "opt2": "Timer interrupt", + "opt3": "Power failure interrupt", + "opt4": "DMA interrupt", + "correct_option": "Power failure interrupt", + "correct_option_index": 3 + }, + { + "qsns": "Which of the following statements is true about nested interrupts?", + "opt1": "They are not allowed in most microprocessors", + "opt2": "They occur when an ISR triggers another interrupt", + "opt3": "They occur when multiple interrupts are triggered simultaneously", + "opt4": "They occur when an ISR takes too long to execute", + "correct_option": "They occur when an ISR triggers another interrupt", + "correct_option_index": 2 + }, + { + "qsns": "What is the purpose of the interrupt enable flag in an ISR?", + "opt1": "To indicate that an interrupt has occurred", + "opt2": "To enable or disable interrupts", + "opt3": "To store the address of an ISR", + "opt4": "To clear the interrupt flag", + "correct_option": "To enable or disable interrupts", + "correct_option_index": 2 + }, + { + "qsns": "What is interrupt processing in a microprocessor?", + "opt1": "The process of interrupting a running program", + "opt2": "The process of handling an interrupt request from an external device", + "opt3": "The process of prioritizing interrupts", + "opt4": "The process of executing the interrupt service routine", + "correct_option": "The process of handling an interrupt request from an external device", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following is a common method of handling multiple interrupts in a microprocessor?", + "opt1": "Polling", + "opt2": "Queuing", + "opt3": "Sorting", + "opt4": "Multiplexing", + "correct_option": "Polling", + "correct_option_index": 1 + }, + { + "qsns": "What is the purpose of an interrupt vector in a microprocessor?", + "opt1": "To store the interrupt priority levels", + "opt2": "To store the addresses of the interrupt service routines", + "opt3": "To store the status of the interrupt flag", + "opt4": "To store the current program counter", + "correct_option": "To store the addresses of the interrupt service routines", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following statements is true about the interrupt priority levels in a microprocessor?", + "opt1": "Lower priority levels have higher priority", + "opt2": "Higher priority levels have higher priority", + "opt3": "The priority levels are not important in interrupt processing", + "opt4": "The priority levels are determined by the external devices", + "correct_option": "Higher priority levels have higher priority", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following is a disadvantage of using the polling method for interrupt processing?", + "opt1": "It is slower than other methods", + "opt2": "It requires more hardware resources", + "opt3": "It may cause a delay in responding to interrupts", + "opt4": "It may cause errors in the interrupt processing", + "correct_option": "It may cause a delay in responding to interrupts", + "correct_option_index": 3 + }, + { + "qsns": "What is the purpose of the interrupt enable bit in a microprocessor?", + "opt1": "To enable the interrupt processing", + "opt2": "To disable the interrupt processing", + "opt3": "To enable the interrupt request from external devices", + "opt4": "To disable the interrupt request from external devices", + "correct_option": "To enable the interrupt processing", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following is an advantage of using the interrupt method for interrupt processing?", + "opt1": "It requires less hardware resources", + "opt2": "It is faster than other methods", + "opt3": "It does not cause a delay in responding to interrupts", + "opt4": "It does not require interrupt vectors", + "correct_option": "It does not cause a delay in responding to interrupts", + "correct_option_index": 3 + }, + { + "qsns": "What is interrupt processing in a microprocessor?", + "opt1": "The process of generating interrupts", + "opt2": "The process of handling interrupts", + "opt3": "The process of disabling interrupts", + "opt4": "The process of prioritizing interrupts", + "correct_option": "The process of handling interrupts", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following statements is true about interrupt processing time?", + "opt1": "It is always shorter than the interrupt response time", + "opt2": "It is always longer than the interrupt response time", + "opt3": "It is equal to the interrupt response time", + "opt4": "It depends on the complexity of the interrupt handling routine", + "correct_option": "It depends on the complexity of the interrupt handling routine", + "correct_option_index": 4 + }, + { + "qsns": "What is the purpose of an interrupt vector table?", + "opt1": "To store the priority of each interrupt", + "opt2": "To store the memory location of the interrupt service routine (ISR) for each interrupt", + "opt3": "To store the interrupt mask for each interrupt", + "opt4": "To store the status of each interrupt", + "correct_option": "To store the memory location of the interrupt service routine (ISR) for each interrupt", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following statements is true about interrupt latency?", + "opt1": "It is the time between the occurrence of an interrupt and the start of the ISR", + "opt2": "It is the time between the start of the ISR and the end of the ISR", + "opt3": "It is the time between the end of the ISR and the resumption of the interrupted program", + "opt4": "It is the time between the occurrence of an interrupt and the resumption of the interrupted program", + "correct_option": "It is the time between the occurrence of an interrupt and the start of the ISR", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following statements is true about interrupt nesting?", + "opt1": "It is the process of triggering multiple interrupts simultaneously", + "opt2": "It is the process of handling interrupts in the order they are received", + "opt3": "It is the process of disabling interrupts while an ISR is being executed", + "opt4": "It is the process of handling an interrupt while another ISR is being executed", + "correct_option": "It is the process of handling an interrupt while another ISR is being executed", + "correct_option_index": 4 + }, + { + "qsns": "What is the purpose of an interrupt mask in a microprocessor?", + "opt1": "To enable or disable interrupts", + "opt2": "To prioritize interrupts", + "opt3": "To store the status of interrupts", + "opt4": "To store the memory location of ISRs", + "correct_option": "To enable or disable interrupts", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following statements is true about interrupt handling in a multitasking environment?", + "opt1": "Interrupts should be enabled while a task is executing", + "opt2": "Interrupts should be disabled while a task is executing", + "opt3": "Interrupts should be ignored in a multitasking environment", + "opt4": "Interrupts should be prioritized based on the task being executed", + "correct_option": "Interrupts should be enabled while a task is executing", + "correct_option_index": 1 + }, + { + "qsns": "What is the purpose of an interrupt acknowledgment signal?", + "opt1": "To enable or disable an interrupt", + "opt2": "To acknowledge the occurrence of an interrupt", + "opt3": "To trigger an interrupt", + "opt4": "To prioritize interrupts", + "correct_option": "To acknowledge the occurrence of an interrupt", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following statements is true about edge-triggered interrupts?", + "opt1": "They are triggered by the presence of a signal for a specified period of time", + "opt2": "They are triggered by the rising or falling edge of a signal", + "opt3": "They are triggered by the amplitude of a signal", + "opt4": "They are triggered by the frequency of a signal", + "correct_option": "They are triggered by the rising or falling edge of a signal", + "correct_option_index": 2 + }, + { + "qsns": "What is the purpose of an interrupt request (IRQ) line in a microprocessor?", + "opt1": "To trigger an interrupt", + "opt2": "To acknowledge an interrupt", + "opt3": "To prioritize interrupts", + "opt4": "To enable or disable interrupts", + "correct_option": "To trigger an interrupt", + "correct_option_index": 1 + }, + { + "qsns": "What is the purpose of the interrupt acknowledge signal in a microprocessor?", + "opt1": "To request an interrupt from an external device", + "opt2": "To acknowledge receipt of an interrupt request from an external device", + "opt3": "To enable the interrupt processing", + "opt4": "To disable the interrupt processing", + "correct_option": "To acknowledge receipt of an interrupt request from an external device", + "correct_option_index": 2 + }, + { + "qsns": "What is an interrupt vector table in a microprocessor?", + "opt1": "A table that stores the priority of each interrupt", + "opt2": "A table that stores the address of each ISR", + "opt3": "A table that stores the context of the interrupted program", + "opt4": "A table that stores the status of each interrupt flag", + "correct_option": "A table that stores the address of each ISR", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following statements is true about interrupt latency?", + "opt1": "It refers to the time required for an ISR to execute", + "opt2": "It refers to the time required for an interrupt to be detected and an ISR to be initiated", + "opt3": "It refers to the time required for the interrupted program to resume after an ISR is finished", + "opt4": "It refers to the time required for the microprocessor to switch between different ISRs", + "correct_option": "It refers to the time required for an interrupt to be detected and an ISR to be initiated", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following statements is true about nested interrupts?", + "opt1": "They occur when an ISR is triggered while another ISR is being serviced", + "opt2": "They occur when two ISRs are triggered simultaneously", + "opt3": "They occur when an ISR takes longer than expected to execute", + "opt4": "They never occur in a microprocessor", + "correct_option": "They occur when an ISR is triggered while another ISR is being serviced", + "correct_option_index": 1 + }, + { + "qsns": "What is the purpose of an interrupt enable flag in a microprocessor?", + "opt1": "To disable all interrupts", + "opt2": "To enable all interrupts", + "opt3": "To enable specific interrupts", + "opt4": "To disable specific interrupts", + "correct_option": "To enable all interrupts", + "correct_option_index": 2 + }, + { + "qsns": "What is the purpose of a maskable interrupt in a microprocessor?", + "opt1": "To disable all interrupts", + "opt2": "To enable all interrupts", + "opt3": "To enable specific interrupts", + "opt4": "To disable specific interrupts", + "correct_option": "To disable specific interrupts", + "correct_option_index": 4 + }, + { + "qsns": "Which of the following statements is true about non-maskable interrupts?", + "opt1": "They can be disabled by software", + "opt2": "They can be disabled by hardware", + "opt3": "They can be ignored by the microprocessor", + "opt4": "They cannot be ignored by the microprocessor", + "correct_option": "They cannot be ignored by the microprocessor", + "correct_option_index": 4 + }, + { + "qsns": "What is the purpose of an interrupt acknowledge signal in a microprocessor?", + "opt1": "To acknowledge the occurrence of an interrupt", + "opt2": "To acknowledge the receipt of an interrupt request", + "opt3": "To clear the interrupt enable flag", + "opt4": "To clear the interrupt flag", + "correct_option": "To acknowledge the receipt of an interrupt request", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following statements is true about edge-triggered interrupts?", + "opt1": "They are triggered by a change in the interrupt request signal", + "opt2": "They are triggered by the level of the interrupt request signal", + "opt3": "They are not used in microprocessors", + "opt4": "They are always maskable interrupts", + "correct_option": "They are triggered by a change in the interrupt request signal", + "correct_option_index": 1 + }, + { + "qsns": "What is the purpose of a vectored interrupt in a microprocessor?", + "opt1": "To enable multiple interrupts to be serviced simultaneously", + "opt2": "To prioritize interrupts based on their importance", + "opt3": "To reduce interrupt latency", + "opt4": "To allow each interrupt to have a unique ISR address", + "correct_option": "To allow each interrupt to have a unique ISR address", + "correct_option_index": 4 + } +] diff --git a/frontend/public/data/books/ch3.json b/frontend/public/data/books/ch3.json index 10ba99c..4e9bc95 100644 --- a/frontend/public/data/books/ch3.json +++ b/frontend/public/data/books/ch3.json @@ -1,3591 +1,3521 @@ [ - { - "qsns": "What is an Identifier in C programming?", - "opt1": "A keyword that has a specific meaning in the language", - "opt2": "A symbol used to represent a variable, function, or structure in a C program", - "opt3": "A constant value that cannot be changed during program execution", - "opt4": "None of above", - "correct_option": "A symbol used to represent a variable, function, or structure in a C program", - "correct_option_index": 2 - }, - { - "qsns": "What is a constant in C programming?", - "opt1": "A keyword that has a specific meaning in the language", - "opt2": "A symbol used to represent a variable, function, or structure in a C program", - "opt3": "A value that cannot be changed during program execution", - "opt4": "All of above", - "correct_option": "A value that cannot be changed during program execution", - "correct_option_index": 3 - }, - { - "qsns": "What is an operator in C programming?", - "opt1": "A symbol used to perform operations on variables, constants, and expressions", - "opt2": "A symbol used to define variables, functions, and structures", - "opt3": "A symbol used to control the flow of a program", - "opt4": "None of above", - "correct_option": "A symbol used to perform operations on variables, constants, and expressions", - "correct_option_index": 1 - }, - { - "qsns": "What are some examples of operators in C programming?", - "opt1": "Arithmetic, relational, logical, and bitwise operators", - "opt2": "Assignment, conditional, and loop operators", - "opt3": "Structural, pointer, and memory operators", - "opt4": "All of above", - "correct_option": "Arithmetic, relational, logical, and bitwise operators", - "correct_option_index": 1 - }, - { - "qsns": "What is a keyword in C programming?", - "opt1": "A symbol used to perform operations on variables, constants, and expressions", - "opt2": "A symbol used to define variables, functions, and structures", - "opt3": "A word that has a specific meaning in the language and cannot be used as an identifier", - "opt4": "None of above", - "correct_option": "A word that has a specific meaning in the language and cannot be used as an identifier", - "correct_option_index": 3 - }, - { - "qsns": "What are some examples of keywords in C programming?", - "opt1": "int, float, char, if, for, while", - "opt2": "add, subtract, multiply, divide, modulus", - "opt3": "input, output, execute, stop", - "opt4": "Both a and b", - "correct_option": "int, float, char, if, for, while", - "correct_option_index": 1 - }, - { - "qsns": "What is the difference between keywords and identifiers in C programming?", - "opt1": "Keywords have a specific meaning in the language, while identifiers do not", - "opt2": "Keywords are used to define variables, functions, and structures, while identifiers are not", - "opt3": "Keywords cannot be used as identifiers, while identifiers can be used as keywords", - "opt4": "All of above", - "correct_option": "Keywords cannot be used as identifiers, while identifiers can be used as keywords", - "correct_option_index": 3 - }, - { - "qsns": "What is the difference between constants and variables in C programming?", - "opt1": "Constants have a fixed value that cannot be changed, while variables have a value that can be changed", - "opt2": "Constants are used to perform operations, while variables are used to store data", - "opt3": "Constants are used to define functions, while variables are used to define structures", - "opt4": "All of above", - "correct_option": "Constants have a fixed value that cannot be changed, while variables have a value that can be changed", - "correct_option_index": 1 - }, - { - "qsns": "What is the difference between an operator and a function in C programming?", - "opt1": "An operator performs an operation on one or more operands, while a function performs a set of operations on input data", - "opt2": "A function performs an operation on one or more operands, while an operator performs a set of operations on input data", - "opt3": "Operators are written in uppercase, while functions are not", - "opt4": "Functions are written in uppercase, while operators are not", - "correct_option": "An operator performs an operation on one or more operands, while a function performs a set of operations on input data", - "correct_option_index": 1 - }, - { - "qsns": "What is the purpose of a semicolon at the end of a statement in C programming?", - "opt1": "To indicate the end of a statement", - "opt2": "To separate two statements", - "opt3": "To define a function", - "opt4": "To declare a variable", - "correct_option": "To indicate the end of a statement", - "correct_option_index": 1 - }, - { - "qsns": "What is a token in C programming?", - "opt1": "A symbol or keyword used in a C program", - "opt2": "A variable used in a C program", - "opt3": "A function used in a C program", - "opt4": "A structure used in a C program", - "correct_option": "A symbol or keyword used in a C program", - "correct_option_index": 1 - }, - { - "qsns": "What are some examples of tokens in C programming?", - "opt1": "Keywords, identifiers, constants, and operators", - "opt2": "Functions, loops, and conditionals", - "opt3": "Variables, arrays, and structures", - "opt4": "All of above", - "correct_option": "Keywords, identifiers, constants, and operators", - "correct_option_index": 1 - }, - { - "qsns": "What is the purpose of arithmetic operators in C programming?", - "opt1": "To perform basic mathematical operations such as addition, subtraction, multiplication, and division", - "opt2": "To compare values and make decisions based on the comparison results", - "opt3": "To manipulate bits and perform bitwise operations on binary data", - "opt4": "All of above", - "correct_option": "To perform basic mathematical operations such as addition, subtraction, multiplication, and division", - "correct_option_index": 1 - }, - { - "qsns": "What is the purpose of relational operators in C programming?", - "opt1": "To perform basic mathematical operations such as addition, subtraction, multiplication, and division", - "opt2": "To compare values and make decisions based on the comparison results", - "opt3": "To manipulate bits and perform bitwise operations on binary data", - "opt4": "All of above", - "correct_option": "To compare values and make decisions based on the comparison results", - "correct_option_index": 2 - }, - { - "qsns": "What is the purpose of logical operators in C programming?", - "opt1": "To perform basic mathematical operations such as addition, subtraction, multiplication, and division", - "opt2": "To compare values and make decisions based on the comparison results", - "opt3": "To perform logical operations such as AND, OR, and NOT on boolean values", - "opt4": "All of above", - "correct_option": "To perform logical operations such as AND, OR, and NOT on boolean values", - "correct_option_index": 3 - }, - { - "qsns": "What is the purpose of bitwise operators in C programming?", - "opt1": "To perform basic mathematical operations such as addition, subtraction, multiplication, and division", - "opt2": "To compare values and make decisions based on the comparison results", - "opt3": "To manipulate bits and perform bitwise operations on binary data", - "opt4": "All of above", - "correct_option": "To manipulate bits and perform bitwise operations on binary data", - "correct_option_index": 3 - }, - { - "qsns": "What is the difference between the logical AND operator (&&) and the bitwise AND operator (&) in C programming?", - "opt1": "The logical AND operator performs a logical operation on boolean values, while the bitwise AND operator performs a bitwise operation on binary data", - "opt2": "The logical AND operator performs a bitwise operation on boolean values, while the bitwise AND operator performs a logical operation on binary data", - "opt3": "There is no difference between the logical AND operator and the bitwise AND operator in C programming", - "opt4": "All of above", - "correct_option": "The logical AND operator performs a logical operation on boolean values, while the bitwise AND operator performs a bitwise operation on binary data", - "correct_option_index": 1 - }, - { - "qsns": "What is the difference between the logical OR operator (||) and the bitwise OR operator (|) in C programming?", - "opt1": "The logical OR operator performs a logical operation on boolean values, while the bitwise OR operator performs a bitwise operation on binary data", - "opt2": "The logical OR operator performs a bitwise operation on boolean values, while the bitwise OR operator performs a logical operation on binary data", - "opt3": "There is no difference between the logical OR operator and the bitwise OR operator in C programming", - "opt4": "All of above", - "correct_option": "The logical OR operator performs a logical operation on boolean values, while the bitwise OR operator performs a bitwise operation on binary data", - "correct_option_index": 1 - }, - { - "qsns": "What is the result of the following expression: 5 & 6", - "opt1": "5", - "opt2": "6", - "opt3": "4", - "opt4": "1", - "correct_option": "4", - "correct_option_index": 3 - }, - { - "qsns": "What is the result of the following expression: 5<6", - "opt1": "0", - "opt2": "1", - "opt3": "True", - "opt4": "False", - "correct_option": "1", - "correct_option_index": 2 - }, - { - "qsns": "What is the purpose of the conditional operator (?:) in C programming?", - "opt1": "To perform a conditional operation based on the value of a condition", - "opt2": "To perform arithmetic operations", - "opt3": "To declare a variable", - "opt4": "To assign a value to a variable", - "correct_option": "To perform a conditional operation based on the value of a condition", - "correct_option_index": 1 - }, - { - "qsns": "What is the difference between the bitwise AND operator (&) and the bitwise OR operator (|) in C programming?", - "opt1": "The bitwise AND operator performs a bitwise AND operation, while the bitwise OR operator performs a bitwise OR operation", - "opt2": "The bitwise OR operator performs a bitwise AND operation, while the bitwise AND operator performs a bitwise OR operation", - "opt3": "Bitwise AND operators are written in uppercase, while bitwise OR operators are not", - "opt4": "Bitwise OR operators are written in uppercase, while bitwise AND operators are not", - "correct_option": "The bitwise AND operator performs a bitwise AND operation, while the bitwise OR operator performs a bitwise OR operation", - "correct_option_index": 1 - }, - { - "qsns": "What is the purpose of the assignment operator (=) in C programming?", - "opt1": "To compare two values", - "opt2": "To assign a value to a variable", - "opt3": "To perform mathematical operations", - "opt4": "To declare a variable", - "correct_option": "To assign a value to a variable", - "correct_option_index": 2 - }, - { - "qsns": "What is the result of the following expression: 5 + 7 * 2", - "opt1": "19", - "opt2": "26", - "opt3": "16", - "opt4": "9", - "correct_option": "19", - "correct_option_index": 1 - }, - { - "qsns": "What is the difference between formatted and unformatted input/output in C programming?", - "opt1": "Formatted input/output is used to input/output data in a specific format, while unformatted input/output is used to input/output data without any format.", - "opt2": "Formatted input/output is used to input/output data without any format, while unformatted input/output is used to input/output data in a specific format.", - "opt3": "There is no difference between formatted and unformatted input/output in C programming.", - "opt4": "None of above", - "correct_option": "Formatted input/output is used to input/output data in a specific format, while unformatted input/output is used to input/output data without any format.", - "correct_option_index": 1 - }, - { - "qsns": "What are some examples of formatted input functions in C programming?", - "opt1": "scanf(), gets(), and fscanf()", - "opt2": "getchar(), gets(), and fgetc()", - "opt3": "printf(), puts(), and fprintf()", - "opt4": "All of above", - "correct_option": "scanf(), gets(), and fscanf()", - "correct_option_index": 1 - }, - { - "qsns": "What are some examples of formatted output functions in C programming?", - "opt1": "scanf(), gets(), and fscanf()", - "opt2": "getchar(), gets(), and fgetc()", - "opt3": "printf(), puts(), and fprintf()", - "opt4": "All of above", - "correct_option": "printf(), puts(), and fprintf()", - "correct_option_index": 3 - }, - { - "qsns": "What is the purpose of the scanf() function in C programming?", - "opt1": "To output data to the standard output device", - "opt2": "To input data from the standard input device", - "opt3": "To input/output data to/from a file", - "opt4": "All of above", - "correct_option": "To input data from the standard input device", - "correct_option_index": 2 - }, - { - "qsns": "What is the purpose of the printf() function in C programming?", - "opt1": "To output data to the standard output device", - "opt2": "To input data from the standard input device", - "opt3": "To input/output data to/from a file", - "opt4": "All of above", - "correct_option": "To output data to the standard output device", - "correct_option_index": 1 - }, - { - "qsns": "What is the difference between the gets() and scanf() functions in C programming?", - "opt1": "The gets() function inputs data without any format, while the scanf() function inputs data in a specific format.", - "opt2": "The gets() function inputs data in a specific format, while the scanf() function inputs data without any format.", - "opt3": "There is no difference between the gets() and scanf() functions in C programming.", - "opt4": "Both a and b", - "correct_option": "The gets() function inputs data without any format, while the scanf() function inputs data in a specific format.", - "correct_option_index": 1 - }, - { - "qsns": "What is the difference between the puts() and printf() functions in C programming?", - "opt1": "The puts() function outputs data without any format, while the printf() function outputs data in a specific format.", - "opt2": "The puts() function outputs data in a specific format, while the printf() function outputs data without any format.", - "opt3": "There is no difference between the puts() and printf() functions in C programming.", - "opt4": "Both a and b", - "correct_option": "The puts() function outputs data without any format, while the printf() function outputs data in a specific format.", - "correct_option_index": 1 - }, - { - "qsns": "What is the purpose of the fscanf() function in C programming?", - "opt1": "To input data from the standard input device", - "opt2": "To output data to the standard output device", - "opt3": "To input/output data to/from a file", - "opt4": "All of above", - "correct_option": "To input/output data to/from a file", - "correct_option_index": 3 - }, - { - "qsns": "What is the standard library function used to read a string from the user in C?", - "opt1": "scanf()", - "opt2": "gets()", - "opt3": "fgets()", - "opt4": "sprintf()", - "correct_option": "gets()", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following functions is used to print a string to the screen in C?", - "opt1": "puts()", - "opt2": "printf()", - "opt3": "fprintf()", - "opt4": "getchar()", - "correct_option": "puts()", - "correct_option_index": 1 - }, - { - "qsns": "What is the difference between scanf() and fscanf() in C?", - "opt1": "scanf() reads from the standard input and fscanf() reads from a file", - "opt2": "scanf() reads from a file and fscanf() reads from the standard input", - "opt3": "Both functions have the same functionality", - "opt4": "None of the above", - "correct_option": "scanf() reads from the standard input and fscanf() reads from a file", - "correct_option_index": 1 - }, - { - "qsns": "What is the purpose of the %d format specifier in the printf() function in C?", - "opt1": "To print an integer", - "opt2": "To print a string", - "opt3": "To print a float", - "opt4": "To print a double", - "correct_option": "To print an integer", - "correct_option_index": 1 - }, - { - "qsns": "What is the purpose of the %f format specifier in the printf() function in C?", - "opt1": "To print an integer", - "opt2": "To print a string", - "opt3": "To print a float", - "opt4": "To print a double", - "correct_option": "To print a float", - "correct_option_index": 3 - }, - { - "qsns": "What is the purpose of the %lf format specifier in the printf() function in C?", - "opt1": "To print a string", - "opt2": "To print an integer", - "opt3": "To print a float", - "opt4": "To print a double", - "correct_option": "To print a double", - "correct_option_index": 4 - }, - { - "qsns": "Which of the following functions is used to read a single character from the standard input in C?", - "opt1": "scanf()", - "opt2": "gets()", - "opt3": "getchar()", - "opt4": "fgetc()", - "correct_option": "getchar()", - "correct_option_index": 3 - }, - { - "qsns": "What is the purpose of the fopen() function in C?", - "opt1": "To open a file for reading", - "opt2": "To open a file for writing", - "opt3": "To open a file for reading and writing", - "opt4": "None of the above", - "correct_option": "To open a file for reading", - "correct_option_index": 1 - }, - { - "qsns": "What is the purpose of the fclose() function in C?", - "opt1": "To close a file that was opened for reading", - "opt2": "To close a file that was opened for writing", - "opt3": "To close a file that was opened for reading and writing", - "opt4": "None of the above", - "correct_option": "To close a file that was opened for reading and writing", - "correct_option_index": 3 - }, - { - "qsns": "What is the difference between fprintf() and sprintf() in C?", - "opt1": "fprintf() writes to a file and sprintf() writes to a string", - "opt2": "fprintf() writes to a string and sprintf() writes to a file", - "opt3": "Both functions have the same functionality", - "opt4": "None of the above", - "correct_option": "fprintf() writes to a file and sprintf() writes to a string", - "correct_option_index": 1 - }, - { - "qsns": "What is the purpose of the if statement in C programming?", - "opt1": "To execute a block of code only if a certain condition is met", - "opt2": "To execute a block of code only if a certain condition is not met", - "opt3": "To execute a block of code if a certain condition is true", - "opt4": "None of the above", - "correct_option": "To execute a block of code if a certain condition is true", - "correct_option_index": 3 - }, - { - "qsns": "What is the purpose of the else statement in C programming?", - "opt1": "To execute a block of code regardless of the condition", - "opt2": "To execute a block of code if a condition is false", - "opt3": "To terminate the program if a condition is false", - "opt4": "To skip a block of code if a condition is true", - "correct_option": "To execute a block of code if a condition is false", - "correct_option_index": 2 - }, - { - "qsns": "What is the purpose of the switch statement in C programming?", - "opt1": "To execute one of several blocks of code based on the value of an expression", - "opt2": "To execute all of the blocks of code in a switch statement", - "opt3": "To execute only the first block of code in a switch statement", - "opt4": "None of the above", - "correct_option": "To execute one of several blocks of code based on the value of an expression", - "correct_option_index": 1 - }, - { - "qsns": "What is the purpose of the break statement in C programming?", - "opt1": "To exit a loop", - "opt2": "To exit a switch statement", - "opt3": "To exit a function", - "opt4": "To exit the program", - "correct_option": "To exit a switch statement", - "correct_option_index": 2 - }, - { - "qsns": "What is the purpose of the continue statement in C programming?", - "opt1": "To exit a loop", - "opt2": "To exit a switch statement", - "opt3": "To skip an iteration of a loop", - "opt4": "To exit the program", - "correct_option": "To skip an iteration of a loop", - "correct_option_index": 3 - }, - { - "qsns": "What is the purpose of the for loop in C programming?", - "opt1": "To execute a block of code a specified number of times", - "opt2": "To execute a block of code indefinitely", - "opt3": "To execute a block of code based on a condition", - "opt4": "None of the above", - "correct_option": "To execute a block of code a specified number of times", - "correct_option_index": 1 - }, - { - "qsns": "What is the purpose of the while loop in C programming?", - "opt1": "To execute a block of code a specified number of times", - "opt2": "To execute a block of code indefinitely until a condition is met", - "opt3": "To execute a block of code based on a condition", - "opt4": "None of the above", - "correct_option": "To execute a block of code indefinitely until a condition is met", - "correct_option_index": 2 - }, - { - "qsns": "What is an if statement in C programming used for?", - "opt1": "To execute a block of code only if a certain condition is met", - "opt2": "To execute a block of code only if a certain condition is not met", - "opt3": "To execute a block of code if a certain condition is met, and execute another block of code if the condition is not met", - "opt4": "To declare variables", - "correct_option": "To execute a block of code if a certain condition is met, and execute another block of code if the condition is not met", - "correct_option_index": 3 - }, - { - "qsns": "What is the purpose of the do-while loop in C programming?", - "opt1": "To execute a block of code a specified number of times", - "opt2": "To execute a block of code indefinitely until a condition is met", - "opt3": "To execute a block of code at least once, and then repeatedly until a condition is met", - "opt4": "None of the above", - "correct_option": "To execute a block of code at least once, and then repeatedly until a condition is met", - "correct_option_index": 3 - }, - { - "qsns": "What is the difference between the for loop and the while loop in C programming?", - "opt1": "The for loop is used for a specified number of iterations, while the while loop is used until a condition is met", - "opt2": "The for loop is used until a condition is met, while the while loop is used for a specified number of iterations", - "opt3": "Both loops have the same functionality", - "opt4": "None of the above", - "correct_option": "The for loop is used for a specified number of iterations, while the while loop is used until a condition is met", - "correct_option_index": 1 - }, - { - "qsns": "What does the \"if\" statement in C do?", - "opt1": "Executes a block of code if a condition is true", - "opt2": "Executes a block of code regardless of the condition", - "opt3": "Skips a block of code if a condition is false", - "opt4": "Terminates the program if a condition is true", - "correct_option": "Executes a block of code if a condition is true", - "correct_option_index": 1 - }, - { - "qsns": "What is the syntax of the \"if\" statement in C?", - "opt1": "if (condition) { statements }", - "opt2": "if condition { statements }", - "opt3": "if {condition} (statements)", - "opt4": "if (condition) { statements };", - "correct_option": "if (condition) { statements }", - "correct_option_index": 1 - }, - { - "qsns": "What is the purpose of the \"else\" statement in C?", - "opt1": "To execute a block of code if a condition is false", - "opt2": "To execute a block of code regardless of the condition", - "opt3": "To execute a block of code if the condition in the if statement is true", - "opt4": "To execute a block of code if the condition in the if statement is false", - "correct_option": "To execute a block of code if the condition in the if statement is false", - "correct_option_index": 4 - }, - { - "qsns": "What is the syntax of the \"switch\" statement in C?", - "opt1": "switch (expression) { case constant-expression: statements; break; default: statements; }", - "opt2": "switch expression { case constant-expression: statements; break; default: statements; }", - "opt3": "switch (expression) case constant-expression: statements; break; default: statements;", - "opt4": "switch expression case constant-expression: statements; break; default: statements;", - "correct_option": "switch (expression) { case constant-expression: statements; break; default: statements; }", - "correct_option_index": 1 - }, - - { - "qsns": "What is the index of the first element in a one-dimensional array in C?", - "opt1": "0", - "opt2": "1", - "opt3": "2", - "opt4": "3", - "correct_option": "0", - "correct_option_index": 1 - }, - { - "qsns": "What is the syntax for declaring a two-dimensional integer array of size 3x4 in C?", - "opt1": "int arr[3][4];", - "opt2": "int arr[4][3];", - "opt3": "int arr[3,4];", - "opt4": "int arr[4,3];", - "correct_option": "int arr[3][4];", - "correct_option_index": 1 - }, - { - "qsns": "How can you access the value of the 3rd element of the 2nd row of a two-dimensional array in C?", - "opt1": "arr[1][2]", - "opt2": "arr[2][1]", - "opt3": "arr[2][3]", - "opt4": "arr[3][2]", - "correct_option": "arr[1][2]", - "correct_option_index": 1 - }, - { - "qsns": "What is the difference between a one-dimensional array and a two-dimensional array in C?", - "opt1": "A one-dimensional array has one row and multiple columns, whereas a two-dimensional array has multiple rows and multiple columns.", - "opt2": "A one-dimensional array has multiple rows and multiple columns, whereas a two-dimensional array has one row and multiple columns.", - "opt3": "A one-dimensional array has multiple rows and one column, whereas a two-dimensional array has one row and one column.", - "opt4": "A one-dimensional array has one row and one column, whereas a two-dimensional array has multiple rows and multiple columns.", - "correct_option": "A one-dimensional array has one row and multiple columns, whereas a two-dimensional array has multiple rows and multiple columns.", - "correct_option_index": 1 - }, - { - "qsns": "What is the syntax for initializing a one-dimensional array in C?", - "opt1": "int arr[] = {1,2,3,4,5};", - "opt2": "int arr[5] = (1,2,3,4,5);", - "opt3": "int arr[5] = {1,2,3,4};", - "opt4": "int arr = {1, 2, 3, 4, 5};", - "correct_option": "int arr[] = {1,2,3,4,5};", - "correct_option_index": 1 - }, - { - "qsns": "How can you find the number of elements in a one-dimensional array in C?", - "opt1": "sizeof(arr)", - "opt2": "sizeof(arr[0])", - "opt3": "sizeof(arr)/sizeof(arr[0])", - "opt4": "sizeof(arr[])/sizeof(arr[0])", - "correct_option": "sizeof(arr)/sizeof(arr[0])", - "correct_option_index": 3 - }, - { - "qsns": "What is the syntax for declaring a multidimensional array in C?", - "opt1": "int arr[][][];", - "opt2": "int arr;", - "opt3": "int arr[];", - "opt4": "int arr[...][...][...];", - "correct_option": "int arr[...][...][...];", - "correct_option_index": 4 - }, - { - "qsns": "What is the use of the strlen() function in C when working with arrays?", - "opt1": "To find the length of a one-dimensional array", - "opt2": "To find the length of a two-dimensional array", - "opt3": "To find the length of a string", - "opt4": "To find the length of a multidimensional array", - "correct_option": "To find the length of a string", - "correct_option_index": 3 - }, - { - "qsns": "What is a one-dimensional array in C?", - "opt1": "A set of values of the same data type stored in a contiguous block of memory", - "opt2": "A set of values of different data types stored in a contiguous block of memory", - "opt3": "A set of values of the same data type stored in non-contiguous memory locations", - "opt4": "A set of values of different data types stored in non-contiguous memory locations", - "correct_option": "A set of values of the same data type stored in a contiguous block of memory", - "correct_option_index": 1 - }, - { - "qsns": "How can you access the value at the third position of a one-dimensional array named \"array\"?", - "opt1": "array[2]", - "opt2": "array[3]", - "opt3": "array[0]", - "opt4": "array[1]", - "correct_option": "array[2]", - "correct_option_index": 1 - }, - { - "qsns": "What is a two-dimensional array in C?", - "opt1": "An array of arrays", - "opt2": "A set of values of the same data type stored in non-contiguous memory locations", - "opt3": "A set of values of different data types stored in a contiguous block of memory", - "opt4": "A set of values of the same data type stored in a single contiguous block of memory", - "correct_option": "An array of arrays", - "correct_option_index": 1 - }, - { - "qsns": "How can you access the value at the first row and second column of a two-dimensional array named \"array\"?", - "opt1": "array[0][1]", - "opt2": "array[1][0]", - "opt3": "array[1][2]", - "opt4": "array[2][1]", - "correct_option": "array[0][1]", - "correct_option_index": 1 - }, - { - "qsns": "What is a multidimensional array in C?", - "opt1": "An array of arrays of arrays", - "opt2": "A set of values of different data types stored in non-contiguous memory locations", - "opt3": "A set of values of the same data type stored in a single contiguous block of memory", - "opt4": "A set of values of different data types stored in a single contiguous block of memory", - "correct_option": "An array of arrays of arrays", - "correct_option_index": 1 - }, - { - "qsns": "What is the difference between a one-dimensional array and a two-dimensional array in C?", - "opt1": "A two-dimensional array has more dimensions than a one-dimensional array", - "opt2": "A one-dimensional array has more dimensions than a two-dimensional array", - "opt3": "There is no difference between a one-dimensional array and a two-dimensional array", - "opt4": "A two-dimensional array can store more values than a one-dimensional array", - "correct_option": "A two-dimensional array has more dimensions than a one-dimensional array", - "correct_option_index": 1 - }, - { - "qsns": "What is the purpose of the \"malloc\" function in C programming?", - "opt1": "To free memory", - "opt2": "To allocate memory", - "opt3": "To initialize memory", - "opt4": "To reset memory", - "correct_option": "To allocate memory", - "correct_option_index": 2 - }, - { - "qsns": "What is the purpose of the \"free\" function in C programming?", - "opt1": "To allocate memory", - "opt2": "To free memory", - "opt3": "To initialize memory", - "opt4": "To reset memory", - "correct_option": "To free memory", - "correct_option_index": 2 - }, - { - "qsns": "What is the difference between an array and a pointer in C programming?", - "opt1": "An array is a set of values stored in a contiguous block of memory, while a pointer is a variable that stores the address of another variable", - "opt2": "A pointer is a set of values stored in a contiguous block of memory, while an array is a variable that stores the address of another variable", - "opt3": "There is no difference between an array and a pointer in C programming", - "opt4": "An array is a variable that stores the address of another variable, while a pointer is a set of values stored in a contiguous block of memory", - "correct_option": "An array is a set of values stored in a contiguous block of memory, while a pointer is a variable that stores the address of another variable", - "correct_option_index": 1 - }, - { - "qsns": "What is a string in C programming?", - "opt1": "A sequence of characters enclosed in quotes", - "opt2": "An array of characters", - "opt3": "A single character", - "opt4": "None of above", - "correct_option": "An array of characters", - "correct_option_index": 2 - }, - { - "qsns": "How can you find the length of a string in C programming?", - "opt1": "By using the length() function", - "opt2": "By using the strlen() function", - "opt3": "By using the sizeof() operator", - "opt4": "None of above", - "correct_option": "By using the strlen() function", - "correct_option_index": 2 - }, - { - "qsns": "How can you concatenate two strings in C programming?", - "opt1": "By using the + operator", - "opt2": "By using the strcat() function", - "opt3": "By using the strcpy() function", - "opt4": "None of above", - "correct_option": "By using the strcat() function", - "correct_option_index": 2 - }, - { - "qsns": "What does the strcpy() function do in C programming?", - "opt1": "Copies one string to another", - "opt2": "Concatenates two strings", - "opt3": "Compares two strings", - "opt4": "None of above", - "correct_option": "Copies one string to another", - "correct_option_index": 1 - }, - { - "qsns": "What is the difference between the strcpy() and strcat() functions in C programming?", - "opt1": "strcpy() copies one string to another, while strcat() concatenates two strings", - "opt2": "strcpy() concatenates two strings, while strcat() copies one string to another", - "opt3": "Both functions copy one string to another", - "opt4": "None of above", - "correct_option": "strcpy() copies one string to another, while strcat() concatenates two strings", - "correct_option_index": 1 - }, - { - "qsns": "How can you compare two strings in C programming?", - "opt1": "By using the strcmp() function", - "opt2": "By using the strcat() function", - "opt3": "By using the strcpy() function", - "opt4": "Both a and b", - "correct_option": "By using the strcmp() function", - "correct_option_index": 1 - }, - { - "qsns": "What is the return value of the strcmp() function when two strings are equal?", - "opt1": "0", - "opt2": "1", - "opt3": "-1", - "opt4": "null", - "correct_option": "0", - "correct_option_index": 1 - }, - { - "qsns": "What is the return value of the strcmp() function when the first string is greater than the second string?", - "opt1": "0", - "opt2": "1", - "opt3": "-1", - "opt4": "null", - "correct_option": "1", - "correct_option_index": 2 - }, - { - "qsns": "What is the return value of the strcmp() function when the first string is less than the second string?", - "opt1": "0", - "opt2": "1", - "opt3": "-1", - "opt4": "null", - "correct_option": "-1", - "correct_option_index": 3 - }, - { - "qsns": "How can you reverse a string in C programming?", - "opt1": "By using the strrev() function", - "opt2": "By using a loop and swapping characters", - "opt3": "There is no built-in function to reverse a string in C programming", - "opt4": "None of above", - "correct_option": "By using a loop and swapping characters", - "correct_option_index": 2 - }, - { - "qsns": "What is the purpose of the strcat() function in C programming?", - "opt1": "To copy a string to another string.", - "opt2": "To concatenate two strings.", - "opt3": "To find the length of a string.", - "opt4": "To compare two strings.", - "correct_option": "To concatenate two strings.", - "correct_option_index": 2 - }, - { - "qsns": "What is the purpose of the strcmp() function in C programming?", - "opt1": "To copy a string to another string.", - "opt2": "To find the length of a string.", - "opt3": "To concatenate two strings.", - "opt4": "To compare two strings.", - "correct_option": "To compare two strings.", - "correct_option_index": 4 - }, - { - "qsns": "What is the purpose of the strcpy() function in C programming?", - "opt1": "To copy a string to another string.", - "opt2": "To find the length of a string.", - "opt3": "To concatenate two strings.", - "opt4": "To compare two strings.", - "correct_option": "To copy a string to another string.", - "correct_option_index": 1 - }, - { - "qsns": "What is the purpose of the strlen() function in C programming?", - "opt1": "To compare two strings.", - "opt2": "To concatenate two strings.", - "opt3": "To find the length of a string.", - "opt4": "To copy a string to another string.", - "correct_option": "To find the length of a string.", - "correct_option_index": 3 - }, - { - "qsns": "What is the purpose of the strstr() function in C programming?", - "opt1": "To find a substring in a string.", - "opt2": "To compare two strings.", - "opt3": "To find the first occurrence of a character in a string.", - "opt4": "To reverse a string.", - "correct_option": "To find a substring in a string.", - "correct_option_index": 1 - }, - { - "qsns": "How can you reverse a string in C programming?", - "opt1": "By using the strrev() function.", - "opt2": "By using a loop and swapping characters.", - "opt3": "By using the strcat() function.", - "opt4": "By using the strcmp() function.", - "correct_option": "By using a loop and swapping characters.", - "correct_option_index": 2 - }, - { - "qsns": "How can you convert a string to uppercase in C programming?", - "opt1": "By using the toupper() function.", - "opt2": "By using a loop and converting each character.", - "opt3": "By using the strcat() function.", - "opt4": "By using the strcmp() function.", - "correct_option": "By using a loop and converting each character.", - "correct_option_index": 2 - }, - { - "qsns": "How can you convert a string to lowercase in C programming?", - "opt1": "By using the tolower() function.", - "opt2": "By using a loop and converting each character.", - "opt3": "By using the strcat() function.", - "opt4": "By using the strcmp() function.", - "correct_option": "By using a loop and converting each character.", - "correct_option_index": 2 - }, - { - "qsns": "What is the purpose of the sprintf() function in C programming?", - "opt1": "To format and store a string in a buffer.", - "opt2": "To concatenate two string", - "opt3": "To find the length of a string.", - "opt4": "To compare two strings.", - "correct_option": "To format and store a string in a buffer.", - "correct_option_index": 1 - }, - { - "qsns": "What is the purpose of the sscanf() function in C programming?", - "opt1": "To read formatted input from a string.", - "opt2": "To concatenate two strings.", - "opt3": "To find the length of a string.", - "opt4": "To compare two strings.", - "correct_option": "To read formatted input from a string.", - "correct_option_index": 1 - }, - { - "qsns": "What is the output of the following code? int a = 10; int *p = &a; printf(\"%p\", p);", - "opt1": "10", - "opt2": "0", - "opt3": "Address of a", - "opt4": "Undefined", - "correct_option": "Address of a", - "correct_option_index": 3 - }, - { - "qsns": "What is the output of the following code? int a = 10; int *p = &a; printf(\"%d\", *p);", - "opt1": "10", - "opt2": "0", - "opt3": "Address of a", - "opt4": "Undefined", - "correct_option": "10", - "correct_option_index": 1 - }, - { - "qsns": "What is the correct way to declare a pointer to a character in C?", - "opt1": "char *str;", - "opt2": "char *str();", - "opt3": "char str*;", - "opt4": "char (*str)();", - "correct_option": "char *str;", - "correct_option_index": 1 - }, - { - "qsns": "What is the output of the following code? int arr[5] = {1, 2, 3, 4, 5}; int *p = arr; printf(\"%d\", *(p+3));", - "opt1": "4", - "opt2": "3", - "opt3": "5", - "opt4": "Undefined", - "correct_option": "4", - "correct_option_index": 1 - }, - { - "qsns": "What is the output of the following code? int arr[5] = {1, 2, 3, 4, 5}; int *p = arr + 2; printf(\"%d\", *(p-1));", - "opt1": "2", - "opt2": "3", - "opt3": "4", - "opt4": "Undefined", - "correct_option": "2", - "correct_option_index": 1 - }, - { - "qsns": "What is the output of the following code? int a = 10; int *p = &a; int **q = &p; printf(\"%d\", **q);", - "opt1": "10", - "opt2": "0", - "opt3": "Address of a", - "opt4": "Undefined", - "correct_option": "10", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following is a valid way to declare a pointer to an integer array of size 5?", - "opt1": "int (*arr)[5];", - "opt2": "int *arr[5];", - "opt3": "int **arr[5];", - "opt4": "int arr*[5];", - "correct_option": "int (*arr)[5];", - "correct_option_index": 1 - }, - { - "qsns": "What is the result of the following code? int arr[] = {1, 2, 3, 4}; int *p = arr + 1; printf(\"%d\", *(p--));", - "opt1": "2", - "opt2": "1", - "opt3": "3", - "opt4": "4", - "correct_option": "2", - "correct_option_index": 1 - }, - { - "qsns": "What is the result of the following code? int arr[] = {1, 2, 3, 4}; int *p = arr + 2; printf(\"%d\", *(--p));", - "opt1": "2", - "opt2": "1", - "opt3": "3", - "opt4": "4", - "correct_option": "2", - "correct_option_index": 1 - }, - { - "qsns": "What is the output of the following code? int arr[] = {1, 2, 3, 4}; int *p = arr; printf(\"%d\", *p++);", - "opt1": "1", - "opt2": "2", - "opt3": "3", - "opt4": "4", - "correct_option": "1", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following is true about pointer arithmetic in C?", - "opt1": "Addition and subtraction operations can be performed on pointers", - "opt2": "Multiplication and division operations can be performed on pointers", - "opt3": "Bitwise AND and OR operations can be performed on pointers", - "opt4": "None of the above", - "correct_option": "Addition and subtraction operations can be performed on pointers", - "correct_option_index": 1 - }, - { - "qsns": "If 'ptr' is a pointer to an integer variable, what will be the output of the following code? printf(\"%d\", ptr+1);", - "opt1": "The memory address of ptr", - "opt2": "The value of ptr", - "opt3": "The memory address of the integer variable ptr is pointing to", - "opt4": "The value of the integer variable ptr+1 is pointing to", - "correct_option": "The value of the integer variable ptr+1 is pointing to", - "correct_option_index": 4 - }, - { - "qsns": "If 'ptr' is a pointer to an integer variable, what will be the output of the following code? printf(\"%d\", *(ptr+1));", - "opt1": "The memory address of ptr", - "opt2": "The value of ptr", - "opt3": "The memory address of the integer variable ptr is pointing to", - "opt4": "The value of the integer variable ptr+1 is pointing to", - "correct_option": "The value of the integer variable ptr+1 is pointing to", - "correct_option_index": 4 - }, - { - "qsns": "What is the result of the following code? int arr[] = {1, 2, 3, 4}; int *p = arr; printf(\"%d\", *(p++));", - "opt1": "1", - "opt2": "2", - "opt3": "3", - "opt4": "4", - "correct_option": "1", - "correct_option_index": 1 - }, - { - "qsns": "What is the result of the following code? int arr[] = {1, 2, 3, 4}; int *p = arr; printf(\"%d\", *(p-2));", - "opt1": "1", - "opt2": "2", - "opt3": "3", - "opt4": "4", - "correct_option": "Undefined", - "correct_option_index": 4 - }, - { - "qsns": "What is the result of the following code? int arr[] = {1, 2, 3, 4}; int *p = arr; printf(\"%d\", *(p+4));", - "opt1": "1", - "opt2": "3", - "opt3": "4", - "opt4": "Undefined", - "correct_option": "Undefined", - "correct_option_index": 4 - }, - { - "qsns": "What is the result of the following code? int a = 5, b = 10; int *p1 = &a; int *p2 = &b; int *temp; temp = p1; p1 = p2; p2 = temp; printf(\"%d %d\", *p1, *p2);", - "opt1": "5 10", - "opt2": "10 5", - "opt3": "Undefined", - "opt4": "Error", - "correct_option": "10 5", - "correct_option_index": 2 - }, - { - "qsns": "What is the output of the following code? int a = 10; int *p = &a; (*p)++; printf(\"%d\", a);", - "opt1": "9", - "opt2": "10", - "opt3": "11", - "opt4": "Undefined", - "correct_option": "11", - "correct_option_index": 3 - }, - { - "qsns": "What is the result of the following code? int arr[] = {1, 2, 3, 4}; int *p = arr + 2; printf(\"%d\", p[-1]);", - "opt1": "1", - "opt2": "2", - "opt3": "3", - "opt4": "4", - "correct_option": "2", - "correct_option_index": 2 - }, - { - "qsns": "What is the result of the following code? int arr[] = {1, 2, 3, 4, 5}; int *p = arr + 2; printf(\"%d\", *p);", - "opt1": "1", - "opt2": "2", - "opt3": "3", - "opt4": "4", - "correct_option": "3", - "correct_option_index": 3 - }, - { - "qsns": "What is the data type of the pointer variable in the following code? char *p;", - "opt1": "char", - "opt2": "int", - "opt3": "float", - "opt4": "double", - "correct_option": "char", - "correct_option_index": 1 - }, - { - "qsns": "What is the result of the following code? int x = 10, y = 20, z; int *p = &x, *q = &y; z = *p + (*q)++; printf(\"%d %d %d\", x, y, z);", - "opt1": "11 20 30", - "opt2": "10 21 31", - "opt3": "11 21 30", - "opt4": "10 20 31", - "correct_option": "10 21 30", - "correct_option_index": 3 - }, - { - "qsns": "What is the result of the following code? int arr[] = {1, 2, 3, 4, 5}; int *p = &arr[3]; printf(\"%d\", *(p-2));", - "opt1": "1", - "opt2": "2", - "opt3": "3", - "opt4": "4", - "correct_option": "2", - "correct_option_index": 2 - }, - { - "qsns": "What is the result of the following code? int arr[] = {1, 2, 3, 4, 5}; int *p = arr; printf(\"%d\", *(++p));", - "opt1": "1", - "opt2": "2", - "opt3": "3", - "opt4": "4", - "correct_option": "2", - "correct_option_index": 2 - }, - { - "qsns": "What is the result of the following code? int arr[] = {1, 2, 3, 4, 5}; int *p = arr; printf(\"%d\", *(p+2));", - "opt1": "1", - "opt2": "2", - "opt3": "3", - "opt4": "4", - "correct_option": "3", - "correct_option_index": 3 - }, - - { - "qsns": "Which of the following is true about structures in C?", - "opt1": "Structures can contain only variables of the same data type", - "opt2": "Structures can contain variables of different data types", - "opt3": "Structures cannot be passed as function arguments", - "opt4": "Structures cannot be returned by functions", - "correct_option": "Structures can contain variables of different data types", - "correct_option_index": 2 - }, - { - "qsns": "How do you declare a structure in C?", - "opt1": "struct {name, age};", - "opt2": "struct (name, age);", - "opt3": "struct person { char name[20]; int age; };", - "opt4": "struct {person name, person age};", - "correct_option": "struct person { char name[20]; int age; };", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following is used to access the members of a structure?", - "opt1": "&", - "opt2": ".", - "opt3": ":", - "opt4": "->", - "correct_option": ".", - "correct_option_index": 2 - }, - { - "qsns": "How do you assign values to members of a structure in C?", - "opt1": "using the assignment operator", - "opt2": "using the dot operator", - "opt3": "using the arrow operator ->", - "opt4": "using the asterisk operator*", - "correct_option": "using the assignment operator", - "correct_option_index": 1 - }, - { - "qsns": "What is the purpose of typedef in C structures?", - "opt1": "to declare a new variable", - "opt2": "to define a new data type", - "opt3": "to initialize a structure", - "opt4": "to allocate memory for a structure", - "correct_option": "to define a new data type", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following statements is true regarding the size of a structure in C?", - "opt1": "The size of a structure is the sum of the sizes of its members", - "opt2": "The size of a structure is always 4 bytes", - "opt3": "The size of a structure is the size of its largest member", - "opt4": "The size of a structure is the size of its smallest member", - "correct_option": "The size of a structure is the sum of the sizes of its members", - "correct_option_index": 1 - }, - { - "qsns": "What is the operator used to dynamically allocate memory for a structure in C?", - "opt1": ".", - "opt2": "&", - "opt3": "->", - "opt4": "malloc()", - "correct_option": "malloc()", - "correct_option_index": 4 - }, - { - "qsns": "What is the operator used to deallocate memory allocated for a structure in C?", - "opt1": "&", - "opt2": ".", - "opt3": "free()", - "opt4": "calloc()", - "correct_option": "free()", - "correct_option_index": 3 - }, - { - "qsns": "What is the purpose of a union in C?", - "opt1": "to combine multiple structures", - "opt2": "to create a new data type", - "opt3": "to declare a variable", - "opt4": "to share the same memory location for different data types", - "correct_option": "to share the same memory location for different data types", - "correct_option_index": 4 - }, - { - "qsns": "Which of the following is true about nested structures in C?", - "opt1": "Nested structures are not allowed in C", - "opt2": "Nested structures can only contain variables of the same data type", - "opt3": "Nested structures can be defined inside another structure", - "opt4": "Nested structures can only contain pointers to other structures", - "correct_option": "Nested structures can be defined inside another structure", - "correct_option_index": 3 - }, - { - "qsns": "What is a structure in C programming?", - "opt1": "A data type that groups variables of different types", - "opt2": "A data type that groups variables of the same type", - "opt3": "A data type that groups variables of the same size", - "opt4": "A data type that groups variables of different sizes", - "correct_option": "A data type that groups variables of different types", - "correct_option_index": 1 - }, - { - "qsns": "What is the correct syntax to access a member of a nested structure?", - "opt1": "outer_structure.inner_structure.member_name", - "opt2": "inner_structure.member_name.outer_structure", - "opt3": "member_name.outer_structure.inner_structure", - "opt4": "None of the above", - "correct_option": "outer_structure.inner_structure.member_name", - "correct_option_index": 1 - }, - { - "qsns": "What is the size of an empty structure in C programming?", - "opt1": "0 bytes", - "opt2": "1 byte", - "opt3": "4 bytes", - "opt4": "8 bytes", - "correct_option": "0 bytes", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following is not a valid way to initialize a structure variable in C programming?", - "opt1": "struct book b = {\"C Programming\", \"John Doe\", 100};", - "opt2": "struct book b = {.name = \"C Programming\", .author = \"John Doe\", .price = 100};", - "opt3": "struct book b = {\"C Programming\", price=100};", - "opt4": "struct book b; b = {\"C Programming\", \"John Doe\", 100};", - "correct_option": "struct book b; b = {\"C Programming\", \"John Doe\", 100};", - "correct_option_index": 4 - }, - { - "qsns": "What is a nested structure in C programming?", - "opt1": "A structure that has no members", - "opt2": "A structure that is defined inside another structure", - "opt3": "A structure that has only one member", - "opt4": "A structure that has members of different data types", - "correct_option": "A structure that is defined inside another structure", - "correct_option_index": 2 - }, - { - "qsns": "In C programming, which keyword is used to define a structure?", - "opt1": "typedef", - "opt2": "define", - "opt3": "structdef", - "opt4": "struct", - "correct_option": "struct", - "correct_option_index": 4 - }, - { - "qsns": "Which of the following statements is true about passing a structure to a function in C programming?", - "opt1": "Structures cannot be passed to a function.", - "opt2": "Structures are passed by value to a function.", - "opt3": "Structures are passed by reference to a function.", - "opt4": "Structures are passed as arrays to a function.", - "correct_option": "Structures are passed by value to a function.", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following is not a valid way to declare a pointer to a structure in C programming?", - "opt1": "struct *book b;", - "opt2": "struct book *b;", - "opt3": "typedef struct book *bookptr;", - "opt4": "typedef struct book booktype;", - "correct_option": "struct *book b;", - "correct_option_index": 1 - }, - { - "qsns": "What is the keyword used to access the address of a structure variable in C programming?", - "opt1": "&", - "opt2": "*", - "opt3": "#", - "opt4": "$", - "correct_option": "&", - "correct_option_index": 1 - }, - { - "qsns": "What is the main difference between a structure and a union in C programming?", - "opt1": "A structure allows for multiple members to be accessed at once, while a union only allows for one member to be accessed at a time.", - "opt2": "A union allows for multiple members to be accessed at once, while a structure only allows for one member to be accessed at a time.", - "opt3": "There is no difference between a structure and a union in C programming.", - "opt4": "None of above", - "correct_option": "A structure allows for multiple members to be accessed at once, while a union only allows for one member to be accessed at a time.", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following is the correct way to access a structure member using a pointer to a structure?", - "opt1": "structure_pointer->member_name", - "opt2": "*structure_pointer.member_name", - "opt3": "structure_pointer.member_name", - "opt4": "None of the above", - "correct_option": "structure_pointer->member_name", - "correct_option_index": 1 - }, - { - "qsns": "What is the difference between passing a structure by value and passing a structure by pointer in C?", - "opt1": "When a structure is passed by value, any modifications made to it in the function are lost when the function returns. When a structure is passed by pointer, the modifications are retained.", - "opt2": "When a structure is passed by value, any modifications made to it in the function are retained when the function returns. When a structure is passed by pointer, the modifications are lost.", - "opt3": "There is no difference between passing a structure by value and passing a structure by pointer in C.", - "opt4": "None of the above", - "correct_option": "When a structure is passed by value, any modifications made to it in the function are lost when the function returns. When a structure is passed by pointer, the modifications are retained.", - "correct_option_index": 1 - }, - { - "qsns": "In a structure, what is the default visibility of its members?", - "opt1": "Private", - "opt2": "Public", - "opt3": "Protected", - "opt4": "None of the above", - "correct_option": "Public", - "correct_option_index": 2 - }, - { - "qsns": "In a union, how much memory is allocated for the union itself?", - "opt1": "The size of the largest member", - "opt2": "The size of all members combined", - "opt3": "The size of the smallest member", - "opt4": "The size of the union is not allocated in memory", - "correct_option": "The size of the largest member", - "correct_option_index": 1 - }, - { - "qsns": "What is the main advantage of using a union over a structure?", - "opt1": "It uses less memory", - "opt2": "It is easier to declare and use", - "opt3": "It can hold more types of data", - "opt4": "It is faster to access its members", - "correct_option": "It uses less memory", - "correct_option_index": 1 - }, - { - "qsns": "In a union, can two or more members be accessed simultaneously?", - "opt1": "Yes, always", - "opt2": "Yes, but only if they are of the same type", - "opt3": "No, only one member can be accessed at a time", - "opt4": "Yes, but only if the member is a pointer", - "correct_option": "No, only one member can be accessed at a time", - "correct_option_index": 3 - }, - { - "qsns": "What is the purpose of declaring a bit field in a structure?", - "opt1": "To save memory", - "opt2": "To improve performance", - "opt3": "To store binary data", - "opt4": "To limit the number of possible values for a member", - "correct_option": "To save memory", - "correct_option_index": 1 - }, - { - "qsns": "Can a structure or union contain a member that is itself a structure or union?", - "opt1": "Yes, there is no restriction on the type of members", - "opt2": "No, structures and unions cannot contain other structures or unions", - "opt3": "Yes, but only if the member is declared as static", - "opt4": "None of above", - "correct_option": "Yes, there is no restriction on the type of members", - "correct_option_index": 1 - }, - { - "qsns": "How do you access a member of a structure or union using a pointer?", - "opt1": "-> operator", - "opt2": ". operator", - "opt3": "& operator", - "opt4": "* operator", - "correct_option": "-> operator", - "correct_option_index": 1 - }, - { - "qsns": "In a union, what is the value of a member that was not explicitly set?", - "opt1": "Zero", - "opt2": "Garbage value", - "opt3": "Undefined", - "opt4": "The value of the previous member", - "correct_option": "Garbage value", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following statements is true about the size of a structure or union in C programming?", - "opt1": "The size of a structure or union is the sum of the sizes of its members", - "opt2": "The size of a structure or union is always a multiple of the size of its largest member", - "opt3": "The size of a structure or union depends on the alignment requirements of its members", - "opt4": "The size of a structure or union is always equal to the size of its largest member", - "correct_option": "The size of a structure or union depends on the alignment requirements of its members", - "correct_option_index": 3 - }, - { - "qsns": "What is the difference between a structure and a union in C programming?", - "opt1": "A structure allows for multiple members to be accessed at once, while a union only allows for one member to be accessed at a time.", - "opt2": "A union allows for multiple members to be accessed at once, while a structure only allows for one member to be accessed at a time.", - "opt3": "There is no difference between a structure and a union in C programming.", - "opt4": "None of above", - "correct_option": "A structure allows for multiple members to be accessed at once, while a union only allows for one member to be accessed at a time.", - "correct_option_index": 1 - }, - { - "qsns": "What is the size of a structure in C programming?", - "opt1": "The size of a structure is equal to the sum of the sizes of its members.", - "opt2": "The size of a structure is equal to the size of its largest member.", - "opt3": "The size of a structure is equal to the size of its smallest member.", - "opt4": "None of above", - "correct_option": "The size of a structure is equal to the sum of the sizes of its members.", - "correct_option_index": 1 - }, - { - "qsns": "How do you access a member of a structure in C programming?", - "opt1": "Using the dot (.) operator.", - "opt2": "Using the arrow (->) operator.", - "opt3": "Using the asterisk (*) operator.", - "opt4": "None of above", - "correct_option": "Using the dot (.) operator.", - "correct_option_index": 1 - }, - { - "qsns": "What is the keyword used to define a structure in C programming?", - "opt1": "struct", - "opt2": "union", - "opt3": "typedef", - "opt4": "None of above", - "correct_option": "struct", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following statements about unions is true in C programming?", - "opt1": "Unions can contain members of different types.", - "opt2": "Unions cannot contain members.", - "opt3": "Unions can only contain members of the same type.", - "opt4": "None of above", - "correct_option": "Unions can contain members of different types.", - "correct_option_index": 1 - }, - { - "qsns": "What is the difference between a structure and a typedef struct in C programming?", - "opt1": "There is no difference.", - "opt2": "Typedef struct can only be used to define new data types.", - "opt3": "Typedef struct is a faster way to create a new structure type.", - "opt4": "None of above", - "correct_option": "Typedef struct is a faster way to create a new structure type.", - "correct_option_index": 3 - }, - { - "qsns": "Can a structure contain a pointer to itself in C programming?", - "opt1": "Yes", - "opt2": "No", - "opt3": "It depends on the compiler used.", - "opt4": "It depends on Interpreter used.", - "correct_option": "Yes", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following statements is true about the alignment of structure members in C programming?", - "opt1": "Members of a structure are always aligned to the nearest byte boundary.", - "opt2": "Members of a structure are aligned based on their size and type.", - "opt3": "Members of a structure are not aligned in C programming.", - "opt4": "None of above", - "correct_option": "Members of a structure are aligned based on their size and type.", - "correct_option_index": 2 - }, - { - "qsns": "What is the purpose of a bit-field in a structure in C programming?", - "opt1": "To allow the structure to store more data than its size would normally allow.", - "opt2": "To create a member that is only one bit in size.", - "opt3": "To allow the structure to be accessed in a bit-wise manner.", - "opt4": "None of above", - "correct_option": "To create a member that is only one bit in size.", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following is an example of a valid structure declaration in C programming?", - "opt1": "struct person {char name[50]; int age;}", - "opt2": "struct person (char name[50]; int age;)", - "opt3": "person_struct {char name[50]; int age;}", - "opt4": "None of above", - "correct_option": "struct person {char name[50]; int age;}", - "correct_option_index": 1 - }, - - { - "qsns": "What is the syntax for declaring an array of structures in C?", - "opt1": "struct array_name[size];", - "opt2": "array_name[size] struct;", - "opt3": "array_name[size] struct;", - "opt4": "struct[size] array_name;", - "correct_option": "struct array_name[size];", - "correct_option_index": 1 - }, - { - "qsns": "In C programming, how do you access a particular member of a structure within an array of structures?", - "opt1": "array_name[index].member_name", - "opt2": "member_name.array_name[index]", - "opt3": "struct.array_name[index].member_name", - "opt4": "member_name[index].array_name", - "correct_option": "array_name[index].member_name", - "correct_option_index": 1 - }, - { - "qsns": "What is the purpose of using an array of structures in C?", - "opt1": "To group similar data types together in a single entity.", - "opt2": "To group different data types together in a single entity.", - "opt3": "To make the code easier to read and maintain.", - "opt4": "To create a single variable that can hold multiple values.", - "correct_option": "To group similar data types together in a single entity.", - "correct_option_index": 1 - }, - { - "qsns": "How do you initialize an array of structures in C?", - "opt1": "By setting each member of the array individually.", - "opt2": "By setting the values of the first member of the array, which automatically sets the values of the rest of the members.", - "opt3": "By using a loop to set the values of each member of the array.", - "opt4": "By using a pointer to set the values of each member of the array.", - "correct_option": "By setting each member of the array individually.", - "correct_option_index": 1 - }, - { - "qsns": "What is the maximum number of dimensions that an array of structures can have in C?", - "opt1": "One", - "opt2": "Two", - "opt3": "Three", - "opt4": "There is no limit", - "correct_option": "There is no limit", - "correct_option_index": 4 - }, - { - "qsns": "What is the purpose of using a typedef with an array of structures in C?", - "opt1": "To make it easier to declare variables of that type.", - "opt2": "To make the code more readable.", - "opt3": "To make it easier to access the members of the array.", - "opt4": "To create a new data type.", - "correct_option": "To create a new data type.", - "correct_option_index": 4 - }, - { - "qsns": "Which of the following is a valid way to access a member of a structure within an array of structures in C?", - "opt1": "array_name.member_name[index]", - "opt2": "array_name[index].member_name", - "opt3": "member_name.array_name[index]", - "opt4": "struct.array_name[index].member_name", - "correct_option": "array_name[index].member_name", - "correct_option_index": 2 - }, - { - "qsns": "How do you declare a pointer to an array of structures in C?", - "opt1": "struct *array_name[size];", - "opt2": "struct (*array_name)[size];", - "opt3": "struct *array_name[size];", - "opt4": "struct (*array_name)[size];", - "correct_option": "struct (*array_name)[size];", - "correct_option_index": 4 - }, - { - "qsns": "In C programming, how do you access a particular member of a structure within a pointer to an array of structures?", - "opt1": "pointer_name->member_name[index]", - "opt2": "pointer_name[index]->member_name", - "opt3": "pointer_name.member_name[index]", - "opt4": "pointer_name[index].member_name", - "correct_option": "pointer_name[index].member_name", - "correct_option_index": 4 - }, - { - "qsns": "How do you dynamically allocate memory for an array of structures in C?", - "opt1": "By using the malloc() function.", - "opt2": "By using the calloc() function.", - "opt3": "By using the realloc() function.", - "opt4": "By using the free() function.", - "correct_option": "By using the malloc() function.", - "correct_option_index": 1 - }, - { - "qsns": "How do you declare an array of structures in C?", - "opt1": "struct Array = {...}", - "opt2": "struct *Array = {...}", - "opt3": "struct Array[] = {...}", - "opt4": "struct Array {...}", - "correct_option": "struct Array[] = {...}", - "correct_option_index": 3 - }, - { - "qsns": "What is the correct syntax for accessing the member variable \"age\" of the first structure in an array of structures named \"people\"?", - "opt1": "people.age[0]", - "opt2": "people[0].age", - "opt3": "people.age->0", - "opt4": "age[0].people", - "correct_option": "people[0].age", - "correct_option_index": 2 - }, - { - "qsns": "What is the maximum number of elements that can be stored in an array of structures?", - "opt1": "There is no maximum number", - "opt2": "The maximum number is determined by the size of each element", - "opt3": "The maximum number is 1024", - "opt4": "The maximum number is determined by the amount of available memory", - "correct_option": "The maximum number is determined by the amount of available memory", - "correct_option_index": 4 - }, - { - "qsns": "Which of the following is a valid way to initialize an array of structures in C?", - "opt1": "struct person[] = {{1, \"John\"}, {2, \"Jane\"}}", - "opt2": "struct person[] = { 1, \"John\" , {2, \"Jane\"}, {3, \"Bob\"}}", - "opt3": "struct person = [1] = {1, \"John\"}, [2]= {2, \"Jane\"}", - "opt4": "All of the above", - "correct_option": "struct person[] = {{1, \"John\"}, {2, \"Jane\"}}", - "correct_option_index": 1 - }, - { - "qsns": "What is the size of the following structure? struct student { char name[50]; int age; float gpa; };", - "opt1": "54 bytes", - "opt2": "60 bytes", - "opt3": "62 bytes", - "opt4": "64 bytes", - "correct_option": "60 bytes", - "correct_option_index": 2 - }, - { - "qsns": "Which operator is used to access a member of a structure through a pointer to the structure?", - "opt1": ".", - "opt2": "->", - "opt3": "*", - "opt4": "&", - "correct_option": "->", - "correct_option_index": 2 - }, - { - "qsns": "What is the correct syntax for declaring a pointer to a structure?", - "opt1": "struct *p;", - "opt2": "struct p;", - "opt3": "struct pointer;", - "opt4": "struct person *p;", - "correct_option": "struct person *p;", - "correct_option_index": 4 - }, - { - "qsns": "How can you dynamically allocate memory for an array of structures in C?", - "opt1": "struct array = (struct *) malloc(sizeof(struct) * n);", - "opt2": "struct array = (struct**) malloc(n * sizeof(struct));", - "opt3": "struct array = (struct*) malloc(n);", - "opt4": "struct array = (struct*) malloc(sizeof(struct));", - "correct_option": "struct array = (struct *) malloc(sizeof(struct) * n);", - "correct_option_index": 1 - }, - { - "qsns": "How can you access the last element in an array of structures with n elements?", - "opt1": "arr[n]", - "opt2": "arr[n-1]", - "opt3": "arr.last", - "opt4": "arr.end", - "correct_option": "arr[n-1]", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following is an advantage of using an array of structures instead of multiple individual structures?", - "opt1": "Easier to manage", - "opt2": "Easier to pass to functions", - "opt3": "Requires less memory", - "opt4": "All of the above", - "correct_option": "All of the above", - "correct_option_index": 4 - }, - { - "qsns": "What is the syntax for passing a structure to a function in C?", - "opt1": "function(struct s)", - "opt2": "function(struct *s)", - "opt3": "function(*s)", - "opt4": "function(&s)", - "correct_option": "function(struct s)", - "correct_option_index": 1 - }, - { - "qsns": "How do you declare a function that takes a structure as an argument in C?", - "opt1": "void myFunction(struct myStruct);", - "opt2": "void myFunction(struct myStruct *);", - "opt3": "void myFunction(*myStruct);", - "opt4": "void myFunction(&myStruct);", - "correct_option": "void myFunction(struct myStruct);", - "correct_option_index": 1 - }, - { - "qsns": "Can you pass an array of structures to a function in C?", - "opt1": "No, C does not support passing arrays of structures to functions", - "opt2": "Yes, you can pass an array of structures to a function using a pointer", - "opt3": "Yes, you can pass an array of structures to a function by value", - "opt4": "Yes, you can pass an array of structures to a function using the & operator", - "correct_option": "Yes, you can pass an array of structures to a function using a pointer", - "correct_option_index": 2 - }, - { - "qsns": "How does passing a structure to a function by reference (i.e. using a pointer) differ from passing it by value?", - "opt1": "Passing by reference creates a copy of the structure, while passing by value does not", - "opt2": "Passing by reference allows the function to modify the original structure, while passing by value does not", - "opt3": "Passing by reference is slower than passing by value", - "opt4": "Passing by reference is not allowed in C", - "correct_option": "Passing by reference allows the function to modify the original structure, while passing by value does not", - "correct_option_index": 2 - }, - { - "qsns": "What is the advantage of passing a structure to a function by reference instead of by value?", - "opt1": "Passing by reference is faster", - "opt2": "Passing by reference allows the function to modify the original structure", - "opt3": "Passing by reference is easier to write", - "opt4": "Passing by reference requires less memory", - "correct_option": "Passing by reference is faster", - "correct_option_index": 1 - }, - { - "qsns": "How do you access a structure member inside a function that takes a pointer to the structure as an argument?", - "opt1": "s.member", - "opt2": "(*s).member", - "opt3": "&s->member", - "opt4": "s->member", - "correct_option": "s->member", - "correct_option_index": 4 - }, - { - "qsns": "What is the correct way to pass a structure to a function by reference?", - "opt1": "function(struct s)", - "opt2": "function(struct *s)", - "opt3": "function(&s)", - "opt4": "function(*s)", - "correct_option": "function(&s)", - "correct_option_index": 3 - }, - { - "qsns": "Can a function return a structure in C?", - "opt1": "Yes, by using the & operator", - "opt2": "Yes, but it requires passing a pointer to the structure as an argument", - "opt3": "Yes, by returning a pointer to the structure", - "opt4": "No, C does not support returning structures from functions", - "correct_option": "Yes, by returning a pointer to the structure", - "correct_option_index": 3 - }, - { - "qsns": "How do you initialize a structure variable inside a function?", - "opt1": "struct s = {...}", - "opt2": "s = {...}", - "opt3": "Pass by value", - "opt4": "Pass by reference", - "correct_option": "struct s = {...}", - "correct_option_index": 1 - }, - { - "qsns": "What is the advantage of passing a structure by pointer to a function in C?", - "opt1": "It reduces the size of the structure", - "opt2": "It increases the speed of the program", - "opt3": "It allows the function to modify the original structure", - "opt4": "None of the above", - "correct_option": "It allows the function to modify the original structure", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following is the correct syntax to pass a structure by value to a function in C?", - "opt1": "function_name(&structure_variable)", - "opt2": "function_name(*structure_variable)", - "opt3": "function_name(structure_variable)", - "opt4": "function_name(structure_pointer)", - "correct_option": "function_name(structure_variable)", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following is the correct syntax to pass a structure by reference to a function in C?", - "opt1": "function_name(&structure_variable)", - "opt2": "function_name(*structure_variable)", - "opt3": "function_name(structure_variable)", - "opt4": "function_name(structure_pointer)", - "correct_option": "function_name(&structure_variable)", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following is the correct syntax to pass a structure by pointer to a function in C?", - "opt1": "function_name(&structure_variable)", - "opt2": "function_name(structure_variable)", - "opt3": "function_name(structure_pointer)", - "opt4": "function_name(*structure_variable)", - "correct_option": "function_name(structure_pointer)", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following is the correct way to access a structure member using a pointer to a structure?", - "opt1": "structure_pointer->member_name", - "opt2": "*structure_pointer.member_name", - "opt3": "structure_pointer.member_name", - "opt4": "None of the above", - "correct_option": "structure_pointer->member_name", - "correct_option_index": 1 - }, - { - "qsns": "What is the difference between passing a structure by value and passing a structure by pointer in C?", - "opt1": "When a structure is passed by value, any modifications made to it in the function are lost when the function returns. When a structure is passed by pointer, the modifications are retained.", - "opt2": "When a structure is passed by value, any modifications made to it in the function are retained when the function returns. When a structure is passed by pointer, the modifications are lost.", - "opt3": "There is no difference between passing a structure by value and passing a structure by pointer in C.", - "opt4": "None of the above", - "correct_option": "When a structure is passed by value, any modifications made to it in the function are lost when the function returns. When a structure is passed by pointer, the modifications are retained.", - "correct_option_index": 1 - }, - { - "qsns": "What is a namespace in C++?", - "opt1": "It is a block of code that is used to group related variables and functions", - "opt2": "It is a feature that allows a class to inherit from multiple base classes", - "opt3": "It is a mechanism for managing the scope of identifiers in large programs", - "opt4": "It is a type of loop in C++", - "correct_option": "It is a mechanism for managing the scope of identifiers in large programs", - "correct_option_index": 3 - }, - { - "qsns": "Which keyword is used to define a namespace in C++?", - "opt1": "namespace", - "opt2": "define", - "opt3": "namespace scope", - "opt4": "using namespace", - "correct_option": "namespace", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following statements is true regarding namespaces in C++?", - "opt1": "You can have multiple namespaces with the same name in the same program", - "opt2": "Namespaces can only contain function declarations", - "opt3": "You can define a namespace within a function", - "opt4": "The contents of a namespace can be accessed using the dot operator", - "correct_option": "You can have multiple namespaces with the same name in the same program", - "correct_option_index": 1 - }, - { - "qsns": "What is the purpose of using the using keyword with namespaces in C++?", - "opt1": "To create an alias for a namespace", - "opt2": "To bring all the members of a namespace into the current scope", - "opt3": "To hide certain members of a namespace", - "opt4": "To define a new namespace within an existing namespace", - "correct_option": "To bring all the members of a namespace into the current scope", - "correct_option_index": 2 - }, - { - "qsns": "What is the scope resolution operator in C++?", - "opt1": ":", - "opt2": "::", - "opt3": "->", - "opt4": "#", - "correct_option": "::", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following is true regarding the scope resolution operator in C++?", - "opt1": "It is used to access the members of a namespace", - "opt2": "It is used to access the members of a class", - "opt3": "It is used to access the elements of an array", - "opt4": "It is used to access the elements of a linked list", - "correct_option": "It is used to access the members of a namespace", - "correct_option_index": 1 - }, - { - "qsns": "What is the purpose of the unnamed namespace in C++?", - "opt1": "To make a function or variable global", - "opt2": "To limit the visibility of a function or variable to a single source file", - "opt3": "To create a new namespace within an existing namespace", - "opt4": "To create a namespace with a name that cannot be accessed by the user", - "correct_option": "To limit the visibility of a function or variable to a single source file", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following is a benefit of using namespaces in C++?", - "opt1": "They prevent naming conflicts between classes", - "opt2": "They allow you to define variables with the same name in different functions", - "opt3": "They improve the performance of the program", - "opt4": "They allow you to define variables with the same name in the same scope", - "correct_option": "They prevent naming conflicts between classes", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following is a disadvantage of using namespaces in C++?", - "opt1": "They can make the code more difficult to read and understand", - "opt2": "They increase the size of the executable file", - "opt3": "They make it more difficult to reuse code in different projects", - "opt4": "They increase the likelihood of naming conflicts between classes", - "correct_option": "They can make the code more difficult to read and understand", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following is true regarding the global namespace in C++?", - "opt1": "All variables and functions defined outside of a namespace belong to the global namespace", - "opt2": "The global namespace is automatically included in every program", - "opt3": "The global namespace can be used to define variables and functions that can be accessed from any part of the program", - "opt4": "All of the above", - "correct_option": "All of the above", - "correct_option_index": 4 - }, - { - "qsns": "What is a namespace in C++?", - "opt1": "A container that holds a group of related variables and functions", - "opt2": "A type of loop that iterates over a collection of elements", - "opt3": "A method of creating a new object from an existing object", - "opt4": "A way to specify the data type of a variable", - "correct_option": "A container that holds a group of related variables and functions", - "correct_option_index": 1 - }, - { - "qsns": "Which keyword is used to define a namespace in C++?", - "opt1": "using", - "opt2": "namespace", - "opt3": "define", - "opt4": "typedef", - "correct_option": "namespace", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following statements is true regarding namespaces in C++?", - "opt1": "Nested namespaces are not allowed", - "opt2": "A namespace can only contain functions", - "opt3": "Namespaces are only used in object-oriented programming", - "opt4": "Namespace members are accessed using the :: operator", - "correct_option": "Namespace members are accessed using the :: operator", - "correct_option_index": 4 - }, - { - "qsns": "What is the purpose of using a namespace in C++?", - "opt1": "To avoid naming conflicts between variables and functions", - "opt2": "To allocate memory dynamically", - "opt3": "To overload operators for a class", - "opt4": "To declare a global variable", - "correct_option": "To avoid naming conflicts between variables and functions", - "correct_option_index": 1 - }, - { - "qsns": "What is the default namespace in C++?", - "opt1": "std", - "opt2": "default", - "opt3": "main", - "opt4": "none of the above", - "correct_option": "std", - "correct_option_index": 1 - }, - { - "qsns": "Can a namespace be defined across multiple files in C++?", - "opt1": "Yes, by using the using directive", - "opt2": "Yes, by using the namespace keyword", - "opt3": "No, a namespace must be defined in a single file", - "opt4": "No, a namespace can only be defined within a function", - "correct_option": "Yes, by using the namespace keyword", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following is a valid way to alias a namespace in C++?", - "opt1": "namespace A::B", - "opt2": "using A::B", - "opt3": "namespace B = A", - "opt4": "using namespace A::B", - "correct_option": "namespace B = A", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following is an advantage of using namespaces in C++?", - "opt1": "They allow for faster program execution", - "opt2": "They make it easier to reuse code", - "opt3": "They help to reduce the size of the program", - "opt4": "They prevent type conversion errors", - "correct_option": "They make it easier to reuse code", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following is true regarding the scope of a namespace in C++?", - "opt1": "A namespace can be used anywhere in the program", - "opt2": "A namespace can only be used within the file it is defined in", - "opt3": "A namespace can only be used within the class it is defined in", - "opt4": "A namespace can only be used within the function it is defined in", - "correct_option": "A namespace can be used anywhere in the program", - "correct_option_index": 1 - }, - - { - "qsns": "Which of the following statements is true about function overloading in C++?", - "opt1": "Only the function name should be the same for overloaded functions", - "opt2": "Overloaded functions can differ in the number of parameters", - "opt3": "Overloaded functions cannot have the same return type", - "opt4": "All of the above", - "correct_option": "Overloaded functions can differ in the number of parameters", - "correct_option_index": 2 - }, - { - "qsns": "Which operator cannot be overloaded in C++?", - "opt1": "&& and ||", - "opt2": ":: and ->", - "opt3": "+ and -", - "opt4": "All of the above", - "correct_option": ":: and ->", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following is not a valid way of differentiating between overloaded functions?", - "opt1": "Number of parameters", - "opt2": "Order of parameters", - "opt3": "Return type", - "opt4": "None of the above", - "correct_option": "Return type", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following statements is true about function overloading in C++? (Repeated concept)", - "opt1": "Overloaded functions must have the same access level", - "opt2": "Access levels do not affect function overloading", - "opt3": "Overloaded functions must have different access levels", - "opt4": "None of the above", - "correct_option": "Access levels do not affect function overloading", - "correct_option_index": 2 - }, - { - "qsns": "What is the benefit of function overloading in C++?", - "opt1": "It reduces the number of functions in a program", - "opt2": "It makes the code easier to read and understand", - "opt3": "It allows the same function name to be used for different operations", - "opt4": "All of the above", - "correct_option": "It allows the same function name to be used for different operations", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following is true about function overloading? (Repeated concept)", - "opt1": "Overloaded functions can have different names", - "opt2": "Overloaded functions can have the same number and types of parameters", - "opt3": "Overloaded functions must have the same return type", - "opt4": "None of the above", - "correct_option": "None of the above", - "correct_option_index": 4 - }, - { - "qsns": "Which of the following is an example of function overloading in C++?", - "opt1": "int add(int a, int b)", - "opt2": "float add(float a, float b)", - "opt3": "void add(int a, int b)", - "opt4": "All of the above", - "correct_option": "All of the above", - "correct_option_index": 4 - }, - { - "qsns": "What is function overloading in C++?", - "opt1": "Defining a function with the same name and same parameters as an existing function", - "opt2": "Defining a function with the same name but different parameters as an existing function", - "opt3": "Defining a function with a different name but the same parameters as an existing function", - "opt4": "Defining a function with a different name and different parameters as an existing function", - "correct_option": "Defining a function with the same name but different parameters as an existing function", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following is not a valid way to overload a function in C++?", - "opt1": "Changing the number of parameters in the function", - "opt2": "Changing the return type of the function", - "opt3": "Changing the order of the parameters in the function", - "opt4": "Changing the type of the parameters in the function", - "correct_option": "Changing the return type of the function", - "correct_option_index": 2 - }, - { - "qsns": "What is the purpose of function overloading in C++?", - "opt1": "To create new functions with different names", - "opt2": "To create functions that have different return types", - "opt3": "To allow functions to work with different types of data", - "opt4": "To allow functions to be used with different sets of parameters", - "correct_option": "To allow functions to be used with different sets of parameters", - "correct_option_index": 4 - }, - { - "qsns": "Which of the following is an example of function overloading in C++? (Repeated concept)", - "opt1": "int add(int x, int y)", - "opt2": "float add(float x, float y)", - "opt3": "char add(char x, char y)", - "opt4": "All of the above", - "correct_option": "All of the above", - "correct_option_index": 4 - }, - { - "qsns": "Can two functions in C++ have the same name and the same set of parameters?", - "opt1": "Yes, as long as they have different return types", - "opt2": "Yes, as long as they are declared in different namespaces", - "opt3": "No, it is not allowed in C++", - "opt4": "Yes, as long as they are declared in different classes", - "correct_option": "No, it is not allowed in C++", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following is true about function overloading in C++? (Repeated concept)", - "opt1": "Overloaded functions must have the same name", - "opt2": "Overloaded functions must have different return types", - "opt3": "Overloaded functions must have the same number of parameters", - "opt4": "Overloaded functions must have different parameter types or different number of parameters", - "correct_option": "Overloaded functions must have different parameter types or different number of parameters", - "correct_option_index": 4 - }, - { - "qsns": "What is the benefit of using function overloading in C++?", - "opt1": "It allows you to create functions with different names", - "opt2": "It allows you to create functions with different return types", - "opt3": "It allows you to write more efficient code", - "opt4": "It allows you to create more versatile functions", - "correct_option": "It allows you to create more versatile functions", - "correct_option_index": 4 - }, - { - "qsns": "Which of the following operators can be overloaded in C++?", - "opt1": "+", - "opt2": "=", - "opt3": "[]", - "opt4": "All of the above", - "correct_option": "All of the above", - "correct_option_index": 4 - }, - { - "qsns": "Can you overload a member function in C++?", - "opt1": "Yes, you can overload both member and non-member functions in C++", - "opt2": "No, member functions cannot be overloaded in C++", - "opt3": "Yes, but only if the functions have different return types", - "opt4": "Yes, but only if the functions have different parameters", - "correct_option": "Yes, you can overload both member and non-member functions in C++", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following is an example of function overloading?", - "opt1": "int add(int x, int y) { return x + y; } int add(int x, int y, int z) { return x+y+z;}", - "opt2": "int add(int x, int y) { return x + y; } float add(int x, int y) { return x + y;}", - "opt3": "int add(int x, int y) { return x + y; } int subtract(int x, int y) { return x - y; }", - "opt4": "All of the above", - "correct_option": "int add(int x, int y) { return x + y; } int add(int x, int y, int z) { return x+y+z;}", - "correct_option_index": 1 - }, - { - "qsns": "What is an inline function in C++?", - "opt1": "A function that takes an argument of type inline", - "opt2": "A function that is defined with the inline keyword", - "opt3": "A function that is executed sequentially", - "opt4": "A function that is expanded inline by the compiler", - "correct_option": "A function that is defined with the inline keyword", - "correct_option_index": 2 - }, - { - "qsns": "What is the advantage of using an inline function?", - "opt1": "It reduces the size of the program", - "opt2": "It reduces the function call overhead", - "opt3": "It increases the performance of the program", - "opt4": "It allows for recursion", - "correct_option": "It reduces the function call overhead", - "correct_option_index": 2 - }, - { - "qsns": "Which keyword is used to declare an inline function in C++?", - "opt1": "function", - "opt2": "inline", - "opt3": "def", - "opt4": "define", - "correct_option": "inline", - "correct_option_index": 2 - }, - { - "qsns": "Can a function that returns void be inline in C++?", - "opt1": "Yes, any function can be declared inline", - "opt2": "No, only functions that return a value can be inline", - "opt3": "It depends on the implementation", - "opt4": "None of the above", - "correct_option": "Yes, any function can be declared inline", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following statements is true about inline functions in C++?", - "opt1": "Inline functions cannot be recursive", - "opt2": "Inline functions cannot contain loops", - "opt3": "Inline functions cannot be overloaded", - "opt4": "Inline functions cannot have default arguments", - "correct_option": "Inline functions cannot be recursive", - "correct_option_index": 1 - }, - { - "qsns": "How does the compiler treat inline functions in C++?", - "opt1": "It generates a separate function call for each call to the inline function", - "opt2": "It replaces the function call with the actual function code at the point of the call", - "opt3": "It generates an error if the function is not defined inline", - "opt4": "It generates a jump instruction to the function code at the point of the call", - "correct_option": "It replaces the function call with the actual function code at the point of the call", - "correct_option_index": 2 - }, - { - "qsns": "Can a function that is defined in a separate source file be inline in C++?", - "opt1": "Yes, as long as the function is declared inline in the header file", - "opt2": "No, inline functions must be defined in the same source file as the caller", - "opt3": "It depends on the implementation of the compiler", - "opt4": "None of the above", - "correct_option": "No, inline functions must be defined in the same source file as the caller", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following is an example of an inline function in C++?", - "opt1": "int add(int a, int b) { return a + b; }", - "opt2": "void print_hello() { std::cout << \"Hello, world!\" << std::endl; }", - "opt3": "double square(double x) {return x*x;}", - "opt4": "class Rectangle { public: inline int area() { return width * height; } };", - "correct_option": "class Rectangle { public: inline int area() { return width * height; } };", - "correct_option_index": 4 - }, - { - "qsns": "Which of the following is a disadvantage of using inline functions in C++?", - "opt1": "It can increase the size of the program", - "opt2": "It can decrease the performance of the program", - "opt3": "It can lead to code bloat", - "opt4": "It can lead to name collisions", - "correct_option": "It can increase the size of the program", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following is a good candidate for an inline function in C++?", - "opt1": "A function that performs complex calculations", - "opt2": "A function that is called frequently and has a short body", - "opt3": "A function that takes a long time to execute", - "opt4": "A function that is rarely called and has a long body", - "correct_option": "A function that is called frequently and has a short body", - "correct_option_index": 2 - }, - { - "qsns": "What is an inline function in C++? (Repeated concept)", - "opt1": "A function defined with the \"inline\" keyword, which is a suggestion to the compiler to perform inline expansion of the function", - "opt2": "A function defined with the \"inline\" keyword, which is a requirement for the compiler to perform inline expansion of the function", - "opt3": "A function that is always expanded inline by the compiler, regardless of how it is defined", - "opt4": "A function that is never expanded inline by the compiler, regardless of how it is defined", - "correct_option": "A function defined with the \"inline\" keyword, which is a suggestion to the compiler to perform inline expansion of the function", - "correct_option_index": 1 - }, - { - "qsns": "What is the advantage of using inline functions in C++? (Repeated concept)", - "opt1": "They are faster than regular functions", - "opt2": "They reduce the executable size of a program", - "opt3": "They can be used to define function templates", - "opt4": "They make it easier to overload functions", - "correct_option": "They are faster than regular functions", - "correct_option_index": 1 - }, - { - "qsns": "When should you use an inline function in C++?", - "opt1": "When the function is small and simple", - "opt2": "When the function is called frequently", - "opt3": "When the function has a lot of parameters", - "opt4": "When the function is large and complex", - "correct_option": "When the function is small and simple", - "correct_option_index": 1 - }, - { - "qsns": "Can a virtual function be inline in C++?", - "opt1": "When the function is used in only one place in the program", - "opt2": "No, virtual functions cannot be inline in C++", - "opt3": "Yes, as long as it is defined with the \"inline\" keyword only", - "opt4": "It depends on the compiler", - "correct_option": "No, virtual functions cannot be inline in C++", - "correct_option_index": 2 - }, - { - "qsns": "What is the syntax for defining an inline function in C++?", - "opt1": "inline int function_name(int param1, int param2) {}", - "opt2": "void inline function_name(int param1, int param2) {}", - "opt3": "int inline function_name(int param1, int param2) {}", - "opt4": "inline function_name(int param1, int param2) {}", - "correct_option": "inline int function_name(int param1, int param2) {}", - "correct_option_index": 1 - }, - { - "qsns": "Can a member function of a class be inline in C++?", - "opt1": "Yes, as long as it is defined with the \"inline\" keyword", - "opt2": "No, member functions cannot be inline in C++", - "opt3": "Yes, as long as it is defined with the \"inline\" keyword and the function body is defined inside the class definition", - "opt4": "It depends on the implementation", - "correct_option": "Yes, as long as it is defined with the \"inline\" keyword and the function body is defined inside the class definition", - "correct_option_index": 3 - }, - { - "qsns": "What is the purpose of the \"inline\" keyword in C++?", - "opt1": "To indicate that a function is a friend of a class", - "opt2": "To require the compiler to perform inline expansion of a function", - "opt3": "To suggest to the compiler to perform inline expansion of a function", - "opt4": "To indicate that a function is a virtual function", - "correct_option": "To suggest to the compiler to perform inline expansion of a function", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following is a disadvantage of using inline functions in C++? (Repeated concept)", - "opt1": "They can increase the size of the executable code", - "opt2": "They can slow down the program execution", - "opt3": "They can make debugging more difficult", - "opt4": "There are no disadvantages to using inline functions", - "correct_option": "They can increase the size of the executable code", - "correct_option_index": 1 - }, - { - "qsns": "Can a function defined in a header file be inline in C++?", - "opt1": "Yes, as long as it is defined with the \"inline\" keyword", - "opt2": "No, functions defined in header files cannot be inline in C++", - "opt3": "Yes, as long as it is defined with the \"inline\" keyword and the function body is defined inside the header file", - "opt4": "It depends on the compiler", - "correct_option": "Yes, as long as it is defined with the \"inline\" keyword and the function body is defined inside the header file", - "correct_option_index": 3 - }, - { - "qsns": "What is a default argument in C++?", - "opt1": "An argument that is automatically assigned the value 0", - "opt2": "An argument that is assigned the value of the previous argument", - "opt3": "An argument that is assigned a value if no other value is provided", - "opt4": "An argument that is assigned a random value", - "correct_option": "An argument that is assigned a value if no other value is provided", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following is true about default arguments?", - "opt1": "They must be specified in the function declaration and definition", - "opt2": "They can only be of basic data types such as int and float", - "opt3": "They must always come at the beginning of the argument list", - "opt4": "They cannot be of array types", - "correct_option": "They must be specified in the function declaration and definition", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following is an example of a function that uses a default argument?", - "opt1": "int add(int x, int y)", - "opt2": "float divide(float a, float b, float c = 1.0)", - "opt3": "void print()", - "opt4": "char getChar(char c = 'a')", - "correct_option": "float divide(float a, float b, float c = 1.0)", - "correct_option_index": 2 - }, - { - "qsns": "What is the order in which arguments are passed to a function?", - "opt1": "Regular arguments first, followed by default arguments", - "opt2": "Default arguments first, followed by regular arguments", - "opt3": "Random order", - "opt4": "None of the above", - "correct_option": "Regular arguments first, followed by default arguments", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following is true about default arguments in relation to function overloading?", - "opt1": "Default arguments are not allowed in function overloading", - "opt2": "Default arguments must be the same for all functions in an overload set", - "opt3": "Default arguments are allowed, but only for one function in an overload set", - "opt4": "Default arguments must be different for all functions in an overload set", - "correct_option": "Default arguments are allowed, but only for one function in an overload set", - "correct_option_index": 3 - }, - { - "qsns": "What is the benefit of using default arguments?", - "opt1": "It makes the code more efficient", - "opt2": "It allows for fewer function overloads", - "opt3": "It improves code readability", - "opt4": "It allows for more complex programs", - "correct_option": "It allows for fewer function overloads", - "correct_option_index": 2 - }, - { - "qsns": "What happens if a default argument is specified in both the function declaration and definition?", - "opt1": "The code will not compile", - "opt2": "The argument specified in the definition will be used", - "opt3": "The argument specified in the declaration will be used", - "opt4": "The default argument will be ignored", - "correct_option": "The code will not compile", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following is true about default arguments and templates?", - "opt1": "Default arguments are not allowed in templates", - "opt2": "Default arguments can be used in templates, but only for one parameter", - "opt3": "Default arguments can be used in templates for any number of parameters", - "opt4": "Default arguments in templates must be the same for all instantiations", - "correct_option": "Default arguments can be used in templates for any number of parameters", - "correct_option_index": 3 - }, - { - "qsns": "What are default arguments in C++? (Repeated concept)", - "opt1": "Arguments that are automatically initialized with a default value.", - "opt2": "Arguments that are passed by value.", - "opt3": "Arguments that are passed by reference.", - "opt4": "Arguments that are passed by pointer.", - "correct_option": "Arguments that are automatically initialized with a default value.", - "correct_option_index": 1 - }, - { - "qsns": "Where should default arguments be specified in a function declaration?", - "opt1": "Before the function name.", - "opt2": "After the function name.", - "opt3": "Before the return type.", - "opt4": "After the return type.", - "correct_option": "After the function name.", - "correct_option_index": 2 - }, - { - "qsns": "What is the purpose of default arguments? (Repeated concept)", - "opt1": "To make functions more efficient.", - "opt2": "To make it easier to pass arguments to a function.", - "opt3": "To allow a function to be overloaded.", - "opt4": "To provide a default value for a parameter if one is not specified.", - "correct_option": "To provide a default value for a parameter if one is not specified.", - "correct_option_index": 4 - }, - { - "qsns": "When are default arguments evaluated?", - "opt1": "At runtime.", - "opt2": "At compile time.", - "opt3": "At link time.", - "opt4": "At load time.", - "correct_option": "At runtime.", - "correct_option_index": 1 - }, - { - "qsns": "What happens if a default argument is specified in both the function declaration and the function definition? (Repeated concept)", - "opt1": "The program will not compile.", - "opt2": "The default argument specified in the function definition will be used.", - "opt3": "The default argument specified in the function declaration will be used.", - "opt4": "Both default arguments will be used.", - "correct_option": "The program will not compile.", - "correct_option_index": 1 - }, - { - "qsns": "What is the syntax for specifying a default argument?", - "opt1": "argumentType argumentName = defaultValue", - "opt2": "argumentType defaultValue argumentName", - "opt3": "defaultValue argumentType argumentName", - "opt4": "argumentName = defaultValue", - "correct_option": "argumentType argumentName = defaultValue", - "correct_option_index": 1 - }, - - { - "qsns": "Which of the following is true about classes in C++?", - "opt1": "A class is a blueprint for objects", - "opt2": "A class is an object", - "opt3": "A class is a function", - "opt4": "A class is a data type", - "correct_option": "A class is a blueprint for objects", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following keywords is used to create an object of a class?", - "opt1": "new", - "opt2": "this", - "opt3": "object", - "opt4": "none of the above", - "correct_option": "new", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following access specifiers is used to make class members accessible only within the same class?", - "opt1": "public", - "opt2": "private", - "opt3": "protected", - "opt4": "none of the above", - "correct_option": "private", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following is a constructor?", - "opt1": "A function that is used to create an object of a class", - "opt2": "A function that is used to destroy an object of a class", - "opt3": "A function that is used to allocate memory for an object of a class", - "opt4": "A function that is used to deallocate memory for an object of a class", - "correct_option": "A function that is used to create an object of a class", - "correct_option_index": 1 - }, - { - "qsns": "What is encapsulation in C++?", - "opt1": "Combining data members and member functions in a single unit", - "opt2": "Making class members accessible only within the same class", - "opt3": "Creating objects of a class", - "opt4": "None of the above", - "correct_option": "Combining data members and member functions in a single unit", - "correct_option_index": 1 - }, - { - "qsns": "What is a class in C++?", - "opt1": "A user-defined data type", - "opt2": "A built-in data type", - "opt3": "A function", - "opt4": "A pointer to a variable", - "correct_option": "A user-defined data type", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following is true about a static member of a class?", - "opt1": "It is shared by all objects of the class", - "opt2": "It is specific to each object of the class", - "opt3": "It can be accessed using the object of the class", - "opt4": "It cannot be accessed using the object of the class", - "correct_option": "It is shared by all objects of the class", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following is used to create a copy of an object in C++?", - "opt1": "Object cloning", - "opt2": "Object duplication", - "opt3": "Object copying", - "opt4": "Object creation", - "correct_option": "Object copying", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following is used to initialize the data members of an object of a class?", - "opt1": "Constructors", - "opt2": "Destructors", - "opt3": "assignment operators", - "opt4": "Copy constructors", - "correct_option": "Constructors", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following is true about friend functions in C++?", - "opt1": "Friend functions are class members", - "opt2": "Friend functions can access private and protected members of a class", - "opt3": "Friend functions can be called using an object of the class", - "opt4": "Friend functions cannot be defined outside the class", - "correct_option": "Friend functions can access private and protected members of a class", - "correct_option_index": 2 - }, - { - "qsns": "What is an object in C++?", - "opt1": "An instance of a class", - "opt2": "A type of data", - "opt3": "A function", - "opt4": "A pointer to a variable", - "correct_option": "An instance of a class", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following access specifiers in C++ allows the member to be accessed by any function or class in the program?", - "opt1": "Private", - "opt2": "Protected", - "opt3": "Public", - "opt4": "Friend", - "correct_option": "Public", - "correct_option_index": 3 - }, - { - "qsns": "Which access specifier in C++ allows a member function or variable to be accessed only by the same class and its friends?", - "opt1": "Private", - "opt2": "Public", - "opt3": "Protected", - "opt4": "Friend", - "correct_option": "Private", - "correct_option_index": 1 - }, - { - "qsns": "Which access specifier in C++ allows a member function or variable to be accessed by the same class, its derived classes, and its friends?", - "opt1": "Private", - "opt2": "Public", - "opt3": "Protected", - "opt4": "Friend", - "correct_option": "Protected", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following is true about access specifiers in C++?", - "opt1": "They determine the visibility of a member outside of the class.", - "opt2": "They determine the data type of a member.", - "opt3": "They determine the scope of a member within the class.", - "opt4": "They determine the storage location of a member.", - "correct_option": "They determine the visibility of a member outside of the class.", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following access specifiers is used to hide the implementation details of a class from the user?", - "opt1": "Private", - "opt2": "Public", - "opt3": "Protected", - "opt4": "Friend", - "correct_option": "Private", - "correct_option_index": 1 - }, - { - "qsns": "Which access specifier in C++ allows a member function or variable to be accessed by any class or function that is declared as a friend of the class?", - "opt1": "Private", - "opt2": "Public", - "opt3": "Protected", - "opt4": "Friend", - "correct_option": "Friend", - "correct_option_index": 4 - }, - { - "qsns": "Which access specifier in C++ allows a member function or variable to be accessed by the same class and its derived classes?", - "opt1": "Private", - "opt2": "Public", - "opt3": "Protected", - "opt4": "Friend", - "correct_option": "Protected", - "correct_option_index": 3 - }, - { - "qsns": "Which access specifier in C++ allows a member function or variable to be accessed by any function or class within the same namespace?", - "opt1": "Private", - "opt2": "Public", - "opt3": "Protected", - "opt4": "Friend", - "correct_option": "Public", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following access specifiers in C++ is used to prevent a member from being accessed outside of the class definition?", - "opt1": "public", - "opt2": "private", - "opt3": "protected", - "opt4": "friend", - "correct_option": "private", - "correct_option_index": 2 - }, - { - "qsns": "Which access specifier allows access to a class member only within the class definition?", - "opt1": "public", - "opt2": "private", - "opt3": "protected", - "opt4": "friend", - "correct_option": "private", - "correct_option_index": 2 - }, - { - "qsns": "Which access specifier allows access to a class member from any function outside the class definition?", - "opt1": "public", - "opt2": "private", - "opt3": "protected", - "opt4": "friend", - "correct_option": "public", - "correct_option_index": 1 - }, - { - "qsns": "Which access specifier allows a derived class to access the protected members of its base class?", - "opt1": "public", - "opt2": "private", - "opt3": "protected", - "opt4": "friend", - "correct_option": "protected", - "correct_option_index": 3 - }, - { - "qsns": "Which access specifier allows access to a class member from a derived class?", - "opt1": "public", - "opt2": "private", - "opt3": "protected", - "opt4": "friend", - "correct_option": "protected", - "correct_option_index": 3 - }, - { - "qsns": "Which access specifier allows a member function to access all members of a class?", - "opt1": "public", - "opt2": "private", - "opt3": "protected", - "opt4": "friend", - "correct_option": "private", - "correct_option_index": 2 - }, - { - "qsns": "What is the default access specifier for a class in C++?", - "opt1": "public", - "opt2": "private", - "opt3": "protected", - "opt4": "friend", - "correct_option": "private", - "correct_option_index": 2 - }, - { - "qsns": "Which access specifier allows a friend function to access all members of a class?", - "opt1": "public", - "opt2": "private", - "opt3": "protected", - "opt4": "friend", - "correct_option": "friend", - "correct_option_index": 4 - }, - { - "qsns": "Which access specifier allows access to a class member from any class?", - "opt1": "public", - "opt2": "private", - "opt3": "protected", - "opt4": "friend", - "correct_option": "public", - "correct_option_index": 1 - }, - { - "qsns": "Which access specifier should be used for class members that need to be accessed by functions outside the class definition?", - "opt1": "public", - "opt2": "private", - "opt3": "protected", - "opt4": "friend", - "correct_option": "public", - "correct_option_index": 1 - }, - { - "qsns": "Which access specifier should be used for class members that should only be accessed within the class definition?", - "opt1": "public", - "opt2": "private", - "opt3": "protected", - "opt4": "friend", - "correct_option": "private", - "correct_option_index": 2 - }, - { - "qsns": "What is the dot operator used for in C++?", - "opt1": "To declare objects", - "opt2": "To access a member of an object", - "opt3": "To access a function of a class", - "opt4": "To access a class variable", - "correct_option": "To access a member of an object", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following is an example of an object?", - "opt1": "int x;", - "opt2": "string s;", - "opt3": "MyClass obj;", - "opt4": "double y;", - "correct_option": "MyClass obj;", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following operators is used to access a member of an object?", - "opt1": ".", - "opt2": "->", - "opt3": "::", - "opt4": ":", - "correct_option": ".", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following is used to initialize an object?", - "opt1": "The constructor", - "opt2": "The destructor", - "opt3": "The copy constructor", - "opt4": "The assignment operator", - "correct_option": "The constructor", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following access specifiers allows a member to be accessed from any function?", - "opt1": "Public", - "opt2": "Private", - "opt3": "Protected", - "opt4": "Friend", - "correct_option": "Public", - "correct_option_index": 1 - }, - { - "qsns": "What is the keyword used to declare a class in C++?", - "opt1": "class", - "opt2": "object", - "opt3": "struct", - "opt4": "member", - "correct_option": "class", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following is used to destroy an object?", - "opt1": "The constructor", - "opt2": "The destructor", - "opt3": "The copy constructor", - "opt4": "The assignment operator", - "correct_option": "The destructor", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following is true about an object in C++?", - "opt1": "It is an instance of a class", - "opt2": "It cannot be passed as a parameter to a function", - "opt3": "It does not have any data members or member functions", - "opt4": "It can be created without a class definition", - "correct_option": "It is an instance of a class", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following operators can be overloaded to provide custom member access behavior?", - "opt1": ".", - "opt2": "->", - "opt3": "::", - "opt4": ":", - "correct_option": "->", - "correct_option_index": 2 - }, - { - "qsns": "What is the difference between the dot operator (.) and the arrow operator (->) in C++?", - "opt1": "The dot operator is used with pointers, while the arrow operator is used with objects.", - "opt2": "The dot operator is used to access static members, while the arrow operator is used to access non-static members.", - "opt3": "The dot operator is used to access non-static members, while the arrow operator is used with pointers to access non-static members.", - "opt4": "The dot operator is used to access public members, while the arrow operator is used to access private members.", - "correct_option": "The dot operator is used to access non-static members, while the arrow operator is used with pointers to access non-static members.", - "correct_option_index": 3 - }, - { - "qsns": "Which operator is used to access the members of an object in C++?", - "opt1": ".", - "opt2": "&", - "opt3": "->", - "opt4": "::", - "correct_option": ".", - "correct_option_index": 1 - }, - { - "qsns": "Which keyword is used to define a member function outside the class definition in C++?", - "opt1": "here", - "opt2": "that", - "opt3": "this", - "opt4": "none of the above", - "correct_option": "none of the above", - "correct_option_index": 4 - }, - { - "qsns": "Which of the following is true about object-oriented programming in C++?", - "opt1": "It is a procedural programming language", - "opt2": "Objects encapsulate data and behavior", - "opt3": "It supports only single inheritance", - "opt4": "All of the above", - "correct_option": "Objects encapsulate data and behavior", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following is true about a member function in C++?", - "opt1": "It can be defined inside or outside the class definition", - "opt2": "It can only be defined inside the class definition", - "opt3": "It can only be defined outside the class definition", - "opt4": "None of the above", - "correct_option": "It can be defined inside or outside the class definition", - "correct_option_index": 1 - }, - { - "qsns": "Which keyword is used to access the data members of an object inside a member function in C++?", - "opt1": "private", - "opt2": "public", - "opt3": "protected", - "opt4": "this", - "correct_option": "this", - "correct_option_index": 4 - }, - { - "qsns": "Which of the following is true about object creation in C++?", - "opt1": "It is done using the new operator", - "opt2": "It is done using the malloc() function", - "opt3": "It is done using the class constructor", - "opt4": "None of the above", - "correct_option": "It is done using the class constructor", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following is true about constructors in C++?", - "opt1": "They are used to allocate memory for objects", - "opt2": "They are used to initialize the data members of an object", - "opt3": "They are used to deallocate memory for objects", - "opt4": "None of the above", - "correct_option": "They are used to initialize the data members of an object", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following is true about destructors in C++?", - "opt1": "They are used to allocate memory for objects", - "opt2": "They are used to initialize the data members of an object", - "opt3": "They are used to deallocate memory for objects", - "opt4": "None of the above", - "correct_option": "They are used to deallocate memory for objects", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following is true about static member functions in C++?", - "opt1": "They can access only static data members of a class", - "opt2": "They can access only non-static data members of a class", - "opt3": "They can access both static and non-static data members of a class", - "opt4": "None of the above", - "correct_option": "They can access only static data members of a class", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following is true about friend functions in C++?", - "opt1": "They are member functions of a class", - "opt2": "They can access private and protected members of a class", - "opt3": "They can access only public members of a class", - "opt4": "None of the above", - "correct_option": "They can access private and protected members of a class", - "correct_option_index": 2 - }, - { - "qsns": "What is a member function in C++?", - "opt1": "A function that can only be used outside of a class", - "opt2": "A function that belongs to a class", - "opt3": "A function that can only be used inside of a class", - "opt4": "A function that belongs to the global namespace", - "correct_option": "A function that belongs to a class", - "correct_option_index": 2 - }, - { - "qsns": "How are member functions defined in C++?", - "opt1": "Inside the class definition", - "opt2": "Outside the class definition", - "opt3": "Both A and B", - "opt4": "Neither A nor B", - "correct_option": "Both A and B", - "correct_option_index": 3 - }, - { - "qsns": "Which keyword is used to define a member function outside of a class in C++?", - "opt1": "public", - "opt2": "private", - "opt3": "protected", - "opt4": "none of the above", - "correct_option": "none of the above", - "correct_option_index": 4 - }, - { - "qsns": "Which of the following is a valid syntax for defining a member function outside of a class in C++?", - "opt1": "void MyClass::myFunction() {}", - "opt2": "MyClass: void myFunction() {}", - "opt3": "void myFunction() ::MyClass {}", - "opt4": "None of the above", - "correct_option": "void MyClass::myFunction() {}", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following is true about member functions in C++?", - "opt1": "They have access to the private data members of a class", - "opt2": "They can only access public data members of a class", - "opt3": "They cannot access any data members of a class", - "opt4": "None of the above", - "correct_option": "They have access to the private data members of a class", - "correct_option_index": 1 - }, - { - "qsns": "What is the implicit parameter in a member function in C++?", - "opt1": "A pointer to the object that called the function", - "opt2": "A pointer to the object that contains the function", - "opt3": "A pointer to the object that was passed as an argument to the function", - "opt4": "None of the above", - "correct_option": "A pointer to the object that called the function", - "correct_option_index": 1 - }, - { - "qsns": "Which keyword is used to access the implicit parameter in a member function in C++?", - "opt1": "this", - "opt2": "that", - "opt3": "here", - "opt4": "none of the above", - "correct_option": "this", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following is true about the this pointer in C++?", - "opt1": "It is a constant pointer", - "opt2": "It points to the object that called the member function", - "opt3": "It is an integer value that represents the memory address of the object", - "opt4": "None of the above", - "correct_option": "It points to the object that called the member function", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following is true about inline member functions in C++?", - "opt1": "They are defined outside the class definition", - "opt2": "They are always faster than non-inline member functions", - "opt3": "They are used for small functions that are called frequently", - "opt4": "None of the above", - "correct_option": "They are used for small functions that are called frequently", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following is true about const member functions in C++?", - "opt1": "They cannot modify the data members of a class", - "opt2": "They are declared using the const keyword after the parameter list", - "opt3": "They can only be used inside the class definition", - "opt4": "None of the above", - "correct_option": "They cannot modify the data members of a class", - "correct_option_index": 1 - }, - { - "qsns": "What is a member function in C++? (Repeated Question)", - "opt1": "A function that is defined inside a class definition", - "opt2": "A function that is defined outside a class definition", - "opt3": "A function that is not related to any class", - "opt4": "None of the above", - "correct_option": "A function that is defined inside a class definition", - "correct_option_index": 1 - }, - { - "qsns": "How is a member function defined inside a class definition in C++?", - "opt1": "using the :: operator", - "opt2": "using the -> operator", - "opt3": "using the . operator", - "opt4": "using the function name and parameter list", - "correct_option": "using the function name and parameter list", - "correct_option_index": 4 - }, - { - "qsns": "What is the purpose of the \"this\" pointer in C++?", - "opt1": "It points to the object on which the member function is called", - "opt2": "It points to the class definition", - "opt3": "It points to the current function", - "opt4": "None of the above", - "correct_option": "It points to the object on which the member function is called", - "correct_option_index": 1 - }, - { - "qsns": "How is a member function defined outside a class definition in C++?", - "opt1": "using the function name and parameter list", - "opt2": "using the scope resolution operator and the class name", - "opt3": "using the class name and parameter list", - "opt4": "None of the above", - "correct_option": "using the scope resolution operator and the class name", - "correct_option_index": 2 - }, - { - "qsns": "What is the syntax for calling a member function of an object in C++?", - "opt1": "object.member_function()", - "opt2": "object->member_function()", - "opt3": "both A and B", - "opt4": "None of the above", - "correct_option": "both A and B", - "correct_option_index": 3 - }, - { - "qsns": "What is the default access specifier for a member function in C++?", - "opt1": "public", - "opt2": "private", - "opt3": "protected", - "opt4": "None of the above", - "correct_option": "private", - "correct_option_index": 2 - }, - { - "qsns": "Can a member function be overloaded in C++?", - "opt1": "Yes", - "opt2": "No", - "opt3": "It depends on the access specifier", - "opt4": "None of the above", - "correct_option": "Yes", - "correct_option_index": 1 - }, - { - "qsns": "Can a member function be declared inside a class definition and defined outside the class definition in C++?", - "opt1": "Yes", - "opt2": "No", - "opt3": "It depends on the access specifier", - "opt4": "None of the above", - "correct_option": "Yes", - "correct_option_index": 1 - }, - { - "qsns": "Can a member function access the private data members of a class in C++?", - "opt1": "Yes", - "opt2": "No", - "opt3": "depends on the access specifier", - "opt4": "None of the above", - "correct_option": "Yes", - "correct_option_index": 1 - }, - { - "qsns": "What is the purpose of the const keyword in a member function declaration in C++?", - "opt1": "It indicates that the function is a constructor", - "opt2": "It indicates that the function is a destructor", - "opt3": "It indicates that the function does not modify the object on which it is called", - "opt4": "None of the above", - "correct_option": "It indicates that the function does not modify the object on which it is called", - "correct_option_index": 3 - }, - - { - "qsns": "What is a constructor in C++?", - "opt1": "A function that is used to allocate memory for an object", - "opt2": "A function that is used to initialize the data members of an object", - "opt3": "A function that is used to deallocate memory for an object", - "opt4": "None of the above", - "correct_option": "A function that is used to initialize the data members of an object", - "correct_option_index": 2 - }, - { - "qsns": "What is the name of the constructor function in C++?", - "opt1": "init()", - "opt2": "constructor()", - "opt3": "the same as the class name", - "opt4": "None of the above", - "correct_option": "the same as the class name", - "correct_option_index": 3 - }, - { - "qsns": "How many constructors can a class have in C++?", - "opt1": "Only one", - "opt2": "More than one", - "opt3": "It depends on the size of the class", - "opt4": "None of the above", - "correct_option": "More than one", - "correct_option_index": 2 - }, - { - "qsns": "Which type of constructor is called automatically when an object is created in C++?", - "opt1": "Copy constructor", - "opt2": "Parameterized constructor", - "opt3": "Default constructor", - "opt4": "None of the above", - "correct_option": "Default constructor", - "correct_option_index": 3 - }, - { - "qsns": "What is the purpose of the copy constructor in C++?", - "opt1": "It is used to create a copy of an existing object", - "opt2": "It is used to allocate memory for an object", - "opt3": "It is used to delete an existing object", - "opt4": "None of the above", - "correct_option": "It is used to create a copy of an existing object", - "correct_option_index": 1 - }, - { - "qsns": "Can a constructor be declared as private in C++?", - "opt1": "Yes", - "opt2": "No", - "opt3": "It depends on the type of constructor", - "opt4": "None of the above", - "correct_option": "Yes", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following is true about the default constructor in C++?", - "opt1": "It takes no arguments", - "opt2": "It has an empty body", - "opt3": "It is provided by the compiler if no other constructor is defined", - "opt4": "All of the above", - "correct_option": "All of the above", - "correct_option_index": 4 - }, - { - "qsns": "Which of the following is true about the parameterized constructor in C++?", - "opt1": "It takes no arguments", - "opt2": "It has an empty body", - "opt3": "It takes one or more arguments", - "opt4": "None of the above", - "correct_option": "It takes one or more arguments", - "correct_option_index": 3 - }, - { - "qsns": "What is the syntax for calling a constructor in C++?", - "opt1": "class_name.constructor_name()", - "opt2": "class_name::constructor_name()", - "opt3": "class_name object_name(argument_list)", - "opt4": "None of the above", - "correct_option": "class_name object_name(argument_list)", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following is true about the destructor in C++?", - "opt1": "It is used to allocate memory for an object", - "opt2": "It is used to deallocate memory for an object", - "opt3": "It is used to initialize the data members of an object", - "opt4": "None of the above", - "correct_option": "It is used to deallocate memory for an object", - "correct_option_index": 2 - }, - { - "qsns": "What is the this pointer in C++?", - "opt1": "A pointer to the current object", - "opt2": "A pointer to the current function", - "opt3": "A pointer to the current class", - "opt4": "None of the above", - "correct_option": "A pointer to the current object", - "correct_option_index": 1 - }, - { - "qsns": "What is the purpose of the this pointer in C++?", - "opt1": "To refer to the object's own data members", - "opt2": "To refer to a different object's data members", - "opt3": "To refer to a different function", - "opt4": "None of the above", - "correct_option": "To refer to the object's own data members", - "correct_option_index": 1 - }, - { - "qsns": "What is the syntax for using the this pointer in C++?", - "opt1": "this->data_member;", - "opt2": "(*this).data_member", - "opt3": "Both A and B", - "opt4": "None of the above", - "correct_option": "Both A and B", - "correct_option_index": 3 - }, - { - "qsns": "Can the this pointer be modified in C++?", - "opt1": "Yes, it can be modified like any other pointer", - "opt2": "No, it is a constant pointer", - "opt3": "It can be modified only within the same class", - "opt4": "None of above", - "correct_option": "No, it is a constant pointer", - "correct_option_index": 2 - }, - { - "qsns": "What is the data type of the this pointer in C++?", - "opt1": "Class type pointer", - "opt2": "Integer pointer", - "opt3": "Void pointer", - "opt4": "None of the above", - "correct_option": "Class type pointer", - "correct_option_index": 1 - }, - { - "qsns": "What happens if a member function does not use the this pointer in C++?", - "opt1": "It can cause a compile-time error", - "opt2": "It may still work, but it will not be able to access the object's data members", - "opt3": "The program will crash at runtime", - "opt4": "None of the above", - "correct_option": "None of the above", - "correct_option_index": 4 - }, - { - "qsns": "How is the this pointer passed to a member function in C++?", - "opt1": "It is implicitly passed to the function", - "opt2": "It is passed as an argument to the function", - "opt3": "It is not passed to the function", - "opt4": "None of above", - "correct_option": "It is implicitly passed to the function", - "correct_option_index": 1 - }, - { - "qsns": "What is the size of the this pointer in C++?", - "opt1": "It is always 4 bytes", - "opt2": "It is always 8 bytes", - "opt3": "It depends on the size of the object", - "opt4": "None of the above", - "correct_option": "It depends on the size of the object", - "correct_option_index": 3 - }, - { - "qsns": "Can the this pointer be used in static member functions in C++?", - "opt1": "No, the this pointer is not applicable to static member functions", - "opt2": "Yes, but only if the static function takes an object as a parameter", - "opt3": "It can be used only within the same class", - "opt4": "None of above", - "correct_option": "No, the this pointer is not applicable to static member functions", - "correct_option_index": 1 - }, - { - "qsns": "In which operator overload function can the this pointer be used in C++?", - "opt1": "Overloading the assignment operator", - "opt2": "Overloading the equality operator", - "opt3": "Both A and B", - "opt4": "None of the above", - "correct_option": "Both A and B", - "correct_option_index": 3 - }, - { - "qsns": "What is this pointer in C++?", - "opt1": "It is a pointer to the current object", - "opt2": "It is a pointer to the current function", - "opt3": "It is a pointer to the base class", - "opt4": "None of the above", - "correct_option": "It is a pointer to the current object", - "correct_option_index": 1 - }, - { - "qsns": "In which part of a C++ class is this pointer implicitly passed?", - "opt1": "Constructor", - "opt2": "Destructor", - "opt3": "Member functions", - "opt4": "All of the above", - "correct_option": "All of the above", - "correct_option_index": 4 - }, - { - "qsns": "What is the type of this pointer in C++?", - "opt1": "void", - "opt2": "int", - "opt3": "ClassName", - "opt4": "None of the above", - "correct_option": "ClassName", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following is a valid use of this pointer in C++?", - "opt1": "To access member variables of the current object", - "opt2": "To access member functions of the current object", - "opt3": "To access static variables of the current object", - "opt4": "All of the above", - "correct_option": "All of the above", - "correct_option_index": 4 - }, - { - "qsns": "What is the purpose of this pointer in C++?", - "opt1": "To resolve naming conflicts between member variables and parameters of a function", - "opt2": "To access private member variables of a class", - "opt3": "To access static member variables of a class", - "opt4": "None of the above", - "correct_option": "To resolve naming conflicts between member variables and parameters of a function", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following statements is true about this pointer in C++?", - "opt1": "It can be modified by the programmer", - "opt2": "It cannot be modified by the programmer", - "opt3": "It can be null", - "opt4": "None of the above", - "correct_option": "It cannot be modified by the programmer", - "correct_option_index": 2 - }, - { - "qsns": "What happens if this pointer is dereferenced when it is null?", - "opt1": "A compile-time error occurs", - "opt2": "A runtime error occurs", - "opt3": "Undefined behavior occurs", - "opt4": "None of the above", - "correct_option": "Undefined behavior occurs", - "correct_option_index": 3 - }, - { - "qsns": "What is the use of this pointer in operator overloading in C++?", - "opt1": "To overload the -> operator", - "opt2": "To overload the . operator", - "opt3": "Both A and B", - "opt4": "None of the above", - "correct_option": "To overload the -> operator", - "correct_option_index": 1 - }, - { - "qsns": "What is the output of the following code?", - "opt1": "The address of obj1 and obj2 are the same", - "opt2": "The address of obj1 and obj2 are different", - "opt3": "The program will not compile", - "opt4": "The program will crash at runtime", - "correct_option": "The address of obj1 and obj2 are different", - "correct_option_index": 2 - }, - - { - "qsns": "What is a static data member in C++?", - "opt1": "A data member that is unique to each instance of a class", - "opt2": "A data member that is shared among all instances of a class", - "opt3": "A data member that can be accessed only by static functions", - "opt4": "A data member that cannot be accessed from outside the class", - "correct_option": "A data member that is shared among all instances of a class", - "correct_option_index": 2 - }, - { - "qsns": "How is a static data member declared in C++?", - "opt1": "Using the keyword static before the data type", - "opt2": "Using the keyword static before the class name", - "opt3": "Using the keyword static after the data type", - "opt4": "None of the above", - "correct_option": "Using the keyword static before the data type", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following statements is true about static data members in C++?", - "opt1": "They are not initialized by default", - "opt2": "They are initialized to 0 by default", - "opt3": "They are initialized to 1 by default", - "opt4": "None of the above", - "correct_option": "They are initialized to 0 by default", - "correct_option_index": 2 - }, - { - "qsns": "How is a static function declared in C++?", - "opt1": "Using the keyword static before the return type", - "opt2": "Using the keyword static before the function name", - "opt3": "Using the keyword static after the return type", - "opt4": "None of the above", - "correct_option": "Using the keyword static before the return type", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following statements is true about static functions in C++?", - "opt1": "They can access only static data members of the class", - "opt2": "They can access only non-static data members of the class", - "opt3": "They cannot access any data members of the class", - "opt4": "None of the above", - "correct_option": "They can access only static data members of the class", - "correct_option_index": 1 - }, - { - "qsns": "Can a static function in C++ access non-static data members of the class?", - "opt1": "Yes, using the this pointer", - "opt2": "Yes, using the static_cast operator", - "opt3": "No, static functions cannot access non-static data members", - "opt4": "None of the above", - "correct_option": "No, static functions cannot access non-static data members", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following statements is true about static data members in C++?", - "opt1": "They can be initialized inside the class definition", - "opt2": "They must be initialized inside the class definition", - "opt3": "They can be initialized only outside the class definition", - "opt4": "None of the above", - "correct_option": "They can be initialized only outside the class definition", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following statements is true about static functions in C++?", - "opt1": "They cannot access non-static data members", - "opt2": "They can access non-static data members", - "opt3": "They can be virtual", - "opt4": "They can be called using an instance of the class", - "correct_option": "They cannot access non-static data members", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following statements is true about static data members in C++?", - "opt1": "They can be accessed using the object of the class", - "opt2": "They can be accessed using the class name and the scope resolution operator", - "opt3": "They can be accessed using the pointer to the object of the class", - "opt4": "All of the above are true", - "correct_option": "All of the above are true", - "correct_option_index": 4 - }, - { - "qsns": "What is the output of the following code? (Code involves MyClass::count++, incrementCount called twice)", - "opt1": "Count: 2", - "opt2": "Count: 0", - "opt3": "Count: 1", - "opt4": "None of the above", - "correct_option": "Count: 2", - "correct_option_index": 1 - }, - { - "qsns": "What is a static data member in C++?", - "opt1": "A data member that can be accessed only by static functions", - "opt2": "A data member that belongs to the class and not to any instance of the class", - "opt3": "A data member that is created dynamically at runtime", - "opt4": "None of the above", - "correct_option": "A data member that belongs to the class and not to any instance of the class", - "correct_option_index": 2 - }, - { - "qsns": "How is a static data member declared In C++?", - "opt1": "With the keyword 'static' and the name of the member", - "opt2": "With the keyword 'static' and the data type of the member", - "opt3": "With the keyword 'static' and the access specifier of the member", - "opt4": "None of the above", - "correct_option": "With the keyword 'static' and the data type of the member", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following statements is true about static data members in C++?", - "opt1": "They are initialized to zero by default", - "opt2": "They cannot be initialized inside the class declaration", - "opt3": "They are initialized to their default values by default", - "opt4": "None of the above", - "correct_option": "They are initialized to zero by default", - "correct_option_index": 1 - }, - { - "qsns": "What is a static function in C++?", - "opt1": "A function that can be accessed only by static data members", - "opt2": "A function that belongs to the class and not to any instance of the class", - "opt3": "A function that is created dynamically at runtime", - "opt4": "None of the above", - "correct_option": "A function that belongs to the class and not to any instance of the class", - "correct_option_index": 2 - }, - { - "qsns": "How is a static function declared in C++?", - "opt1": "With the keyword 'static' and the return type of the function", - "opt2": "With the keyword 'static' and the access specifier of the function", - "opt3": "With the keyword 'static' and the name of the function", - "opt4": "None of the above", - "correct_option": "With the keyword 'static' and the return type of the function", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following statements is true about static functions in C++?", - "opt1": "They can be virtual", - "opt2": "They cannot be virtual", - "opt3": "They can be pure virtual", - "opt4": "None of the above", - "correct_option": "They cannot be virtual", - "correct_option_index": 2 - }, - { - "qsns": "What is the purpose of static data members and static functions in C++?", - "opt1": "To save memory by sharing data across all instances of the class", - "opt2": "To make the code more modular and easier to maintain", - "opt3": "To create multiple instances of the class with different data", - "opt4": "None of the above", - "correct_option": "To save memory by sharing data across all instances of the class", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following statements is true about the scope of a static data member in C++?", - "opt1": "It has class scope and can be accessed using the class name and the scope resolution operator (::)", - "opt2": "It has instance scope and can be accessed using the instance name and the dot operator (.)", - "opt3": "It has global scope and can be accessed from any part of the program", - "opt4": "None of the above", - "correct_option": "It has class scope and can be accessed using the class name and the scope resolution operator (::)", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following statements is true about the initialization of a static data member in C++?", - "opt1": "It can be initialized Inside the class declaration using an assignment statement", - "opt2": "It must be initialized outside the class declaration using an assignment statement", - "opt3": "It cannot be initialized", - "opt4": "None of the above", - "correct_option": "It must be initialized outside the class declaration using an assignment statement", - "correct_option_index": 2 - }, - { - "qsns": "What is a constant member function in C++?", - "opt1": "A member function that cannot modify any data members of the class", - "opt2": "A member function that can modify any data members of the class", - "opt3": "A member function that cannot be called by const objects of the class", - "opt4": "None of the above", - "correct_option": "A member function that cannot modify any data members of the class", - "correct_option_index": 1 - }, - { - "qsns": "How is a constant member function declared in C++?", - "opt1": "Using the keyword const after the function declaration", - "opt2": "Using the keyword const before the function declaration", - "opt3": "Using the keyword const before the return type", - "opt4": "None of the above", - "correct_option": "Using the keyword const after the function declaration", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following statements is true about constant member functions in C++?", - "opt1": "They can be called only by constant objects of the class", - "opt2": "They can be called only by non-constant objects of the class", - "opt3": "They can be called by both constant and non-constant objects of the class", - "opt4": "None of the above", - "correct_option": "They can be called by both constant and non-constant objects of the class", - "correct_option_index": 3 - }, - { - "qsns": "Can a constant member function modify a static data member of the class?", - "opt1": "Yes, as long as the static data member is declared as mutable", - "opt2": "Yes, as long as the static data member is declared as const", - "opt3": "No, constant member functions cannot modify any data members of the class", - "opt4": "Yes, because static members are not part of the object's state", - "correct_option": "Yes, because static members are not part of the object's state", - "correct_option_index": 4 - }, - { - "qsns": "Which of the following statements is true about constant objects in C++?", - "opt1": "They cannot modify any data members of the class", - "opt2": "They can modify only constant data members of the class", - "opt3": "They can modify any data members of the class", - "opt4": "None of the above", - "correct_option": "They cannot modify any data members of the class", - "correct_option_index": 1 - }, - { - "qsns": "How is a constant object declared in C++?", - "opt1": "Using the keyword const before the object name", - "opt2": "Using the keyword const after the object name", - "opt3": "Using the keyword const before the class name", - "opt4": "None of the above", - "correct_option": "Using the keyword const before the object name", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following statements is true about constant member functions in C++? (Overloading)", - "opt1": "They can be overloaded with non-constant member functions of the same name", - "opt2": "They cannot be overloaded with non-constant member functions of the same name", - "opt3": "They can be overloaded only with other constant member functions of the same name", - "opt4": "None of the above", - "correct_option": "They can be overloaded with non-constant member functions of the same name", - "correct_option_index": 1 - }, - { - "qsns": "What is the output of the following code? (const MyClass obj = {5}; obj.value = 10;)", - "opt1": "5 followed by a compilation error", - "opt2": "5 followed by 10", - "opt3": "Compilation error followed by 5", - "opt4": "None of the above", - "correct_option": "5 followed by a compilation error", - "correct_option_index": 1 - }, - { - "qsns": "What is a constant member function in C++?", - "opt1": "A member function that cannot be modified", - "opt2": "A member function that can be called on a constant object only", - "opt3": "A member function that does not have any return type", - "opt4": "None of the above", - "correct_option": "A member function that cannot be modified", - "correct_option_index": 1 - }, - { - "qsns": "How is a constant member function declared in C++?", - "opt1": "Using the keyword const after the function name", - "opt2": "Using the keyword const after the return type", - "opt3": "Using the keyword const before the function name", - "opt4": "None of the above", - "correct_option": "Using the keyword const after the function name", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following statements is true about constant objects in C++?", - "opt1": "They cannot modify the data members of the class", - "opt2": "They can modify the data members of the class", - "opt3": "They can modify the data members of the class only if they are declared mutable", - "opt4": "None of the above", - "correct_option": "They cannot modify the data members of the class", - "correct_option_index": 1 - }, - { - "qsns": "Can a non-constant member function be called on a constant object in C++?", - "opt1": "Yes, but only if the function does not modify any data members of the class", - "opt2": "No, a non-constant member function cannot be called on a constant object", - "opt3": "Yes, but only if the function is declared const", - "opt4": "None of the above", - "correct_option": "No, a non-constant member function cannot be called on a constant object", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following statements is true about constant objects in C++?", - "opt1": "They can be created using the const keyword before the class name", - "opt2": "They can be created using the const keyword after the object name", - "opt3": "They can be created using the const keyword before the object name", - "opt4": "None of the above", - "correct_option": "They can be created using the const keyword before the object name", - "correct_option_index": 3 - }, - { - "qsns": "Which of the following statements is true about constant objects in C++?", - "opt1": "They can call non-constant member functions of the class", - "opt2": "They cannot call non-constant member functions of the class", - "opt3": "They can call non-constant member functions of the class only if the functions are declared const", - "opt4": "None of the above", - "correct_option": "They cannot call non-constant member functions of the class", - "correct_option_index": 2 - }, - { - "qsns": "Which of the following statements is true about constant objects in C++?", - "opt1": "They can access only constant member functions of the class", - "opt2": "They can access only non-constant member functions of the class", - "opt3": "They can access both constant and non-constant member functions of the class", - "opt4": "None of the above", - "correct_option": "They can access only constant member functions of the class", - "correct_option_index": 1 - }, - { - "qsns": "Which of the following statements is true about constant member functions in C++? (Duplicate logic)", - "opt1": "They cannot modify the data members of the class", - "opt2": "They can modify the data members of the class only if they are declared mutable", - "opt3": "They can modify the data members of the class", - "opt4": "None of the above", - "correct_option": "They cannot modify the data members of the class", - "correct_option_index": 1 - }, - { - "qsns": "What is the output of the following code? (const MyClass obj = {10}; obj.printValue();)", - "opt1": "Value: 10", - "opt2": "Value: 0", - "opt3": "The code will not compile because the object is declared const", - "opt4": "None of the above", - "correct_option": "Value: 10", - "correct_option_index": 1 - } -] \ No newline at end of file + { + "qsns": "What is an Identifier in C programming?", + "opt1": "A keyword that has a specific meaning in the language", + "opt2": "A symbol used to represent a variable, function, or structure in a C program", + "opt3": "A constant value that cannot be changed during program execution", + "opt4": "None of above", + "correct_option": "A symbol used to represent a variable, function, or structure in a C program", + "correct_option_index": 2 + }, + { + "qsns": "What is a constant in C programming?", + "opt1": "A keyword that has a specific meaning in the language", + "opt2": "A symbol used to represent a variable, function, or structure in a C program", + "opt3": "A value that cannot be changed during program execution", + "opt4": "All of above", + "correct_option": "A value that cannot be changed during program execution", + "correct_option_index": 3 + }, + { + "qsns": "What is an operator in C programming?", + "opt1": "A symbol used to perform operations on variables, constants, and expressions", + "opt2": "A symbol used to define variables, functions, and structures", + "opt3": "A symbol used to control the flow of a program", + "opt4": "None of above", + "correct_option": "A symbol used to perform operations on variables, constants, and expressions", + "correct_option_index": 1 + }, + { + "qsns": "What are some examples of operators in C programming?", + "opt1": "Arithmetic, relational, logical, and bitwise operators", + "opt2": "Assignment, conditional, and loop operators", + "opt3": "Structural, pointer, and memory operators", + "opt4": "All of above", + "correct_option": "Arithmetic, relational, logical, and bitwise operators", + "correct_option_index": 1 + }, + { + "qsns": "What is a keyword in C programming?", + "opt1": "A symbol used to perform operations on variables, constants, and expressions", + "opt2": "A symbol used to define variables, functions, and structures", + "opt3": "A word that has a specific meaning in the language and cannot be used as an identifier", + "opt4": "None of above", + "correct_option": "A word that has a specific meaning in the language and cannot be used as an identifier", + "correct_option_index": 3 + }, + { + "qsns": "What are some examples of keywords in C programming?", + "opt1": "int, float, char, if, for, while", + "opt2": "add, subtract, multiply, divide, modulus", + "opt3": "input, output, execute, stop", + "opt4": "Both a and b", + "correct_option": "int, float, char, if, for, while", + "correct_option_index": 1 + }, + { + "qsns": "What is the difference between keywords and identifiers in C programming?", + "opt1": "Keywords have a specific meaning in the language, while identifiers do not", + "opt2": "Keywords are used to define variables, functions, and structures, while identifiers are not", + "opt3": "Keywords cannot be used as identifiers, while identifiers can be used as keywords", + "opt4": "All of above", + "correct_option": "Keywords cannot be used as identifiers, while identifiers can be used as keywords", + "correct_option_index": 3 + }, + { + "qsns": "What is the difference between constants and variables in C programming?", + "opt1": "Constants have a fixed value that cannot be changed, while variables have a value that can be changed", + "opt2": "Constants are used to perform operations, while variables are used to store data", + "opt3": "Constants are used to define functions, while variables are used to define structures", + "opt4": "All of above", + "correct_option": "Constants have a fixed value that cannot be changed, while variables have a value that can be changed", + "correct_option_index": 1 + }, + { + "qsns": "What is the difference between an operator and a function in C programming?", + "opt1": "An operator performs an operation on one or more operands, while a function performs a set of operations on input data", + "opt2": "A function performs an operation on one or more operands, while an operator performs a set of operations on input data", + "opt3": "Operators are written in uppercase, while functions are not", + "opt4": "Functions are written in uppercase, while operators are not", + "correct_option": "An operator performs an operation on one or more operands, while a function performs a set of operations on input data", + "correct_option_index": 1 + }, + { + "qsns": "What is the purpose of a semicolon at the end of a statement in C programming?", + "opt1": "To indicate the end of a statement", + "opt2": "To separate two statements", + "opt3": "To define a function", + "opt4": "To declare a variable", + "correct_option": "To indicate the end of a statement", + "correct_option_index": 1 + }, + { + "qsns": "What is a token in C programming?", + "opt1": "A symbol or keyword used in a C program", + "opt2": "A variable used in a C program", + "opt3": "A function used in a C program", + "opt4": "A structure used in a C program", + "correct_option": "A symbol or keyword used in a C program", + "correct_option_index": 1 + }, + { + "qsns": "What are some examples of tokens in C programming?", + "opt1": "Keywords, identifiers, constants, and operators", + "opt2": "Functions, loops, and conditionals", + "opt3": "Variables, arrays, and structures", + "opt4": "All of above", + "correct_option": "Keywords, identifiers, constants, and operators", + "correct_option_index": 1 + }, + { + "qsns": "What is the purpose of arithmetic operators in C programming?", + "opt1": "To perform basic mathematical operations such as addition, subtraction, multiplication, and division", + "opt2": "To compare values and make decisions based on the comparison results", + "opt3": "To manipulate bits and perform bitwise operations on binary data", + "opt4": "All of above", + "correct_option": "To perform basic mathematical operations such as addition, subtraction, multiplication, and division", + "correct_option_index": 1 + }, + { + "qsns": "What is the purpose of relational operators in C programming?", + "opt1": "To perform basic mathematical operations such as addition, subtraction, multiplication, and division", + "opt2": "To compare values and make decisions based on the comparison results", + "opt3": "To manipulate bits and perform bitwise operations on binary data", + "opt4": "All of above", + "correct_option": "To compare values and make decisions based on the comparison results", + "correct_option_index": 2 + }, + { + "qsns": "What is the purpose of logical operators in C programming?", + "opt1": "To perform basic mathematical operations such as addition, subtraction, multiplication, and division", + "opt2": "To compare values and make decisions based on the comparison results", + "opt3": "To perform logical operations such as AND, OR, and NOT on boolean values", + "opt4": "All of above", + "correct_option": "To perform logical operations such as AND, OR, and NOT on boolean values", + "correct_option_index": 3 + }, + { + "qsns": "What is the purpose of bitwise operators in C programming?", + "opt1": "To perform basic mathematical operations such as addition, subtraction, multiplication, and division", + "opt2": "To compare values and make decisions based on the comparison results", + "opt3": "To manipulate bits and perform bitwise operations on binary data", + "opt4": "All of above", + "correct_option": "To manipulate bits and perform bitwise operations on binary data", + "correct_option_index": 3 + }, + { + "qsns": "What is the difference between the logical AND operator (&&) and the bitwise AND operator (&) in C programming?", + "opt1": "The logical AND operator performs a logical operation on boolean values, while the bitwise AND operator performs a bitwise operation on binary data", + "opt2": "The logical AND operator performs a bitwise operation on boolean values, while the bitwise AND operator performs a logical operation on binary data", + "opt3": "There is no difference between the logical AND operator and the bitwise AND operator in C programming", + "opt4": "All of above", + "correct_option": "The logical AND operator performs a logical operation on boolean values, while the bitwise AND operator performs a bitwise operation on binary data", + "correct_option_index": 1 + }, + { + "qsns": "What is the difference between the logical OR operator (||) and the bitwise OR operator (|) in C programming?", + "opt1": "The logical OR operator performs a logical operation on boolean values, while the bitwise OR operator performs a bitwise operation on binary data", + "opt2": "The logical OR operator performs a bitwise operation on boolean values, while the bitwise OR operator performs a logical operation on binary data", + "opt3": "There is no difference between the logical OR operator and the bitwise OR operator in C programming", + "opt4": "All of above", + "correct_option": "The logical OR operator performs a logical operation on boolean values, while the bitwise OR operator performs a bitwise operation on binary data", + "correct_option_index": 1 + }, + { + "qsns": "What is the result of the following expression: 5 & 6", + "opt1": "5", + "opt2": "6", + "opt3": "4", + "opt4": "1", + "correct_option": "4", + "correct_option_index": 3 + }, + { + "qsns": "What is the result of the following expression: 5<6", + "opt1": "0", + "opt2": "1", + "opt3": "True", + "opt4": "False", + "correct_option": "1", + "correct_option_index": 2 + }, + { + "qsns": "What is the purpose of the conditional operator (?:) in C programming?", + "opt1": "To perform a conditional operation based on the value of a condition", + "opt2": "To perform arithmetic operations", + "opt3": "To declare a variable", + "opt4": "To assign a value to a variable", + "correct_option": "To perform a conditional operation based on the value of a condition", + "correct_option_index": 1 + }, + { + "qsns": "What is the difference between the bitwise AND operator (&) and the bitwise OR operator (|) in C programming?", + "opt1": "The bitwise AND operator performs a bitwise AND operation, while the bitwise OR operator performs a bitwise OR operation", + "opt2": "The bitwise OR operator performs a bitwise AND operation, while the bitwise AND operator performs a bitwise OR operation", + "opt3": "Bitwise AND operators are written in uppercase, while bitwise OR operators are not", + "opt4": "Bitwise OR operators are written in uppercase, while bitwise AND operators are not", + "correct_option": "The bitwise AND operator performs a bitwise AND operation, while the bitwise OR operator performs a bitwise OR operation", + "correct_option_index": 1 + }, + { + "qsns": "What is the purpose of the assignment operator (=) in C programming?", + "opt1": "To compare two values", + "opt2": "To assign a value to a variable", + "opt3": "To perform mathematical operations", + "opt4": "To declare a variable", + "correct_option": "To assign a value to a variable", + "correct_option_index": 2 + }, + { + "qsns": "What is the result of the following expression: 5 + 7 * 2", + "opt1": "19", + "opt2": "26", + "opt3": "16", + "opt4": "9", + "correct_option": "19", + "correct_option_index": 1 + }, + { + "qsns": "What is the difference between formatted and unformatted input/output in C programming?", + "opt1": "Formatted input/output is used to input/output data in a specific format, while unformatted input/output is used to input/output data without any format.", + "opt2": "Formatted input/output is used to input/output data without any format, while unformatted input/output is used to input/output data in a specific format.", + "opt3": "There is no difference between formatted and unformatted input/output in C programming.", + "opt4": "None of above", + "correct_option": "Formatted input/output is used to input/output data in a specific format, while unformatted input/output is used to input/output data without any format.", + "correct_option_index": 1 + }, + { + "qsns": "What are some examples of formatted input functions in C programming?", + "opt1": "scanf(), gets(), and fscanf()", + "opt2": "getchar(), gets(), and fgetc()", + "opt3": "printf(), puts(), and fprintf()", + "opt4": "All of above", + "correct_option": "scanf(), gets(), and fscanf()", + "correct_option_index": 1 + }, + { + "qsns": "What are some examples of formatted output functions in C programming?", + "opt1": "scanf(), gets(), and fscanf()", + "opt2": "getchar(), gets(), and fgetc()", + "opt3": "printf(), puts(), and fprintf()", + "opt4": "All of above", + "correct_option": "printf(), puts(), and fprintf()", + "correct_option_index": 3 + }, + { + "qsns": "What is the purpose of the scanf() function in C programming?", + "opt1": "To output data to the standard output device", + "opt2": "To input data from the standard input device", + "opt3": "To input/output data to/from a file", + "opt4": "All of above", + "correct_option": "To input data from the standard input device", + "correct_option_index": 2 + }, + { + "qsns": "What is the purpose of the printf() function in C programming?", + "opt1": "To output data to the standard output device", + "opt2": "To input data from the standard input device", + "opt3": "To input/output data to/from a file", + "opt4": "All of above", + "correct_option": "To output data to the standard output device", + "correct_option_index": 1 + }, + { + "qsns": "What is the difference between the gets() and scanf() functions in C programming?", + "opt1": "The gets() function inputs data without any format, while the scanf() function inputs data in a specific format.", + "opt2": "The gets() function inputs data in a specific format, while the scanf() function inputs data without any format.", + "opt3": "There is no difference between the gets() and scanf() functions in C programming.", + "opt4": "Both a and b", + "correct_option": "The gets() function inputs data without any format, while the scanf() function inputs data in a specific format.", + "correct_option_index": 1 + }, + { + "qsns": "What is the difference between the puts() and printf() functions in C programming?", + "opt1": "The puts() function outputs data without any format, while the printf() function outputs data in a specific format.", + "opt2": "The puts() function outputs data in a specific format, while the printf() function outputs data without any format.", + "opt3": "There is no difference between the puts() and printf() functions in C programming.", + "opt4": "Both a and b", + "correct_option": "The puts() function outputs data without any format, while the printf() function outputs data in a specific format.", + "correct_option_index": 1 + }, + { + "qsns": "What is the purpose of the fscanf() function in C programming?", + "opt1": "To input data from the standard input device", + "opt2": "To output data to the standard output device", + "opt3": "To input/output data to/from a file", + "opt4": "All of above", + "correct_option": "To input/output data to/from a file", + "correct_option_index": 3 + }, + { + "qsns": "What is the standard library function used to read a string from the user in C?", + "opt1": "scanf()", + "opt2": "gets()", + "opt3": "fgets()", + "opt4": "sprintf()", + "correct_option": "gets()", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following functions is used to print a string to the screen in C?", + "opt1": "puts()", + "opt2": "printf()", + "opt3": "fprintf()", + "opt4": "getchar()", + "correct_option": "puts()", + "correct_option_index": 1 + }, + { + "qsns": "What is the difference between scanf() and fscanf() in C?", + "opt1": "scanf() reads from the standard input and fscanf() reads from a file", + "opt2": "scanf() reads from a file and fscanf() reads from the standard input", + "opt3": "Both functions have the same functionality", + "opt4": "None of the above", + "correct_option": "scanf() reads from the standard input and fscanf() reads from a file", + "correct_option_index": 1 + }, + { + "qsns": "What is the purpose of the %d format specifier in the printf() function in C?", + "opt1": "To print an integer", + "opt2": "To print a string", + "opt3": "To print a float", + "opt4": "To print a double", + "correct_option": "To print an integer", + "correct_option_index": 1 + }, + { + "qsns": "What is the purpose of the %f format specifier in the printf() function in C?", + "opt1": "To print an integer", + "opt2": "To print a string", + "opt3": "To print a float", + "opt4": "To print a double", + "correct_option": "To print a float", + "correct_option_index": 3 + }, + { + "qsns": "What is the purpose of the %lf format specifier in the printf() function in C?", + "opt1": "To print a string", + "opt2": "To print an integer", + "opt3": "To print a float", + "opt4": "To print a double", + "correct_option": "To print a double", + "correct_option_index": 4 + }, + { + "qsns": "Which of the following functions is used to read a single character from the standard input in C?", + "opt1": "scanf()", + "opt2": "gets()", + "opt3": "getchar()", + "opt4": "fgetc()", + "correct_option": "getchar()", + "correct_option_index": 3 + }, + { + "qsns": "What is the purpose of the fopen() function in C?", + "opt1": "To open a file for reading", + "opt2": "To open a file for writing", + "opt3": "To open a file for reading and writing", + "opt4": "None of the above", + "correct_option": "To open a file for reading", + "correct_option_index": 1 + }, + { + "qsns": "What is the purpose of the fclose() function in C?", + "opt1": "To close a file that was opened for reading", + "opt2": "To close a file that was opened for writing", + "opt3": "To close a file that was opened for reading and writing", + "opt4": "None of the above", + "correct_option": "To close a file that was opened for reading and writing", + "correct_option_index": 3 + }, + { + "qsns": "What is the difference between fprintf() and sprintf() in C?", + "opt1": "fprintf() writes to a file and sprintf() writes to a string", + "opt2": "fprintf() writes to a string and sprintf() writes to a file", + "opt3": "Both functions have the same functionality", + "opt4": "None of the above", + "correct_option": "fprintf() writes to a file and sprintf() writes to a string", + "correct_option_index": 1 + }, + { + "qsns": "What is the purpose of the if statement in C programming?", + "opt1": "To execute a block of code only if a certain condition is met", + "opt2": "To execute a block of code only if a certain condition is not met", + "opt3": "To execute a block of code if a certain condition is true", + "opt4": "None of the above", + "correct_option": "To execute a block of code if a certain condition is true", + "correct_option_index": 3 + }, + { + "qsns": "What is the purpose of the else statement in C programming?", + "opt1": "To execute a block of code regardless of the condition", + "opt2": "To execute a block of code if a condition is false", + "opt3": "To terminate the program if a condition is false", + "opt4": "To skip a block of code if a condition is true", + "correct_option": "To execute a block of code if a condition is false", + "correct_option_index": 2 + }, + { + "qsns": "What is the purpose of the switch statement in C programming?", + "opt1": "To execute one of several blocks of code based on the value of an expression", + "opt2": "To execute all of the blocks of code in a switch statement", + "opt3": "To execute only the first block of code in a switch statement", + "opt4": "None of the above", + "correct_option": "To execute one of several blocks of code based on the value of an expression", + "correct_option_index": 1 + }, + { + "qsns": "What is the purpose of the break statement in C programming?", + "opt1": "To exit a loop", + "opt2": "To exit a switch statement", + "opt3": "To exit a function", + "opt4": "To exit the program", + "correct_option": "To exit a switch statement", + "correct_option_index": 2 + }, + { + "qsns": "What is the purpose of the continue statement in C programming?", + "opt1": "To exit a loop", + "opt2": "To exit a switch statement", + "opt3": "To skip an iteration of a loop", + "opt4": "To exit the program", + "correct_option": "To skip an iteration of a loop", + "correct_option_index": 3 + }, + { + "qsns": "What is the purpose of the for loop in C programming?", + "opt1": "To execute a block of code a specified number of times", + "opt2": "To execute a block of code indefinitely", + "opt3": "To execute a block of code based on a condition", + "opt4": "None of the above", + "correct_option": "To execute a block of code a specified number of times", + "correct_option_index": 1 + }, + { + "qsns": "What is the purpose of the while loop in C programming?", + "opt1": "To execute a block of code a specified number of times", + "opt2": "To execute a block of code indefinitely until a condition is met", + "opt3": "To execute a block of code based on a condition", + "opt4": "None of the above", + "correct_option": "To execute a block of code indefinitely until a condition is met", + "correct_option_index": 2 + }, + { + "qsns": "What is an if statement in C programming used for?", + "opt1": "To execute a block of code only if a certain condition is met", + "opt2": "To execute a block of code only if a certain condition is not met", + "opt3": "To execute a block of code if a certain condition is met, and execute another block of code if the condition is not met", + "opt4": "To declare variables", + "correct_option": "To execute a block of code if a certain condition is met, and execute another block of code if the condition is not met", + "correct_option_index": 3 + }, + { + "qsns": "What is the purpose of the do-while loop in C programming?", + "opt1": "To execute a block of code a specified number of times", + "opt2": "To execute a block of code indefinitely until a condition is met", + "opt3": "To execute a block of code at least once, and then repeatedly until a condition is met", + "opt4": "None of the above", + "correct_option": "To execute a block of code at least once, and then repeatedly until a condition is met", + "correct_option_index": 3 + }, + { + "qsns": "What is the difference between the for loop and the while loop in C programming?", + "opt1": "The for loop is used for a specified number of iterations, while the while loop is used until a condition is met", + "opt2": "The for loop is used until a condition is met, while the while loop is used for a specified number of iterations", + "opt3": "Both loops have the same functionality", + "opt4": "None of the above", + "correct_option": "The for loop is used for a specified number of iterations, while the while loop is used until a condition is met", + "correct_option_index": 1 + }, + { + "qsns": "What does the \"if\" statement in C do?", + "opt1": "Executes a block of code if a condition is true", + "opt2": "Executes a block of code regardless of the condition", + "opt3": "Skips a block of code if a condition is false", + "opt4": "Terminates the program if a condition is true", + "correct_option": "Executes a block of code if a condition is true", + "correct_option_index": 1 + }, + { + "qsns": "What is the syntax of the \"if\" statement in C?", + "opt1": "if (condition) { statements }", + "opt2": "if condition { statements }", + "opt3": "if {condition} (statements)", + "opt4": "if (condition) { statements };", + "correct_option": "if (condition) { statements }", + "correct_option_index": 1 + }, + { + "qsns": "What is the purpose of the \"else\" statement in C?", + "opt1": "To execute a block of code if a condition is false", + "opt2": "To execute a block of code regardless of the condition", + "opt3": "To execute a block of code if the condition in the if statement is true", + "opt4": "To execute a block of code if the condition in the if statement is false", + "correct_option": "To execute a block of code if the condition in the if statement is false", + "correct_option_index": 4 + }, + { + "qsns": "What is the syntax of the \"switch\" statement in C?", + "opt1": "switch (expression) { case constant-expression: statements; break; default: statements; }", + "opt2": "switch expression { case constant-expression: statements; break; default: statements; }", + "opt3": "switch (expression) case constant-expression: statements; break; default: statements;", + "opt4": "switch expression case constant-expression: statements; break; default: statements;", + "correct_option": "switch (expression) { case constant-expression: statements; break; default: statements; }", + "correct_option_index": 1 + }, + { + "qsns": "What is the index of the first element in a one-dimensional array in C?", + "opt1": "0", + "opt2": "1", + "opt3": "2", + "opt4": "3", + "correct_option": "0", + "correct_option_index": 1 + }, + { + "qsns": "What is the syntax for declaring a two-dimensional integer array of size 3x4 in C?", + "opt1": "int arr[3][4];", + "opt2": "int arr[4][3];", + "opt3": "int arr[3,4];", + "opt4": "int arr[4,3];", + "correct_option": "int arr[3][4];", + "correct_option_index": 1 + }, + { + "qsns": "How can you access the value of the 3rd element of the 2nd row of a two-dimensional array in C?", + "opt1": "arr[1][2]", + "opt2": "arr[2][1]", + "opt3": "arr[2][3]", + "opt4": "arr[3][2]", + "correct_option": "arr[1][2]", + "correct_option_index": 1 + }, + { + "qsns": "What is the difference between a one-dimensional array and a two-dimensional array in C?", + "opt1": "A one-dimensional array has one row and multiple columns, whereas a two-dimensional array has multiple rows and multiple columns.", + "opt2": "A one-dimensional array has multiple rows and multiple columns, whereas a two-dimensional array has one row and multiple columns.", + "opt3": "A one-dimensional array has multiple rows and one column, whereas a two-dimensional array has one row and one column.", + "opt4": "A one-dimensional array has one row and one column, whereas a two-dimensional array has multiple rows and multiple columns.", + "correct_option": "A one-dimensional array has one row and multiple columns, whereas a two-dimensional array has multiple rows and multiple columns.", + "correct_option_index": 1 + }, + { + "qsns": "What is the syntax for initializing a one-dimensional array in C?", + "opt1": "int arr[] = {1,2,3,4,5};", + "opt2": "int arr[5] = (1,2,3,4,5);", + "opt3": "int arr[5] = {1,2,3,4};", + "opt4": "int arr = {1, 2, 3, 4, 5};", + "correct_option": "int arr[] = {1,2,3,4,5};", + "correct_option_index": 1 + }, + { + "qsns": "How can you find the number of elements in a one-dimensional array in C?", + "opt1": "sizeof(arr)", + "opt2": "sizeof(arr[0])", + "opt3": "sizeof(arr)/sizeof(arr[0])", + "opt4": "sizeof(arr[])/sizeof(arr[0])", + "correct_option": "sizeof(arr)/sizeof(arr[0])", + "correct_option_index": 3 + }, + { + "qsns": "What is the syntax for declaring a multidimensional array in C?", + "opt1": "int arr[][][];", + "opt2": "int arr;", + "opt3": "int arr[];", + "opt4": "int arr[...][...][...];", + "correct_option": "int arr[...][...][...];", + "correct_option_index": 4 + }, + { + "qsns": "What is the use of the strlen() function in C when working with arrays?", + "opt1": "To find the length of a one-dimensional array", + "opt2": "To find the length of a two-dimensional array", + "opt3": "To find the length of a string", + "opt4": "To find the length of a multidimensional array", + "correct_option": "To find the length of a string", + "correct_option_index": 3 + }, + { + "qsns": "What is a one-dimensional array in C?", + "opt1": "A set of values of the same data type stored in a contiguous block of memory", + "opt2": "A set of values of different data types stored in a contiguous block of memory", + "opt3": "A set of values of the same data type stored in non-contiguous memory locations", + "opt4": "A set of values of different data types stored in non-contiguous memory locations", + "correct_option": "A set of values of the same data type stored in a contiguous block of memory", + "correct_option_index": 1 + }, + { + "qsns": "How can you access the value at the third position of a one-dimensional array named \"array\"?", + "opt1": "array[2]", + "opt2": "array[3]", + "opt3": "array[0]", + "opt4": "array[1]", + "correct_option": "array[2]", + "correct_option_index": 1 + }, + { + "qsns": "What is a two-dimensional array in C?", + "opt1": "An array of arrays", + "opt2": "A set of values of the same data type stored in non-contiguous memory locations", + "opt3": "A set of values of different data types stored in a contiguous block of memory", + "opt4": "A set of values of the same data type stored in a single contiguous block of memory", + "correct_option": "An array of arrays", + "correct_option_index": 1 + }, + { + "qsns": "How can you access the value at the first row and second column of a two-dimensional array named \"array\"?", + "opt1": "array[0][1]", + "opt2": "array[1][0]", + "opt3": "array[1][2]", + "opt4": "array[2][1]", + "correct_option": "array[0][1]", + "correct_option_index": 1 + }, + { + "qsns": "What is a multidimensional array in C?", + "opt1": "An array of arrays of arrays", + "opt2": "A set of values of different data types stored in non-contiguous memory locations", + "opt3": "A set of values of the same data type stored in a single contiguous block of memory", + "opt4": "A set of values of different data types stored in a single contiguous block of memory", + "correct_option": "An array of arrays of arrays", + "correct_option_index": 1 + }, + { + "qsns": "What is the difference between a one-dimensional array and a two-dimensional array in C?", + "opt1": "A two-dimensional array has more dimensions than a one-dimensional array", + "opt2": "A one-dimensional array has more dimensions than a two-dimensional array", + "opt3": "There is no difference between a one-dimensional array and a two-dimensional array", + "opt4": "A two-dimensional array can store more values than a one-dimensional array", + "correct_option": "A two-dimensional array has more dimensions than a one-dimensional array", + "correct_option_index": 1 + }, + { + "qsns": "What is the purpose of the \"malloc\" function in C programming?", + "opt1": "To free memory", + "opt2": "To allocate memory", + "opt3": "To initialize memory", + "opt4": "To reset memory", + "correct_option": "To allocate memory", + "correct_option_index": 2 + }, + { + "qsns": "What is the purpose of the \"free\" function in C programming?", + "opt1": "To allocate memory", + "opt2": "To free memory", + "opt3": "To initialize memory", + "opt4": "To reset memory", + "correct_option": "To free memory", + "correct_option_index": 2 + }, + { + "qsns": "What is the difference between an array and a pointer in C programming?", + "opt1": "An array is a set of values stored in a contiguous block of memory, while a pointer is a variable that stores the address of another variable", + "opt2": "A pointer is a set of values stored in a contiguous block of memory, while an array is a variable that stores the address of another variable", + "opt3": "There is no difference between an array and a pointer in C programming", + "opt4": "An array is a variable that stores the address of another variable, while a pointer is a set of values stored in a contiguous block of memory", + "correct_option": "An array is a set of values stored in a contiguous block of memory, while a pointer is a variable that stores the address of another variable", + "correct_option_index": 1 + }, + { + "qsns": "What is a string in C programming?", + "opt1": "A sequence of characters enclosed in quotes", + "opt2": "An array of characters", + "opt3": "A single character", + "opt4": "None of above", + "correct_option": "An array of characters", + "correct_option_index": 2 + }, + { + "qsns": "How can you find the length of a string in C programming?", + "opt1": "By using the length() function", + "opt2": "By using the strlen() function", + "opt3": "By using the sizeof() operator", + "opt4": "None of above", + "correct_option": "By using the strlen() function", + "correct_option_index": 2 + }, + { + "qsns": "How can you concatenate two strings in C programming?", + "opt1": "By using the + operator", + "opt2": "By using the strcat() function", + "opt3": "By using the strcpy() function", + "opt4": "None of above", + "correct_option": "By using the strcat() function", + "correct_option_index": 2 + }, + { + "qsns": "What does the strcpy() function do in C programming?", + "opt1": "Copies one string to another", + "opt2": "Concatenates two strings", + "opt3": "Compares two strings", + "opt4": "None of above", + "correct_option": "Copies one string to another", + "correct_option_index": 1 + }, + { + "qsns": "What is the difference between the strcpy() and strcat() functions in C programming?", + "opt1": "strcpy() copies one string to another, while strcat() concatenates two strings", + "opt2": "strcpy() concatenates two strings, while strcat() copies one string to another", + "opt3": "Both functions copy one string to another", + "opt4": "None of above", + "correct_option": "strcpy() copies one string to another, while strcat() concatenates two strings", + "correct_option_index": 1 + }, + { + "qsns": "How can you compare two strings in C programming?", + "opt1": "By using the strcmp() function", + "opt2": "By using the strcat() function", + "opt3": "By using the strcpy() function", + "opt4": "Both a and b", + "correct_option": "By using the strcmp() function", + "correct_option_index": 1 + }, + { + "qsns": "What is the return value of the strcmp() function when two strings are equal?", + "opt1": "0", + "opt2": "1", + "opt3": "-1", + "opt4": "null", + "correct_option": "0", + "correct_option_index": 1 + }, + { + "qsns": "What is the return value of the strcmp() function when the first string is greater than the second string?", + "opt1": "0", + "opt2": "1", + "opt3": "-1", + "opt4": "null", + "correct_option": "1", + "correct_option_index": 2 + }, + { + "qsns": "What is the return value of the strcmp() function when the first string is less than the second string?", + "opt1": "0", + "opt2": "1", + "opt3": "-1", + "opt4": "null", + "correct_option": "-1", + "correct_option_index": 3 + }, + { + "qsns": "How can you reverse a string in C programming?", + "opt1": "By using the strrev() function", + "opt2": "By using a loop and swapping characters", + "opt3": "There is no built-in function to reverse a string in C programming", + "opt4": "None of above", + "correct_option": "By using a loop and swapping characters", + "correct_option_index": 2 + }, + { + "qsns": "What is the purpose of the strcat() function in C programming?", + "opt1": "To copy a string to another string.", + "opt2": "To concatenate two strings.", + "opt3": "To find the length of a string.", + "opt4": "To compare two strings.", + "correct_option": "To concatenate two strings.", + "correct_option_index": 2 + }, + { + "qsns": "What is the purpose of the strcmp() function in C programming?", + "opt1": "To copy a string to another string.", + "opt2": "To find the length of a string.", + "opt3": "To concatenate two strings.", + "opt4": "To compare two strings.", + "correct_option": "To compare two strings.", + "correct_option_index": 4 + }, + { + "qsns": "What is the purpose of the strcpy() function in C programming?", + "opt1": "To copy a string to another string.", + "opt2": "To find the length of a string.", + "opt3": "To concatenate two strings.", + "opt4": "To compare two strings.", + "correct_option": "To copy a string to another string.", + "correct_option_index": 1 + }, + { + "qsns": "What is the purpose of the strlen() function in C programming?", + "opt1": "To compare two strings.", + "opt2": "To concatenate two strings.", + "opt3": "To find the length of a string.", + "opt4": "To copy a string to another string.", + "correct_option": "To find the length of a string.", + "correct_option_index": 3 + }, + { + "qsns": "What is the purpose of the strstr() function in C programming?", + "opt1": "To find a substring in a string.", + "opt2": "To compare two strings.", + "opt3": "To find the first occurrence of a character in a string.", + "opt4": "To reverse a string.", + "correct_option": "To find a substring in a string.", + "correct_option_index": 1 + }, + { + "qsns": "How can you convert a string to uppercase in C programming?", + "opt1": "By using the toupper() function.", + "opt2": "By using a loop and converting each character.", + "opt3": "By using the strcat() function.", + "opt4": "By using the strcmp() function.", + "correct_option": "By using a loop and converting each character.", + "correct_option_index": 2 + }, + { + "qsns": "How can you convert a string to lowercase in C programming?", + "opt1": "By using the tolower() function.", + "opt2": "By using a loop and converting each character.", + "opt3": "By using the strcat() function.", + "opt4": "By using the strcmp() function.", + "correct_option": "By using a loop and converting each character.", + "correct_option_index": 2 + }, + { + "qsns": "What is the purpose of the sprintf() function in C programming?", + "opt1": "To format and store a string in a buffer.", + "opt2": "To concatenate two string", + "opt3": "To find the length of a string.", + "opt4": "To compare two strings.", + "correct_option": "To format and store a string in a buffer.", + "correct_option_index": 1 + }, + { + "qsns": "What is the purpose of the sscanf() function in C programming?", + "opt1": "To read formatted input from a string.", + "opt2": "To concatenate two strings.", + "opt3": "To find the length of a string.", + "opt4": "To compare two strings.", + "correct_option": "To read formatted input from a string.", + "correct_option_index": 1 + }, + { + "qsns": "What is the output of the following code? int a = 10; int *p = &a; printf(\"%p\", p);", + "opt1": "10", + "opt2": "0", + "opt3": "Address of a", + "opt4": "Undefined", + "correct_option": "Address of a", + "correct_option_index": 3 + }, + { + "qsns": "What is the output of the following code? int a = 10; int *p = &a; printf(\"%d\", *p);", + "opt1": "10", + "opt2": "0", + "opt3": "Address of a", + "opt4": "Undefined", + "correct_option": "10", + "correct_option_index": 1 + }, + { + "qsns": "What is the correct way to declare a pointer to a character in C?", + "opt1": "char *str;", + "opt2": "char *str();", + "opt3": "char str*;", + "opt4": "char (*str)();", + "correct_option": "char *str;", + "correct_option_index": 1 + }, + { + "qsns": "What is the output of the following code? int arr[5] = {1, 2, 3, 4, 5}; int *p = arr; printf(\"%d\", *(p+3));", + "opt1": "4", + "opt2": "3", + "opt3": "5", + "opt4": "Undefined", + "correct_option": "4", + "correct_option_index": 1 + }, + { + "qsns": "What is the output of the following code? int arr[5] = {1, 2, 3, 4, 5}; int *p = arr + 2; printf(\"%d\", *(p-1));", + "opt1": "2", + "opt2": "3", + "opt3": "4", + "opt4": "Undefined", + "correct_option": "2", + "correct_option_index": 1 + }, + { + "qsns": "What is the output of the following code? int a = 10; int *p = &a; int **q = &p; printf(\"%d\", **q);", + "opt1": "10", + "opt2": "0", + "opt3": "Address of a", + "opt4": "Undefined", + "correct_option": "10", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following is a valid way to declare a pointer to an integer array of size 5?", + "opt1": "int (*arr)[5];", + "opt2": "int *arr[5];", + "opt3": "int **arr[5];", + "opt4": "int arr*[5];", + "correct_option": "int (*arr)[5];", + "correct_option_index": 1 + }, + { + "qsns": "What is the result of the following code? int arr[] = {1, 2, 3, 4}; int *p = arr + 1; printf(\"%d\", *(p--));", + "opt1": "2", + "opt2": "1", + "opt3": "3", + "opt4": "4", + "correct_option": "2", + "correct_option_index": 1 + }, + { + "qsns": "What is the result of the following code? int arr[] = {1, 2, 3, 4}; int *p = arr + 2; printf(\"%d\", *(--p));", + "opt1": "2", + "opt2": "1", + "opt3": "3", + "opt4": "4", + "correct_option": "2", + "correct_option_index": 1 + }, + { + "qsns": "What is the output of the following code? int arr[] = {1, 2, 3, 4}; int *p = arr; printf(\"%d\", *p++);", + "opt1": "1", + "opt2": "2", + "opt3": "3", + "opt4": "4", + "correct_option": "1", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following is true about pointer arithmetic in C?", + "opt1": "Addition and subtraction operations can be performed on pointers", + "opt2": "Multiplication and division operations can be performed on pointers", + "opt3": "Bitwise AND and OR operations can be performed on pointers", + "opt4": "None of the above", + "correct_option": "Addition and subtraction operations can be performed on pointers", + "correct_option_index": 1 + }, + { + "qsns": "If 'ptr' is a pointer to an integer variable, what will be the output of the following code? printf(\"%d\", ptr+1);", + "opt1": "The memory address of ptr", + "opt2": "The value of ptr", + "opt3": "The memory address of the integer variable ptr is pointing to", + "opt4": "The value of the integer variable ptr+1 is pointing to", + "correct_option": "The value of the integer variable ptr+1 is pointing to", + "correct_option_index": 4 + }, + { + "qsns": "What is the result of the following code? int arr[] = {1, 2, 3, 4}; int *p = arr; printf(\"%d\", *(p++));", + "opt1": "1", + "opt2": "2", + "opt3": "3", + "opt4": "4", + "correct_option": "1", + "correct_option_index": 1 + }, + { + "qsns": "What is the result of the following code? int arr[] = {1, 2, 3, 4}; int *p = arr; printf(\"%d\", *(p-2));", + "opt1": "1", + "opt2": "2", + "opt3": "3", + "opt4": "4", + "correct_option": "Undefined", + "correct_option_index": 4 + }, + { + "qsns": "What is the result of the following code? int arr[] = {1, 2, 3, 4}; int *p = arr; printf(\"%d\", *(p+4));", + "opt1": "1", + "opt2": "3", + "opt3": "4", + "opt4": "Undefined", + "correct_option": "Undefined", + "correct_option_index": 4 + }, + { + "qsns": "What is the result of the following code? int a = 5, b = 10; int *p1 = &a; int *p2 = &b; int *temp; temp = p1; p1 = p2; p2 = temp; printf(\"%d %d\", *p1, *p2);", + "opt1": "5 10", + "opt2": "10 5", + "opt3": "Undefined", + "opt4": "Error", + "correct_option": "10 5", + "correct_option_index": 2 + }, + { + "qsns": "What is the output of the following code? int a = 10; int *p = &a; (*p)++; printf(\"%d\", a);", + "opt1": "9", + "opt2": "10", + "opt3": "11", + "opt4": "Undefined", + "correct_option": "11", + "correct_option_index": 3 + }, + { + "qsns": "What is the result of the following code? int arr[] = {1, 2, 3, 4}; int *p = arr + 2; printf(\"%d\", p[-1]);", + "opt1": "1", + "opt2": "2", + "opt3": "3", + "opt4": "4", + "correct_option": "2", + "correct_option_index": 2 + }, + { + "qsns": "What is the result of the following code? int arr[] = {1, 2, 3, 4, 5}; int *p = arr + 2; printf(\"%d\", *p);", + "opt1": "1", + "opt2": "2", + "opt3": "3", + "opt4": "4", + "correct_option": "3", + "correct_option_index": 3 + }, + { + "qsns": "What is the data type of the pointer variable in the following code? char *p;", + "opt1": "char", + "opt2": "int", + "opt3": "float", + "opt4": "double", + "correct_option": "char", + "correct_option_index": 1 + }, + { + "qsns": "What is the result of the following code? int x = 10, y = 20, z; int *p = &x, *q = &y; z = *p + (*q)++; printf(\"%d %d %d\", x, y, z);", + "opt1": "11 20 30", + "opt2": "10 21 31", + "opt3": "11 21 30", + "opt4": "10 20 31", + "correct_option": "10 21 30", + "correct_option_index": 3 + }, + { + "qsns": "What is the result of the following code? int arr[] = {1, 2, 3, 4, 5}; int *p = &arr[3]; printf(\"%d\", *(p-2));", + "opt1": "1", + "opt2": "2", + "opt3": "3", + "opt4": "4", + "correct_option": "2", + "correct_option_index": 2 + }, + { + "qsns": "What is the result of the following code? int arr[] = {1, 2, 3, 4, 5}; int *p = arr; printf(\"%d\", *(++p));", + "opt1": "1", + "opt2": "2", + "opt3": "3", + "opt4": "4", + "correct_option": "2", + "correct_option_index": 2 + }, + { + "qsns": "What is the result of the following code? int arr[] = {1, 2, 3, 4, 5}; int *p = arr; printf(\"%d\", *(p+2));", + "opt1": "1", + "opt2": "2", + "opt3": "3", + "opt4": "4", + "correct_option": "3", + "correct_option_index": 3 + }, + { + "qsns": "Which of the following is true about structures in C?", + "opt1": "Structures can contain only variables of the same data type", + "opt2": "Structures can contain variables of different data types", + "opt3": "Structures cannot be passed as function arguments", + "opt4": "Structures cannot be returned by functions", + "correct_option": "Structures can contain variables of different data types", + "correct_option_index": 2 + }, + { + "qsns": "How do you declare a structure in C?", + "opt1": "struct {name, age};", + "opt2": "struct (name, age);", + "opt3": "struct person { char name[20]; int age; };", + "opt4": "struct {person name, person age};", + "correct_option": "struct person { char name[20]; int age; };", + "correct_option_index": 3 + }, + { + "qsns": "Which of the following is used to access the members of a structure?", + "opt1": "&", + "opt2": ".", + "opt3": ":", + "opt4": "->", + "correct_option": ".", + "correct_option_index": 2 + }, + { + "qsns": "How do you assign values to members of a structure in C?", + "opt1": "using the assignment operator", + "opt2": "using the dot operator", + "opt3": "using the arrow operator ->", + "opt4": "using the asterisk operator*", + "correct_option": "using the assignment operator", + "correct_option_index": 1 + }, + { + "qsns": "What is the purpose of typedef in C structures?", + "opt1": "to declare a new variable", + "opt2": "to define a new data type", + "opt3": "to initialize a structure", + "opt4": "to allocate memory for a structure", + "correct_option": "to define a new data type", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following statements is true regarding the size of a structure in C?", + "opt1": "The size of a structure is the sum of the sizes of its members", + "opt2": "The size of a structure is always 4 bytes", + "opt3": "The size of a structure is the size of its largest member", + "opt4": "The size of a structure is the size of its smallest member", + "correct_option": "The size of a structure is the sum of the sizes of its members", + "correct_option_index": 1 + }, + { + "qsns": "What is the operator used to dynamically allocate memory for a structure in C?", + "opt1": ".", + "opt2": "&", + "opt3": "->", + "opt4": "malloc()", + "correct_option": "malloc()", + "correct_option_index": 4 + }, + { + "qsns": "What is the operator used to deallocate memory allocated for a structure in C?", + "opt1": "&", + "opt2": ".", + "opt3": "free()", + "opt4": "calloc()", + "correct_option": "free()", + "correct_option_index": 3 + }, + { + "qsns": "What is the purpose of a union in C?", + "opt1": "to combine multiple structures", + "opt2": "to create a new data type", + "opt3": "to declare a variable", + "opt4": "to share the same memory location for different data types", + "correct_option": "to share the same memory location for different data types", + "correct_option_index": 4 + }, + { + "qsns": "Which of the following is true about nested structures in C?", + "opt1": "Nested structures are not allowed in C", + "opt2": "Nested structures can only contain variables of the same data type", + "opt3": "Nested structures can be defined inside another structure", + "opt4": "Nested structures can only contain pointers to other structures", + "correct_option": "Nested structures can be defined inside another structure", + "correct_option_index": 3 + }, + { + "qsns": "What is a structure in C programming?", + "opt1": "A data type that groups variables of different types", + "opt2": "A data type that groups variables of the same type", + "opt3": "A data type that groups variables of the same size", + "opt4": "A data type that groups variables of different sizes", + "correct_option": "A data type that groups variables of different types", + "correct_option_index": 1 + }, + { + "qsns": "What is the correct syntax to access a member of a nested structure?", + "opt1": "outer_structure.inner_structure.member_name", + "opt2": "inner_structure.member_name.outer_structure", + "opt3": "member_name.outer_structure.inner_structure", + "opt4": "None of the above", + "correct_option": "outer_structure.inner_structure.member_name", + "correct_option_index": 1 + }, + { + "qsns": "What is the size of an empty structure in C programming?", + "opt1": "0 bytes", + "opt2": "1 byte", + "opt3": "4 bytes", + "opt4": "8 bytes", + "correct_option": "0 bytes", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following is not a valid way to initialize a structure variable in C programming?", + "opt1": "struct book b = {\"C Programming\", \"John Doe\", 100};", + "opt2": "struct book b = {.name = \"C Programming\", .author = \"John Doe\", .price = 100};", + "opt3": "struct book b = {\"C Programming\", price=100};", + "opt4": "struct book b; b = {\"C Programming\", \"John Doe\", 100};", + "correct_option": "struct book b; b = {\"C Programming\", \"John Doe\", 100};", + "correct_option_index": 4 + }, + { + "qsns": "What is a nested structure in C programming?", + "opt1": "A structure that has no members", + "opt2": "A structure that is defined inside another structure", + "opt3": "A structure that has only one member", + "opt4": "A structure that has members of different data types", + "correct_option": "A structure that is defined inside another structure", + "correct_option_index": 2 + }, + { + "qsns": "In C programming, which keyword is used to define a structure?", + "opt1": "typedef", + "opt2": "define", + "opt3": "structdef", + "opt4": "struct", + "correct_option": "struct", + "correct_option_index": 4 + }, + { + "qsns": "Which of the following statements is true about passing a structure to a function in C programming?", + "opt1": "Structures cannot be passed to a function.", + "opt2": "Structures are passed by value to a function.", + "opt3": "Structures are passed by reference to a function.", + "opt4": "Structures are passed as arrays to a function.", + "correct_option": "Structures are passed by value to a function.", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following is not a valid way to declare a pointer to a structure in C programming?", + "opt1": "struct *book b;", + "opt2": "struct book *b;", + "opt3": "typedef struct book *bookptr;", + "opt4": "typedef struct book booktype;", + "correct_option": "struct *book b;", + "correct_option_index": 1 + }, + { + "qsns": "What is the keyword used to access the address of a structure variable in C programming?", + "opt1": "&", + "opt2": "*", + "opt3": "#", + "opt4": "$", + "correct_option": "&", + "correct_option_index": 1 + }, + { + "qsns": "What is the main difference between a structure and a union in C programming?", + "opt1": "A structure allows for multiple members to be accessed at once, while a union only allows for one member to be accessed at a time.", + "opt2": "A union allows for multiple members to be accessed at once, while a structure only allows for one member to be accessed at a time.", + "opt3": "There is no difference between a structure and a union in C programming.", + "opt4": "None of above", + "correct_option": "A structure allows for multiple members to be accessed at once, while a union only allows for one member to be accessed at a time.", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following is the correct way to access a structure member using a pointer to a structure?", + "opt1": "structure_pointer->member_name", + "opt2": "*structure_pointer.member_name", + "opt3": "structure_pointer.member_name", + "opt4": "None of the above", + "correct_option": "structure_pointer->member_name", + "correct_option_index": 1 + }, + { + "qsns": "What is the difference between passing a structure by value and passing a structure by pointer in C?", + "opt1": "When a structure is passed by value, any modifications made to it in the function are lost when the function returns. When a structure is passed by pointer, the modifications are retained.", + "opt2": "When a structure is passed by value, any modifications made to it in the function are retained when the function returns. When a structure is passed by pointer, the modifications are lost.", + "opt3": "There is no difference between passing a structure by value and passing a structure by pointer in C.", + "opt4": "None of the above", + "correct_option": "When a structure is passed by value, any modifications made to it in the function are lost when the function returns. When a structure is passed by pointer, the modifications are retained.", + "correct_option_index": 1 + }, + { + "qsns": "In a structure, what is the default visibility of its members?", + "opt1": "Private", + "opt2": "Public", + "opt3": "Protected", + "opt4": "None of the above", + "correct_option": "Public", + "correct_option_index": 2 + }, + { + "qsns": "In a union, how much memory is allocated for the union itself?", + "opt1": "The size of the largest member", + "opt2": "The size of all members combined", + "opt3": "The size of the smallest member", + "opt4": "The size of the union is not allocated in memory", + "correct_option": "The size of the largest member", + "correct_option_index": 1 + }, + { + "qsns": "What is the main advantage of using a union over a structure?", + "opt1": "It uses less memory", + "opt2": "It is easier to declare and use", + "opt3": "It can hold more types of data", + "opt4": "It is faster to access its members", + "correct_option": "It uses less memory", + "correct_option_index": 1 + }, + { + "qsns": "In a union, can two or more members be accessed simultaneously?", + "opt1": "Yes, always", + "opt2": "Yes, but only if they are of the same type", + "opt3": "No, only one member can be accessed at a time", + "opt4": "Yes, but only if the member is a pointer", + "correct_option": "No, only one member can be accessed at a time", + "correct_option_index": 3 + }, + { + "qsns": "What is the purpose of declaring a bit field in a structure?", + "opt1": "To save memory", + "opt2": "To improve performance", + "opt3": "To store binary data", + "opt4": "To limit the number of possible values for a member", + "correct_option": "To save memory", + "correct_option_index": 1 + }, + { + "qsns": "Can a structure or union contain a member that is itself a structure or union?", + "opt1": "Yes, there is no restriction on the type of members", + "opt2": "No, structures and unions cannot contain other structures or unions", + "opt3": "Yes, but only if the member is declared as static", + "opt4": "None of above", + "correct_option": "Yes, there is no restriction on the type of members", + "correct_option_index": 1 + }, + { + "qsns": "How do you access a member of a structure or union using a pointer?", + "opt1": "-> operator", + "opt2": ". operator", + "opt3": "& operator", + "opt4": "* operator", + "correct_option": "-> operator", + "correct_option_index": 1 + }, + { + "qsns": "In a union, what is the value of a member that was not explicitly set?", + "opt1": "Zero", + "opt2": "Garbage value", + "opt3": "Undefined", + "opt4": "The value of the previous member", + "correct_option": "Garbage value", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following statements is true about the size of a structure or union in C programming?", + "opt1": "The size of a structure or union is the sum of the sizes of its members", + "opt2": "The size of a structure or union is always a multiple of the size of its largest member", + "opt3": "The size of a structure or union depends on the alignment requirements of its members", + "opt4": "The size of a structure or union is always equal to the size of its largest member", + "correct_option": "The size of a structure or union depends on the alignment requirements of its members", + "correct_option_index": 3 + }, + { + "qsns": "What is the difference between a structure and a union in C programming?", + "opt1": "A structure allows for multiple members to be accessed at once, while a union only allows for one member to be accessed at a time.", + "opt2": "A union allows for multiple members to be accessed at once, while a structure only allows for one member to be accessed at a time.", + "opt3": "There is no difference between a structure and a union in C programming.", + "opt4": "None of above", + "correct_option": "A structure allows for multiple members to be accessed at once, while a union only allows for one member to be accessed at a time.", + "correct_option_index": 1 + }, + { + "qsns": "What is the size of a structure in C programming?", + "opt1": "The size of a structure is equal to the sum of the sizes of its members.", + "opt2": "The size of a structure is equal to the size of its largest member.", + "opt3": "The size of a structure is equal to the size of its smallest member.", + "opt4": "None of above", + "correct_option": "The size of a structure is equal to the sum of the sizes of its members.", + "correct_option_index": 1 + }, + { + "qsns": "How do you access a member of a structure in C programming?", + "opt1": "Using the dot (.) operator.", + "opt2": "Using the arrow (->) operator.", + "opt3": "Using the asterisk (*) operator.", + "opt4": "None of above", + "correct_option": "Using the dot (.) operator.", + "correct_option_index": 1 + }, + { + "qsns": "What is the keyword used to define a structure in C programming?", + "opt1": "struct", + "opt2": "union", + "opt3": "typedef", + "opt4": "None of above", + "correct_option": "struct", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following statements about unions is true in C programming?", + "opt1": "Unions can contain members of different types.", + "opt2": "Unions cannot contain members.", + "opt3": "Unions can only contain members of the same type.", + "opt4": "None of above", + "correct_option": "Unions can contain members of different types.", + "correct_option_index": 1 + }, + { + "qsns": "What is the difference between a structure and a typedef struct in C programming?", + "opt1": "There is no difference.", + "opt2": "Typedef struct can only be used to define new data types.", + "opt3": "Typedef struct is a faster way to create a new structure type.", + "opt4": "None of above", + "correct_option": "Typedef struct is a faster way to create a new structure type.", + "correct_option_index": 3 + }, + { + "qsns": "Can a structure contain a pointer to itself in C programming?", + "opt1": "Yes", + "opt2": "No", + "opt3": "It depends on the compiler used.", + "opt4": "It depends on Interpreter used.", + "correct_option": "Yes", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following statements is true about the alignment of structure members in C programming?", + "opt1": "Members of a structure are always aligned to the nearest byte boundary.", + "opt2": "Members of a structure are aligned based on their size and type.", + "opt3": "Members of a structure are not aligned in C programming.", + "opt4": "None of above", + "correct_option": "Members of a structure are aligned based on their size and type.", + "correct_option_index": 2 + }, + { + "qsns": "What is the purpose of a bit-field in a structure in C programming?", + "opt1": "To allow the structure to store more data than its size would normally allow.", + "opt2": "To create a member that is only one bit in size.", + "opt3": "To allow the structure to be accessed in a bit-wise manner.", + "opt4": "None of above", + "correct_option": "To create a member that is only one bit in size.", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following is an example of a valid structure declaration in C programming?", + "opt1": "struct person {char name[50]; int age;}", + "opt2": "struct person (char name[50]; int age;)", + "opt3": "person_struct {char name[50]; int age;}", + "opt4": "None of above", + "correct_option": "struct person {char name[50]; int age;}", + "correct_option_index": 1 + }, + { + "qsns": "What is the syntax for declaring an array of structures in C?", + "opt1": "struct array_name[size];", + "opt2": "array_name[size] struct;", + "opt3": "array_name[size] struct;", + "opt4": "struct[size] array_name;", + "correct_option": "struct array_name[size];", + "correct_option_index": 1 + }, + { + "qsns": "In C programming, how do you access a particular member of a structure within an array of structures?", + "opt1": "array_name[index].member_name", + "opt2": "member_name.array_name[index]", + "opt3": "struct.array_name[index].member_name", + "opt4": "member_name[index].array_name", + "correct_option": "array_name[index].member_name", + "correct_option_index": 1 + }, + { + "qsns": "What is the purpose of using an array of structures in C?", + "opt1": "To group similar data types together in a single entity.", + "opt2": "To group different data types together in a single entity.", + "opt3": "To make the code easier to read and maintain.", + "opt4": "To create a single variable that can hold multiple values.", + "correct_option": "To group similar data types together in a single entity.", + "correct_option_index": 1 + }, + { + "qsns": "How do you initialize an array of structures in C?", + "opt1": "By setting each member of the array individually.", + "opt2": "By setting the values of the first member of the array, which automatically sets the values of the rest of the members.", + "opt3": "By using a loop to set the values of each member of the array.", + "opt4": "By using a pointer to set the values of each member of the array.", + "correct_option": "By setting each member of the array individually.", + "correct_option_index": 1 + }, + { + "qsns": "What is the maximum number of dimensions that an array of structures can have in C?", + "opt1": "One", + "opt2": "Two", + "opt3": "Three", + "opt4": "There is no limit", + "correct_option": "There is no limit", + "correct_option_index": 4 + }, + { + "qsns": "What is the purpose of using a typedef with an array of structures in C?", + "opt1": "To make it easier to declare variables of that type.", + "opt2": "To make the code more readable.", + "opt3": "To make it easier to access the members of the array.", + "opt4": "To create a new data type.", + "correct_option": "To create a new data type.", + "correct_option_index": 4 + }, + { + "qsns": "Which of the following is a valid way to access a member of a structure within an array of structures in C?", + "opt1": "array_name.member_name[index]", + "opt2": "array_name[index].member_name", + "opt3": "member_name.array_name[index]", + "opt4": "struct.array_name[index].member_name", + "correct_option": "array_name[index].member_name", + "correct_option_index": 2 + }, + { + "qsns": "How do you declare a pointer to an array of structures in C?", + "opt1": "struct *array_name[size];", + "opt2": "struct (*array_name)[size];", + "opt3": "struct *array_name[size];", + "opt4": "struct (*array_name)[size];", + "correct_option": "struct (*array_name)[size];", + "correct_option_index": 4 + }, + { + "qsns": "In C programming, how do you access a particular member of a structure within a pointer to an array of structures?", + "opt1": "pointer_name->member_name[index]", + "opt2": "pointer_name[index]->member_name", + "opt3": "pointer_name.member_name[index]", + "opt4": "pointer_name[index].member_name", + "correct_option": "pointer_name[index].member_name", + "correct_option_index": 4 + }, + { + "qsns": "How do you dynamically allocate memory for an array of structures in C?", + "opt1": "By using the malloc() function.", + "opt2": "By using the calloc() function.", + "opt3": "By using the realloc() function.", + "opt4": "By using the free() function.", + "correct_option": "By using the malloc() function.", + "correct_option_index": 1 + }, + { + "qsns": "How do you declare an array of structures in C?", + "opt1": "struct Array = {...}", + "opt2": "struct *Array = {...}", + "opt3": "struct Array[] = {...}", + "opt4": "struct Array {...}", + "correct_option": "struct Array[] = {...}", + "correct_option_index": 3 + }, + { + "qsns": "What is the correct syntax for accessing the member variable \"age\" of the first structure in an array of structures named \"people\"?", + "opt1": "people.age[0]", + "opt2": "people[0].age", + "opt3": "people.age->0", + "opt4": "age[0].people", + "correct_option": "people[0].age", + "correct_option_index": 2 + }, + { + "qsns": "What is the maximum number of elements that can be stored in an array of structures?", + "opt1": "There is no maximum number", + "opt2": "The maximum number is determined by the size of each element", + "opt3": "The maximum number is 1024", + "opt4": "The maximum number is determined by the amount of available memory", + "correct_option": "The maximum number is determined by the amount of available memory", + "correct_option_index": 4 + }, + { + "qsns": "Which of the following is a valid way to initialize an array of structures in C?", + "opt1": "struct person[] = {{1, \"John\"}, {2, \"Jane\"}}", + "opt2": "struct person[] = { 1, \"John\" , {2, \"Jane\"}, {3, \"Bob\"}}", + "opt3": "struct person = [1] = {1, \"John\"}, [2]= {2, \"Jane\"}", + "opt4": "All of the above", + "correct_option": "struct person[] = {{1, \"John\"}, {2, \"Jane\"}}", + "correct_option_index": 1 + }, + { + "qsns": "What is the size of the following structure? struct student { char name[50]; int age; float gpa; };", + "opt1": "54 bytes", + "opt2": "60 bytes", + "opt3": "62 bytes", + "opt4": "64 bytes", + "correct_option": "60 bytes", + "correct_option_index": 2 + }, + { + "qsns": "Which operator is used to access a member of a structure through a pointer to the structure?", + "opt1": ".", + "opt2": "->", + "opt3": "*", + "opt4": "&", + "correct_option": "->", + "correct_option_index": 2 + }, + { + "qsns": "What is the correct syntax for declaring a pointer to a structure?", + "opt1": "struct *p;", + "opt2": "struct p;", + "opt3": "struct pointer;", + "opt4": "struct person *p;", + "correct_option": "struct person *p;", + "correct_option_index": 4 + }, + { + "qsns": "How can you dynamically allocate memory for an array of structures in C?", + "opt1": "struct array = (struct *) malloc(sizeof(struct) * n);", + "opt2": "struct array = (struct**) malloc(n * sizeof(struct));", + "opt3": "struct array = (struct*) malloc(n);", + "opt4": "struct array = (struct*) malloc(sizeof(struct));", + "correct_option": "struct array = (struct *) malloc(sizeof(struct) * n);", + "correct_option_index": 1 + }, + { + "qsns": "How can you access the last element in an array of structures with n elements?", + "opt1": "arr[n]", + "opt2": "arr[n-1]", + "opt3": "arr.last", + "opt4": "arr.end", + "correct_option": "arr[n-1]", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following is an advantage of using an array of structures instead of multiple individual structures?", + "opt1": "Easier to manage", + "opt2": "Easier to pass to functions", + "opt3": "Requires less memory", + "opt4": "All of the above", + "correct_option": "All of the above", + "correct_option_index": 4 + }, + { + "qsns": "What is the syntax for passing a structure to a function in C?", + "opt1": "function(struct s)", + "opt2": "function(struct *s)", + "opt3": "function(*s)", + "opt4": "function(&s)", + "correct_option": "function(struct s)", + "correct_option_index": 1 + }, + { + "qsns": "How do you declare a function that takes a structure as an argument in C?", + "opt1": "void myFunction(struct myStruct);", + "opt2": "void myFunction(struct myStruct *);", + "opt3": "void myFunction(*myStruct);", + "opt4": "void myFunction(&myStruct);", + "correct_option": "void myFunction(struct myStruct);", + "correct_option_index": 1 + }, + { + "qsns": "Can you pass an array of structures to a function in C?", + "opt1": "No, C does not support passing arrays of structures to functions", + "opt2": "Yes, you can pass an array of structures to a function using a pointer", + "opt3": "Yes, you can pass an array of structures to a function by value", + "opt4": "Yes, you can pass an array of structures to a function using the & operator", + "correct_option": "Yes, you can pass an array of structures to a function using a pointer", + "correct_option_index": 2 + }, + { + "qsns": "How does passing a structure to a function by reference (i.e. using a pointer) differ from passing it by value?", + "opt1": "Passing by reference creates a copy of the structure, while passing by value does not", + "opt2": "Passing by reference allows the function to modify the original structure, while passing by value does not", + "opt3": "Passing by reference is slower than passing by value", + "opt4": "Passing by reference is not allowed in C", + "correct_option": "Passing by reference allows the function to modify the original structure, while passing by value does not", + "correct_option_index": 2 + }, + { + "qsns": "What is the advantage of passing a structure to a function by reference instead of by value?", + "opt1": "Passing by reference is faster", + "opt2": "Passing by reference allows the function to modify the original structure", + "opt3": "Passing by reference is easier to write", + "opt4": "Passing by reference requires less memory", + "correct_option": "Passing by reference is faster", + "correct_option_index": 1 + }, + { + "qsns": "How do you access a structure member inside a function that takes a pointer to the structure as an argument?", + "opt1": "s.member", + "opt2": "(*s).member", + "opt3": "&s->member", + "opt4": "s->member", + "correct_option": "s->member", + "correct_option_index": 4 + }, + { + "qsns": "What is the correct way to pass a structure to a function by reference?", + "opt1": "function(struct s)", + "opt2": "function(struct *s)", + "opt3": "function(&s)", + "opt4": "function(*s)", + "correct_option": "function(&s)", + "correct_option_index": 3 + }, + { + "qsns": "Can a function return a structure in C?", + "opt1": "Yes, by using the & operator", + "opt2": "Yes, but it requires passing a pointer to the structure as an argument", + "opt3": "Yes, by returning a pointer to the structure", + "opt4": "No, C does not support returning structures from functions", + "correct_option": "Yes, by returning a pointer to the structure", + "correct_option_index": 3 + }, + { + "qsns": "How do you initialize a structure variable inside a function?", + "opt1": "struct s = {...}", + "opt2": "s = {...}", + "opt3": "Pass by value", + "opt4": "Pass by reference", + "correct_option": "struct s = {...}", + "correct_option_index": 1 + }, + { + "qsns": "What is the advantage of passing a structure by pointer to a function in C?", + "opt1": "It reduces the size of the structure", + "opt2": "It increases the speed of the program", + "opt3": "It allows the function to modify the original structure", + "opt4": "None of the above", + "correct_option": "It allows the function to modify the original structure", + "correct_option_index": 3 + }, + { + "qsns": "Which of the following is the correct syntax to pass a structure by value to a function in C?", + "opt1": "function_name(&structure_variable)", + "opt2": "function_name(*structure_variable)", + "opt3": "function_name(structure_variable)", + "opt4": "function_name(structure_pointer)", + "correct_option": "function_name(structure_variable)", + "correct_option_index": 3 + }, + { + "qsns": "Which of the following is the correct syntax to pass a structure by reference to a function in C?", + "opt1": "function_name(&structure_variable)", + "opt2": "function_name(*structure_variable)", + "opt3": "function_name(structure_variable)", + "opt4": "function_name(structure_pointer)", + "correct_option": "function_name(&structure_variable)", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following is the correct syntax to pass a structure by pointer to a function in C?", + "opt1": "function_name(&structure_variable)", + "opt2": "function_name(structure_variable)", + "opt3": "function_name(structure_pointer)", + "opt4": "function_name(*structure_variable)", + "correct_option": "function_name(structure_pointer)", + "correct_option_index": 3 + }, + { + "qsns": "What is a namespace in C++?", + "opt1": "It is a block of code that is used to group related variables and functions", + "opt2": "It is a feature that allows a class to inherit from multiple base classes", + "opt3": "It is a mechanism for managing the scope of identifiers in large programs", + "opt4": "It is a type of loop in C++", + "correct_option": "It is a mechanism for managing the scope of identifiers in large programs", + "correct_option_index": 3 + }, + { + "qsns": "Which keyword is used to define a namespace in C++?", + "opt1": "namespace", + "opt2": "define", + "opt3": "namespace scope", + "opt4": "using namespace", + "correct_option": "namespace", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following statements is true regarding namespaces in C++?", + "opt1": "You can have multiple namespaces with the same name in the same program", + "opt2": "Namespaces can only contain function declarations", + "opt3": "You can define a namespace within a function", + "opt4": "The contents of a namespace can be accessed using the dot operator", + "correct_option": "You can have multiple namespaces with the same name in the same program", + "correct_option_index": 1 + }, + { + "qsns": "What is the purpose of using the using keyword with namespaces in C++?", + "opt1": "To create an alias for a namespace", + "opt2": "To bring all the members of a namespace into the current scope", + "opt3": "To hide certain members of a namespace", + "opt4": "To define a new namespace within an existing namespace", + "correct_option": "To bring all the members of a namespace into the current scope", + "correct_option_index": 2 + }, + { + "qsns": "What is the scope resolution operator in C++?", + "opt1": ":", + "opt2": "::", + "opt3": "->", + "opt4": "#", + "correct_option": "::", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following is true regarding the scope resolution operator in C++?", + "opt1": "It is used to access the members of a namespace", + "opt2": "It is used to access the members of a class", + "opt3": "It is used to access the elements of an array", + "opt4": "It is used to access the elements of a linked list", + "correct_option": "It is used to access the members of a namespace", + "correct_option_index": 1 + }, + { + "qsns": "What is the purpose of the unnamed namespace in C++?", + "opt1": "To make a function or variable global", + "opt2": "To limit the visibility of a function or variable to a single source file", + "opt3": "To create a new namespace within an existing namespace", + "opt4": "To create a namespace with a name that cannot be accessed by the user", + "correct_option": "To limit the visibility of a function or variable to a single source file", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following is a benefit of using namespaces in C++?", + "opt1": "They prevent naming conflicts between classes", + "opt2": "They allow you to define variables with the same name in different functions", + "opt3": "They improve the performance of the program", + "opt4": "They allow you to define variables with the same name in the same scope", + "correct_option": "They prevent naming conflicts between classes", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following is a disadvantage of using namespaces in C++?", + "opt1": "They can make the code more difficult to read and understand", + "opt2": "They increase the size of the executable file", + "opt3": "They make it more difficult to reuse code in different projects", + "opt4": "They increase the likelihood of naming conflicts between classes", + "correct_option": "They can make the code more difficult to read and understand", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following is true regarding the global namespace in C++?", + "opt1": "All variables and functions defined outside of a namespace belong to the global namespace", + "opt2": "The global namespace is automatically included in every program", + "opt3": "The global namespace can be used to define variables and functions that can be accessed from any part of the program", + "opt4": "All of the above", + "correct_option": "All of the above", + "correct_option_index": 4 + }, + { + "qsns": "What is a namespace in C++?", + "opt1": "A container that holds a group of related variables and functions", + "opt2": "A type of loop that iterates over a collection of elements", + "opt3": "A method of creating a new object from an existing object", + "opt4": "A way to specify the data type of a variable", + "correct_option": "A container that holds a group of related variables and functions", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following statements is true regarding namespaces in C++?", + "opt1": "Nested namespaces are not allowed", + "opt2": "A namespace can only contain functions", + "opt3": "Namespaces are only used in object-oriented programming", + "opt4": "Namespace members are accessed using the :: operator", + "correct_option": "Namespace members are accessed using the :: operator", + "correct_option_index": 4 + }, + { + "qsns": "What is the purpose of using a namespace in C++?", + "opt1": "To avoid naming conflicts between variables and functions", + "opt2": "To allocate memory dynamically", + "opt3": "To overload operators for a class", + "opt4": "To declare a global variable", + "correct_option": "To avoid naming conflicts between variables and functions", + "correct_option_index": 1 + }, + { + "qsns": "What is the default namespace in C++?", + "opt1": "std", + "opt2": "default", + "opt3": "main", + "opt4": "none of the above", + "correct_option": "std", + "correct_option_index": 1 + }, + { + "qsns": "Can a namespace be defined across multiple files in C++?", + "opt1": "Yes, by using the using directive", + "opt2": "Yes, by using the namespace keyword", + "opt3": "No, a namespace must be defined in a single file", + "opt4": "No, a namespace can only be defined within a function", + "correct_option": "Yes, by using the namespace keyword", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following is a valid way to alias a namespace in C++?", + "opt1": "namespace A::B", + "opt2": "using A::B", + "opt3": "namespace B = A", + "opt4": "using namespace A::B", + "correct_option": "namespace B = A", + "correct_option_index": 3 + }, + { + "qsns": "Which of the following is an advantage of using namespaces in C++?", + "opt1": "They allow for faster program execution", + "opt2": "They make it easier to reuse code", + "opt3": "They help to reduce the size of the program", + "opt4": "They prevent type conversion errors", + "correct_option": "They make it easier to reuse code", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following is true regarding the scope of a namespace in C++?", + "opt1": "A namespace can be used anywhere in the program", + "opt2": "A namespace can only be used within the file it is defined in", + "opt3": "A namespace can only be used within the class it is defined in", + "opt4": "A namespace can only be used within the function it is defined in", + "correct_option": "A namespace can be used anywhere in the program", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following statements is true about function overloading in C++?", + "opt1": "Only the function name should be the same for overloaded functions", + "opt2": "Overloaded functions can differ in the number of parameters", + "opt3": "Overloaded functions cannot have the same return type", + "opt4": "All of the above", + "correct_option": "Overloaded functions can differ in the number of parameters", + "correct_option_index": 2 + }, + { + "qsns": "Which operator cannot be overloaded in C++?", + "opt1": "&& and ||", + "opt2": ":: and ->", + "opt3": "+ and -", + "opt4": "All of the above", + "correct_option": ":: and ->", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following is not a valid way of differentiating between overloaded functions?", + "opt1": "Number of parameters", + "opt2": "Order of parameters", + "opt3": "Return type", + "opt4": "None of the above", + "correct_option": "Return type", + "correct_option_index": 3 + }, + { + "qsns": "Which of the following statements is true about function overloading in C++? (Repeated concept)", + "opt1": "Overloaded functions must have the same access level", + "opt2": "Access levels do not affect function overloading", + "opt3": "Overloaded functions must have different access levels", + "opt4": "None of the above", + "correct_option": "Access levels do not affect function overloading", + "correct_option_index": 2 + }, + { + "qsns": "What is the benefit of function overloading in C++?", + "opt1": "It reduces the number of functions in a program", + "opt2": "It makes the code easier to read and understand", + "opt3": "It allows the same function name to be used for different operations", + "opt4": "All of the above", + "correct_option": "It allows the same function name to be used for different operations", + "correct_option_index": 3 + }, + { + "qsns": "Which of the following is true about function overloading? (Repeated concept)", + "opt1": "Overloaded functions can have different names", + "opt2": "Overloaded functions can have the same number and types of parameters", + "opt3": "Overloaded functions must have the same return type", + "opt4": "None of the above", + "correct_option": "None of the above", + "correct_option_index": 4 + }, + { + "qsns": "Which of the following is an example of function overloading in C++?", + "opt1": "int add(int a, int b)", + "opt2": "float add(float a, float b)", + "opt3": "void add(int a, int b)", + "opt4": "All of the above", + "correct_option": "All of the above", + "correct_option_index": 4 + }, + { + "qsns": "What is function overloading in C++?", + "opt1": "Defining a function with the same name and same parameters as an existing function", + "opt2": "Defining a function with the same name but different parameters as an existing function", + "opt3": "Defining a function with a different name but the same parameters as an existing function", + "opt4": "Defining a function with a different name and different parameters as an existing function", + "correct_option": "Defining a function with the same name but different parameters as an existing function", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following is not a valid way to overload a function in C++?", + "opt1": "Changing the number of parameters in the function", + "opt2": "Changing the return type of the function", + "opt3": "Changing the order of the parameters in the function", + "opt4": "Changing the type of the parameters in the function", + "correct_option": "Changing the return type of the function", + "correct_option_index": 2 + }, + { + "qsns": "What is the purpose of function overloading in C++?", + "opt1": "To create new functions with different names", + "opt2": "To create functions that have different return types", + "opt3": "To allow functions to work with different types of data", + "opt4": "To allow functions to be used with different sets of parameters", + "correct_option": "To allow functions to be used with different sets of parameters", + "correct_option_index": 4 + }, + { + "qsns": "Which of the following is an example of function overloading in C++? (Repeated concept)", + "opt1": "int add(int x, int y)", + "opt2": "float add(float x, float y)", + "opt3": "char add(char x, char y)", + "opt4": "All of the above", + "correct_option": "All of the above", + "correct_option_index": 4 + }, + { + "qsns": "Can two functions in C++ have the same name and the same set of parameters?", + "opt1": "Yes, as long as they have different return types", + "opt2": "Yes, as long as they are declared in different namespaces", + "opt3": "No, it is not allowed in C++", + "opt4": "Yes, as long as they are declared in different classes", + "correct_option": "No, it is not allowed in C++", + "correct_option_index": 3 + }, + { + "qsns": "Which of the following is true about function overloading in C++? (Repeated concept)", + "opt1": "Overloaded functions must have the same name", + "opt2": "Overloaded functions must have different return types", + "opt3": "Overloaded functions must have the same number of parameters", + "opt4": "Overloaded functions must have different parameter types or different number of parameters", + "correct_option": "Overloaded functions must have different parameter types or different number of parameters", + "correct_option_index": 4 + }, + { + "qsns": "What is the benefit of using function overloading in C++?", + "opt1": "It allows you to create functions with different names", + "opt2": "It allows you to create functions with different return types", + "opt3": "It allows you to write more efficient code", + "opt4": "It allows you to create more versatile functions", + "correct_option": "It allows you to create more versatile functions", + "correct_option_index": 4 + }, + { + "qsns": "Which of the following operators can be overloaded in C++?", + "opt1": "+", + "opt2": "=", + "opt3": "[]", + "opt4": "All of the above", + "correct_option": "All of the above", + "correct_option_index": 4 + }, + { + "qsns": "Can you overload a member function in C++?", + "opt1": "Yes, you can overload both member and non-member functions in C++", + "opt2": "No, member functions cannot be overloaded in C++", + "opt3": "Yes, but only if the functions have different return types", + "opt4": "Yes, but only if the functions have different parameters", + "correct_option": "Yes, you can overload both member and non-member functions in C++", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following is an example of function overloading?", + "opt1": "int add(int x, int y) { return x + y; } int add(int x, int y, int z) { return x+y+z;}", + "opt2": "int add(int x, int y) { return x + y; } float add(int x, int y) { return x + y;}", + "opt3": "int add(int x, int y) { return x + y; } int subtract(int x, int y) { return x - y; }", + "opt4": "All of the above", + "correct_option": "int add(int x, int y) { return x + y; } int add(int x, int y, int z) { return x+y+z;}", + "correct_option_index": 1 + }, + { + "qsns": "What is an inline function in C++?", + "opt1": "A function that takes an argument of type inline", + "opt2": "A function that is defined with the inline keyword", + "opt3": "A function that is executed sequentially", + "opt4": "A function that is expanded inline by the compiler", + "correct_option": "A function that is defined with the inline keyword", + "correct_option_index": 2 + }, + { + "qsns": "What is the advantage of using an inline function?", + "opt1": "It reduces the size of the program", + "opt2": "It reduces the function call overhead", + "opt3": "It increases the performance of the program", + "opt4": "It allows for recursion", + "correct_option": "It reduces the function call overhead", + "correct_option_index": 2 + }, + { + "qsns": "Which keyword is used to declare an inline function in C++?", + "opt1": "function", + "opt2": "inline", + "opt3": "def", + "opt4": "define", + "correct_option": "inline", + "correct_option_index": 2 + }, + { + "qsns": "Can a function that returns void be inline in C++?", + "opt1": "Yes, any function can be declared inline", + "opt2": "No, only functions that return a value can be inline", + "opt3": "It depends on the implementation", + "opt4": "None of the above", + "correct_option": "Yes, any function can be declared inline", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following statements is true about inline functions in C++?", + "opt1": "Inline functions cannot be recursive", + "opt2": "Inline functions cannot contain loops", + "opt3": "Inline functions cannot be overloaded", + "opt4": "Inline functions cannot have default arguments", + "correct_option": "Inline functions cannot be recursive", + "correct_option_index": 1 + }, + { + "qsns": "How does the compiler treat inline functions in C++?", + "opt1": "It generates a separate function call for each call to the inline function", + "opt2": "It replaces the function call with the actual function code at the point of the call", + "opt3": "It generates an error if the function is not defined inline", + "opt4": "It generates a jump instruction to the function code at the point of the call", + "correct_option": "It replaces the function call with the actual function code at the point of the call", + "correct_option_index": 2 + }, + { + "qsns": "Can a function that is defined in a separate source file be inline in C++?", + "opt1": "Yes, as long as the function is declared inline in the header file", + "opt2": "No, inline functions must be defined in the same source file as the caller", + "opt3": "It depends on the implementation of the compiler", + "opt4": "None of the above", + "correct_option": "No, inline functions must be defined in the same source file as the caller", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following is an example of an inline function in C++?", + "opt1": "int add(int a, int b) { return a + b; }", + "opt2": "void print_hello() { std::cout << \"Hello, world!\" << std::endl; }", + "opt3": "double square(double x) {return x*x;}", + "opt4": "class Rectangle { public: inline int area() { return width * height; } };", + "correct_option": "class Rectangle { public: inline int area() { return width * height; } };", + "correct_option_index": 4 + }, + { + "qsns": "Which of the following is a disadvantage of using inline functions in C++?", + "opt1": "It can increase the size of the program", + "opt2": "It can decrease the performance of the program", + "opt3": "It can lead to code bloat", + "opt4": "It can lead to name collisions", + "correct_option": "It can increase the size of the program", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following is a good candidate for an inline function in C++?", + "opt1": "A function that performs complex calculations", + "opt2": "A function that is called frequently and has a short body", + "opt3": "A function that takes a long time to execute", + "opt4": "A function that is rarely called and has a long body", + "correct_option": "A function that is called frequently and has a short body", + "correct_option_index": 2 + }, + { + "qsns": "What is an inline function in C++? (Repeated concept)", + "opt1": "A function defined with the \"inline\" keyword, which is a suggestion to the compiler to perform inline expansion of the function", + "opt2": "A function defined with the \"inline\" keyword, which is a requirement for the compiler to perform inline expansion of the function", + "opt3": "A function that is always expanded inline by the compiler, regardless of how it is defined", + "opt4": "A function that is never expanded inline by the compiler, regardless of how it is defined", + "correct_option": "A function defined with the \"inline\" keyword, which is a suggestion to the compiler to perform inline expansion of the function", + "correct_option_index": 1 + }, + { + "qsns": "What is the advantage of using inline functions in C++? (Repeated concept)", + "opt1": "They are faster than regular functions", + "opt2": "They reduce the executable size of a program", + "opt3": "They can be used to define function templates", + "opt4": "They make it easier to overload functions", + "correct_option": "They are faster than regular functions", + "correct_option_index": 1 + }, + { + "qsns": "When should you use an inline function in C++?", + "opt1": "When the function is small and simple", + "opt2": "When the function is called frequently", + "opt3": "When the function has a lot of parameters", + "opt4": "When the function is large and complex", + "correct_option": "When the function is small and simple", + "correct_option_index": 1 + }, + { + "qsns": "Can a virtual function be inline in C++?", + "opt1": "When the function is used in only one place in the program", + "opt2": "No, virtual functions cannot be inline in C++", + "opt3": "Yes, as long as it is defined with the \"inline\" keyword only", + "opt4": "It depends on the compiler", + "correct_option": "No, virtual functions cannot be inline in C++", + "correct_option_index": 2 + }, + { + "qsns": "What is the syntax for defining an inline function in C++?", + "opt1": "inline int function_name(int param1, int param2) {}", + "opt2": "void inline function_name(int param1, int param2) {}", + "opt3": "int inline function_name(int param1, int param2) {}", + "opt4": "inline function_name(int param1, int param2) {}", + "correct_option": "inline int function_name(int param1, int param2) {}", + "correct_option_index": 1 + }, + { + "qsns": "Can a member function of a class be inline in C++?", + "opt1": "Yes, as long as it is defined with the \"inline\" keyword", + "opt2": "No, member functions cannot be inline in C++", + "opt3": "Yes, as long as it is defined with the \"inline\" keyword and the function body is defined inside the class definition", + "opt4": "It depends on the implementation", + "correct_option": "Yes, as long as it is defined with the \"inline\" keyword and the function body is defined inside the class definition", + "correct_option_index": 3 + }, + { + "qsns": "What is the purpose of the \"inline\" keyword in C++?", + "opt1": "To indicate that a function is a friend of a class", + "opt2": "To require the compiler to perform inline expansion of a function", + "opt3": "To suggest to the compiler to perform inline expansion of a function", + "opt4": "To indicate that a function is a virtual function", + "correct_option": "To suggest to the compiler to perform inline expansion of a function", + "correct_option_index": 3 + }, + { + "qsns": "Which of the following is a disadvantage of using inline functions in C++? (Repeated concept)", + "opt1": "They can increase the size of the executable code", + "opt2": "They can slow down the program execution", + "opt3": "They can make debugging more difficult", + "opt4": "There are no disadvantages to using inline functions", + "correct_option": "They can increase the size of the executable code", + "correct_option_index": 1 + }, + { + "qsns": "Can a function defined in a header file be inline in C++?", + "opt1": "Yes, as long as it is defined with the \"inline\" keyword", + "opt2": "No, functions defined in header files cannot be inline in C++", + "opt3": "Yes, as long as it is defined with the \"inline\" keyword and the function body is defined inside the header file", + "opt4": "It depends on the compiler", + "correct_option": "Yes, as long as it is defined with the \"inline\" keyword and the function body is defined inside the header file", + "correct_option_index": 3 + }, + { + "qsns": "What is a default argument in C++?", + "opt1": "An argument that is automatically assigned the value 0", + "opt2": "An argument that is assigned the value of the previous argument", + "opt3": "An argument that is assigned a value if no other value is provided", + "opt4": "An argument that is assigned a random value", + "correct_option": "An argument that is assigned a value if no other value is provided", + "correct_option_index": 3 + }, + { + "qsns": "Which of the following is true about default arguments?", + "opt1": "They must be specified in the function declaration and definition", + "opt2": "They can only be of basic data types such as int and float", + "opt3": "They must always come at the beginning of the argument list", + "opt4": "They cannot be of array types", + "correct_option": "They must be specified in the function declaration and definition", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following is an example of a function that uses a default argument?", + "opt1": "int add(int x, int y)", + "opt2": "float divide(float a, float b, float c = 1.0)", + "opt3": "void print()", + "opt4": "char getChar(char c = 'a')", + "correct_option": "float divide(float a, float b, float c = 1.0)", + "correct_option_index": 2 + }, + { + "qsns": "What is the order in which arguments are passed to a function?", + "opt1": "Regular arguments first, followed by default arguments", + "opt2": "Default arguments first, followed by regular arguments", + "opt3": "Random order", + "opt4": "None of the above", + "correct_option": "Regular arguments first, followed by default arguments", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following is true about default arguments in relation to function overloading?", + "opt1": "Default arguments are not allowed in function overloading", + "opt2": "Default arguments must be the same for all functions in an overload set", + "opt3": "Default arguments are allowed, but only for one function in an overload set", + "opt4": "Default arguments must be different for all functions in an overload set", + "correct_option": "Default arguments are allowed, but only for one function in an overload set", + "correct_option_index": 3 + }, + { + "qsns": "What is the benefit of using default arguments?", + "opt1": "It makes the code more efficient", + "opt2": "It allows for fewer function overloads", + "opt3": "It improves code readability", + "opt4": "It allows for more complex programs", + "correct_option": "It allows for fewer function overloads", + "correct_option_index": 2 + }, + { + "qsns": "What happens if a default argument is specified in both the function declaration and definition?", + "opt1": "The code will not compile", + "opt2": "The argument specified in the definition will be used", + "opt3": "The argument specified in the declaration will be used", + "opt4": "The default argument will be ignored", + "correct_option": "The code will not compile", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following is true about default arguments and templates?", + "opt1": "Default arguments are not allowed in templates", + "opt2": "Default arguments can be used in templates, but only for one parameter", + "opt3": "Default arguments can be used in templates for any number of parameters", + "opt4": "Default arguments in templates must be the same for all instantiations", + "correct_option": "Default arguments can be used in templates for any number of parameters", + "correct_option_index": 3 + }, + { + "qsns": "What are default arguments in C++? (Repeated concept)", + "opt1": "Arguments that are automatically initialized with a default value.", + "opt2": "Arguments that are passed by value.", + "opt3": "Arguments that are passed by reference.", + "opt4": "Arguments that are passed by pointer.", + "correct_option": "Arguments that are automatically initialized with a default value.", + "correct_option_index": 1 + }, + { + "qsns": "Where should default arguments be specified in a function declaration?", + "opt1": "Before the function name.", + "opt2": "After the function name.", + "opt3": "Before the return type.", + "opt4": "After the return type.", + "correct_option": "After the function name.", + "correct_option_index": 2 + }, + { + "qsns": "What is the purpose of default arguments? (Repeated concept)", + "opt1": "To make functions more efficient.", + "opt2": "To make it easier to pass arguments to a function.", + "opt3": "To allow a function to be overloaded.", + "opt4": "To provide a default value for a parameter if one is not specified.", + "correct_option": "To provide a default value for a parameter if one is not specified.", + "correct_option_index": 4 + }, + { + "qsns": "When are default arguments evaluated?", + "opt1": "At runtime.", + "opt2": "At compile time.", + "opt3": "At link time.", + "opt4": "At load time.", + "correct_option": "At runtime.", + "correct_option_index": 1 + }, + { + "qsns": "What happens if a default argument is specified in both the function declaration and the function definition? (Repeated concept)", + "opt1": "The program will not compile.", + "opt2": "The default argument specified in the function definition will be used.", + "opt3": "The default argument specified in the function declaration will be used.", + "opt4": "Both default arguments will be used.", + "correct_option": "The program will not compile.", + "correct_option_index": 1 + }, + { + "qsns": "What is the syntax for specifying a default argument?", + "opt1": "argumentType argumentName = defaultValue", + "opt2": "argumentType defaultValue argumentName", + "opt3": "defaultValue argumentType argumentName", + "opt4": "argumentName = defaultValue", + "correct_option": "argumentType argumentName = defaultValue", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following is true about classes in C++?", + "opt1": "A class is a blueprint for objects", + "opt2": "A class is an object", + "opt3": "A class is a function", + "opt4": "A class is a data type", + "correct_option": "A class is a blueprint for objects", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following keywords is used to create an object of a class?", + "opt1": "new", + "opt2": "this", + "opt3": "object", + "opt4": "none of the above", + "correct_option": "new", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following access specifiers is used to make class members accessible only within the same class?", + "opt1": "public", + "opt2": "private", + "opt3": "protected", + "opt4": "none of the above", + "correct_option": "private", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following is a constructor?", + "opt1": "A function that is used to create an object of a class", + "opt2": "A function that is used to destroy an object of a class", + "opt3": "A function that is used to allocate memory for an object of a class", + "opt4": "A function that is used to deallocate memory for an object of a class", + "correct_option": "A function that is used to create an object of a class", + "correct_option_index": 1 + }, + { + "qsns": "What is encapsulation in C++?", + "opt1": "Combining data members and member functions in a single unit", + "opt2": "Making class members accessible only within the same class", + "opt3": "Creating objects of a class", + "opt4": "None of the above", + "correct_option": "Combining data members and member functions in a single unit", + "correct_option_index": 1 + }, + { + "qsns": "What is a class in C++?", + "opt1": "A user-defined data type", + "opt2": "A built-in data type", + "opt3": "A function", + "opt4": "A pointer to a variable", + "correct_option": "A user-defined data type", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following is true about a static member of a class?", + "opt1": "It is shared by all objects of the class", + "opt2": "It is specific to each object of the class", + "opt3": "It can be accessed using the object of the class", + "opt4": "It cannot be accessed using the object of the class", + "correct_option": "It is shared by all objects of the class", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following is used to create a copy of an object in C++?", + "opt1": "Object cloning", + "opt2": "Object duplication", + "opt3": "Object copying", + "opt4": "Object creation", + "correct_option": "Object copying", + "correct_option_index": 3 + }, + { + "qsns": "Which of the following is used to initialize the data members of an object of a class?", + "opt1": "Constructors", + "opt2": "Destructors", + "opt3": "assignment operators", + "opt4": "Copy constructors", + "correct_option": "Constructors", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following is true about friend functions in C++?", + "opt1": "Friend functions are class members", + "opt2": "Friend functions can access private and protected members of a class", + "opt3": "Friend functions can be called using an object of the class", + "opt4": "Friend functions cannot be defined outside the class", + "correct_option": "Friend functions can access private and protected members of a class", + "correct_option_index": 2 + }, + { + "qsns": "What is an object in C++?", + "opt1": "An instance of a class", + "opt2": "A type of data", + "opt3": "A function", + "opt4": "A pointer to a variable", + "correct_option": "An instance of a class", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following access specifiers in C++ allows the member to be accessed by any function or class in the program?", + "opt1": "Private", + "opt2": "Protected", + "opt3": "Public", + "opt4": "Friend", + "correct_option": "Public", + "correct_option_index": 3 + }, + { + "qsns": "Which access specifier in C++ allows a member function or variable to be accessed only by the same class and its friends?", + "opt1": "Private", + "opt2": "Public", + "opt3": "Protected", + "opt4": "Friend", + "correct_option": "Private", + "correct_option_index": 1 + }, + { + "qsns": "Which access specifier in C++ allows a member function or variable to be accessed by the same class, its derived classes, and its friends?", + "opt1": "Private", + "opt2": "Public", + "opt3": "Protected", + "opt4": "Friend", + "correct_option": "Protected", + "correct_option_index": 3 + }, + { + "qsns": "Which of the following is true about access specifiers in C++?", + "opt1": "They determine the visibility of a member outside of the class.", + "opt2": "They determine the data type of a member.", + "opt3": "They determine the scope of a member within the class.", + "opt4": "They determine the storage location of a member.", + "correct_option": "They determine the visibility of a member outside of the class.", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following access specifiers is used to hide the implementation details of a class from the user?", + "opt1": "Private", + "opt2": "Public", + "opt3": "Protected", + "opt4": "Friend", + "correct_option": "Private", + "correct_option_index": 1 + }, + { + "qsns": "Which access specifier in C++ allows a member function or variable to be accessed by any class or function that is declared as a friend of the class?", + "opt1": "Private", + "opt2": "Public", + "opt3": "Protected", + "opt4": "Friend", + "correct_option": "Friend", + "correct_option_index": 4 + }, + { + "qsns": "Which access specifier in C++ allows a member function or variable to be accessed by the same class and its derived classes?", + "opt1": "Private", + "opt2": "Public", + "opt3": "Protected", + "opt4": "Friend", + "correct_option": "Protected", + "correct_option_index": 3 + }, + { + "qsns": "Which access specifier in C++ allows a member function or variable to be accessed by any function or class within the same namespace?", + "opt1": "Private", + "opt2": "Public", + "opt3": "Protected", + "opt4": "Friend", + "correct_option": "Public", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following access specifiers in C++ is used to prevent a member from being accessed outside of the class definition?", + "opt1": "public", + "opt2": "private", + "opt3": "protected", + "opt4": "friend", + "correct_option": "private", + "correct_option_index": 2 + }, + { + "qsns": "Which access specifier allows access to a class member only within the class definition?", + "opt1": "public", + "opt2": "private", + "opt3": "protected", + "opt4": "friend", + "correct_option": "private", + "correct_option_index": 2 + }, + { + "qsns": "Which access specifier allows access to a class member from any function outside the class definition?", + "opt1": "public", + "opt2": "private", + "opt3": "protected", + "opt4": "friend", + "correct_option": "public", + "correct_option_index": 1 + }, + { + "qsns": "Which access specifier allows a derived class to access the protected members of its base class?", + "opt1": "public", + "opt2": "private", + "opt3": "protected", + "opt4": "friend", + "correct_option": "protected", + "correct_option_index": 3 + }, + { + "qsns": "Which access specifier allows access to a class member from a derived class?", + "opt1": "public", + "opt2": "private", + "opt3": "protected", + "opt4": "friend", + "correct_option": "protected", + "correct_option_index": 3 + }, + { + "qsns": "Which access specifier allows a member function to access all members of a class?", + "opt1": "public", + "opt2": "private", + "opt3": "protected", + "opt4": "friend", + "correct_option": "private", + "correct_option_index": 2 + }, + { + "qsns": "What is the default access specifier for a class in C++?", + "opt1": "public", + "opt2": "private", + "opt3": "protected", + "opt4": "friend", + "correct_option": "private", + "correct_option_index": 2 + }, + { + "qsns": "Which access specifier allows a friend function to access all members of a class?", + "opt1": "public", + "opt2": "private", + "opt3": "protected", + "opt4": "friend", + "correct_option": "friend", + "correct_option_index": 4 + }, + { + "qsns": "Which access specifier allows access to a class member from any class?", + "opt1": "public", + "opt2": "private", + "opt3": "protected", + "opt4": "friend", + "correct_option": "public", + "correct_option_index": 1 + }, + { + "qsns": "Which access specifier should be used for class members that need to be accessed by functions outside the class definition?", + "opt1": "public", + "opt2": "private", + "opt3": "protected", + "opt4": "friend", + "correct_option": "public", + "correct_option_index": 1 + }, + { + "qsns": "Which access specifier should be used for class members that should only be accessed within the class definition?", + "opt1": "public", + "opt2": "private", + "opt3": "protected", + "opt4": "friend", + "correct_option": "private", + "correct_option_index": 2 + }, + { + "qsns": "What is the dot operator used for in C++?", + "opt1": "To declare objects", + "opt2": "To access a member of an object", + "opt3": "To access a function of a class", + "opt4": "To access a class variable", + "correct_option": "To access a member of an object", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following is an example of an object?", + "opt1": "int x;", + "opt2": "string s;", + "opt3": "MyClass obj;", + "opt4": "double y;", + "correct_option": "MyClass obj;", + "correct_option_index": 3 + }, + { + "qsns": "Which of the following operators is used to access a member of an object?", + "opt1": ".", + "opt2": "->", + "opt3": "::", + "opt4": ":", + "correct_option": ".", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following is used to initialize an object?", + "opt1": "The constructor", + "opt2": "The destructor", + "opt3": "The copy constructor", + "opt4": "The assignment operator", + "correct_option": "The constructor", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following access specifiers allows a member to be accessed from any function?", + "opt1": "Public", + "opt2": "Private", + "opt3": "Protected", + "opt4": "Friend", + "correct_option": "Public", + "correct_option_index": 1 + }, + { + "qsns": "What is the keyword used to declare a class in C++?", + "opt1": "class", + "opt2": "object", + "opt3": "struct", + "opt4": "member", + "correct_option": "class", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following is used to destroy an object?", + "opt1": "The constructor", + "opt2": "The destructor", + "opt3": "The copy constructor", + "opt4": "The assignment operator", + "correct_option": "The destructor", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following is true about an object in C++?", + "opt1": "It is an instance of a class", + "opt2": "It cannot be passed as a parameter to a function", + "opt3": "It does not have any data members or member functions", + "opt4": "It can be created without a class definition", + "correct_option": "It is an instance of a class", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following operators can be overloaded to provide custom member access behavior?", + "opt1": ".", + "opt2": "->", + "opt3": "::", + "opt4": ":", + "correct_option": "->", + "correct_option_index": 2 + }, + { + "qsns": "What is the difference between the dot operator (.) and the arrow operator (->) in C++?", + "opt1": "The dot operator is used with pointers, while the arrow operator is used with objects.", + "opt2": "The dot operator is used to access static members, while the arrow operator is used to access non-static members.", + "opt3": "The dot operator is used to access non-static members, while the arrow operator is used with pointers to access non-static members.", + "opt4": "The dot operator is used to access public members, while the arrow operator is used to access private members.", + "correct_option": "The dot operator is used to access non-static members, while the arrow operator is used with pointers to access non-static members.", + "correct_option_index": 3 + }, + { + "qsns": "Which operator is used to access the members of an object in C++?", + "opt1": ".", + "opt2": "&", + "opt3": "->", + "opt4": "::", + "correct_option": ".", + "correct_option_index": 1 + }, + { + "qsns": "Which keyword is used to define a member function outside the class definition in C++?", + "opt1": "here", + "opt2": "that", + "opt3": "this", + "opt4": "none of the above", + "correct_option": "none of the above", + "correct_option_index": 4 + }, + { + "qsns": "Which of the following is true about object-oriented programming in C++?", + "opt1": "It is a procedural programming language", + "opt2": "Objects encapsulate data and behavior", + "opt3": "It supports only single inheritance", + "opt4": "All of the above", + "correct_option": "Objects encapsulate data and behavior", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following is true about a member function in C++?", + "opt1": "It can be defined inside or outside the class definition", + "opt2": "It can only be defined inside the class definition", + "opt3": "It can only be defined outside the class definition", + "opt4": "None of the above", + "correct_option": "It can be defined inside or outside the class definition", + "correct_option_index": 1 + }, + { + "qsns": "Which keyword is used to access the data members of an object inside a member function in C++?", + "opt1": "private", + "opt2": "public", + "opt3": "protected", + "opt4": "this", + "correct_option": "this", + "correct_option_index": 4 + }, + { + "qsns": "Which of the following is true about object creation in C++?", + "opt1": "It is done using the new operator", + "opt2": "It is done using the malloc() function", + "opt3": "It is done using the class constructor", + "opt4": "None of the above", + "correct_option": "It is done using the class constructor", + "correct_option_index": 3 + }, + { + "qsns": "Which of the following is true about constructors in C++?", + "opt1": "They are used to allocate memory for objects", + "opt2": "They are used to initialize the data members of an object", + "opt3": "They are used to deallocate memory for objects", + "opt4": "None of the above", + "correct_option": "They are used to initialize the data members of an object", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following is true about destructors in C++?", + "opt1": "They are used to allocate memory for objects", + "opt2": "They are used to initialize the data members of an object", + "opt3": "They are used to deallocate memory for objects", + "opt4": "None of the above", + "correct_option": "They are used to deallocate memory for objects", + "correct_option_index": 3 + }, + { + "qsns": "Which of the following is true about static member functions in C++?", + "opt1": "They can access only static data members of a class", + "opt2": "They can access only non-static data members of a class", + "opt3": "They can access both static and non-static data members of a class", + "opt4": "None of the above", + "correct_option": "They can access only static data members of a class", + "correct_option_index": 1 + }, + { + "qsns": "What is a member function in C++?", + "opt1": "A function that can only be used outside of a class", + "opt2": "A function that belongs to a class", + "opt3": "A function that can only be used inside of a class", + "opt4": "A function that belongs to the global namespace", + "correct_option": "A function that belongs to a class", + "correct_option_index": 2 + }, + { + "qsns": "How are member functions defined in C++?", + "opt1": "Inside the class definition", + "opt2": "Outside the class definition", + "opt3": "Both A and B", + "opt4": "Neither A nor B", + "correct_option": "Both A and B", + "correct_option_index": 3 + }, + { + "qsns": "Which keyword is used to define a member function outside of a class in C++?", + "opt1": "public", + "opt2": "private", + "opt3": "protected", + "opt4": "none of the above", + "correct_option": "none of the above", + "correct_option_index": 4 + }, + { + "qsns": "Which of the following is a valid syntax for defining a member function outside of a class in C++?", + "opt1": "void MyClass::myFunction() {}", + "opt2": "MyClass: void myFunction() {}", + "opt3": "void myFunction() ::MyClass {}", + "opt4": "None of the above", + "correct_option": "void MyClass::myFunction() {}", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following is true about member functions in C++?", + "opt1": "They have access to the private data members of a class", + "opt2": "They can only access public data members of a class", + "opt3": "They cannot access any data members of a class", + "opt4": "None of the above", + "correct_option": "They have access to the private data members of a class", + "correct_option_index": 1 + }, + { + "qsns": "What is the implicit parameter in a member function in C++?", + "opt1": "A pointer to the object that called the function", + "opt2": "A pointer to the object that contains the function", + "opt3": "A pointer to the object that was passed as an argument to the function", + "opt4": "None of the above", + "correct_option": "A pointer to the object that called the function", + "correct_option_index": 1 + }, + { + "qsns": "Which keyword is used to access the implicit parameter in a member function in C++?", + "opt1": "this", + "opt2": "that", + "opt3": "here", + "opt4": "none of the above", + "correct_option": "this", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following is true about the this pointer in C++?", + "opt1": "It is a constant pointer", + "opt2": "It points to the object that called the member function", + "opt3": "It is an integer value that represents the memory address of the object", + "opt4": "None of the above", + "correct_option": "It points to the object that called the member function", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following is true about inline member functions in C++?", + "opt1": "They are defined outside the class definition", + "opt2": "They are always faster than non-inline member functions", + "opt3": "They are used for small functions that are called frequently", + "opt4": "None of the above", + "correct_option": "They are used for small functions that are called frequently", + "correct_option_index": 3 + }, + { + "qsns": "Which of the following is true about const member functions in C++?", + "opt1": "They cannot modify the data members of a class", + "opt2": "They are declared using the const keyword after the parameter list", + "opt3": "They can only be used inside the class definition", + "opt4": "None of the above", + "correct_option": "They cannot modify the data members of a class", + "correct_option_index": 1 + }, + { + "qsns": "What is a member function in C++? (Repeated Question)", + "opt1": "A function that is defined inside a class definition", + "opt2": "A function that is defined outside a class definition", + "opt3": "A function that is not related to any class", + "opt4": "None of the above", + "correct_option": "A function that is defined inside a class definition", + "correct_option_index": 1 + }, + { + "qsns": "How is a member function defined inside a class definition in C++?", + "opt1": "using the :: operator", + "opt2": "using the -> operator", + "opt3": "using the . operator", + "opt4": "using the function name and parameter list", + "correct_option": "using the function name and parameter list", + "correct_option_index": 4 + }, + { + "qsns": "What is the purpose of the \"this\" pointer in C++?", + "opt1": "It points to the object on which the member function is called", + "opt2": "It points to the class definition", + "opt3": "It points to the current function", + "opt4": "None of the above", + "correct_option": "It points to the object on which the member function is called", + "correct_option_index": 1 + }, + { + "qsns": "How is a member function defined outside a class definition in C++?", + "opt1": "using the function name and parameter list", + "opt2": "using the scope resolution operator and the class name", + "opt3": "using the class name and parameter list", + "opt4": "None of the above", + "correct_option": "using the scope resolution operator and the class name", + "correct_option_index": 2 + }, + { + "qsns": "What is the syntax for calling a member function of an object in C++?", + "opt1": "object.member_function()", + "opt2": "object->member_function()", + "opt3": "both A and B", + "opt4": "None of the above", + "correct_option": "both A and B", + "correct_option_index": 3 + }, + { + "qsns": "What is the default access specifier for a member function in C++?", + "opt1": "public", + "opt2": "private", + "opt3": "protected", + "opt4": "None of the above", + "correct_option": "private", + "correct_option_index": 2 + }, + { + "qsns": "Can a member function be overloaded in C++?", + "opt1": "Yes", + "opt2": "No", + "opt3": "It depends on the access specifier", + "opt4": "None of the above", + "correct_option": "Yes", + "correct_option_index": 1 + }, + { + "qsns": "Can a member function be declared inside a class definition and defined outside the class definition in C++?", + "opt1": "Yes", + "opt2": "No", + "opt3": "It depends on the access specifier", + "opt4": "None of the above", + "correct_option": "Yes", + "correct_option_index": 1 + }, + { + "qsns": "Can a member function access the private data members of a class in C++?", + "opt1": "Yes", + "opt2": "No", + "opt3": "depends on the access specifier", + "opt4": "None of the above", + "correct_option": "Yes", + "correct_option_index": 1 + }, + { + "qsns": "What is the purpose of the const keyword in a member function declaration in C++?", + "opt1": "It indicates that the function is a constructor", + "opt2": "It indicates that the function is a destructor", + "opt3": "It indicates that the function does not modify the object on which it is called", + "opt4": "None of the above", + "correct_option": "It indicates that the function does not modify the object on which it is called", + "correct_option_index": 3 + }, + { + "qsns": "What is a constructor in C++?", + "opt1": "A function that is used to allocate memory for an object", + "opt2": "A function that is used to initialize the data members of an object", + "opt3": "A function that is used to deallocate memory for an object", + "opt4": "None of the above", + "correct_option": "A function that is used to initialize the data members of an object", + "correct_option_index": 2 + }, + { + "qsns": "What is the name of the constructor function in C++?", + "opt1": "init()", + "opt2": "constructor()", + "opt3": "the same as the class name", + "opt4": "None of the above", + "correct_option": "the same as the class name", + "correct_option_index": 3 + }, + { + "qsns": "How many constructors can a class have in C++?", + "opt1": "Only one", + "opt2": "More than one", + "opt3": "It depends on the size of the class", + "opt4": "None of the above", + "correct_option": "More than one", + "correct_option_index": 2 + }, + { + "qsns": "Which type of constructor is called automatically when an object is created in C++?", + "opt1": "Copy constructor", + "opt2": "Parameterized constructor", + "opt3": "Default constructor", + "opt4": "None of the above", + "correct_option": "Default constructor", + "correct_option_index": 3 + }, + { + "qsns": "What is the purpose of the copy constructor in C++?", + "opt1": "It is used to create a copy of an existing object", + "opt2": "It is used to allocate memory for an object", + "opt3": "It is used to delete an existing object", + "opt4": "None of the above", + "correct_option": "It is used to create a copy of an existing object", + "correct_option_index": 1 + }, + { + "qsns": "Can a constructor be declared as private in C++?", + "opt1": "Yes", + "opt2": "No", + "opt3": "It depends on the type of constructor", + "opt4": "None of the above", + "correct_option": "Yes", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following is true about the default constructor in C++?", + "opt1": "It takes no arguments", + "opt2": "It has an empty body", + "opt3": "It is provided by the compiler if no other constructor is defined", + "opt4": "All of the above", + "correct_option": "All of the above", + "correct_option_index": 4 + }, + { + "qsns": "Which of the following is true about the parameterized constructor in C++?", + "opt1": "It takes no arguments", + "opt2": "It has an empty body", + "opt3": "It takes one or more arguments", + "opt4": "None of the above", + "correct_option": "It takes one or more arguments", + "correct_option_index": 3 + }, + { + "qsns": "What is the syntax for calling a constructor in C++?", + "opt1": "class_name.constructor_name()", + "opt2": "class_name::constructor_name()", + "opt3": "class_name object_name(argument_list)", + "opt4": "None of the above", + "correct_option": "class_name object_name(argument_list)", + "correct_option_index": 3 + }, + { + "qsns": "Which of the following is true about the destructor in C++?", + "opt1": "It is used to allocate memory for an object", + "opt2": "It is used to deallocate memory for an object", + "opt3": "It is used to initialize the data members of an object", + "opt4": "None of the above", + "correct_option": "It is used to deallocate memory for an object", + "correct_option_index": 2 + }, + { + "qsns": "What is the this pointer in C++?", + "opt1": "A pointer to the current object", + "opt2": "A pointer to the current function", + "opt3": "A pointer to the current class", + "opt4": "None of the above", + "correct_option": "A pointer to the current object", + "correct_option_index": 1 + }, + { + "qsns": "What is the purpose of the this pointer in C++?", + "opt1": "To refer to the object's own data members", + "opt2": "To refer to a different object's data members", + "opt3": "To refer to a different function", + "opt4": "None of the above", + "correct_option": "To refer to the object's own data members", + "correct_option_index": 1 + }, + { + "qsns": "What is the syntax for using the this pointer in C++?", + "opt1": "this->data_member;", + "opt2": "(*this).data_member", + "opt3": "Both A and B", + "opt4": "None of the above", + "correct_option": "Both A and B", + "correct_option_index": 3 + }, + { + "qsns": "Can the this pointer be modified in C++?", + "opt1": "Yes, it can be modified like any other pointer", + "opt2": "No, it is a constant pointer", + "opt3": "It can be modified only within the same class", + "opt4": "None of above", + "correct_option": "No, it is a constant pointer", + "correct_option_index": 2 + }, + { + "qsns": "What is the data type of the this pointer in C++?", + "opt1": "Class type pointer", + "opt2": "Integer pointer", + "opt3": "Void pointer", + "opt4": "None of the above", + "correct_option": "Class type pointer", + "correct_option_index": 1 + }, + { + "qsns": "What happens if a member function does not use the this pointer in C++?", + "opt1": "It can cause a compile-time error", + "opt2": "It may still work, but it will not be able to access the object's data members", + "opt3": "The program will crash at runtime", + "opt4": "None of the above", + "correct_option": "None of the above", + "correct_option_index": 4 + }, + { + "qsns": "How is the this pointer passed to a member function in C++?", + "opt1": "It is implicitly passed to the function", + "opt2": "It is passed as an argument to the function", + "opt3": "It is not passed to the function", + "opt4": "None of above", + "correct_option": "It is implicitly passed to the function", + "correct_option_index": 1 + }, + { + "qsns": "What is the size of the this pointer in C++?", + "opt1": "It is always 4 bytes", + "opt2": "It is always 8 bytes", + "opt3": "It depends on the size of the object", + "opt4": "None of the above", + "correct_option": "It depends on the size of the object", + "correct_option_index": 3 + }, + { + "qsns": "Can the this pointer be used in static member functions in C++?", + "opt1": "No, the this pointer is not applicable to static member functions", + "opt2": "Yes, but only if the static function takes an object as a parameter", + "opt3": "It can be used only within the same class", + "opt4": "None of above", + "correct_option": "No, the this pointer is not applicable to static member functions", + "correct_option_index": 1 + }, + { + "qsns": "In which operator overload function can the this pointer be used in C++?", + "opt1": "Overloading the assignment operator", + "opt2": "Overloading the equality operator", + "opt3": "Both A and B", + "opt4": "None of the above", + "correct_option": "Both A and B", + "correct_option_index": 3 + }, + { + "qsns": "What is this pointer in C++?", + "opt1": "It is a pointer to the current object", + "opt2": "It is a pointer to the current function", + "opt3": "It is a pointer to the base class", + "opt4": "None of the above", + "correct_option": "It is a pointer to the current object", + "correct_option_index": 1 + }, + { + "qsns": "In which part of a C++ class is this pointer implicitly passed?", + "opt1": "Constructor", + "opt2": "Destructor", + "opt3": "Member functions", + "opt4": "All of the above", + "correct_option": "All of the above", + "correct_option_index": 4 + }, + { + "qsns": "What is the type of this pointer in C++?", + "opt1": "void", + "opt2": "int", + "opt3": "ClassName", + "opt4": "None of the above", + "correct_option": "ClassName", + "correct_option_index": 3 + }, + { + "qsns": "Which of the following is a valid use of this pointer in C++?", + "opt1": "To access member variables of the current object", + "opt2": "To access member functions of the current object", + "opt3": "To access static variables of the current object", + "opt4": "All of the above", + "correct_option": "All of the above", + "correct_option_index": 4 + }, + { + "qsns": "What is the purpose of this pointer in C++?", + "opt1": "To resolve naming conflicts between member variables and parameters of a function", + "opt2": "To access private member variables of a class", + "opt3": "To access static member variables of a class", + "opt4": "None of the above", + "correct_option": "To resolve naming conflicts between member variables and parameters of a function", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following statements is true about this pointer in C++?", + "opt1": "It can be modified by the programmer", + "opt2": "It cannot be modified by the programmer", + "opt3": "It can be null", + "opt4": "None of the above", + "correct_option": "It cannot be modified by the programmer", + "correct_option_index": 2 + }, + { + "qsns": "What happens if this pointer is dereferenced when it is null?", + "opt1": "A compile-time error occurs", + "opt2": "A runtime error occurs", + "opt3": "Undefined behavior occurs", + "opt4": "None of the above", + "correct_option": "Undefined behavior occurs", + "correct_option_index": 3 + }, + { + "qsns": "What is the use of this pointer in operator overloading in C++?", + "opt1": "To overload the -> operator", + "opt2": "To overload the . operator", + "opt3": "Both A and B", + "opt4": "None of the above", + "correct_option": "To overload the -> operator", + "correct_option_index": 1 + }, + { + "qsns": "What is the output of the following code?", + "opt1": "The address of obj1 and obj2 are the same", + "opt2": "The address of obj1 and obj2 are different", + "opt3": "The program will not compile", + "opt4": "The program will crash at runtime", + "correct_option": "The address of obj1 and obj2 are different", + "correct_option_index": 2 + }, + { + "qsns": "What is a static data member in C++?", + "opt1": "A data member that is unique to each instance of a class", + "opt2": "A data member that is shared among all instances of a class", + "opt3": "A data member that can be accessed only by static functions", + "opt4": "A data member that cannot be accessed from outside the class", + "correct_option": "A data member that is shared among all instances of a class", + "correct_option_index": 2 + }, + { + "qsns": "How is a static data member declared in C++?", + "opt1": "Using the keyword static before the data type", + "opt2": "Using the keyword static before the class name", + "opt3": "Using the keyword static after the data type", + "opt4": "None of the above", + "correct_option": "Using the keyword static before the data type", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following statements is true about the default initial value of static data members in C++?", + "opt1": "They are not initialized by default", + "opt2": "They are initialized to 0 by default", + "opt3": "They are initialized to 1 by default", + "opt4": "None of the above", + "correct_option": "They are initialized to 0 by default", + "correct_option_index": 2 + }, + { + "qsns": "How is a static function declared in C++?", + "opt1": "Using the keyword static before the return type", + "opt2": "Using the keyword static before the function name", + "opt3": "Using the keyword static after the return type", + "opt4": "None of the above", + "correct_option": "Using the keyword static before the return type", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following statements is true about static functions in C++?", + "opt1": "They can access only static data members of the class", + "opt2": "They can access only non-static data members of the class", + "opt3": "They cannot access any data members of the class", + "opt4": "None of the above", + "correct_option": "They can access only static data members of the class", + "correct_option_index": 1 + }, + { + "qsns": "Can a static function in C++ access non-static data members of the class?", + "opt1": "Yes, using the this pointer", + "opt2": "Yes, using the static_cast operator", + "opt3": "No, static functions cannot access non-static data members", + "opt4": "None of the above", + "correct_option": "No, static functions cannot access non-static data members", + "correct_option_index": 3 + }, + { + "qsns": "Which of the following statements is true about where a static data member of a C++ class must be initialized?", + "opt1": "They can be initialized inside the class definition", + "opt2": "They must be initialized inside the class definition", + "opt3": "They can be initialized only outside the class definition", + "opt4": "None of the above", + "correct_option": "They can be initialized only outside the class definition", + "correct_option_index": 3 + }, + { + "qsns": "Which of the following statements is true about static functions in C++?", + "opt1": "They cannot access non-static data members", + "opt2": "They can access non-static data members", + "opt3": "They can be virtual", + "opt4": "They can be called using an instance of the class", + "correct_option": "They cannot access non-static data members", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following statements is true about how static data members in C++ can be accessed?", + "opt1": "They can be accessed using the object of the class", + "opt2": "They can be accessed using the class name and the scope resolution operator", + "opt3": "They can be accessed using the pointer to the object of the class", + "opt4": "All of the above are true", + "correct_option": "All of the above are true", + "correct_option_index": 4 + }, + { + "qsns": "What is the output of the following code? (Code involves MyClass::count++, incrementCount called twice)", + "opt1": "Count: 2", + "opt2": "Count: 0", + "opt3": "Count: 1", + "opt4": "None of the above", + "correct_option": "Count: 2", + "correct_option_index": 1 + }, + { + "qsns": "What is a static data member in C++?", + "opt1": "A data member that can be accessed only by static functions", + "opt2": "A data member that belongs to the class and not to any instance of the class", + "opt3": "A data member that is created dynamically at runtime", + "opt4": "None of the above", + "correct_option": "A data member that belongs to the class and not to any instance of the class", + "correct_option_index": 2 + }, + { + "qsns": "How is a static data member declared In C++?", + "opt1": "With the keyword 'static' and the name of the member", + "opt2": "With the keyword 'static' and the data type of the member", + "opt3": "With the keyword 'static' and the access specifier of the member", + "opt4": "None of the above", + "correct_option": "With the keyword 'static' and the data type of the member", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following statements is true about static data members in C++?", + "opt1": "They are initialized to zero by default", + "opt2": "They cannot be initialized inside the class declaration", + "opt3": "They are initialized to their default values by default", + "opt4": "None of the above", + "correct_option": "They are initialized to zero by default", + "correct_option_index": 1 + }, + { + "qsns": "What is a static function in C++?", + "opt1": "A function that can be accessed only by static data members", + "opt2": "A function that belongs to the class and not to any instance of the class", + "opt3": "A function that is created dynamically at runtime", + "opt4": "None of the above", + "correct_option": "A function that belongs to the class and not to any instance of the class", + "correct_option_index": 2 + }, + { + "qsns": "How is a static function declared in C++?", + "opt1": "With the keyword 'static' and the return type of the function", + "opt2": "With the keyword 'static' and the access specifier of the function", + "opt3": "With the keyword 'static' and the name of the function", + "opt4": "None of the above", + "correct_option": "With the keyword 'static' and the return type of the function", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following statements is true about static functions in C++?", + "opt1": "They can be virtual", + "opt2": "They cannot be virtual", + "opt3": "They can be pure virtual", + "opt4": "None of the above", + "correct_option": "They cannot be virtual", + "correct_option_index": 2 + }, + { + "qsns": "What is the purpose of static data members and static functions in C++?", + "opt1": "To save memory by sharing data across all instances of the class", + "opt2": "To make the code more modular and easier to maintain", + "opt3": "To create multiple instances of the class with different data", + "opt4": "None of the above", + "correct_option": "To save memory by sharing data across all instances of the class", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following statements is true about the scope of a static data member in C++?", + "opt1": "It has class scope and can be accessed using the class name and the scope resolution operator (::)", + "opt2": "It has instance scope and can be accessed using the instance name and the dot operator (.)", + "opt3": "It has global scope and can be accessed from any part of the program", + "opt4": "None of the above", + "correct_option": "It has class scope and can be accessed using the class name and the scope resolution operator (::)", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following statements is true about the initialization of a static data member in C++?", + "opt1": "It can be initialized Inside the class declaration using an assignment statement", + "opt2": "It must be initialized outside the class declaration using an assignment statement", + "opt3": "It cannot be initialized", + "opt4": "None of the above", + "correct_option": "It must be initialized outside the class declaration using an assignment statement", + "correct_option_index": 2 + }, + { + "qsns": "What is a constant member function in C++?", + "opt1": "A member function that cannot modify any data members of the class", + "opt2": "A member function that can modify any data members of the class", + "opt3": "A member function that cannot be called by const objects of the class", + "opt4": "None of the above", + "correct_option": "A member function that cannot modify any data members of the class", + "correct_option_index": 1 + }, + { + "qsns": "How is a constant member function declared in C++?", + "opt1": "Using the keyword const after the function declaration", + "opt2": "Using the keyword const before the function declaration", + "opt3": "Using the keyword const before the return type", + "opt4": "None of the above", + "correct_option": "Using the keyword const after the function declaration", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following statements is true about constant member functions in C++?", + "opt1": "They can be called only by constant objects of the class", + "opt2": "They can be called only by non-constant objects of the class", + "opt3": "They can be called by both constant and non-constant objects of the class", + "opt4": "None of the above", + "correct_option": "They can be called by both constant and non-constant objects of the class", + "correct_option_index": 3 + }, + { + "qsns": "Can a constant member function modify a static data member of the class?", + "opt1": "Yes, as long as the static data member is declared as mutable", + "opt2": "Yes, as long as the static data member is declared as const", + "opt3": "No, constant member functions cannot modify any data members of the class", + "opt4": "Yes, because static members are not part of the object's state", + "correct_option": "Yes, because static members are not part of the object's state", + "correct_option_index": 4 + }, + { + "qsns": "Which of the following statements is true about constant objects in C++?", + "opt1": "They cannot modify any data members of the class", + "opt2": "They can modify only constant data members of the class", + "opt3": "They can modify any data members of the class", + "opt4": "None of the above", + "correct_option": "They cannot modify any data members of the class", + "correct_option_index": 1 + }, + { + "qsns": "How is a constant object declared in C++?", + "opt1": "Using the keyword const before the object name", + "opt2": "Using the keyword const after the object name", + "opt3": "Using the keyword const before the class name", + "opt4": "None of the above", + "correct_option": "Using the keyword const before the object name", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following statements is true about constant member functions in C++? (Overloading)", + "opt1": "They can be overloaded with non-constant member functions of the same name", + "opt2": "They cannot be overloaded with non-constant member functions of the same name", + "opt3": "They can be overloaded only with other constant member functions of the same name", + "opt4": "None of the above", + "correct_option": "They can be overloaded with non-constant member functions of the same name", + "correct_option_index": 1 + }, + { + "qsns": "What is the output of the following code? (const MyClass obj = {5}; obj.value = 10;)", + "opt1": "5 followed by a compilation error", + "opt2": "5 followed by 10", + "opt3": "Compilation error followed by 5", + "opt4": "None of the above", + "correct_option": "5 followed by a compilation error", + "correct_option_index": 1 + }, + { + "qsns": "What is a constant member function in C++?", + "opt1": "A member function that cannot be modified", + "opt2": "A member function that can be called on a constant object only", + "opt3": "A member function that does not have any return type", + "opt4": "None of the above", + "correct_option": "A member function that cannot be modified", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following statements is true about constant objects in C++?", + "opt1": "They cannot modify the data members of the class", + "opt2": "They can modify the data members of the class", + "opt3": "They can modify the data members of the class only if they are declared mutable", + "opt4": "None of the above", + "correct_option": "They cannot modify the data members of the class", + "correct_option_index": 1 + }, + { + "qsns": "Can a non-constant member function be called on a constant object in C++?", + "opt1": "Yes, but only if the function does not modify any data members of the class", + "opt2": "No, a non-constant member function cannot be called on a constant object", + "opt3": "Yes, but only if the function is declared const", + "opt4": "None of the above", + "correct_option": "No, a non-constant member function cannot be called on a constant object", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following statements is true about constant objects in C++?", + "opt1": "They can be created using the const keyword before the class name", + "opt2": "They can be created using the const keyword after the object name", + "opt3": "They can be created using the const keyword before the object name", + "opt4": "None of the above", + "correct_option": "They can be created using the const keyword before the object name", + "correct_option_index": 3 + }, + { + "qsns": "Which of the following statements is true about constant objects in C++?", + "opt1": "They can call non-constant member functions of the class", + "opt2": "They cannot call non-constant member functions of the class", + "opt3": "They can call non-constant member functions of the class only if the functions are declared const", + "opt4": "None of the above", + "correct_option": "They cannot call non-constant member functions of the class", + "correct_option_index": 2 + }, + { + "qsns": "Which of the following statements is true about constant objects in C++?", + "opt1": "They can access only constant member functions of the class", + "opt2": "They can access only non-constant member functions of the class", + "opt3": "They can access both constant and non-constant member functions of the class", + "opt4": "None of the above", + "correct_option": "They can access only constant member functions of the class", + "correct_option_index": 1 + }, + { + "qsns": "Which of the following statements is true about constant member functions in C++? (Duplicate logic)", + "opt1": "They cannot modify the data members of the class", + "opt2": "They can modify the data members of the class only if they are declared mutable", + "opt3": "They can modify the data members of the class", + "opt4": "None of the above", + "correct_option": "They cannot modify the data members of the class", + "correct_option_index": 1 + }, + { + "qsns": "What is the output of the following code? (const MyClass obj = {10}; obj.printValue();)", + "opt1": "Value: 10", + "opt2": "Value: 0", + "opt3": "The code will not compile because the object is declared const", + "opt4": "None of the above", + "correct_option": "Value: 10", + "correct_option_index": 1 + } +] diff --git a/frontend/public/data/books/ch4.json b/frontend/public/data/books/ch4.json index d40f7b9..03da0fe 100644 --- a/frontend/public/data/books/ch4.json +++ b/frontend/public/data/books/ch4.json @@ -512,7 +512,6 @@ "correct_option": "Mutex is owned by a thread and only that thread can release it", "correct_option_index": 3 }, - { "qsns": "What is the main purpose of the Memory Control Unit (MCU) in a computer system?", "opt1": "To store instructions that the CPU can execute", @@ -855,15 +854,6 @@ "correct_option": "Logic gates and flip-flops", "correct_option_index": 2 }, - { - "qsns": "Which of the following is not a component of a control unit?", - "opt1": "Instruction register", - "opt2": "Control register", - "opt3": "Decoder", - "opt4": "Arithmetic logic unit", - "correct_option": "Arithmetic logic unit", - "correct_option_index": 4 - }, { "qsns": "The control unit is responsible for:", "opt1": "Fetching instructions from memory", @@ -2439,15 +2429,6 @@ "correct_option": "Cycle-stealing", "correct_option_index": 1 }, - { - "qsns": "What is the purpose of DMA in a computer system?", - "opt1": "To manage the memory", - "opt2": "To control the CPU", - "opt3": "To communicate with peripheral devices", - "opt4": "To transfer data between memory and peripheral devices without CPU intervention", - "correct_option": "To transfer data between memory and peripheral devices without CPU intervention", - "correct_option_index": 4 - }, { "qsns": "Which of the following is not a mode of transfer used by DMA?", "opt1": "Cycle stealing", @@ -3267,9 +3248,6 @@ "correct_option": "They are optimized for a specific application.", "correct_option_index": 3 }, - - - { "qsns": "What is the primary advantage of using a custom single-purpose processor over a general-purpose processor in an embedded system?", "opt1": "Lower power consumption", diff --git a/frontend/public/data/books/ch7.json b/frontend/public/data/books/ch7.json index 2bcf53d..cf6460a 100644 --- a/frontend/public/data/books/ch7.json +++ b/frontend/public/data/books/ch7.json @@ -404,15 +404,6 @@ "correct_option": "Only one process can access a shared resource at a time", "correct_option_index": 2 }, - { - "qsns": "A semaphore is used for:", - "opt1": "Process creation", - "opt2": "Memory allocation", - "opt3": "Process synchronization", - "opt4": "File management", - "correct_option": "Process synchronization", - "correct_option_index": 3 - }, { "qsns": "The difference between a mutex and a semaphore is:", "opt1": "A mutex can only be used for mutual exclusion, while a semaphore can be used for both mutual exclusion and synchronization", @@ -620,4 +611,4 @@ "correct_option": "Merge Sort", "correct_option_index": 4 } -] \ No newline at end of file +] diff --git a/frontend/public/data/books/ch8.json b/frontend/public/data/books/ch8.json index fea1ea6..65b7899 100644 --- a/frontend/public/data/books/ch8.json +++ b/frontend/public/data/books/ch8.json @@ -800,15 +800,6 @@ "correct_option": "Users", "correct_option_index": 3 }, - { - "qsns": "The testing in which code is checked", - "opt1": "Black box testing", - "opt2": "White box testing", - "opt3": "Red box testing", - "opt4": "Green box testing", - "correct_option": "White box testing", - "correct_option_index": 2 - }, { "qsns": "Testing done without planning and Documentation is called", "opt1": "Unit testing", @@ -1178,4 +1169,4 @@ "correct_option": "Cyclomatic Complexity", "correct_option_index": 4 } -] \ No newline at end of file +] diff --git a/frontend/public/icons/icon-192.png b/frontend/public/icons/icon-192.png new file mode 100644 index 0000000..0c88043 Binary files /dev/null and b/frontend/public/icons/icon-192.png differ diff --git a/frontend/public/icons/icon-512.png b/frontend/public/icons/icon-512.png new file mode 100644 index 0000000..376e83d Binary files /dev/null and b/frontend/public/icons/icon-512.png differ diff --git a/frontend/public/icons/maskable-192.png b/frontend/public/icons/maskable-192.png new file mode 100644 index 0000000..bcb948d Binary files /dev/null and b/frontend/public/icons/maskable-192.png differ diff --git a/frontend/public/icons/maskable-512.png b/frontend/public/icons/maskable-512.png new file mode 100644 index 0000000..23b95dd Binary files /dev/null and b/frontend/public/icons/maskable-512.png differ diff --git a/frontend/public/icons/maskable.svg b/frontend/public/icons/maskable.svg new file mode 100644 index 0000000..f19efc8 --- /dev/null +++ b/frontend/public/icons/maskable.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/frontend/src/App.css b/frontend/src/App.css index 4cc266c..bf6babe 100644 --- a/frontend/src/App.css +++ b/frontend/src/App.css @@ -32,15 +32,7 @@ body { } /* ===== Loading Screen ===== */ -.loading-screen { - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - height: 100vh; - background: var(--bg-primary); - gap: 1rem; -} + .loading-spinner { width: 50px; @@ -91,21 +83,9 @@ body { background-clip: text; } -.btn-signin { - padding: 0.75rem 1.5rem; - background: transparent; - border: 1px solid var(--accent-primary); - color: var(--accent-primary); - border-radius: 8px; - cursor: pointer; - font-weight: 500; - transition: all 0.3s ease; -} -.btn-signin:hover { - background: var(--accent-primary); - color: white; -} + + /* ===== Hero Section ===== */ .landing-page { @@ -332,14 +312,39 @@ body { font-size: 0.95rem; } -/* ===== Stats Section ===== */ +/* ===== Stats / Goals Section ===== */ .stats-section { padding: 4rem 2rem; } -.stats-container { +.stats-wrapper { max-width: 1000px; margin: 0 auto; +} + +.stats-eyebrow { + margin: 0 0 1rem; + text-align: center; + font-size: 0.8rem; + font-weight: 600; + letter-spacing: 0.08em; + text-transform: uppercase; + color: var(--text-secondary); +} + +.stats-live { + margin: 1.25rem auto 0; + text-align: center; + font-size: 0.9rem; + color: var(--text-secondary); +} + +.stats-live strong { + color: var(--text-primary); + font-weight: 600; +} + +.stats-container { display: flex; justify-content: center; align-items: center; @@ -437,119 +442,35 @@ body { } /* ===== Sign In Page ===== */ -.signin-page { - min-height: 100vh; - display: flex; - align-items: center; - justify-content: center; - padding: 2rem; -} -.signin-container { - width: 100%; - max-width: 450px; - z-index: 10; -} -.signin-card { - padding: 3rem; - background: var(--bg-card); - border: 1px solid var(--border-color); - border-radius: 24px; - backdrop-filter: blur(20px); -} -.signin-logo { - display: flex; - flex-direction: column; - align-items: center; - gap: 0.75rem; - margin-bottom: 2rem; -} -.signin-logo-text { - font-size: 1.75rem; - font-weight: 700; - background: linear-gradient(135deg, var(--accent-primary), var(--accent-secondary)); - -webkit-background-clip: text; - -webkit-text-fill-color: transparent; - background-clip: text; -} -.signin-welcome { - text-align: center; - margin-bottom: 2rem; -} -.signin-welcome h2 { - font-size: 1.5rem; - font-weight: 600; - margin-bottom: 0.5rem; -} -.signin-welcome p { - color: var(--text-secondary); -} -.btn-google { - width: 100%; - display: flex; - align-items: center; - justify-content: center; - gap: 0.75rem; - padding: 1rem; - background: white; - color: #333; - border: none; - border-radius: 12px; - font-size: 1rem; - font-weight: 500; - cursor: pointer; - transition: all 0.3s ease; -} -.google-icon { - width: 24px; - height: 24px; -} -.signin-divider { - text-align: center; - margin: 2rem 0; - color: var(--text-muted); - font-size: 0.85rem; -} -.signin-features { - display: flex; - flex-direction: column; - gap: 0.75rem; - margin-bottom: 2rem; -} -.signin-feature { - display: flex; - align-items: center; - gap: 0.75rem; - font-size: 0.9rem; - color: var(--text-secondary); -} -.feature-check { - color: var(--accent-green); - font-weight: 600; -} -.btn-back { - width: 100%; - padding: 0.75rem; - background: transparent; - border: none; - color: var(--text-secondary); - font-size: 0.9rem; - cursor: pointer; - transition: all 0.3s ease; -} + + + + + + + + + + + + + + + /* ===== Dashboard Page ===== */ .dashboard-page { @@ -612,38 +533,18 @@ body { gap: 0.5rem; } -.nav-item { - display: flex; - align-items: center; - gap: 1rem; - padding: 0.875rem 1rem; - background: transparent; - border: none; - border-radius: 10px; - color: var(--text-secondary); - font-size: 0.95rem; - cursor: pointer; - transition: all 0.3s ease; - white-space: nowrap; -} -.nav-item:hover { - color: var(--text-primary); -} -.nav-item.active { - background: rgba(99, 102, 241, 0.15); - color: var(--accent-primary); -} + + + .sidebar-footer { padding: 1rem; border-top: 1px solid var(--border-color); } -.nav-item.logout:hover { - color: #ef4444; -} + /* Main Content */ .main-content { @@ -657,23 +558,9 @@ body { } /* Top Bar */ -.top-bar { - position: sticky; - top: 0; - display: flex; - align-items: center; - justify-content: space-between; - padding: 1rem 2rem; - background: rgba(10, 10, 15, 0.9); - backdrop-filter: blur(20px); - border-bottom: 1px solid var(--border-color); - z-index: 50; -} -.search-container { - flex: 1; - max-width: 400px; -} + + .search-input { width: 100%; @@ -695,36 +582,13 @@ body { color: var(--text-muted); } -.top-bar-actions { - display: flex; - align-items: center; - gap: 1rem; -} -.icon-btn { - padding: 0.625rem; - background: var(--bg-secondary); - border: 1px solid var(--border-color); - border-radius: 10px; - color: var(--text-secondary); - cursor: pointer; - transition: all 0.3s ease; -} -.icon-btn:hover { - border-color: var(--accent-primary); - color: var(--accent-primary); -} -.user-profile { - display: flex; - align-items: center; - gap: 0.75rem; - padding: 0.5rem 1rem 0.5rem 0.5rem; - background: var(--bg-secondary); - border: 1px solid var(--border-color); - border-radius: 50px; -} + + + + .user-avatar { width: 32px; @@ -750,21 +614,10 @@ body { } /* Page Content */ -.page-content { - padding: 2rem; - max-width: 1400px; - margin: 0 auto; -} + /* Welcome Section */ -.welcome-section { - display: flex; - justify-content: space-between; - align-items: center; - margin-bottom: 2rem; - flex-wrap: wrap; - gap: 1rem; -} + .welcome-text h1 { font-size: 1.75rem; @@ -808,30 +661,15 @@ body { border-radius: 12px; } -.stat-icon-purple { - background: rgba(99, 102, 241, 0.15); - color: var(--accent-primary); -} -.stat-icon-green { - background: rgba(34, 197, 94, 0.15); - color: var(--accent-green); -} -.stat-icon-yellow { - background: rgba(251, 191, 36, 0.15); - color: var(--accent-yellow); -} -.stat-icon-pink { - background: rgba(236, 72, 153, 0.15); - color: var(--accent-pink); -} -.stat-info { - display: flex; - flex-direction: column; -} + + + + + .stat-card .stat-value { font-size: 1.75rem; @@ -854,11 +692,7 @@ body { margin-bottom: 1.25rem; } -.action-cards { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); - gap: 1.5rem; -} + .action-card { position: relative; @@ -868,23 +702,13 @@ body { overflow: hidden; } -.action-study { - background: linear-gradient(135deg, rgba(99, 102, 241, 0.2), rgba(139, 92, 246, 0.1)); - border: 1px solid rgba(99, 102, 241, 0.3); -} -.action-study svg { - color: var(--accent-primary); -} -.action-practice { - background: linear-gradient(135deg, rgba(6, 182, 212, 0.2), rgba(34, 197, 94, 0.1)); - border: 1px solid rgba(6, 182, 212, 0.3); -} -.action-practice svg { - color: var(--accent-cyan); -} + + + + .action-card h3 { font-size: 1.25rem; @@ -908,9 +732,7 @@ body { } /* Progress Section */ -.progress-section { - margin-bottom: 2.5rem; -} + .section-header { display: flex; @@ -924,21 +746,9 @@ body { font-weight: 600; } -.btn-view-all { - padding: 0.5rem 1rem; - background: transparent; - border: 1px solid var(--border-color); - border-radius: 8px; - color: var(--text-secondary); - font-size: 0.85rem; - cursor: pointer; - transition: all 0.3s ease; -} -.btn-view-all:hover { - border-color: var(--accent-primary); - color: var(--accent-primary); -} + + .progress-grid { display: grid; @@ -976,75 +786,31 @@ body { transition: width 0.5s ease; } -.progress-info { - display: flex; - justify-content: space-between; - font-size: 0.8rem; - color: var(--text-muted); -} + /* Activity Section */ -.activity-section { - margin-bottom: 2rem; -} -.activity-list { - display: flex; - flex-direction: column; - gap: 0.75rem; -} -.activity-item { - display: flex; - align-items: center; - gap: 1rem; - padding: 1rem 1.25rem; - background: var(--bg-card); - border: 1px solid var(--border-color); - border-radius: 12px; -} -.activity-icon { - padding: 0.625rem; - border-radius: 10px; -} -.activity-icon.practice { - background: rgba(6, 182, 212, 0.15); - color: var(--accent-cyan); -} -.activity-icon.study { - background: rgba(99, 102, 241, 0.15); - color: var(--accent-primary); -} -.activity-details { - flex: 1; - display: flex; - flex-direction: column; -} -.activity-title { - font-weight: 500; - font-size: 0.9rem; -} -.activity-meta { - color: var(--text-muted); - font-size: 0.8rem; -} -.activity-time { - color: var(--text-muted); - font-size: 0.8rem; -} + + + + + + + + + + /* Study & Practice Content */ -.study-content, -.practice-content { - animation: fadeIn 0.3s ease; -} + @keyframes fadeIn { from { opacity: 0; transform: translateY(10px); } @@ -1068,79 +834,23 @@ body { color: var(--text-secondary); } -.subjects-grid { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); - gap: 1.25rem; -} -.subject-card { - padding: 1.5rem; - background: var(--bg-card); - border: 1px solid var(--border-color); - border-radius: 16px; - cursor: pointer; - transition: all 0.3s ease; -} -.subject-icon { - display: inline-flex; - padding: 0.875rem; - background: rgba(99, 102, 241, 0.15); - border-radius: 12px; - color: var(--accent-primary); - margin-bottom: 1rem; -} -.subject-card h3 { - font-size: 1rem; - font-weight: 600; - margin-bottom: 1rem; - line-height: 1.4; -} -.subject-progress { - margin-bottom: 1rem; -} -.subject-progress span { - display: block; - color: var(--text-muted); - font-size: 0.8rem; - margin-top: 0.5rem; -} -.subject-stats { - display: flex; - gap: 0.5rem; - color: var(--text-muted); - font-size: 0.85rem; - margin-bottom: 1rem; -} -.btn-continue, -.btn-practice { - display: flex; - align-items: center; - justify-content: center; - gap: 0.5rem; - width: 100%; - padding: 0.75rem; - background: transparent; - border: 1px solid var(--accent-primary); - border-radius: 10px; - color: var(--accent-primary); - font-size: 0.9rem; - font-weight: 500; - cursor: pointer; - transition: all 0.3s ease; -} -.btn-continue:hover, -.btn-practice:hover { - background: var(--accent-primary); - color: white; -} + + + + + + + + + /* Practice Modes */ .practice-modes { @@ -1167,14 +877,9 @@ body { color: var(--accent-yellow); } -.mode-full { - background: linear-gradient(135deg, rgba(99, 102, 241, 0.15), rgba(139, 92, 246, 0.05)); - border: 1px solid rgba(99, 102, 241, 0.3); -} -.mode-full svg { - color: var(--accent-primary); -} + + .mode-custom { background: linear-gradient(135deg, rgba(236, 72, 153, 0.15), rgba(219, 39, 119, 0.05)); @@ -1213,11 +918,7 @@ body { border-color: rgba(255, 255, 255, 0.3); } -.subject-practice h2 { - font-size: 1.25rem; - font-weight: 600; - margin-bottom: 1.5rem; -} + /* Responsive Styles */ @media (max-width: 1024px) { @@ -1260,22 +961,13 @@ body { padding: 1rem; } - .page-content { - padding: 1.5rem 1rem; - } - .top-bar { - padding: 1rem; - } - .search-container { - display: none; - } - .welcome-section { - flex-direction: column; - align-items: flex-start; - } + + + + } /* ===== Screen Reader Only ===== */ @@ -1292,293 +984,91 @@ body { } /* ===== Auth Loading Screen ===== */ -.auth-loading-screen { - display: flex; - align-items: center; - justify-content: center; - min-height: 100vh; - background: var(--bg-primary); -} -.auth-loading-content { - display: flex; - flex-direction: column; - align-items: center; - gap: 1.5rem; -} -.auth-loading-spinner { - width: 48px; - height: 48px; - color: var(--accent-primary); -} -.spinner-svg { - animation: spin 1s linear infinite; -} -.auth-loading-text { - color: var(--text-secondary); - font-size: 0.95rem; -} + + + + + /* ===== Login Page ===== */ -.login-page { - min-height: 100vh; - display: flex; - align-items: center; - justify-content: center; - padding: 2rem; - background: var(--bg-primary); -} -.login-container { - width: 100%; - max-width: 420px; -} -.login-card { - padding: 2.5rem; - background: var(--bg-card); - border: 1px solid var(--border-color); - border-radius: 20px; -} -.login-logo { - display: flex; - flex-direction: column; - align-items: center; - gap: 0.5rem; - margin-bottom: 2rem; - text-decoration: none; - color: inherit; -} -.login-logo-icon { - width: 48px; - height: 48px; - color: var(--accent-primary); -} -.login-logo-text { - font-size: 1.5rem; - font-weight: 700; - background: linear-gradient(135deg, var(--accent-primary), var(--accent-secondary)); - -webkit-background-clip: text; - -webkit-text-fill-color: transparent; - background-clip: text; -} -.login-header { - text-align: center; - margin-bottom: 2rem; -} -.login-header h1 { - font-size: 1.5rem; - font-weight: 600; - margin-bottom: 0.5rem; -} -.login-header p { - color: var(--text-secondary); - font-size: 0.95rem; -} -.login-loading { - display: flex; - align-items: center; - justify-content: center; - min-height: 300px; -} -.login-spinner { - width: 40px; - height: 40px; - border: 3px solid var(--border-color); - border-top-color: var(--accent-primary); - border-radius: 50%; - animation: spin 1s linear infinite; -} -/* Login Error */ -.login-error { - display: flex; - align-items: center; - gap: 0.75rem; - padding: 1rem; - margin-bottom: 1.5rem; - background: rgba(239, 68, 68, 0.1); - border: 1px solid rgba(239, 68, 68, 0.3); - border-radius: 12px; - font-size: 0.9rem; - color: #fca5a5; -} -.login-error-icon { - flex-shrink: 0; - width: 20px; - height: 20px; -} -.login-error-dismiss { - flex-shrink: 0; - padding: 0.25rem; - background: transparent; - border: none; - color: inherit; - cursor: pointer; - opacity: 0.7; - transition: opacity 0.2s; -} -.login-error-dismiss:hover { - opacity: 1; -} -.login-error-dismiss svg { - width: 16px; - height: 16px; -} -/* Login Google Button */ -.login-btn-google { - display: flex; - align-items: center; - justify-content: center; - gap: 0.75rem; - width: 100%; - padding: 0.875rem 1rem; - background: white; - border: none; - border-radius: 12px; - color: #333; - font-size: 1rem; - font-weight: 500; - cursor: pointer; - transition: all 0.2s; -} -.login-btn-google:hover:not(:disabled) { - background: #f5f5f5; - box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); -} -.login-btn-google:disabled { - opacity: 0.7; - cursor: not-allowed; -} -.login-google-icon { - width: 20px; - height: 20px; -} -.login-btn-spinner { - width: 20px; - height: 20px; - border: 2px solid #ddd; - border-top-color: #333; - border-radius: 50%; - animation: spin 1s linear infinite; -} -.login-btn-redirect { - display: block; - width: 100%; - margin-top: 0.75rem; - padding: 0.75rem; - background: transparent; - border: 1px solid var(--border-color); - border-radius: 10px; - color: var(--text-secondary); - font-size: 0.9rem; - cursor: pointer; - transition: all 0.2s; -} -.login-btn-redirect:hover { - border-color: var(--accent-primary); - color: var(--accent-primary); -} +/* Login Error */ + + + + + + + + + + +/* Login Google Button */ + + + + + + + + + + + + + /* Login Security Note */ -.login-security-note { - display: flex; - align-items: center; - justify-content: center; - gap: 0.5rem; - margin: 1.5rem 0; - color: var(--text-muted); - font-size: 0.8rem; -} -.login-security-icon { - width: 14px; - height: 14px; -} + + /* Login Legal */ -.login-legal { - text-align: center; - margin-bottom: 1.5rem; - padding: 0 1rem; -} -.login-legal p { - color: var(--text-muted); - font-size: 0.8rem; - line-height: 1.5; -} -.login-legal-link { - color: var(--accent-primary); - text-decoration: none; -} -.login-legal-link:hover { - text-decoration: underline; -} + + + + /* Login Back Link */ -.login-back-link { - display: flex; - align-items: center; - justify-content: center; - gap: 0.5rem; - color: var(--text-secondary); - font-size: 0.9rem; - text-decoration: none; - transition: color 0.2s; -} -.login-back-link:hover { - color: var(--accent-primary); -} -.login-back-link svg { - width: 16px; - height: 16px; -} -.login-description { - color: var(--text-secondary); - text-align: center; - margin-bottom: 1.5rem; - font-size: 0.95rem; -} -.login-actions { - display: flex; - justify-content: center; - gap: 0.75rem; - margin-bottom: 1rem; -} -.login-actions .btn-secondary { - border-radius: 12px; - padding: 0.85rem 1.75rem; -} + + + + + + /* ===== App Shell ===== */ .app-shell { @@ -1821,21 +1311,9 @@ body { height: 20px; } -.search-container { - position: relative; - max-width: 400px; - flex: 1; -} -.search-container svg { - position: absolute; - left: 0.875rem; - top: 50%; - transform: translateY(-50%); - width: 18px; - height: 18px; - color: var(--text-muted); -} + + .search-input { width: 100%; @@ -1862,25 +1340,11 @@ body { gap: 0.75rem; } -.topbar-btn { - padding: 0.5rem; - background: var(--bg-secondary); - border: 1px solid var(--border-color); - border-radius: 10px; - color: var(--text-secondary); - cursor: pointer; - transition: all 0.2s; -} -.topbar-btn:hover { - border-color: var(--accent-primary); - color: var(--accent-primary); -} -.topbar-btn svg { - width: 20px; - height: 20px; -} + + + /* User Menu */ .user-menu-container { @@ -2275,40 +1739,15 @@ body { margin-bottom: 1rem; } -.activity-list { - display: flex; - flex-direction: column; - gap: 0.5rem; -} -.activity-empty { - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - padding: 3rem 1rem; - background: var(--bg-card); - border: 1px solid var(--border-color); - border-radius: 12px; - text-align: center; -} -.activity-empty svg { - width: 48px; - height: 48px; - color: var(--text-muted); - margin-bottom: 1rem; -} -.activity-empty p { - font-weight: 500; - margin-bottom: 0.25rem; -} -.activity-empty span { - color: var(--text-muted); - font-size: 0.875rem; -} + + + + + /* ===== Practice Hub Page ===== */ .practice-hub-page, @@ -2699,143 +2138,48 @@ body { } /* Question Card */ -.question-card { - padding: 2rem; - background: var(--bg-card); - border: 1px solid var(--border-color); - border-radius: 16px; -} -.question-number { - display: inline-block; - padding: 0.375rem 0.875rem; - background: rgba(99, 102, 241, 0.15); - border-radius: 20px; - color: var(--accent-primary); - font-size: 0.8rem; - font-weight: 500; - margin-bottom: 1rem; -} -.question-text { - font-size: 1.125rem; - font-weight: 500; - line-height: 1.6; - margin-bottom: 1.5rem; -} + + + /* Options */ -.options-list { - display: flex; - flex-direction: column; - gap: 0.75rem; - margin-bottom: 1.5rem; -} -.option-btn { - display: flex; - align-items: center; - gap: 1rem; - width: 100%; - padding: 1rem 1.25rem; - background: rgba(255, 255, 255, 0.03); - border: 1px solid var(--border-color); - border-radius: 12px; - color: var(--text-primary); - font-size: 0.95rem; - text-align: left; - cursor: pointer; - transition: all 0.2s; -} -.option-btn:hover:not(:disabled) { - border-color: var(--accent-primary); - background: rgba(99, 102, 241, 0.1); -} -.option-btn.selected { - border-color: var(--accent-primary); - background: rgba(99, 102, 241, 0.15); -} -.option-btn.correct { - border-color: var(--accent-green); - background: rgba(34, 197, 94, 0.15); -} -.option-btn.incorrect { - border-color: #ef4444; - background: rgba(239, 68, 68, 0.15); -} -.option-btn:disabled { - cursor: default; -} -.option-letter { - display: flex; - align-items: center; - justify-content: center; - width: 32px; - height: 32px; - background: rgba(255, 255, 255, 0.1); - border-radius: 8px; - font-weight: 600; - font-size: 0.875rem; -} -.option-text { - flex: 1; -} -.result-icon { - width: 24px; - height: 24px; - margin-left: auto; -} -.result-icon.correct { - color: var(--accent-green); -} -.result-icon.incorrect { - color: #ef4444; -} + + + + + + + + + + + + /* Result Message */ -.result-message { - display: flex; - align-items: center; - gap: 0.75rem; - padding: 1rem 1.25rem; - border-radius: 12px; - font-size: 0.95rem; - margin-bottom: 1.5rem; -} -.result-message.correct { - background: rgba(34, 197, 94, 0.15); - border: 1px solid rgba(34, 197, 94, 0.3); - color: var(--accent-green); -} -.result-message.incorrect { - background: rgba(239, 68, 68, 0.15); - border: 1px solid rgba(239, 68, 68, 0.3); - color: #fca5a5; -} -.result-message svg { - width: 20px; - height: 20px; -} + + + + /* Question Actions */ -.question-actions { - display: flex; - justify-content: space-between; - gap: 1rem; -} + .btn-primary, .btn-secondary { @@ -2888,18 +2232,9 @@ body { } /* Question Navigator */ -.question-navigator { - padding: 1.25rem; - background: var(--bg-card); - border: 1px solid var(--border-color); - border-radius: 14px; -} -.question-navigator h3 { - font-size: 0.9rem; - font-weight: 600; - margin-bottom: 1rem; -} + + .navigator-grid { display: flex; @@ -3263,14 +2598,7 @@ body { gap: 0.5rem; } -.btn-spinner { - width: 18px; - height: 18px; - border: 2px solid rgba(255, 255, 255, 0.3); - border-top-color: white; - border-radius: 50%; - animation: spin 1s linear infinite; -} + /* ===== Chapters List ===== */ .chapters-section h2 { @@ -3561,11 +2889,7 @@ body { margin-bottom: 1rem; } -.topics-list { - display: flex; - flex-direction: column; - gap: 0.75rem; -} + .topic-progress-card { padding: 1rem 1.25rem; @@ -3600,40 +2924,15 @@ body { } /* Activity Chart */ -.activity-section h2 { - font-size: 1.125rem; - font-weight: 600; - margin-bottom: 1rem; -} -.activity-chart-placeholder { - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - padding: 4rem 2rem; - background: var(--bg-card); - border: 1px solid var(--border-color); - border-radius: 14px; - text-align: center; -} -.activity-chart-placeholder svg { - width: 48px; - height: 48px; - color: var(--text-muted); - margin-bottom: 1rem; -} -.activity-chart-placeholder p { - font-weight: 500; - margin-bottom: 0.25rem; -} -.activity-chart-placeholder span { - color: var(--text-muted); - font-size: 0.875rem; -} + + + + + /* ===== Bookmarks Page ===== */ .bookmarks-page { @@ -4043,18 +3342,9 @@ body { overflow: hidden; } -.setting-item { - display: flex; - align-items: center; - justify-content: space-between; - gap: 1rem; - padding: 1rem 1.25rem; - border-bottom: 1px solid var(--border-color); -} -.setting-item:last-child { - border-bottom: none; -} + + .setting-info { display: flex; @@ -4087,20 +3377,9 @@ body { background: var(--accent-primary); } -.toggle-slider { - position: absolute; - top: 3px; - left: 3px; - width: 20px; - height: 20px; - background: white; - border-radius: 50%; - transition: transform 0.2s; -} -.toggle.on .toggle-slider { - transform: translateX(22px); -} + + /* Setting Action */ .setting-action { @@ -4236,126 +3515,41 @@ body { padding: 2rem; } -.quiz-complete-card { - background: var(--bg-card); - border: 1px solid var(--border-color); - border-radius: 20px; - padding: 2.5rem 2rem; - text-align: center; - width: 100%; - max-width: 420px; - display: flex; - flex-direction: column; - align-items: center; - gap: 0.5rem; -} -.complete-icon { - font-size: 3rem; - line-height: 1; - margin-bottom: 0.5rem; -} -.quiz-complete-card h2 { - font-size: 1.6rem; - font-weight: 700; -} -.complete-topic { - color: var(--text-secondary); - font-size: 0.9rem; - margin-bottom: 0.25rem; -} -.complete-score { - display: flex; - align-items: baseline; - gap: 0.25rem; - margin: 0.5rem 0; -} -.score-number { - font-size: 3.5rem; - font-weight: 800; - color: var(--accent-primary); - line-height: 1; -} -.score-total { - font-size: 1.5rem; - color: var(--text-muted); -} -.complete-pct { - font-size: 1.1rem; - font-weight: 600; - color: var(--text-secondary); -} -.complete-actions { - display: flex; - gap: 0.75rem; - margin-top: 1.25rem; - flex-wrap: wrap; - justify-content: center; -} + + + + + + + + + /* ===== Question Progress Bar ===== */ -.question-progress-bar { - height: 4px; - background: rgba(255, 255, 255, 0.08); - border-radius: 4px; - overflow: hidden; -} -.qpb-fill { - height: 100%; - background: var(--accent-primary); - border-radius: 4px; - transition: width 0.35s ease; -} + + /* ===== Question Header / Bookmark ===== */ -.question-header { - display: flex; - align-items: center; - justify-content: space-between; - margin-bottom: 1rem; -} -.bookmark-btn { - display: flex; - align-items: center; - justify-content: center; - width: 36px; - height: 36px; - border-radius: 8px; - border: 1px solid var(--border-color); - background: transparent; - color: var(--text-muted); - cursor: pointer; - transition: all 0.2s; - padding: 0; - flex-shrink: 0; -} -.bookmark-btn svg { - width: 18px; - height: 18px; -} -.bookmark-btn:hover { - border-color: var(--accent-primary); - color: var(--accent-primary); -} -.bookmark-btn.bookmarked { - border-color: var(--accent-primary); - color: var(--accent-primary); - background: rgba(99, 102, 241, 0.1); -} + + + + + /* ===== Custom Practice Config ===== */ @@ -4534,55 +3728,17 @@ body { gap: 1.5rem; } -.mock-quiz-header { - display: flex; - align-items: flex-start; - justify-content: space-between; - gap: 1.5rem; - flex-wrap: wrap; - padding: 1.25rem 1.5rem; - background: var(--bg-card); - border: 1px solid var(--border-color); - border-radius: 16px; -} -.quiz-header-info h1 { - font-size: 1.2rem; - font-weight: 700; - margin-bottom: 0.25rem; -} -.quiz-meta { - font-size: 0.82rem; - color: var(--text-secondary); -} -.quiz-timer { - display: flex; - align-items: center; - gap: 0.5rem; - font-size: 1.4rem; - font-weight: 700; - color: var(--accent-primary); - letter-spacing: 0.04em; - padding: 0.5rem 1rem; - background: rgba(99, 102, 241, 0.1); - border-radius: 10px; - border: 1px solid rgba(99, 102, 241, 0.2); - transition: all 0.3s; -} -.quiz-timer svg { - width: 20px; - height: 20px; -} -.quiz-timer.low { - color: #ef4444; - background: rgba(239, 68, 68, 0.12); - border-color: rgba(239, 68, 68, 0.3); - animation: pulse-timer 1s ease-in-out infinite; -} + + + + + + @keyframes pulse-timer { 0%, 100% { opacity: 1; } @@ -4590,154 +3746,44 @@ body { } /* Question cards (paginated list) */ -.mock-questions-list { - display: flex; - flex-direction: column; - gap: 1.25rem; -} -.mock-question-card { - padding: 1.5rem; - background: var(--bg-card); - border: 1px solid var(--border-color); - border-radius: 16px; - transition: border-color 0.2s; -} -.mock-q-header { - display: flex; - align-items: center; - gap: 0.75rem; - margin-bottom: 0.875rem; -} -.mock-q-num { - display: inline-block; - padding: 0.3rem 0.8rem; - background: rgba(99, 102, 241, 0.12); - border-radius: 20px; - color: var(--accent-primary); - font-size: 0.78rem; - font-weight: 600; -} -.mock-q-answered-badge { - font-size: 0.72rem; - font-weight: 500; - padding: 0.2rem 0.6rem; - border-radius: 10px; - background: rgba(34, 197, 94, 0.15); - color: var(--accent-green); - border: 1px solid rgba(34, 197, 94, 0.25); -} -.mock-q-text { - font-size: 1rem; - font-weight: 500; - line-height: 1.6; - margin-bottom: 1.25rem; - color: var(--text-primary); -} -.mock-options { - display: flex; - flex-direction: column; - gap: 0.6rem; -} -.mock-opt-btn { - display: flex; - align-items: center; - gap: 0.875rem; - width: 100%; - padding: 0.875rem 1.125rem; - background: rgba(255, 255, 255, 0.03); - border: 1px solid var(--border-color); - border-radius: 10px; - color: var(--text-primary); - font-size: 0.93rem; - text-align: left; - cursor: pointer; - transition: all 0.15s; -} -.mock-opt-btn:hover { - border-color: var(--accent-primary); - background: rgba(99, 102, 241, 0.08); -} -.mock-opt-btn.selected { - border-color: var(--accent-primary); - background: rgba(99, 102, 241, 0.15); -} + + + + + + + + + + /* Page navigation */ -.mock-page-nav { - display: flex; - align-items: center; - justify-content: space-between; - gap: 1rem; - padding: 1rem 1.25rem; - background: var(--bg-card); - border: 1px solid var(--border-color); - border-radius: 14px; - flex-wrap: wrap; -} -.mock-page-dots { - display: flex; - align-items: center; - gap: 0.5rem; - flex-wrap: wrap; - justify-content: center; -} -.page-dot { - width: 10px; - height: 10px; - border-radius: 50%; - border: none; - background: rgba(255, 255, 255, 0.15); - cursor: pointer; - padding: 0; - transition: all 0.2s; -} -.page-dot:hover { - background: rgba(255, 255, 255, 0.3); -} -.page-dot.done { - background: rgba(34, 197, 94, 0.5); -} -.page-dot.active { - background: var(--accent-primary); - transform: scale(1.4); -} -.page-dot.active.done { - background: var(--accent-green); -} -.btn-submit { - display: inline-flex; - align-items: center; - gap: 0.5rem; - padding: 0.75rem 1.75rem; - border-radius: 10px; - font-size: 0.9rem; - font-weight: 600; - cursor: pointer; - background: var(--accent-green); - border: none; - color: white; - transition: all 0.2s; -} -.btn-submit:hover { - filter: brightness(1.1); -} + + + + + + + + + /* ===== Mock Test Results ===== */ @@ -4747,91 +3793,33 @@ body { gap: 1.5rem; } -.results-summary-card { - padding: 2rem; - background: var(--bg-card); - border: 1px solid var(--border-color); - border-radius: 20px; - text-align: center; - display: flex; - flex-direction: column; - align-items: center; - gap: 0.5rem; -} -.results-summary-card .complete-icon { - font-size: 3rem; - line-height: 1; -} -.results-summary-card h2 { - font-size: 1.6rem; - font-weight: 700; - margin-top: 0.5rem; -} -.results-summary-card .complete-topic { - color: var(--text-secondary); - font-size: 0.9rem; -} -.results-summary-card .complete-score { - display: flex; - align-items: baseline; - gap: 0.25rem; - margin-top: 0.5rem; -} -.results-summary-card .score-number { - font-size: 3.5rem; - font-weight: 800; - color: var(--accent-primary); - line-height: 1; -} -.results-summary-card .score-total { - font-size: 1.5rem; - color: var(--text-muted); -} -.results-summary-card .complete-pct { - font-size: 1.1rem; - font-weight: 600; - color: var(--text-secondary); -} -.results-stats-row { - display: flex; - gap: 2rem; - margin-top: 0.75rem; -} -.rs-stat { - display: flex; - flex-direction: column; - align-items: center; - gap: 0.2rem; - font-size: 0.8rem; - font-weight: 500; - color: var(--text-secondary); -} -.rs-stat span { - font-size: 1.6rem; - font-weight: 700; -} -.rs-stat.correct span { color: var(--accent-green); } -.rs-stat.incorrect span { color: #ef4444; } -.rs-stat.skipped span { color: var(--text-muted); } -.complete-actions { - display: flex; - gap: 1rem; - margin-top: 1rem; - flex-wrap: wrap; - justify-content: center; -} + + + + + + + + + + + + + + + .detailed-review-heading { font-size: 1.1rem; @@ -5004,9 +3992,7 @@ body { justify-content: space-around; } - .question-actions { - flex-direction: column; - } + .flashcard { aspect-ratio: 4 / 3; @@ -5643,34 +4629,11 @@ body { height: 16px; } -.upload-hint { - margin-top: 2.5rem; - display: flex; - align-items: flex-start; - gap: 0.75rem; - padding: 1rem 1.25rem; - background: rgba(255, 255, 255, 0.03); - border: 1px dashed rgba(255, 255, 255, 0.15); - border-radius: 12px; - color: rgba(255, 255, 255, 0.5); - font-size: 0.85rem; - line-height: 1.55; -} -.upload-hint svg { - width: 20px; - height: 20px; - flex-shrink: 0; - margin-top: 2px; -} -.upload-hint code { - background: rgba(255, 255, 255, 0.08); - padding: 0.1rem 0.35rem; - border-radius: 4px; - font-family: monospace; - font-size: 0.82rem; -} + + + /* ===== Recent Quizzes (Dashboard) ===== */ .recent-quizzes-list { @@ -6173,3 +5136,67 @@ body { color: var(--text-muted, #94a3b8); } + +/* ===== Mock test resume notice ===== */ +.mock-resume-notice { + max-width: 900px; + margin: 0 auto 1.25rem; + padding: 0.75rem 1rem; + border: 1px solid rgba(34, 197, 94, 0.35); + border-radius: 10px; + background: rgba(34, 197, 94, 0.08); + color: var(--text-primary); + font-size: 0.9rem; +} + +/* Footer legal links. Google consent screen links to /privacy, so the page + has to be findable from the site too - a policy reachable only by a URL + handed to Google is not one a student can find. */ +.footer-legal { + margin: 0.5rem 0 0; + font-size: 0.85rem; +} + +.footer-legal a { + color: inherit; + text-decoration: underline; +} + +.footer-disclaimer { + margin: 0.5rem 0 0; + font-size: 0.8rem; + opacity: 0.75; +} + +/* Sign-in entry point in the landing nav. The login page existed at /signin + and nothing linked to it, so the only way in was to type the URL. */ +.nav-actions { + display: flex; + align-items: center; + gap: 1rem; +} + +.nav-signin { + display: inline-flex; + align-items: center; + /* 44px, so it is a real target on a phone rather than a word to pinch at. */ + min-height: 44px; + padding: 0 1rem; + border: 1px solid var(--color-border-strong, rgba(255, 255, 255, 0.25)); + border-radius: 999px; + color: inherit; + font-size: 0.95rem; + font-weight: 600; + text-decoration: none; + white-space: nowrap; +} + +.nav-signin:hover { + border-color: currentColor; +} + +.nav-content { + display: flex; + align-items: center; + justify-content: space-between; +} diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index 1404d61..bc707a1 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -1,13 +1,26 @@ import { BrowserRouter as Router } from 'react-router-dom'; import AppRoutes from './routes/AppRoutes'; import { UserProvider } from './context/UserContext'; +import { AuthProvider } from './auth/AuthContext'; import './App.css'; +/** + * `AuthProvider` sits inside the Router because the sign-in flow navigates, + * and outside the routes because the guard on `/app` reads it. + * + * It does NOT replace `UserProvider`, which holds only a locally-stored + * display name used for the dashboard greeting. The two answer different + * questions — "what shall we call you" versus "who are you to the server" — + * and the local one still works in a build with no backend configured. The + * server's `displayName` wins where both exist; see AppShell. + */ function App() { return ( - + + + ); diff --git a/frontend/src/auth/AuthContext.tsx b/frontend/src/auth/AuthContext.tsx new file mode 100644 index 0000000..2057853 --- /dev/null +++ b/frontend/src/auth/AuthContext.tsx @@ -0,0 +1,177 @@ +/** + * Who the current visitor is. + * + * Every endpoint on the Worker except the content reads needs a session, so + * this is the gate the rest of the integration goes through. It is also the + * one piece that has to work when there is NO backend: the app has shipped + * local-only until now, and a build with `VITE_API_BASE_URL` unset must keep + * working rather than show a login wall it cannot satisfy. + * + * THREE STATES, NOT TWO + * --------------------- + * `status` distinguishes them because conflating any two produces a bug: + * + * 'loading' -- the session probe is in flight. Route guards must WAIT here, + * not redirect: treating it as signed-out bounces a + * signed-in user to the sign-in page on every refresh. + * 'ready' -- the probe finished. `user` is the answer, and `null` means + * genuinely signed out. + * 'disabled' -- no backend is configured. Not an error and not signed-out: + * the app runs on local data and nothing should prompt for + * credentials. + * + * THE SESSION IS AN HttpOnly COOKIE + * --------------------------------- + * There is no token in JavaScript, so there is nothing here to persist, and + * nothing for XSS to read. `user` is a cache of what the server last said, not + * the credential. That is why sign-out calls the server rather than clearing + * local state: clearing a cache the browser can refill from a still-valid + * cookie would log nobody out. + * + * ANONYMOUS IS A REAL IDENTITY + * ---------------------------- + * `startGuest()` creates a server-side user whose id survives being upgraded + * in place (`upgrade()`), so a candidate can sit a paper, then sign up, and + * keep that attempt. The alternative - making them sign up first - throws away + * the only session where they were actually willing to start. + * + * The context, its types and the hooks live in `auth-context.ts`; this file + * exports only the provider so Fast Refresh can swap it. + */ + +import { useCallback, useEffect, useMemo, useRef, useState, type ReactNode } from 'react'; +import { api, isBackendConfigured } from '../services/api'; +import type { ApiError, SessionUser } from '../services/api'; +import { AuthContext, type AuthContextValue, type AuthState } from './auth-context'; + +/** + * The state before anything has been asked. + * + * A function rather than a module-level constant. `isBackendConfigured()` + * reads a build-time value in production, so either would behave identically + * there — but freezing it at module scope means the status is decided by + * whenever this file first happened to be imported, which is both arbitrary + * and untestable. Reading it when the provider actually mounts is the honest + * version, and it still settles before the first paint, so a local-only build + * shows no flash of 'loading'. + */ +function initialState(): AuthState { + return { + status: isBackendConfigured() ? 'loading' : 'disabled', + user: null, + expiresAt: null, + error: null, + busy: false, + }; +} + +/** What the four session-establishing endpoints have in common. */ +type SessionAttempt = + | { ok: true; data: { user: SessionUser | null; sessionExpiresAt: number | null } } + | { ok: false; error: ApiError }; + +export function AuthProvider({ children }: { children: ReactNode }) { + const [state, setState] = useState(initialState); + + // Guards against a response landing after unmount. + const alive = useRef(true); + useEffect(() => { + alive.current = true; + return () => { + alive.current = false; + }; + }, []); + + const applySession = useCallback((user: SessionUser | null, expiresAt: number | null) => { + if (!alive.current) return; + setState((prev) => ({ ...prev, status: 'ready', user, expiresAt, busy: false })); + }, []); + + const refresh = useCallback(async () => { + if (!isBackendConfigured()) return; + const result = await api.getSession(); + if (!alive.current) return; + if (result.ok) { + applySession(result.data.user, result.data.sessionExpiresAt); + return; + } + // A failed probe is not a failed sign-in: it means we do not know who this + // is. Reporting it as an auth error would show "could not sign in" to + // someone who never tried. The app degrades to signed-out. + setState((prev) => ({ ...prev, status: 'ready', user: null, expiresAt: null, busy: false })); + }, [applySession]); + + // One probe on mount. The cookie travels automatically, so this is how a + // refreshed tab discovers it is still signed in. + // + // The work is deferred into a promise rather than called straight from the + // effect body: a synchronous setState during an effect cascades an extra + // render pass, and here it would also mean the very first paint could not + // show the 'loading' state the route guard depends on. + useEffect(() => { + if (!isBackendConfigured()) return; + let cancelled = false; + void Promise.resolve().then(async () => { + if (cancelled) return; + await refresh(); + }); + return () => { + cancelled = true; + }; + }, [refresh]); + + const attempt = useCallback( + async (run: () => Promise): Promise => { + setState((prev) => ({ ...prev, busy: true, error: null })); + const result = await run(); + if (!alive.current) return false; + if (!result.ok) { + setState((prev) => ({ ...prev, busy: false, error: result.error })); + return false; + } + applySession(result.data.user, result.data.sessionExpiresAt); + return true; + }, + [applySession], + ); + + const login = useCallback( + (email: string, password: string) => attempt(() => api.login({ email, password })), + [attempt], + ); + + const signup = useCallback( + (email: string, password: string, displayName?: string) => + attempt(() => api.signup({ email, password, displayName })), + [attempt], + ); + + const startGuest = useCallback(() => attempt(() => api.startAnonymousSession()), [attempt]); + + const upgrade = useCallback( + (email: string, password: string, displayName?: string) => + attempt(() => api.upgradeAnonymous({ email, password, displayName })), + [attempt], + ); + + const logout = useCallback(async () => { + setState((prev) => ({ ...prev, busy: true, error: null })); + // The server revokes the session and clears the cookie. Dropping `user` + // locally without this would leave a live cookie that the next probe + // happily restores. + await api.logout(); + if (!alive.current) return; + setState((prev) => ({ ...prev, status: 'ready', user: null, expiresAt: null, busy: false })); + }, []); + + const clearError = useCallback(() => { + setState((prev) => (prev.error === null ? prev : { ...prev, error: null })); + }, []); + + const value = useMemo( + () => ({ ...state, login, signup, startGuest, upgrade, logout, refresh, clearError }), + [state, login, signup, startGuest, upgrade, logout, refresh, clearError], + ); + + return {children}; +} diff --git a/frontend/src/auth/RequireSession.tsx b/frontend/src/auth/RequireSession.tsx new file mode 100644 index 0000000..c7f18b3 --- /dev/null +++ b/frontend/src/auth/RequireSession.tsx @@ -0,0 +1,61 @@ +/** + * Route guard for everything behind `/app`. + * + * THE BUG THIS IS WRITTEN TO AVOID + * -------------------------------- + * The session lives in an HttpOnly cookie, so on a fresh page load the app + * does not yet know who the visitor is — it has to ask the server. A guard + * that treats "don't know yet" as "signed out" redirects every signed-in user + * to the sign-in page on every refresh, and then back again once the probe + * lands. So `status === 'loading'` renders a spinner and decides nothing. + * + * A LOCAL-ONLY BUILD IS NOT LOCKED OUT + * ------------------------------------ + * With `VITE_API_BASE_URL` unset there is no session to have and no sign-in + * that could succeed, so `status === 'disabled'` passes straight through. That + * is the deployment that shipped until now and it must keep working. + * + * A GUEST COUNTS AS SIGNED IN + * --------------------------- + * `useIsAuthenticated()` is true for an anonymous identity, because a guest + * has a real server-side user whose attempts are recorded and who can upgrade + * in place. Gating practice behind a full account would throw away the session + * where the candidate was actually willing to start. + * + * THE ATTEMPTED PATH SURVIVES + * --------------------------- + * The redirect carries `from` in location state, so a deep link into a mock + * test comes back to that mock test after signing in rather than dumping the + * visitor on the dashboard. + */ + +import { Navigate, useLocation } from 'react-router-dom'; +import type { ReactNode } from 'react'; +import { useAuth, useIsAuthenticated } from './auth-context'; + +export default function RequireSession({ children }: { children: ReactNode }) { + const { status } = useAuth(); + const authenticated = useIsAuthenticated(); + const location = useLocation(); + + if (status === 'loading') { + return ( +
+
+

Checking your session…

+
+ ); + } + + if (!authenticated) { + return ( + + ); + } + + return <>{children}; +} diff --git a/frontend/src/auth/__tests__/auth.test.tsx b/frontend/src/auth/__tests__/auth.test.tsx new file mode 100644 index 0000000..3d314d1 --- /dev/null +++ b/frontend/src/auth/__tests__/auth.test.tsx @@ -0,0 +1,345 @@ +import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest'; +import { render, screen, waitFor } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; +import { MemoryRouter, Routes, Route } from 'react-router-dom'; +import type { ReactNode } from 'react'; +import type { SessionUser } from '../../services/api'; + +/** + * The auth layer, which is the gate every other endpoint goes through. + * + * The cases below are the ones where getting it wrong is invisible in manual + * testing but wrong for real users: + * + * * The session is an HttpOnly cookie, so on a fresh load the app has to ASK + * the server who this is. A guard that reads "don't know yet" as "signed + * out" bounces every signed-in user to the sign-in page on refresh. + * * A build with no `VITE_API_BASE_URL` has no session to have. It must not + * show a login wall it cannot satisfy. + * * Signing out has to reach the server. Clearing local state leaves a live + * cookie that the next page load turns back into a signed-in user. + * * A guest is a real identity, not a logged-out visitor. + */ + +// --- Mock the API client ---------------------------------------------------- +// +// `isBackendConfigured()` reads a build-time constant, so the only way to +// exercise both the configured and the local-only paths in one suite is to +// control the module. Everything else is the real code. + +const mockApi = { + getSession: vi.fn(), + login: vi.fn(), + signup: vi.fn(), + startAnonymousSession: vi.fn(), + upgradeAnonymous: vi.fn(), + logout: vi.fn(), + // A plain function, not a spy: it is a pure URL builder with no round trip, + // and the test cares about the URL it produces. + googleSignInUrl: (redirectTo?: string): string => + `https://api.test/api/auth/google/start${redirectTo ? `?redirect_to=${encodeURIComponent(redirectTo)}` : ''}`, +}; +let backendConfigured = true; + +vi.mock('../../services/api', () => ({ + api: mockApi, + isBackendConfigured: () => backendConfigured, + apiBaseUrl: () => (backendConfigured ? 'https://api.test' : ''), + newIdempotencyKey: () => 'test-key', +})); + +// Imported after the mock is registered. +const { AuthProvider } = await import('../AuthContext'); +const { useAuth } = await import('../auth-context'); +const RequireSession = (await import('../RequireSession')).default; +const SignIn = (await import('../../pages/auth/SignIn')).default; + +const GUEST: SessionUser = { + id: 'usr_guest', + email: null, + displayName: null, + role: 'student' as const, + isAnonymous: true, + hasPassword: false, + createdAt: 1, +}; + +const MEMBER: SessionUser = { ...GUEST, id: 'usr_1', email: 'a@b.test', displayName: 'Asha', isAnonymous: false, hasPassword: true }; + +const sessionOk = (user: SessionUser | null) => ({ + ok: true as const, + data: { user, sessionExpiresAt: user ? 2_000 : null, serverNow: 1_000 }, +}); + +const failure = (code: string, message: string) => ({ + ok: false as const, + error: { code, message }, +}); + +/** Reads the context out so assertions can be made on it directly. */ +function Probe() { + const { status, user, busy, error } = useAuth(); + return ( +
+ {status} + {user ? user.id : 'none'} + {String(busy)} + {error ? error.code : 'none'} +
+ ); +} + +function wrap(children: ReactNode, entries = ['/']) { + return render( + + {children} + , + ); +} + +beforeEach(() => { + backendConfigured = true; + // googleSignInUrl is a plain function, not a spy, so it has nothing to + // reset and must be skipped rather than cast away. + for (const fn of Object.values(mockApi)) { + if ('mockReset' in fn) fn.mockReset(); + } + mockApi.getSession.mockResolvedValue(sessionOk(null)); + mockApi.logout.mockResolvedValue({ ok: true, data: { ok: true } }); +}); + +afterEach(() => { + vi.clearAllMocks(); +}); + +describe('AuthProvider', () => { + it('probes the server once on mount and reports the answer', async () => { + mockApi.getSession.mockResolvedValue(sessionOk(MEMBER)); + wrap(); + + // Starts as 'loading' — the cookie is HttpOnly, so the answer can only + // come from the server. + expect(screen.getByTestId('status')).toHaveTextContent('loading'); + + await waitFor(() => expect(screen.getByTestId('status')).toHaveTextContent('ready')); + expect(screen.getByTestId('user')).toHaveTextContent('usr_1'); + expect(mockApi.getSession).toHaveBeenCalledTimes(1); + }); + + it('is disabled, not signed-out, when no backend is configured', async () => { + backendConfigured = false; + wrap(); + + expect(screen.getByTestId('status')).toHaveTextContent('disabled'); + // And crucially it never asks: a local-only build makes no requests. + await waitFor(() => expect(mockApi.getSession).not.toHaveBeenCalled()); + }); + + it('treats a failed probe as signed-out, not as a sign-in error', async () => { + mockApi.getSession.mockResolvedValue(failure('NETWORK_UNAVAILABLE', 'Could not reach the server.')); + wrap(); + + await waitFor(() => expect(screen.getByTestId('status')).toHaveTextContent('ready')); + expect(screen.getByTestId('user')).toHaveTextContent('none'); + // Showing "could not sign in" to somebody who never tried is wrong. + expect(screen.getByTestId('error')).toHaveTextContent('none'); + }); + + it('surfaces a real sign-in failure as an error', async () => { + mockApi.login.mockResolvedValue(failure('INVALID_CREDENTIALS', 'Email or password is incorrect.')); + + function LoginButton() { + const { login } = useAuth(); + return ( + + ); + } + + const user = userEvent.setup(); + wrap( + <> + + + , + ); + await waitFor(() => expect(screen.getByTestId('status')).toHaveTextContent('ready')); + + await user.click(screen.getByRole('button', { name: 'go' })); + await waitFor(() => expect(screen.getByTestId('error')).toHaveTextContent('INVALID_CREDENTIALS')); + expect(screen.getByTestId('user')).toHaveTextContent('none'); + // The spinner has to stop even on failure. + expect(screen.getByTestId('busy')).toHaveTextContent('false'); + }); + + it('asks the server to revoke the session on sign-out', async () => { + mockApi.getSession.mockResolvedValue(sessionOk(MEMBER)); + + function LogoutButton() { + const { logout } = useAuth(); + return ( + + ); + } + + const user = userEvent.setup(); + wrap( + <> + + + , + ); + await waitFor(() => expect(screen.getByTestId('user')).toHaveTextContent('usr_1')); + + await user.click(screen.getByRole('button', { name: 'out' })); + await waitFor(() => expect(screen.getByTestId('user')).toHaveTextContent('none')); + // The cookie is HttpOnly: without this call the next probe signs them + // straight back in. + expect(mockApi.logout).toHaveBeenCalledTimes(1); + }); +}); + +describe('RequireSession', () => { + const guarded = ( + + +

Protected

+ + } + /> + Sign in page} /> +
+ ); + + it('waits for the probe instead of redirecting a signed-in user', async () => { + let resolve: ((value: unknown) => void) | undefined; + mockApi.getSession.mockReturnValue( + new Promise((r) => { + resolve = r; + }), + ); + + wrap(guarded, ['/app']); + + // Mid-probe: neither the protected page nor a redirect. This is the bug + // the three-state status exists to prevent — a refresh must not bounce a + // signed-in user to the sign-in page. + expect(screen.getByText(/Checking your session/i)).toBeInTheDocument(); + expect(screen.queryByText('Sign in page')).not.toBeInTheDocument(); + + resolve?.(sessionOk(MEMBER)); + await waitFor(() => expect(screen.getByText('Protected')).toBeInTheDocument()); + }); + + it('redirects to sign-in once the probe says nobody is signed in', async () => { + mockApi.getSession.mockResolvedValue(sessionOk(null)); + wrap(guarded, ['/app']); + await waitFor(() => expect(screen.getByText('Sign in page')).toBeInTheDocument()); + }); + + it('lets a guest through, because a guest is a real identity', async () => { + mockApi.getSession.mockResolvedValue(sessionOk(GUEST)); + wrap(guarded, ['/app']); + await waitFor(() => expect(screen.getByText('Protected')).toBeInTheDocument()); + }); + + it('lets everyone through when no backend is configured', async () => { + backendConfigured = false; + wrap(guarded, ['/app']); + // No wall in a build that has no sign-in to offer. + expect(screen.getByText('Protected')).toBeInTheDocument(); + expect(mockApi.getSession).not.toHaveBeenCalled(); + }); +}); + +describe('SignIn', () => { + const page = ( + + } /> + } /> + App} /> + + ); + + it('offers the guest path as the primary action', async () => { + mockApi.startAnonymousSession.mockResolvedValue(sessionOk(GUEST)); + const user = userEvent.setup(); + wrap(page, ['/signin']); + await waitFor(() => expect(screen.getByRole('button', { name: /continue as guest/i })).toBeEnabled()); + + await user.click(screen.getByRole('button', { name: /continue as guest/i })); + await waitFor(() => expect(screen.getByText('App')).toBeInTheDocument()); + expect(mockApi.startAnonymousSession).toHaveBeenCalledTimes(1); + }); + + it('enforces the password minimum when creating an account', async () => { + const user = userEvent.setup(); + wrap(page, ['/signup']); + await waitFor(() => expect(screen.getByRole('heading', { name: /create an account/i })).toBeInTheDocument()); + + await user.type(screen.getByLabelText(/email/i), 'a@b.test'); + await user.type(screen.getByLabelText(/password/i), 'short'); + expect(screen.getByRole('button', { name: /create account/i })).toBeDisabled(); + + await user.type(screen.getByLabelText(/password/i), 'enough'); + expect(screen.getByRole('button', { name: /create account/i })).toBeEnabled(); + }); + + it('does NOT impose a length minimum on sign-in', async () => { + // The server's login schema has no minimum on purpose: rejecting a short + // password would tell an attacker their guess was too short to be + // anyone's. A client-side minimum would reintroduce that signal and lock + // out any account whose password predates the current rule. + const user = userEvent.setup(); + wrap(page, ['/signin']); + await waitFor(() => expect(screen.getByRole('heading', { name: /^sign in$/i })).toBeInTheDocument()); + + await user.type(screen.getByLabelText(/email/i), 'a@b.test'); + await user.type(screen.getByLabelText(/password/i), 'abc'); + expect(screen.getByRole('button', { name: /^sign in$/i })).toBeEnabled(); + }); + + it('clears a stale failure when switching mode', async () => { + mockApi.login.mockResolvedValue(failure('INVALID_CREDENTIALS', 'Email or password is incorrect.')); + const user = userEvent.setup(); + wrap(page, ['/signin']); + await waitFor(() => expect(screen.getByRole('heading', { name: /^sign in$/i })).toBeInTheDocument()); + + await user.type(screen.getByLabelText(/email/i), 'a@b.test'); + await user.type(screen.getByLabelText(/password/i), 'password123'); + await user.click(screen.getByRole('button', { name: /^sign in$/i })); + await waitFor(() => expect(screen.getByRole('alert')).toHaveTextContent(/incorrect/i)); + + // "Email or password is incorrect" under a "Create an account" heading + // reads as though the account already exists. + await user.click(screen.getByRole('button', { name: /create one/i })); + await waitFor(() => expect(screen.getByRole('alert')).toBeEmptyDOMElement()); + }); + + it('offers Google as a real navigation, carrying the return path', async () => { + // The OAuth flow leaves this origin, so the control must be an anchor + // rather than a fetch — middle-click and Back have to work, and there is + // nothing to await. + wrap(page, ['/signin']); + const link = await screen.findByRole('link', { name: /continue with google/i }); + expect(link).toHaveAttribute( + 'href', + expect.stringContaining('/api/auth/google/start'), + ); + // The guard stashes the attempted path; it has to survive the round trip + // through Google or a deep link lands on the dashboard instead. + expect(link.getAttribute('href')).toContain('redirect_to='); + }); + + it('sends an already-signed-in visitor straight on', async () => { + mockApi.getSession.mockResolvedValue(sessionOk(MEMBER)); + wrap(page, ['/signin']); + await waitFor(() => expect(screen.getByText('App')).toBeInTheDocument()); + }); +}); diff --git a/frontend/src/auth/auth-context.ts b/frontend/src/auth/auth-context.ts new file mode 100644 index 0000000..02bd8ed --- /dev/null +++ b/frontend/src/auth/auth-context.ts @@ -0,0 +1,69 @@ +/** + * The auth context, its types, and the hooks that read it. + * + * Split from `AuthContext.tsx` because that file exports a component and this + * one does not. React Fast Refresh can only swap a module whose exports are + * all components, so mixing the provider with its hooks costs a full reload on + * every edit — the same reason `context/user-context.ts` is separate from + * `context/UserContext.tsx`. + */ + +import { createContext, useContext } from 'react'; +import type { ApiError, SessionUser } from '../services/api'; + +export type AuthStatus = 'loading' | 'ready' | 'disabled'; + +export interface AuthState { + status: AuthStatus; + user: SessionUser | null; + /** Epoch ms the session expires, when the server told us. */ + expiresAt: number | null; + /** Last failure from a sign-in attempt. Cleared on the next attempt. */ + error: ApiError | null; + /** True while a sign-in, sign-up or sign-out request is in flight. */ + busy: boolean; +} + +export interface AuthActions { + login(email: string, password: string): Promise; + signup(email: string, password: string, displayName?: string): Promise; + /** Creates a guest identity whose attempts survive a later sign-up. */ + startGuest(): Promise; + /** Turns the CURRENT guest into a full account, keeping its id and history. */ + upgrade(email: string, password: string, displayName?: string): Promise; + logout(): Promise; + /** Re-reads the session from the server. */ + refresh(): Promise; + clearError(): void; +} + +export type AuthContextValue = AuthState & AuthActions; + +export const AuthContext = createContext(null); + +/** + * Read the auth state. + * + * Throws outside a provider rather than returning a plausible default: a + * component that silently believes nobody is signed in is far harder to debug + * than one that fails on first render. + */ +export function useAuth(): AuthContextValue { + const value = useContext(AuthContext); + if (!value) { + throw new Error('useAuth must be used inside .'); + } + return value; +} + +/** + * True when the app should behave as a signed-in experience. + * + * A guest counts: they have a server-side identity, their attempts are + * recorded, and they can upgrade in place. `'disabled'` also counts, because a + * local-only build has no sign-in to offer and must not gate anything. + */ +export function useIsAuthenticated(): boolean { + const { status, user } = useAuth(); + return status === 'disabled' || user !== null; +} diff --git a/frontend/src/components/ThreeBackground.tsx b/frontend/src/components/ThreeBackground.tsx deleted file mode 100644 index 462ef31..0000000 --- a/frontend/src/components/ThreeBackground.tsx +++ /dev/null @@ -1,155 +0,0 @@ -import { useRef, useMemo } from 'react'; -import { Canvas, useFrame } from '@react-three/fiber'; -import { Points, PointMaterial } from '@react-three/drei'; -import * as THREE from 'three'; - -function ParticleField() { - const ref = useRef(null); - - const particlesCount = 5000; - const positions = useMemo(() => { - const positions = new Float32Array(particlesCount * 3); - for (let i = 0; i < particlesCount; i++) { - const x = (Math.random() - 0.5) * 20; - const y = (Math.random() - 0.5) * 20; - const z = (Math.random() - 0.5) * 20; - positions[i * 3] = x; - positions[i * 3 + 1] = y; - positions[i * 3 + 2] = z; - } - return positions; - }, []); - - useFrame((state) => { - if (ref.current) { - ref.current.rotation.x = state.clock.getElapsedTime() * 0.05; - ref.current.rotation.y = state.clock.getElapsedTime() * 0.08; - } - }); - - return ( - - - - ); -} - -function FloatingGeometry() { - const meshRef = useRef(null); - const torusRef = useRef(null); - const octaRef = useRef(null); - - useFrame((state) => { - const time = state.clock.getElapsedTime(); - - if (meshRef.current) { - meshRef.current.rotation.x = time * 0.3; - meshRef.current.rotation.y = time * 0.2; - meshRef.current.position.y = Math.sin(time * 0.5) * 0.5; - } - - if (torusRef.current) { - torusRef.current.rotation.x = time * 0.4; - torusRef.current.rotation.z = time * 0.2; - torusRef.current.position.y = Math.sin(time * 0.5 + 1) * 0.3; - } - - if (octaRef.current) { - octaRef.current.rotation.y = time * 0.5; - octaRef.current.rotation.z = time * 0.3; - octaRef.current.position.y = Math.sin(time * 0.5 + 2) * 0.4; - } - }); - - return ( - <> - - - - - - - - - - - - - - - - ); -} - -function GlowingSphere() { - const sphereRef = useRef(null); - - useFrame((state) => { - if (sphereRef.current) { - const time = state.clock.getElapsedTime(); - sphereRef.current.scale.setScalar(1 + Math.sin(time * 2) * 0.1); - } - }); - - return ( - - - - - ); -} - -export default function ThreeBackground() { - return ( -
- - - - - - - - - - -
- ); -} diff --git a/frontend/src/components/ui/Badge.module.css b/frontend/src/components/ui/Badge.module.css new file mode 100644 index 0000000..a02f579 --- /dev/null +++ b/frontend/src/components/ui/Badge.module.css @@ -0,0 +1,56 @@ +.badge { + display: inline-flex; + align-items: center; + gap: 0.3125rem; + font-weight: 600; + line-height: 1.3; + white-space: nowrap; + border: 1px solid transparent; + border-radius: var(--radius-full, 999px); +} + +.sm { + padding: 0.0625rem 0.4375rem; + font-size: 0.6875rem; +} + +.md { + padding: 0.1875rem 0.5625rem; + font-size: 0.75rem; +} + +.neutral { + color: var(--color-fg-muted, #5b6169); + background-color: var(--color-surface-2, #f4f5f7); + border-color: var(--color-border, #e3e5e8); +} + +.accent { + color: var(--color-accent, #2f6bff); + background-color: color-mix(in srgb, var(--color-accent, #2f6bff) 12%, transparent); + border-color: color-mix(in srgb, var(--color-accent, #2f6bff) 30%, transparent); +} + +.success { + color: var(--color-success-500, #16a34a); + background-color: color-mix(in srgb, var(--color-success-500, #16a34a) 12%, transparent); + border-color: color-mix(in srgb, var(--color-success-500, #16a34a) 30%, transparent); +} + +.warning { + color: var(--color-warning-500, #d97706); + background-color: color-mix(in srgb, var(--color-warning-500, #d97706) 14%, transparent); + border-color: color-mix(in srgb, var(--color-warning-500, #d97706) 30%, transparent); +} + +.danger { + color: var(--color-danger-500, #dc2626); + background-color: color-mix(in srgb, var(--color-danger-500, #dc2626) 12%, transparent); + border-color: color-mix(in srgb, var(--color-danger-500, #dc2626) 30%, transparent); +} + +.info { + color: var(--color-info-500, #0284c7); + background-color: color-mix(in srgb, var(--color-info-500, #0284c7) 12%, transparent); + border-color: color-mix(in srgb, var(--color-info-500, #0284c7) 30%, transparent); +} diff --git a/frontend/src/components/ui/Badge.tsx b/frontend/src/components/ui/Badge.tsx new file mode 100644 index 0000000..ca42272 --- /dev/null +++ b/frontend/src/components/ui/Badge.tsx @@ -0,0 +1,45 @@ +import { forwardRef } from 'react'; +import type { HTMLAttributes, ReactNode } from 'react'; +import { cx } from './cx'; +import { VisuallyHidden } from './VisuallyHidden'; +import styles from './Badge.module.css'; + +export type BadgeTone = 'neutral' | 'accent' | 'success' | 'warning' | 'danger' | 'info'; + +export interface BadgeProps extends HTMLAttributes { + tone?: BadgeTone; + size?: 'sm' | 'md'; + /** Leading glyph. Rendered `aria-hidden`. */ + icon?: ReactNode; + /** + * Context a sighted user infers from colour or placement but a screen + * reader would not, e.g. `"Status:"` before a `"Passed"` badge. + */ + srPrefix?: string; +} + +/** + * Static, non-interactive status label. Colour is never the only carrier of + * meaning — the badge always contains text, and `srPrefix` adds the context + * that position or hue would otherwise imply. + */ +export const Badge = forwardRef(function Badge( + { tone = 'neutral', size = 'md', icon, srPrefix, className, children, ...rest }, + ref, +) { + return ( + + {srPrefix !== undefined && {`${srPrefix} `}} + {icon !== undefined && ( + + )} + {children} + + ); +}); diff --git a/frontend/src/components/ui/Button.module.css b/frontend/src/components/ui/Button.module.css new file mode 100644 index 0000000..36ad496 --- /dev/null +++ b/frontend/src/components/ui/Button.module.css @@ -0,0 +1,141 @@ +.button { + /* Every size keeps a >=44px hit area per WCAG 2.5.5 Target Size. */ + --button-min-size: 44px; + + position: relative; + display: inline-flex; + align-items: center; + justify-content: center; + gap: 0.5rem; + min-height: var(--button-min-size); + box-sizing: border-box; + margin: 0; + font: inherit; + font-weight: 600; + line-height: 1.2; + text-align: center; + text-decoration: none; + white-space: nowrap; + border: 1px solid transparent; + border-radius: var(--radius-md, 10px); + cursor: pointer; + -webkit-tap-highlight-color: transparent; + transition: + background-color var(--duration-fast, 120ms) ease, + border-color var(--duration-fast, 120ms) ease, + color var(--duration-fast, 120ms) ease, + box-shadow var(--duration-fast, 120ms) ease, + transform var(--duration-fast, 120ms) ease; +} + +.button:focus-visible { + outline: 2px solid var(--color-ring, #2f6bff); + outline-offset: 2px; +} + +.button:active:not(.inert) { + transform: translateY(1px); +} + +@media (prefers-reduced-motion: reduce) { + .button { + transition: none; + } + .button:active:not(.inert) { + transform: none; + } +} + +/* Sizes change padding and type scale, never the 44px floor. */ +.sm { + padding: 0 0.75rem; + font-size: 0.8125rem; +} + +.md { + padding: 0 1rem; + font-size: 0.9375rem; +} + +.lg { + --button-min-size: 52px; + padding: 0 1.375rem; + font-size: 1.0625rem; + border-radius: var(--radius-lg, 14px); +} + +.primary { + background-color: var(--color-accent, #2f6bff); + border-color: var(--color-accent, #2f6bff); + color: #fff; +} + +.primary:hover:not(.inert) { + filter: brightness(1.07); +} + +.secondary { + background-color: var(--color-surface, #fff); + border-color: var(--color-border-strong, #c7cbd1); + color: var(--color-fg, #15171a); +} + +.secondary:hover:not(.inert) { + background-color: var(--color-surface-2, #f4f5f7); +} + +.ghost { + background-color: transparent; + border-color: transparent; + color: var(--color-fg-muted, #5b6169); +} + +.ghost:hover:not(.inert) { + background-color: var(--color-surface-2, #f4f5f7); + color: var(--color-fg, #15171a); +} + +.danger { + background-color: var(--color-danger-500, #dc2626); + border-color: var(--color-danger-500, #dc2626); + color: #fff; +} + +.danger:hover:not(.inert) { + filter: brightness(1.07); +} + +.fullWidth { + width: 100%; +} + +/* Square hit area; `padding: 0` would let a 16px glyph shrink the target. */ +.iconOnly { + gap: 0; + padding: 0; + min-width: var(--button-min-size); + width: var(--button-min-size); +} + +.inert { + cursor: not-allowed; + opacity: 0.55; +} + +/* `loading` uses aria-disabled, not [disabled], so the control keeps focus + and the busy state stays announceable. Pointer events stay enabled so the + cursor still communicates the state. */ +.loading { + cursor: progress; +} + +.icon { + display: inline-flex; + flex: 0 0 auto; + align-items: center; + justify-content: center; +} + +.label { + display: inline-block; +} diff --git a/frontend/src/components/ui/Button.tsx b/frontend/src/components/ui/Button.tsx new file mode 100644 index 0000000..c4e1d1d --- /dev/null +++ b/frontend/src/components/ui/Button.tsx @@ -0,0 +1,120 @@ +import { forwardRef } from 'react'; +import type { ButtonHTMLAttributes, MouseEvent, ReactNode } from 'react'; +import { cx } from './cx'; +import { Spinner } from './Spinner'; +import { VisuallyHidden } from './VisuallyHidden'; +import styles from './Button.module.css'; + +export type ButtonVariant = 'primary' | 'secondary' | 'ghost' | 'danger'; +export type ButtonSize = 'sm' | 'md' | 'lg'; + +type NativeButtonProps = Omit< + ButtonHTMLAttributes, + 'aria-label' | 'children' +>; + +export interface ButtonBaseProps extends NativeButtonProps { + variant?: ButtonVariant; + size?: ButtonSize; + /** + * Busy state. Implemented with `aria-busy` + `aria-disabled` rather than + * the `disabled` attribute so the button keeps focus while the request is + * in flight — a `disabled` button drops out of the tab order and silently + * throws focus to ``. + */ + loading?: boolean; + /** Visually hidden text announced while `loading`. */ + loadingLabel?: string; + fullWidth?: boolean; + leadingIcon?: ReactNode; + trailingIcon?: ReactNode; + children?: ReactNode; +} + +/** + * Icon-only buttons have no text to name them, so the type system requires an + * `aria-label`. `` is a compile error. + */ +export type ButtonProps = ButtonBaseProps & + ( + | { iconOnly: true; 'aria-label': string } + | { iconOnly?: false | undefined; 'aria-label'?: string } + ); + +type ResolvedButtonProps = ButtonBaseProps & { + iconOnly?: boolean; + 'aria-label'?: string; +}; + +export const Button = forwardRef(function Button(props, ref) { + const { + variant = 'primary', + size = 'md', + loading = false, + loadingLabel, + fullWidth = false, + iconOnly = false, + leadingIcon, + trailingIcon, + className, + children, + disabled = false, + type = 'button', + onClick, + ...rest + } = props as ResolvedButtonProps; + + const inert = disabled || loading; + const spinnerSize = size === 'lg' ? 20 : size === 'sm' ? 14 : 16; + + function handleClick(event: MouseEvent) { + if (loading) { + // aria-disabled does not block activation the way [disabled] does. + event.preventDefault(); + event.stopPropagation(); + return; + } + onClick?.(event); + } + + return ( + + ); +}); diff --git a/frontend/src/components/ui/Card.module.css b/frontend/src/components/ui/Card.module.css new file mode 100644 index 0000000..495989c --- /dev/null +++ b/frontend/src/components/ui/Card.module.css @@ -0,0 +1,62 @@ +.card { + display: block; + min-width: 0; + box-sizing: border-box; + background-color: var(--color-surface, #fff); + color: var(--color-fg, #15171a); + border: 1px solid var(--color-border, #e3e5e8); + border-radius: var(--radius-lg, 14px); +} + +.none { + padding: 0; +} + +.sm { + padding: 0.75rem; +} + +.md { + padding: 1rem; +} + +.lg { + padding: 1.5rem; +} + +.raised { + box-shadow: var(--shadow-sm, 0 1px 3px rgb(9 11 15 / 8%)); + border-color: transparent; +} + +.flat { + background-color: var(--color-surface-2, #f4f5f7); + border-color: transparent; +} + +/* `interactive` only supplies the affordance styling. The card must still be + rendered as (or contain) a real button or link — a clickable
is not + keyboard reachable. */ +.interactive { + cursor: pointer; + transition: + border-color var(--duration-fast, 120ms) ease, + box-shadow var(--duration-fast, 120ms) ease, + transform var(--duration-fast, 120ms) ease; +} + +.interactive:hover { + border-color: var(--color-border-strong, #c7cbd1); + box-shadow: var(--shadow-md, 0 6px 16px -6px rgb(9 11 15 / 16%)); +} + +.interactive:focus-visible { + outline: 2px solid var(--color-ring, #2f6bff); + outline-offset: 2px; +} + +@media (prefers-reduced-motion: reduce) { + .interactive { + transition: none; + } +} diff --git a/frontend/src/components/ui/Card.tsx b/frontend/src/components/ui/Card.tsx new file mode 100644 index 0000000..2eae7e6 --- /dev/null +++ b/frontend/src/components/ui/Card.tsx @@ -0,0 +1,39 @@ +import { forwardRef } from 'react'; +import type { HTMLAttributes } from 'react'; +import { cx } from './cx'; +import styles from './Card.module.css'; + +export type CardPadding = 'none' | 'sm' | 'md' | 'lg'; +export type CardVariant = 'outlined' | 'raised' | 'flat'; + +export interface CardProps extends HTMLAttributes { + padding?: CardPadding; + variant?: CardVariant; + /** + * Adds hover/focus affordance styling only. The card still has to *be* a + * real control: render the whole card as a ` + ); +}); diff --git a/frontend/src/components/ui/Progress.module.css b/frontend/src/components/ui/Progress.module.css new file mode 100644 index 0000000..fecff40 --- /dev/null +++ b/frontend/src/components/ui/Progress.module.css @@ -0,0 +1,138 @@ +.barRoot { + display: flex; + flex-direction: column; + gap: 0.375rem; + min-width: 0; +} + +.barHeader { + display: flex; + align-items: baseline; + justify-content: space-between; + gap: 0.75rem; + font-size: 0.8125rem; + color: var(--color-fg-muted, #5b6169); +} + +.barLabel { + font-weight: 600; + color: var(--color-fg, #15171a); +} + +.barTrack { + position: relative; + width: 100%; + overflow: hidden; + background-color: var(--color-surface-2, #f4f5f7); + border-radius: var(--radius-full, 999px); +} + +.barFill { + height: 100%; + border-radius: inherit; + background-color: var(--color-accent, #2f6bff); + transition: width var(--duration-slow, 320ms) cubic-bezier(0.2, 0.8, 0.2, 1); +} + +.success .barFill { + background-color: var(--color-success-500, #16a34a); +} + +.warning .barFill { + background-color: var(--color-warning-500, #d97706); +} + +.danger .barFill { + background-color: var(--color-danger-500, #dc2626); +} + +.info .barFill { + background-color: var(--color-info-500, #0284c7); +} + +/* Indeterminate: a sliding sliver instead of a width-driven fill. */ +.indeterminate .barFill { + width: 40%; + animation: barSlide 1.4s ease-in-out infinite; +} + +@keyframes barSlide { + 0% { + transform: translateX(-100%); + } + 100% { + transform: translateX(250%); + } +} + +.ringRoot { + position: relative; + display: inline-flex; + align-items: center; + justify-content: center; + line-height: 1; +} + +.ringSvg { + display: block; + transform: rotate(-90deg); +} + +.ringTrack { + stroke: var(--color-surface-2, #f4f5f7); +} + +.ringFill { + stroke: var(--color-accent, #2f6bff); + transition: stroke-dashoffset var(--duration-slow, 320ms) cubic-bezier(0.2, 0.8, 0.2, 1); +} + +.success .ringFill { + stroke: var(--color-success-500, #16a34a); +} + +.warning .ringFill { + stroke: var(--color-warning-500, #d97706); +} + +.danger .ringFill { + stroke: var(--color-danger-500, #dc2626); +} + +.info .ringFill { + stroke: var(--color-info-500, #0284c7); +} + +.ringCenter { + position: absolute; + inset: 0; + display: flex; + align-items: center; + justify-content: center; + font-size: 0.8125rem; + font-weight: 700; + color: var(--color-fg, #15171a); +} + +.ringSpin { + animation: ringRotate 1.1s linear infinite; +} + +@keyframes ringRotate { + to { + transform: rotate(270deg); + } +} + +@media (prefers-reduced-motion: reduce) { + .barFill, + .ringFill { + transition: none; + } + .indeterminate .barFill { + animation-duration: 3s; + } + .ringSpin { + animation-duration: 3s; + } +} diff --git a/frontend/src/components/ui/Progress.tsx b/frontend/src/components/ui/Progress.tsx new file mode 100644 index 0000000..22efb0c --- /dev/null +++ b/frontend/src/components/ui/Progress.tsx @@ -0,0 +1,214 @@ +import { forwardRef, useId } from 'react'; +import type { HTMLAttributes, ReactNode } from 'react'; +import { cx } from './cx'; +import styles from './Progress.module.css'; + +export type ProgressTone = 'accent' | 'success' | 'warning' | 'danger' | 'info'; + +function clampFraction(value: number, min: number, max: number): number { + if (max <= min) return 0; + const fraction = (value - min) / (max - min); + if (Number.isNaN(fraction)) return 0; + return Math.min(1, Math.max(0, fraction)); +} + +interface ProgressSharedProps { + /** Current value. Ignored when `indeterminate`. */ + value?: number; + min?: number; + max?: number; + tone?: ProgressTone; + /** + * Work is happening but the amount is unknown. Drops `aria-valuenow`, which + * is how assistive tech recognises an indeterminate progressbar. + */ + indeterminate?: boolean; + /** + * The accessible text alternative, exposed as `aria-valuetext`. Defaults to + * a percentage, or `" of "` when the range is not 0-100. + */ + valueText?: string; +} + +function defaultValueText(value: number, min: number, max: number, indeterminate: boolean): string { + if (indeterminate) return 'In progress'; + if (min === 0 && max === 100) return `${Math.round(value)}%`; + return `${value} of ${max}`; +} + +type NativeBarProps = Omit< + HTMLAttributes, + 'role' | 'children' | 'aria-valuenow' | 'aria-valuemin' | 'aria-valuemax' | 'aria-valuetext' +>; + +export interface ProgressBarBaseProps extends NativeBarProps, ProgressSharedProps { + /** Visible label above the track. Also names the progressbar. */ + label?: ReactNode; + /** Visible text on the right of the label row, e.g. `"12 / 40"`. */ + hint?: ReactNode; + /** Track thickness in px. Default 8. */ + thickness?: number; +} + +/** + * A progressbar has no implicit accessible name. Supply visible `label` text, + * or an ARIA label when surrounding content already explains what is + * progressing. + */ +export type ProgressBarProps = ProgressBarBaseProps & + ({ label: ReactNode } | { 'aria-label': string } | { 'aria-labelledby': string }); + +export const ProgressBar = forwardRef( + function ProgressBar(props, ref) { + const { + value = 0, + min = 0, + max = 100, + tone = 'accent', + indeterminate = false, + valueText, + label, + hint, + thickness = 8, + className, + style, + ...rest + } = props as ProgressBarBaseProps; + + const generatedId = useId(); + const labelId = `${generatedId}-label`; + const fraction = clampFraction(value, min, max); + const spoken = valueText ?? defaultValueText(value, min, max, indeterminate); + + return ( +
+ {(label !== undefined || hint !== undefined) && ( +
+ {label !== undefined && ( + + {label} + + )} + {hint !== undefined && {hint}} +
+ )} +
+ {/* progressbar is "children presentational" in ARIA, so this fill is + invisible to assistive tech either way. */} +
+
+
+ ); + }, +); + +type NativeRingProps = Omit< + HTMLAttributes, + 'role' | 'aria-valuenow' | 'aria-valuemin' | 'aria-valuemax' | 'aria-valuetext' +>; + +export interface ProgressRingBaseProps extends NativeRingProps, ProgressSharedProps { + /** Outer diameter in px. Default 56. */ + size?: number; + /** Stroke width in px. Default 6. */ + thickness?: number; + /** + * Content in the middle of the ring. Rendered `aria-hidden`; the spoken + * value comes from `aria-valuetext`. + */ + children?: ReactNode; +} + +/** Same naming requirement as `ProgressBar`. */ +export type ProgressRingProps = ProgressRingBaseProps & + ({ 'aria-label': string } | { 'aria-labelledby': string }); + +export const ProgressRing = forwardRef( + function ProgressRing(props, ref) { + const { + value = 0, + min = 0, + max = 100, + tone = 'accent', + indeterminate = false, + valueText, + size = 56, + thickness = 6, + className, + style, + children, + ...rest + } = props as ProgressRingBaseProps; + + const fraction = clampFraction(value, min, max); + const spoken = valueText ?? defaultValueText(value, min, max, indeterminate); + const radius = (size - thickness) / 2; + const circumference = 2 * Math.PI * radius; + const dashOffset = indeterminate ? circumference * 0.75 : circumference * (1 - fraction); + + return ( +
+ + {children !== undefined && ( + + )} +
+ ); + }, +); diff --git a/frontend/src/components/ui/README.md b/frontend/src/components/ui/README.md new file mode 100644 index 0000000..1825dff --- /dev/null +++ b/frontend/src/components/ui/README.md @@ -0,0 +1,367 @@ +# UI primitives + +Accessible, dependency-light building blocks. Import from the barrel: + +```tsx +import { Button, Dialog, RadioGroup, Radio } from '@/components/ui'; +// or, in this repo's current setup: +import { Button, Dialog, RadioGroup, Radio } from '../components/ui'; +``` + +## What every primitive guarantees + +| Guarantee | How | +| --- | --- | +| Visible focus indicator | `:focus-visible { outline: 2px solid var(--color-ring) }` with a 2px offset on every focusable element. Never `outline: none`. | +| Minimum 44x44px target | `min-height: 44px` on all interactive primitives at every size; icon-only buttons also get `min-width: 44px`. Size variants change padding and type scale, never the floor. (WCAG 2.5.5) | +| Reduced motion | Every animation and transition is disabled or de-emphasised under `@media (prefers-reduced-motion: reduce)`. Spinners swap rotation for an opacity pulse so "busy" is still conveyed. | +| `className` passthrough | Merged **after** the component's own classes, so consumer rules win at equal specificity. | +| Forwarded ref | Every component is a `forwardRef` onto the real DOM element. | +| Styling | CSS Modules reading `var(--color-…)` / `var(--radius-…)` / `var(--shadow-…)` / `var(--duration-…)` tokens, each with a hard-coded fallback so the components render correctly even before the token layer lands. No Tailwind utility classes are assumed. | +| Colour is never the only signal | State is always paired with a glyph and/or visually hidden text (WCAG 1.4.1). | + +Zero runtime dependencies beyond `react`, `react-dom` and `lucide-react` (icons only). + +### A note on `disabled` + +Across this folder, "unavailable" is expressed as `aria-disabled` rather than the +`disabled` attribute wherever the control still needs to be **readable**. A +`disabled` element is removed from the tab order and, in several +browser/screen-reader combinations, effectively from the accessibility tree. +`Button` is the exception: an explicitly `disabled` Button really is `disabled`, +because that is what callers expect from a form control. Even there, `loading` +uses `aria-disabled` + `aria-busy` so focus is not thrown to `` mid-request. + +--- + +## Button + +```tsx + + + +``` + +| Prop | Type | Default | Notes | +| --- | --- | --- | --- | +| `variant` | `'primary' \| 'secondary' \| 'ghost' \| 'danger'` | `'primary'` | | +| `size` | `'sm' \| 'md' \| 'lg'` | `'md'` | All sizes keep the 44px floor. | +| `loading` | `boolean` | `false` | `aria-busy` + `aria-disabled`, spinner replaces `leadingIcon`, clicks swallowed, **stays focusable**. | +| `loadingLabel` | `string` | — | Visually hidden text appended while loading. | +| `iconOnly` | `boolean` | `false` | Square 44x44 target. **Requires `aria-label`.** | +| `fullWidth` | `boolean` | `false` | | +| `leadingIcon` / `trailingIcon` | `ReactNode` | — | Wrapped in a flex span. | +| `disabled` | `boolean` | `false` | Real `disabled` attribute. | + +**a11y guarantees** — native ` +// ✗ Property ''aria-label'' is missing in type ... but required in type +// '{ iconOnly: true; 'aria-label': string; }' +``` + +## IconButton + +```tsx +} variant="ghost" /> +``` + +Thin wrapper over `Button` in icon-only mode. `icon` and `aria-label` are both +required props, so the 44x44 target and the accessible name cannot be forgotten +at the call site. + +## RadioGroup + Radio + +The full WAI-ARIA [radiogroup](https://www.w3.org/WAI/ARIA/apg/patterns/radio/) +pattern. This is the one to reach for for quiz options. + +```tsx + + {options.map((option, index) => ( + + {option.text} + + ))} + +``` + +### RadioGroup props + +| Prop | Type | Default | Notes | +| --- | --- | --- | --- | +| `value` | `string \| null` | — | Controlled. `null` = nothing chosen. | +| `defaultValue` | `string \| null` | `null` | Uncontrolled. | +| `onValueChange` | `(value: string) => void` | — | Fires for clicks and arrow-key selection. | +| `readOnly` | `boolean` | `false` | Review mode — see below. | +| `disabled` | `boolean` | `false` | Whole group inert, via `aria-disabled`. | +| `orientation` | `'vertical' \| 'horizontal'` | `'vertical'` | Sets `aria-orientation`. Both axes of arrow key work either way. | +| `name` | `string` | — | Emits a hidden input for form submission. | +| `required` | `boolean` | `false` | Sets `aria-required`. | +| `aria-label` **or** `aria-labelledby` | `string` | — | **One is required by the type system.** | + +### Radio props + +| Prop | Type | Default | Notes | +| --- | --- | --- | --- | +| `value` | `string` | — | Required. Mirrored to `data-value` for navigation. | +| `state` | `'neutral' \| 'selected' \| 'correct' \| 'incorrect'` | derived | Defaults to `selected` when checked, else `neutral`. | +| `stateLabel` | `string \| null` | `'Correct answer'` / `'Incorrect answer'` | Visually hidden text so the revealed state is **announced**, not colour-only. `null` suppresses. | +| `description` | `ReactNode` | — | Secondary line. | +| `disabled` | `boolean` | `false` | This option only, via `aria-disabled`. | +| `showIndicator` | `boolean` | `true` | The leading bullet/tick/cross. | + +### Keyboard interactions + +| Key | Behaviour | +| --- | --- | +| `Tab` / `Shift+Tab` | Enters or leaves the group as **one single tab stop**. | +| `↓` / `→` | Move focus to the next option (wrapping) **and select it**. | +| `↑` / `←` | Move focus to the previous option (wrapping) **and select it**. | +| `Home` | Move focus to the first option and select it. | +| `End` | Move focus to the last option and select it. | +| `Space` / `Enter` | Select the focused option without moving focus (native button activation). | +| Any arrow + `Ctrl`/`Alt`/`Meta` | Ignored, so browser and screen-reader shortcuts keep working. | + +Typeahead is deliberately not implemented — it is not part of the radiogroup pattern. + +**Roving tabindex.** Exactly one option is tabbable at any moment: the selected +one, or the first option when nothing is selected yet. Options always *render* +`tabIndex={-1}` — a constant, so React never patches the attribute after mount — +and a layout effect on the group owns the single `0`. Option order comes from a +DOM query, so arrow-key order always matches visual order even when options are +wrapped, reordered or conditionally rendered. + +**`readOnly` (post-answer review).** Selection is locked, but: + +- options keep `aria-disabled`, **never** the `disabled` attribute, so the + revealed correct answer stays in the accessibility tree; +- every option stays focusable and reachable with the arrow keys and `Home`/`End`; +- the group is marked `aria-readonly="true"`; +- `correct` / `incorrect` carry visually hidden text, so the outcome does not + depend on seeing green and red; +- the tab stop stays on the locked answer. + +## Dialog + +WAI-ARIA modal dialog, rendered through a portal. + +```tsx + setOpen(false)} + title="What should we call you?" + description="Only used to personalise your report." + initialFocusRef={inputRef} + footer={} +> + + +``` + +| Prop | Type | Default | Notes | +| --- | --- | --- | --- | +| `open` | `boolean` | — | Returns `null` when false; nothing is mounted. | +| `onClose` | `() => void` | — | Escape, backdrop and close button. | +| `title` | `ReactNode` | — | Rendered as an `

` and wired via `aria-labelledby`. | +| `description` | `ReactNode` | — | Wired via `aria-describedby`. | +| `footer` | `ReactNode` | — | Right-aligned action row. | +| `size` | `'sm' \| 'md' \| 'lg'` | `'md'` | | +| `initialFocusRef` | `RefObject` | — | Defaults to the first tabbable node. | +| `closeOnEscape` | `boolean` | `true` | | +| `closeOnBackdropClick` | `boolean` | `true` | | +| `showCloseButton` | `boolean` | `true` | | +| `closeLabel` | `string` | `'Close dialog'` | | +| `container` | `HTMLElement \| null` | `document.body` | Portal host. | + +### Keyboard interactions + +| Key | Behaviour | +| --- | --- | +| `Escape` | Closes (document-level capture listener, so it works even if focus has drifted). | +| `Tab` | Moves through the dialog's tabbable nodes; from the **last** one it wraps to the first. | +| `Shift+Tab` | Moves backwards; from the **first** one it wraps to the last. | +| `Tab` with focus outside the panel | Pulled back to the first tabbable node. | +| `Tab` with nothing tabbable inside | Focus is pinned on the panel itself. | + +**a11y guarantees** — `role="dialog"` + `aria-modal="true"`, named by its title. +On open: the previously focused element is recorded, body scroll is locked +(reference-counted, so stacked overlays behave), and focus moves inside. On +close: scroll unlocks and focus returns to the element that opened the dialog — +checked with `isConnected` so a removed trigger does not throw. Backdrop +dismissal is split across `mousedown` (records that the press started on the +backdrop, and `preventDefault()`s the default body-focus) and `click`, so a text +selection dragged out of the panel does not dismiss, and the restored focus is +not immediately blurred. + +## Switch + +```tsx +Dark mode + +``` + +| Prop | Type | Default | +| --- | --- | --- | +| `checked` / `defaultChecked` | `boolean` | `false` | +| `onCheckedChange` | `(checked: boolean) => void` | — | +| `size` | `'sm' \| 'md'` | `'md'` | +| `disabled` | `boolean` | `false` | +| `children` | `ReactNode` | — | + +**a11y guarantees** — real `role="switch"` with `aria-checked` on a native +` + ); +}); diff --git a/frontend/src/components/ui/Separator.module.css b/frontend/src/components/ui/Separator.module.css new file mode 100644 index 0000000..c6b3ccd --- /dev/null +++ b/frontend/src/components/ui/Separator.module.css @@ -0,0 +1,39 @@ +.separator { + flex: 0 0 auto; + border: 0; + margin: 0; + background-color: var(--color-border, #e3e5e8); +} + +.horizontal { + width: 100%; + height: 1px; +} + +.vertical { + width: 1px; + /* Stretch inside a flex row; the explicit height is the fallback. */ + align-self: stretch; + height: auto; + min-height: 1rem; +} + +.withLabel { + display: flex; + align-items: center; + gap: 0.75rem; + width: 100%; + font-size: 0.75rem; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.04em; + color: var(--color-fg-subtle, #8b9098); +} + +.withLabel::before, +.withLabel::after { + content: ''; + flex: 1 1 auto; + height: 1px; + background-color: var(--color-border, #e3e5e8); +} diff --git a/frontend/src/components/ui/Separator.tsx b/frontend/src/components/ui/Separator.tsx new file mode 100644 index 0000000..d3665f5 --- /dev/null +++ b/frontend/src/components/ui/Separator.tsx @@ -0,0 +1,49 @@ +import { forwardRef } from 'react'; +import type { HTMLAttributes, ReactNode } from 'react'; +import { cx } from './cx'; +import styles from './Separator.module.css'; + +export interface SeparatorProps extends Omit, 'children' | 'role'> { + orientation?: 'horizontal' | 'vertical'; + /** + * Default true. A purely visual rule is `role="none"` so it does not add a + * meaningless stop to screen-reader navigation. Set false when the line + * genuinely separates groups of content. + */ + decorative?: boolean; + /** Text rendered inside the rule, e.g. "or". Forces a meaningful separator. */ + label?: ReactNode; +} + +export const Separator = forwardRef(function Separator( + { orientation = 'horizontal', decorative = true, label, className, ...rest }, + ref, +) { + if (label !== undefined) { + return ( +
+ {label} +
+ ); + } + + return ( +
+ ); +}); diff --git a/frontend/src/components/ui/Skeleton.module.css b/frontend/src/components/ui/Skeleton.module.css new file mode 100644 index 0000000..ac841cb --- /dev/null +++ b/frontend/src/components/ui/Skeleton.module.css @@ -0,0 +1,45 @@ +.skeleton { + display: block; + flex: 0 0 auto; + background-color: var(--color-surface-2, #f4f5f7); + background-image: linear-gradient( + 90deg, + transparent 0%, + color-mix(in srgb, var(--color-fg, #15171a) 7%, transparent) 50%, + transparent 100% + ); + background-size: 200% 100%; + background-repeat: no-repeat; + animation: skeletonShimmer 1.4s ease-in-out infinite; +} + +.text { + height: 0.75em; + border-radius: var(--radius-sm, 6px); +} + +.rect { + border-radius: var(--radius-md, 10px); +} + +.circle { + border-radius: var(--radius-full, 999px); +} + +@keyframes skeletonShimmer { + from { + background-position: 150% 0; + } + to { + background-position: -50% 0; + } +} + +/* A travelling shimmer is exactly the kind of looping motion reduced-motion + users ask us to stop; fall back to a static block. */ +@media (prefers-reduced-motion: reduce) { + .skeleton { + animation: none; + background-image: none; + } +} diff --git a/frontend/src/components/ui/Skeleton.tsx b/frontend/src/components/ui/Skeleton.tsx new file mode 100644 index 0000000..8232e8f --- /dev/null +++ b/frontend/src/components/ui/Skeleton.tsx @@ -0,0 +1,65 @@ +import { forwardRef } from 'react'; +import type { HTMLAttributes } from 'react'; +import { cx } from './cx'; +import styles from './Skeleton.module.css'; + +export interface SkeletonProps extends Omit, 'children'> { + variant?: 'text' | 'rect' | 'circle'; + width?: number | string; + height?: number | string; + /** Number of stacked lines for `variant="text"`. Default 1. */ + lines?: number; +} + +function toCssSize(value: number | string | undefined): string | undefined { + if (value === undefined) return undefined; + return typeof value === 'number' ? `${value}px` : value; +} + +/** + * Loading placeholder. Always `aria-hidden`: a shimmering box has no meaning + * to a screen reader, and announcing a dozen of them is noise. Announce the + * loading state once, on the region that owns it (`aria-busy`, or a + * `role="status"` message). + */ +export const Skeleton = forwardRef(function Skeleton( + { variant = 'text', width, height, lines = 1, className, style, ...rest }, + ref, +) { + const resolvedStyle = { + width: toCssSize(width) ?? (variant === 'text' ? '100%' : undefined), + height: toCssSize(height), + ...style, + }; + + if (variant === 'text' && lines > 1) { + return ( +
+ ); +} + +function radios() { + return screen.getAllByRole('radio'); +} + +function tabIndexes() { + return radios().map((radio) => radio.tabIndex); +} + +describe('RadioGroup — structure', () => { + it('exposes a radiogroup with an accessible name and one radio per option', () => { + render(); + const group = screen.getByRole('radiogroup', { name: 'Answer options' }); + expect(group).toHaveAttribute('aria-orientation', 'vertical'); + expect(radios()).toHaveLength(OPTIONS.length); + for (const radio of radios()) { + expect(radio).toHaveAttribute('aria-checked', 'false'); + } + }); +}); + +describe('RadioGroup — roving tabindex', () => { + it('exposes exactly one tab stop, on the first option when nothing is selected', () => { + render(); + expect(tabIndexes()).toEqual([0, -1, -1, -1]); + }); + + it('moves the single tab stop onto the selected option', () => { + render(); + expect(tabIndexes()).toEqual([-1, -1, 0, -1]); + }); + + it('keeps exactly one tab stop after the selection changes', async () => { + const user = userEvent.setup(); + render(); + await user.click(screen.getByRole('radio', { name: /Aluminium/ })); + expect(tabIndexes()).toEqual([-1, 0, -1, -1]); + expect(tabIndexes().filter((index) => index === 0)).toHaveLength(1); + }); + + it('is a single Tab stop: Tab enters the group once and leaves it', async () => { + const user = userEvent.setup(); + render(); + + screen.getByRole('button', { name: 'before' }).focus(); + await user.tab(); + expect(screen.getByRole('radio', { name: /Steel/ })).toHaveFocus(); + + await user.tab(); + expect(screen.getByRole('button', { name: 'after' })).toHaveFocus(); + }); +}); + +describe('RadioGroup — arrow keys move AND select', () => { + it('ArrowDown moves focus to the next option and selects it', async () => { + const user = userEvent.setup(); + const onValueChange = vi.fn(); + render(); + + radios()[0].focus(); + await user.keyboard('{ArrowDown}'); + + expect(radios()[1]).toHaveFocus(); + expect(radios()[1]).toHaveAttribute('aria-checked', 'true'); + expect(radios()[0]).toHaveAttribute('aria-checked', 'false'); + expect(onValueChange).toHaveBeenCalledWith('Aluminium'); + }); + + it('ArrowRight behaves like ArrowDown', async () => { + const user = userEvent.setup(); + render(); + + radios()[0].focus(); + await user.keyboard('{ArrowRight}'); + + expect(radios()[1]).toHaveFocus(); + expect(radios()[1]).toHaveAttribute('aria-checked', 'true'); + }); + + it('ArrowUp and ArrowLeft move backwards and select', async () => { + const user = userEvent.setup(); + render(); + + radios()[2].focus(); + await user.keyboard('{ArrowUp}'); + expect(radios()[1]).toHaveFocus(); + expect(radios()[1]).toHaveAttribute('aria-checked', 'true'); + + await user.keyboard('{ArrowLeft}'); + expect(radios()[0]).toHaveFocus(); + expect(radios()[0]).toHaveAttribute('aria-checked', 'true'); + }); + + it('wraps from the last option to the first and back', async () => { + const user = userEvent.setup(); + render(); + + radios()[3].focus(); + await user.keyboard('{ArrowDown}'); + expect(radios()[0]).toHaveFocus(); + expect(radios()[0]).toHaveAttribute('aria-checked', 'true'); + + await user.keyboard('{ArrowUp}'); + expect(radios()[3]).toHaveFocus(); + expect(radios()[3]).toHaveAttribute('aria-checked', 'true'); + }); + + it('Home and End jump to the first and last option and select them', async () => { + const user = userEvent.setup(); + render(); + + radios()[1].focus(); + await user.keyboard('{End}'); + expect(radios()[3]).toHaveFocus(); + expect(radios()[3]).toHaveAttribute('aria-checked', 'true'); + + await user.keyboard('{Home}'); + expect(radios()[0]).toHaveFocus(); + expect(radios()[0]).toHaveAttribute('aria-checked', 'true'); + }); + + it('Space selects the focused option without moving focus', async () => { + const user = userEvent.setup(); + render(); + + radios()[2].focus(); + await user.keyboard(' '); + + expect(radios()[2]).toHaveFocus(); + expect(radios()[2]).toHaveAttribute('aria-checked', 'true'); + }); + + it('ignores arrow keys combined with a modifier so browser shortcuts still work', async () => { + const user = userEvent.setup(); + render(); + + radios()[0].focus(); + await user.keyboard('{Alt>}{ArrowDown}{/Alt}'); + + expect(radios()[0]).toHaveFocus(); + expect(radios()[0]).toHaveAttribute('aria-checked', 'true'); + }); +}); + +describe('RadioGroup — readOnly review mode', () => { + it('never uses the disabled attribute, so revealed answers stay in the a11y tree', () => { + render( + + + Copper + + + Aluminium + + , + ); + + const all = radios(); + expect(all).toHaveLength(2); + for (const radio of all) { + expect(radio).not.toBeDisabled(); + expect(radio).not.toHaveAttribute('disabled'); + expect(radio).toHaveAttribute('aria-disabled', 'true'); + } + // The revealed state is announced, not conveyed by colour alone. + expect(screen.getByRole('radio', { name: /Aluminium/ })).toHaveAccessibleName( + /Correct answer/, + ); + expect(screen.getByRole('radio', { name: /Copper/ })).toHaveAccessibleName( + /Incorrect answer/, + ); + }); + + it('marks the group aria-readonly', () => { + render(); + expect(screen.getByRole('radiogroup')).toHaveAttribute('aria-readonly', 'true'); + }); + + it('keeps every option focusable and reachable with the arrow keys', async () => { + const user = userEvent.setup(); + render(); + + radios()[2].focus(); + expect(radios()[2]).toHaveFocus(); + + await user.keyboard('{ArrowDown}'); + expect(radios()[3]).toHaveFocus(); + + await user.keyboard('{Home}'); + expect(radios()[0]).toHaveFocus(); + }); + + it('does not change the answer in review mode', async () => { + const user = userEvent.setup(); + const onValueChange = vi.fn(); + render(); + + radios()[2].focus(); + await user.keyboard('{ArrowDown}'); + await user.click(radios()[0]); + + expect(onValueChange).not.toHaveBeenCalled(); + expect(radios()[2]).toHaveAttribute('aria-checked', 'true'); + expect(radios()[0]).toHaveAttribute('aria-checked', 'false'); + // The tab stop stays on the locked answer. + expect(tabIndexes()).toEqual([-1, -1, 0, -1]); + }); +}); + +describe('RadioGroup — per-option disabled', () => { + it('uses aria-disabled and refuses selection, but stays focusable', async () => { + const user = userEvent.setup(); + const onValueChange = vi.fn(); + render( + + A + + B + + , + ); + + const [, second] = radios(); + expect(second).toHaveAttribute('aria-disabled', 'true'); + expect(second).not.toBeDisabled(); + + await user.click(second); + expect(onValueChange).not.toHaveBeenCalled(); + expect(second).toHaveAttribute('aria-checked', 'false'); + }); +}); + +describe('RadioGroup — uncontrolled usage', () => { + it('tracks its own value and still reports it through onValueChange', async () => { + const user = userEvent.setup(); + const onValueChange = vi.fn(); + render( + + {OPTIONS.map((option) => ( + + {option} + + ))} + , + ); + + expect(tabIndexes()).toEqual([0, -1, -1, -1]); + radios()[0].focus(); + await user.keyboard('{ArrowDown}'); + + expect(onValueChange).toHaveBeenCalledWith('Aluminium'); + expect(radios()[1]).toHaveAttribute('aria-checked', 'true'); + expect(tabIndexes()).toEqual([-1, 0, -1, -1]); + }); + + it('submits through a hidden input when given a name', () => { + render( + + {OPTIONS.map((option) => ( + + {option} + + ))} + , + ); + const hidden = document.querySelector('input[name="answer"]'); + expect(hidden).toHaveValue('Steel'); + }); +}); diff --git a/frontend/src/components/ui/__tests__/primitives.test.tsx b/frontend/src/components/ui/__tests__/primitives.test.tsx new file mode 100644 index 0000000..5d5ac19 --- /dev/null +++ b/frontend/src/components/ui/__tests__/primitives.test.tsx @@ -0,0 +1,456 @@ +import { describe, expect, it, vi } from 'vitest'; +import { act, fireEvent, render, screen } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; +import { Badge } from '../Badge'; +import { Button } from '../Button'; +import { EmptyState } from '../EmptyState'; +import { IconButton } from '../IconButton'; +import { ProgressBar, ProgressRing } from '../Progress'; +import { Separator } from '../Separator'; +import { Skeleton } from '../Skeleton'; +import { Spinner } from '../Spinner'; +import { Switch } from '../Switch'; +import { Tab, TabList, TabPanel, Tabs } from '../Tabs'; +import { Toast, ToastProvider } from '../Toast'; +import { useToast } from '../useToast'; +import { VisuallyHidden } from '../VisuallyHidden'; + +describe('Button', () => { + it('merges className after its own classes', () => { + render(); + expect(screen.getByRole('button', { name: 'Go' }).className).toMatch(/custom$/); + }); + + it('stays focusable while loading and swallows activation', async () => { + const user = userEvent.setup(); + const onClick = vi.fn(); + render( + , + ); + + const button = screen.getByRole('button'); + expect(button).toHaveAttribute('aria-busy', 'true'); + expect(button).toHaveAttribute('aria-disabled', 'true'); + // Crucially NOT the disabled attribute, which would drop the control out + // of the tab order mid-request. + expect(button).not.toBeDisabled(); + + button.focus(); + expect(button).toHaveFocus(); + + await user.click(button); + expect(onClick).not.toHaveBeenCalled(); + expect(button).toHaveAccessibleName(/Saving/); + }); + + it('uses the real disabled attribute when explicitly disabled', () => { + render(); + expect(screen.getByRole('button')).toBeDisabled(); + }); + + it('names an icon-only button from aria-label', () => { + render( + , + ); + expect(screen.getByRole('button', { name: 'Bookmark question' })).toBeInTheDocument(); + }); +}); + +describe('IconButton', () => { + it('requires and applies an accessible name', async () => { + const user = userEvent.setup(); + const onClick = vi.fn(); + render(x} onClick={onClick} />); + + await user.click(screen.getByRole('button', { name: 'Close' })); + expect(onClick).toHaveBeenCalledTimes(1); + }); +}); + +describe('Switch', () => { + it('is a switch with the correct checked state', () => { + render(Dark mode); + expect(screen.getByRole('switch', { name: 'Dark mode' })).toBeChecked(); + }); + + it('toggles exactly once per Space press', async () => { + const user = userEvent.setup(); + const onCheckedChange = vi.fn(); + render(Dark mode); + + const control = screen.getByRole('switch'); + control.focus(); + await user.keyboard(' '); + + expect(onCheckedChange).toHaveBeenCalledTimes(1); + expect(onCheckedChange).toHaveBeenLastCalledWith(true); + expect(control).toHaveAttribute('aria-checked', 'true'); + }); + + it('toggles exactly once per Enter press', async () => { + const user = userEvent.setup(); + const onCheckedChange = vi.fn(); + render(Dark mode); + + screen.getByRole('switch').focus(); + await user.keyboard('{Enter}'); + + expect(onCheckedChange).toHaveBeenCalledTimes(1); + expect(screen.getByRole('switch')).toHaveAttribute('aria-checked', 'true'); + }); + + it('honours a controlled value', async () => { + const user = userEvent.setup(); + const onCheckedChange = vi.fn(); + render( + + Dark mode + , + ); + + await user.click(screen.getByRole('switch')); + expect(onCheckedChange).toHaveBeenCalledWith(true); + expect(screen.getByRole('switch')).toHaveAttribute('aria-checked', 'false'); + }); + + it('refuses activation while aria-disabled but stays focusable', async () => { + const user = userEvent.setup(); + const onCheckedChange = vi.fn(); + render( + + Dark mode + , + ); + + const control = screen.getByRole('switch'); + expect(control).toHaveAttribute('aria-disabled', 'true'); + control.focus(); + expect(control).toHaveFocus(); + + await user.click(control); + expect(onCheckedChange).not.toHaveBeenCalled(); + }); +}); + +function TabsFixture() { + return ( + + + All + Flagged + Wrong + + All bookmarks + Flagged bookmarks + Wrong answers + + ); +} + +describe('Tabs', () => { + it('wires tablist, tab and tabpanel with aria-selected and aria-controls', () => { + render(); + + const list = screen.getByRole('tablist', { name: 'Bookmark filters' }); + expect(list).toHaveAttribute('aria-orientation', 'horizontal'); + + const tabs = screen.getAllByRole('tab'); + expect(tabs).toHaveLength(3); + expect(tabs[0]).toHaveAttribute('aria-selected', 'true'); + expect(tabs[1]).toHaveAttribute('aria-selected', 'false'); + + const panel = screen.getByRole('tabpanel'); + expect(tabs[0]).toHaveAttribute('aria-controls', panel.id); + expect(panel).toHaveAttribute('aria-labelledby', tabs[0].id); + expect(panel).toHaveAccessibleName('All'); + }); + + it('exposes a single tab stop via roving tabindex', () => { + render(); + expect(screen.getAllByRole('tab').map((tab) => tab.tabIndex)).toEqual([0, -1, -1]); + }); + + it('moves and activates with ArrowRight/ArrowLeft, Home and End', async () => { + const user = userEvent.setup(); + render(); + const tabs = screen.getAllByRole('tab'); + + tabs[0].focus(); + await user.keyboard('{ArrowRight}'); + expect(tabs[1]).toHaveFocus(); + expect(tabs[1]).toHaveAttribute('aria-selected', 'true'); + expect(screen.getByRole('tabpanel')).toHaveTextContent('Flagged bookmarks'); + + await user.keyboard('{End}'); + expect(tabs[2]).toHaveFocus(); + expect(tabs[2]).toHaveAttribute('aria-selected', 'true'); + + await user.keyboard('{ArrowRight}'); + expect(tabs[0]).toHaveFocus(); + + await user.keyboard('{ArrowLeft}'); + expect(tabs[2]).toHaveFocus(); + + await user.keyboard('{Home}'); + expect(tabs[0]).toHaveFocus(); + expect(tabs[0]).toHaveAttribute('aria-selected', 'true'); + }); + + it('only moves focus in manual activation mode', async () => { + const user = userEvent.setup(); + render( + + + All + Flagged + + All + Flagged + , + ); + + const tabs = screen.getAllByRole('tab'); + tabs[0].focus(); + await user.keyboard('{ArrowRight}'); + + expect(tabs[1]).toHaveFocus(); + expect(tabs[1]).toHaveAttribute('aria-selected', 'false'); + + await user.keyboard('{Enter}'); + expect(tabs[1]).toHaveAttribute('aria-selected', 'true'); + }); + + it('skips aria-disabled tabs during keyboard navigation', async () => { + const user = userEvent.setup(); + render( + + + A + + B + + C + + A + B + C + , + ); + + const tabs = screen.getAllByRole('tab'); + tabs[0].focus(); + await user.keyboard('{ArrowRight}'); + + expect(tabs[2]).toHaveFocus(); + expect(tabs[1]).toHaveAttribute('aria-disabled', 'true'); + expect(tabs[1]).not.toBeDisabled(); + }); +}); + +describe('ProgressBar / ProgressRing', () => { + it('exposes progressbar semantics and a text alternative', () => { + render(); + + const bar = screen.getByRole('progressbar', { name: 'Chapter progress' }); + expect(bar).toHaveAttribute('aria-valuenow', '30'); + expect(bar).toHaveAttribute('aria-valuemin', '0'); + expect(bar).toHaveAttribute('aria-valuemax', '100'); + expect(bar).toHaveAttribute('aria-valuetext', '30%'); + }); + + it('reports "n of max" when the range is not a percentage', () => { + render(); + expect(screen.getByRole('progressbar')).toHaveAttribute('aria-valuetext', '12 of 40'); + }); + + it('drops aria-valuenow when indeterminate', () => { + render(); + const bar = screen.getByRole('progressbar'); + expect(bar).not.toHaveAttribute('aria-valuenow'); + expect(bar).toHaveAttribute('aria-valuetext', 'In progress'); + }); + + it('clamps out-of-range values instead of overflowing', () => { + render(); + expect(screen.getByRole('progressbar', { name: 'Score' })).toHaveAttribute( + 'aria-valuenow', + '140', + ); + }); + + it('renders ring centre content without adding it to the a11y tree', () => { + render( + + 82% + , + ); + expect(screen.getByRole('progressbar')).toHaveAttribute('aria-valuetext', '82%'); + }); +}); + +describe('Badge, Card, Skeleton, Spinner, Separator, EmptyState, VisuallyHidden', () => { + it('prefixes a badge with screen-reader-only context', () => { + render(); + expect(screen.getByText('Status:', { exact: false })).toBeInTheDocument(); + }); + + it('hides skeletons from assistive tech', () => { + const { container } = render(); + expect(container.firstElementChild).toHaveAttribute('aria-hidden', 'true'); + }); + + it('announces a labelled spinner and hides an unlabelled one', () => { + const { rerender } = render(); + expect(screen.getByRole('status')).toHaveTextContent('Loading questions'); + + rerender(); + expect(screen.queryByRole('status')).not.toBeInTheDocument(); + }); + + it('keeps a decorative separator out of the a11y tree', () => { + const { rerender, container } = render(); + expect(container.querySelector('[role="none"]')).toBeInTheDocument(); + + rerender(); + const separator = screen.getByRole('separator'); + expect(separator).toHaveAttribute('aria-orientation', 'vertical'); + }); + + it('renders an empty state heading at the requested level', () => { + render(); + expect(screen.getByRole('heading', { level: 2, name: 'No bookmarks yet' })).toBeInTheDocument(); + }); + + it('keeps visually hidden text in the a11y tree', () => { + render(Correct answer); + expect(screen.getByText('Correct answer')).toBeInTheDocument(); + }); +}); + +function ToastTrigger() { + const { toast } = useToast(); + return ( + + ); +} + +describe('Toast', () => { + it('renders in a polite live region', async () => { + const user = userEvent.setup(); + render( + + + , + ); + + await user.click(screen.getByRole('button', { name: 'Notify' })); + + const region = screen.getByRole('status'); + expect(region).toHaveAttribute('aria-live', 'polite'); + expect(region).toHaveTextContent('Saved'); + expect(region).toHaveTextContent('Attempt stored'); + }); + + it('can be dismissed with its close button', async () => { + const user = userEvent.setup(); + render( + + + , + ); + + await user.click(screen.getByRole('button', { name: 'Notify' })); + await user.click(screen.getByRole('button', { name: 'Dismiss notification' })); + + expect(screen.getByRole('status')).toBeEmptyDOMElement(); + }); + + // fireEvent rather than userEvent: user-event's own internal delays + // deadlock against fake timers, and this test is specifically about the + // auto-dismiss clock. + it('auto-dismisses after its duration', () => { + vi.useFakeTimers(); + try { + render( + + + , + ); + + fireEvent.click(screen.getByRole('button', { name: 'Notify' })); + expect(screen.getByRole('status')).toHaveTextContent('Saved'); + + act(() => vi.advanceTimersByTime(1200)); + expect(screen.getByRole('status')).toBeEmptyDOMElement(); + } finally { + vi.useRealTimers(); + } + }); + + it('pauses the auto-dismiss clock while hovered, and resumes on leave', () => { + vi.useFakeTimers(); + try { + render( + + + , + ); + + fireEvent.click(screen.getByRole('button', { name: 'Notify' })); + const toast = screen.getByRole('status').firstElementChild as HTMLElement; + + fireEvent.mouseOver(toast); + act(() => vi.advanceTimersByTime(5000)); + expect(screen.getByRole('status')).toHaveTextContent('Saved'); + + fireEvent.mouseOut(toast); + act(() => vi.advanceTimersByTime(1500)); + expect(screen.getByRole('status')).toBeEmptyDOMElement(); + } finally { + vi.useRealTimers(); + } + }); + + it('pauses the auto-dismiss clock while focus is inside the toast', () => { + vi.useFakeTimers(); + try { + render( + + + , + ); + + fireEvent.click(screen.getByRole('button', { name: 'Notify' })); + const dismiss = screen.getByRole('button', { name: 'Dismiss notification' }); + + // Tabbing to the dismiss button must not let the toast vanish + // mid-reach (WCAG 2.2.1 Timing Adjustable). + fireEvent.focus(dismiss); + act(() => vi.advanceTimersByTime(5000)); + expect(screen.getByRole('status')).toHaveTextContent('Saved'); + + fireEvent.blur(dismiss); + act(() => vi.advanceTimersByTime(1500)); + expect(screen.getByRole('status')).toBeEmptyDOMElement(); + } finally { + vi.useRealTimers(); + } + }); + + it('keeps a sticky toast until it is dismissed', () => { + vi.useFakeTimers(); + try { + render(); + vi.advanceTimersByTime(60_000); + expect(screen.getByText('Offline')).toBeInTheDocument(); + } finally { + vi.useRealTimers(); + } + }); +}); diff --git a/frontend/src/components/ui/compose-refs.ts b/frontend/src/components/ui/compose-refs.ts new file mode 100644 index 0000000..31a9fef --- /dev/null +++ b/frontend/src/components/ui/compose-refs.ts @@ -0,0 +1,33 @@ +import { useCallback } from 'react'; +import type { Ref, RefCallback, RefObject } from 'react'; + +function assignRef(ref: Ref | undefined, node: T | null): void { + if (!ref) return; + if (typeof ref === 'function') { + ref(node); + return; + } + // `RefObject.current` is readonly in the public types but React itself + // writes through it; this is the standard escape hatch. + (ref as { current: T | null }).current = node; +} + +/** + * Lets a component keep its own internal ref (needed for DOM measurement or + * focus management) while still honouring a forwarded ref. + * + * The `Ref` name suffixes are load-bearing: `react-hooks/immutability` uses + * them to recognise these arguments as refs rather than plain props. + */ +export function useComposedRef( + forwardedRef: Ref | undefined, + localRef: RefObject, +): RefCallback { + return useCallback( + (node: T | null) => { + localRef.current = node; + assignRef(forwardedRef, node); + }, + [forwardedRef, localRef], + ); +} diff --git a/frontend/src/components/ui/cx.ts b/frontend/src/components/ui/cx.ts new file mode 100644 index 0000000..ce74c5f --- /dev/null +++ b/frontend/src/components/ui/cx.ts @@ -0,0 +1,15 @@ +/** + * Minimal class-name joiner. Every primitive in this folder takes a + * `className` and merges it *after* its own classes so consumer styles win + * at equal specificity. + */ +export type ClassValue = string | false | null | undefined; + +export function cx(...values: ClassValue[]): string { + let out = ''; + for (const value of values) { + if (!value) continue; + out = out ? `${out} ${value}` : value; + } + return out; +} diff --git a/frontend/src/components/ui/focusable.ts b/frontend/src/components/ui/focusable.ts new file mode 100644 index 0000000..b75ba96 --- /dev/null +++ b/frontend/src/components/ui/focusable.ts @@ -0,0 +1,41 @@ +/** + * Selector for things the platform considers tabbable. Deliberately avoids + * `offsetParent`-based visibility filtering: jsdom has no layout engine, so + * that check would report every element as hidden and silently disable the + * dialog focus trap in tests. + */ +const FOCUSABLE_SELECTOR = [ + 'a[href]', + 'area[href]', + 'button:not([disabled])', + 'input:not([disabled]):not([type="hidden"])', + 'select:not([disabled])', + 'textarea:not([disabled])', + 'iframe', + 'object', + 'embed', + 'summary', + 'audio[controls]', + 'video[controls]', + '[contenteditable]:not([contenteditable="false"])', + '[tabindex]', +].join(','); + +function isHidden(element: HTMLElement): boolean { + let node: HTMLElement | null = element; + while (node) { + if (node.hasAttribute('hidden')) return true; + if (node.getAttribute('aria-hidden') === 'true') return true; + if (node.hasAttribute('inert')) return true; + node = node.parentElement; + } + return false; +} + +/** Tabbable descendants of `root`, in document order. */ +export function getFocusableElements(root: HTMLElement | null): HTMLElement[] { + if (!root) return []; + return Array.from(root.querySelectorAll(FOCUSABLE_SELECTOR)).filter( + (element) => element.tabIndex >= 0 && !isHidden(element), + ); +} diff --git a/frontend/src/components/ui/index.ts b/frontend/src/components/ui/index.ts new file mode 100644 index 0000000..8b5f06a --- /dev/null +++ b/frontend/src/components/ui/index.ts @@ -0,0 +1,83 @@ +/** + * Accessible UI primitives. + * + * Every interactive primitive here guarantees: a visible `:focus-visible` + * ring, a >=44x44px touch target, `prefers-reduced-motion` support, a + * `className` passthrough that merges after the component's own classes, a + * forwarded ref to the underlying element, and the ARIA pattern named in its + * props docs. See ./README.md. + */ + +export { Badge } from './Badge'; +export type { BadgeProps, BadgeTone } from './Badge'; + +export { Button } from './Button'; +export type { ButtonBaseProps, ButtonProps, ButtonSize, ButtonVariant } from './Button'; + +export { Card } from './Card'; +export type { CardPadding, CardProps, CardVariant } from './Card'; + +export { Dialog } from './Dialog'; +export type { DialogProps, DialogSize } from './Dialog'; + +export { EmptyState } from './EmptyState'; +export type { EmptyStateProps } from './EmptyState'; + +export { IconButton } from './IconButton'; +export type { IconButtonProps } from './IconButton'; + +export { ProgressBar, ProgressRing } from './Progress'; +export type { + ProgressBarBaseProps, + ProgressBarProps, + ProgressRingBaseProps, + ProgressRingProps, + ProgressTone, +} from './Progress'; + +export { Radio, RadioGroup } from './RadioGroup'; +export type { + RadioGroupBaseProps, + RadioGroupProps, + RadioProps, + RadioVisualState, +} from './RadioGroup'; + +export { Separator } from './Separator'; +export type { SeparatorProps } from './Separator'; + +export { Skeleton } from './Skeleton'; +export type { SkeletonProps } from './Skeleton'; + +export { Spinner } from './Spinner'; +export type { SpinnerProps } from './Spinner'; + +export { Switch } from './Switch'; +export type { SwitchBaseProps, SwitchProps } from './Switch'; + +export { Tab, TabList, TabPanel, Tabs } from './Tabs'; +export type { + TabListBaseProps, + TabListProps, + TabPanelProps, + TabProps, + TabsActivationMode, + TabsBaseProps, + TabsOrientation, + TabsProps, +} from './Tabs'; +export { tabId, tabPanelId } from './tab-ids'; + +export { Toast, ToastProvider } from './Toast'; +export type { ToastPlacement, ToastProps, ToastProviderProps } from './Toast'; +export type { ToastOptions, ToastRecord, ToastTone, ToastContextValue } from './toast-context'; +export { useToast } from './useToast'; + +export { VisuallyHidden } from './VisuallyHidden'; +export type { VisuallyHiddenProps } from './VisuallyHidden'; + +export { cx } from './cx'; +export type { ClassValue } from './cx'; +export { getFocusableElements } from './focusable'; +export { lockBodyScroll, unlockBodyScroll } from './scroll-lock'; +export { useComposedRef } from './compose-refs'; diff --git a/frontend/src/components/ui/scroll-lock.ts b/frontend/src/components/ui/scroll-lock.ts new file mode 100644 index 0000000..4837d69 --- /dev/null +++ b/frontend/src/components/ui/scroll-lock.ts @@ -0,0 +1,33 @@ +let lockCount = 0; +let previousOverflow = ''; +let previousPaddingRight = ''; + +/** + * Reference-counted body scroll lock so nested/stacked overlays do not + * restore the page scroll while another overlay is still open. + */ +export function lockBodyScroll(): void { + if (typeof document === 'undefined') return; + lockCount += 1; + if (lockCount > 1) return; + + const { body, documentElement } = document; + previousOverflow = body.style.overflow; + previousPaddingRight = body.style.paddingRight; + + const scrollbarWidth = window.innerWidth - documentElement.clientWidth; + body.style.overflow = 'hidden'; + if (scrollbarWidth > 0) { + body.style.paddingRight = `${scrollbarWidth}px`; + } +} + +export function unlockBodyScroll(): void { + if (typeof document === 'undefined') return; + if (lockCount === 0) return; + lockCount -= 1; + if (lockCount > 0) return; + + document.body.style.overflow = previousOverflow; + document.body.style.paddingRight = previousPaddingRight; +} diff --git a/frontend/src/components/ui/tab-ids.ts b/frontend/src/components/ui/tab-ids.ts new file mode 100644 index 0000000..7af6c54 --- /dev/null +++ b/frontend/src/components/ui/tab-ids.ts @@ -0,0 +1,16 @@ +/** + * `id` wiring for the tablist/tab/tabpanel relationship. Tab values are + * arbitrary strings (slugs, labels, ids from the API), so they are sanitised + * before being used as HTML ids. + */ +function slug(value: string): string { + return value.replace(/[^a-zA-Z0-9_-]/g, '_'); +} + +export function tabId(baseId: string, value: string): string { + return `${baseId}-tab-${slug(value)}`; +} + +export function tabPanelId(baseId: string, value: string): string { + return `${baseId}-panel-${slug(value)}`; +} diff --git a/frontend/src/components/ui/toast-context.ts b/frontend/src/components/ui/toast-context.ts new file mode 100644 index 0000000..e46d219 --- /dev/null +++ b/frontend/src/components/ui/toast-context.ts @@ -0,0 +1,33 @@ +import { createContext } from 'react'; +import type { ReactNode } from 'react'; + +export type ToastTone = 'neutral' | 'success' | 'warning' | 'danger' | 'info'; + +export interface ToastOptions { + title?: ReactNode; + description?: ReactNode; + tone?: ToastTone; + /** Auto-dismiss delay in ms. `0` or a negative value means "stay until dismissed". */ + duration?: number; + /** Optional action, usually a `Button`. */ + action?: ReactNode; + /** + * `polite` (default) waits for a pause in speech; `assertive` interrupts. + * Reserve `assertive` for errors that block the user. + */ + politeness?: 'polite' | 'assertive'; +} + +export interface ToastRecord extends ToastOptions { + id: string; +} + +export interface ToastContextValue { + toasts: readonly ToastRecord[]; + /** Queues a toast and returns its id. */ + toast: (options: ToastOptions) => string; + dismiss: (id: string) => void; + dismissAll: () => void; +} + +export const ToastContext = createContext(null); diff --git a/frontend/src/components/ui/useToast.ts b/frontend/src/components/ui/useToast.ts new file mode 100644 index 0000000..8c1608b --- /dev/null +++ b/frontend/src/components/ui/useToast.ts @@ -0,0 +1,16 @@ +import { useContext } from 'react'; +import { ToastContext } from './toast-context'; +import type { ToastContextValue } from './toast-context'; + +/** + * Access the toast queue. Throws rather than no-oping when no provider is + * mounted: a silently swallowed notification is a bug that only surfaces in + * production. + */ +export function useToast(): ToastContextValue { + const context = useContext(ToastContext); + if (!context) { + throw new Error('useToast() must be called inside a .'); + } + return context; +} diff --git a/frontend/src/context/UserContext.tsx b/frontend/src/context/UserContext.tsx index 221d1f9..dc8be2e 100644 --- a/frontend/src/context/UserContext.tsx +++ b/frontend/src/context/UserContext.tsx @@ -1,17 +1,14 @@ -import { createContext, useContext, useState } from 'react'; +import { useState } from 'react'; +import { UserContext } from './user-context'; -interface UserContextType { - name: string; - setName: (name: string) => void; -} - -const UserContext = createContext({ name: '', setName: () => {} }); +const STORAGE_KEY = 'userName'; export function UserProvider({ children }: { children: React.ReactNode }) { - const [name, setNameState] = useState(() => localStorage.getItem('userName') || ''); + const [name, setNameState] = useState(() => localStorage.getItem(STORAGE_KEY) || ''); const setName = (n: string) => { - localStorage.setItem('userName', n); + if (n) localStorage.setItem(STORAGE_KEY, n); + else localStorage.removeItem(STORAGE_KEY); setNameState(n); }; @@ -21,7 +18,3 @@ export function UserProvider({ children }: { children: React.ReactNode }) { ); } - -export function useUser() { - return useContext(UserContext); -} diff --git a/frontend/src/context/user-context.ts b/frontend/src/context/user-context.ts new file mode 100644 index 0000000..71304e7 --- /dev/null +++ b/frontend/src/context/user-context.ts @@ -0,0 +1,15 @@ +import { createContext, useContext } from 'react'; + +export interface UserContextType { + name: string; + setName: (name: string) => void; +} + +export const UserContext = createContext({ + name: '', + setName: () => {}, +}); + +export function useUser() { + return useContext(UserContext); +} diff --git a/frontend/src/data/__tests__/examBlueprint.test.ts b/frontend/src/data/__tests__/examBlueprint.test.ts new file mode 100644 index 0000000..dcf5df0 --- /dev/null +++ b/frontend/src/data/__tests__/examBlueprint.test.ts @@ -0,0 +1,276 @@ +import { describe, it, expect } from 'vitest'; +import { + NO_SUBCHAPTER_TAGS, + QUESTIONS_PER_CHAPTER, + WEIGHTING_RULE, + describeShortfall, + examBlueprint, + examFormat, + formatUnverifiedFields, + isFormatFullyVerified, + listUnverifiedFields, + planExam, + readBlueprintValue, + readConfirmed, + readUnverified, + selectionBlueprint, + totalMarks, +} from '../examBlueprint'; +import type { QuestionSupply } from '../examBlueprint'; +import { SUBCHAPTER_COUNT, subchapterCodes, syllabusChapters } from '../syllabus'; + +/** Supply that exactly satisfies the blueprint: every quota met by tagged questions. */ +function exactTaggedSupply(): QuestionSupply { + const supply: Record = {}; + for (const quota of selectionBlueprint.quotas) { + supply[quota.subchapterCode] = quota.questions; + } + return supply; +} + +/** Chapter pools large enough to cover any fallback. */ +function generousChapterSupply(): QuestionSupply { + const supply: Record = {}; + for (const chapter of syllabusChapters) { + supply[chapter.code] = 500; + } + return supply; +} + +describe('exam format provenance', () => { + it('carries the owner-confirmed 100 questions x 1 mark = 100 marks', () => { + expect(readConfirmed(examFormat.questionCount)).toBe(100); + expect(readConfirmed(examFormat.marksPerQuestion)).toBe(1); + expect(totalMarks()).toBe(100); + }); + + it('records a verifiedOn date and a provenance kind on every field', () => { + for (const [key, field] of Object.entries(examFormat)) { + expect(field.status, key).toBe('confirmed'); + expect(field.source.verifiedOn, key).toBe('2026-10-20'); + expect(field.source.kind, key).toBe('project-owner'); + } + }); + + it('carries a null sourceUrl, because no published document states these', () => { + // The official syllabus PDF contains no marking scheme. Citing a URL here + // would manufacture an authority that does not exist, so null is the + // honest value and this test exists to stop a plausible-looking URL being + // added later. + for (const [key, field] of Object.entries(examFormat)) { + expect(field.source.sourceUrl, key).toBeNull(); + } + }); + + it('holds the owner-confirmed exam format', () => { + expect(readConfirmed(examFormat.questionCount)).toBe(100); + expect(readConfirmed(examFormat.marksPerQuestion)).toBe(1); + expect(readConfirmed(examFormat.durationMinutes)).toBe(120); + expect(readConfirmed(examFormat.passMark)).toBe(50); + expect(totalMarks()).toBe(100); + }); + + it('allows 72 seconds per question, not the 27 the old 45-minute default gave', () => { + // Pacing analytics depend on this, and the app shipped 45 minutes against a + // 120-minute exam - a 2.7x error in every per-question time budget. + const seconds = + (readConfirmed(examFormat.durationMinutes) * 60) / + readConfirmed(examFormat.questionCount); + expect(seconds).toBeCloseTo(72, 5); + }); +}); + +describe('unverified-field reporting', () => { + it('reports nothing unverified now that the owner has confirmed all four', () => { + expect(listUnverifiedFields()).toEqual([]); + expect(formatUnverifiedFields()).toBe(''); + expect(isFormatFullyVerified()).toBe(true); + }); + + // The machinery stays tested against a synthetic field rather than a real one. + // Negative marking and per-chapter weights are still unknown, so the next + // field added is likelier to be a guess than a confirmation, and the refusal + // path has to still work when it arrives. + const syntheticUnverified = { + value: 0.25, + status: 'needs-verification', + label: 'negativeMarkPerWrong', + unit: 'marks', + source: { + kind: 'secondary-source', + label: 'Not established', + sourceUrl: null, + verifiedOn: null, + note: 'No source states whether NEC applies negative marking.', + }, + } as const; + + it('still refuses to read an unverified value without acknowledgement', () => { + expect(() => readBlueprintValue(syntheticUnverified)).toThrow(/needs-verification/); + }); + + it('still allows an acknowledged unverified read', () => { + expect( + readUnverified(syntheticUnverified, { + acknowledgeUnverified: true, + reason: 'test: displaying a best guess behind a warning banner', + }), + ).toBe(0.25); + }); +}); + +describe('reading values safely', () => { + it('allows every confirmed value through without ceremony', () => { + expect(readBlueprintValue(examFormat.questionCount)).toBe(100); + expect(readBlueprintValue(examFormat.durationMinutes)).toBe(120); + }); +}); + +describe('selection blueprint weights', () => { + it('has one quota per official sub-chapter', () => { + expect(selectionBlueprint.quotas).toHaveLength(SUBCHAPTER_COUNT); + expect(selectionBlueprint.quotas.map(quota => quota.subchapterCode)).toEqual([ + ...subchapterCodes, + ]); + }); + + it('sums to exactly 100 questions', () => { + const total = selectionBlueprint.quotas.reduce((sum, quota) => sum + quota.questions, 0); + expect(total).toBe(100); + expect(total).toBe(selectionBlueprint.totalQuestions); + expect(total).toBe(readConfirmed(examFormat.questionCount)); + }); + + it('gives every chapter an equal 10-question weight', () => { + for (const chapter of syllabusChapters) { + const chapterTotal = selectionBlueprint.quotas + .filter(quota => quota.chapterCode === chapter.code) + .reduce((sum, quota) => sum + quota.questions, 0); + expect(chapterTotal, chapter.code).toBe(QUESTIONS_PER_CHAPTER); + } + }); + + it('applies the documented largest-remainder tie-break on index', () => { + for (const quota of selectionBlueprint.quotas) { + const expected = quota.subchapterIndex <= 4 ? 2 : 1; + expect(quota.questions, quota.subchapterCode).toBe(expected); + } + }); + + it('ships non-strict with a documented chapter-level fallback', () => { + expect(selectionBlueprint.strictBlueprint).toBe(false); + expect(selectionBlueprint.fallback).toBe('chapter-level-sampling'); + expect(selectionBlueprint.weightingRule).toBe(WEIGHTING_RULE); + expect(selectionBlueprint.notes.length).toBeGreaterThan(0); + }); + + it('is reachable from the top-level blueprint', () => { + expect(examBlueprint.selection).toBe(selectionBlueprint); + expect(examBlueprint.format).toBe(examFormat); + }); +}); + +describe('planExam', () => { + it('builds a 100-question plan from an exactly sufficient tagged supply', () => { + const result = planExam(exactTaggedSupply()); + expect(result.ok).toBe(true); + if (!result.ok) return; + + expect(result.plan.totalQuestions).toBe(100); + expect(result.plan.draws).toHaveLength(SUBCHAPTER_COUNT); + expect(result.plan.approximatedSubchapterCodes).toEqual([]); + expect(result.plan.unknownSupplyCodes).toEqual([]); + const tagged = result.plan.draws.reduce((sum, draw) => sum + draw.fromSubchapterTagged, 0); + expect(tagged).toBe(100); + }); + + it('succeeds under strict mode only when tagged supply covers every quota', () => { + const strict = planExam(exactTaggedSupply(), { strictBlueprint: true }); + expect(strict.ok).toBe(true); + }); + + it('reports all 60 sub-chapters as approximated when nothing is tagged', () => { + const result = planExam(NO_SUBCHAPTER_TAGS, { chapterSupply: generousChapterSupply() }); + expect(result.ok).toBe(true); + if (!result.ok) return; + + expect(result.plan.totalQuestions).toBe(100); + expect(result.plan.approximatedSubchapterCodes).toHaveLength(SUBCHAPTER_COUNT); + expect(result.plan.draws.every(draw => draw.fromSubchapterTagged === 0)).toBe(true); + expect(result.plan.draws.every(draw => draw.approximated)).toBe(true); + }); + + it('fails strictly when nothing is tagged, naming every missing sub-chapter', () => { + const result = planExam(NO_SUBCHAPTER_TAGS, { + strictBlueprint: true, + chapterSupply: generousChapterSupply(), + }); + expect(result.ok).toBe(false); + if (result.ok) return; + + expect(result.report.shortfalls).toHaveLength(SUBCHAPTER_COUNT); + expect(result.report.totalRequested).toBe(100); + expect(result.report.totalPlanned).toBe(0); + expect(result.report.totalMissing).toBe(100); + }); + + it('returns a structured shortfall for a deliberately under-supplied input', () => { + const supply: Record = { ...exactTaggedSupply() }; + // ACtE0301 needs 2, give it 0. ACtE0305 needs 1, give it 0. + supply['ACtE0301'] = 0; + supply['ACtE0305'] = 0; + // Chapter 3's pool can only absorb one of the three missing questions. + const result = planExam(supply, { chapterSupply: { ACtE03: 8 } }); + + expect(result.ok).toBe(false); + if (result.ok) return; + + const byCode = new Map(result.report.shortfalls.map(entry => [entry.subchapterCode, entry])); + expect([...byCode.keys()]).toEqual(['ACtE0301', 'ACtE0305']); + + const first = byCode.get('ACtE0301'); + expect(first?.requested).toBe(2); + expect(first?.availableTagged).toBe(0); + expect(first?.planned).toBe(1); + expect(first?.missing).toBe(1); + expect(first?.chapterCode).toBe('ACtE03'); + + const second = byCode.get('ACtE0305'); + expect(second?.requested).toBe(1); + expect(second?.planned).toBe(0); + expect(second?.missing).toBe(1); + + expect(result.report.totalRequested).toBe(100); + expect(result.report.totalPlanned).toBe(98); + expect(result.report.totalMissing).toBe(2); + expect(describeShortfall(result.report)).toBe( + 'Short 2 of 100 questions across 2 sub-chapters: ACtE0301 (-1), ACtE0305 (-1)', + ); + }); + + it('fails when no chapter fallback pool is supplied either', () => { + const result = planExam(NO_SUBCHAPTER_TAGS); + expect(result.ok).toBe(false); + if (result.ok) return; + expect(result.report.totalMissing).toBe(100); + expect(result.report.strictBlueprint).toBe(false); + }); + + it('flags supply keys that are not official sub-chapter codes', () => { + const supply: Record = { ...exactTaggedSupply(), ACtE0399: 5, 'book-ch3': 9 }; + const result = planExam(supply); + expect(result.ok).toBe(true); + if (!result.ok) return; + expect([...result.plan.unknownSupplyCodes].sort()).toEqual(['ACtE0399', 'book-ch3']); + }); + + it('ignores negative and non-finite supply counts rather than trusting them', () => { + const supply: Record = { ...exactTaggedSupply() }; + supply['AExE0101'] = -5; + supply['AExE0102'] = Number.NaN; + const result = planExam(supply, { chapterSupply: { AExE01: 100 } }); + expect(result.ok).toBe(true); + if (!result.ok) return; + expect([...result.plan.approximatedSubchapterCodes]).toEqual(['AExE0101', 'AExE0102']); + }); +}); diff --git a/frontend/src/data/__tests__/syllabus.test.ts b/frontend/src/data/__tests__/syllabus.test.ts new file mode 100644 index 0000000..12069aa --- /dev/null +++ b/frontend/src/data/__tests__/syllabus.test.ts @@ -0,0 +1,195 @@ +import { describe, it, expect } from 'vitest'; +import { + CHAPTER_COUNT, + SUBCHAPTERS_PER_CHAPTER, + SUBCHAPTER_COUNT, + chapterCodes, + expectedSubchapterCode, + getChapterByBookChapterId, + getChapterByCode, + getChapterByNumber, + getChapterForSubchapter, + getSubchapterByCode, + getSubchaptersForChapter, + isValidChapterCode, + isValidSubchapterCode, + subchapterCodes, + syllabusChapters, + syllabusSubchapters, +} from '../syllabus'; + +/** + * The official chapter code prefixes, in order. Chapters 1-2 are the shared + * electrical/electronics core, 3-9 the Computer Engineering stream, 10 the + * all-streams project chapter. + */ +const EXPECTED_CHAPTER_CODES = [ + 'AExE01', + 'AExE02', + 'ACtE03', + 'ACtE04', + 'ACtE05', + 'ACtE06', + 'ACtE07', + 'ACtE08', + 'ACtE09', + 'AALL10', +] as const; + +describe('syllabus structure (10 x 6 = 60)', () => { + it('declares the structural constants the NEC syllabus uses', () => { + expect(CHAPTER_COUNT).toBe(10); + expect(SUBCHAPTERS_PER_CHAPTER).toBe(6); + expect(SUBCHAPTER_COUNT).toBe(CHAPTER_COUNT * SUBCHAPTERS_PER_CHAPTER); + expect(SUBCHAPTER_COUNT).toBe(60); + }); + + it('has exactly 10 chapters', () => { + expect(syllabusChapters).toHaveLength(CHAPTER_COUNT); + expect(chapterCodes).toHaveLength(CHAPTER_COUNT); + }); + + it('has exactly 6 sub-chapters in every chapter', () => { + for (const chapter of syllabusChapters) { + expect(chapter.subchapters, 'chapter ' + chapter.code).toHaveLength(SUBCHAPTERS_PER_CHAPTER); + } + }); + + it('totals exactly 60 sub-chapters', () => { + expect(syllabusSubchapters).toHaveLength(SUBCHAPTER_COUNT); + expect(subchapterCodes).toHaveLength(SUBCHAPTER_COUNT); + + const summed = syllabusChapters.reduce((total, chapter) => total + chapter.subchapters.length, 0); + expect(summed).toBe(SUBCHAPTER_COUNT); + }); + + it('numbers chapters 1..10 in order', () => { + expect(syllabusChapters.map(chapter => chapter.number)).toEqual([ + 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, + ]); + }); + + it('indexes sub-chapters 1..6 within every chapter', () => { + for (const chapter of syllabusChapters) { + expect(chapter.subchapters.map(sub => sub.index), 'chapter ' + chapter.code).toEqual([ + 1, 2, 3, 4, 5, 6, + ]); + } + }); +}); + +describe('code correctness', () => { + it('uses the official chapter codes in official order', () => { + expect(chapterCodes).toEqual([...EXPECTED_CHAPTER_CODES]); + }); + + it('prefixes every sub-chapter code with its chapter code and a padded index', () => { + for (const chapter of syllabusChapters) { + for (const sub of chapter.subchapters) { + expect(sub.chapterCode).toBe(chapter.code); + expect(sub.chapterNumber).toBe(chapter.number); + expect(sub.code.startsWith(chapter.code)).toBe(true); + expect(sub.code).toBe(expectedSubchapterCode(chapter.code, sub.index)); + expect(sub.code).toHaveLength(chapter.code.length + 2); + } + } + }); + + it('has no duplicate chapter codes', () => { + expect(new Set(chapterCodes).size).toBe(CHAPTER_COUNT); + }); + + it('has no duplicate sub-chapter codes', () => { + expect(new Set(subchapterCodes).size).toBe(SUBCHAPTER_COUNT); + }); + + it('maps each chapter to a distinct book-chN id', () => { + const bookIds = syllabusChapters.map(chapter => chapter.bookChapterId); + expect(bookIds).toEqual([ + 'book-ch1', + 'book-ch2', + 'book-ch3', + 'book-ch4', + 'book-ch5', + 'book-ch6', + 'book-ch7', + 'book-ch8', + 'book-ch9', + 'book-ch10', + ]); + expect(new Set(bookIds).size).toBe(CHAPTER_COUNT); + }); + + it('renders a dotted display code matching chapter.index', () => { + expect(getSubchapterByCode('ACtE0304')?.displayCode).toBe('3.4'); + expect(getSubchapterByCode('AALL1006')?.displayCode).toBe('10.6'); + + for (const sub of syllabusSubchapters) { + expect(sub.displayCode).toBe(String(sub.chapterNumber) + '.' + String(sub.index)); + } + }); + + it('gives every chapter and sub-chapter a non-empty title', () => { + for (const chapter of syllabusChapters) { + expect(chapter.title.trim().length).toBeGreaterThan(0); + for (const sub of chapter.subchapters) { + expect(sub.title.trim().length, sub.code).toBeGreaterThan(0); + } + } + }); +}); + +describe('lookups', () => { + it('finds a chapter by code, number and book id', () => { + expect(getChapterByCode('ACtE07')?.number).toBe(7); + expect(getChapterByNumber(7)?.code).toBe('ACtE07'); + expect(getChapterByBookChapterId('book-ch7')?.code).toBe('ACtE07'); + }); + + it('returns undefined for unknown chapter keys', () => { + expect(getChapterByCode('ACtE99')).toBeUndefined(); + expect(getChapterByNumber(11)).toBeUndefined(); + expect(getChapterByBookChapterId('book-ch11')).toBeUndefined(); + }); + + it('finds a sub-chapter by code', () => { + const sub = getSubchapterByCode('ACtE0402'); + expect(sub?.title).toBe('Computer Arithmetic and Memory System'); + expect(sub?.chapterCode).toBe('ACtE04'); + expect(sub?.index).toBe(2); + expect(getSubchapterByCode('ACtE0407')).toBeUndefined(); + }); + + it('returns a chapter sub-chapter list, empty for unknown chapters', () => { + expect(getSubchaptersForChapter('AExE02')).toHaveLength(6); + expect(getSubchaptersForChapter('nope')).toEqual([]); + }); + + it('round-trips chapter-for-subchapter for all 60 codes', () => { + for (const sub of syllabusSubchapters) { + const chapter = getChapterForSubchapter(sub.code); + expect(chapter?.code, sub.code).toBe(sub.chapterCode); + expect(chapter?.subchapters).toContain(sub); + } + expect(getChapterForSubchapter('AExE0199')).toBeUndefined(); + }); +}); + +describe('guards', () => { + it('accepts all 60 official sub-chapter codes', () => { + for (const code of subchapterCodes) { + expect(isValidSubchapterCode(code), code).toBe(true); + } + }); + + it('rejects anything that is not an official sub-chapter code', () => { + for (const bad of ['', 'ACtE03', 'ACtE0307', 'ACtE0300', 'acte0301', 'AALL1007', '3.1']) { + expect(isValidSubchapterCode(bad), bad).toBe(false); + } + }); + + it('narrows chapter codes too', () => { + expect(isValidChapterCode('AALL10')).toBe(true); + expect(isValidChapterCode('AALL1001')).toBe(false); + }); +}); diff --git a/frontend/src/data/bookChapters.generated.ts b/frontend/src/data/bookChapters.generated.ts index 0a24303..35f00d3 100644 --- a/frontend/src/data/bookChapters.generated.ts +++ b/frontend/src/data/bookChapters.generated.ts @@ -3,14 +3,14 @@ import type { Topic } from './topics'; export const bookChapters: Topic[] = [ - { id: 'book-ch1', name: 'Chapter 1: Basic Electrical & Electronics', shortName: 'Ch1 - Basic Electrical & Electronics', description: 'Ohm\'s Law, circuit analysis, AC/DC circuits and electronic components', questionCount: 587, icon: 'chip' as Topic['icon'], color: '#f59e0b', dataFile: 'books/ch1.json' }, - { id: 'book-ch2', name: 'Chapter 2: Digital Logic & Number Systems', shortName: 'Ch2 - Digital Logic & Number Systems', description: 'Number systems, Boolean algebra, logic gates and digital electronics', questionCount: 746, icon: 'chip' as Topic['icon'], color: '#6366f1', dataFile: 'books/ch2.json' }, - { id: 'book-ch3', name: 'Chapter 3: C / C++ Programming', shortName: 'Ch3 - C / C++ Programming', description: 'C and C++ fundamentals, pointers, data types and OOP concepts', questionCount: 398, icon: 'code' as Topic['icon'], color: '#22c55e', dataFile: 'books/ch3.json' }, - { id: 'book-ch4', name: 'Chapter 4: Operating Systems & DBMS', shortName: 'Ch4 - Operating Systems & DBMS', description: 'OS process management, memory, databases and algorithms', questionCount: 57, icon: 'database' as Topic['icon'], color: '#ec4899', dataFile: 'books/ch4.json' }, + { id: 'book-ch1', name: 'Chapter 1: Basic Electrical & Electronics', shortName: 'Ch1 - Basic Electrical & Electronics', description: 'Ohm\'s Law, circuit analysis, AC/DC circuits and electronic components', questionCount: 525, icon: 'chip' as Topic['icon'], color: '#f59e0b', dataFile: 'books/ch1.json' }, + { id: 'book-ch2', name: 'Chapter 2: Digital Logic & Number Systems', shortName: 'Ch2 - Digital Logic & Number Systems', description: 'Number systems, Boolean algebra, logic gates and digital electronics', questionCount: 332, icon: 'chip' as Topic['icon'], color: '#6366f1', dataFile: 'books/ch2.json' }, + { id: 'book-ch3', name: 'Chapter 3: C / C++ Programming', shortName: 'Ch3 - C / C++ Programming', description: 'C and C++ fundamentals, pointers, data types and OOP concepts', questionCount: 391, icon: 'code' as Topic['icon'], color: '#22c55e', dataFile: 'books/ch3.json' }, + { id: 'book-ch4', name: 'Chapter 4: Computer Organization & Embedded Systems', shortName: 'Ch4 - Computer Organization & Embedded', description: 'CPU architecture, cache, memory hierarchy, RISC/CISC and embedded systems', questionCount: 422, icon: 'cpu' as Topic['icon'], color: '#ec4899', dataFile: 'books/ch4.json' }, { id: 'book-ch5', name: 'Chapter 5: Computer Networks & Security', shortName: 'Ch5 - Computer Networks & Security', description: 'Network protocols, OSI model and network security concepts', questionCount: 69, icon: 'brain' as Topic['icon'], color: '#06b6d4', dataFile: 'books/ch5.json' }, { id: 'book-ch6', name: 'Chapter 6: Theory of Computation and Computer Graphics', shortName: 'Ch6 - Theory of Computation and Computer Graphics', description: 'Finite automata, CFGs, Turing machines, 2D/3D transformations and graphics', questionCount: 64, icon: 'network' as Topic['icon'], color: '#a855f7', dataFile: 'books/ch6.json' }, - { id: 'book-ch7', name: 'Chapter 7: DSA, DBMS and OS', shortName: 'Ch7 - DSA, DBMS and OS', description: 'Data structures, algorithms, database systems and operating systems', questionCount: 69, icon: 'monitor' as Topic['icon'], color: '#f97316', dataFile: 'books/ch7.json' }, - { id: 'book-ch8', name: 'Chapter 8: Software Engineering and Object-Oriented Analysis & Design', shortName: 'Ch8 - Software Engineering and Object-Oriented Analysis & Design', description: 'Software processes, testing, UML, design patterns and OOAD', questionCount: 131, icon: 'calculator' as Topic['icon'], color: '#10b981', dataFile: 'books/ch8.json' }, + { id: 'book-ch7', name: 'Chapter 7: DSA, DBMS and OS', shortName: 'Ch7 - DSA, DBMS and OS', description: 'Data structures, algorithms, database systems and operating systems', questionCount: 68, icon: 'monitor' as Topic['icon'], color: '#f97316', dataFile: 'books/ch7.json' }, + { id: 'book-ch8', name: 'Chapter 8: Software Engineering and Object-Oriented Analysis & Design', shortName: 'Ch8 - Software Engineering and Object-Oriented Analysis & Design', description: 'Software processes, testing, UML, design patterns and OOAD', questionCount: 130, icon: 'calculator' as Topic['icon'], color: '#10b981', dataFile: 'books/ch8.json' }, { id: 'book-ch9', name: 'Chapter 9: AI & Machine Learning', shortName: 'Ch9 - AI & Machine Learning', description: 'Artificial intelligence, neural networks and machine learning concepts', questionCount: 71, icon: 'book' as Topic['icon'], color: '#3b82f6', dataFile: 'books/ch9.json' }, - { id: 'book-ch10', name: 'Chapter 10: Project Planning, Design and Implementation', shortName: 'Ch10 - Project Planning, Design and Implementation', description: 'Engineering drawings, economics, project management and professional practice', questionCount: 242, icon: 'settings' as Topic['icon'], color: '#8b5cf6', dataFile: 'books/ch10.json' }, + { id: 'book-ch10', name: 'Chapter 10: Project Planning, Design and Implementation', shortName: 'Ch10 - Project Planning, Design and Implementation', description: 'Engineering drawings, economics, project management and professional practice', questionCount: 240, icon: 'settings' as Topic['icon'], color: '#8b5cf6', dataFile: 'books/ch10.json' }, ]; diff --git a/frontend/src/data/duplicate-triage.json b/frontend/src/data/duplicate-triage.json new file mode 100644 index 0000000..cd05919 --- /dev/null +++ b/frontend/src/data/duplicate-triage.json @@ -0,0 +1,5266 @@ +{ + "generatedFrom": "duplicate-stem triage over frontend/public/data/books/, cross-checked with scripts/validate-questions.mjs", + "note": "SAFE duplicate groups have already been de-duplicated in the bank: the copy in the lowest-numbered chapter was kept and the rest deleted. CONFLICT groups were left in place and every copy was added to quarantine.json with code DUPLICATE_ANSWER_CONFLICT, because at least one copy keys an answer the other copies contradict. Ids below are post-dedupe array positions and move if the bank is re-ordered. As of 2026-10-20 the suggestedResolutions above have been applied; see appliedResolutions for the audit trail and for what was deliberately not applied.", + "summary": { + "duplicateGroupsFound": 391, + "safeGroupsDeduplicated": 332, + "rowsDeleted": 489, + "conflictGroups": 59, + "conflictRowsQuarantined": 128, + "conflictGroupsByReason": { + "DIVERGENT_PROSE": 46, + "NUMERIC_MISMATCH": 12, + "INVALID_KEY": 1 + }, + "conflictGroupsWithIdenticalOptionSets": 22, + "conflictGroupsWithDifferentOptionSets": 37, + "rowCountsByFile": { + "ch1.json": { + "before": 587, + "deleted": 62, + "after": 525 + }, + "ch2.json": { + "before": 746, + "deleted": 414, + "after": 332 + }, + "ch3.json": { + "before": 398, + "deleted": 7, + "after": 391 + }, + "ch4.json": { + "before": 424, + "deleted": 2, + "after": 422 + }, + "ch5.json": { + "before": 69, + "deleted": 0, + "after": 69 + }, + "ch6.json": { + "before": 64, + "deleted": 0, + "after": 64 + }, + "ch7.json": { + "before": 69, + "deleted": 1, + "after": 68 + }, + "ch8.json": { + "before": 131, + "deleted": 1, + "after": 130 + }, + "ch9.json": { + "before": 71, + "deleted": 0, + "after": 71 + }, + "ch10.json": { + "before": 242, + "deleted": 2, + "after": 240 + } + } + }, + "suggestedResolutions": [ + { + "ids": [ + "book-ch1_198", + "book-ch1_255" + ], + "reason": "NUMERIC_MISMATCH", + "stem": "What is the maximum efficiency that can be achieved in a circuit using the maximum power transfer theorem?", + "conflictingAnswers": [ + "25%", + "50%" + ], + "recommendedAnswer": "50%", + "confidence": "high", + "reasoning": "Maximum power transfer requires R_load = R_thevenin. The two resistances then dissipate equal power, so the fraction delivered to the load is P_load / (P_load + P_source) = 50%. The copy keyed \"25%\" is wrong.", + "action": "Set correct_option_index/correct_option to \"50%\" on the copy that keys \"25%\", then release both from quarantine." + }, + { + "ids": [ + "book-ch1_206", + "book-ch1_256" + ], + "reason": "NUMERIC_MISMATCH", + "stem": "What is the time constant of an R-C circuit consisting of a 1 kΩ resistor and a 100 nF capacitor?", + "conflictingAnswers": [ + "1 ms", + "100 µs" + ], + "recommendedAnswer": "100 µs", + "confidence": "high", + "reasoning": "tau = R*C = 1e3 ohm * 100e-9 F = 1e-4 s = 100 us. \"1 ms\" is off by 10x.", + "action": "Re-key the \"1 ms\" copy to \"100 µs\", then release both." + }, + { + "ids": [ + "book-ch1_207", + "book-ch1_257" + ], + "reason": "NUMERIC_MISMATCH", + "stem": "In an R-L circuit, the voltage across the Inductor lags behind the current by how many degrees?", + "conflictingAnswers": [ + "0°", + "90°" + ], + "recommendedAnswer": "none of the options as the stem is written - fix the stem first", + "confidence": "high", + "reasoning": "For an inductor v = L di/dt, so the inductor voltage LEADS the current by 90 degrees; it does not lag it. The magnitude 90° is right but the stem states the relationship backwards, so \"lags ... by 90°\" is false and \"0°\" is false too. This is a stem defect, not a key choice.", + "action": "Rewrite the stem to \"...the voltage across the inductor leads the current by how many degrees?\" and key \"90°\" on both copies." + }, + { + "ids": [ + "book-ch1_208", + "book-ch1_258" + ], + "reason": "NUMERIC_MISMATCH", + "stem": "What is the resonant frequency of an R-L-C circuit with a 100 Ω resistor, 1 mH inductor, and a 100 nF capacitor?", + "conflictingAnswers": [ + "160 kHz", + "16 kHz" + ], + "recommendedAnswer": "16 kHz", + "confidence": "high", + "reasoning": "f0 = 1/(2*pi*sqrt(L*C)) = 1/(2*pi*sqrt(1e-3 * 100e-9)) = 1/(2*pi*1e-5) = 15 915 Hz ~= 16 kHz. R does not enter f0. \"160 kHz\" is off by 10x.", + "action": "Re-key the \"160 kHz\" copy to \"16 kHz\", then release both." + }, + { + "ids": [ + "book-ch1_212", + "book-ch1_260" + ], + "reason": "NUMERIC_MISMATCH", + "stem": "What is the phase angle between the voltage and current in an R-L-C circuit at resonance?", + "conflictingAnswers": [ + "45°", + "0°" + ], + "recommendedAnswer": "0°", + "confidence": "high", + "reasoning": "At resonance X_L = X_C, the reactive parts cancel and the impedance is purely resistive, so voltage and current are in phase: 0°. (The same physics makes a series R-L-C impedance minimum, not infinite, at resonance.)", + "action": "Re-key the \"45°\" copy to \"0°\", then release both." + }, + { + "ids": [ + "book-ch1_213", + "book-ch1_261" + ], + "reason": "NUMERIC_MISMATCH", + "stem": "What is the time constant of an R-L circuit consisting of a 100 Ω resistor and a 10 mH inductor?", + "conflictingAnswers": [ + "1 µs", + "100 µs" + ], + "recommendedAnswer": "100 µs", + "confidence": "high", + "reasoning": "tau = L/R = 10e-3 H / 100 ohm = 1e-4 s = 100 us. \"1 µs\" is off by 100x.", + "action": "Re-key the \"1 µs\" copy to \"100 µs\", then release both." + }, + { + "ids": [ + "book-ch1_215", + "book-ch1_263" + ], + "reason": "NUMERIC_MISMATCH", + "stem": "A parallel R-C circuit has a resistor of 100 kΩ and a capacitor of 1 µF. What is the resonant frequency?", + "conflictingAnswers": [ + "15.92 Hz", + "1.59 kHz" + ], + "recommendedAnswer": "neither - the question is unanswerable as authored", + "confidence": "high", + "reasoning": "An R-C network has no resonance; it has a corner frequency. Taking the intended quantity as f = 1/(2*pi*R*C) = 1/(2*pi*1e5*1e-6) = 1.59 Hz, which is NOT among the four options (15.92 Hz / 15.92 kHz / 159.2 Hz / 1.59 kHz). One copy even carries correct_option \"1.59 Hz\" against an index pointing at \"1.59 kHz\", which confirms both the intent and the missing option.", + "action": "Rewrite the stem to ask for the cutoff/corner frequency, replace one option with \"1.59 Hz\" and key it - or retire the question. Do not release until an option is correct." + }, + { + "ids": [ + "book-ch1_221", + "book-ch1_266" + ], + "reason": "NUMERIC_MISMATCH", + "stem": "What is the resonance frequency of an R-L-C circuit?", + "conflictingAnswers": [ + "2pisqrt(LC)", + "1/(2pisqrt(LC))" + ], + "recommendedAnswer": "1/(2pisqrt(LC))", + "confidence": "high", + "reasoning": "f0 = 1/(2*pi*sqrt(L*C)). \"2pisqrt(LC)\" is the reciprocal and has units of seconds, not hertz.", + "action": "Re-key the \"2pisqrt(LC)\" copy to \"1/(2pisqrt(LC))\", then release both." + }, + { + "ids": [ + "book-ch1_236", + "book-ch1_274" + ], + "reason": "NUMERIC_MISMATCH", + "stem": "What is the resonant frequency of an AC parallel resonant circuit with an inductance of 20mH and a capacitance of 5µF?", + "conflictingAnswers": [ + "35.7 kHz", + "357 kHz" + ], + "recommendedAnswer": "neither - the stem numbers and the options disagree", + "confidence": "medium", + "reasoning": "With L = 20 mH and C = 5 uF, f0 = 1/(2*pi*sqrt(1e-7)) = 503 Hz. None of the four options (3.57 kHz / 35.7 kHz / 357 kHz / 3.57 MHz) is within three orders of magnitude of that. The option \"3.57 kHz\" is what you get for L = 20 mH with C = 0.1 uF, so the capacitance in the stem is most likely a typo for 0.1 µF (100 nF).", + "action": "Check the source textbook. If C is 0.1 µF, key \"3.57 kHz\" on both copies; otherwise replace the options with 503 Hz and plausible distractors. Do not release until the arithmetic closes." + }, + { + "ids": [ + "book-ch2_136", + "book-ch2_145" + ], + "reason": "NUMERIC_MISMATCH", + "stem": "What is the difference between a binary encoder and a priority encoder?", + "conflictingAnswers": [ + "A binary encoder converts a binary input signal into an n-bit coded output signal, while a priority encoder generates a binary code corresponding to the highest priority input signal.", + "A binary encoder has 2^n input lines and n output lines, while a priority encoder has n input lines and log2n output lines." + ], + "recommendedAnswer": "the \"highest priority input signal\" option", + "confidence": "high", + "reasoning": "The defining difference is behavioural: a priority encoder resolves simultaneously-asserted inputs in favour of the highest-priority one. The line-count option is not a difference at all - a priority encoder also has 2^n inputs and n outputs (n = log2 of the input count), so that option describes both devices. Both copies already list the correct option, one of them as opt1.", + "action": "Re-key the second copy to its opt1, then release both." + }, + { + "ids": [ + "book-ch2_189", + "book-ch2_193" + ], + "reason": "NUMERIC_MISMATCH", + "stem": "What is the range of unsigned 8-bit binary numbers?", + "conflictingAnswers": [ + "0 to 255", + "0 to 256" + ], + "recommendedAnswer": "0 to 255", + "confidence": "high", + "reasoning": "8 bits encode 2^8 = 256 distinct values starting at 0, so the range is 0..255. One copy keys \"0 to 256\", which is wrong - and that copy has no correct option at all (its own correct_option field says \"0 to 255\", which is absent from its option list). It is already quarantined for KEY_CONFLICT independently.", + "action": "On the bad copy replace the option \"0 to 256\" with \"0 to 255\" and key it, or retire that copy as a straight duplicate. The good copy can be released now." + }, + { + "ids": [ + "book-ch2_116", + "book-ch2_125" + ], + "reason": "INVALID_KEY", + "stem": "Which of the following is not a valid combination of input variables in a Karnaugh map for a two-variable expression?", + "conflictingAnswers": [ + "(index 5 of 4 options - unanswerable)", + "(index 5 of 4 options - unanswerable)" + ], + "recommendedAnswer": "neither - the intended option is missing from the bank", + "confidence": "high", + "reasoning": "Both copies set correct_option_index to 5 with only four options present. The four options 00/01/10/11 are all valid two-variable combinations, so as authored there is no correct answer. Both copies carry correct_option \"21\", which is indeed not a valid binary combination - the intended fifth option was dropped when the row was flattened to four columns.", + "action": "Replace one option with \"21\" and set correct_option_index accordingly, or retire the question. Do not release until the index is in range." + }, + { + "ids": [ + "book-ch3_358", + "book-ch3_362", + "book-ch3_364", + "book-ch3_368" + ], + "reason": "NUMERIC_MISMATCH", + "stem": "Which of the following statements is true about static data members in C++?", + "conflictingAnswers": [ + "They are initialized to 0 by default", + "They can be initialized only outside the class definition", + "All of the above are true", + "They are initialized to zero by default" + ], + "recommendedAnswer": "no re-key needed - this is a stem collision, not an answer conflict", + "confidence": "high", + "reasoning": "All four copies carry DIFFERENT option sets and each keyed answer is correct for its own set: static data members have static storage duration and are zero-initialised; a non-inline, non-const static data member must be defined outside the class (pre-C++17); and the access-flavoured copy keys \"All of the above are true\" over three statements that are all true. The stem is simply too generic to distinguish four separate questions, which is why the duplicate detector grouped them.", + "action": "Disambiguate the four stems (e.g. \"...about the initialization of static data members\", \"...about accessing static data members\") and release all four. No answer key is wrong here." + } + ], + "conflictGroups": [ + { + "reason": "DIVERGENT_PROSE", + "optionSetsIdentical": false, + "stem": "What is the purpose of delta-star conversion?", + "copies": [ + { + "id": "book-ch1_50", + "correctOptionIndex": 3, + "keyedAnswer": "To regulate the voltage levels of a three-phase supply", + "correctOptionText": "To regulate the voltage levels of a three-phase supply", + "options": [ + "To reduce the starting current of a motor", + "To increase the starting current of a motor", + "To regulate the voltage levels of a three-phase supply", + "None of above" + ] + }, + { + "id": "book-ch1_58", + "correctOptionIndex": 3, + "keyedAnswer": "To regulate the voltage levels of a power distribution system", + "correctOptionText": "To regulate the voltage levels of a power distribution system", + "options": [ + "To convert a three-phase system from a star to a delta configuration", + "To reduce the starting current of a motor", + "To regulate the voltage levels of a power distribution system", + "None of above" + ] + } + ] + }, + { + "reason": "DIVERGENT_PROSE", + "optionSetsIdentical": false, + "stem": "What is the superposition theorem based on?", + "copies": [ + { + "id": "book-ch1_140", + "correctOptionIndex": 4, + "keyedAnswer": "The principle of superposition", + "correctOptionText": "The principle of superposition", + "options": [ + "Ohm's law", + "Faraday's law", + "Kirchhoff's laws", + "The principle of superposition" + ] + }, + { + "id": "book-ch1_143", + "correctOptionIndex": 3, + "keyedAnswer": "Ohm's law", + "correctOptionText": "Ohm's law", + "options": [ + "Kirchhoff's current law", + "Kirchhoff's voltage law", + "Ohm's law", + "Faraday's law" + ] + } + ] + }, + { + "reason": "DIVERGENT_PROSE", + "optionSetsIdentical": false, + "stem": "What is the equivalent resistance seen from the output terminals in Norton's theorem?", + "copies": [ + { + "id": "book-ch1_173", + "correctOptionIndex": 2, + "keyedAnswer": "The resistance of the circuit with all voltage sources replaced by their internal resistances.", + "correctOptionText": "The resistance of the circuit with all voltage sources replaced by their internal resistances.", + "options": [ + "The resistance of the load resistor.", + "The resistance of the circuit with all voltage sources replaced by their internal resistances.", + "The resistance of the circuit with all current sources replaced by their internal resistances.", + "None of above" + ] + }, + { + "id": "book-ch1_183", + "correctOptionIndex": 4, + "keyedAnswer": "The resistance seen from the output terminals with all voltage sources replaced by their internal resistances", + "correctOptionText": "The resistance seen from the output terminals with all voltage sources replaced by their internal resistances", + "options": [ + "The total resistance of the circuit", + "The resistance of the load resistor", + "The resistance of the voltage source", + "The resistance seen from the output terminals with all voltage sources replaced by their internal resistances" + ] + } + ] + }, + { + "reason": "NUMERIC_MISMATCH", + "optionSetsIdentical": true, + "stem": "What is the maximum efficiency that can be achieved in a circuit using the maximum power transfer theorem?", + "copies": [ + { + "id": "book-ch1_198", + "correctOptionIndex": 3, + "keyedAnswer": "25%", + "correctOptionText": "25%", + "options": [ + "100%", + "50%", + "25%", + "It depends on the circuit." + ] + }, + { + "id": "book-ch1_255", + "correctOptionIndex": 2, + "keyedAnswer": "50%", + "correctOptionText": "50%", + "options": [ + "100%", + "50%", + "25%", + "It depends on the circuit." + ] + } + ] + }, + { + "reason": "NUMERIC_MISMATCH", + "optionSetsIdentical": true, + "stem": "What is the time constant of an R-C circuit consisting of a 1 kΩ resistor and a 100 nF capacitor?", + "copies": [ + { + "id": "book-ch1_206", + "correctOptionIndex": 1, + "keyedAnswer": "1 ms", + "correctOptionText": "1 ms", + "options": [ + "1 ms", + "100 µs", + "10 µs", + "10 ms" + ] + }, + { + "id": "book-ch1_256", + "correctOptionIndex": 2, + "keyedAnswer": "100 µs", + "correctOptionText": "100 µs", + "options": [ + "1 ms", + "100 µs", + "10 µs", + "10 ms" + ] + } + ] + }, + { + "reason": "NUMERIC_MISMATCH", + "optionSetsIdentical": true, + "stem": "In an R-L circuit, the voltage across the Inductor lags behind the current by how many degrees?", + "copies": [ + { + "id": "book-ch1_207", + "correctOptionIndex": 1, + "keyedAnswer": "0°", + "correctOptionText": "0°", + "options": [ + "0°", + "45°", + "90°", + "180°" + ] + }, + { + "id": "book-ch1_257", + "correctOptionIndex": 3, + "keyedAnswer": "90°", + "correctOptionText": "90°", + "options": [ + "0°", + "45°", + "90°", + "180°" + ] + } + ] + }, + { + "reason": "NUMERIC_MISMATCH", + "optionSetsIdentical": true, + "stem": "What is the resonant frequency of an R-L-C circuit with a 100 Ω resistor, 1 mH inductor, and a 100 nF capacitor?", + "copies": [ + { + "id": "book-ch1_208", + "correctOptionIndex": 1, + "keyedAnswer": "160 kHz", + "correctOptionText": "160 kHz", + "options": [ + "160 kHz", + "16 kHz", + "1.6 kHz", + "1.6 MHz" + ] + }, + { + "id": "book-ch1_258", + "correctOptionIndex": 2, + "keyedAnswer": "16 kHz", + "correctOptionText": "16 kHz", + "options": [ + "160 kHz", + "16 kHz", + "1.6 kHz", + "1.6 MHz" + ] + } + ] + }, + { + "reason": "DIVERGENT_PROSE", + "optionSetsIdentical": true, + "stem": "In an R-L-C circuit, what happens to the Impedance at resonance?", + "copies": [ + { + "id": "book-ch1_209", + "correctOptionIndex": 4, + "keyedAnswer": "It is infinite", + "correctOptionText": "It is infinite", + "options": [ + "It is zero", + "It is at a minimum", + "It is at a maximum", + "It is infinite" + ] + }, + { + "id": "book-ch1_259", + "correctOptionIndex": 2, + "keyedAnswer": "It is at a minimum", + "correctOptionText": "It is at a minimum", + "options": [ + "It is zero", + "It is at a minimum", + "It is at a maximum", + "It is infinite" + ] + } + ] + }, + { + "reason": "NUMERIC_MISMATCH", + "optionSetsIdentical": true, + "stem": "What is the phase angle between the voltage and current in an R-L-C circuit at resonance?", + "copies": [ + { + "id": "book-ch1_212", + "correctOptionIndex": 2, + "keyedAnswer": "45°", + "correctOptionText": "45°", + "options": [ + "0°", + "45°", + "90°", + "180°" + ] + }, + { + "id": "book-ch1_260", + "correctOptionIndex": 1, + "keyedAnswer": "0°", + "correctOptionText": "0°", + "options": [ + "0°", + "45°", + "90°", + "180°" + ] + } + ] + }, + { + "reason": "NUMERIC_MISMATCH", + "optionSetsIdentical": true, + "stem": "What is the time constant of an R-L circuit consisting of a 100 Ω resistor and a 10 mH inductor?", + "copies": [ + { + "id": "book-ch1_213", + "correctOptionIndex": 2, + "keyedAnswer": "1 µs", + "correctOptionText": "1 µs", + "options": [ + "100 µs", + "1 µs", + "10 µs", + "1 ms" + ] + }, + { + "id": "book-ch1_261", + "correctOptionIndex": 1, + "keyedAnswer": "100 µs", + "correctOptionText": "100 µs", + "options": [ + "100 µs", + "1 µs", + "10 µs", + "1 ms" + ] + } + ] + }, + { + "reason": "DIVERGENT_PROSE", + "optionSetsIdentical": true, + "stem": "In an R-L-C circuit, what happens to the bandwidth as the quality factor increases?", + "copies": [ + { + "id": "book-ch1_214", + "correctOptionIndex": 1, + "keyedAnswer": "It increases", + "correctOptionText": "It increases", + "options": [ + "It increases", + "It decreases", + "It remains constant", + "It oscillates" + ] + }, + { + "id": "book-ch1_262", + "correctOptionIndex": 2, + "keyedAnswer": "It decreases", + "correctOptionText": "It decreases", + "options": [ + "It increases", + "It decreases", + "It remains constant", + "It oscillates" + ] + } + ] + }, + { + "reason": "NUMERIC_MISMATCH", + "optionSetsIdentical": true, + "stem": "A parallel R-C circuit has a resistor of 100 kΩ and a capacitor of 1 µF. What is the resonant frequency?", + "copies": [ + { + "id": "book-ch1_215", + "correctOptionIndex": 1, + "keyedAnswer": "15.92 Hz", + "correctOptionText": "15.92 Hz", + "options": [ + "15.92 Hz", + "15.92 kHz", + "159.2 Hz", + "1.59 kHz" + ] + }, + { + "id": "book-ch1_263", + "correctOptionIndex": 4, + "keyedAnswer": "1.59 kHz", + "correctOptionText": "1.59 Hz", + "options": [ + "15.92 Hz", + "15.92 kHz", + "159.2 Hz", + "1.59 kHz" + ] + } + ] + }, + { + "reason": "DIVERGENT_PROSE", + "optionSetsIdentical": true, + "stem": "What is the time constant of an R-C circuit?", + "copies": [ + { + "id": "book-ch1_217", + "correctOptionIndex": 1, + "keyedAnswer": "R/C", + "correctOptionText": "R/C", + "options": [ + "R/C", + "CR", + "RC", + "1/RC" + ] + }, + { + "id": "book-ch1_264", + "correctOptionIndex": 3, + "keyedAnswer": "RC", + "correctOptionText": "RC", + "options": [ + "R/C", + "CR", + "RC", + "1/RC" + ] + } + ] + }, + { + "reason": "DIVERGENT_PROSE", + "optionSetsIdentical": true, + "stem": "What is the voltage across an inductor in an R-L circuit at steady state?", + "copies": [ + { + "id": "book-ch1_218", + "correctOptionIndex": 2, + "keyedAnswer": "Infinite", + "correctOptionText": "Infinite", + "options": [ + "Zero", + "Infinite", + "The same as the voltage across the resistor", + "None of the above" + ] + }, + { + "id": "book-ch1_265", + "correctOptionIndex": 1, + "keyedAnswer": "Zero", + "correctOptionText": "Zero", + "options": [ + "Zero", + "Infinite", + "The same as the voltage across the resistor", + "None of the above" + ] + } + ] + }, + { + "reason": "NUMERIC_MISMATCH", + "optionSetsIdentical": true, + "stem": "What is the resonance frequency of an R-L-C circuit?", + "copies": [ + { + "id": "book-ch1_221", + "correctOptionIndex": 2, + "keyedAnswer": "2pisqrt(LC)", + "correctOptionText": "2pisqrt(LC)", + "options": [ + "1/(2pisqrt(LC))", + "2pisqrt(LC)", + "1/(L*C)", + "None of the above" + ] + }, + { + "id": "book-ch1_266", + "correctOptionIndex": 1, + "keyedAnswer": "1/(2pisqrt(LC))", + "correctOptionText": "1/(2pisqrt(LC))", + "options": [ + "1/(2pisqrt(LC))", + "2pisqrt(LC)", + "1/(L*C)", + "None of the above" + ] + } + ] + }, + { + "reason": "DIVERGENT_PROSE", + "optionSetsIdentical": true, + "stem": "What happens to the impedance of an R-L-C circuit at resonance?", + "copies": [ + { + "id": "book-ch1_222", + "correctOptionIndex": 1, + "keyedAnswer": "The impedance is maximum", + "correctOptionText": "The impedance is maximum", + "options": [ + "The impedance is maximum", + "The impedance is minimum", + "The impedance is zero", + "The impedance remains the same" + ] + }, + { + "id": "book-ch1_267", + "correctOptionIndex": 2, + "keyedAnswer": "The impedance is minimum", + "correctOptionText": "The impedance is minimum", + "options": [ + "The impedance is maximum", + "The impedance is minimum", + "The impedance is zero", + "The impedance remains the same" + ] + } + ] + }, + { + "reason": "DIVERGENT_PROSE", + "optionSetsIdentical": true, + "stem": "What happens to the Impedance of an AC series resonant circuit at resonance?", + "copies": [ + { + "id": "book-ch1_226", + "correctOptionIndex": 2, + "keyedAnswer": "It is maximum", + "correctOptionText": "It is maximum", + "options": [ + "It is minimum", + "It is maximum", + "It is zero", + "It is infinity" + ] + }, + { + "id": "book-ch1_268", + "correctOptionIndex": 1, + "keyedAnswer": "It is minimum", + "correctOptionText": "It is minimum", + "options": [ + "It is minimum", + "It is maximum", + "It is zero", + "It is infinity" + ] + } + ] + }, + { + "reason": "DIVERGENT_PROSE", + "optionSetsIdentical": true, + "stem": "What happens to the current in an AC parallel resonant circuit at resonance?", + "copies": [ + { + "id": "book-ch1_227", + "correctOptionIndex": 2, + "keyedAnswer": "It is maximum", + "correctOptionText": "It is maximum", + "options": [ + "It is minimum", + "It is maximum", + "It is zero", + "It is infinity" + ] + }, + { + "id": "book-ch1_269", + "correctOptionIndex": 1, + "keyedAnswer": "It is minimum", + "correctOptionText": "It is minimum", + "options": [ + "It is minimum", + "It is maximum", + "It is zero", + "It is infinity" + ] + } + ] + }, + { + "reason": "DIVERGENT_PROSE", + "optionSetsIdentical": true, + "stem": "What is the power factor of an AC series resonant circuit at resonance?", + "copies": [ + { + "id": "book-ch1_228", + "correctOptionIndex": 2, + "keyedAnswer": "Zero", + "correctOptionText": "Zero", + "options": [ + "Unity", + "Zero", + "Negative", + "Indeterminate" + ] + }, + { + "id": "book-ch1_270", + "correctOptionIndex": 1, + "keyedAnswer": "Unity", + "correctOptionText": "Unity", + "options": [ + "Unity", + "Zero", + "Negative", + "Indeterminate" + ] + } + ] + }, + { + "reason": "DIVERGENT_PROSE", + "optionSetsIdentical": true, + "stem": "What is the power factor of an AC parallel resonant circuit at resonance?", + "copies": [ + { + "id": "book-ch1_229", + "correctOptionIndex": 2, + "keyedAnswer": "Zero", + "correctOptionText": "Zero", + "options": [ + "Unity", + "Zero", + "Negative", + "Indeterminate" + ] + }, + { + "id": "book-ch1_271", + "correctOptionIndex": 1, + "keyedAnswer": "Unity", + "correctOptionText": "Unity", + "options": [ + "Unity", + "Zero", + "Negative", + "Indeterminate" + ] + } + ] + }, + { + "reason": "DIVERGENT_PROSE", + "optionSetsIdentical": true, + "stem": "What happens to the voltage across the capacitor in an AC series resonant circuit at resonance?", + "copies": [ + { + "id": "book-ch1_232", + "correctOptionIndex": 2, + "keyedAnswer": "It is minimum", + "correctOptionText": "It is minimum", + "options": [ + "It is maximum", + "It is minimum", + "It is zero", + "It is infinity" + ] + }, + { + "id": "book-ch1_272", + "correctOptionIndex": 1, + "keyedAnswer": "It is maximum", + "correctOptionText": "It is maximum", + "options": [ + "It is maximum", + "It is minimum", + "It is zero", + "It is infinity" + ] + } + ] + }, + { + "reason": "DIVERGENT_PROSE", + "optionSetsIdentical": true, + "stem": "In an AC parallel resonant circuit, at the resonant frequency, what is the impedance?", + "copies": [ + { + "id": "book-ch1_235", + "correctOptionIndex": 3, + "keyedAnswer": "Minimum", + "correctOptionText": "Minimum", + "options": [ + "Zero", + "Infinite", + "Minimum", + "Maximum" + ] + }, + { + "id": "book-ch1_273", + "correctOptionIndex": 4, + "keyedAnswer": "Maximum", + "correctOptionText": "Maximum", + "options": [ + "Zero", + "Infinite", + "Minimum", + "Maximum" + ] + } + ] + }, + { + "reason": "NUMERIC_MISMATCH", + "optionSetsIdentical": true, + "stem": "What is the resonant frequency of an AC parallel resonant circuit with an inductance of 20mH and a capacitance of 5µF?", + "copies": [ + { + "id": "book-ch1_236", + "correctOptionIndex": 2, + "keyedAnswer": "35.7 kHz", + "correctOptionText": "35.7 kHz", + "options": [ + "3.57 kHz", + "35.7 kHz", + "357 kHz", + "3.57 MHz" + ] + }, + { + "id": "book-ch1_274", + "correctOptionIndex": 3, + "keyedAnswer": "357 kHz", + "correctOptionText": "357 kHz", + "options": [ + "3.57 kHz", + "35.7 kHz", + "357 kHz", + "3.57 MHz" + ] + } + ] + }, + { + "reason": "DIVERGENT_PROSE", + "optionSetsIdentical": true, + "stem": "What is the relationship between active power and reactive power?", + "copies": [ + { + "id": "book-ch1_246", + "correctOptionIndex": 1, + "keyedAnswer": "They are the same thing", + "correctOptionText": "They are the same thing", + "options": [ + "They are the same thing", + "Reactive power is always greater than active power", + "Active power is always greater than reactive power", + "They are two different types of power" + ] + }, + { + "id": "book-ch1_275", + "correctOptionIndex": 4, + "keyedAnswer": "They are two different types of power", + "correctOptionText": "They are two different types of power", + "options": [ + "They are the same thing", + "Reactive power is always greater than active power", + "Active power is always greater than reactive power", + "They are two different types of power" + ] + } + ] + }, + { + "reason": "DIVERGENT_PROSE", + "optionSetsIdentical": false, + "stem": "What is the frequency of a triangle wave generator determined by?", + "copies": [ + { + "id": "book-ch1_337", + "correctOptionIndex": 1, + "keyedAnswer": "The time constant of the RC circuit", + "correctOptionText": "The time constant of the RC circuit", + "options": [ + "The time constant of the RC circuit", + "The resonant frequency of the tank circuit", + "The frequency of the crystal", + "The input voltage of the oscillator" + ] + }, + { + "id": "book-ch1_347", + "correctOptionIndex": 4, + "keyedAnswer": "The slope of the waveform", + "correctOptionText": "The slope of the waveform", + "options": [ + "The time period of the waveform", + "The amplitude of the waveform", + "The duty cycle of the waveform", + "The slope of the waveform" + ] + }, + { + "id": "book-ch2_123", + "correctOptionIndex": 1, + "keyedAnswer": "The time constant of the RC circuit", + "correctOptionText": "The time constant of the RC circuit", + "options": [ + "The time constant of the RC circuit", + "The resonant frequency of the tank circuit", + "The frequency of the crystal", + "The input voltage of the oscillator" + ] + }, + { + "id": "book-ch2_124", + "correctOptionIndex": 4, + "keyedAnswer": "The slope of the waveform", + "correctOptionText": "The slope of the waveform", + "options": [ + "The time period of the waveform", + "The amplitude of the waveform", + "The duty cycle of the waveform", + "The slope of the waveform" + ] + } + ] + }, + { + "reason": "INVALID_KEY", + "optionSetsIdentical": true, + "stem": "Which of the following is not a valid combination of input variables in a Karnaugh map for a two-variable expression?", + "copies": [ + { + "id": "book-ch2_116", + "correctOptionIndex": 5, + "keyedAnswer": null, + "correctOptionText": "21", + "options": [ + "00", + "01", + "10", + "11" + ] + }, + { + "id": "book-ch2_125", + "correctOptionIndex": 5, + "keyedAnswer": null, + "correctOptionText": "21", + "options": [ + "00", + "01", + "10", + "11" + ] + } + ] + }, + { + "reason": "NUMERIC_MISMATCH", + "optionSetsIdentical": false, + "stem": "What is the difference between a binary encoder and a priority encoder?", + "copies": [ + { + "id": "book-ch2_136", + "correctOptionIndex": 1, + "keyedAnswer": "A binary encoder converts a binary input signal into an n-bit coded output signal, while a priority encoder generates a binary code corresponding to the highest priority input signal.", + "correctOptionText": "A binary encoder converts a binary input signal into an n-bit coded output signal, while a priority encoder generates a binary code corresponding to the highest priority input signal.", + "options": [ + "A binary encoder converts a binary input signal into an n-bit coded output signal, while a priority encoder generates a binary code corresponding to the highest priority input signal.", + "A binary encoder generates a binary code corresponding to the highest priority input signal, while a priority encoder converts a binary input signal into an n-bit coded output signal.", + "A binary encoder and a priority encoder are the same thing.", + "A binary encoder and a priority encoder have no difference." + ] + }, + { + "id": "book-ch2_145", + "correctOptionIndex": 4, + "keyedAnswer": "A binary encoder has 2^n input lines and n output lines, while a priority encoder has n input lines and log2n output lines.", + "correctOptionText": "A binary encoder has 2^n input lines and n output lines, while a priority encoder has n input lines and log2n output lines.", + "options": [ + "A binary encoder converts a binary input signal into an n-bit coded output signal, while a priority encoder generates a binary code corresponding to the highest priority input signal.", + "A binary encoder generates a binary code corresponding to the highest priority input signal, while a priority encoder converts a binary input signal into an n-bit coded output signal.", + "A binary encoder converts a decimal input signal into a 4-bit BCD output signal, while a priority encoder generates a binary code corresponding to the highest priority input signal.", + "A binary encoder has 2^n input lines and n output lines, while a priority encoder has n input lines and log2n output lines." + ] + } + ] + }, + { + "reason": "NUMERIC_MISMATCH", + "optionSetsIdentical": false, + "stem": "What is the range of unsigned 8-bit binary numbers?", + "copies": [ + { + "id": "book-ch2_189", + "correctOptionIndex": 4, + "keyedAnswer": "0 to 255", + "correctOptionText": "0 to 255", + "options": [ + "0 to 127", + "-128 to 127", + "-127 to 127", + "0 to 255" + ] + }, + { + "id": "book-ch2_193", + "correctOptionIndex": 2, + "keyedAnswer": "0 to 256", + "correctOptionText": "0 to 255", + "options": [ + "-128 to 127", + "0 to 256", + "0 to 127", + "0 to 128" + ] + } + ] + }, + { + "reason": "DIVERGENT_PROSE", + "optionSetsIdentical": false, + "stem": "Which of the following is not a feature of a microprocessor?", + "copies": [ + { + "id": "book-ch2_240", + "correctOptionIndex": 4, + "keyedAnswer": "Secondary storage", + "correctOptionText": "Secondary storage", + "options": [ + "Interrupt handling capability", + "Pipelining", + "Cache memory", + "Secondary storage" + ] + }, + { + "id": "book-ch2_253", + "correctOptionIndex": 4, + "keyedAnswer": "Multiuser", + "correctOptionText": "Multiuser", + "options": [ + "Multitasking", + "Multiprocessing", + "Multithreading", + "Multiuser" + ] + } + ] + }, + { + "reason": "DIVERGENT_PROSE", + "optionSetsIdentical": false, + "stem": "Which of the following statements is true about nested interrupts?", + "copies": [ + { + "id": "book-ch2_303", + "correctOptionIndex": 2, + "keyedAnswer": "They occur when an ISR triggers another interrupt", + "correctOptionText": "They occur when an ISR triggers another interrupt", + "options": [ + "They are not allowed in most microprocessors", + "They occur when an ISR triggers another interrupt", + "They occur when multiple interrupts are triggered simultaneously", + "They occur when an ISR takes too long to execute" + ] + }, + { + "id": "book-ch2_325", + "correctOptionIndex": 1, + "keyedAnswer": "They occur when an ISR is triggered while another ISR is being serviced", + "correctOptionText": "They occur when an ISR is triggered while another ISR is being serviced", + "options": [ + "They occur when an ISR is triggered while another ISR is being serviced", + "They occur when two ISRs are triggered simultaneously", + "They occur when an ISR takes longer than expected to execute", + "They never occur in a microprocessor" + ] + } + ] + }, + { + "reason": "DIVERGENT_PROSE", + "optionSetsIdentical": false, + "stem": "What is interrupt processing in a microprocessor?", + "copies": [ + { + "id": "book-ch2_305", + "correctOptionIndex": 2, + "keyedAnswer": "The process of handling an interrupt request from an external device", + "correctOptionText": "The process of handling an interrupt request from an external device", + "options": [ + "The process of interrupting a running program", + "The process of handling an interrupt request from an external device", + "The process of prioritizing interrupts", + "The process of executing the interrupt service routine" + ] + }, + { + "id": "book-ch2_312", + "correctOptionIndex": 2, + "keyedAnswer": "The process of handling interrupts", + "correctOptionText": "The process of handling interrupts", + "options": [ + "The process of generating interrupts", + "The process of handling interrupts", + "The process of disabling interrupts", + "The process of prioritizing interrupts" + ] + } + ] + }, + { + "reason": "DIVERGENT_PROSE", + "optionSetsIdentical": false, + "stem": "Which of the following statements is true about interrupt latency?", + "copies": [ + { + "id": "book-ch2_315", + "correctOptionIndex": 1, + "keyedAnswer": "It is the time between the occurrence of an interrupt and the start of the ISR", + "correctOptionText": "It is the time between the occurrence of an interrupt and the start of the ISR", + "options": [ + "It is the time between the occurrence of an interrupt and the start of the ISR", + "It is the time between the start of the ISR and the end of the ISR", + "It is the time between the end of the ISR and the resumption of the interrupted program", + "It is the time between the occurrence of an interrupt and the resumption of the interrupted program" + ] + }, + { + "id": "book-ch2_324", + "correctOptionIndex": 2, + "keyedAnswer": "It refers to the time required for an interrupt to be detected and an ISR to be initiated", + "correctOptionText": "It refers to the time required for an interrupt to be detected and an ISR to be initiated", + "options": [ + "It refers to the time required for an ISR to execute", + "It refers to the time required for an interrupt to be detected and an ISR to be initiated", + "It refers to the time required for the interrupted program to resume after an ISR is finished", + "It refers to the time required for the microprocessor to switch between different ISRs" + ] + } + ] + }, + { + "reason": "DIVERGENT_PROSE", + "optionSetsIdentical": false, + "stem": "Which of the following statements is true about edge-triggered interrupts?", + "copies": [ + { + "id": "book-ch2_320", + "correctOptionIndex": 2, + "keyedAnswer": "They are triggered by the rising or falling edge of a signal", + "correctOptionText": "They are triggered by the rising or falling edge of a signal", + "options": [ + "They are triggered by the presence of a signal for a specified period of time", + "They are triggered by the rising or falling edge of a signal", + "They are triggered by the amplitude of a signal", + "They are triggered by the frequency of a signal" + ] + }, + { + "id": "book-ch2_330", + "correctOptionIndex": 1, + "keyedAnswer": "They are triggered by a change in the interrupt request signal", + "correctOptionText": "They are triggered by a change in the interrupt request signal", + "options": [ + "They are triggered by a change in the interrupt request signal", + "They are triggered by the level of the interrupt request signal", + "They are not used in microprocessors", + "They are always maskable interrupts" + ] + } + ] + }, + { + "reason": "DIVERGENT_PROSE", + "optionSetsIdentical": false, + "stem": "What is the difference between a one-dimensional array and a two-dimensional array in C?", + "copies": [ + { + "id": "book-ch3_59", + "correctOptionIndex": 1, + "keyedAnswer": "A one-dimensional array has one row and multiple columns, whereas a two-dimensional array has multiple rows and multiple columns.", + "correctOptionText": "A one-dimensional array has one row and multiple columns, whereas a two-dimensional array has multiple rows and multiple columns.", + "options": [ + "A one-dimensional array has one row and multiple columns, whereas a two-dimensional array has multiple rows and multiple columns.", + "A one-dimensional array has multiple rows and multiple columns, whereas a two-dimensional array has one row and multiple columns.", + "A one-dimensional array has multiple rows and one column, whereas a two-dimensional array has one row and one column.", + "A one-dimensional array has one row and one column, whereas a two-dimensional array has multiple rows and multiple columns." + ] + }, + { + "id": "book-ch3_69", + "correctOptionIndex": 1, + "keyedAnswer": "A two-dimensional array has more dimensions than a one-dimensional array", + "correctOptionText": "A two-dimensional array has more dimensions than a one-dimensional array", + "options": [ + "A two-dimensional array has more dimensions than a one-dimensional array", + "A one-dimensional array has more dimensions than a two-dimensional array", + "There is no difference between a one-dimensional array and a two-dimensional array", + "A two-dimensional array can store more values than a one-dimensional array" + ] + } + ] + }, + { + "reason": "DIVERGENT_PROSE", + "optionSetsIdentical": false, + "stem": "What is a namespace in C++?", + "copies": [ + { + "id": "book-ch3_190", + "correctOptionIndex": 3, + "keyedAnswer": "It is a mechanism for managing the scope of identifiers in large programs", + "correctOptionText": "It is a mechanism for managing the scope of identifiers in large programs", + "options": [ + "It is a block of code that is used to group related variables and functions", + "It is a feature that allows a class to inherit from multiple base classes", + "It is a mechanism for managing the scope of identifiers in large programs", + "It is a type of loop in C++" + ] + }, + { + "id": "book-ch3_200", + "correctOptionIndex": 1, + "keyedAnswer": "A container that holds a group of related variables and functions", + "correctOptionText": "A container that holds a group of related variables and functions", + "options": [ + "A container that holds a group of related variables and functions", + "A type of loop that iterates over a collection of elements", + "A method of creating a new object from an existing object", + "A way to specify the data type of a variable" + ] + } + ] + }, + { + "reason": "DIVERGENT_PROSE", + "optionSetsIdentical": false, + "stem": "Which of the following statements is true regarding namespaces in C++?", + "copies": [ + { + "id": "book-ch3_192", + "correctOptionIndex": 1, + "keyedAnswer": "You can have multiple namespaces with the same name in the same program", + "correctOptionText": "You can have multiple namespaces with the same name in the same program", + "options": [ + "You can have multiple namespaces with the same name in the same program", + "Namespaces can only contain function declarations", + "You can define a namespace within a function", + "The contents of a namespace can be accessed using the dot operator" + ] + }, + { + "id": "book-ch3_201", + "correctOptionIndex": 4, + "keyedAnswer": "Namespace members are accessed using the :: operator", + "correctOptionText": "Namespace members are accessed using the :: operator", + "options": [ + "Nested namespaces are not allowed", + "A namespace can only contain functions", + "Namespaces are only used in object-oriented programming", + "Namespace members are accessed using the :: operator" + ] + } + ] + }, + { + "reason": "DIVERGENT_PROSE", + "optionSetsIdentical": false, + "stem": "What is the purpose of the \"this\" pointer in C++?", + "copies": [ + { + "id": "book-ch3_319", + "correctOptionIndex": 1, + "keyedAnswer": "It points to the object on which the member function is called", + "correctOptionText": "It points to the object on which the member function is called", + "options": [ + "It points to the object on which the member function is called", + "It points to the class definition", + "It points to the current function", + "None of the above" + ] + }, + { + "id": "book-ch3_338", + "correctOptionIndex": 1, + "keyedAnswer": "To refer to the object's own data members", + "correctOptionText": "To refer to the object's own data members", + "options": [ + "To refer to the object's own data members", + "To refer to a different object's data members", + "To refer to a different function", + "None of the above" + ] + } + ] + }, + { + "reason": "DIVERGENT_PROSE", + "optionSetsIdentical": false, + "stem": "What is a static data member in C++?", + "copies": [ + { + "id": "book-ch3_356", + "correctOptionIndex": 2, + "keyedAnswer": "A data member that is shared among all instances of a class", + "correctOptionText": "A data member that is shared among all instances of a class", + "options": [ + "A data member that is unique to each instance of a class", + "A data member that is shared among all instances of a class", + "A data member that can be accessed only by static functions", + "A data member that cannot be accessed from outside the class" + ] + }, + { + "id": "book-ch3_366", + "correctOptionIndex": 2, + "keyedAnswer": "A data member that belongs to the class and not to any instance of the class", + "correctOptionText": "A data member that belongs to the class and not to any instance of the class", + "options": [ + "A data member that can be accessed only by static functions", + "A data member that belongs to the class and not to any instance of the class", + "A data member that is created dynamically at runtime", + "None of the above" + ] + } + ] + }, + { + "reason": "DIVERGENT_PROSE", + "optionSetsIdentical": false, + "stem": "How is a static data member declared in C++?", + "copies": [ + { + "id": "book-ch3_357", + "correctOptionIndex": 1, + "keyedAnswer": "Using the keyword static before the data type", + "correctOptionText": "Using the keyword static before the data type", + "options": [ + "Using the keyword static before the data type", + "Using the keyword static before the class name", + "Using the keyword static after the data type", + "None of the above" + ] + }, + { + "id": "book-ch3_367", + "correctOptionIndex": 2, + "keyedAnswer": "With the keyword 'static' and the data type of the member", + "correctOptionText": "With the keyword 'static' and the data type of the member", + "options": [ + "With the keyword 'static' and the name of the member", + "With the keyword 'static' and the data type of the member", + "With the keyword 'static' and the access specifier of the member", + "None of the above" + ] + } + ] + }, + { + "reason": "NUMERIC_MISMATCH", + "optionSetsIdentical": false, + "stem": "Which of the following statements is true about static data members in C++?", + "copies": [ + { + "id": "book-ch3_358", + "correctOptionIndex": 2, + "keyedAnswer": "They are initialized to 0 by default", + "correctOptionText": "They are initialized to 0 by default", + "options": [ + "They are not initialized by default", + "They are initialized to 0 by default", + "They are initialized to 1 by default", + "None of the above" + ] + }, + { + "id": "book-ch3_362", + "correctOptionIndex": 3, + "keyedAnswer": "They can be initialized only outside the class definition", + "correctOptionText": "They can be initialized only outside the class definition", + "options": [ + "They can be initialized inside the class definition", + "They must be initialized inside the class definition", + "They can be initialized only outside the class definition", + "None of the above" + ] + }, + { + "id": "book-ch3_364", + "correctOptionIndex": 4, + "keyedAnswer": "All of the above are true", + "correctOptionText": "All of the above are true", + "options": [ + "They can be accessed using the object of the class", + "They can be accessed using the class name and the scope resolution operator", + "They can be accessed using the pointer to the object of the class", + "All of the above are true" + ] + }, + { + "id": "book-ch3_368", + "correctOptionIndex": 1, + "keyedAnswer": "They are initialized to zero by default", + "correctOptionText": "They are initialized to zero by default", + "options": [ + "They are initialized to zero by default", + "They cannot be initialized inside the class declaration", + "They are initialized to their default values by default", + "None of the above" + ] + } + ] + }, + { + "reason": "DIVERGENT_PROSE", + "optionSetsIdentical": false, + "stem": "How is a static function declared in C++?", + "copies": [ + { + "id": "book-ch3_359", + "correctOptionIndex": 1, + "keyedAnswer": "Using the keyword static before the return type", + "correctOptionText": "Using the keyword static before the return type", + "options": [ + "Using the keyword static before the return type", + "Using the keyword static before the function name", + "Using the keyword static after the return type", + "None of the above" + ] + }, + { + "id": "book-ch3_370", + "correctOptionIndex": 1, + "keyedAnswer": "With the keyword 'static' and the return type of the function", + "correctOptionText": "With the keyword 'static' and the return type of the function", + "options": [ + "With the keyword 'static' and the return type of the function", + "With the keyword 'static' and the access specifier of the function", + "With the keyword 'static' and the name of the function", + "None of the above" + ] + } + ] + }, + { + "reason": "DIVERGENT_PROSE", + "optionSetsIdentical": false, + "stem": "Which of the following statements is true about static functions in C++?", + "copies": [ + { + "id": "book-ch3_360", + "correctOptionIndex": 1, + "keyedAnswer": "They can access only static data members of the class", + "correctOptionText": "They can access only static data members of the class", + "options": [ + "They can access only static data members of the class", + "They can access only non-static data members of the class", + "They cannot access any data members of the class", + "None of the above" + ] + }, + { + "id": "book-ch3_363", + "correctOptionIndex": 1, + "keyedAnswer": "They cannot access non-static data members", + "correctOptionText": "They cannot access non-static data members", + "options": [ + "They cannot access non-static data members", + "They can access non-static data members", + "They can be virtual", + "They can be called using an instance of the class" + ] + }, + { + "id": "book-ch3_371", + "correctOptionIndex": 2, + "keyedAnswer": "They cannot be virtual", + "correctOptionText": "They cannot be virtual", + "options": [ + "They can be virtual", + "They cannot be virtual", + "They can be pure virtual", + "None of the above" + ] + } + ] + }, + { + "reason": "DIVERGENT_PROSE", + "optionSetsIdentical": false, + "stem": "What is a constant member function in C++?", + "copies": [ + { + "id": "book-ch3_375", + "correctOptionIndex": 1, + "keyedAnswer": "A member function that cannot modify any data members of the class", + "correctOptionText": "A member function that cannot modify any data members of the class", + "options": [ + "A member function that cannot modify any data members of the class", + "A member function that can modify any data members of the class", + "A member function that cannot be called by const objects of the class", + "None of the above" + ] + }, + { + "id": "book-ch3_383", + "correctOptionIndex": 1, + "keyedAnswer": "A member function that cannot be modified", + "correctOptionText": "A member function that cannot be modified", + "options": [ + "A member function that cannot be modified", + "A member function that can be called on a constant object only", + "A member function that does not have any return type", + "None of the above" + ] + } + ] + }, + { + "reason": "DIVERGENT_PROSE", + "optionSetsIdentical": false, + "stem": "Which of the following statements is true about constant objects in C++?", + "copies": [ + { + "id": "book-ch3_379", + "correctOptionIndex": 1, + "keyedAnswer": "They cannot modify any data members of the class", + "correctOptionText": "They cannot modify any data members of the class", + "options": [ + "They cannot modify any data members of the class", + "They can modify only constant data members of the class", + "They can modify any data members of the class", + "None of the above" + ] + }, + { + "id": "book-ch3_384", + "correctOptionIndex": 1, + "keyedAnswer": "They cannot modify the data members of the class", + "correctOptionText": "They cannot modify the data members of the class", + "options": [ + "They cannot modify the data members of the class", + "They can modify the data members of the class", + "They can modify the data members of the class only if they are declared mutable", + "None of the above" + ] + }, + { + "id": "book-ch3_386", + "correctOptionIndex": 3, + "keyedAnswer": "They can be created using the const keyword before the object name", + "correctOptionText": "They can be created using the const keyword before the object name", + "options": [ + "They can be created using the const keyword before the class name", + "They can be created using the const keyword after the object name", + "They can be created using the const keyword before the object name", + "None of the above" + ] + }, + { + "id": "book-ch3_387", + "correctOptionIndex": 2, + "keyedAnswer": "They cannot call non-constant member functions of the class", + "correctOptionText": "They cannot call non-constant member functions of the class", + "options": [ + "They can call non-constant member functions of the class", + "They cannot call non-constant member functions of the class", + "They can call non-constant member functions of the class only if the functions are declared const", + "None of the above" + ] + }, + { + "id": "book-ch3_388", + "correctOptionIndex": 1, + "keyedAnswer": "They can access only constant member functions of the class", + "correctOptionText": "They can access only constant member functions of the class", + "options": [ + "They can access only constant member functions of the class", + "They can access only non-constant member functions of the class", + "They can access both constant and non-constant member functions of the class", + "None of the above" + ] + } + ] + }, + { + "reason": "DIVERGENT_PROSE", + "optionSetsIdentical": false, + "stem": "The Least Recently Used (LRU) algorithm is used for:", + "copies": [ + { + "id": "book-ch4_14", + "correctOptionIndex": 3, + "keyedAnswer": "Cache replacement", + "correctOptionText": "Cache replacement", + "options": [ + "CPU scheduling", + "Memory allocation", + "Cache replacement", + "Disk scheduling" + ] + }, + { + "id": "book-ch7_50", + "correctOptionIndex": 3, + "keyedAnswer": "Page replacement", + "correctOptionText": "Page replacement", + "options": [ + "CPU scheduling", + "Memory allocation", + "Page replacement", + "Disk scheduling" + ] + } + ] + }, + { + "reason": "DIVERGENT_PROSE", + "optionSetsIdentical": false, + "stem": "What is the difference between volatile and non-volatile memory?", + "copies": [ + { + "id": "book-ch4_62", + "correctOptionIndex": 1, + "keyedAnswer": "Volatile memory loses its contents when power is lost, while non-volatile memory retains its contents", + "correctOptionText": "Volatile memory loses its contents when power is lost, while non-volatile memory retains its contents", + "options": [ + "Volatile memory loses its contents when power is lost, while non-volatile memory retains its contents", + "Volatile memory is slower than non-volatile memory", + "Volatile memory is used for long-term storage, while non-volatile memory is used for temporary storage", + "Volatile memory is more expensive than non-volatile memory" + ] + }, + { + "id": "book-ch4_202", + "correctOptionIndex": 2, + "keyedAnswer": "Volatile memory requires power to retain its data, while non-volatile memory retains data even without power", + "correctOptionText": "Volatile memory requires power to retain its data, while non-volatile memory retains data even without power", + "options": [ + "Volatile memory can only be read from, while non-volatile memory can be both read and written to", + "Volatile memory requires power to retain its data, while non-volatile memory retains data even without power", + "Volatile memory is faster than non-volatile memory", + "Non-volatile memory has a higher storage capacity than volatile memory" + ] + } + ] + }, + { + "reason": "DIVERGENT_PROSE", + "optionSetsIdentical": false, + "stem": "Which of the following is not an arithmetic operation performed by the ALU?", + "copies": [ + { + "id": "book-ch4_130", + "correctOptionIndex": 3, + "keyedAnswer": "Shift left", + "correctOptionText": "Shift left", + "options": [ + "Increment", + "Decrement", + "Shift left", + "Addition" + ] + }, + { + "id": "book-ch4_136", + "correctOptionIndex": 4, + "keyedAnswer": "Comparison", + "correctOptionText": "Comparison", + "options": [ + "Addition", + "Subtraction", + "Multiplication", + "Comparison" + ] + } + ] + }, + { + "reason": "DIVERGENT_PROSE", + "optionSetsIdentical": false, + "stem": "Which of the following is not a characteristic of a multiprocessor system?", + "copies": [ + { + "id": "book-ch4_280", + "correctOptionIndex": 4, + "keyedAnswer": "Sequential execution", + "correctOptionText": "Sequential execution", + "options": [ + "Parallelism", + "Scalability", + "Fault tolerance", + "Sequential execution" + ] + }, + { + "id": "book-ch4_288", + "correctOptionIndex": 4, + "keyedAnswer": "Single processing unit", + "correctOptionText": "Single processing unit", + "options": [ + "Parallelism", + "Scalability", + "Fault tolerance", + "Single processing unit" + ] + } + ] + }, + { + "reason": "DIVERGENT_PROSE", + "optionSetsIdentical": false, + "stem": "What is parallelism in a multiprocessor system?", + "copies": [ + { + "id": "book-ch4_281", + "correctOptionIndex": 1, + "keyedAnswer": "The ability of multiple processors to execute instructions simultaneously", + "correctOptionText": "The ability of multiple processors to execute instructions simultaneously", + "options": [ + "The ability of multiple processors to execute instructions simultaneously", + "The ability of a single processor to execute multiple threads of execution simultaneously", + "The ability of multiple input/output devices to communicate with each other simultaneously", + "The ability of a single input/output device to handle multiple input/output operations simultaneously" + ] + }, + { + "id": "book-ch4_289", + "correctOptionIndex": 3, + "keyedAnswer": "The ability to use multiple processors to complete a single task", + "correctOptionText": "The ability to use multiple processors to complete a single task", + "options": [ + "The ability to run multiple tasks simultaneously", + "The ability to share resources between processors", + "The ability to use multiple processors to complete a single task", + "The ability to increase the clock speed of a processor" + ] + } + ] + }, + { + "reason": "DIVERGENT_PROSE", + "optionSetsIdentical": false, + "stem": "What is scalability in a multiprocessor system?", + "copies": [ + { + "id": "book-ch4_282", + "correctOptionIndex": 2, + "keyedAnswer": "The ability of the system to increase performance as more processors are added", + "correctOptionText": "The ability of the system to increase performance as more processors are added", + "options": [ + "The ability of the system to handle multiple users simultaneously", + "The ability of the system to increase performance as more processors are added", + "The ability of the system to recover from failures automatically", + "The ability of the system to communicate with other systems" + ] + }, + { + "id": "book-ch4_290", + "correctOptionIndex": 3, + "keyedAnswer": "The ability to add more processors to the system as needed", + "correctOptionText": "The ability to add more processors to the system as needed", + "options": [ + "The ability to run more tasks simultaneously", + "The ability to increase the memory capacity of the system", + "The ability to add more processors to the system as needed", + "The ability to reduce power consumption" + ] + } + ] + }, + { + "reason": "DIVERGENT_PROSE", + "optionSetsIdentical": false, + "stem": "What is cache coherence in a multiprocessor system?", + "copies": [ + { + "id": "book-ch4_286", + "correctOptionIndex": 1, + "keyedAnswer": "The ability of the system to maintain consistency of data stored in the caches of multiple processors", + "correctOptionText": "The ability of the system to maintain consistency of data stored in the caches of multiple processors", + "options": [ + "The ability of the system to maintain consistency of data stored in the caches of multiple processors", + "The ability of the system to maintain consistency of data stored in the main memory", + "The ability of the system to communicate with other systems", + "The ability of the system to handle multiple input/output operations simultaneously" + ] + }, + { + "id": "book-ch4_293", + "correctOptionIndex": 1, + "keyedAnswer": "The ability to maintain consistency of shared data in different processor caches", + "correctOptionText": "The ability to maintain consistency of shared data in different processor caches", + "options": [ + "The ability to maintain consistency of shared data in different processor caches", + "The ability to reduce the number of cache misses", + "The ability to switch between processors seamlessly", + "The ability to recover from failures automatically" + ] + } + ] + }, + { + "reason": "DIVERGENT_PROSE", + "optionSetsIdentical": false, + "stem": "What is an embedded system?", + "copies": [ + { + "id": "book-ch4_333", + "correctOptionIndex": 3, + "keyedAnswer": "A computer system that is embedded within a larger device", + "correctOptionText": "A computer system that is embedded within a larger device", + "options": [ + "A system with no computing capabilities", + "A network of computers connected together", + "A computer system that is embedded within a larger device", + "A computer system with a large memory and processing power" + ] + }, + { + "id": "book-ch4_342", + "correctOptionIndex": 1, + "keyedAnswer": "A system designed to perform a specific task", + "correctOptionText": "A system designed to perform a specific task", + "options": [ + "A system designed to perform a specific task", + "A system that is connected to the internet", + "A system that is used for gaming", + "A system that is used for general-purpose computing" + ] + }, + { + "id": "book-ch4_378", + "correctOptionIndex": 1, + "keyedAnswer": "A computer system used in industrial control applications", + "correctOptionText": "A computer system used in industrial control applications", + "options": [ + "A computer system used in industrial control applications", + "A computer system that is always connected to the internet", + "A computer system used for gaming", + "A computer system that is only used for word processing" + ] + } + ] + }, + { + "reason": "DIVERGENT_PROSE", + "optionSetsIdentical": false, + "stem": "Which of the following is NOT a characteristic of an embedded system?", + "copies": [ + { + "id": "book-ch4_343", + "correctOptionIndex": 3, + "keyedAnswer": "General-purpose computing", + "correctOptionText": "General-purpose computing", + "options": [ + "Small size", + "Limited power", + "General-purpose computing", + "Low cost" + ] + }, + { + "id": "book-ch4_356", + "correctOptionIndex": 3, + "keyedAnswer": "Standard operating system", + "correctOptionText": "Standard operating system", + "options": [ + "High reliability", + "Limited resources", + "Standard operating system", + "Real-time operation" + ] + }, + { + "id": "book-ch4_381", + "correctOptionIndex": 3, + "keyedAnswer": "High processing speed", + "correctOptionText": "High processing speed", + "options": [ + "Low power consumption", + "Small form factor", + "High processing speed", + "Real-time operation" + ] + } + ] + }, + { + "reason": "DIVERGENT_PROSE", + "optionSetsIdentical": false, + "stem": "Which of the following is NOT an example of an embedded system?", + "copies": [ + { + "id": "book-ch4_344", + "correctOptionIndex": 2, + "keyedAnswer": "Home computer", + "correctOptionText": "Home computer", + "options": [ + "Smart watch", + "Home computer", + "Microwave oven", + "Airplane navigation system" + ] + }, + { + "id": "book-ch4_379", + "correctOptionIndex": 4, + "keyedAnswer": "Personal computer", + "correctOptionText": "Personal computer", + "options": [ + "Smartwatch", + "Traffic light control system", + "Microwave oven", + "Personal computer" + ] + } + ] + }, + { + "reason": "DIVERGENT_PROSE", + "optionSetsIdentical": false, + "stem": "What is the purpose of a real-time operating system (RTOS) in an embedded system?", + "copies": [ + { + "id": "book-ch4_348", + "correctOptionIndex": 2, + "keyedAnswer": "To manage system resources and scheduling", + "correctOptionText": "To manage system resources and scheduling", + "options": [ + "To provide a graphical user interface (GUI)", + "To manage system resources and scheduling", + "To provide internet connectivity", + "To provide audio and video output" + ] + }, + { + "id": "book-ch4_391", + "correctOptionIndex": 1, + "keyedAnswer": "To schedule and manage tasks in real-time.", + "correctOptionText": "To schedule and manage tasks in real-time.", + "options": [ + "To schedule and manage tasks in real-time.", + "To provide a graphical user interface for the user.", + "To manage memory usage in the system.", + "To provide network connectivity." + ] + } + ] + }, + { + "reason": "DIVERGENT_PROSE", + "optionSetsIdentical": false, + "stem": "Which of the following is not a type of embedded system?", + "copies": [ + { + "id": "book-ch4_352", + "correctOptionIndex": 4, + "keyedAnswer": "Web-based embedded system", + "correctOptionText": "Web-based embedded system", + "options": [ + "Standalone embedded system", + "Mobile embedded system", + "Networked embedded system", + "Web-based embedded system" + ] + }, + { + "id": "book-ch4_383", + "correctOptionIndex": 4, + "keyedAnswer": "Mainframe system", + "correctOptionText": "Mainframe system", + "options": [ + "Standalone system", + "Real-time system", + "Networked system", + "Mainframe system" + ] + } + ] + }, + { + "reason": "DIVERGENT_PROSE", + "optionSetsIdentical": false, + "stem": "Which of the following is an example of an ASIP?", + "copies": [ + { + "id": "book-ch4_413", + "correctOptionIndex": 3, + "keyedAnswer": "Tensilica Xtensa", + "correctOptionText": "Tensilica Xtensa", + "options": [ + "Intel Core i7", + "ARM Cortex-A9", + "Tensilica Xtensa", + "AMD Ryzen" + ] + }, + { + "id": "book-ch4_417", + "correctOptionIndex": 4, + "keyedAnswer": "Digital Signal Processor (DSP)", + "correctOptionText": "Digital Signal Processor (DSP)", + "options": [ + "Intel Core i7", + "ARM Cortex-A53", + "Qualcomm Snapdragon", + "Digital Signal Processor (DSP)" + ] + } + ] + }, + { + "reason": "DIVERGENT_PROSE", + "optionSetsIdentical": false, + "stem": "System behavior in object-oriented analysis can be represented using:", + "copies": [ + { + "id": "book-ch8_28", + "correctOptionIndex": 2, + "keyedAnswer": "Sequence diagrams", + "correctOptionText": "Sequence diagrams", + "options": [ + "Class diagrams", + "Sequence diagrams", + "Component diagrams", + "Deployment diagrams" + ] + }, + { + "id": "book-ch8_61", + "correctOptionIndex": 2, + "keyedAnswer": "State diagrams", + "correctOptionText": "State diagrams", + "options": [ + "Class diagrams", + "State diagrams", + "Component diagrams", + "Deployment diagrams" + ] + } + ] + }, + { + "reason": "DIVERGENT_PROSE", + "optionSetsIdentical": false, + "stem": "Exception handling in object-oriented programming:", + "copies": [ + { + "id": "book-ch8_36", + "correctOptionIndex": 2, + "keyedAnswer": "Provides a mechanism for handling runtime errors", + "correctOptionText": "Provides a mechanism for handling runtime errors", + "options": [ + "Should be avoided", + "Provides a mechanism for handling runtime errors", + "Is only available in Java", + "Decreases code reliability" + ] + }, + { + "id": "book-ch8_69", + "correctOptionIndex": 2, + "keyedAnswer": "Provides a structured way to handle errors", + "correctOptionText": "Provides a structured way to handle errors", + "options": [ + "Should be avoided", + "Provides a structured way to handle errors", + "Is only available in C++", + "Decreases code reliability" + ] + } + ] + } + ], + "appliedDeletions": [ + { + "stem": "What is the purpose of star-delta conversion?", + "answer": "To reduce the starting current of a motor", + "kept": "book-ch1_48", + "dropped": [ + "book-ch1_58" + ] + }, + { + "stem": "Which type of conversion is commonly used in motor control circuits?", + "answer": "Star-delta conversion", + "kept": "book-ch1_53", + "dropped": [ + "book-ch1_62" + ] + }, + { + "stem": "Which type of conversion is commonly used in power distribution systems?", + "answer": "Delta-star conversion", + "kept": "book-ch1_54", + "dropped": [ + "book-ch1_63" + ] + }, + { + "stem": "Which of the following circuits is an example of a non-linear circuit?", + "answer": "Diode rectifier circuit", + "kept": "book-ch1_87", + "dropped": [ + "book-ch1_93" + ] + }, + { + "stem": "Which of the following circuits requires an external source of power to function?", + "answer": "Active circuit", + "kept": "book-ch1_122", + "dropped": [ + "book-ch1_131" + ] + }, + { + "stem": "What is the Thevenin equivalent circuit?", + "answer": "A circuit consisting of a single voltage source and a single resistor", + "kept": "book-ch1_162", + "dropped": [ + "book-ch1_173" + ] + }, + { + "stem": "What is the first step in determining the Thevenin equivalent circuit?", + "answer": "Identify the load circuit that is connected to the circuit of interest", + "kept": "book-ch1_164", + "dropped": [ + "book-ch1_174" + ] + }, + { + "stem": "What is the second step in determining the Thevenin equivalent circuit?", + "answer": "Remove the load circuit from the circuit of interest", + "kept": "book-ch1_165", + "dropped": [ + "book-ch1_175" + ] + }, + { + "stem": "What is the third step in determining the Thevenin equivalent circuit?", + "answer": "Determine the open-circuit voltage Vth across the terminals where the load was connected", + "kept": "book-ch1_166", + "dropped": [ + "book-ch1_176" + ] + }, + { + "stem": "What is the fourth step in determining the Thevenin equivalent circuit?", + "answer": "Determine the internal resistance Rth of the circuit between those terminals", + "kept": "book-ch1_167", + "dropped": [ + "book-ch1_177" + ] + }, + { + "stem": "Can Thevenin's theorem be used for non-linear circuits?", + "answer": "No, it only applies to linear circuits", + "kept": "book-ch1_170", + "dropped": [ + "book-ch1_178" + ] + }, + { + "stem": "What is the Norton equivalent circuit of a linear circuit?", + "answer": "A current source and a parallel resistor", + "kept": "book-ch1_185", + "dropped": [ + "book-ch1_192" + ] + }, + { + "stem": "What is the advantage of using Norton's theorem?", + "answer": "It simplifies complex circuits", + "kept": "book-ch1_187", + "dropped": [ + "book-ch1_196" + ] + }, + { + "stem": "What is the maximum power transfer theorem?", + "answer": "It states that the power transferred from a source to a load is maximum when the load impedance is equal to the source impedance.", + "kept": "book-ch1_202", + "dropped": [ + "book-ch1_268" + ] + }, + { + "stem": "What type of circuits does the maximum power transfer theorem apply to?", + "answer": "Linear circuits only.", + "kept": "book-ch1_203", + "dropped": [ + "book-ch1_269" + ] + }, + { + "stem": "What is the advantage of applying the maximum power transfer theorem in a circuit?", + "answer": "It reduces the power loss in the circuit.", + "kept": "book-ch1_204", + "dropped": [ + "book-ch1_270" + ] + }, + { + "stem": "How does the maximum power transfer theorem help in designing power systems?", + "answer": "All of the above.", + "kept": "book-ch1_205", + "dropped": [ + "book-ch1_271" + ] + }, + { + "stem": "What happens when the load impedance is not equal to the source impedance in a circuit?", + "answer": "The power transfer is minimum.", + "kept": "book-ch1_206", + "dropped": [ + "book-ch1_272" + ] + }, + { + "stem": "Is the maximum power transfer theorem applicable to AC circuits?", + "answer": "Yes, it is applicable to AC circuits.", + "kept": "book-ch1_207", + "dropped": [ + "book-ch1_273" + ] + }, + { + "stem": "What is the formula for calculating the maximum power transfer in a circuit?", + "answer": "P=I^2R", + "kept": "book-ch1_208", + "dropped": [ + "book-ch1_274" + ] + }, + { + "stem": "Can the maximum power transfer occur at multiple values of load impedance?", + "answer": "No, it can occur at only one value of load impedance.", + "kept": "book-ch1_209", + "dropped": [ + "book-ch1_275" + ] + }, + { + "stem": "What is the condition for maximum power transfer in a circuit?", + "answer": "The load impedance must be equal to the source impedance.", + "kept": "book-ch1_210", + "dropped": [ + "book-ch1_276" + ] + }, + { + "stem": "The maximum power transfer theorem is applicable to:", + "answer": "Linear circuits only.", + "kept": "book-ch1_212", + "dropped": [ + "book-ch1_278" + ] + }, + { + "stem": "The maximum power transfer occurs when:", + "answer": "The load impedance is equal to the source impedance", + "kept": "book-ch1_213", + "dropped": [ + "book-ch1_279" + ] + }, + { + "stem": "What is the formula for calculating the maximum power transfer?", + "answer": "Pmax=V^2/4R", + "kept": "book-ch1_214", + "dropped": [ + "book-ch1_280" + ] + }, + { + "stem": "In which applications is the maximum power transfer theorem useful?", + "answer": "All of the above", + "kept": "book-ch1_215", + "dropped": [ + "book-ch1_281" + ] + }, + { + "stem": "What happens when the load impedance is much larger than the source impedance?", + "answer": "The power transfer is minimum.", + "kept": "book-ch1_216", + "dropped": [ + "book-ch1_282" + ] + }, + { + "stem": "The maximum power transfer theorem helps to:", + "answer": "Minimize the amount of energy lost in transmission.", + "kept": "book-ch1_217", + "dropped": [ + "book-ch1_283" + ] + }, + { + "stem": "The maximum power transfer theorem is useful in designing and optimizing:", + "answer": "Power systems", + "kept": "book-ch1_218", + "dropped": [ + "book-ch1_284" + ] + }, + { + "stem": "A series R-C circuit has a resistor of 100 Ω and a capacitor of 10 µF. What is the cutoff frequency?", + "answer": "159 Hz", + "kept": "book-ch1_223", + "dropped": [ + "book-ch1_289" + ] + }, + { + "stem": "In an R-L circuit, what happens to the impedance as the frequency increases?", + "answer": "It increases", + "kept": "book-ch1_224", + "dropped": [ + "book-ch1_290" + ] + }, + { + "stem": "Which type of circuit contains an inductor and a resistor?", + "answer": "R-L circuit", + "kept": "book-ch1_229", + "dropped": [ + "book-ch1_295" + ] + }, + { + "stem": "What happens to the current in an R-L circuit if the inductance is increased?", + "answer": "The current remains the same", + "kept": "book-ch1_232", + "dropped": [ + "book-ch1_298" + ] + }, + { + "stem": "In an R-C circuit, what happens to the current as the capacitor becomes fully charged?", + "answer": "The current becomes zero", + "kept": "book-ch1_233", + "dropped": [ + "book-ch1_299" + ] + }, + { + "stem": "In an R-L-C circuit, what happens to the phase angle at resonance?", + "answer": "The phase angle is zero", + "kept": "book-ch1_236", + "dropped": [ + "book-ch1_302" + ] + }, + { + "stem": "What is the resonant frequency of an AC series circuit consisting of a 20mH Inductor and a 10µF capacitor?", + "answer": "159.15 Hz", + "kept": "book-ch1_237", + "dropped": [ + "book-ch1_303" + ] + }, + { + "stem": "What is the resonant frequency of an AC parallel circuit consisting of a 10mH inductor and a capacitor 100µF?", + "answer": "159.15 Hz", + "kept": "book-ch1_238", + "dropped": [ + "book-ch1_304" + ] + }, + { + "stem": "What is the phase angle between the voltage and current in an AC series resonant circuit at resonance?", + "answer": "0 degrees", + "kept": "book-ch1_243", + "dropped": [ + "book-ch1_309" + ] + }, + { + "stem": "What is the phase angle between the voltage and current in an AC parallel resonant circuit at resonance?", + "answer": "0 degrees", + "kept": "book-ch1_244", + "dropped": [ + "book-ch1_310" + ] + }, + { + "stem": "In an AC series resonant circuit, at the resonant frequency, what is the power factor?", + "answer": "Unity", + "kept": "book-ch1_246", + "dropped": [ + "book-ch1_312" + ] + }, + { + "stem": "What is the resonant frequency of an AC series resonant circuit with an inductance of 5mH and a capacitance 10µF?", + "answer": "3.18 kHz", + "kept": "book-ch1_247", + "dropped": [ + "book-ch1_313" + ] + }, + { + "stem": "What is the phase relationship between the voltage across the capacitor and the voltage across the inductor in an AC series resonant circuit at resonance?", + "answer": "They are 180 degrees out of phase", + "kept": "book-ch1_250", + "dropped": [ + "book-ch1_316" + ] + }, + { + "stem": "What is the phase relationship between the current and the voltage in an AC series resonant circuit at resonance?", + "answer": "They are in phase", + "kept": "book-ch1_251", + "dropped": [ + "book-ch1_317" + ] + }, + { + "stem": "What is the unit of active power?", + "answer": "Watts (W)", + "kept": "book-ch1_252", + "dropped": [ + "book-ch1_318" + ] + }, + { + "stem": "What is the formula for reactive power?", + "answer": "Q=V*I*sin(theta)", + "kept": "book-ch1_253", + "dropped": [ + "book-ch1_319" + ] + }, + { + "stem": "What is the unit of reactive power?", + "answer": "Volt-amperes reactive (VAR)", + "kept": "book-ch1_254", + "dropped": [ + "book-ch1_320" + ] + }, + { + "stem": "What is the formula for active power?", + "answer": "P=V*I*cos(theta)", + "kept": "book-ch1_255", + "dropped": [ + "book-ch1_321" + ] + }, + { + "stem": "What is the unit of apparent power?", + "answer": "Volt-amperes (VA)", + "kept": "book-ch1_256", + "dropped": [ + "book-ch1_322" + ] + }, + { + "stem": "What is the formula for power factor?", + "answer": "pf=P/S", + "kept": "book-ch1_257", + "dropped": [ + "book-ch1_323" + ] + }, + { + "stem": "What is the unit of power factor?", + "answer": "None of the above", + "kept": "book-ch1_258", + "dropped": [ + "book-ch1_324" + ] + }, + { + "stem": "What is the formula for apparent power?", + "answer": "S=V", + "kept": "book-ch1_260", + "dropped": [ + "book-ch1_326" + ] + }, + { + "stem": "What is the significance of power factor in electrical circuits?", + "answer": "It measures the efficiency of the circuit in using the power delivered to it", + "kept": "book-ch1_261", + "dropped": [ + "book-ch1_327" + ] + }, + { + "stem": "Which of the following is a measure of how efficiently the circuit is using the power delivered to it?", + "answer": "Power factor", + "kept": "book-ch1_262", + "dropped": [ + "book-ch1_328" + ] + }, + { + "stem": "Which type of power is used in the circuit to perform useful work?", + "answer": "Active power", + "kept": "book-ch1_263", + "dropped": [ + "book-ch1_329" + ] + }, + { + "stem": "Which type of power is stored and released by the circuit?", + "answer": "Reactive power", + "kept": "book-ch1_264", + "dropped": [ + "book-ch1_330" + ] + }, + { + "stem": "What is the power factor of a circuit that has 100 W of active power and 120 VA of apparent power?", + "answer": "0.83", + "kept": "book-ch1_265", + "dropped": [ + "book-ch1_331" + ] + }, + { + "stem": "What happens to the power factor of a circuit if the reactive power increases?", + "answer": "It decreases", + "kept": "book-ch1_266", + "dropped": [ + "book-ch1_332" + ] + }, + { + "stem": "Which of the following is not a measure of power in an AC circuit?", + "answer": "Hertz (Hz)", + "kept": "book-ch1_267", + "dropped": [ + "book-ch1_333" + ] + }, + { + "stem": "What determines the frequency of an RC oscillator?", + "answer": "The time constant of the RC circuit", + "kept": "book-ch1_372", + "dropped": [ + "book-ch1_382" + ] + }, + { + "stem": "What is the duty cycle of a square wave generator?", + "answer": "The ratio of the pulse width to the time period", + "kept": "book-ch1_391", + "dropped": [ + "book-ch2_123" + ] + }, + { + "stem": "What type of waveform is produced by a triangle wave generator?", + "answer": "A waveform with a linearly increasing or decreasing amplitude", + "kept": "book-ch1_392", + "dropped": [ + "book-ch2_124" + ] + }, + { + "stem": "What type of circuit is commonly used to generate square wave signals?", + "answer": "An op-amp circuit", + "kept": "book-ch1_393", + "dropped": [ + "book-ch2_125" + ] + }, + { + "stem": "What is the advantage of using a relaxation oscillator for square wave generation?", + "answer": "Simplicity and low cost", + "kept": "book-ch1_394", + "dropped": [ + "book-ch2_126" + ] + }, + { + "stem": "What is the role of a Schmitt trigger in a square wave generator circuit?", + "answer": "To generate a clean and stable square wave signal", + "kept": "book-ch1_395", + "dropped": [ + "book-ch2_127" + ] + }, + { + "stem": "What is the advantage of using a ramp generator for triangle wave generation?", + "answer": "Simplicity and low cost", + "kept": "book-ch1_397", + "dropped": [ + "book-ch2_129" + ] + }, + { + "stem": "What type of circuit is commonly used to generate triangle wave signals?", + "answer": "An integrator circuit", + "kept": "book-ch1_398", + "dropped": [ + "book-ch2_130" + ] + }, + { + "stem": "What is the amplitude of a triangle wave generator determined by?", + "answer": "The input voltage of the oscillator", + "kept": "book-ch1_399", + "dropped": [ + "book-ch2_131" + ] + }, + { + "stem": "What is the advantage of using an op-amp circuit for triangle wave generation?", + "answer": "Simplicity and low cost", + "kept": "book-ch1_400", + "dropped": [ + "book-ch2_132" + ] + }, + { + "stem": "Which waveform generator is typically used for testing digital circuits?", + "answer": "Square wave generator", + "kept": "book-ch1_401", + "dropped": [ + "book-ch2_133" + ] + }, + { + "stem": "What is the duty cycle of a square wave?", + "answer": "The ratio of the pulse width to the time period", + "kept": "book-ch1_402", + "dropped": [ + "book-ch2_134" + ] + }, + { + "stem": "What is the advantage of using a square wave generator over other types of waveform generators?", + "answer": "Simplicity and low cost", + "kept": "book-ch1_403", + "dropped": [ + "book-ch2_135" + ] + }, + { + "stem": "Which waveform generator is capable of producing more complex waveforms than a square wave generator?", + "answer": "Arbitrary waveform generator", + "kept": "book-ch1_404", + "dropped": [ + "book-ch2_136" + ] + }, + { + "stem": "What is the shape of the waveform produced by a triangle wave generator?", + "answer": "A smoothly varying waveform with a linear rise and fall", + "kept": "book-ch1_405", + "dropped": [ + "book-ch2_137" + ] + }, + { + "stem": "What is the advantage of using a triangle wave generator over a square wave generator?", + "answer": "More gradual transitions and reduced harmonic content", + "kept": "book-ch1_407", + "dropped": [ + "book-ch2_139" + ] + }, + { + "stem": "Which type of waveform generator is commonly used in audio applications?", + "answer": "Sine wave generator", + "kept": "book-ch1_408", + "dropped": [ + "book-ch2_140" + ] + }, + { + "stem": "What is the shape of the waveform produced by a sawtooth wave generator?", + "answer": "A waveform with a rapidly changing rise and a slow fall", + "kept": "book-ch1_409", + "dropped": [ + "book-ch2_141" + ] + }, + { + "stem": "What is the advantage of using an arbitrary waveform generator over other types of waveform generators?", + "answer": "The ability to generate complex and customized waveforms", + "kept": "book-ch1_410", + "dropped": [ + "book-ch2_142" + ] + }, + { + "stem": "What is the amplifying element used in a Class A output stage?", + "answer": "Bipolar Junction Transistor", + "kept": "book-ch1_411", + "dropped": [ + "book-ch2_143" + ] + }, + { + "stem": "What causes crossover distortion in a Class B output stage?", + "answer": "The switching between the amplifying elements causes a gap in the output signal.", + "kept": "book-ch1_412", + "dropped": [ + "book-ch2_144" + ] + }, + { + "stem": "What is the advantage of a Class AB output stage over a Class B output stage?", + "answer": "Reduced crossover distortion", + "kept": "book-ch1_413", + "dropped": [ + "book-ch2_145" + ] + }, + { + "stem": "What is the operating mode of a Class C output stage?", + "answer": "Non-linear", + "kept": "book-ch1_414", + "dropped": [ + "book-ch2_146" + ] + }, + { + "stem": "What is the advantage of a Class D output stage over other output stages?", + "answer": "High efficiency", + "kept": "book-ch1_415", + "dropped": [ + "book-ch2_147" + ] + }, + { + "stem": "What is the primary disadvantage of a Class A output stage?", + "answer": "Low efficiency", + "kept": "book-ch1_416", + "dropped": [ + "book-ch2_148" + ] + }, + { + "stem": "Which type of output stage is suitable for RF amplifiers?", + "answer": "Class C", + "kept": "book-ch1_417", + "dropped": [ + "book-ch2_149" + ] + }, + { + "stem": "What is the biasing arrangement used in a Class AB output stage?", + "answer": "The bias voltage is varied to adjust the conduction angle.", + "kept": "book-ch1_418", + "dropped": [ + "book-ch2_150" + ] + }, + { + "stem": "Which type of output stage is used in audio power amplifiers?", + "answer": "Class AB", + "kept": "book-ch1_419", + "dropped": [ + "book-ch2_151" + ] + }, + { + "stem": "Which type of output stage is commonly used in switch-mode power supplies?", + "answer": "Class D", + "kept": "book-ch1_420", + "dropped": [ + "book-ch2_152" + ] + }, + { + "stem": "Which of the following is a characteristic of a class A output stage?", + "answer": "Low distortion", + "kept": "book-ch1_421", + "dropped": [ + "book-ch1_441", + "book-ch2_153", + "book-ch2_173" + ] + }, + { + "stem": "Which of the following output stages uses two amplifying elements that conduct for half of the input signal cycle each?", + "answer": "Class B", + "kept": "book-ch1_422", + "dropped": [ + "book-ch2_154" + ] + }, + { + "stem": "Which of the following output stages is a combination of class A and class B?", + "answer": "Class AB", + "kept": "book-ch1_423", + "dropped": [ + "book-ch2_155" + ] + }, + { + "stem": "Which of the following output stages is suitable for RF amplifiers?", + "answer": "Class C", + "kept": "book-ch1_424", + "dropped": [ + "book-ch2_156" + ] + }, + { + "stem": "Which of the following output stages uses pulse width modulation to convert the input signal into a train of pulses?", + "answer": "Class D", + "kept": "book-ch1_425", + "dropped": [ + "book-ch2_157" + ] + }, + { + "stem": "Which of the following is a disadvantage of a class B output stage?", + "answer": "Crossover distortion", + "kept": "book-ch1_426", + "dropped": [ + "book-ch2_158" + ] + }, + { + "stem": "Which of the following output stages is the most efficient?", + "answer": "Class C", + "kept": "book-ch1_427", + "dropped": [ + "book-ch2_159" + ] + }, + { + "stem": "Which of the following output stages is the least efficient?", + "answer": "Class A", + "kept": "book-ch1_428", + "dropped": [ + "book-ch2_160" + ] + }, + { + "stem": "Which of the following output stages has a biasing arrangement that allows the amplifying element to conduct slightly even when there is no input signal?", + "answer": "Class AB", + "kept": "book-ch1_429", + "dropped": [ + "book-ch2_161" + ] + }, + { + "stem": "Which of the following output stages is suitable for high power audio amplifiers?", + "answer": "Class AB", + "kept": "book-ch1_430", + "dropped": [ + "book-ch2_162" + ] + }, + { + "stem": "What is the main advantage of a Class A output stage?", + "answer": "Low distortion", + "kept": "book-ch1_431", + "dropped": [ + "book-ch2_163" + ] + }, + { + "stem": "What is the main disadvantage of a Class A output stage?", + "answer": "Low efficiency", + "kept": "book-ch1_432", + "dropped": [ + "book-ch2_164" + ] + }, + { + "stem": "What type of biasing is commonly used in Class A output stages?", + "answer": "Fixed bias", + "kept": "book-ch1_433", + "dropped": [ + "book-ch2_165" + ] + }, + { + "stem": "What is the DC bias point of a Class A output stage?", + "answer": "Halfway between the positive and negative supply voltage", + "kept": "book-ch1_434", + "dropped": [ + "book-ch2_166" + ] + }, + { + "stem": "What is the maximum theoretical efficiency of a Class A output stage?", + "answer": "50%", + "kept": "book-ch1_435", + "dropped": [ + "book-ch2_167" + ] + }, + { + "stem": "What is the typical output power of a Class A amplifier?", + "answer": "1 watt to 10 watts", + "kept": "book-ch1_436", + "dropped": [ + "book-ch2_168" + ] + }, + { + "stem": "What type of load is commonly used in Class A output stages?", + "answer": "Resistive load", + "kept": "book-ch1_437", + "dropped": [ + "book-ch2_169" + ] + }, + { + "stem": "What is the main advantage of a Class A output stage over other amplifier configurations?", + "answer": "Low distortion", + "kept": "book-ch1_438", + "dropped": [ + "book-ch2_170" + ] + }, + { + "stem": "What type of input signal is best suited for a Class A output stage?", + "answer": "Sinusoidal signal", + "kept": "book-ch1_439", + "dropped": [ + "book-ch2_171" + ] + }, + { + "stem": "What is the typical voltage gain of a Class A amplifier?", + "answer": "10 to 100", + "kept": "book-ch1_440", + "dropped": [ + "book-ch2_172" + ] + }, + { + "stem": "In a Class A output stage, the amplifying device conducts for:", + "answer": "The entire input signal cycle", + "kept": "book-ch1_442", + "dropped": [ + "book-ch2_174" + ] + }, + { + "stem": "The efficiency of a Class A output stage is:", + "answer": "Low", + "kept": "book-ch1_443", + "dropped": [ + "book-ch2_175" + ] + }, + { + "stem": "What is the advantage of a Class A output stage over other classes of amplifiers?", + "answer": "Lower distortion", + "kept": "book-ch1_444", + "dropped": [ + "book-ch2_176" + ] + }, + { + "stem": "What is the key feature of a Class A output stage?", + "answer": "The amplifying device conducts for the entire input signal cycle", + "kept": "book-ch1_445", + "dropped": [ + "book-ch2_177" + ] + }, + { + "stem": "What is the typical efficiency of a Class A output stage?", + "answer": "25%", + "kept": "book-ch1_446", + "dropped": [ + "book-ch2_178" + ] + }, + { + "stem": "Which of the following is a disadvantage of a Class A output stage?", + "answer": "Low power output", + "kept": "book-ch1_447", + "dropped": [ + "book-ch2_179" + ] + }, + { + "stem": "Which type of amplifying device is commonly used in Class A output stages?", + "answer": "All of the above", + "kept": "book-ch1_448", + "dropped": [ + "book-ch2_180" + ] + }, + { + "stem": "What is the purpose of the biasing circuit in a Class A output stage?", + "answer": "To set the operating point of the amplifying device", + "kept": "book-ch1_449", + "dropped": [ + "book-ch2_181" + ] + }, + { + "stem": "What is the quiescent current of a Class A output stage?", + "answer": "The current flowing through the amplifying device when there is no input signal", + "kept": "book-ch1_450", + "dropped": [ + "book-ch2_182" + ] + }, + { + "stem": "Which of the following is a common application of a Class A output stage?", + "answer": "Audio power amplifiers", + "kept": "book-ch1_451", + "dropped": [ + "book-ch2_183" + ] + }, + { + "stem": "Which of the following is a characteristic of the output signal of a Class A output stage?", + "answer": "It depends on the input signal", + "kept": "book-ch1_452", + "dropped": [ + "book-ch2_184" + ] + }, + { + "stem": "Which of the following is a disadvantage of a Class A output stage in terms of power efficiency?", + "answer": "It generates more heat than other classes of amplifiers", + "kept": "book-ch1_453", + "dropped": [ + "book-ch2_185" + ] + }, + { + "stem": "What is a Class B output stage in amplifiers?", + "answer": "An amplifier configuration where the amplifying device conducts only for half of the input signal cycle", + "kept": "book-ch1_454", + "dropped": [ + "book-ch2_186" + ] + }, + { + "stem": "What is the advantage of a Class B output stage?", + "answer": "High power efficiency", + "kept": "book-ch1_455", + "dropped": [ + "book-ch2_187" + ] + }, + { + "stem": "What is crossover distortion in a Class B output stage?", + "answer": "A discontinuity in the output signal at the point where one device switches off and the other switches on", + "kept": "book-ch1_456", + "dropped": [ + "book-ch2_188" + ] + }, + { + "stem": "How is crossover distortion reduced in a Class B output stage?", + "answer": "By applying a small amount of bias current to the amplifying devices", + "kept": "book-ch1_457", + "dropped": [ + "book-ch2_189" + ] + }, + { + "stem": "What is the main application of Class B output stages?", + "answer": "Audio power amplifiers", + "kept": "book-ch1_458", + "dropped": [ + "book-ch2_190" + ] + }, + { + "stem": "What is the main disadvantage of Class B output stages?", + "answer": "Crossover distortion", + "kept": "book-ch1_459", + "dropped": [ + "book-ch2_191" + ] + }, + { + "stem": "What is the purpose of biasing in a Class B output stage?", + "answer": "To keep the amplifying devices slightly conductive even when there is no input signal", + "kept": "book-ch1_460", + "dropped": [ + "book-ch2_192" + ] + }, + { + "stem": "What is the output signal waveform of a Class B output stage?", + "answer": "A combination of the signals produced by each device", + "kept": "book-ch1_461", + "dropped": [ + "book-ch2_193" + ] + }, + { + "stem": "What type of load is typically used with a Class B output stage?", + "answer": "Resistive load", + "kept": "book-ch1_462", + "dropped": [ + "book-ch2_194" + ] + }, + { + "stem": "What is the maximum theoretical efficiency of a Class B output stage?", + "answer": "75%", + "kept": "book-ch1_463", + "dropped": [ + "book-ch2_195" + ] + }, + { + "stem": "In a Class B output stage, how many amplifying devices are used?", + "answer": "Two", + "kept": "book-ch1_464", + "dropped": [ + "book-ch2_196" + ] + }, + { + "stem": "What is the key advantage of a Class B output stage?", + "answer": "High power efficiency", + "kept": "book-ch1_465", + "dropped": [ + "book-ch2_197" + ] + }, + { + "stem": "What is the major disadvantage of a Class B output stage?", + "answer": "Crossover distortion", + "kept": "book-ch1_466", + "dropped": [ + "book-ch2_198" + ] + }, + { + "stem": "How does bias current help to address the issue of crossover distortion in a Class B output stage?", + "answer": "By keeping the amplifying devices slightly conductive", + "kept": "book-ch1_467", + "dropped": [ + "book-ch2_199" + ] + }, + { + "stem": "Which application is Class B output stage commonly used in?", + "answer": "High-power RF amplifiers", + "kept": "book-ch1_468", + "dropped": [ + "book-ch2_200" + ] + }, + { + "stem": "What is the output signal of a Class B output stage?", + "answer": "A combination of two signals produced by each device", + "kept": "book-ch1_469", + "dropped": [ + "book-ch2_201" + ] + }, + { + "stem": "Which type of amplifiers produce less distortion than Class B amplifiers?", + "answer": "Class AB amplifiers", + "kept": "book-ch1_470", + "dropped": [ + "book-ch2_202" + ] + }, + { + "stem": "What is the function of the load resistor in a Class B output stage?", + "answer": "To eliminate the crossover distortion", + "kept": "book-ch1_471", + "dropped": [ + "book-ch2_203" + ] + }, + { + "stem": "Which type of distortion is commonly associated with Class B output stages?", + "answer": "Crossover distortion", + "kept": "book-ch1_472", + "dropped": [ + "book-ch2_204" + ] + }, + { + "stem": "Which of the following is a limitation of using Class B amplifiers?", + "answer": "Low distortion", + "kept": "book-ch1_473", + "dropped": [ + "book-ch2_205" + ] + }, + { + "stem": "What is the main advantage of a Class AB output stage over a Class B output stage?", + "answer": "Lower distortion", + "kept": "book-ch1_474", + "dropped": [ + "book-ch2_206" + ] + }, + { + "stem": "What is the purpose of biasing both amplifying devices in a Class AB output stage?", + "answer": "To eliminate crossover distortion", + "kept": "book-ch1_475", + "dropped": [ + "book-ch2_207" + ] + }, + { + "stem": "Which of the following is not a characteristic of Class AB output stages?", + "answer": "High bias", + "kept": "book-ch1_476", + "dropped": [ + "book-ch2_208" + ] + }, + { + "stem": "In which application are Class AB output stages commonly used?", + "answer": "High-fidelity audio amplifiers", + "kept": "book-ch1_477", + "dropped": [ + "book-ch2_209" + ] + }, + { + "stem": "Which type of output stage offers the highest linearity?", + "answer": "Class A", + "kept": "book-ch1_478", + "dropped": [ + "book-ch2_210" + ] + }, + { + "stem": "What is the disadvantage of Class AB output stages compared to Class B output stages?", + "answer": "Lower power efficiency", + "kept": "book-ch1_479", + "dropped": [ + "book-ch2_211" + ] + }, + { + "stem": "Which of the following is not a benefit of using a Class AB output stage?", + "answer": "None of the above", + "kept": "book-ch1_480", + "dropped": [ + "book-ch2_212" + ] + }, + { + "stem": "Which type of output stage produces lower distortion than Class B output stages?", + "answer": "Both A and B", + "kept": "book-ch1_481", + "dropped": [ + "book-ch2_213" + ] + }, + { + "stem": "What is the key advantage of using a Class AB output stage?", + "answer": "High power efficiency and low distortion", + "kept": "book-ch1_482", + "dropped": [ + "book-ch2_214" + ] + }, + { + "stem": "What is the main disadvantage of Class A output stages compared to Class AB output stages?", + "answer": "Lower power efficiency", + "kept": "book-ch1_483", + "dropped": [ + "book-ch2_215" + ] + }, + { + "stem": "Which of the following statements is true about a Class AB output stage?", + "answer": "It has high power efficiency and low distortion.", + "kept": "book-ch1_484", + "dropped": [ + "book-ch2_216" + ] + }, + { + "stem": "Which type of output stage is commonly used in power supplies?", + "answer": "Class B", + "kept": "book-ch1_485", + "dropped": [ + "book-ch2_217" + ] + }, + { + "stem": "What is the main advantage of using a Class AB output stage in an audio amplifier?", + "answer": "High efficiency and low distortion", + "kept": "book-ch1_486", + "dropped": [ + "book-ch2_218" + ] + }, + { + "stem": "In a Class AB output stage, both amplifying devices are biased to conduct a small amount of current even when there is no input signal. What is the purpose of t", + "answer": "To reduce power efficiency", + "kept": "book-ch1_487", + "dropped": [ + "book-ch2_219" + ] + }, + { + "stem": "Which type of output stage is commonly used in high-fidelity audio amplifiers?", + "answer": "Class AB", + "kept": "book-ch1_488", + "dropped": [ + "book-ch2_220" + ] + }, + { + "stem": "What is the process of gradual conduction transfer in a Class AB output stage known as?", + "answer": "Crossover", + "kept": "book-ch1_489", + "dropped": [ + "book-ch2_221" + ] + }, + { + "stem": "Which of the following is a disadvantage of using a Class AB output stage?", + "answer": "Low power efficiency", + "kept": "book-ch1_490", + "dropped": [ + "book-ch2_222" + ] + }, + { + "stem": "In a Class AB output stage, how do the amplifying devices behave when there is an input signal?", + "answer": "One conducts fully and the other conducts partially.", + "kept": "book-ch1_491", + "dropped": [ + "book-ch2_223" + ] + }, + { + "stem": "What is the main purpose of a Class AB output stage?", + "answer": "To reduce distortion", + "kept": "book-ch1_492", + "dropped": [ + "book-ch2_224" + ] + }, + { + "stem": "What is the purpose of biasing the Class AB output stage in amplifiers?", + "answer": "All of the above", + "kept": "book-ch1_493", + "dropped": [ + "book-ch2_225", + "book-ch2_358", + "book-ch2_452" + ] + }, + { + "stem": "What is a common biasing technique for the Class AB output stage?", + "answer": "All of the above", + "kept": "book-ch1_494", + "dropped": [ + "book-ch2_226", + "book-ch2_359", + "book-ch2_453" + ] + }, + { + "stem": "In a voltage divider biasing network, where is the bias voltage set?", + "answer": "At the base or gate of the amplifying device", + "kept": "book-ch1_495", + "dropped": [ + "book-ch2_227", + "book-ch2_360", + "book-ch2_454" + ] + }, + { + "stem": "How does a diode biasing circuit work?", + "answer": "By connecting a diode in series with the base or gate of the amplifying device", + "kept": "book-ch1_496", + "dropped": [ + "book-ch2_228", + "book-ch2_361", + "book-ch2_455" + ] + }, + { + "stem": "Which biasing technique allows for fine-tuning of the operating point?", + "answer": "Voltage divider network", + "kept": "book-ch1_497", + "dropped": [ + "book-ch2_229", + "book-ch2_362", + "book-ch2_456" + ] + }, + { + "stem": "What is the goal of biasing the Class AB stage?", + "answer": "To ensure linear operation with low distortion", + "kept": "book-ch1_498", + "dropped": [ + "book-ch2_230", + "book-ch2_363", + "book-ch2_457" + ] + }, + { + "stem": "Which type of amplifying device is typically used in a Class AB output stage?", + "answer": "Bipolar junction transistor (BJT)", + "kept": "book-ch1_499", + "dropped": [ + "book-ch2_231", + "book-ch2_364", + "book-ch2_458" + ] + }, + { + "stem": "Which biasing technique uses a transistor configured as a voltage divider?", + "answer": "Transistor biasing", + "kept": "book-ch1_500", + "dropped": [ + "book-ch2_232", + "book-ch2_365", + "book-ch2_459" + ] + }, + { + "stem": "Why is biasing necessary for Class AB amplifiers?", + "answer": "To ensure that the amplifying devices operate in the active region", + "kept": "book-ch1_501", + "dropped": [ + "book-ch2_233", + "book-ch2_366", + "book-ch2_460" + ] + }, + { + "stem": "What is the main advantage of using a Class AB output stage in amplifiers?", + "answer": "High linearity with low distortion", + "kept": "book-ch1_502", + "dropped": [ + "book-ch2_234", + "book-ch2_367", + "book-ch2_461" + ] + }, + { + "stem": "What is the bias voltage typically set to in the Class AB output stage?", + "answer": "The forward voltage drop of a diode", + "kept": "book-ch1_503", + "dropped": [ + "book-ch2_235", + "book-ch2_368", + "book-ch2_462" + ] + }, + { + "stem": "Which of the following is a disadvantage of using a diode biasing circuit?", + "answer": "It is less stable than other biasing techniques", + "kept": "book-ch1_504", + "dropped": [ + "book-ch2_236", + "book-ch2_369", + "book-ch2_463" + ] + }, + { + "stem": "What is the purpose of using a transistor biasing circuit?", + "answer": "To set the bias voltage", + "kept": "book-ch1_505", + "dropped": [ + "book-ch2_237", + "book-ch2_370", + "book-ch2_464" + ] + }, + { + "stem": "Which of the following biasing techniques is commonly used in Class AB amplifiers?", + "answer": "Diode biasing", + "kept": "book-ch1_506", + "dropped": [ + "book-ch2_238", + "book-ch2_371", + "book-ch2_465" + ] + }, + { + "stem": "How does the choice of biasing technique affect the power efficiency of the amplifier?", + "answer": "It can decrease power efficiency", + "kept": "book-ch1_507", + "dropped": [ + "book-ch2_239", + "book-ch2_372", + "book-ch2_466" + ] + }, + { + "stem": "What is the disadvantage of using an adjustable biasing network?", + "answer": "It is more complex than a fixed biasing network", + "kept": "book-ch1_508", + "dropped": [ + "book-ch2_240", + "book-ch2_373", + "book-ch2_467" + ] + }, + { + "stem": "Which of the following is a key consideration when selecting a biasing technique for the Class AB output stage?", + "answer": "Power efficiency", + "kept": "book-ch1_509", + "dropped": [ + "book-ch2_241", + "book-ch2_374", + "book-ch2_468" + ] + }, + { + "stem": "What is the primary application of power BJTs in amplifier circuits?", + "answer": "Power amplification", + "kept": "book-ch1_510", + "dropped": [ + "book-ch2_242", + "book-ch2_375", + "book-ch2_469" + ] + }, + { + "stem": "Which type of power BJT is more commonly used in power amplifier circuits?", + "answer": "NPN", + "kept": "book-ch1_511", + "dropped": [ + "book-ch2_243", + "book-ch2_376", + "book-ch2_470" + ] + }, + { + "stem": "What is the operating region of the power BJT?", + "answer": "Active", + "kept": "book-ch1_512", + "dropped": [ + "book-ch2_244", + "book-ch2_377", + "book-ch2_471" + ] + }, + { + "stem": "Which configuration is most commonly used for low-power amplifiers?", + "answer": "Class A", + "kept": "book-ch1_513", + "dropped": [ + "book-ch2_245", + "book-ch2_378", + "book-ch2_472" + ] + }, + { + "stem": "What is the main advantage of power BJTs over small signal BJTs?", + "answer": "Higher power handling capability", + "kept": "book-ch1_514", + "dropped": [ + "book-ch2_246", + "book-ch2_379", + "book-ch2_473" + ] + }, + { + "stem": "Which of the following is a common application of power BJTs?", + "answer": "Audio amplifiers", + "kept": "book-ch1_515", + "dropped": [ + "book-ch2_247", + "book-ch2_380", + "book-ch2_474" + ] + }, + { + "stem": "What is the primary purpose of switching amplifiers?", + "answer": "To improve efficiency", + "kept": "book-ch1_516", + "dropped": [ + "book-ch2_248", + "book-ch2_381", + "book-ch2_475" + ] + }, + { + "stem": "Which type of amplifier uses power MOSFETs to provide high efficiency?", + "answer": "Class D", + "kept": "book-ch1_517", + "dropped": [ + "book-ch2_249", + "book-ch2_382", + "book-ch2_476" + ] + }, + { + "stem": "Which of the following is not a technique used to improve the efficiency of power amplifiers?", + "answer": "Feedback amplifiers", + "kept": "book-ch1_518", + "dropped": [ + "book-ch2_250", + "book-ch2_383", + "book-ch2_477" + ] + }, + { + "stem": "What is the main disadvantage of power BJTs in amplifier circuits?", + "answer": "High heat dissipation", + "kept": "book-ch1_519", + "dropped": [ + "book-ch2_251", + "book-ch2_384", + "book-ch2_478" + ] + }, + { + "stem": "What is the primary function of power BJTs in amplifier circuits?", + "answer": "To provide high power gain and efficiency", + "kept": "book-ch1_520", + "dropped": [ + "book-ch2_252", + "book-ch2_385", + "book-ch2_479" + ] + }, + { + "stem": "Which of the following is a commonly used configuration for power BJTs in low-power amplifiers?", + "answer": "Class A", + "kept": "book-ch1_521", + "dropped": [ + "book-ch2_253", + "book-ch2_386", + "book-ch2_480" + ] + }, + { + "stem": "Which type of power BJT is commonly used in power amplifier circuits?", + "answer": "NPN", + "kept": "book-ch1_522", + "dropped": [ + "book-ch2_254", + "book-ch2_387", + "book-ch2_481" + ] + }, + { + "stem": "In which region of operation does the power BJT operate?", + "answer": "Active region", + "kept": "book-ch1_523", + "dropped": [ + "book-ch2_255", + "book-ch2_388", + "book-ch2_482" + ] + }, + { + "stem": "Which of the following is a technique used to improve the efficiency of power amplifiers?", + "answer": "Switching amplifiers", + "kept": "book-ch1_524", + "dropped": [ + "book-ch2_256", + "book-ch2_389", + "book-ch2_483" + ] + }, + { + "stem": "Which of the following is an application of power BJTs?", + "answer": "Audio amplifiers", + "kept": "book-ch1_525", + "dropped": [ + "book-ch2_257", + "book-ch2_390", + "book-ch2_484" + ] + }, + { + "stem": "What is the primary difference between small signal BJTs and power BJTs?", + "answer": "High power handling capability", + "kept": "book-ch1_526", + "dropped": [ + "book-ch2_258", + "book-ch2_391", + "book-ch2_485" + ] + }, + { + "stem": "Which type of power BJT has a higher current gain?", + "answer": "NPN", + "kept": "book-ch1_527", + "dropped": [ + "book-ch2_259", + "book-ch2_392", + "book-ch2_486" + ] + }, + { + "stem": "Which of the following is a benefit of using power BJTs in amplifier circuits?", + "answer": "High power gain", + "kept": "book-ch1_528", + "dropped": [ + "book-ch2_260", + "book-ch2_393", + "book-ch2_487" + ] + }, + { + "stem": "Which of the following amplifier configurations is commonly used in high-power amplifiers?", + "answer": "Class D", + "kept": "book-ch1_529", + "dropped": [ + "book-ch2_261", + "book-ch2_394", + "book-ch2_488" + ] + }, + { + "stem": "In a transformer-coupled push-pull amplifier, the primary winding of the output transformer is connected to:", + "answer": "The collector of both transistors", + "kept": "book-ch1_530", + "dropped": [ + "book-ch2_262", + "book-ch2_395", + "book-ch2_489" + ] + }, + { + "stem": "The transformer in a transformer-coupled push-pull amplifier is used to:", + "answer": "Provide impedance matching between the driver and output stages", + "kept": "book-ch1_531", + "dropped": [ + "book-ch2_263", + "book-ch2_396", + "book-ch2_490" + ] + }, + { + "stem": "In a transformer-coupled push-pull amplifier, the two output transistors are biased so that they conduct:", + "answer": "Alternately", + "kept": "book-ch1_532", + "dropped": [ + "book-ch2_264", + "book-ch2_397", + "book-ch2_491" + ] + }, + { + "stem": "Which of the following is an advantage of a transformer-coupled push-pull amplifier?", + "answer": "All of the above", + "kept": "book-ch1_533", + "dropped": [ + "book-ch2_265", + "book-ch2_398", + "book-ch2_492" + ] + }, + { + "stem": "The output of a transformer-coupled push-pull amplifier is taken from:", + "answer": "The secondary winding of the output transformer", + "kept": "book-ch1_534", + "dropped": [ + "book-ch2_266", + "book-ch2_399", + "book-ch2_493" + ] + }, + { + "stem": "The load impedance in a transformer-coupled push-pull amplifier is:", + "answer": "Always equal to the output impedance of the amplifier", + "kept": "book-ch1_535", + "dropped": [ + "book-ch2_267", + "book-ch2_400", + "book-ch2_494" + ] + }, + { + "stem": "The DC bias voltage for the output transistors in a transformer-coupled push-pull amplifier is provided by:", + "answer": "A separate bias circuit", + "kept": "book-ch1_536", + "dropped": [ + "book-ch2_268", + "book-ch2_401", + "book-ch2_495" + ] + }, + { + "stem": "The crossover distortion in a transformer-coupled push-pull amplifier is caused by:", + "answer": "The mismatch between the two output transistors", + "kept": "book-ch1_537", + "dropped": [ + "book-ch2_269", + "book-ch2_402", + "book-ch2_496" + ] + }, + { + "stem": "The transformer in a transformer-coupled push-pull amplifier is usually:", + "answer": "A step-down transformer", + "kept": "book-ch1_538", + "dropped": [ + "book-ch2_270", + "book-ch2_403", + "book-ch2_497" + ] + }, + { + "stem": "In a transformer-coupled push-pull amplifier, the output transistors are typically:", + "answer": "None of the above", + "kept": "book-ch1_539", + "dropped": [ + "book-ch2_271", + "book-ch2_404", + "book-ch2_498" + ] + }, + { + "stem": "In a transformer-coupled push-pull stage, two identical transistors are used with one conducting during the positive half-cycle of the input signal and the othe", + "answer": "All of the above", + "kept": "book-ch1_540", + "dropped": [ + "book-ch2_272", + "book-ch2_405", + "book-ch2_499" + ] + }, + { + "stem": "Which of the following statements about the transformer-coupled push-pull stage is true?", + "answer": "It is commonly used in audio power amplifiers", + "kept": "book-ch1_541", + "dropped": [ + "book-ch2_273", + "book-ch2_406", + "book-ch2_500" + ] + }, + { + "stem": "The transformer in a transformer-coupled push-pull stage is used to:", + "answer": "Provide impedance matching between the amplifier and the load", + "kept": "book-ch1_542", + "dropped": [ + "book-ch2_274", + "book-ch2_407", + "book-ch2_501" + ] + }, + { + "stem": "In a transformer-coupled push-pull stage, the transformer is typically wound with a center-tapped secondary winding. What is the purpose of the center tap?", + "answer": "To provide a reference voltage for biasing the transistors", + "kept": "book-ch1_543", + "dropped": [ + "book-ch2_275", + "book-ch2_408", + "book-ch2_502" + ] + }, + { + "stem": "The transformer-coupled push-pull stage is a type of:", + "answer": "Class B amplifier", + "kept": "book-ch1_544", + "dropped": [ + "book-ch2_276", + "book-ch2_409", + "book-ch2_503" + ] + }, + { + "stem": "Which of the following is an advantage of using a transformer-coupled push-pull stage over a single-ended output stage?", + "answer": "All of the above", + "kept": "book-ch1_545", + "dropped": [ + "book-ch2_277", + "book-ch2_410", + "book-ch2_504" + ] + }, + { + "stem": "The output of a transformer-coupled push-pull stage is taken from:", + "answer": "The center tap of the transformer secondary winding", + "kept": "book-ch1_546", + "dropped": [ + "book-ch2_278", + "book-ch2_411", + "book-ch2_505" + ] + }, + { + "stem": "What is the main disadvantage of a transformer-coupled push-pull stage compared to other output stage configurations?", + "answer": "Limited frequency response", + "kept": "book-ch1_547", + "dropped": [ + "book-ch2_279", + "book-ch2_412", + "book-ch2_506" + ] + }, + { + "stem": "The transformer in a transformer-coupled push-pull stage should be designed with:", + "answer": "Low leakage inductance", + "kept": "book-ch1_548", + "dropped": [ + "book-ch2_280", + "book-ch2_413", + "book-ch2_507" + ] + }, + { + "stem": "What is the main advantage of using a transformer in a push-pull output stage?", + "answer": "Impedance matching to the load", + "kept": "book-ch1_549", + "dropped": [ + "book-ch2_281", + "book-ch2_414", + "book-ch2_508" + ] + }, + { + "stem": "What is the basic function of a tuned amplifier?", + "answer": "To provide high selectivity and gain", + "kept": "book-ch1_550", + "dropped": [ + "book-ch2_415", + "book-ch2_509" + ] + }, + { + "stem": "Which type of resonant circuit is typically used in tuned amplifiers?", + "answer": "LC circuits", + "kept": "book-ch1_551", + "dropped": [ + "book-ch2_416", + "book-ch2_510" + ] + }, + { + "stem": "What is the Q factor of a resonant circuit?", + "answer": "The ratio of energy stored in the circuit to energy lost per cycle", + "kept": "book-ch1_552", + "dropped": [ + "book-ch1_562", + "book-ch2_417", + "book-ch2_427", + "book-ch2_511", + "book-ch2_521" + ] + }, + { + "stem": "What is the difference between a single tuned amplifier and a double tuned amplifier?", + "answer": "A single tuned amplifier uses one resonant circuit, while a double tuned amplifier uses two.", + "kept": "book-ch1_553", + "dropped": [ + "book-ch1_560", + "book-ch2_418", + "book-ch2_425", + "book-ch2_512", + "book-ch2_519" + ] + }, + { + "stem": "Which type of amplifier is commonly used in radio receivers and transmitters?", + "answer": "Tuned amplifier", + "kept": "book-ch1_554", + "dropped": [ + "book-ch2_419", + "book-ch2_513" + ] + }, + { + "stem": "Which electronic device can be used as the active element in a tuned amplifier?", + "answer": "Transistor", + "kept": "book-ch1_555", + "dropped": [ + "book-ch2_420", + "book-ch2_514" + ] + }, + { + "stem": "What is the function of the Q multiplier in a tuned amplifier?", + "answer": "To provide additional gain at the center frequency of the circuit", + "kept": "book-ch1_556", + "dropped": [ + "book-ch2_421", + "book-ch2_515" + ] + }, + { + "stem": "What is a tuned amplifier?", + "answer": "An amplifier that uses tuned circuits to achieve high selectivity and gain", + "kept": "book-ch1_557", + "dropped": [ + "book-ch2_422", + "book-ch2_516" + ] + }, + { + "stem": "What type of resonant circuits are used in tuned amplifiers?", + "answer": "LC circuits", + "kept": "book-ch1_558", + "dropped": [ + "book-ch2_423", + "book-ch2_517" + ] + }, + { + "stem": "Which of the following is a key factor in determining the gain and selectivity of a tuned amplifier?", + "answer": "The Q factor of the resonant circuits", + "kept": "book-ch1_559", + "dropped": [ + "book-ch2_424", + "book-ch2_518" + ] + }, + { + "stem": "Where are tuned amplifiers commonly used?", + "answer": "In radio receivers and transmitters", + "kept": "book-ch1_561", + "dropped": [ + "book-ch2_426", + "book-ch2_520" + ] + }, + { + "stem": "Which type of amplifying device can be used in tuned amplifiers?", + "answer": "All of the above", + "kept": "book-ch1_563", + "dropped": [ + "book-ch2_428", + "book-ch2_522" + ] + }, + { + "stem": "What is the purpose of a tuned amplifier in a radio receiver?", + "answer": "To amplify only the desired signal while rejecting other signals", + "kept": "book-ch1_564", + "dropped": [ + "book-ch2_429", + "book-ch2_523" + ] + }, + { + "stem": "What is the main advantage of a double tuned amplifier over a single tuned amplifier?", + "answer": "Higher selectivity", + "kept": "book-ch1_565", + "dropped": [ + "book-ch2_430", + "book-ch2_524" + ] + }, + { + "stem": "Which of the following is a disadvantage of tuned amplifiers?", + "answer": "They can be difficult to tune and adjust.", + "kept": "book-ch1_566", + "dropped": [ + "book-ch2_431", + "book-ch2_525" + ] + }, + { + "stem": "What does op-amp stand for?", + "answer": "Operational amplifier", + "kept": "book-ch1_567", + "dropped": [ + "book-ch2_432", + "book-ch2_526" + ] + }, + { + "stem": "Which configuration is most commonly used in op-amp circuits?", + "answer": "Inverting amplifier", + "kept": "book-ch1_568", + "dropped": [ + "book-ch2_433", + "book-ch2_527" + ] + }, + { + "stem": "What is the gain of an inverting amplifier with a feedback resistor of 10 kΩ and an input resistor of 1 kΩ?", + "answer": "-10", + "kept": "book-ch1_569", + "dropped": [ + "book-ch2_434", + "book-ch2_528" + ] + }, + { + "stem": "Which parameter determines the maximum output voltage swing of an op-amp?", + "answer": "Output saturation voltage", + "kept": "book-ch1_570", + "dropped": [ + "book-ch2_435", + "book-ch2_529" + ] + }, + { + "stem": "What is the purpose of a voltage follower op-amp circuit?", + "answer": "To buffer a signal", + "kept": "book-ch1_571", + "dropped": [ + "book-ch2_436", + "book-ch2_530" + ] + }, + { + "stem": "What is the transfer function of a non-inverting amplifier with a feedback resistor of 10 kΩ and an input resistor of 1 kΩ?", + "answer": "Vout = (1 + 10kΩ/1kΩ)Vin", + "kept": "book-ch1_572", + "dropped": [ + "book-ch2_437", + "book-ch2_531" + ] + }, + { + "stem": "Which op-amp parameter determines the rate at which the output can change in response to changes in the input?", + "answer": "Slew rate", + "kept": "book-ch1_573", + "dropped": [ + "book-ch2_438", + "book-ch2_532" + ] + }, + { + "stem": "What is the purpose of a differential amplifier?", + "answer": "To amplify the difference between two input signals", + "kept": "book-ch1_574", + "dropped": [ + "book-ch2_439", + "book-ch2_533" + ] + }, + { + "stem": "Which op-amp configuration is used to perform mathematical operations, such as addition and subtraction?", + "answer": "Summing amplifier", + "kept": "book-ch1_575", + "dropped": [ + "book-ch2_440", + "book-ch2_534" + ] + }, + { + "stem": "What is the output voltage of an inverting amplifier with an input voltage of 2 V and a feedback resistor of 10 kΩ, assuming an ideal op-amp?", + "answer": "-20 V", + "kept": "book-ch1_576", + "dropped": [ + "book-ch2_442", + "book-ch2_536" + ] + }, + { + "stem": "Which of the following is a characteristic of an ideal operational amplifier?", + "answer": "All of the above", + "kept": "book-ch1_577", + "dropped": [ + "book-ch2_441", + "book-ch2_535" + ] + }, + { + "stem": "Which of the following is not a type of operational amplifier?", + "answer": "Power amplifier", + "kept": "book-ch1_578", + "dropped": [ + "book-ch2_443", + "book-ch2_537" + ] + }, + { + "stem": "What is the function of a summing amplifier?", + "answer": "To sum multiple input signals and provide an amplified output signal", + "kept": "book-ch1_579", + "dropped": [ + "book-ch2_444", + "book-ch2_538" + ] + }, + { + "stem": "What is the output voltage of an inverting amplifier with a gain of -10 if the input voltage is 2V?", + "answer": "-20V", + "kept": "book-ch1_580", + "dropped": [ + "book-ch2_445", + "book-ch2_539" + ] + }, + { + "stem": "What is the function of a voltage follower?", + "answer": "To provide unity gain and high input and output impedances", + "kept": "book-ch1_581", + "dropped": [ + "book-ch2_446", + "book-ch2_540" + ] + }, + { + "stem": "What is the advantage of using an op-amp as a comparator?", + "answer": "It has a very high gain", + "kept": "book-ch1_582", + "dropped": [ + "book-ch2_447", + "book-ch2_541" + ] + }, + { + "stem": "What is the function of a differentiator circuit?", + "answer": "To differentiate the input signal with respect to time", + "kept": "book-ch1_583", + "dropped": [ + "book-ch2_448", + "book-ch2_542" + ] + }, + { + "stem": "What is the function of an integrator circuit?", + "answer": "To integrate the input signal with respect to time", + "kept": "book-ch1_584", + "dropped": [ + "book-ch2_449", + "book-ch2_543" + ] + }, + { + "stem": "What is the advantage of using a non-inverting amplifier instead of an inverting amplifier?", + "answer": "The input signal is not inverted", + "kept": "book-ch1_585", + "dropped": [ + "book-ch2_450", + "book-ch2_544" + ] + }, + { + "stem": "What is the function of a Schmitt trigger circuit?", + "answer": "To provide hysteresis to a signal", + "kept": "book-ch1_586", + "dropped": [ + "book-ch2_451", + "book-ch2_545" + ] + }, + { + "stem": "Which of the following is a Boolean operator?", + "answer": "/", + "kept": "book-ch2_53", + "dropped": [ + "book-ch2_282" + ] + }, + { + "stem": "What is the Boolean expression for the OR gate?", + "answer": "A+B", + "kept": "book-ch2_54", + "dropped": [ + "book-ch2_283" + ] + }, + { + "stem": "What is the Boolean expression for the AND gate?", + "answer": "A*B", + "kept": "book-ch2_55", + "dropped": [ + "book-ch2_284" + ] + }, + { + "stem": "What is the Boolean expression for the NOT gate?", + "answer": "A'", + "kept": "book-ch2_56", + "dropped": [ + "book-ch2_285" + ] + }, + { + "stem": "Which of the following is an example of a Boolean equation?", + "answer": "y=xAND2", + "kept": "book-ch2_57", + "dropped": [ + "book-ch2_286" + ] + }, + { + "stem": "Which of the following is a Boolean identity?", + "answer": "A+0=A", + "kept": "book-ch2_58", + "dropped": [ + "book-ch2_287" + ] + }, + { + "stem": "Which of the following is a Boolean simplification rule?", + "answer": "A+B=B+A", + "kept": "book-ch2_59", + "dropped": [ + "book-ch2_288" + ] + }, + { + "stem": "What is the result of the Boolean operation A OR (B AND C)?", + "answer": "A+B*C", + "kept": "book-ch2_60", + "dropped": [ + "book-ch2_289" + ] + }, + { + "stem": "What is the result of the Boolean operation (A OR B) AND (A OR C)?", + "answer": "A+B+C", + "kept": "book-ch2_61", + "dropped": [ + "book-ch2_290" + ] + }, + { + "stem": "What is the Boolean expression for the exclusive-OR (XOR) gate?", + "answer": "AB", + "kept": "book-ch2_62", + "dropped": [ + "book-ch2_291" + ] + }, + { + "stem": "What is Boolean algebra?", + "answer": "A branch of mathematics that deals with Boolean functions", + "kept": "book-ch2_63", + "dropped": [ + "book-ch2_292" + ] + }, + { + "stem": "What is a Boolean variable?", + "answer": "A variable that can only take on two values, true or false", + "kept": "book-ch2_64", + "dropped": [ + "book-ch2_293" + ] + }, + { + "stem": "What is a Boolean expression?", + "answer": "A mathematical expression that uses Boolean variables, operators, and constants", + "kept": "book-ch2_65", + "dropped": [ + "book-ch2_294" + ] + }, + { + "stem": "Which Boolean operator represents logical AND?", + "answer": ".", + "kept": "book-ch2_66", + "dropped": [ + "book-ch2_295" + ] + }, + { + "stem": "Which Boolean operator represents logical OR?", + "answer": "+", + "kept": "book-ch2_67", + "dropped": [ + "book-ch2_296" + ] + }, + { + "stem": "Which Boolean operator represents logical NOT?", + "answer": "'", + "kept": "book-ch2_68", + "dropped": [ + "book-ch2_297" + ] + }, + { + "stem": "What is the complement of A in Boolean algebra?", + "answer": "A'", + "kept": "book-ch2_69", + "dropped": [ + "book-ch2_298" + ] + }, + { + "stem": "What is the simplified expression for A + AB?", + "answer": "A", + "kept": "book-ch2_70", + "dropped": [ + "book-ch2_299" + ] + }, + { + "stem": "What is the simplified expression for AB + A'B?", + "answer": "AB'", + "kept": "book-ch2_71", + "dropped": [ + "book-ch2_300" + ] + }, + { + "stem": "What is the Sum-of-Products (SOP) method in digital logic?", + "answer": "A technique used to simplify Boolean expressions", + "kept": "book-ch2_72", + "dropped": [ + "book-ch2_301" + ] + }, + { + "stem": "What is the first step in using the SOP method to simplify a Boolean expression?", + "answer": "Write the expression in standard form", + "kept": "book-ch2_73", + "dropped": [ + "book-ch2_302" + ] + }, + { + "stem": "What are the Boolean operators used in the standard form of a Boolean expression?", + "answer": "AND, OR, and NOT", + "kept": "book-ch2_74", + "dropped": [ + "book-ch2_303" + ] + }, + { + "stem": "In the SOP method, what is the next step after creating a truth table for the Boolean expression?", + "answer": "Identify the rows where the expression evaluates to 1", + "kept": "book-ch2_75", + "dropped": [ + "book-ch2_304" + ] + }, + { + "stem": "What is the final step in using the SOP method to simplify a Boolean expression?", + "answer": "Combine the rows with an OR operator", + "kept": "book-ch2_76", + "dropped": [ + "book-ch2_305" + ] + }, + { + "stem": "Which of the following is an example of a Boolean expression that can be simplified using the SOP method?", + "answer": "F=AB+A'B+AB'", + "kept": "book-ch2_77", + "dropped": [ + "book-ch2_306" + ] + }, + { + "stem": "How many rows are in the truth table for a Boolean expression with two input variables?", + "answer": "4", + "kept": "book-ch2_78", + "dropped": [ + "book-ch2_307" + ] + }, + { + "stem": "What is the purpose of the SOP method in digital logic?", + "answer": "To simplify complex Boolean expressions", + "kept": "book-ch2_79", + "dropped": [ + "book-ch2_308" + ] + }, + { + "stem": "What is the meaning of \"sum of products\" in the SOP method?", + "answer": "The sum of the rows in the truth table where the expression evaluates to 1", + "kept": "book-ch2_80", + "dropped": [ + "book-ch2_309" + ] + }, + { + "stem": "What is the Sum-of-Products (SOP) method used for in digital logic?", + "answer": "To simplify a given Boolean expression", + "kept": "book-ch2_81", + "dropped": [ + "book-ch2_310" + ] + }, + { + "stem": "What is the first step when using the SOP method to simplify a Boolean expression?", + "answer": "Write the expression in the standard form", + "kept": "book-ch2_82", + "dropped": [ + "book-ch2_311" + ] + }, + { + "stem": "What is the standard form of a Boolean expression?", + "answer": "A form with parentheses and Boolean operators", + "kept": "book-ch2_83", + "dropped": [ + "book-ch2_312" + ] + }, + { + "stem": "How do you identify the rows in a truth table where the expression evaluates to 1 when using the SOP method?", + "answer": "Identify the rows where the expression is true", + "kept": "book-ch2_84", + "dropped": [ + "book-ch2_313" + ] + }, + { + "stem": "In the SOP method, what is the next step after identifying the rows where the expression evaluates to 1?", + "answer": "Write down each row in terms of the input variables", + "kept": "book-ch2_85", + "dropped": [ + "book-ch2_314" + ] + }, + { + "stem": "What Boolean operator is used to combine the rows in the SOP method?", + "answer": "OR", + "kept": "book-ch2_86", + "dropped": [ + "book-ch2_315" + ] + }, + { + "stem": "What is the final result of the SOP method?", + "answer": "A simplified sum of products expression", + "kept": "book-ch2_87", + "dropped": [ + "book-ch2_316" + ] + }, + { + "stem": "How is a row with a value of 0 represented in the SOP method?", + "answer": "With the complement of the corresponding variable", + "kept": "book-ch2_88", + "dropped": [ + "book-ch2_317" + ] + }, + { + "stem": "What is the main advantage of using the SOP method to simplify Boolean expressions?", + "answer": "It results in a more efficient circuit design", + "kept": "book-ch2_89", + "dropped": [ + "book-ch2_318" + ] + }, + { + "stem": "Can the SOP method be used to simplify any Boolean expression?", + "answer": "Yes, it can be used for any expression", + "kept": "book-ch2_90", + "dropped": [ + "book-ch2_319" + ] + }, + { + "stem": "What is the Product-of-Sums (POS) method used for in digital logic?", + "answer": "Simplifying Boolean expressions", + "kept": "book-ch2_91", + "dropped": [ + "book-ch2_320" + ] + }, + { + "stem": "In the POS method, what is the first step in simplifying a Boolean expression?", + "answer": "Write the expression in the standard form", + "kept": "book-ch2_92", + "dropped": [ + "book-ch2_321" + ] + }, + { + "stem": "In the POS method, what is the second step in simplifying a Boolean expression?", + "answer": "Identify the rows of the truth table where the expression evaluates to 0", + "kept": "book-ch2_93", + "dropped": [ + "book-ch2_322" + ] + }, + { + "stem": "What is the final result of applying the POS method to a Boolean expression?", + "answer": "A simplified product of sums expression", + "kept": "book-ch2_94", + "dropped": [ + "book-ch2_323" + ] + }, + { + "stem": "In the POS method, how are the rows of the truth table where the expression evaluates to 0 combined?", + "answer": "Using OR operators", + "kept": "book-ch2_95", + "dropped": [ + "book-ch2_324" + ] + }, + { + "stem": "When is the POS method particularly useful?", + "answer": "When the expression contains many terms", + "kept": "book-ch2_96", + "dropped": [ + "book-ch2_325" + ] + }, + { + "stem": "To complement a Boolean expression using the POS method, what must be done to the final result?", + "answer": "It must be inverted", + "kept": "book-ch2_97", + "dropped": [ + "book-ch2_326" + ] + }, + { + "stem": "Which of the following is a benefit of using the POS method in digital logic?", + "answer": "It reduces the size and complexity of digital circuits", + "kept": "book-ch2_98", + "dropped": [ + "book-ch2_327" + ] + }, + { + "stem": "What is the Product-of-Sums method in digital logic?", + "answer": "A method for simplifying Boolean expressions by combining products of variables", + "kept": "book-ch2_99", + "dropped": [ + "book-ch2_328" + ] + }, + { + "stem": "What is the dual of the Product-of-Sums method?", + "answer": "Sum-of-Products method", + "kept": "book-ch2_100", + "dropped": [ + "book-ch2_329" + ] + }, + { + "stem": "What is the first step in the Product-of-Sums method?", + "answer": "Identify the rows where the expression evaluates to 0", + "kept": "book-ch2_101", + "dropped": [ + "book-ch2_330" + ] + }, + { + "stem": "What is the second step in the Product-of-Sums method?", + "answer": "Write the expression in terms of the input variables", + "kept": "book-ch2_102", + "dropped": [ + "book-ch2_331" + ] + }, + { + "stem": "What is the final step in the Product-of-Sums method?", + "answer": "Combine the rows using OR operators", + "kept": "book-ch2_103", + "dropped": [ + "book-ch2_332" + ] + }, + { + "stem": "Which of the following is an advantage of using the Product-of-Sums method?", + "answer": "It is easier to understand than other simplification methods", + "kept": "book-ch2_104", + "dropped": [ + "book-ch2_333" + ] + }, + { + "stem": "What is the purpose of applying the Product-of-Sums method to the complement of an expression?", + "answer": "To generate a simplified expression that is the complement of the original expression", + "kept": "book-ch2_105", + "dropped": [ + "book-ch2_334" + ] + }, + { + "stem": "Which of the following is true about the Product-of-Sums method?", + "answer": "It can be used with any type of variable", + "kept": "book-ch2_106", + "dropped": [ + "book-ch2_335" + ] + }, + { + "stem": "What is the advantage of using the Product-of-Sums method over the Sum-of-Products method?", + "answer": "The resulting expression is shorter and requires fewer gates", + "kept": "book-ch2_107", + "dropped": [ + "book-ch2_336" + ] + }, + { + "stem": "Which of the following is an application of the Product-of-Sums method?", + "answer": "Simplifying Boolean expressions in digital circuits", + "kept": "book-ch2_108", + "dropped": [ + "book-ch2_337" + ] + }, + { + "stem": "Which of the following is a graphical tool used to simplify Boolean expressions?", + "answer": "Karnaugh map", + "kept": "book-ch2_109", + "dropped": [ + "book-ch2_338" + ] + }, + { + "stem": "How are cells identified in a Karnaugh map?", + "answer": "By their input variable combinations", + "kept": "book-ch2_110", + "dropped": [ + "book-ch2_339" + ] + }, + { + "stem": "In the Karnaugh map, which cells can be combined to form a simplified expression?", + "answer": "Adjacent cells", + "kept": "book-ch2_111", + "dropped": [ + "book-ch2_340" + ] + }, + { + "stem": "What does SOP stand for in the context of digital logic?", + "answer": "Sum of Products", + "kept": "book-ch2_112", + "dropped": [ + "book-ch2_341" + ] + }, + { + "stem": "Which of the following is true for the cells of a Karnaugh map?", + "answer": "Each cell can only contain a 0 or a 1", + "kept": "book-ch2_113", + "dropped": [ + "book-ch2_342" + ] + }, + { + "stem": "What is a Karnaugh map used for?", + "answer": "To simplify Boolean expressions", + "kept": "book-ch2_114", + "dropped": [ + "book-ch2_343" + ] + }, + { + "stem": "How many cells does a Karnaugh map have if the corresponding Boolean expression has three input variables?", + "answer": "8", + "kept": "book-ch2_115", + "dropped": [ + "book-ch2_344" + ] + }, + { + "stem": "How are adjacent cells identified in a Karnaugh map?", + "answer": "Both b and c", + "kept": "book-ch2_117", + "dropped": [ + "book-ch2_346" + ] + }, + { + "stem": "Which of the following is a simplified expression for the Karnaugh map shown below?", + "answer": "AB + CD", + "kept": "book-ch2_118", + "dropped": [ + "book-ch2_347" + ] + }, + { + "stem": "How is a truth table converted into a Karnaugh map?", + "answer": "By plotting the input and output values on a grid", + "kept": "book-ch2_119", + "dropped": [ + "book-ch2_348" + ] + }, + { + "stem": "Which of the following Boolean expressions is equivalent to the Karnaugh map shown below?", + "answer": "AB + CD", + "kept": "book-ch2_120", + "dropped": [ + "book-ch2_349" + ] + }, + { + "stem": "How many cells in a Karnaugh map can be combined to form a simplified expression?", + "answer": "Both A and B", + "kept": "book-ch2_121", + "dropped": [ + "book-ch2_350" + ] + }, + { + "stem": "How is a simplified expression converted back into a standard SOP or POS expression?", + "answer": "Both A and B", + "kept": "book-ch2_122", + "dropped": [ + "book-ch2_351" + ] + }, + { + "stem": "How can you reverse a string in C programming?", + "answer": "By using a loop and swapping characters", + "kept": "book-ch3_82", + "dropped": [ + "book-ch3_88" + ] + }, + { + "stem": "If 'ptr' is a pointer to an integer variable, what will be the output of the following code? printf(\"%d\", ptr+1);", + "answer": "The value of the integer variable ptr+1 is pointing to", + "kept": "book-ch3_104", + "dropped": [ + "book-ch3_105" + ] + }, + { + "stem": "Which of the following is the correct way to access a structure member using a pointer to a structure?", + "answer": "structure_pointer->member_name", + "kept": "book-ch3_138", + "dropped": [ + "book-ch3_192" + ] + }, + { + "stem": "What is the difference between passing a structure by value and passing a structure by pointer in C?", + "answer": "When a structure is passed by value, any modifications made to it in the function are lost when the function returns. When a structure is passed by pointer, the modifications are retained.", + "kept": "book-ch3_139", + "dropped": [ + "book-ch3_193" + ] + }, + { + "stem": "Which keyword is used to define a namespace in C++?", + "answer": "namespace", + "kept": "book-ch3_195", + "dropped": [ + "book-ch3_205" + ] + }, + { + "stem": "Which of the following is true about friend functions in C++?", + "answer": "Friend functions can access private and protected members of a class", + "kept": "book-ch3_272", + "dropped": [ + "book-ch3_312" + ] + }, + { + "stem": "How is a constant member function declared in C++?", + "answer": "Using the keyword const after the function declaration", + "kept": "book-ch3_382", + "dropped": [ + "book-ch3_390" + ] + }, + { + "stem": "A semaphore is used for:", + "answer": "Process synchronization", + "kept": "book-ch4_24", + "dropped": [ + "book-ch7_45" + ] + }, + { + "stem": "Which of the following is not a component of a control unit?", + "answer": "Arithmetic logic unit", + "kept": "book-ch4_90", + "dropped": [ + "book-ch4_95" + ] + }, + { + "stem": "What is the purpose of DMA in a computer system?", + "answer": "To transfer data between memory and peripheral devices", + "kept": "book-ch4_261", + "dropped": [ + "book-ch4_271" + ] + }, + { + "stem": "The testing in which code is checked", + "answer": "White box testing", + "kept": "book-ch8_72", + "dropped": [ + "book-ch8_89" + ] + }, + { + "stem": "Sinking fund is", + "answer": "The fund for rebuilding a structure when its economic life is over", + "kept": "book-ch10_153", + "dropped": [ + "book-ch10_171" + ] + }, + { + "stem": "Resource smoothing is", + "answer": "An adjustment of resources without affecting project duration", + "kept": "book-ch10_155", + "dropped": [ + "book-ch10_176" + ] + } + ], + "appliedResolutions": { + "appliedOn": "2026-10-20", + "authority": "Project owner instructed that the 13 recorded resolutions be applied. Each arithmetic or physics claim was re-derived before the edit, and every edit asserted the row still matched the state the resolution assumed, so a shifted index would fail the run rather than re-key the wrong question.", + "summary": { + "changes": 24, + "rekeys": 10, + "optionReplacements": 5, + "stemRewrites": 9, + "questionsTouched": 19, + "quarantineBefore": 145, + "quarantineAfter": 118, + "released": 27 + }, + "changes": [ + { + "id": "book-ch1_198", + "change": "rekey", + "from": "25%", + "to": "50%", + "why": "R_load = R_th at max power transfer, so efficiency = P_load/(P_load+P_source) = 50%" + }, + { + "id": "book-ch1_206", + "change": "rekey", + "from": "1 ms", + "to": "100 µs", + "why": "tau = RC = 1e3 * 100e-9 = 100 us" + }, + { + "id": "book-ch1_208", + "change": "rekey", + "from": "160 kHz", + "to": "16 kHz", + "why": "f0 = 1/(2*pi*sqrt(1mH * 100nF)) = 15.9 kHz" + }, + { + "id": "book-ch1_212", + "change": "rekey", + "from": "45°", + "to": "0°", + "why": "at resonance X_L = X_C so Z is purely resistive and the phase angle is 0" + }, + { + "id": "book-ch1_213", + "change": "rekey", + "from": "1 µs", + "to": "100 µs", + "why": "tau = L/R = 10e-3 / 100 = 100 us" + }, + { + "id": "book-ch1_221", + "change": "rekey", + "from": "2pisqrt(LC)", + "to": "1/(2pisqrt(LC))", + "why": "f0 = 1/(2*pi*sqrt(LC)); the keyed option was the reciprocal" + }, + { + "id": "book-ch2_145", + "change": "rekey", + "from": "A binary encoder has 2^n input lines and n output lines, while a priority encoder has n input lines and log2n output lines.", + "to": "A binary encoder converts a binary input signal into an n-bit coded output signal, while a priority encoder generates a binary code corresponding to the highest priority input signal.", + "why": "both encoder types have 2^n inputs and n outputs; the real difference is priority resolution" + }, + { + "id": "book-ch2_193", + "change": "replace-option", + "slot": 2, + "from": "0 to 256", + "to": "0 to 255", + "keyed": true, + "why": "2^8 = 256 distinct values, so the range is 0..255; correct_option already said so" + }, + { + "id": "book-ch1_207", + "change": "restem", + "from": "In an R-L circuit, the voltage across the Inductor lags behind the current by how many degrees?", + "to": "In an R-L circuit, the voltage across the inductor leads the current by how many degrees?", + "why": "v_L = L di/dt, so inductor voltage leads current by 90 degrees; \"lags\" made the question unanswerable" + }, + { + "id": "book-ch1_257", + "change": "restem", + "from": "In an R-L circuit, the voltage across the Inductor lags behind the current by how many degrees?", + "to": "In an R-L circuit, the voltage across the inductor leads the current by how many degrees?", + "why": "v_L = L di/dt, so inductor voltage leads current by 90 degrees; \"lags\" made the question unanswerable" + }, + { + "id": "book-ch1_207", + "change": "rekey", + "from": "0°", + "to": "90°", + "why": "inductor voltage leads current by 90 degrees" + }, + { + "id": "book-ch1_215", + "change": "restem", + "from": "A parallel R-C circuit has a resistor of 100 kΩ and a capacitor of 1 µF. What is the resonant frequency?", + "to": "A parallel R-C circuit has a resistor of 100 kΩ and a capacitor of 1 µF. What is the cutoff (corner) frequency?", + "why": "an R-C network has no resonant frequency; the quantity being asked for is the corner frequency" + }, + { + "id": "book-ch1_215", + "change": "replace-option", + "slot": 4, + "from": "1.59 kHz", + "to": "1.59 Hz", + "keyed": true, + "why": "f_c = 1/(2*pi*R*C) = 1/(2*pi*100e3*1e-6) = 1.59 Hz" + }, + { + "id": "book-ch1_263", + "change": "restem", + "from": "A parallel R-C circuit has a resistor of 100 kΩ and a capacitor of 1 µF. What is the resonant frequency?", + "to": "A parallel R-C circuit has a resistor of 100 kΩ and a capacitor of 1 µF. What is the cutoff (corner) frequency?", + "why": "an R-C network has no resonant frequency; the quantity being asked for is the corner frequency" + }, + { + "id": "book-ch1_263", + "change": "replace-option", + "slot": 4, + "from": "1.59 kHz", + "to": "1.59 Hz", + "keyed": true, + "why": "f_c = 1/(2*pi*R*C) = 1/(2*pi*100e3*1e-6) = 1.59 Hz" + }, + { + "id": "book-ch2_116", + "change": "replace-option", + "slot": 4, + "from": "11", + "to": "21", + "keyed": true, + "why": "correct_option named \"21\", which is not a binary combination and so is the intended answer; it was missing from the options" + }, + { + "id": "book-ch2_125", + "change": "replace-option", + "slot": 4, + "from": "11", + "to": "21", + "keyed": true, + "why": "correct_option named \"21\", which is not a binary combination and so is the intended answer; it was missing from the options" + }, + { + "id": "book-ch3_358", + "change": "restem", + "from": "Which of the following statements is true about static data members in C++?", + "to": "Which of the following statements is true about the default initial value of static data members in C++?", + "why": "its options are all about the default initial value" + }, + { + "id": "book-ch3_362", + "change": "restem", + "from": "Which of the following statements is true about static data members in C++?", + "to": "Which of the following statements is true about where a static data member of a C++ class must be initialized?", + "why": "its options are all about where initialization may appear" + }, + { + "id": "book-ch3_364", + "change": "restem", + "from": "Which of the following statements is true about static data members in C++?", + "to": "Which of the following statements is true about how static data members in C++ can be accessed?", + "why": "its options are all about access syntax" + }, + { + "id": "book-ch1_236", + "change": "restem", + "from": "What is the resonant frequency of an AC parallel resonant circuit with an inductance of 20mH and a capacitance of 5µF?", + "to": "What is the resonant frequency of an AC parallel resonant circuit with an inductance of 20mH and a capacitance of 0.1µF?", + "why": "NEEDS SOURCE CHECK: options fit C = 0.1 uF (f0 = 3.56 kHz); as authored with 5 uF, f0 = 503 Hz and no option is correct" + }, + { + "id": "book-ch1_236", + "change": "rekey", + "from": "35.7 kHz", + "to": "3.57 kHz", + "why": "f0 = 1/(2*pi*sqrt(20mH * 0.1uF)) = 3.56 kHz" + }, + { + "id": "book-ch1_274", + "change": "restem", + "from": "What is the resonant frequency of an AC parallel resonant circuit with an inductance of 20mH and a capacitance of 5µF?", + "to": "What is the resonant frequency of an AC parallel resonant circuit with an inductance of 20mH and a capacitance of 0.1µF?", + "why": "NEEDS SOURCE CHECK: options fit C = 0.1 uF (f0 = 3.56 kHz); as authored with 5 uF, f0 = 503 Hz and no option is correct" + }, + { + "id": "book-ch1_274", + "change": "rekey", + "from": "357 kHz", + "to": "3.57 kHz", + "why": "f0 = 1/(2*pi*sqrt(20mH * 0.1uF)) = 3.56 kHz" + } + ], + "notAppliedAndWhy": [ + { + "id": "book-ch3_368", + "reason": "OPTION_MULTIPLE_TRUE", + "detail": "The triage classified all four static-data-member questions as a stem collision with no wrong key. That holds for three of them, but not this one: both the keyed \"They are initialized to zero by default\" and the distractor \"They cannot be initialized inside the class declaration\" are true statements - the latter being exactly what book-ch3_362 keys as correct. A single-answer MCQ cannot have two correct options, so this needs the distractor rewritten or the question retired. It remains quarantined and is the only entry in quarantine.json that no automated rule can re-derive." + }, + { + "ids": [ + "book-ch1_236", + "book-ch1_274" + ], + "reason": "APPLIED BUT NEEDS SOURCE VERIFICATION", + "detail": "As authored the stem gives L = 20 mH and C = 5 uF, for which f0 = 1/(2*pi*sqrt(LC)) = 503 Hz - and none of the four options is close. The options (3.57 kHz / 35.7 kHz / 357 kHz / 3.57 MHz) form a decade ladder around 3.57 kHz, which is exactly what L = 20 mH gives for C = 0.1 uF. The stem capacitance was therefore treated as the typo and changed to 0.1 uF, which is the smaller edit than replacing four options. This is the one change that altered a question premise rather than a key; confirm against the source textbook." + }, + { + "ids": [ + "12 remaining KEY_CONFLICT rows" + ], + "reason": "STILL UNADJUDICATED", + "detail": "Twelve rows still have a correct_option naming text that is absent from all four options - mostly binary and hexadecimal arithmetic in ch2. They were not among the 13 recorded resolutions and no answer can be derived without the source material, since both the keyed option and the stated answer may be wrong. They remain quarantined." + } + ] + } +} diff --git a/frontend/src/data/examBlueprint.ts b/frontend/src/data/examBlueprint.ts new file mode 100644 index 0000000..8668722 --- /dev/null +++ b/frontend/src/data/examBlueprint.ts @@ -0,0 +1,627 @@ +/** + * The NEC licence-exam format and question-selection blueprint, as data. + * + * WHY THIS FILE EXISTS + * -------------------- + * Exam constants were previously scattered as bare numbers (e.g. `duration: 45` + * in `topics.ts`) with no record of where they came from. Several of them are + * not actually known: the official NEC syllabus PDF for the Computer + * Engineering stream lists the 10 chapters and their 60 sub-chapters but + * contains **no marking scheme at all** - no duration, no pass mark, no + * per-chapter weights. Shipping a guess as a bare number is how a guess becomes + * folklore. + * + * So every exam constant lives here exactly once, wrapped in a + * `BlueprintValue` that carries its provenance and its verification status. + * A `ConfirmedValue` can be read with `readConfirmed()`. An + * `UnverifiedValue` *cannot* be passed to `readConfirmed()` (compile error) + * and must be read through `readUnverified()`, which requires an explicit + * acknowledgement object. Reading an unverified number by accident is + * therefore not possible. + * + * WHAT IS CONFIRMED, AND BY WHOM + * ------------------------------ + * All four format fields are confirmed by the project owner (2026-10-20): + * + * questionCount 100 questions + * marksPerQuestion 1 mark each, so 100 marks total (derived, never stored) + * durationMinutes 120 minutes + * passMark 50 of 100 + * + * The provenance is `kind: 'project-owner'` with `sourceUrl: null`, and that + * null is deliberate. There is no published document behind these numbers - + * the official syllabus PDF carries no marking scheme - so citing a URL would + * manufacture an authority that does not exist. If an NEC exam notice ever + * contradicts any of this, the notice wins and this file is the only place that + * has to change. + * + * `topics.ts` previously configured mock tests at 45 minutes, against a real + * exam of 120. That is now driven from here instead of being restated. + * + * WHAT IS STILL UNVERIFIED + * ------------------------ + * Nothing in `examFormat`. `listUnverifiedFields()` and + * `formatUnverifiedFields()` remain, and remain wired into the UI, because the + * next field added is likelier to be a guess than a confirmation - negative + * marking and per-chapter weights are both unknown, and the machinery to refuse + * to display a guess as fact should already be in place when they arrive. + */ + +import type { ChapterCode, SubchapterCode, SubchapterIndex } from './syllabus'; +import { syllabusChapters, syllabusSubchapters } from './syllabus'; + +/* ------------------------------------------------------------------ * + * Provenance + * ------------------------------------------------------------------ */ + +export type VerificationStatus = 'confirmed' | 'needs-verification'; + +export type ProvenanceKind = + /** The official NEC syllabus / notice PDF. */ + | 'official-document' + /** Confirmed verbally or in writing by the project owner. */ + | 'project-owner' + /** Coaching sites, forum posts, blog write-ups - plausible, unverified. */ + | 'secondary-source' + /** A number the app already had in its code with no recorded origin. */ + | 'app-default'; + +export interface ProvenanceSource { + readonly kind: ProvenanceKind; + /** Short human-facing description of where the value came from. */ + readonly label: string; + /** + * Canonical URL for the claim, or `null` when none exists. + * `null` is deliberate: the owner's confirmation and the app's historical + * defaults have no public document behind them, and inventing a plausible + * URL would be worse than admitting there isn't one. + */ + readonly sourceUrl: string | null; + /** ISO `YYYY-MM-DD` the value was last verified, or `null` if never. */ + readonly verifiedOn: string | null; + /** Why this status, and what would have to happen to upgrade it. */ + readonly note: string; +} + +/** A competing value for the same constant, recorded rather than discarded. */ +export interface ValueConflict { + readonly value: T; + readonly label: string; + readonly sourceUrl: string | null; +} + +export interface BlueprintValue { + readonly value: T; + readonly status: VerificationStatus; + /** Short stable label for UI listings, e.g. `'duration'`. */ + readonly label: string; + readonly unit: string; + readonly source: ProvenanceSource; + /** Other values seen in the wild for this same constant. */ + readonly conflicts?: readonly ValueConflict[]; +} + +/** A value whose correctness has been confirmed. Safe to read directly. */ +export interface ConfirmedValue extends BlueprintValue { + readonly status: 'confirmed'; + readonly source: ProvenanceSource & { readonly verifiedOn: string }; +} + +/** A value that is still a guess. Cannot be read without acknowledgement. */ +export interface UnverifiedValue extends BlueprintValue { + readonly status: 'needs-verification'; +} + +/** + * Caller's explicit statement that they know the number is unverified. + * Required by `readUnverified()`; the literal `true` makes it impossible to + * satisfy accidentally with a falsy default. + */ +export interface UnverifiedAcknowledgement { + readonly acknowledgeUnverified: true; + /** Why using an unverified value is acceptable here. */ + readonly reason: string; +} + +/** Read a confirmed constant. Typed so unverified fields are rejected. */ +export function readConfirmed(field: ConfirmedValue): T { + return field.value; +} + +/** Read an unverified constant, forcing the caller to acknowledge it. */ +export function readUnverified( + field: UnverifiedValue, + acknowledgement: UnverifiedAcknowledgement, +): T { + if (acknowledgement.acknowledgeUnverified !== true) { + throw new Error( + 'readUnverified("' + field.label + '") requires acknowledgeUnverified: true', + ); + } + return field.value; +} + +/** + * Runtime escape hatch for code holding a `BlueprintValue` of unknown + * status. Throws on an unverified value unless acknowledged - so a forgotten + * acknowledgement fails loudly instead of shipping a guess. + */ +export function readBlueprintValue( + field: BlueprintValue, + acknowledgement?: UnverifiedAcknowledgement, +): T { + if (field.status === 'needs-verification' && acknowledgement?.acknowledgeUnverified !== true) { + throw new Error( + 'Blueprint field "' + + field.label + + '" is marked needs-verification; pass an UnverifiedAcknowledgement to use it.', + ); + } + return field.value; +} + +/* ------------------------------------------------------------------ * + * Exam format + * ------------------------------------------------------------------ */ + +const OWNER_CONFIRMATION: ProvenanceSource & { readonly verifiedOn: string } = { + kind: 'project-owner', + label: 'Project owner confirmation', + sourceUrl: null, + verifiedOn: '2026-10-20', + note: + 'Owner confirmed the paper is 100 questions at 1 mark each (100 marks), ' + + 'runs for 120 minutes, and is passed at 50 of 100. The official NEC ' + + 'syllabus PDF carries no marking scheme at all, so there is no document ' + + 'URL to cite for any of it - the provenance is the project owner, not a ' + + 'published source. If a future NEC notice contradicts this, that notice ' + + 'wins and this is the single place to change.', +}; + +export interface ExamFormatBlueprint { + /** Questions on the paper. */ + readonly questionCount: ConfirmedValue; + /** Marks awarded per correct question. */ + readonly marksPerQuestion: ConfirmedValue; + /** Minutes allowed for the paper. */ + readonly durationMinutes: ConfirmedValue; + /** Marks required to pass, out of `totalMarks()`. */ + readonly passMark: ConfirmedValue; +} + +export const examFormat: ExamFormatBlueprint = { + questionCount: { + value: 100, + status: 'confirmed', + label: 'questionCount', + unit: 'questions', + source: OWNER_CONFIRMATION, + }, + marksPerQuestion: { + value: 1, + status: 'confirmed', + label: 'marksPerQuestion', + unit: 'marks', + source: OWNER_CONFIRMATION, + }, + durationMinutes: { + value: 120, + status: 'confirmed', + label: 'duration', + unit: 'minutes', + source: OWNER_CONFIRMATION, + }, + passMark: { + value: 50, + status: 'confirmed', + label: 'passMark', + unit: 'marks', + source: OWNER_CONFIRMATION, + }, +}; + +/** + * Total marks for the paper. Derived, never stored, so it cannot drift from + * `questionCount` x `marksPerQuestion`. + */ +export function totalMarks(format: ExamFormatBlueprint = examFormat): number { + return readConfirmed(format.questionCount) * readConfirmed(format.marksPerQuestion); +} + +/* ------------------------------------------------------------------ * + * Unverified-field reporting + * ------------------------------------------------------------------ */ + +export interface UnverifiedFieldReport { + /** Key on `ExamFormatBlueprint`, e.g. `'durationMinutes'`. */ + readonly key: string; + /** Short UI label, e.g. `'duration'`. */ + readonly label: string; + /** The current best guess being carried. */ + readonly currentValue: number; + readonly unit: string; + readonly source: ProvenanceSource; +} + +/** + * Every format field currently marked `needs-verification`. + * Today this is `duration` and `passMark`. + */ +export function listUnverifiedFields( + format: ExamFormatBlueprint = examFormat, +): readonly UnverifiedFieldReport[] { + const entries: readonly (readonly [string, BlueprintValue])[] = [ + ['questionCount', format.questionCount], + ['marksPerQuestion', format.marksPerQuestion], + ['durationMinutes', format.durationMinutes], + ['passMark', format.passMark], + ]; + + return entries + .filter(([, field]) => field.status === 'needs-verification') + .map(([key, field]) => ({ + key, + label: field.label, + currentValue: field.value, + unit: field.unit, + source: field.source, + })); +} + +/** + * Comma-separated labels of the unverified fields, for a UI banner such as + * `Blueprint: unverified fields: duration, passMark`. Empty string when + * everything is confirmed. + */ +export function formatUnverifiedFields(format: ExamFormatBlueprint = examFormat): string { + return listUnverifiedFields(format) + .map(report => report.label) + .join(', '); +} + +/** True when nothing in the format blueprint is still a guess. */ +export function isFormatFullyVerified(format: ExamFormatBlueprint = examFormat): boolean { + return listUnverifiedFields(format).length === 0; +} + +/* ------------------------------------------------------------------ * + * Question-selection blueprint + * ------------------------------------------------------------------ */ + +export type WeightingRuleId = 'equal-chapter-weight-largest-remainder'; + +/** + * THE WEIGHTING RULE - `equal-chapter-weight-largest-remainder` + * + * 100 questions do not divide evenly across 60 sub-chapters (100 / 60 = 1.67), + * so the split has to be defined rather than computed. The rule is: + * + * 1. **Equal chapter weight.** Each of the 10 chapters contributes + * 100 / 10 = 10 questions. This is the only split the official syllabus + * supports: it lists 10 chapters with identical structure (6 sub-chapters + * each) and publishes no weights. Any uneven chapter weighting would be + * invented. + * 2. **Within a chapter**, the 10 questions are spread over 6 sub-chapters by + * the largest-remainder (Hare quota) method on equal shares: each + * sub-chapter's ideal share is 10 / 6 = 1.667, giving a floor of 1 + * (6 seats) and a remainder of 0.667 for all six. Four seats remain. + * 3. **Tie-break.** All six remainders are equal, so the remaining seats are + * awarded in ascending sub-chapter index - the standard deterministic + * tie-break. Sub-chapters 1-4 get 2 questions, sub-chapters 5-6 get 1. + * + * Per chapter: 2 + 2 + 2 + 2 + 1 + 1 = 10. Across 10 chapters: exactly 100. + * + * The index tie-break is arbitrary in content terms and is *documented as + * arbitrary*. It is stable and auditable, which a random tie-break would not + * be. Replace it with real past-paper frequency weights the moment those + * exist; that is a data change here, not a code change anywhere else. + */ +export const WEIGHTING_RULE: WeightingRuleId = 'equal-chapter-weight-largest-remainder'; + +/** Questions drawn from each chapter under the equal-chapter-weight rule. */ +export const QUESTIONS_PER_CHAPTER = 10; + +/** Sub-chapter indexes awarded a largest-remainder bonus seat. */ +const BONUS_SEAT_INDEXES: readonly SubchapterIndex[] = [1, 2, 3, 4]; + +function quotaForIndex(index: SubchapterIndex): number { + return BONUS_SEAT_INDEXES.includes(index) ? 2 : 1; +} + +export interface SubchapterQuota { + readonly subchapterCode: SubchapterCode; + readonly chapterCode: ChapterCode; + readonly subchapterIndex: SubchapterIndex; + /** Questions this sub-chapter must contribute to a 100-question paper. */ + readonly questions: number; +} + +export interface SelectionBlueprint { + readonly totalQuestions: number; + readonly weightingRule: WeightingRuleId; + /** One entry per official sub-chapter - always 60 of them. */ + readonly quotas: readonly SubchapterQuota[]; + /** + * When `true`, a sub-chapter with too few tagged questions is a hard + * failure. When `false`, the planner falls back to chapter-level sampling + * and reports which sub-chapters it had to approximate. + * + * Ships `false`, because **no question in the bank currently carries a + * sub-chapter tag** - a strict run today would fail on all 60. Flip to + * `true` once tagging coverage is real. + */ + readonly strictBlueprint: boolean; + /** What happens to an under-supplied sub-chapter when not strict. */ + readonly fallback: 'chapter-level-sampling'; + readonly notes: readonly string[]; +} + +const quotas: readonly SubchapterQuota[] = syllabusSubchapters.map(sub => ({ + subchapterCode: sub.code, + chapterCode: sub.chapterCode, + subchapterIndex: sub.index, + questions: quotaForIndex(sub.index), +})); + +export const selectionBlueprint: SelectionBlueprint = { + totalQuestions: 100, + weightingRule: WEIGHTING_RULE, + quotas, + strictBlueprint: false, + fallback: 'chapter-level-sampling', + notes: [ + 'Sub-chapter tagging coverage in the question bank is currently zero, so ' + + 'every sub-chapter is satisfied by chapter-level fallback sampling. ' + + 'ExamPlan.approximatedSubchapterCodes reports exactly which ones.', + 'Chapter weights are equal (10 questions each) because the official ' + + 'syllabus publishes no per-chapter marks.', + 'Within a chapter, sub-chapters 1-4 contribute 2 questions and 5-6 ' + + 'contribute 1, by documented largest-remainder tie-break on index.', + ], +}; + +export interface ExamBlueprint { + readonly format: ExamFormatBlueprint; + readonly selection: SelectionBlueprint; +} + +export const examBlueprint: ExamBlueprint = { + format: examFormat, + selection: selectionBlueprint, +}; + +/* ------------------------------------------------------------------ * + * Planning + * ------------------------------------------------------------------ */ + +/** + * Available question counts keyed by code. Passed in by the caller so this + * module never touches the question files and stays pure and testable. + */ +export interface QuestionSupply { + readonly [code: string]: number; +} + +/** + * Today's reality: not one question in the bank carries a sub-chapter tag. + * Exported so callers can be explicit about it instead of hand-rolling `{}`. + */ +export const NO_SUBCHAPTER_TAGS: QuestionSupply = {}; + +export interface SubchapterDraw { + readonly subchapterCode: SubchapterCode; + readonly chapterCode: ChapterCode; + readonly requested: number; + /** Drawn from questions actually tagged with this sub-chapter. */ + readonly fromSubchapterTagged: number; + /** Drawn from the chapter pool because tagged questions ran out. */ + readonly fromChapterFallback: number; + /** True when any part of this draw was approximated at chapter level. */ + readonly approximated: boolean; +} + +export interface ExamPlan { + /** Always equals `selectionBlueprint.totalQuestions` when `ok` is true. */ + readonly totalQuestions: number; + readonly draws: readonly SubchapterDraw[]; + /** Sub-chapters whose quota was partly or wholly chapter-level sampled. */ + readonly approximatedSubchapterCodes: readonly SubchapterCode[]; + readonly strictBlueprint: boolean; + readonly weightingRule: WeightingRuleId; + /** Supply keys that are not official sub-chapter codes - likely typos. */ + readonly unknownSupplyCodes: readonly string[]; +} + +export interface SubchapterShortfall { + readonly subchapterCode: SubchapterCode; + readonly chapterCode: ChapterCode; + readonly requested: number; + /** Questions tagged with this sub-chapter. */ + readonly availableTagged: number; + /** Questions it could raise, tagged plus chapter fallback. */ + readonly planned: number; + /** `requested - planned`, always greater than 0 for an entry in this list. */ + readonly missing: number; +} + +export interface ShortfallReport { + readonly totalRequested: number; + readonly totalPlanned: number; + readonly totalMissing: number; + readonly shortfalls: readonly SubchapterShortfall[]; + readonly strictBlueprint: boolean; + readonly unknownSupplyCodes: readonly string[]; +} + +export type ExamPlanResult = + | { readonly ok: true; readonly plan: ExamPlan } + | { readonly ok: false; readonly report: ShortfallReport }; + +export interface PlanExamOptions { + /** + * Override `selectionBlueprint.strictBlueprint`. When strict, chapter-level + * fallback is disabled and any under-supplied sub-chapter is a shortfall. + */ + readonly strictBlueprint?: boolean; + /** + * Total questions available per chapter, keyed by chapter code + * (e.g. `{ ACtE03: 398 }`). Used only for fallback sampling. Tagged + * questions are assumed to be a subset of their chapter's pool, so a + * chapter's fallback capacity is its supply minus the questions already + * drawn from that chapter. + */ + readonly chapterSupply?: QuestionSupply; + readonly blueprint?: SelectionBlueprint; +} + +function supplyFor(supply: QuestionSupply, code: string): number { + const count = supply[code]; + return typeof count === 'number' && Number.isFinite(count) && count > 0 ? Math.floor(count) : 0; +} + +/** + * Turn per-sub-chapter availability into a 100-question plan, or a structured + * report of what is missing and by how much. + * + * Pure: it reads nothing but its arguments and the static blueprint. + */ +export function planExam( + subchapterSupply: QuestionSupply, + options: PlanExamOptions = {}, +): ExamPlanResult { + const blueprint = options.blueprint ?? selectionBlueprint; + const strict = options.strictBlueprint ?? blueprint.strictBlueprint; + const chapterSupply = options.chapterSupply ?? {}; + + const validCodes = new Set(blueprint.quotas.map(quota => quota.subchapterCode)); + const unknownSupplyCodes = Object.keys(subchapterSupply).filter(code => !validCodes.has(code)); + + // Pass 1 - satisfy what the sub-chapter tags can actually cover. Done first + // and in full so the result does not depend on quota iteration order. + interface TaggedDraw { + readonly quotaIndex: number; + readonly availableTagged: number; + readonly fromSubchapterTagged: number; + } + + const taggedDraws: TaggedDraw[] = blueprint.quotas.map((quota, quotaIndex) => { + const availableTagged = supplyFor(subchapterSupply, quota.subchapterCode); + return { + quotaIndex, + availableTagged, + fromSubchapterTagged: Math.min(quota.questions, availableTagged), + }; + }); + + const taggedPerChapter = new Map(); + for (const tagged of taggedDraws) { + const quota = blueprint.quotas[tagged.quotaIndex]; + taggedPerChapter.set( + quota.chapterCode, + (taggedPerChapter.get(quota.chapterCode) ?? 0) + tagged.fromSubchapterTagged, + ); + } + + // Pass 2 - a chapter's fallback capacity is whatever is left of its pool once + // the tagged questions it already yielded are set aside, because tagged + // questions are a subset of their chapter's pool. + const fallbackCapacity = new Map( + syllabusChapters.map(chapter => [ + chapter.code, + strict + ? 0 + : Math.max( + 0, + supplyFor(chapterSupply, chapter.code) - (taggedPerChapter.get(chapter.code) ?? 0), + ), + ]), + ); + + const draws: SubchapterDraw[] = []; + const shortfalls: SubchapterShortfall[] = []; + const approximatedSubchapterCodes: SubchapterCode[] = []; + let totalPlanned = 0; + let totalRequested = 0; + + for (const tagged of taggedDraws) { + const quota = blueprint.quotas[tagged.quotaIndex]; + const requested = quota.questions; + totalRequested += requested; + + const deficit = requested - tagged.fromSubchapterTagged; + const capacity = fallbackCapacity.get(quota.chapterCode) ?? 0; + const fromChapterFallback = deficit > 0 ? Math.min(deficit, capacity) : 0; + fallbackCapacity.set(quota.chapterCode, capacity - fromChapterFallback); + + const planned = tagged.fromSubchapterTagged + fromChapterFallback; + totalPlanned += planned; + + const approximated = fromChapterFallback > 0; + if (approximated) { + approximatedSubchapterCodes.push(quota.subchapterCode); + } + + draws.push({ + subchapterCode: quota.subchapterCode, + chapterCode: quota.chapterCode, + requested, + fromSubchapterTagged: tagged.fromSubchapterTagged, + fromChapterFallback, + approximated, + }); + + if (planned < requested) { + shortfalls.push({ + subchapterCode: quota.subchapterCode, + chapterCode: quota.chapterCode, + requested, + availableTagged: tagged.availableTagged, + planned, + missing: requested - planned, + }); + } + } + + if (shortfalls.length > 0) { + return { + ok: false, + report: { + totalRequested, + totalPlanned, + totalMissing: totalRequested - totalPlanned, + shortfalls, + strictBlueprint: strict, + unknownSupplyCodes, + }, + }; + } + + return { + ok: true, + plan: { + totalQuestions: totalPlanned, + draws, + approximatedSubchapterCodes, + strictBlueprint: strict, + weightingRule: blueprint.weightingRule, + unknownSupplyCodes, + }, + }; +} + +/** Human-readable one-liner for a shortfall report, for logs and dev UI. */ +export function describeShortfall(report: ShortfallReport): string { + const detail = report.shortfalls + .map(entry => entry.subchapterCode + ' (-' + String(entry.missing) + ')') + .join(', '); + return ( + 'Short ' + + String(report.totalMissing) + + ' of ' + + String(report.totalRequested) + + ' questions across ' + + String(report.shortfalls.length) + + ' sub-chapters: ' + + detail + ); +} diff --git a/frontend/src/data/quarantine.json b/frontend/src/data/quarantine.json new file mode 100644 index 0000000..77e79fa --- /dev/null +++ b/frontend/src/data/quarantine.json @@ -0,0 +1,1065 @@ +[ + { + "id": "book-ch1_50", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"to regulate the voltage levels of a three-phase supply\" vs \"to regulate the voltage levels of a power distribution system\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch1_58", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"to regulate the voltage levels of a three-phase supply\" vs \"to regulate the voltage levels of a power distribution system\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch1_140", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"the principle of superposition\" vs \"ohm's law\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch1_143", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"the principle of superposition\" vs \"ohm's law\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch1_173", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"the resistance of the circuit with all voltage sources replaced by their internal resistances.\" vs \"the resistance seen from the output terminals with all voltage sources replaced by their internal resistances\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch1_183", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"the resistance of the circuit with all voltage sources replaced by their internal resistances.\" vs \"the resistance seen from the output terminals with all voltage sources replaced by their internal resistances\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch1_209", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"it is infinite\" vs \"it is at a minimum\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch1_214", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"it increases\" vs \"it decreases\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch1_217", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"r/c\" vs \"rc\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch1_218", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"infinite\" vs \"zero\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch1_222", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"the impedance is maximum\" vs \"the impedance is minimum\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch1_225", + "codes": [ + "OPTION_DUPLICATE" + ], + "notes": [ + "opt3 and opt4 are both \"159.15 Hz\" - two options can be simultaneously correct." + ] + }, + { + "id": "book-ch1_226", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"it is maximum\" vs \"it is minimum\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch1_227", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"it is maximum\" vs \"it is minimum\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch1_228", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"zero\" vs \"unity\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch1_229", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"zero\" vs \"unity\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch1_232", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"it is minimum\" vs \"it is maximum\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch1_235", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"minimum\" vs \"maximum\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch1_246", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"they are the same thing\" vs \"they are two different types of power\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch1_259", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"it is infinite\" vs \"it is at a minimum\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch1_262", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"it increases\" vs \"it decreases\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch1_264", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"r/c\" vs \"rc\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch1_265", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"infinite\" vs \"zero\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch1_267", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"the impedance is maximum\" vs \"the impedance is minimum\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch1_268", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"it is maximum\" vs \"it is minimum\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch1_269", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"it is maximum\" vs \"it is minimum\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch1_270", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"zero\" vs \"unity\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch1_271", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"zero\" vs \"unity\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch1_272", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"it is minimum\" vs \"it is maximum\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch1_273", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"minimum\" vs \"maximum\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch1_275", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"they are the same thing\" vs \"they are two different types of power\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch1_337", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 3 other row(s) keying a different answer (\"the time constant of the rc circuit\" vs \"the slope of the waveform\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch1_347", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 3 other row(s) keying a different answer (\"the time constant of the rc circuit\" vs \"the slope of the waveform\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch2_16", + "codes": [ + "KEY_CONFLICT" + ], + "notes": [ + "correct_option_index 2 points at \"110110\" but correct_option says \"111110\" - and that text is not among the options at all." + ] + }, + { + "id": "book-ch2_18", + "codes": [ + "KEY_CONFLICT" + ], + "notes": [ + "correct_option_index 1 points at \"28\" but correct_option says \"2B\" - and that text is not among the options at all." + ] + }, + { + "id": "book-ch2_123", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 3 other row(s) keying a different answer (\"the time constant of the rc circuit\" vs \"the slope of the waveform\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch2_124", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 3 other row(s) keying a different answer (\"the time constant of the rc circuit\" vs \"the slope of the waveform\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch2_150", + "codes": [ + "KEY_CONFLICT" + ], + "notes": [ + "correct_option_index 3 points at \"110110\" but correct_option says \"110100\" - and that text is not among the options at all." + ] + }, + { + "id": "book-ch2_156", + "codes": [ + "KEY_CONFLICT" + ], + "notes": [ + "correct_option_index 4 points at \"0100\" but correct_option says \"11000\" - and that text is not among the options at all." + ] + }, + { + "id": "book-ch2_158", + "codes": [ + "KEY_CONFLICT" + ], + "notes": [ + "correct_option_index 2 points at \"10110110\" but correct_option says \"101110110\" - and that text is not among the options at all." + ] + }, + { + "id": "book-ch2_160", + "codes": [ + "KEY_CONFLICT" + ], + "notes": [ + "correct_option_index 4 points at \"00000010\" but correct_option says \"10000\" - and that text is not among the options at all." + ] + }, + { + "id": "book-ch2_163", + "codes": [ + "KEY_CONFLICT" + ], + "notes": [ + "correct_option_index 2 points at \"1110\" but correct_option says \"1100\" - and that text is not among the options at all." + ] + }, + { + "id": "book-ch2_175", + "codes": [ + "OPTION_DUPLICATE" + ], + "notes": [ + "opt3 and opt4 are both \"1001\" - two options can be simultaneously correct." + ] + }, + { + "id": "book-ch2_198", + "codes": [ + "KEY_CONFLICT" + ], + "notes": [ + "correct_option_index 2 points at \"1101\" but correct_option says \"0011\" - and that text is not among the options at all." + ] + }, + { + "id": "book-ch2_200", + "codes": [ + "KEY_CONFLICT" + ], + "notes": [ + "correct_option_index 2 points at \"0010\" but correct_option says \"0101\" - and that text is not among the options at all." + ] + }, + { + "id": "book-ch2_203", + "codes": [ + "KEY_CONFLICT" + ], + "notes": [ + "correct_option_index 2 points at \"0110\" but correct_option says \"11110\" - and that text is not among the options at all." + ] + }, + { + "id": "book-ch2_240", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"secondary storage\" vs \"multiuser\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch2_253", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"secondary storage\" vs \"multiuser\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch2_303", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"they occur when an isr triggers another interrupt\" vs \"they occur when an isr is triggered while another isr is being serviced\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch2_305", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"the process of handling an interrupt request from an external device\" vs \"the process of handling interrupts\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch2_312", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"the process of handling an interrupt request from an external device\" vs \"the process of handling interrupts\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch2_315", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"it is the time between the occurrence of an interrupt and the start of the isr\" vs \"it refers to the time required for an interrupt to be detected and an isr to be initiated\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch2_320", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"they are triggered by the rising or falling edge of a signal\" vs \"they are triggered by a change in the interrupt request signal\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch2_324", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"it is the time between the occurrence of an interrupt and the start of the isr\" vs \"it refers to the time required for an interrupt to be detected and an isr to be initiated\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch2_325", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"they occur when an isr triggers another interrupt\" vs \"they occur when an isr is triggered while another isr is being serviced\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch2_330", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"they are triggered by the rising or falling edge of a signal\" vs \"they are triggered by a change in the interrupt request signal\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch3_59", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"a one-dimensional array has one row and multiple columns, whereas a two-dimensional array has multiple rows and multiple columns.\" vs \"a two-dimensional array has more dimensions than a one-dimensional array\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch3_69", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"a one-dimensional array has one row and multiple columns, whereas a two-dimensional array has multiple rows and multiple columns.\" vs \"a two-dimensional array has more dimensions than a one-dimensional array\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch3_105", + "codes": [ + "KEY_CONFLICT" + ], + "notes": [ + "correct_option_index 4 points at \"4\" but correct_option says \"Undefined\" - and that text is not among the options at all." + ] + }, + { + "id": "book-ch3_112", + "codes": [ + "KEY_CONFLICT" + ], + "notes": [ + "correct_option_index 3 points at \"11 21 30\" but correct_option says \"10 21 30\" - and that text is not among the options at all." + ] + }, + { + "id": "book-ch3_157", + "codes": [ + "OPTION_DUPLICATE" + ], + "notes": [ + "opt2 and opt3 are both \"array_name[size] struct;\" - two options can be simultaneously correct." + ] + }, + { + "id": "book-ch3_164", + "codes": [ + "OPTION_DUPLICATE" + ], + "notes": [ + "opt1 and opt3 are both \"struct *array_name[size];\" - two options can be simultaneously correct.", + "opt2 and opt4 are both \"struct (*array_name)[size];\" - two options can be simultaneously correct." + ] + }, + { + "id": "book-ch3_190", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"it is a mechanism for managing the scope of identifiers in large programs\" vs \"a container that holds a group of related variables and functions\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch3_192", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"you can have multiple namespaces with the same name in the same program\" vs \"namespace members are accessed using the :: operator\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch3_200", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"it is a mechanism for managing the scope of identifiers in large programs\" vs \"a container that holds a group of related variables and functions\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch3_201", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"you can have multiple namespaces with the same name in the same program\" vs \"namespace members are accessed using the :: operator\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch3_319", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"it points to the object on which the member function is called\" vs \"to refer to the object's own data members\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch3_338", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"it points to the object on which the member function is called\" vs \"to refer to the object's own data members\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch3_356", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"a data member that is shared among all instances of a class\" vs \"a data member that belongs to the class and not to any instance of the class\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch3_357", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"using the keyword static before the data type\" vs \"with the keyword 'static' and the data type of the member\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch3_359", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"using the keyword static before the return type\" vs \"with the keyword 'static' and the return type of the function\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch3_360", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 2 other row(s) keying a different answer (\"they can access only static data members of the class\" vs \"they cannot access non-static data members\" vs \"they cannot be virtual\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch3_363", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 2 other row(s) keying a different answer (\"they can access only static data members of the class\" vs \"they cannot access non-static data members\" vs \"they cannot be virtual\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch3_366", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"a data member that is shared among all instances of a class\" vs \"a data member that belongs to the class and not to any instance of the class\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch3_367", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"using the keyword static before the data type\" vs \"with the keyword 'static' and the data type of the member\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch3_368", + "codes": [ + "OPTION_MULTIPLE_TRUE" + ], + "notes": [ + "Two options are true: the keyed \"They are initialized to zero by default\", and \"They cannot be initialized inside the class declaration\" - the latter being exactly what book-ch3_362 keys as correct for a non-const, non-inline static data member. A single-answer MCQ cannot have two correct options. Needs the distractor rewritten or the question retired; no re-key fixes it." + ] + }, + { + "id": "book-ch3_370", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"using the keyword static before the return type\" vs \"with the keyword 'static' and the return type of the function\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch3_371", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 2 other row(s) keying a different answer (\"they can access only static data members of the class\" vs \"they cannot access non-static data members\" vs \"they cannot be virtual\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch3_375", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"a member function that cannot modify any data members of the class\" vs \"a member function that cannot be modified\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch3_379", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 4 other row(s) keying a different answer (\"they cannot modify any data members of the class\" vs \"they cannot modify the data members of the class\" vs \"they can be created using the const keyword before the object name\" vs \"they cannot call non-constant member functions of the class\" vs \"they can access only constant member functions of the class\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch3_383", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"a member function that cannot modify any data members of the class\" vs \"a member function that cannot be modified\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch3_384", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 4 other row(s) keying a different answer (\"they cannot modify any data members of the class\" vs \"they cannot modify the data members of the class\" vs \"they can be created using the const keyword before the object name\" vs \"they cannot call non-constant member functions of the class\" vs \"they can access only constant member functions of the class\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch3_386", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 4 other row(s) keying a different answer (\"they cannot modify any data members of the class\" vs \"they cannot modify the data members of the class\" vs \"they can be created using the const keyword before the object name\" vs \"they cannot call non-constant member functions of the class\" vs \"they can access only constant member functions of the class\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch3_387", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 4 other row(s) keying a different answer (\"they cannot modify any data members of the class\" vs \"they cannot modify the data members of the class\" vs \"they can be created using the const keyword before the object name\" vs \"they cannot call non-constant member functions of the class\" vs \"they can access only constant member functions of the class\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch3_388", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 4 other row(s) keying a different answer (\"they cannot modify any data members of the class\" vs \"they cannot modify the data members of the class\" vs \"they can be created using the const keyword before the object name\" vs \"they cannot call non-constant member functions of the class\" vs \"they can access only constant member functions of the class\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch4_14", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"cache replacement\" vs \"page replacement\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch4_62", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"volatile memory loses its contents when power is lost, while non-volatile memory retains its contents\" vs \"volatile memory requires power to retain its data, while non-volatile memory retains data even without power\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch4_130", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"shift left\" vs \"comparison\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch4_133", + "codes": [ + "OPTION_DUPLICATE" + ], + "notes": [ + "opt1 and opt4 are both \"NOT 0 = 0\" - two options can be simultaneously correct." + ] + }, + { + "id": "book-ch4_136", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"shift left\" vs \"comparison\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch4_202", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"volatile memory loses its contents when power is lost, while non-volatile memory retains its contents\" vs \"volatile memory requires power to retain its data, while non-volatile memory retains data even without power\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch4_280", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"sequential execution\" vs \"single processing unit\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch4_281", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"the ability of multiple processors to execute instructions simultaneously\" vs \"the ability to use multiple processors to complete a single task\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch4_282", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"the ability of the system to increase performance as more processors are added\" vs \"the ability to add more processors to the system as needed\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch4_286", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"the ability of the system to maintain consistency of data stored in the caches of multiple processors\" vs \"the ability to maintain consistency of shared data in different processor caches\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch4_288", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"sequential execution\" vs \"single processing unit\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch4_289", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"the ability of multiple processors to execute instructions simultaneously\" vs \"the ability to use multiple processors to complete a single task\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch4_290", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"the ability of the system to increase performance as more processors are added\" vs \"the ability to add more processors to the system as needed\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch4_293", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"the ability of the system to maintain consistency of data stored in the caches of multiple processors\" vs \"the ability to maintain consistency of shared data in different processor caches\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch4_333", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 2 other row(s) keying a different answer (\"a computer system that is embedded within a larger device\" vs \"a system designed to perform a specific task\" vs \"a computer system used in industrial control applications\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch4_342", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 2 other row(s) keying a different answer (\"a computer system that is embedded within a larger device\" vs \"a system designed to perform a specific task\" vs \"a computer system used in industrial control applications\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch4_343", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 2 other row(s) keying a different answer (\"general-purpose computing\" vs \"standard operating system\" vs \"high processing speed\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch4_344", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"home computer\" vs \"personal computer\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch4_348", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"to manage system resources and scheduling\" vs \"to schedule and manage tasks in real-time.\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch4_352", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"web-based embedded system\" vs \"mainframe system\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch4_356", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 2 other row(s) keying a different answer (\"general-purpose computing\" vs \"standard operating system\" vs \"high processing speed\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch4_378", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 2 other row(s) keying a different answer (\"a computer system that is embedded within a larger device\" vs \"a system designed to perform a specific task\" vs \"a computer system used in industrial control applications\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch4_379", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"home computer\" vs \"personal computer\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch4_381", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 2 other row(s) keying a different answer (\"general-purpose computing\" vs \"standard operating system\" vs \"high processing speed\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch4_383", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"web-based embedded system\" vs \"mainframe system\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch4_391", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"to manage system resources and scheduling\" vs \"to schedule and manage tasks in real-time.\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch4_413", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"tensilica xtensa\" vs \"digital signal processor (dsp)\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch4_417", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"tensilica xtensa\" vs \"digital signal processor (dsp)\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch7_50", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"cache replacement\" vs \"page replacement\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch8_28", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"sequence diagrams\" vs \"state diagrams\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch8_36", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"provides a mechanism for handling runtime errors\" vs \"provides a structured way to handle errors\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch8_61", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"sequence diagrams\" vs \"state diagrams\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + }, + { + "id": "book-ch8_69", + "codes": [ + "DUPLICATE_ANSWER_CONFLICT" + ], + "notes": [ + "Shares a stem with 1 other row(s) keying a different answer (\"provides a mechanism for handling runtime errors\" vs \"provides a structured way to handle errors\"). Until one is adjudicated, some students would be marked wrong for a right answer." + ] + } +] diff --git a/frontend/src/data/quarantine.ts b/frontend/src/data/quarantine.ts new file mode 100644 index 0000000..48806b8 --- /dev/null +++ b/frontend/src/data/quarantine.ts @@ -0,0 +1,43 @@ +/** + * Questions withheld from practice until a human adjudicates them. + * + * Each entry is a question the app would mis-grade. `scripts/validate-questions.mjs` + * found them, and they are listed explicitly rather than filtered by rule so that + * every exclusion is a visible, reviewable decision — and so that a newly + * introduced bad question fails the build instead of silently joining the list. + * + * The failure modes represented here: + * + * KEY_CONFLICT `correct_option_index` and `correct_option` disagree. In every + * case in this list the text named by `correct_option` is not + * among the four options at all. The app trusts the index, so + * these would mark the wrong option correct. + * INDEX_RANGE `correct_option_index` is 5 with only 4 options present, so + * there is no reachable correct answer. + * OPTION_DUPLICATE Two options carry identical text, so two options can be + * simultaneously correct. + * + * To clear an entry: fix the row in `frontend/public/data/books/`, re-run + * `node scripts/validate-questions.mjs`, and remove the id from quarantine.json. + * + * Ids are the synthetic `{topicId}_{arrayIndex}` form and are therefore tied to + * array position — reordering a chapter JSON invalidates this list. That is one of + * several reasons the bank is moving to content-hash ids. + */ +import entries from './quarantine.json'; + +export interface QuarantinedQuestion { + /** Synthetic question id: `{topicId}_{arrayIndex}`. */ + id: string; + /** Validator codes that caused the exclusion. */ + codes: string[]; + /** Human-readable detail, enough to adjudicate the question from. */ + notes: string[]; +} + +export const quarantinedQuestions: QuarantinedQuestion[] = entries; + +/** Fast membership test used by the question loader. */ +export const quarantinedIds: ReadonlySet = new Set( + quarantinedQuestions.map((q) => q.id) +); diff --git a/frontend/src/data/subchapterTerms.ts b/frontend/src/data/subchapterTerms.ts new file mode 100644 index 0000000..6858dde --- /dev/null +++ b/frontend/src/data/subchapterTerms.ts @@ -0,0 +1,335 @@ +/** + * Discriminating vocabulary for each of the 60 syllabus sub-chapters. + * + * WHY THIS EXISTS + * --------------- + * Two problems share one cause: the question bank records which *chapter* a + * question belongs to but not which *sub-chapter*. + * + * 1. `questions.subchapter_id` is NULL for every row, so all 60 blueprint + * sampling rules silently degrade to chapter-level sampling. + * 2. No question has an explanation, so a student who gets one wrong is told + * "Incorrect" and nothing else. + * + * A sub-chapter label fixes the first outright and gives the second something + * true to say — "this tests 5.4 Transport Layer" is not an explanation, but it + * points at a page in the syllabus, and it is derived rather than generated. + * + * WHY TERM LISTS AND NOT A MODEL + * ------------------------------ + * No live API is used in this project, so classification has to be local and + * deterministic. That is far more tractable than it sounds, because the chapter + * is already known: the classifier never picks 1-of-60, only 1-of-6, and within + * a chapter the six sub-chapters are deliberately disjoint topics. Separating + * "Network Layer" from "Transport Layer" needs `subnet`/`ospf` against + * `tcp`/`handshake`, not semantics. + * + * The cost is that this is a HEURISTIC over standard engineering vocabulary, + * not a key. It is wrong sometimes. Everything downstream therefore treats a + * match as a *hint* with a confidence, refuses to answer when two sub-chapters + * tie, and degrades to the chapter — which is always exact. Nothing here is + * ever presented to a student as an authoritative classification. + * + * TERM WEIGHTS + * ------------ + * `strong` terms are ones that, within their chapter, essentially settle it: + * `thevenin` appears in 1.2 Network Theorems and nowhere else in chapter 1. + * `weak` terms lean without settling: `voltage` is chapter-1-wide. + * + * MATCHING, AND WHAT YOU THEREFORE NEED NOT WRITE + * ----------------------------------------------- + * Terms are matched case-insensitively on word boundaries, so `ip` does not + * match "multiple" and `or` does not match "for". Two normalisations are + * applied by `services/subchapterClassifier.ts`, so do NOT spell these out: + * + * - PLURALS. Every word may carry a trailing `s`/`es`, so `requirement` + * covers "requirements" and `pointer` covers "pointers". + * - SEPARATORS. Spaces and hyphens are interchangeable, so `open loop` + * covers "open-loop" and `non-functional requirement` covers "non + * functional requirements". + * + * Nothing is stemmed. Terms are only ever widened, never reduced to a root, so + * `routing`, `router` and `route` stay distinct — chapter 5 depends on that. + * + * A term list is a maintained artefact, not a one-off: `scripts/classify- + * subchapters.mjs` reports per-chapter coverage and the spread across the six + * sub-chapters, and `--sample N` shows which terms drove each decision. A + * sub-chapter that never wins is the signal that its terms are narrower than + * the bank's phrasing. + */ + +import type { SubchapterCode } from './syllabus'; + +export interface SubchapterTerms { + /** Terms that, within the owning chapter, are near-decisive. */ + readonly strong: readonly string[]; + /** Terms that lean towards this sub-chapter without settling it. */ + readonly weak: readonly string[]; +} + +/** + * Keyed by official sub-chapter code. Typed as a total record over + * `SubchapterCode`, so omitting a sub-chapter is a compile error rather than a + * silent coverage hole. + */ +export const SUBCHAPTER_TERMS: Record = { + /* ── Chapter 1 — Basic Electrical and Electronics ───────────────────────── */ + AExE0101: { + strong: ["ohm's law", 'ohms law', 'kirchhoff', 'kcl', 'kvl', 'coulomb', 'resistivity'], + weak: ['resistance', 'resistor', 'current', 'voltage', 'series', 'parallel', 'charge', 'power', 'conductor', 'emf'], + }, + AExE0102: { + strong: ['thevenin', 'norton', 'superposition', 'maximum power transfer', 'reciprocity', 'millman', 'nodal analysis', 'mesh analysis'], + weak: ['theorem', 'equivalent', 'network', 'node', 'mesh', 'loop', 'source transformation'], + }, + AExE0103: { + strong: ['alternating current', 'rms', 'root mean square', 'power factor', 'phasor', 'reactance', 'impedance', 'resonance', 'three-phase', 'three phase'], + weak: ['frequency', 'sinusoidal', 'peak', 'inductor', 'capacitor', 'phase angle', 'hertz', 'waveform', 'ac'], + }, + AExE0104: { + strong: ['diode', 'zener', 'transistor', 'bjt', 'mosfet', 'fet', 'rectifier', 'pn junction', 'p-n junction', 'doping', 'thyristor', 'scr'], + weak: ['semiconductor', 'silicon', 'germanium', 'forward bias', 'reverse bias', 'depletion', 'majority carrier', 'intrinsic', 'extrinsic'], + }, + AExE0105: { + strong: ['oscillator', 'multivibrator', 'wien bridge', 'colpitts', 'hartley', 'astable', 'monostable', 'bistable', 'signal generator', '555'], + weak: ['barkhausen', 'waveform generator', 'sawtooth', 'square wave', 'triggering'], + }, + AExE0106: { + strong: ['amplifier', 'amplifiers', 'op-amp', 'op amp', 'operational amplifier', 'common emitter', 'common collector', 'common base', 'push-pull', 'class a', 'class b', 'slew rate', 'cmrr'], + weak: ['gain', 'amplification', 'feedback', 'inverting', 'non-inverting', 'bandwidth', 'distortion', 'biasing'], + }, + + /* ── Chapter 2 — Digital Logic and Microprocessor ───────────────────────── */ + AExE0201: { + strong: ['boolean', 'de morgan', "de morgan's", 'karnaugh', 'k-map', 'truth table', 'logic gate', 'nand', 'nor', 'xor', 'sop', 'pos', 'minterm', 'maxterm', "two's complement", "1's complement", "2's complement", 'gray code', 'bcd', 'excess-3', 'number system', 'radix', 'base of the', 'decimal equivalent', 'binary equivalent', 'octal equivalent', 'hexadecimal equivalent', 'logic family', 'ttl', 'cmos logic', 'ecl', 'fan-out', 'noise margin'], + weak: ['binary', 'hexadecimal', 'octal', 'decimal', 'gate', 'inverter', 'complement', 'simplify', 'conversion', 'bit', 'digit'], + }, + AExE0202: { + strong: ['half adder', 'full adder', 'ripple carry', 'carry look', 'multiplexer', 'demultiplexer', 'mux', 'encoder', 'decoder', 'comparator', 'subtractor', 'alu'], + weak: ['combinational', 'arithmetic circuit', 'carry', 'sum', 'borrow', 'select line', 'enable'], + }, + AExE0203: { + strong: ['flip-flop', 'flip flop', 'latch', 'sr flip', 'jk flip', 'd flip', 't flip', 'shift register', 'counter', 'ring counter', 'johnson counter', 'state diagram', 'state machine', 'moore', 'mealy', 'race around'], + weak: ['sequential', 'clock', 'clocked', 'edge-triggered', 'preset', 'clear', 'excitation', 'synchronous', 'asynchronous'], + }, + AExE0204: { + strong: ['8085', '8086', 'accumulator', 'instruction set', 'addressing mode', 'opcode', 'instruction cycle', 'machine cycle', 'fetch', 'register pair', 'flag register', 'stack pointer', 'program counter'], + weak: ['microprocessor', 'instruction', 'mnemonic', 'assembly', 'operand', 'arithmetic instruction'], + }, + AExE0205: { + strong: ['memory interfacing', 'address decoding', 'memory map', '8255', '8251', '8253', '8279', 'ppi', 'usart', 'bus cycle', 'wait state', 'minimum mode', 'maximum mode', 'tristate', 'latch enable', 'microprocessor system', 'i/o mapped', 'memory mapped i/o', 'io/m', 'ale signal', 'demultiplexing', 'clock generator', '8284', '8237', 'coprocessor', 'bus contention', 'read write cycle'], + weak: ['interfacing', 'peripheral', 'address bus', 'data bus', 'control bus', 'chip select', 'system bus', 'external device', 'timing diagram'], + }, + AExE0206: { + strong: ['interrupt', 'interrupts', 'isr', 'interrupt service routine', 'maskable', 'non-maskable', 'nmi', 'rst 7.5', 'trap', 'vectored', 'interrupt vector', 'priority interrupt', '8259', 'dma', 'polling'], + weak: ['service routine', 'priority', 'acknowledge', 'enable interrupt', 'disable interrupt', 'nested'], + }, + + /* ── Chapter 3 — Programming Language and Its Applications ──────────────── */ + ACtE0301: { + strong: ['printf', 'scanf', 'main()', '#include', 'stdio', 'for loop', 'while loop', 'do-while', 'switch statement', 'goto', 'preprocessor', 'macro', 'typedef', 'storage class', 'auto', 'extern', 'recursion'], + weak: ['c program', 'variable', 'datatype', 'data type', 'operator', 'loop', 'array', 'function', 'keyword', 'identifier', 'format specifier'], + }, + ACtE0302: { + strong: ['pointer', 'pointers', 'malloc', 'calloc', 'realloc', 'free()', 'dereference', 'struct', 'structure', 'union', 'fopen', 'fclose', 'fscanf', 'fprintf', 'fseek', 'file pointer', 'null pointer', 'pointer arithmetic', 'self-referential'], + weak: ['address of', 'dynamic memory', 'allocation', 'member', 'nested structure', 'data file', 'text file', 'binary file', 'record'], + }, + ACtE0303: { + strong: ['cout', 'cin', 'iostream', 'constructor', 'destructor', 'this pointer', 'member function', 'access specifier', 'friend function', 'static member', 'inline function', 'copy constructor', 'namespace', 'reference variable'], + weak: ['class', 'object', 'c++', 'private', 'public', 'protected', 'instance', 'declaration', 'scope resolution'], + }, + ACtE0304: { + strong: ['inheritance', 'polymorphism', 'encapsulation', 'abstraction', 'overloading', 'operator overloading', 'function overloading', 'base class', 'derived class', 'multiple inheritance', 'hybrid inheritance', 'diamond problem', 'message passing'], + weak: ['oop', 'object-oriented', 'object oriented', 'reusability', 'data hiding', 'feature', 'paradigm'], + }, + ACtE0305: { + strong: ['virtual function', 'pure virtual', 'abstract class', 'vtable', 'dynamic binding', 'late binding', 'early binding', 'overriding', 'ofstream', 'ifstream', 'fstream', 'stream', 'file handling', 'seekg', 'seekp'], + weak: ['virtual', 'runtime polymorphism', 'binding', 'file mode', 'open mode', 'stream class'], + }, + ACtE0306: { + strong: ['template', 'templates', 'generic programming', 'class template', 'function template', 'exception handling', 'try', 'catch', 'throw', 'stl', 'standard template library', 'iterator', 'vector<', 'container class'], + weak: ['generic', 'exception', 'error handling', 'rethrow', 'type parameter', 'instantiation'], + }, + + /* ── Chapter 4 — Computer Organization and Embedded System ──────────────── */ + ACtE0401: { + strong: ['control unit', 'microprogram', 'microinstruction', 'hardwired control', 'register transfer', 'rtl', 'cpu organization', 'datapath', 'instruction pipeline', 'pipelining', 'risc', 'cisc', 'general register organization', 'stack organization', 'instruction format', 'addressing mode', 'effective address', 'alu', 'control memory', 'instruction cycle', 'register set', 'accumulator'], + weak: ['central processing', 'control signal', 'sequencer', 'processor', 'execution unit', 'cpu', 'instruction', 'operand', 'opcode'], + }, + ACtE0402: { + strong: ['booth', 'booth algorithm', 'floating point', 'ieee 754', 'cache memory', 'cache mapping', 'associative mapping', 'direct mapping', 'set associative', 'write through', 'write back', 'cache write policy', 'multilevel cache', 'cache hierarchy', 'virtual memory', 'tlb', 'memory hierarchy', 'hit ratio', 'miss rate', 'locality of reference', 'rom', 'ram', 'sram', 'dram', 'division algorithm', "2's complement representation", 'least recently used', 'lru'], + weak: ['computer arithmetic', 'multiplication', 'division', 'overflow', 'normalization', 'mantissa', 'exponent', 'memory system', 'main memory', 'auxiliary memory'], + }, + ACtE0403: { + strong: ['input-output', 'i/o interface', 'i/o transfer', 'i/o transfer mode', 'programmed i/o', 'interrupt-initiated', 'dma', 'dma controller', 'direct memory access', 'memory-mapped i/o', 'isolated i/o', 'iop', 'daisy chain', 'serial communication', 'asynchronous transfer', 'strobe', 'handshaking', 'multiprocessor', 'crossbar', 'cache coherence', 'interprocessor', 'flynn'], + weak: ['peripheral device', 'i/o', 'bus arbitration', 'priority encoder', 'shared memory', 'tightly coupled', 'loosely coupled'], + }, + ACtE0404: { + strong: ['embedded system', 'microcontroller', '8051', 'arduino', 'firmware', 'watchdog timer', 'adc', 'dac', 'sensor', 'actuator', 'i2c', 'spi', 'uart', 'cross compiler', 'in-circuit', 'bootloader', 'soc', 'system on chip', 'asip', 'application-specific instruction', 'single-purpose processor', 'general-purpose processor', 'custom processor', 'hardware software co-design', 'design metric'], + weak: ['embedded', 'on-chip', 'peripheral port', 'timer', 'counter module', 'power consumption', 'target board'], + }, + ACtE0405: { + strong: ['real-time operating', 'rtos', 'hard real-time', 'soft real-time', 'task scheduling', 'rate monotonic', 'earliest deadline', 'priority inversion', 'context switch', 'semaphore', 'mutex', 'deadline', 'jitter', 'closed loop', 'open loop', 'pid controller', 'transfer function', 'process', 'thread', 'preemptive scheduling', 'scheduling algorithm', 'busy waiting', 'synchronization mechanism', 'device driver', 'kernel', 'spinlock', 'round robin'], + weak: ['real-time', 'real time', 'scheduler', 'latency', 'preemptive', 'control system', 'feedback control', 'stability', 'operating system', 'task'], + }, + ACtE0406: { + strong: ['hdl', 'vhdl', 'verilog', 'fpga', 'cpld', 'asic', 'synthesis', 'testbench', 'behavioral modelling', 'structural modelling', 'dataflow modelling', 'netlist', 'place and route', 'ssi', 'msi', 'lsi', 'vlsi', 'photolithography', 'fabrication'], + weak: ['hardware description', 'ic technology', 'integrated circuit', 'simulation', 'entity', 'module', 'wafer', 'gate array'], + }, + + /* ── Chapter 5 — Computer Network and Network Security ──────────────────── */ + ACtE0501: { + strong: ['osi model', 'osi layer', 'tcp/ip model', 'physical layer', 'topology', 'bus topology', 'star topology', 'ring topology', 'mesh topology', 'coaxial', 'twisted pair', 'fiber optic', 'optical fiber', 'nyquist', 'shannon', 'modulation', 'multiplexing', 'tdm', 'fdm', 'wdm', 'baud', 'attenuation', 'manchester encoding', 'nrz'], + weak: ['layer', 'transmission medium', 'bandwidth', 'lan', 'wan', 'man', 'bit rate', 'signal', 'guided media', 'unguided'], + }, + ACtE0502: { + strong: ['data link layer', 'mac address', 'framing', 'crc', 'cyclic redundancy', 'hamming', 'parity', 'error detection', 'error correction', 'stop-and-wait', 'sliding window', 'go-back-n', 'selective repeat', 'hdlc', 'csma', 'csma/cd', 'csma/ca', 'aloha', 'ethernet', 'switch', 'bridge', 'arq', 'piggyback'], + weak: ['frame', 'flow control', 'checksum', 'collision', 'media access', 'retransmission', 'acknowledgement', 'hub'], + }, + ACtE0503: { + strong: ['network layer', 'ip address', 'ipv4', 'ipv6', 'subnet', 'subnet mask', 'subnetting', 'cidr', 'routing', 'router', 'routing table', 'rip', 'ospf', 'bgp', 'distance vector', 'link state', 'dijkstra', 'icmp', 'arp', 'nat', 'fragmentation', 'ttl', 'classful', 'classless', 'default gateway'], + weak: ['packet', 'datagram', 'route', 'hop', 'forwarding', 'address class', 'broadcast address', 'host id', 'network id'], + }, + ACtE0504: { + strong: ['transport layer', 'tcp', 'udp', 'port number', 'three-way handshake', 'congestion control', 'slow start', 'sliding window protocol', 'socket', 'segment', 'sequence number', 'connection-oriented', 'connectionless', 'nagle', 'silly window'], + weak: ['end-to-end', 'reliable delivery', 'multiplexing port', 'well-known port', 'ephemeral', 'handshake', 'teardown'], + }, + ACtE0505: { + strong: ['application layer', 'http', 'https', 'ftp', 'smtp', 'pop3', 'imap', 'dns', 'dhcp', 'telnet', 'ssh', 'snmp', 'url', 'uri', 'mime', 'web server', 'cookie', 'proxy server', 'cdn', 'rest'], + weak: ['email', 'domain name', 'client-server', 'browser', 'hypertext', 'port 80', 'resolver', 'protocol port'], + }, + ACtE0506: { + strong: ['cryptography', 'encryption', 'decryption', 'symmetric key', 'asymmetric key', 'public key', 'private key', 'rsa', 'des', 'aes', 'diffie-hellman', 'digital signature', 'certificate authority', 'hash function', 'md5', 'sha', 'firewall', 'ids', 'intrusion detection', 'vpn', 'ssl', 'tls', 'kerberos', 'denial of service', 'malware', 'phishing'], + weak: ['security', 'cipher', 'plaintext', 'ciphertext', 'key exchange', 'authentication', 'authorization', 'integrity', 'confidentiality', 'attack'], + }, + + /* ── Chapter 6 — Theory of Computation and Computer Graphics ────────────── */ + ACtE0601: { + strong: ['finite automata', 'finite automaton', 'dfa', 'nfa', 'epsilon-nfa', 'regular expression', 'regular language', 'pumping lemma for regular', 'myhill-nerode', 'state minimization', 'moore machine', 'mealy machine', 'kleene'], + weak: ['automata', 'automaton', 'transition function', 'accepting state', 'final state', 'start state', 'alphabet', 'string acceptance', 'regular'], + }, + ACtE0602: { + strong: ['context-free grammar', 'context free grammar', 'cfg', 'context-free language', 'pushdown automata', 'pda', 'parse tree', 'derivation tree', 'ambiguous grammar', 'chomsky normal form', 'greibach', 'left recursion', 'useless symbol', 'leftmost derivation'], + weak: ['grammar', 'production rule', 'terminal', 'non-terminal', 'derivation', 'parsing', 'context-free', 'stack automaton'], + }, + ACtE0603: { + strong: ['turing machine', 'turing', 'halting problem', 'decidable', 'undecidable', 'recursively enumerable', 'church-turing', 'post correspondence', 'np-complete', 'np-hard', 'reducibility', 'universal turing', 'linear bounded automata', 'rice theorem'], + weak: ['tape', 'tape head', 'computability', 'recursive language', 'complexity class', 'polynomial time', 'intractable'], + }, + ACtE0604: { + strong: ['raster scan', 'random scan', 'frame buffer', 'crt', 'pixel', 'resolution', 'aspect ratio', 'dda algorithm', 'bresenham', 'line drawing', 'midpoint circle', 'scan line fill', 'boundary fill', 'flood fill', 'anti-aliasing', 'cohen-sutherland', 'clipping', 'viewport'], + weak: ['graphics', 'display device', 'rasterization', 'refresh rate', 'interlacing', 'colour model', 'rgb', 'cmy', 'window'], + }, + ACtE0605: { + strong: ['2d transformation', '2d transformations', 'two-dimensional transformation', 'homogeneous coordinate', 'composite transformation', 'shearing', 'reflection about', 'rotation matrix', 'scaling factor', 'translation vector'], + weak: ['transformation', 'translation', 'rotation', 'scaling', 'shear', 'reflection', 'matrix', '2d', 'coordinate'], + }, + ACtE0606: { + strong: ['3d transformation', '3d transformations', 'three-dimensional transformation', 'projection', 'parallel projection', 'perspective projection', 'orthographic', 'vanishing point', 'hidden surface', 'z-buffer', 'depth buffer', 'back-face', 'painter algorithm', 'bezier', 'b-spline', 'phong', 'gouraud', 'ray tracing'], + weak: ['3d', 'three-dimensional', 'viewing pipeline', 'surface', 'solid modelling', 'shading', 'illumination', 'camera'], + }, + + /* ── Chapter 7 — Data Structures, Database and Operating System ─────────── */ + ACtE0701: { + strong: ['linked list', 'singly linked', 'doubly linked', 'circular linked', 'stack push', 'stack pop', 'queue enqueue', 'dequeue', 'circular queue', 'priority queue', 'binary tree', 'binary search tree', 'bst', 'avl tree', 'b-tree', 'b+ tree', 'heap', 'tree traversal', 'preorder', 'inorder', 'postorder', 'infix', 'postfix', 'prefix notation'], + weak: ['data structure', 'list', 'tree', 'node pointer', 'stack', 'queue', 'abstract data type', 'adt', 'traversal', 'leaf', 'height of tree', 'balanced'], + }, + ACtE0702: { + strong: ['bubble sort', 'selection sort', 'insertion sort', 'merge sort', 'quick sort', 'quicksort', 'heap sort', 'radix sort', 'shell sort', 'counting sort', 'linear search', 'binary search', 'hashing', 'hash table', 'collision resolution', 'bfs', 'dfs', 'breadth-first', 'depth-first', 'kruskal', 'prim', 'bellman-ford', 'floyd-warshall', 'minimum spanning tree', 'topological sort', 'dynamic programming', 'greedy algorithm', 'divide and conquer'], + weak: ['sorting', 'searching', 'graph', 'adjacency matrix', 'adjacency list', 'shortest path', 'complexity', 'big-o', 'stable sort', 'in-place', 'pivot'], + }, + ACtE0703: { + strong: ['er model', 'entity-relationship', 'relational model', 'normalization', '1nf', '2nf', '3nf', 'bcnf', 'functional dependency', 'candidate key', 'primary key', 'foreign key', 'super key', 'sql', 'select statement', 'join', 'inner join', 'outer join', 'group by', 'relational algebra', 'relational calculus', 'denormalization', 'dbms architecture', 'schema', 'tuple'], + weak: ['database', 'data model', 'relation', 'attribute', 'cardinality', 'query', 'table', 'view', 'constraint', 'dependency'], + }, + ACtE0704: { + strong: ['transaction', 'acid', 'atomicity', 'durability', 'serializability', 'concurrency control', 'two-phase locking', '2pl', 'lock', 'shared lock', 'exclusive lock', 'deadlock detection', 'timestamp ordering', 'checkpoint', 'rollback', 'commit', 'write-ahead log', 'recovery', 'dirty read', 'phantom read', 'isolation level', 'cascading abort'], + weak: ['schedule', 'conflict', 'log record', 'undo', 'redo', 'concurrent execution', 'granularity', 'wait-for graph'], + }, + ACtE0705: { + strong: ['process state', 'process control block', 'pcb', 'cpu scheduling', 'fcfs', 'sjf', 'shortest job', 'round robin', 'priority scheduling', 'turnaround time', 'waiting time', 'context switching', 'thread', 'multithreading', 'critical section', 'producer-consumer', "dekker", 'peterson', 'banker algorithm', 'system call', 'kernel mode', 'user mode', 'monolithic kernel', 'microkernel', 'ipc'], + weak: ['operating system', 'process', 'scheduling', 'deadlock', 'starvation', 'synchronization', 'cpu burst', 'ready queue', 'preemption', 'os'], + }, + ACtE0706: { + strong: ['paging', 'page table', 'page fault', 'segmentation', 'demand paging', 'page replacement', 'fifo replacement', 'lru', 'optimal replacement', 'thrashing', 'working set', 'belady', 'swapping', 'fragmentation', 'best fit', 'worst fit', 'first fit', 'inode', 'fat', 'file allocation', 'directory structure', 'disk scheduling', 'seek time', 'fcfs disk', 'sstf', 'elevator algorithm', 'raid'], + weak: ['memory management', 'file system', 'allocation strategy', 'virtual address', 'physical address', 'frame', 'disk', 'administration', 'backup', 'mounting'], + }, + + /* ── Chapter 8 — Software Engineering and OOAD ──────────────────────────── */ + ACtE0801: { + strong: ['waterfall model', 'spiral model', 'incremental model', 'prototype model', 'rad model', 'v-model', 'big bang model', 'agile', 'scrum', 'extreme programming', 'software process model', 'requirement elicitation', 'requirement analysis', 'requirement management', 'requirement engineering', 'requirement document', 'interface specification', 'srs', 'functional requirement', 'non-functional requirement', 'feasibility study', 'requirement validation', 'cmm', 'process maturity'], + weak: ['software process', 'requirement', 'sdlc', 'life cycle', 'stakeholder', 'specification', 'phase', 'iteration', 'customer'], + }, + ACtE0802: { + strong: ['cohesion', 'coupling', 'modularity', 'modular decomposition', 'architectural design', 'data flow diagram', 'dfd', 'structure chart', 'decision table', 'design pattern', 'top-down design', 'bottom-up design', 'information hiding', 'interface design', 'software architecture', 'layered architecture', 'reference architecture', 'design heuristic', 'real-time software design', 'case tool', 'computer-aided software engineering', 'software design'], + weak: ['module', 'abstraction level', 'component', 'refinement', 'design document', 'pseudocode', 'flowchart', 'design'], + }, + ACtE0803: { + strong: ['unit testing', 'integration testing', 'system testing', 'acceptance testing', 'black box testing', 'white box testing', 'regression testing', 'alpha testing', 'beta testing', 'test case', 'cyclomatic complexity', 'basis path', 'boundary value', 'equivalence partition', 'cocomo', 'function point', 'loc estimation', 'effort estimation', 'software quality', 'iso 9001', 'six sigma', 'mccall', 'software reliability', 'defect density', 'test automation', 'formal technical review', 'cmmi', 'test plan', 'test driver', 'test stub', 'mutation testing'], + weak: ['testing', 'test', 'debugging', 'verification', 'validation', 'cost estimation', 'quality management', 'quality assurance', 'metric', 'walkthrough', 'inspection', 'review'], + }, + ACtE0804: { + strong: ['use case diagram', 'use case', 'actor', 'object-oriented analysis', 'ooa', 'object-oriented development', 'object-oriented modeling', 'object-oriented modelling', 'domain model', 'conceptual model', 'crc card', 'object identification', 'association multiplicity', 'association', 'aggregation', 'composition relationship', 'generalization', 'class diagram'], + weak: ['object-oriented fundamental', 'analysis model', 'object model', 'identity', 'classification', 'relationship', 'scenario', 'uml', 'object-oriented'], + }, + ACtE0805: { + strong: ['sequence diagram', 'collaboration diagram', 'interaction diagram', 'state chart diagram', 'statechart', 'activity diagram', 'component diagram', 'deployment diagram', 'object-oriented design', 'ood', 'design class', 'responsibility assignment', 'grasp', 'solid principle', 'open-closed principle', 'liskov', 'system behavior', 'system behaviour', 'transition from analysis to design'], + weak: ['design model', 'dynamic model', 'static model', 'message sequence', 'lifeline', 'operation signature', 'visibility'], + }, + ACtE0806: { + strong: ['implementation strategy', 'code generation from design', 'forward engineering', 'reverse engineering', 'reengineering', 'refactoring', 'object persistence', 'object-oriented database', 'mapping class to table', 'mapping design to code', 'class definition', 'design to code', 'software reuse', 'component reuse', 'maintenance type', 'corrective maintenance', 'adaptive maintenance', 'legacy system', 'configuration management', 'version control', 'exception handling'], + weak: ['implementation', 'coding standard', 'maintenance', 'deployment', 'migration', 'documentation', 'build'], + }, + + /* ── Chapter 9 — Artificial Intelligence and Neural Networks ────────────── */ + ACtE0901: { + strong: ['turing test', 'intelligent agent', 'rational agent', 'agent architecture', 'simple reflex agent', 'model-based agent', 'goal-based agent', 'utility-based agent', 'learning agent', 'pe-as', 'peas', 'agent environment', 'history of ai', 'strong ai', 'weak ai'], + weak: ['artificial intelligence', 'ai', 'agent', 'percept', 'sensor input', 'environment type', 'intelligence', 'application of ai'], + }, + ACtE0902: { + strong: ['breadth-first search', 'depth-first search', 'uniform cost search', 'iterative deepening', 'bidirectional search', 'best-first search', 'greedy best-first', 'a* search', 'a-star', 'heuristic function', 'admissible heuristic', 'hill climbing', 'simulated annealing', 'genetic algorithm', 'minimax', 'alpha-beta pruning', 'constraint satisfaction', 'state space search', 'means-ends'], + weak: ['search technique', 'problem solving', 'search tree', 'goal state', 'initial state', 'path cost', 'optimality', 'completeness', 'branching factor', 'game playing'], + }, + ACtE0903: { + strong: ['propositional logic', 'predicate logic', 'first-order logic', 'fol', 'resolution refutation', 'unification', 'forward chaining', 'backward chaining', 'horn clause', 'semantic network', 'conceptual graph', 'frame representation', 'script representation', 'ontology', 'inference rule', 'modus ponens', 'cnf conversion', 'skolemization', 'non-monotonic reasoning', 'bayesian network', 'certainty factor', 'fuzzy logic'], + weak: ['knowledge representation', 'knowledge base', 'inference', 'reasoning', 'logic', 'quantifier', 'predicate', 'clause', 'uncertainty'], + }, + ACtE0904: { + strong: ['expert system', 'knowledge acquisition', 'inference engine', 'mycin', 'dendral', 'shell of expert', 'explanation facility', 'natural language processing', 'nlp', 'morphological analysis', 'syntactic analysis', 'semantic analysis', 'pragmatic analysis', 'parsing sentence', 'speech recognition', 'machine translation', 'tokenization', 'part of speech'], + weak: ['expert', 'domain expert', 'rule base', 'natural language', 'language understanding', 'ambiguity', 'discourse', 'corpus'], + }, + ACtE0905: { + strong: ['supervised learning', 'unsupervised learning', 'reinforcement learning', 'decision tree learning', 'id3', 'information gain', 'entropy', 'naive bayes', 'k-nearest', 'knn', 'k-means', 'clustering', 'support vector', 'svm', 'overfitting', 'underfitting', 'cross-validation', 'training set', 'test set', 'confusion matrix', 'regression model', 'q-learning'], + weak: ['machine learning', 'learning algorithm', 'classification', 'prediction', 'feature', 'label', 'dataset', 'accuracy', 'generalization'], + }, + ACtE0906: { + strong: ['neural network', 'neural networks', 'perceptron', 'multilayer perceptron', 'backpropagation', 'back propagation', 'activation function', 'sigmoid function', 'relu', 'tanh function', 'hidden layer', 'feedforward network', 'recurrent neural', 'rnn', 'cnn', 'convolutional', 'hopfield', 'boltzmann', 'kohonen', 'self-organizing map', 'hebbian', 'gradient descent', 'deep learning'], + weak: ['neuron', 'artificial neuron', 'synaptic weight', 'bias term', 'layer', 'threshold function', 'epoch', 'learning rate', 'network topology'], + }, + + /* ── Chapter 10 — Project Planning, Design and Implementation ───────────── */ + AALL1001: { + strong: ['engineering drawing', 'orthographic projection', 'isometric', 'first angle', 'third angle', 'sectional view', 'dimensioning', 'drawing scale', 'drawing sheet', 'sheet size', 'cad', 'autocad', 'line type', 'title block', 'blueprint reading', 'plan and elevation', 'site plan', 'lettering', 'drawing standard'], + weak: ['drawing', 'projection view', 'sketch', 'symbol', 'drafting', 'layout drawing', 'scale', 'view'], + }, + AALL1002: { + strong: ['engineering economics', 'time value of money', 'present worth', 'future worth', 'annuity', 'compound interest', 'simple interest', 'rate of return', 'irr', 'npv', 'net present value', 'benefit-cost ratio', 'payback period', 'depreciation', 'straight line depreciation', 'break-even', 'cash flow', 'cash flow diagram', 'inflation', 'replacement analysis', 'comparison of alternatives', 'corporate tax', 'tax rate', 'minimum attractive rate', 'sunk cost', 'opportunity cost'], + weak: ['economics', 'interest rate', 'cost analysis', 'discount rate', 'salvage value', 'capital', 'investment', 'economic life'], + }, + AALL1003: { + strong: ['cpm', 'critical path', 'critical path method', 'pert', 'gantt chart', 'network diagram', 'float', 'slack time', 'forward pass', 'backward pass', 'earliest start', 'latest finish', 'crashing', 'wbs', 'work breakdown structure', 'milestone', 'resource levelling', 'resource leveling', 'resource smoothing', 'resource allocation', 'bar chart schedule', 'project planning', 'project baseline', 'project schedule'], + weak: ['scheduling', 'activity duration', 'dependency', 'sequence of activity', 'timeline', 'critical activity', 'planning'], + }, + AALL1004: { + strong: ['project management', 'project manager', 'project life cycle', 'project phase', 'project organization', 'matrix organization', 'stakeholder management', 'risk management', 'risk analysis', 'risk register', 'procurement', 'contract type', 'contract management', 'fixed-price contract', 'request for proposal', 'rfp', 'tender', 'bidding', 'quality control in project', 'project monitoring', 'monitoring and evaluation', 'project control', 'project execution', 'project classification', 'project financing', 'project information system', 'change management', 'earned value', 'project closure', 'pmbok', 'characteristic of a project'], + weak: ['management function', 'leadership', 'team', 'organization structure', 'planning function', 'controlling', 'project scope', 'budget', 'project'], + }, + AALL1005: { + strong: ['professional practice', 'code of ethics', 'engineering ethics', 'professional ethics', 'professional liability', 'professional negligence', 'conflict of interest', 'whistleblowing', 'intellectual property', 'patent', 'copyright', 'trademark', 'professional conduct', 'duty of care', 'safety responsibility', 'consulting engineer', 'occupational health', 'health and safety', 'environmental consideration', 'environmental impact', 'sustainable engineering', 'sustainability', 'public safety'], + weak: ['ethics', 'ethical', 'profession', 'professionalism', 'responsibility', 'obligation', 'public welfare', 'moral'], + }, + AALL1006: { + strong: ['nepal engineering council', 'nec act', 'nec regulation', 'nec registration', 'engineering council act', 'licensing requirement', 'registration of engineer', 'professional licence', 'professional license', 'regulatory body', 'disciplinary action', 'nepal engineers association', 'scope of work regulation', 'renewal of licence', 'statutory body', 'engineering council'], + weak: ['council', 'regulation', 'act', 'licence', 'license', 'registration', 'authority', 'bylaw', 'legal provision'], + }, +}; diff --git a/frontend/src/data/syllabus.ts b/frontend/src/data/syllabus.ts new file mode 100644 index 0000000..9b765ed --- /dev/null +++ b/frontend/src/data/syllabus.ts @@ -0,0 +1,373 @@ +/** + * The official Nepal Engineering Council (NEC) licence-exam syllabus for the + * Computer Engineering stream (stream code `ACtE`), modelled as typed data. + * + * SOURCE OF TRUTH + * --------------- + * Chapter and sub-chapter titles are lifted verbatim from the hardcoded + * `SYLLABUS` constant in `src/pages/app/BookPractice.tsx`, which in turn + * transcribes the official NEC syllabus PDF. Nothing here is invented. + * + * STRUCTURE + * --------- + * The official syllabus is exactly 10 chapters x exactly 6 sub-chapters = 60 + * coded sub-chapters. Chapter code prefixes are *not* uniform — chapters 1-2 + * are the shared electrical/electronics core (`AExE`), chapters 3-9 are the + * Computer Engineering stream (`ACtE`), and chapter 10 is common to every + * engineering stream (`AALL`): + * + * ch1 AExE01 ch4 ACtE04 ch7 ACtE07 ch10 AALL10 + * ch2 AExE02 ch5 ACtE05 ch8 ACtE08 + * ch3 ACtE03 ch6 ACtE06 ch9 ACtE09 + * + * A sub-chapter code is its chapter code plus a zero-padded 1-based index, + * e.g. `ACtE03` -> `ACtE0301` .. `ACtE0306`. + * + * COMPILE-TIME GUARANTEES + * ----------------------- + * `SYLLABUS_SOURCE` is declared `as const satisfies Tuple10` + * where `ChapterSource.subchapters` is `Tuple6`. Adding or + * removing a chapter or a sub-chapter is therefore a type error, not a silent + * data drift. `SyllabusHasTenChapters` / `EverySyllabusChapterHasSixSubchapters` + * below restate those invariants as explicit type-level assertions, and + * `__tests__/syllabus.test.ts` re-checks them at runtime. + */ + +/** Exactly six of `T`. */ +type Tuple6 = readonly [T, T, T, T, T, T]; + +/** Exactly ten of `T`. */ +type Tuple10 = readonly [T, T, T, T, T, T, T, T, T, T]; + +interface SubchapterSource { + readonly code: string; + readonly title: string; +} + +interface ChapterSource { + readonly number: number; + readonly code: string; + readonly title: string; + /** The shipped question-bank chapter this syllabus chapter maps onto. */ + readonly bookChapterId: string; + readonly subchapters: Tuple6; +} + +const SYLLABUS_SOURCE = [ + { + number: 1, + code: 'AExE01', + title: 'Concept of Basic Electrical and Electronics Engineering', + bookChapterId: 'book-ch1', + subchapters: [ + { code: 'AExE0101', title: 'Basic Concept' }, + { code: 'AExE0102', title: 'Network Theorems' }, + { code: 'AExE0103', title: 'Alternating Current Fundamentals' }, + { code: 'AExE0104', title: 'Semiconductor Devices' }, + { code: 'AExE0105', title: 'Signal Generators' }, + { code: 'AExE0106', title: 'Amplifiers' }, + ], + }, + { + number: 2, + code: 'AExE02', + title: 'Digital Logic and Microprocessor', + bookChapterId: 'book-ch2', + subchapters: [ + { code: 'AExE0201', title: 'Digital Logic' }, + { code: 'AExE0202', title: 'Combinational and Arithmetic Circuits' }, + { code: 'AExE0203', title: 'Sequential Logic Circuits' }, + { code: 'AExE0204', title: 'Microprocessor' }, + { code: 'AExE0205', title: 'Microprocessor System' }, + { code: 'AExE0206', title: 'Interrupt Operations' }, + ], + }, + { + number: 3, + code: 'ACtE03', + title: 'Programming Language and Its Applications', + bookChapterId: 'book-ch3', + subchapters: [ + { code: 'ACtE0301', title: 'Introduction to C Programming' }, + { code: 'ACtE0302', title: 'Pointers, Structure and Data Files in C' }, + { code: 'ACtE0303', title: 'C++ with Objects and Classes' }, + { code: 'ACtE0304', title: 'Object-Oriented Programming Features' }, + { code: 'ACtE0305', title: 'Virtual Functions and File Handling' }, + { code: 'ACtE0306', title: 'Generic Programming and Exception Handling' }, + ], + }, + { + number: 4, + code: 'ACtE04', + title: 'Computer Organization and Embedded System', + bookChapterId: 'book-ch4', + subchapters: [ + { code: 'ACtE0401', title: 'Control and Central Processing Units' }, + { code: 'ACtE0402', title: 'Computer Arithmetic and Memory System' }, + { code: 'ACtE0403', title: 'Input-Output Organization and Multiprocessor' }, + { code: 'ACtE0404', title: 'Embedded System Design' }, + { code: 'ACtE0405', title: 'Real-Time OS and Control Systems' }, + { code: 'ACtE0406', title: 'HDL and IC Technology' }, + ], + }, + { + number: 5, + code: 'ACtE05', + title: 'Concept of Computer Network and Network Security System', + bookChapterId: 'book-ch5', + subchapters: [ + { code: 'ACtE0501', title: 'Introduction and Physical Layer' }, + { code: 'ACtE0502', title: 'Data Link Layer' }, + { code: 'ACtE0503', title: 'Network Layer' }, + { code: 'ACtE0504', title: 'Transport Layer' }, + { code: 'ACtE0505', title: 'Application Layer' }, + { code: 'ACtE0506', title: 'Network Security' }, + ], + }, + { + number: 6, + code: 'ACtE06', + title: 'Theory of Computation and Computer Graphics', + bookChapterId: 'book-ch6', + subchapters: [ + { code: 'ACtE0601', title: 'Finite Automata' }, + { code: 'ACtE0602', title: 'Context-Free Languages' }, + { code: 'ACtE0603', title: 'Turing Machines' }, + { code: 'ACtE0604', title: 'Introduction to Computer Graphics' }, + { code: 'ACtE0605', title: '2D Transformations' }, + { code: 'ACtE0606', title: '3D Transformations' }, + ], + }, + { + number: 7, + code: 'ACtE07', + title: 'Data Structures and Algorithm, Database System and Operating System', + bookChapterId: 'book-ch7', + subchapters: [ + { code: 'ACtE0701', title: 'Data Structures, Lists and Trees' }, + { code: 'ACtE0702', title: 'Sorting, Searching and Graphs' }, + { code: 'ACtE0703', title: 'Data Models, Normalization and SQL' }, + { code: 'ACtE0704', title: 'Transaction Processing and Concurrency Control' }, + { code: 'ACtE0705', title: 'Introduction to OS and Process Management' }, + { code: 'ACtE0706', title: 'Memory Management, File Systems and Administration' }, + ], + }, + { + number: 8, + code: 'ACtE08', + title: 'Software Engineering and Object-Oriented Analysis & Design', + bookChapterId: 'book-ch8', + subchapters: [ + { code: 'ACtE0801', title: 'Software Process and Requirements' }, + { code: 'ACtE0802', title: 'Software Design' }, + { code: 'ACtE0803', title: 'Testing, Cost Estimation and Quality Management' }, + { code: 'ACtE0804', title: 'OO Fundamentals and Analysis' }, + { code: 'ACtE0805', title: 'OO Design' }, + { code: 'ACtE0806', title: 'OO Design Implementation' }, + ], + }, + { + number: 9, + code: 'ACtE09', + title: 'Artificial Intelligence and Neural Networks', + bookChapterId: 'book-ch9', + subchapters: [ + { code: 'ACtE0901', title: 'Introduction to AI and Intelligent Agents' }, + { code: 'ACtE0902', title: 'Problem Solving and Searching Techniques' }, + { code: 'ACtE0903', title: 'Knowledge Representation' }, + { code: 'ACtE0904', title: 'Expert Systems and NLP' }, + { code: 'ACtE0905', title: 'Machine Learning' }, + { code: 'ACtE0906', title: 'Neural Networks' }, + ], + }, + { + number: 10, + code: 'AALL10', + title: 'Project Planning, Design and Implementation', + bookChapterId: 'book-ch10', + subchapters: [ + { code: 'AALL1001', title: 'Engineering Drawings and Concepts' }, + { code: 'AALL1002', title: 'Engineering Economics' }, + { code: 'AALL1003', title: 'Project Planning and Scheduling' }, + { code: 'AALL1004', title: 'Project Management' }, + { code: 'AALL1005', title: 'Engineering Professional Practice' }, + { code: 'AALL1006', title: 'Engineering Regulatory Body' }, + ], + }, +] as const satisfies Tuple10; + +/* ------------------------------------------------------------------ * + * Derived literal types — these narrow automatically with the data. + * ------------------------------------------------------------------ */ + +/** One of the ten official chapter codes, e.g. `'ACtE03'`. */ +export type ChapterCode = (typeof SYLLABUS_SOURCE)[number]['code']; + +/** One of the sixty official sub-chapter codes, e.g. `'ACtE0304'`. */ +export type SubchapterCode = (typeof SYLLABUS_SOURCE)[number]['subchapters'][number]['code']; + +/** Chapter ordinal, 1-10. */ +export type ChapterNumber = (typeof SYLLABUS_SOURCE)[number]['number']; + +/** The shipped question-bank chapter ids, `'book-ch1'` .. `'book-ch10'`. */ +export type BookChapterId = (typeof SYLLABUS_SOURCE)[number]['bookChapterId']; + +/** Sub-chapter position within its chapter, 1-6. */ +export type SubchapterIndex = 1 | 2 | 3 | 4 | 5 | 6; + +/* ------------------------------------------------------------------ * + * Type-level restatement of the structural invariants. + * ------------------------------------------------------------------ */ + +type AssertTrue = T; +type Equals = (() => X extends A ? 1 : 2) extends () => X extends B ? 1 : 2 + ? true + : false; + +/** Fails to compile unless the syllabus has exactly 10 chapters. */ +export type SyllabusHasTenChapters = AssertTrue>; + +/** Fails to compile unless every chapter has exactly 6 sub-chapters. */ +export type EverySyllabusChapterHasSixSubchapters = AssertTrue< + Equals<(typeof SYLLABUS_SOURCE)[number]['subchapters']['length'], 6> +>; + +/* ------------------------------------------------------------------ * + * Public shapes. + * ------------------------------------------------------------------ */ + +export interface SyllabusSubchapter { + /** Official code, e.g. `'ACtE0304'`. */ + readonly code: SubchapterCode; + /** Owning chapter's official code, e.g. `'ACtE03'`. */ + readonly chapterCode: ChapterCode; + /** Owning chapter's ordinal, 1-10. */ + readonly chapterNumber: ChapterNumber; + /** Position within the chapter, 1-6. */ + readonly index: SubchapterIndex; + /** Human-facing dotted code, e.g. `'3.4'` — what BookPractice.tsx shows. */ + readonly displayCode: string; + /** Official title, verbatim from the syllabus. */ + readonly title: string; +} + +export interface SyllabusChapter { + readonly code: ChapterCode; + readonly number: ChapterNumber; + readonly title: string; + /** The `book-chN` id in `bookChapters.generated.ts` this chapter maps to. */ + readonly bookChapterId: BookChapterId; + readonly subchapters: readonly SyllabusSubchapter[]; +} + +/** Number of chapters in the official syllabus. */ +export const CHAPTER_COUNT = 10; +/** Sub-chapters per chapter in the official syllabus. */ +export const SUBCHAPTERS_PER_CHAPTER = 6; +/** Total coded sub-chapters: `CHAPTER_COUNT * SUBCHAPTERS_PER_CHAPTER`. */ +export const SUBCHAPTER_COUNT = 60; + +/** 1-based index lookup — avoids casting `array.map` positions. */ +const SUBCHAPTER_INDEXES: Tuple6 = [1, 2, 3, 4, 5, 6]; + +function buildChapter(source: (typeof SYLLABUS_SOURCE)[number]): SyllabusChapter { + const subchapters: SyllabusSubchapter[] = source.subchapters.map((sub, position) => { + const index = SUBCHAPTER_INDEXES[position]; + return { + code: sub.code, + chapterCode: source.code, + chapterNumber: source.number, + index, + displayCode: String(source.number) + '.' + String(index), + title: sub.title, + }; + }); + + return { + code: source.code, + number: source.number, + title: source.title, + bookChapterId: source.bookChapterId, + subchapters, + }; +} + +/** All ten chapters, in official order. */ +export const syllabusChapters: readonly SyllabusChapter[] = SYLLABUS_SOURCE.map(buildChapter); + +/** All sixty sub-chapters, flattened in official order. */ +export const syllabusSubchapters: readonly SyllabusSubchapter[] = syllabusChapters.flatMap( + chapter => chapter.subchapters, +); + +/** All ten chapter codes, in official order. */ +export const chapterCodes: readonly ChapterCode[] = syllabusChapters.map(chapter => chapter.code); + +/** All sixty sub-chapter codes, in official order. */ +export const subchapterCodes: readonly SubchapterCode[] = syllabusSubchapters.map(sub => sub.code); + +/* ------------------------------------------------------------------ * + * Lookups. Built once; all helpers are O(1). + * ------------------------------------------------------------------ */ + +const chaptersByCode = new Map( + syllabusChapters.map(chapter => [chapter.code, chapter]), +); +const chaptersByNumber = new Map( + syllabusChapters.map(chapter => [chapter.number, chapter]), +); +const chaptersByBookId = new Map( + syllabusChapters.map(chapter => [chapter.bookChapterId, chapter]), +); +const subchaptersByCode = new Map( + syllabusSubchapters.map(sub => [sub.code, sub]), +); + +/** Look up a chapter by its official code. */ +export function getChapterByCode(code: string): SyllabusChapter | undefined { + return chaptersByCode.get(code); +} + +/** Look up a chapter by its ordinal (1-10). */ +export function getChapterByNumber(number: number): SyllabusChapter | undefined { + return chaptersByNumber.get(number); +} + +/** Look up a chapter by the shipped question-bank id, e.g. `'book-ch4'`. */ +export function getChapterByBookChapterId(bookChapterId: string): SyllabusChapter | undefined { + return chaptersByBookId.get(bookChapterId); +} + +/** Look up a sub-chapter by its official code. */ +export function getSubchapterByCode(code: string): SyllabusSubchapter | undefined { + return subchaptersByCode.get(code); +} + +/** The six sub-chapters of a chapter; empty for an unknown chapter code. */ +export function getSubchaptersForChapter(chapterCode: string): readonly SyllabusSubchapter[] { + return chaptersByCode.get(chapterCode)?.subchapters ?? []; +} + +/** The chapter that owns a sub-chapter code. */ +export function getChapterForSubchapter(subchapterCode: string): SyllabusChapter | undefined { + const sub = subchaptersByCode.get(subchapterCode); + return sub === undefined ? undefined : chaptersByCode.get(sub.chapterCode); +} + +/** Type guard: is this string one of the ten official chapter codes? */ +export function isValidChapterCode(code: string): code is ChapterCode { + return chaptersByCode.has(code); +} + +/** Type guard: is this string one of the sixty official sub-chapter codes? */ +export function isValidSubchapterCode(code: string): code is SubchapterCode { + return subchaptersByCode.has(code); +} + +/** + * The code a sub-chapter at `index` of `chapterCode` must have. + * Used by the structural tests to prove prefix + zero-padding correctness. + */ +export function expectedSubchapterCode(chapterCode: string, index: SubchapterIndex): string { + return chapterCode + String(index).padStart(2, '0'); +} diff --git a/frontend/src/data/topics.ts b/frontend/src/data/topics.ts index 93a8019..aefa449 100644 --- a/frontend/src/data/topics.ts +++ b/frontend/src/data/topics.ts @@ -1,4 +1,6 @@ // Topic & MockTest type definitions and mock test configuration. + +import { examFormat, readConfirmed } from './examBlueprint'; // Book chapter data lives in bookChapters.generated.ts (auto-generated). export interface Question { @@ -31,27 +33,48 @@ export interface MockTest { duration: number; // total time in minutes } +// A full mock mirrors the real paper: 10 chapters x 10 questions = 100 +// questions in 120 minutes, which is 72 seconds per question. The duration is +// read from examBlueprint rather than restated here - it shipped as 45 minutes +// against a 120-minute exam, a 2.7x error in every pace figure the app showed. +const FULL_MOCK_DURATION = readConfirmed(examFormat.durationMinutes); +const FULL_MOCK_PER_CHAPTER = 10; + +// The short assessment keeps the real exam's seconds-per-question so its pace +// feedback stays comparable, rather than being its own arbitrary number. +const QUICK_PER_CHAPTER = 5; +const QUICK_DURATION = Math.round( + (FULL_MOCK_DURATION * QUICK_PER_CHAPTER) / FULL_MOCK_PER_CHAPTER +); + export const mockTests: MockTest[] = [ { id: 'full-mock-1', name: 'Full Mock Test 1', - description: '10 random questions from every chapter — a fresh set each time', - questionsPerChapter: 10, - duration: 45, + description: + 'Full NEC format: 100 questions in ' + FULL_MOCK_DURATION + ' minutes, drawn fresh each time', + questionsPerChapter: FULL_MOCK_PER_CHAPTER, + duration: FULL_MOCK_DURATION, }, { id: 'full-mock-2', + // NOTE: this draws from the same pool with the same unseeded shuffle as + // Mock 1, so it is not a distinct paper. Its description used to claim a + // "different selection", which was not true. Real non-repetition across + // attempts needs per-learner history, which lives in the backend. name: 'Full Mock Test 2', - description: '10 random questions per chapter — different selection to Mock 1', - questionsPerChapter: 10, - duration: 45, + description: + 'Another full-format paper: 100 questions in ' + FULL_MOCK_DURATION + ' minutes', + questionsPerChapter: FULL_MOCK_PER_CHAPTER, + duration: FULL_MOCK_DURATION, }, { id: 'quick-test', name: 'Quick Assessment', - description: '5 questions per chapter for a fast readiness check', - questionsPerChapter: 5, - duration: 20, + description: + '50 questions in ' + QUICK_DURATION + ' minutes — half a paper, at real exam pace', + questionsPerChapter: QUICK_PER_CHAPTER, + duration: QUICK_DURATION, }, ]; diff --git a/frontend/src/features/quiz/__tests__/components.test.tsx b/frontend/src/features/quiz/__tests__/components.test.tsx new file mode 100644 index 0000000..0026bc0 --- /dev/null +++ b/frontend/src/features/quiz/__tests__/components.test.tsx @@ -0,0 +1,396 @@ +import { describe, expect, it, vi } from 'vitest'; +import { render, screen } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; +import { ExplanationPanel } from '../components/ExplanationPanel'; +import { OptionList } from '../components/OptionList'; +import { QuestionPalette } from '../components/QuestionPalette'; +import { QuizToolbar } from '../components/QuizToolbar'; +import { ResultSummary } from '../components/ResultSummary'; +import { ReviewScreen } from '../components/ReviewScreen'; +import { selectPalette } from '../selectors'; +import { select, toggleFlag } from '../actions'; +import { T0, makeQuestions, run, start } from './factory'; + +describe('OptionList', () => { + it('reports the selected option and only reveals the key when told to', async () => { + const user = userEvent.setup(); + const onChange = vi.fn(); + const { rerender } = render( + + ); + + expect(screen.getByRole('radio', { name: /Beta/ })).toBeChecked(); + // The key is index 2, but nothing may say so yet. + expect(screen.queryByText('Correct answer')).not.toBeInTheDocument(); + + await user.click(screen.getByRole('radio', { name: /Gamma/ })); + expect(onChange).toHaveBeenCalledWith(2); + + rerender( + + ); + // The shared Radio primitive makes the state audible, not colour-only. + expect(screen.getByText('Correct answer')).toBeInTheDocument(); + expect(screen.getByText('Incorrect answer')).toBeInTheDocument(); + }); + + it('shows no key at all for a question the bank cannot grade', () => { + render( + + ); + + expect(screen.queryByText('Correct answer')).not.toBeInTheDocument(); + expect(screen.getByRole('radio', { name: /Alpha/ })).toBeChecked(); + }); + + it('moves the selection with the arrow keys, per the radiogroup pattern', async () => { + const user = userEvent.setup(); + const onChange = vi.fn(); + render( + + ); + + screen.getByRole('radio', { name: /Alpha/ }).focus(); + await user.keyboard('{ArrowDown}'); + expect(onChange).toHaveBeenCalledWith(1); + + await user.keyboard('{ArrowUp}'); + // Wraps back round. + expect(onChange).toHaveBeenCalledWith(0); + }); + + it('keeps one tab stop for the whole group', () => { + render( + + ); + expect(screen.getByRole('radio', { name: /Beta/ })).toHaveAttribute('tabindex', '0'); + expect(screen.getByRole('radio', { name: /Alpha/ })).toHaveAttribute('tabindex', '-1'); + }); + + it('locks the answer without removing it from the accessibility tree', () => { + render( + + ); + const chosen = screen.getByRole('radio', { name: /Beta/ }); + expect(chosen).toHaveAttribute('aria-disabled', 'true'); + expect(chosen).not.toBeDisabled(); + }); +}); + +describe('QuizToolbar', () => { + it('renders the counter and hides the timer for untimed practice', () => { + render( + + ); + + expect(screen.getByText('3/30')).toBeInTheDocument(); + expect(screen.getByText('5 answered')).toBeInTheDocument(); + // The glyph counter is hidden from assistive tech; a sentence replaces it. + expect(screen.getByText('Question 3 of 30, 5 answered')).toBeInTheDocument(); + expect(screen.queryByRole('timer')).not.toBeInTheDocument(); + }); + + it('formats the deadline it is handed and escalates when time is short', () => { + const { rerender } = render( + + ); + expect(screen.getByRole('timer')).toHaveTextContent('45:00'); + expect(screen.getByRole('timer')).toHaveAttribute('aria-live', 'off'); + + rerender( + + ); + expect(screen.getByRole('timer')).toHaveTextContent('00:30'); + expect(screen.getByRole('timer')).toHaveAttribute('aria-live', 'assertive'); + }); + + it('exposes flag and bookmark as toggle buttons', async () => { + const user = userEvent.setup(); + const onToggleFlag = vi.fn(); + const onToggleBookmark = vi.fn(); + render( + + ); + + expect(screen.getByRole('button', { name: /Flag/ })).toHaveAttribute('aria-pressed', 'true'); + await user.click(screen.getByRole('button', { name: /Bookmark/ })); + expect(onToggleBookmark).toHaveBeenCalledTimes(1); + }); +}); + +describe('QuestionPalette', () => { + it('describes each question state and jumps on click', async () => { + const user = userEvent.setup(); + const onJump = vi.fn(); + const state = run(start({ questions: makeQuestions(3) }), select(0, 1, T0), toggleFlag(2)); + + render(); + + expect( + screen.getByRole('button', { name: 'Question 1, answered, current' }) + ).toBeInTheDocument(); + expect(screen.getByRole('button', { name: 'Question 2, unanswered' })).toBeInTheDocument(); + expect( + screen.getByRole('button', { name: 'Question 3, unanswered, flagged for review' }) + ).toBeInTheDocument(); + + await user.click(screen.getByRole('button', { name: /Question 3/ })); + expect(onJump).toHaveBeenCalledWith(2); + }); +}); + +describe('ReviewScreen', () => { + it('lists what is unanswered and flagged', () => { + render( + + ); + + expect(screen.getByText('4, 8, 10')).toBeInTheDocument(); + expect(screen.getByText('2, 5')).toBeInTheDocument(); + }); + + it('requires a second press to submit', async () => { + const user = userEvent.setup(); + const onSubmit = vi.fn(); + render( + + ); + + await user.click(screen.getByRole('button', { name: 'Submit paper' })); + // The first press only asks — the mock test used to end here. + expect(onSubmit).not.toHaveBeenCalled(); + expect(screen.getByRole('alert')).toHaveTextContent(/cannot change your answers/i); + + await user.click(screen.getByRole('button', { name: /Yes, submit with 3 blank/ })); + expect(onSubmit).toHaveBeenCalledTimes(1); + }); +}); + +describe('ResultSummary', () => { + it('scores against the gradable total and says so', () => { + render( + + ); + + expect(screen.getAllByText('6')).toHaveLength(2); + expect(screen.getByText('/ 8')).toBeInTheDocument(); + expect(screen.getByText('75% accuracy')).toBeInTheDocument(); + expect(screen.getByText(/no answer key yet/)).toBeInTheDocument(); + expect(screen.getByText('4 minutes 20 seconds')).toBeInTheDocument(); + }); +}); + +describe('ExplanationPanel', () => { + it('renders an authored explanation', () => { + render( + + ); + expect(screen.getByText(/Ohm/)).toBeInTheDocument(); + }); + + it('states plainly that there is none rather than inventing one', () => { + render(); + expect(screen.getByText(/No explanation has been written/)).toBeInTheDocument(); + expect(screen.getByText(/Refer to Chapter 3/)).toBeInTheDocument(); + }); + + it('stays hidden until the answer is revealed', () => { + render(); + expect(screen.queryByText('Because.')).not.toBeInTheDocument(); + }); + + // Most explanations in the bank are AI drafts no human has read. The label is + // the whole reason a draft is allowed to ship, so it is not optional and the + // defaults have to fail toward showing it. + it('badges an unreviewed AI draft, visibly and in the accessible name', () => { + render( + + ); + expect(screen.getByText(/AI draft/)).toBeInTheDocument(); + expect(screen.getByText(/not yet reviewed/)).toBeInTheDocument(); + expect(screen.getByText(/has not been checked by a person/)).toBeInTheDocument(); + expect( + screen.getByRole('region', { name: /AI-generated and unreviewed/i }) + ).toBeInTheDocument(); + }); + + it('badges an unreviewed draft even when origin is omitted', () => { + // A caller that forgets `origin` must not silently present a draft as + // checked. The default is deliberately the unsafe-looking one. + render(); + expect(screen.getByText(/not yet reviewed/)).toBeInTheDocument(); + }); + + it('does not badge a human-written explanation as unreviewed', () => { + render(); + expect(screen.queryByText(/not yet reviewed/)).not.toBeInTheDocument(); + expect(screen.queryByText(/AI draft/)).not.toBeInTheDocument(); + }); + + it('marks a reviewed AI draft as reviewed, not as unreviewed', () => { + render(); + expect(screen.getByText('AI draft, reviewed')).toBeInTheDocument(); + expect(screen.queryByText(/not yet reviewed/)).not.toBeInTheDocument(); + }); + + // An explanation names the answer, and a wrong AI explanation mid-paper can + // talk a student out of a correct answer on a later question. + it('shows nothing at all during a timed exam, whatever the provenance', () => { + for (const origin of ['ai_draft', 'ai_reviewed', 'human'] as const) { + const { unmount } = render( + + ); + expect(screen.queryByText('Names the answer.')).not.toBeInTheDocument(); + expect(screen.queryByRole('region')).not.toBeInTheDocument(); + unmount(); + } + }); + + it('defaults to the exam context, so a caller that forgets it leaks nothing', () => { + render(); + expect(screen.queryByText('Names the answer.')).not.toBeInTheDocument(); + }); + + it('renders distractor rationales by option text, never by position', () => { + render( + + ); + expect(screen.getByText('It is maximum')).toBeInTheDocument(); + expect(screen.getByText('That is parallel resonance.')).toBeInTheDocument(); + // Blank rationales are dropped rather than rendered as an empty bullet. + expect(screen.queryByText('Filler')).not.toBeInTheDocument(); + // Options are reordered per student, so no positional language may appear. + expect(screen.queryByText(/second option|option B/i)).not.toBeInTheDocument(); + }); + + it('renders rationales even when there is no summary', () => { + render( + + ); + expect(screen.getByText('Because X.')).toBeInTheDocument(); + expect(screen.queryByText(/No explanation has been written/)).not.toBeInTheDocument(); + }); + + it('offers a report path on a draft, since students are the review capacity', async () => { + const onReport = vi.fn(); + render( + + ); + const button = screen.getByRole('button', { name: /looks wrong/i }); + await userEvent.click(button); + expect(onReport).toHaveBeenCalledTimes(1); + }); +}); diff --git a/frontend/src/features/quiz/__tests__/draft.test.ts b/frontend/src/features/quiz/__tests__/draft.test.ts new file mode 100644 index 0000000..6dedebf --- /dev/null +++ b/frontend/src/features/quiz/__tests__/draft.test.ts @@ -0,0 +1,262 @@ +import { describe, expect, it } from 'vitest'; +import { hydrate, navigate, select, submitAll, submitQuestion, toggleFlag } from '../actions'; +import { + DRAFT_PREFIX, + LEGACY_MOCK_DRAFT_PREFIX, + clearDraft, + draftFromState, + draftStorageKey, + parseDraft, + readDraft, + readLegacyMockDraft, + writeDraft, +} from '../draft'; +import { createInitialState, quizReducer } from '../reducer'; +import { selectScore, selectSummary } from '../selectors'; +import type { QuizDraft } from '../draft'; +import { T0, makeQuestions, run, start } from './factory'; + +const KEY = 'mock:mock-1'; + +function liveAttempt() { + return run( + start({ + attemptKey: KEY, + mode: 'mock', + feedback: 'deferred', + questions: makeQuestions(4, [1, 1, 1, 1]), + durationMs: 45 * 60_000, + }), + select(0, 1, T0 + 1000), + navigate(1, T0 + 20_000), + select(1, 3, T0 + 25_000), + toggleFlag(1) + ); +} + +describe('draftFromState', () => { + it('snapshots an in-progress attempt', () => { + const draft = draftFromState(liveAttempt(), KEY, T0 + 30_000); + + expect(draft).not.toBeNull(); + expect(draft).toMatchObject({ + v: 1, + key: KEY, + mode: 'mock', + feedback: 'deferred', + questionIds: ['book-ch1_0', 'book-ch1_1', 'book-ch1_2', 'book-ch1_3'], + selections: [1, 3, null, null], + flagged: [1], + currentIndex: 1, + startedAt: T0, + endsAt: T0 + 2_700_000, + }); + }); + + it('stores an absolute deadline, not a remaining-time counter', () => { + const draft = draftFromState(liveAttempt(), KEY, T0 + 30_000); + // Stored once at T0 and never touched again: a reload three minutes later + // still ends the exam at the same wall-clock moment. + expect(draft?.endsAt).toBe(T0 + 45 * 60_000); + }); + + it('banks only committed time, so a closed tab earns nothing', () => { + const draft = draftFromState(liveAttempt(), KEY, T0 + 30_000); + expect(draft?.accumulatedMs).toEqual([20_000, 0, 0, 0]); + }); + + it('refuses to snapshot a finished or unloaded attempt', () => { + const loading = createInitialState({ mode: 'mock', feedback: 'deferred', attemptKey: KEY }); + expect(draftFromState(loading, KEY, T0)).toBeNull(); + + const done = quizReducer(liveAttempt(), submitAll(T0 + 40_000)); + expect(draftFromState(done, KEY, T0 + 40_000)).toBeNull(); + }); +}); + +describe('draft storage round-trip', () => { + it('writes and reads back an identical draft', () => { + const draft = draftFromState(liveAttempt(), KEY, T0 + 30_000); + expect(draft).not.toBeNull(); + writeDraft(draft as QuizDraft); + + expect(localStorage.getItem(draftStorageKey(KEY))).not.toBeNull(); + expect(readDraft(KEY)).toEqual(draft); + }); + + it('clears a draft', () => { + writeDraft(draftFromState(liveAttempt(), KEY, T0) as QuizDraft); + clearDraft(KEY); + expect(readDraft(KEY)).toBeNull(); + }); + + it('rejects a draft stored under a different key', () => { + const draft = draftFromState(liveAttempt(), KEY, T0) as QuizDraft; + localStorage.setItem(draftStorageKey('other'), JSON.stringify(draft)); + expect(readDraft('other')).toBeNull(); + }); + + it('rejects corrupt, truncated and mismatched payloads', () => { + const good = draftFromState(liveAttempt(), KEY, T0) as QuizDraft; + + localStorage.setItem(draftStorageKey(KEY), '{not json'); + expect(readDraft(KEY)).toBeNull(); + + expect(parseDraft({ ...good, v: 99 }, KEY)).toBeNull(); + expect(parseDraft({ ...good, selections: [1, 3] }, KEY)).toBeNull(); + expect(parseDraft({ ...good, accumulatedMs: ['x', 1, 2, 3] }, KEY)).toBeNull(); + expect(parseDraft({ ...good, questionIds: [] }, KEY)).toBeNull(); + expect(parseDraft({ ...good, mode: 'telepathy' }, KEY)).toBeNull(); + expect(parseDraft({ ...good, startedAt: 'soon' }, KEY)).toBeNull(); + expect(parseDraft({ ...good, endsAt: 'later' }, KEY)).toBeNull(); + expect(parseDraft(null, KEY)).toBeNull(); + expect(parseDraft('a string', KEY)).toBeNull(); + }); + + it('accepts a null deadline for untimed practice', () => { + const good = draftFromState( + run(start({ attemptKey: 'topic:book-ch1:30' }), select(0, 2, T0 + 500)), + 'topic:book-ch1:30', + T0 + 500 + ) as QuizDraft; + expect(good.endsAt).toBeNull(); + expect(parseDraft(good, 'topic:book-ch1:30')).not.toBeNull(); + }); + + it('drops out-of-range submitted and flagged indices', () => { + const good = draftFromState(liveAttempt(), KEY, T0) as QuizDraft; + const parsed = parseDraft({ ...good, submitted: [0, 99], flagged: [-1, 2] }, KEY); + expect(parsed?.submitted).toEqual([0]); + expect(parsed?.flagged).toEqual([2]); + }); +}); + +describe('legacy mock draft migration', () => { + it('lifts an in-flight pre-engine exam into the new shape', () => { + localStorage.setItem( + `${LEGACY_MOCK_DRAFT_PREFIX}mock-1`, + JSON.stringify({ + testId: 'mock-1', + questionIds: ['book-ch1_0', 'book-ch1_1'], + answers: [2, null], + endsAt: T0 + 600_000, + startedAt: T0, + }) + ); + + const migrated = readDraft(KEY, { legacyMockTestId: 'mock-1' }); + expect(migrated).toMatchObject({ + key: KEY, + mode: 'mock', + feedback: 'deferred', + questionIds: ['book-ch1_0', 'book-ch1_1'], + selections: [2, null], + endsAt: T0 + 600_000, + startedAt: T0, + submitted: [], + }); + }); + + it('prefers a current draft over the legacy one', () => { + const current = draftFromState(liveAttempt(), KEY, T0) as QuizDraft; + writeDraft(current); + localStorage.setItem( + `${LEGACY_MOCK_DRAFT_PREFIX}mock-1`, + JSON.stringify({ + testId: 'mock-1', + questionIds: ['stale_0'], + answers: [0], + endsAt: T0 + 1, + startedAt: T0, + }) + ); + + expect(readDraft(KEY, { legacyMockTestId: 'mock-1' })?.questionIds).toHaveLength(4); + }); + + it('clears the legacy key alongside the new one', () => { + localStorage.setItem(`${LEGACY_MOCK_DRAFT_PREFIX}mock-1`, '{}'); + writeDraft(draftFromState(liveAttempt(), KEY, T0) as QuizDraft); + clearDraft(KEY, { legacyMockTestId: 'mock-1' }); + + expect(localStorage.getItem(`${DRAFT_PREFIX}${KEY}`)).toBeNull(); + expect(localStorage.getItem(`${LEGACY_MOCK_DRAFT_PREFIX}mock-1`)).toBeNull(); + }); + + it('rejects a legacy draft whose answers do not match its paper', () => { + localStorage.setItem( + `${LEGACY_MOCK_DRAFT_PREFIX}mock-1`, + JSON.stringify({ + testId: 'mock-1', + questionIds: ['a', 'b', 'c'], + answers: [1], + endsAt: T0, + startedAt: T0, + }) + ); + expect(readLegacyMockDraft('mock-1', KEY)).toBeNull(); + }); +}); + +describe('resuming a draft', () => { + const questions = makeQuestions(4, [1, 1, 1, 1]); + + function resume(draft: QuizDraft, at: number) { + return quizReducer( + createInitialState({ mode: draft.mode, feedback: draft.feedback, attemptKey: draft.key }), + hydrate({ + attemptKey: draft.key, + questions, + at, + startedAt: draft.startedAt, + endsAt: draft.endsAt, + resumed: true, + selections: draft.selections, + submitted: draft.submitted, + flagged: draft.flagged, + accumulatedMs: draft.accumulatedMs, + currentIndex: draft.currentIndex, + }) + ); + } + + it('restores every answer, flag and position', () => { + writeDraft(draftFromState(liveAttempt(), KEY, T0 + 30_000) as QuizDraft); + const state = resume(readDraft(KEY) as QuizDraft, T0 + 120_000); + + expect(state.phase).toBe('active'); + expect(state.resumed).toBe(true); + expect(state.selections).toEqual([1, 3, null, null]); + expect(state.flagged.has(1)).toBe(true); + expect(state.currentIndex).toBe(1); + // Deadline unchanged by the reload: still 45 minutes after the original + // start, not 45 minutes from now. + expect(state.timing.endsAt).toBe(T0 + 2_700_000); + }); + + it('scores an expired attempt instead of handing back a fresh timer', () => { + writeDraft(draftFromState(liveAttempt(), KEY, T0 + 30_000) as QuizDraft); + // The student closed the tab and came back an hour later. + const state = resume(readDraft(KEY) as QuizDraft, T0 + 3_600_000); + + expect(state.phase).toBe('done'); + expect(state.timing.endsAt).toBe(T0 + 2_700_000); + expect(selectScore(state)).toBe(1); + expect(selectSummary(state).skipped).toBe(2); + expect(state.responses).toHaveLength(4); + }); + + it('keeps committed practice answers committed across a resume', () => { + const key = 'topic:book-ch1:4'; + const practice = run( + start({ attemptKey: key, questions, feedback: 'immediate' }), + select(0, 1, T0 + 1000), + submitQuestion(0, T0 + 8000) + ); + writeDraft(draftFromState(practice, key, T0 + 8000) as QuizDraft); + + const restored = resume(readDraft(key) as QuizDraft, T0 + 9000); + expect(restored.submitted.has(0)).toBe(true); + expect(selectScore(restored)).toBe(1); + }); +}); diff --git a/frontend/src/features/quiz/__tests__/factory.ts b/frontend/src/features/quiz/__tests__/factory.ts new file mode 100644 index 0000000..8017024 --- /dev/null +++ b/frontend/src/features/quiz/__tests__/factory.ts @@ -0,0 +1,61 @@ +/** Test helpers for the quiz engine. Not a test file. */ + +import { hydrate } from '../actions'; +import { createInitialState, quizReducer } from '../reducer'; +import type { FeedbackMode, Question, QuizMode, QuizState } from '../types'; + +/** `correctIndex: -1` reproduces the no-answer-key sentinel from localData. */ +export function makeQuestion(i: number, correctIndex = 1, topicId = 'book-ch1'): Question { + return { + id: `${topicId}_${i}`, + topicId, + question: `Question ${i}?`, + options: ['A', 'B', 'C', 'D'], + correctIndex, + }; +} + +export function makeQuestions(n: number, correctIndexes?: number[]): Question[] { + return Array.from({ length: n }, (_, i) => makeQuestion(i, correctIndexes?.[i] ?? 1)); +} + +export const T0 = 1_700_000_000_000; + +export interface StartOptions { + mode?: QuizMode; + feedback?: FeedbackMode; + questions?: Question[]; + at?: number; + durationMs?: number | null; + attemptKey?: string | null; +} + +/** A hydrated, active attempt. */ +export function start(options: StartOptions = {}): QuizState { + const { + mode = 'topic', + feedback = 'immediate', + questions = makeQuestions(3), + at = T0, + durationMs = null, + attemptKey = 'test:attempt', + } = options; + return quizReducer( + createInitialState({ mode, feedback, attemptKey }), + hydrate({ + attemptKey, + questions, + at, + startedAt: at, + endsAt: durationMs === null ? null : at + durationMs, + }) + ); +} + +/** Applies a sequence of actions, so a test reads as a story. */ +export function run( + state: QuizState, + ...actions: Parameters[1][] +): QuizState { + return actions.reduce(quizReducer, state); +} diff --git a/frontend/src/features/quiz/__tests__/guess.test.ts b/frontend/src/features/quiz/__tests__/guess.test.ts new file mode 100644 index 0000000..77b08dd --- /dev/null +++ b/frontend/src/features/quiz/__tests__/guess.test.ts @@ -0,0 +1,124 @@ +import { describe, expect, it } from 'vitest'; +import { navigate, select, submitAll, submitQuestion } from '../actions'; +import { + GUESS_FLOOR_MS, + guessThresholdMs, + isGuessLatency, + markGuesses, + median, +} from '../guess'; +import type { ResponseRecord } from '../types'; +import { T0, makeQuestions, run, start } from './factory'; + +function record(timeSpentMs: number, chosenIndex: number | null = 1): ResponseRecord { + return { + questionId: `q${timeSpentMs}`, + topicId: 'book-ch1', + chosenIndex, + correct: false, + timeSpentMs, + mode: 'topic', + flaggedGuess: false, + timestamp: T0, + }; +} + +describe('median', () => { + it('handles odd, even and empty samples without mutating the input', () => { + const sample = [5, 1, 3]; + expect(median(sample)).toBe(3); + expect(sample).toEqual([5, 1, 3]); + expect(median([1, 2, 3, 4])).toBe(2.5); + expect(median([])).toBe(0); + }); +}); + +describe('guessThresholdMs', () => { + it('falls back to the absolute floor on a fast session', () => { + // 35% of a 3s median is 1.05s, which would flag nothing. The floor is what + // makes the rule useful when every answer is quick. + expect(guessThresholdMs([3000, 3000, 3000])).toBe(GUESS_FLOOR_MS); + }); + + it('scales with the session once answers are slow', () => { + // Median 60s -> 21s. A student who normally takes a minute is plainly + // guessing at eight seconds, which the 4s floor alone would wave through. + expect(guessThresholdMs([50_000, 60_000, 70_000])).toBe(21_000); + }); + + it('uses the floor when there is no sample at all', () => { + expect(guessThresholdMs([])).toBe(GUESS_FLOOR_MS); + }); + + it('is strict: an answer exactly at the threshold is not a guess', () => { + expect(isGuessLatency(4000, [3000])).toBe(false); + expect(isGuessLatency(3999, [3000])).toBe(true); + expect(isGuessLatency(20_999, [60_000])).toBe(true); + expect(isGuessLatency(21_000, [60_000])).toBe(false); + }); +}); + +describe('markGuesses', () => { + it('flags only the answers under the threshold', () => { + const marked = markGuesses([record(1000), record(60_000), record(90_000)]); + // Median 60s -> threshold 21s. + expect(marked.map((r) => r.flaggedGuess)).toEqual([true, false, false]); + }); + + it('never flags a blank, and blanks do not drag the median down', () => { + const marked = markGuesses([record(0, null), record(60_000), record(80_000)]); + expect(marked[0].flaggedGuess).toBe(false); + // Median over answers only is 70s -> 24.5s, so the 60s answer is safe. + expect(marked[1].flaggedGuess).toBe(false); + }); + + it('re-evaluates earlier records as the session median moves', () => { + const early = markGuesses([record(9000), record(11_000)]); + // Median 10s -> threshold 4s (the floor), so neither looks like a guess. + expect(early.every((r) => !r.flaggedGuess)).toBe(true); + + const later = markGuesses([...early, record(120_000), record(140_000)]); + // Median is now 65.5s -> 22.9s, and the two fast answers are revealed as + // outliers against how this student actually works. + expect(later.map((r) => r.flaggedGuess)).toEqual([true, true, false, false]); + }); + + it('returns the same record objects when nothing changed', () => { + const input = [record(60_000), record(80_000)]; + const marked = markGuesses(input); + expect(marked[0]).toBe(input[0]); + }); +}); + +describe('guess detection through the reducer', () => { + it('flags a fast answer in a slow session', () => { + const state = run( + start({ questions: makeQuestions(3, [1, 1, 1]) }), + // 80 seconds on Q1. + select(0, 1, T0 + 1000), + submitQuestion(0, T0 + 80_000), + navigate(1, T0 + 80_000), + // 100 seconds on Q2. + select(1, 1, T0 + 100_000), + submitQuestion(1, T0 + 180_000), + navigate(2, T0 + 180_000), + // 2 seconds on Q3 — a tap to move on. + select(2, 2, T0 + 181_000), + submitQuestion(2, T0 + 182_000) + ); + + expect(state.responses.map((r) => r.flaggedGuess)).toEqual([false, false, true]); + }); + + it('flags nothing when every answer took real time', () => { + const state = run( + start({ feedback: 'deferred', mode: 'mock', questions: makeQuestions(2, [1, 1]) }), + select(0, 1, T0 + 1000), + navigate(1, T0 + 30_000), + select(1, 1, T0 + 40_000), + submitAll(T0 + 60_000) + ); + + expect(state.responses.every((r) => !r.flaggedGuess)).toBe(true); + }); +}); diff --git a/frontend/src/features/quiz/__tests__/reducer.test.ts b/frontend/src/features/quiz/__tests__/reducer.test.ts new file mode 100644 index 0000000..6eb4063 --- /dev/null +++ b/frontend/src/features/quiz/__tests__/reducer.test.ts @@ -0,0 +1,470 @@ +import { describe, expect, it } from 'vitest'; +import { + enterReview, + exitReview, + hydrate, + navigate, + pause, + resume, + select, + submitAll, + submitQuestion, + toggleBookmark, + toggleFlag, +} from '../actions'; +import { createInitialState, quizReducer, timeSpentAt } from '../reducer'; +import { + selectAnsweredCount, + selectFlaggedCount, + selectFlaggedIndices, + selectIsRevealed, + selectPalette, + selectScore, + selectSummary, + selectTimeLeftMs, + selectUnansweredCount, + selectUnansweredIndices, + selectVerdict, +} from '../selectors'; +import { T0, makeQuestions, run, start } from './factory'; + +describe('quizReducer — selection persistence', () => { + // The bug the three practice pages shipped: navigation reset a scalar + // `selectedAnswer`, so going back erased the answer and the feedback block + // compared null against correctIndex and rendered "Incorrect". + it('keeps a selection when navigating away and back', () => { + const state = run( + start(), + select(0, 2, T0 + 1000), + navigate(1, T0 + 2000), + navigate(0, T0 + 3000) + ); + + expect(state.selections[0]).toBe(2); + expect(state.currentIndex).toBe(0); + }); + + it('restores both the choice and the verdict on a revisited answered question', () => { + const state = run( + start({ questions: makeQuestions(2, [1, 1]) }), + select(0, 1, T0 + 1000), + submitQuestion(0, T0 + 5000), + navigate(1, T0 + 6000), + navigate(0, T0 + 7000) + ); + + expect(state.selections[0]).toBe(1); + expect(selectIsRevealed(state, 0)).toBe(true); + expect(selectVerdict(state, 0)).toBe('correct'); + }); + + it('keeps a wrong answer reading as incorrect on revisit, not as unanswered', () => { + const state = run( + start({ questions: makeQuestions(2, [1, 1]) }), + select(0, 3, T0 + 1000), + submitQuestion(0, T0 + 5000), + navigate(1, T0 + 6000), + navigate(0, T0 + 7000) + ); + + expect(selectVerdict(state, 0)).toBe('incorrect'); + }); + + it('shows no verdict on a forward question that was never answered', () => { + const state = run( + start(), + select(0, 1, T0 + 1000), + submitQuestion(0, T0 + 5000), + navigate(1, T0 + 6000) + ); + + expect(selectVerdict(state, 1)).toBe('unanswered'); + expect(selectIsRevealed(state, 1)).toBe(false); + }); + + it('refuses to change a committed answer', () => { + const state = run( + start(), + select(0, 1, T0 + 100), + submitQuestion(0, T0 + 5000), + select(0, 3, T0 + 6000) + ); + + expect(state.selections[0]).toBe(1); + }); + + it('clamps navigation to the paper rather than running off the end', () => { + const base = start({ questions: makeQuestions(3) }); + expect(quizReducer(base, navigate(99, T0 + 10)).currentIndex).toBe(2); + expect(quizReducer(base, navigate(-5, T0 + 10)).currentIndex).toBe(0); + }); +}); + +describe('quizReducer — feedback modes', () => { + it('immediate: reveals the submitted question only', () => { + const state = run( + start({ feedback: 'immediate' }), + select(0, 1, T0 + 100), + submitQuestion(0, T0 + 4000) + ); + + expect(selectIsRevealed(state, 0)).toBe(true); + expect(selectIsRevealed(state, 1)).toBe(false); + }); + + it('deferred: reveals nothing until the paper is submitted', () => { + const answering = run( + start({ feedback: 'deferred', mode: 'mock' }), + select(0, 1, T0 + 100), + select(1, 1, T0 + 200) + ); + + expect(selectIsRevealed(answering, 0)).toBe(false); + // The pick is still visible to the student — "pending", not "correct". + expect(selectVerdict(answering, 0)).toBe('pending'); + + const submitted = quizReducer(answering, submitAll(T0 + 60_000)); + expect(selectIsRevealed(submitted, 0)).toBe(true); + expect(selectVerdict(submitted, 0)).toBe('correct'); + }); + + it('deferred: answers stay editable before the paper goes in', () => { + const state = run( + start({ feedback: 'deferred', mode: 'mock' }), + select(0, 1, T0 + 100), + select(0, 3, T0 + 200) + ); + + expect(state.selections[0]).toBe(3); + }); + + it('reports unkeyed questions as unkeyed rather than incorrect', () => { + const state = run( + start({ questions: makeQuestions(1, [-1]) }), + select(0, 2, T0 + 100), + submitQuestion(0, T0 + 9000) + ); + + expect(selectVerdict(state, 0)).toBe('unkeyed'); + expect(selectScore(state)).toBe(0); + expect(selectSummary(state).gradableTotal).toBe(0); + expect(selectSummary(state).accuracyPct).toBe(0); + }); +}); + +describe('quizReducer — derived score', () => { + it('counts only committed correct answers', () => { + const state = run( + start({ questions: makeQuestions(3, [1, 2, 3]) }), + select(0, 1, T0 + 100), + submitQuestion(0, T0 + 9000), + navigate(1, T0 + 9100), + select(1, 0, T0 + 9200), + submitQuestion(1, T0 + 18000), + navigate(2, T0 + 18100), + select(2, 3, T0 + 18200) + ); + + // Q3 is selected but not committed, so it is not scored yet. + expect(selectScore(state)).toBe(1); + expect(quizReducer(state, submitAll(T0 + 30000)).selections[2]).toBe(3); + expect(selectScore(quizReducer(state, submitAll(T0 + 30000)))).toBe(2); + }); + + it('does not double-count a re-submitted question', () => { + // The pages did `setScore(s => s + 1)` inside submit; any re-entry inflated + // the score. Score is derived here, and submitting twice is a no-op. + const once = run(start(), select(0, 1, T0 + 100), submitQuestion(0, T0 + 9000)); + const twice = run( + once, + submitQuestion(0, T0 + 9100), + submitQuestion(0, T0 + 9200), + submitQuestion(0, T0 + 9300) + ); + + expect(selectScore(twice)).toBe(1); + expect(twice.responses).toHaveLength(1); + expect(twice).toBe(once); + }); + + it('submitAll is idempotent and terminal', () => { + const done = run( + start({ questions: makeQuestions(2, [1, 1]) }), + select(0, 1, T0 + 100), + submitAll(T0 + 10_000) + ); + const again = quizReducer(done, submitAll(T0 + 20_000)); + + expect(again).toBe(done); + expect(done.phase).toBe('done'); + expect(selectScore(done)).toBe(1); + expect(done.responses).toHaveLength(2); + }); + + it('refuses a submit with no selection', () => { + const state = start(); + expect(quizReducer(state, submitQuestion(0, T0 + 500))).toBe(state); + }); + + it('counts answered, unanswered and skipped consistently', () => { + const state = run( + start({ questions: makeQuestions(4) }), + select(0, 1, T0 + 10), + select(2, 0, T0 + 20) + ); + + expect(selectAnsweredCount(state)).toBe(2); + expect(selectUnansweredCount(state)).toBe(2); + expect(selectUnansweredIndices(state)).toEqual([1, 3]); + expect(selectSummary(quizReducer(state, submitAll(T0 + 100))).skipped).toBe(2); + }); + + it('separates incorrect from skipped in the summary', () => { + const state = run( + start({ questions: makeQuestions(3, [1, 1, 1]) }), + select(0, 1, T0 + 10), + select(1, 0, T0 + 20), + submitAll(T0 + 100) + ); + const summary = selectSummary(state); + + expect(summary.score).toBe(1); + expect(summary.incorrect).toBe(1); + expect(summary.skipped).toBe(1); + expect(summary.total).toBe(3); + expect(summary.gradableTotal).toBe(3); + expect(summary.accuracyPct).toBe(33); + }); +}); + +describe('quizReducer — flags and bookmarks', () => { + it('toggles a flag on and off', () => { + const on = quizReducer(start(), toggleFlag(1)); + expect(selectFlaggedCount(on)).toBe(1); + expect(selectFlaggedIndices(on)).toEqual([1]); + + const off = quizReducer(on, toggleFlag(1)); + expect(selectFlaggedCount(off)).toBe(0); + }); + + it('ignores a flag outside the paper', () => { + const state = start({ questions: makeQuestions(2) }); + expect(quizReducer(state, toggleFlag(7))).toBe(state); + }); + + it('keeps flags through navigation and submission', () => { + const state = run( + start(), + toggleFlag(0), + select(0, 1, T0 + 10), + submitQuestion(0, T0 + 5000), + navigate(2, T0 + 5100) + ); + + expect(state.flagged.has(0)).toBe(true); + }); + + it('toggles bookmarks by question id', () => { + const state = start(); + const id = state.questions[0].id; + const on = quizReducer(state, toggleBookmark(id)); + expect(on.bookmarked.has(id)).toBe(true); + expect(quizReducer(on, toggleBookmark(id)).bookmarked.has(id)).toBe(false); + }); + + it('reports a palette with overlapping states', () => { + const state = run(start({ questions: makeQuestions(3) }), select(0, 1, T0 + 10), toggleFlag(0)); + const palette = selectPalette(state); + + expect(palette[0]).toMatchObject({ answered: true, flagged: true, current: true }); + expect(palette[1]).toMatchObject({ answered: false, flagged: false, current: false }); + }); +}); + +describe('quizReducer — timing', () => { + it('accrues per-question time and banks it on navigation', () => { + const state = run(start(), navigate(1, T0 + 7000), navigate(2, T0 + 9500)); + + expect(state.timing.accumulatedMs[0]).toBe(7000); + expect(state.timing.accumulatedMs[1]).toBe(2500); + expect(state.timing.accumulatedMs[2]).toBe(0); + expect(timeSpentAt(state, 2, T0 + 10_500)).toBe(1000); + }); + + it('records the banked time on the response', () => { + const state = run(start(), select(0, 1, T0 + 1000), submitQuestion(0, T0 + 12_000)); + expect(state.responses[0].timeSpentMs).toBe(12_000); + }); + + it('stops the clock while the tab is hidden', () => { + const state = run( + start(), + pause(T0 + 3000), + resume(T0 + 100_000), + select(0, 1, T0 + 100_500), + submitQuestion(0, T0 + 104_000) + ); + + // 3s before hiding plus 4s after returning. The 97s the tab spent in the + // background is not study time. + expect(state.responses[0].timeSpentMs).toBe(7000); + expect(state.timing.paused).toBe(false); + }); + + it('ignores a resume that was not preceded by a pause', () => { + const state = start(); + expect(quizReducer(state, resume(T0 + 500))).toBe(state); + }); + + it('never lets a stale timestamp run the clock backwards', () => { + const state = run(start(), navigate(1, T0 - 50_000)); + expect(state.timing.accumulatedMs[0]).toBe(0); + }); + + it('banks and stops the clock on the review screen, and restarts on exit', () => { + const reviewing = run(start(), enterReview(T0 + 4000)); + expect(reviewing.phase).toBe('review'); + expect(reviewing.timing.accumulatedMs[0]).toBe(4000); + expect(reviewing.timing.viewStartedAt).toBeNull(); + + const back = quizReducer(reviewing, exitReview(T0 + 30_000)); + expect(back.phase).toBe('active'); + expect(back.timing.viewStartedAt).toBe(T0 + 30_000); + // Thirty seconds on the review screen is not thirty seconds on question 1. + expect(back.timing.accumulatedMs[0]).toBe(4000); + }); + + it('derives time left from the absolute deadline', () => { + const state = start({ durationMs: 45 * 60_000 }); + expect(selectTimeLeftMs(state, T0)).toBe(2_700_000); + expect(selectTimeLeftMs(state, T0 + 2_700_001)).toBe(0); + expect(selectTimeLeftMs(start(), T0)).toBeNull(); + }); +}); + +describe('quizReducer — hydrate', () => { + it('restores selections, flags, index and banked time', () => { + const questions = makeQuestions(3, [1, 1, 1]); + const state = quizReducer( + createInitialState({ mode: 'topic', feedback: 'immediate', attemptKey: 'k' }), + hydrate({ + attemptKey: 'k', + questions, + at: T0 + 500, + startedAt: T0, + endsAt: null, + selections: [1, null, 3], + submitted: [0], + flagged: [2], + accumulatedMs: [4000, 0, 1200], + currentIndex: 2, + resumed: true, + }) + ); + + expect(state.phase).toBe('active'); + expect(state.selections).toEqual([1, null, 3]); + expect(state.submitted.has(0)).toBe(true); + expect(state.flagged.has(2)).toBe(true); + expect(state.currentIndex).toBe(2); + expect(state.timing.accumulatedMs).toEqual([4000, 0, 1200]); + expect(state.resumed).toBe(true); + expect(selectScore(state)).toBe(1); + }); + + it('discards restored arrays that describe a different-length paper', () => { + const state = quizReducer( + createInitialState({ mode: 'mock', feedback: 'deferred', attemptKey: 'k' }), + hydrate({ + attemptKey: 'k', + questions: makeQuestions(3), + at: T0, + startedAt: T0, + endsAt: null, + selections: [1, 2], + accumulatedMs: [1, 2, 3, 4], + }) + ); + + expect(state.selections).toEqual([null, null, null]); + expect(state.timing.accumulatedMs).toEqual([0, 0, 0]); + }); + + it('finishes immediately when the restored deadline has already passed', () => { + const state = quizReducer( + createInitialState({ mode: 'mock', feedback: 'deferred', attemptKey: 'k' }), + hydrate({ + attemptKey: 'k', + questions: makeQuestions(3, [1, 1, 1]), + at: T0 + 10_000, + startedAt: T0 - 2_700_000, + endsAt: T0 - 1000, + selections: [1, 0, null], + accumulatedMs: [5000, 5000, 0], + }) + ); + + expect(state.phase).toBe('done'); + expect(selectScore(state)).toBe(1); + expect(selectSummary(state).skipped).toBe(1); + // No extra time is credited for the stretch after the deadline. + expect(state.timing.accumulatedMs).toEqual([5000, 5000, 0]); + }); + + it('ignores an empty paper', () => { + const initial = createInitialState({ mode: 'quick', feedback: 'immediate' }); + const state = quizReducer( + initial, + hydrate({ attemptKey: null, questions: [], at: T0, startedAt: T0, endsAt: null }) + ); + expect(state).toBe(initial); + expect(state.phase).toBe('loading'); + }); + + it('clamps a restored index that is past the end of the paper', () => { + const state = quizReducer( + createInitialState({ mode: 'topic', feedback: 'immediate', attemptKey: 'k' }), + hydrate({ + attemptKey: 'k', + questions: makeQuestions(2), + at: T0, + startedAt: T0, + endsAt: null, + currentIndex: 99, + }) + ); + expect(state.currentIndex).toBe(1); + }); +}); + +describe('quizReducer — response records', () => { + it('emits the analytics shape for each answer', () => { + const state = run( + start({ mode: 'quick', questions: makeQuestions(1, [1]) }), + select(0, 1, T0 + 1000), + submitQuestion(0, T0 + 11_000) + ); + + expect(state.responses[0]).toEqual({ + questionId: 'book-ch1_0', + topicId: 'book-ch1', + chosenIndex: 1, + correct: true, + timeSpentMs: 11_000, + mode: 'quick', + flaggedGuess: false, + timestamp: T0 + 11_000, + }); + }); + + it('records a blank for a question that was never answered', () => { + const state = run( + start({ questions: makeQuestions(2, [1, 1]) }), + select(0, 1, T0 + 100), + submitAll(T0 + 20_000) + ); + const blank = state.responses.find((r) => r.questionId === 'book-ch1_1'); + + expect(blank).toMatchObject({ chosenIndex: null, correct: false, flaggedGuess: false }); + }); +}); diff --git a/frontend/src/features/quiz/__tests__/useQuiz.test.tsx b/frontend/src/features/quiz/__tests__/useQuiz.test.tsx new file mode 100644 index 0000000..2744460 --- /dev/null +++ b/frontend/src/features/quiz/__tests__/useQuiz.test.tsx @@ -0,0 +1,190 @@ +import { describe, expect, it } from 'vitest'; +import { render, screen, waitFor } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; +import { draftStorageKey, readDraft } from '../draft'; +import { QuestionCard } from '../components/QuestionCard'; +import { QuizActionBar } from '../components/QuizActionBar'; +import { useQuiz } from '../useQuiz'; +import type { FeedbackMode, Question } from '../types'; +import { getProgress } from '../../../services/localData'; +import { makeQuestions } from './factory'; + +const QUESTIONS = makeQuestions(3, [1, 2, 3]); + +function Harness({ + attemptKey, + questions = QUESTIONS, + feedback = 'immediate', +}: { + attemptKey: string; + questions?: Question[]; + feedback?: FeedbackMode; +}) { + const quiz = useQuiz({ + mode: 'topic', + feedback, + attemptKey, + autosaveDelayMs: 0, + loadQuestions: async () => questions, + resolveQuestions: async (ids) => { + const byId = new Map(questions.map((q) => [q.id, q])); + return ids.map((id) => byId.get(id)).filter((q): q is Question => q !== undefined); + }, + }); + + if (quiz.state.phase === 'loading') return

Loading…

; + if (quiz.current === undefined) return

Empty

; + + return ( +
+ {quiz.state.resumed &&

Attempt resumed

} +

Score: {quiz.summary.score}

+

Answered: {quiz.counts.answered}

+ + 0} + canNext={!quiz.isLast} + canSubmit={quiz.canSubmitCurrent} + isLast={quiz.isLast} + /> +
+ ); +} + +async function ready() { + await waitFor(() => expect(screen.getByRole('radiogroup')).toBeInTheDocument()); +} + +describe('useQuiz', () => { + it('loads a paper and answers a question', async () => { + const user = userEvent.setup(); + render(); + await ready(); + + await user.click(screen.getByRole('radio', { name: /^B/ })); + expect(screen.getByRole('radio', { name: /^B/ })).toBeChecked(); + expect(screen.getByText('Answered: 1')).toBeInTheDocument(); + + await user.click(screen.getByRole('button', { name: 'Submit' })); + expect(screen.getByRole('status')).toHaveTextContent(/Correct/); + expect(screen.getByText('Score: 1')).toBeInTheDocument(); + }); + + it('keeps the answer and the verdict across navigation', async () => { + const user = userEvent.setup(); + render(); + await ready(); + + await user.click(screen.getByRole('radio', { name: /^B/ })); + await user.click(screen.getByRole('button', { name: 'Submit' })); + await user.click(screen.getByRole('button', { name: /Next/ })); + + // A forward, unanswered question shows no verdict. + expect(screen.queryByRole('status')).not.toBeInTheDocument(); + + await user.click(screen.getByRole('button', { name: /Previous/ })); + expect(screen.getByRole('status')).toHaveTextContent(/Correct/); + expect(screen.getByRole('status')).not.toHaveTextContent(/Incorrect/); + expect(screen.getByRole('radio', { name: /^B/ })).toBeChecked(); + }); + + it('does not inflate the score when submit is pressed repeatedly', async () => { + const user = userEvent.setup(); + render(); + await ready(); + + await user.click(screen.getByRole('radio', { name: /^B/ })); + const submit = screen.getByRole('button', { name: 'Submit' }); + await user.tripleClick(submit); + + expect(screen.getByText('Score: 1')).toBeInTheDocument(); + }); + + it('autosaves the attempt and resumes it on a remount', async () => { + const user = userEvent.setup(); + const key = 'topic:ch1:3'; + const first = render(); + await ready(); + + await user.click(screen.getByRole('radio', { name: /^C/ })); + await waitFor(() => expect(localStorage.getItem(draftStorageKey(key))).not.toBeNull()); + expect(readDraft(key)?.selections).toEqual([2, null, null]); + + first.unmount(); + render(); + await ready(); + + await waitFor(() => expect(screen.getByText('Attempt resumed')).toBeInTheDocument()); + expect(screen.getByRole('radio', { name: /^C/ })).toBeChecked(); + }); + + it('discards a draft whose questions no longer resolve', async () => { + const user = userEvent.setup(); + const key = 'topic:ch1:3'; + const first = render(); + await ready(); + await user.click(screen.getByRole('radio', { name: /^C/ })); + await waitFor(() => expect(localStorage.getItem(draftStorageKey(key))).not.toBeNull()); + first.unmount(); + + // The chapter data changed under us: only one of the three ids resolves. + render(); + await ready(); + + expect(screen.queryByText('Attempt resumed')).not.toBeInTheDocument(); + expect(screen.getByRole('radio', { name: /^C/ })).not.toBeChecked(); + // The unusable draft was replaced by one describing the paper we can build. + await waitFor(() => expect(readDraft(key)?.questionIds).toEqual([QUESTIONS[0].id])); + }); + + it('writes answers through to per-topic progress exactly once', async () => { + const user = userEvent.setup(); + render(); + await ready(); + + await user.click(screen.getByRole('radio', { name: /^B/ })); + await user.click(screen.getByRole('button', { name: 'Submit' })); + + await waitFor(() => { + const entry = getProgress()['book-ch1']; + expect(entry.attempted).toEqual(['book-ch1_0']); + expect(entry.correct).toEqual(['book-ch1_0']); + }); + }); + + it('defers the verdict in deferred mode until the paper is submitted', async () => { + const user = userEvent.setup(); + render(); + await ready(); + + await user.click(screen.getByRole('radio', { name: /^B/ })); + // Still editable, and no verdict yet. + expect(screen.queryByRole('status')).not.toBeInTheDocument(); + expect(screen.getByText('Score: 0')).toBeInTheDocument(); + + await user.click(screen.getByRole('button', { name: /Next/ })); + await user.click(screen.getByRole('button', { name: /Next/ })); + await user.click(screen.getByRole('button', { name: 'Finish' })); + + expect(screen.getByText('Score: 1')).toBeInTheDocument(); + // The draft is gone — a finished attempt must not be resumable. + await waitFor(() => expect(localStorage.getItem(draftStorageKey('mock:m1'))).toBeNull()); + }); +}); diff --git a/frontend/src/features/quiz/__tests__/useQuizKeyboard.test.tsx b/frontend/src/features/quiz/__tests__/useQuizKeyboard.test.tsx new file mode 100644 index 0000000..56a3a67 --- /dev/null +++ b/frontend/src/features/quiz/__tests__/useQuizKeyboard.test.tsx @@ -0,0 +1,165 @@ +import { describe, expect, it, vi } from 'vitest'; +import { render, screen } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; +import { isTextEntryTarget, optionIndexForKey, useQuizKeyboard } from '../useQuizKeyboard'; +import type { QuizKeyboardHandlers } from '../useQuizKeyboard'; + +function makeHandlers(): QuizKeyboardHandlers { + return { + onSelectOption: vi.fn(), + onSubmitOrAdvance: vi.fn(), + onPrev: vi.fn(), + onNext: vi.fn(), + onToggleFlag: vi.fn(), + onToggleBookmark: vi.fn(), + }; +} + +function Harness({ + handlers, + enabled = true, + optionCount = 4, +}: { + handlers: QuizKeyboardHandlers; + enabled?: boolean; + optionCount?: number; +}) { + useQuizKeyboard({ ...handlers, enabled, optionCount }); + return ( +
+ +