@insignia-education/api-sdk-js 0.15.70 → 0.15.72

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/.env +1 -0
  2. package/.env.test +5 -0
  3. package/.github/workflows/npm-publish-github-packages.yml +5 -52
  4. package/AGENTS.md +8 -4
  5. package/CLAUDE.md +16 -25
  6. package/coverage/clover.xml +380 -0
  7. package/coverage/coverage-final.json +3 -0
  8. package/coverage/lcov-report/Client.js.html +463 -0
  9. package/coverage/lcov-report/base.css +224 -0
  10. package/coverage/lcov-report/block-navigation.js +87 -0
  11. package/coverage/lcov-report/favicon.png +0 -0
  12. package/coverage/lcov-report/index.html +131 -0
  13. package/coverage/lcov-report/prettify.css +1 -0
  14. package/coverage/lcov-report/prettify.js +2 -0
  15. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  16. package/coverage/lcov-report/sorter.js +210 -0
  17. package/coverage/lcov-report/src/Client.js.html +478 -0
  18. package/coverage/lcov-report/src/api/index.html +116 -0
  19. package/coverage/lcov-report/src/api/index.js.html +127 -0
  20. package/coverage/lcov-report/src/api/v1/Accounts.js.html +151 -0
  21. package/coverage/lcov-report/src/api/v1/Admin.js.html +121 -0
  22. package/coverage/lcov-report/src/api/v1/Auth.js.html +157 -0
  23. package/coverage/lcov-report/src/api/v1/Categories.js.html +121 -0
  24. package/coverage/lcov-report/src/api/v1/Changelogs.js.html +118 -0
  25. package/coverage/lcov-report/src/api/v1/Configs.js.html +121 -0
  26. package/coverage/lcov-report/src/api/v1/ContactForms.js.html +121 -0
  27. package/coverage/lcov-report/src/api/v1/ConversationalTopics.js.html +121 -0
  28. package/coverage/lcov-report/src/api/v1/Countries.js.html +112 -0
  29. package/coverage/lcov-report/src/api/v1/Coupons.js.html +175 -0
  30. package/coverage/lcov-report/src/api/v1/Courses.js.html +460 -0
  31. package/coverage/lcov-report/src/api/v1/Currencies.js.html +118 -0
  32. package/coverage/lcov-report/src/api/v1/Dashboard.js.html +115 -0
  33. package/coverage/lcov-report/src/api/v1/EducationCenter.js.html +115 -0
  34. package/coverage/lcov-report/src/api/v1/Employee.js.html +169 -0
  35. package/coverage/lcov-report/src/api/v1/Files.js.html +160 -0
  36. package/coverage/lcov-report/src/api/v1/Forums.js.html +175 -0
  37. package/coverage/lcov-report/src/api/v1/Hashes.js.html +121 -0
  38. package/coverage/lcov-report/src/api/v1/Insignias.js.html +121 -0
  39. package/coverage/lcov-report/src/api/v1/Languages.js.html +121 -0
  40. package/coverage/lcov-report/src/api/v1/MailBlacklist.js.html +118 -0
  41. package/coverage/lcov-report/src/api/v1/MailingLists.js.html +127 -0
  42. package/coverage/lcov-report/src/api/v1/Offers.js.html +142 -0
  43. package/coverage/lcov-report/src/api/v1/Organizations.js.html +199 -0
  44. package/coverage/lcov-report/src/api/v1/PaymentMethods.js.html +121 -0
  45. package/coverage/lcov-report/src/api/v1/Payments.js.html +310 -0
  46. package/coverage/lcov-report/src/api/v1/Premiums.js.html +121 -0
  47. package/coverage/lcov-report/src/api/v1/Quizzes.js.html +214 -0
  48. package/coverage/lcov-report/src/api/v1/Sales.js.html +157 -0
  49. package/coverage/lcov-report/src/api/v1/Search.js.html +115 -0
  50. package/coverage/lcov-report/src/api/v1/ShortLinks.js.html +127 -0
  51. package/coverage/lcov-report/src/api/v1/Surveys.js.html +181 -0
  52. package/coverage/lcov-report/src/api/v1/Taxes.js.html +121 -0
  53. package/coverage/lcov-report/src/api/v1/Teacher.js.html +322 -0
  54. package/coverage/lcov-report/src/api/v1/Telegram.js.html +142 -0
  55. package/coverage/lcov-report/src/api/v1/TwoFactor.js.html +145 -0
  56. package/coverage/lcov-report/src/api/v1/UserSessionTypes.js.html +112 -0
  57. package/coverage/lcov-report/src/api/v1/UserTypes.js.html +121 -0
  58. package/coverage/lcov-report/src/api/v1/Users.js.html +778 -0
  59. package/coverage/lcov-report/src/api/v1/Utm.js.html +151 -0
  60. package/coverage/lcov-report/src/api/v1/Webauthn.js.html +190 -0
  61. package/coverage/lcov-report/src/api/v1/Zoom.js.html +124 -0
  62. package/coverage/lcov-report/src/api/v1/index.html +116 -0
  63. package/coverage/lcov-report/src/api/v1/index.js.html +373 -0
  64. package/coverage/lcov-report/src/index.html +116 -0
  65. package/coverage/lcov-report/src/index.js.html +109 -0
  66. package/coverage/lcov-report/tests/helpers.js.html +145 -0
  67. package/coverage/lcov-report/tests/index.html +116 -0
  68. package/coverage/lcov.info +553 -0
  69. package/coverage/test-report.html +277 -0
  70. package/package.json +1 -1
  71. package/src/api/v1/Users.js +2 -0
package/.env ADDED
@@ -0,0 +1 @@
1
+ INSIGNIA_EDUCATION_API_BASE_URL=http://localhost:8000
package/.env.test ADDED
@@ -0,0 +1,5 @@
1
+ INSIGNIA_EDUCATION_API_BASE_URL=http://localhost:8001
2
+ TEST_EMAIL=roquendo@insigniaeducation.com
3
+ TEST_PASSWORD=12345678
4
+ TEST_EMAIL_ADMIN=rodolfoquendo@gmail.com
5
+ TEST_PASSWORD_ADMIN=12345678
@@ -7,70 +7,23 @@ on:
7
7
 
8
8
  permissions:
9
9
  id-token: write # Required for OIDC
10
- contents: write # Required to commit the version bump back to master
11
10
 
12
11
  jobs:
13
12
  publish:
14
13
  runs-on: ubuntu-latest
15
- outputs:
16
- version: ${{ steps.bump.outputs.version }}
17
14
  steps:
18
15
  - uses: actions/checkout@v6
19
16
 
20
17
  - uses: actions/setup-node@v6
21
18
  with:
22
- node-version: '24'
19
+ node-version: '25'
23
20
  registry-url: 'https://registry.npmjs.org'
24
21
  package-manager-cache: false # never use caching in release builds
25
22
  - run: npm ci
26
23
  - run: npm run build --if-present
27
24
  # npm test disabled: integration suite needs a live api backend, no CI service for it yet
28
25
 
29
- - name: Bump patch version
30
- id: bump
31
- run: |
32
- npm version patch --no-git-tag-version
33
- echo "version=$(node -p "require('./package.json').version")" >> "$GITHUB_OUTPUT"
34
-
35
- # Pushing with GITHUB_TOKEN doesn't retrigger this workflow, so no [skip ci] loop risk.
36
- - name: Commit version bump
37
- run: |
38
- git config user.name "github-actions[bot]"
39
- git config user.email "github-actions[bot]@users.noreply.github.com"
40
- git add package.json package-lock.json
41
- git commit -m "chore: bump version to ${{ steps.bump.outputs.version }}"
42
- git push
43
-
44
- - run: npm publish # Or: npm stage publish
45
-
46
- sync-front:
47
- needs: publish
48
- runs-on: ubuntu-latest
49
- strategy:
50
- matrix:
51
- branch: [master, beta]
52
- steps:
53
- - uses: actions/checkout@v6
54
- with:
55
- repository: insignia-education/front
56
- ref: ${{ matrix.branch }}
57
- token: ${{ secrets.FRONT_REPO_PAT }}
58
-
59
- - uses: actions/setup-node@v6
60
- with:
61
- node-version: '24'
62
-
63
- - name: Bump api-sdk-js dependency
64
- run: npm install @insignia-education/api-sdk-js@${{ needs.publish.outputs.version }} --package-lock-only --no-audit --no-fund
65
-
66
- - name: Commit and push
67
- run: |
68
- git config user.name "github-actions[bot]"
69
- git config user.email "github-actions[bot]@users.noreply.github.com"
70
- git add package.json package-lock.json
71
- if git diff --cached --quiet; then
72
- echo "front@${{ matrix.branch }} already on ${{ needs.publish.outputs.version }}"
73
- exit 0
74
- fi
75
- git commit -m "chore: bump @insignia-education/api-sdk-js to ${{ needs.publish.outputs.version }}"
76
- git push origin ${{ matrix.branch }}
26
+ # The version in package.json is whatever was committed — this workflow never bumps it.
27
+ # The pre-commit hook (.github/hooks/pre-commit) already refuses a commit whose version is
28
+ # already published, so publishing here just fails loudly if someone forgot to bump it.
29
+ - run: npm publish # Or: npm stage publish
package/AGENTS.md CHANGED
@@ -95,10 +95,14 @@ Consumers (`front`, `api`) must install this package the normal npm way — **ne
95
95
  - A symlinked package looks like it works, but an `npm install`/`npm ci` in the consumer repo can
96
96
  silently replace the link with a stale registry copy — the consumer keeps running old SDK code
97
97
  with no error, and edits stop propagating until someone notices at runtime.
98
- - Instead: bump this package's version (`npm version patch|minor`) and have the human publish it
99
- (`npm publish`), then bump the version range in the consumer's `package.json` and run
100
- `npm install` there.
101
- - Never publish on your own initiative publishing is a human action.
98
+ - Instead: bump this package's version (`npm version patch|minor` the pre-commit hook rejects a
99
+ commit whose version is already published, so this can't be skipped) and commit it. CI
100
+ (`.github/workflows/npm-publish-github-packages.yml`) publishes automatically on push to
101
+ master it does **not** bump the version itself, and it does **not** touch any consumer repo,
102
+ so pin the exact new version (no `^`/`~`) in the consumer's `package.json` and run
103
+ `npm install` there yourself.
104
+ - Never publish on your own initiative — pushing the version-bump commit to master is what
105
+ triggers it; don't run `npm publish` by hand.
102
106
 
103
107
  ## Never do
104
108
  - Don't add runtime dependencies
package/CLAUDE.md CHANGED
@@ -31,30 +31,21 @@ made here.
31
31
 
32
32
  ## Deployment / publish (GitHub Actions — read this before touching `master`)
33
33
 
34
- `.github/workflows/npm-publish-github-packages.yml` runs on every push to `master` (skipped only
35
- if the commit message contains `[skip ci]`). It is **not** a manual `npm publish` a human runs by
36
- hand merging a PR to `master` is the trigger, and that merge is a human action, so the "never
37
- publish on your own initiative" rule in `AGENTS.md` still applies to *merging to master*, not just
38
- to running `npm publish` directly.
39
-
40
- What the workflow actually does, in order:
41
-
42
- 1. **`bump-and-publish`** — bumps the patch version (`npm version patch -m "chore: release v%s
43
- [skip ci]"`), pushes the version-bump commit + tag back to `master`, then publishes the package
44
- to npm (`npm publish --access public`, using `secrets.NPM_TOKEN`).
45
- 2. **`sync-front`** (runs after publish, waits 15s for npm registry propagation) — automatically
46
- syncs `front` using `secrets.FRONT_REPO_PAT`:
47
- - **`beta` branch**: checks it out, runs `npm install @insignia-education/api-sdk-js@<new
48
- version>`, commits, and **pushes directly** — no review step.
49
- - **`master` branch**: checks it out, runs the same install, and **opens a PR** against
50
- `front`'s `master` (`chore/bump-api-sdk-js-<version>`) for human review — it does not merge
51
- itself.
34
+ `.github/workflows/npm-publish-github-packages.yml` runs on every push to `master`. It is **not**
35
+ a manual `npm publish` a human runs by hand merging a PR to `master` is the trigger, and that
36
+ merge is a human action, so the "never publish on your own initiative" rule in `AGENTS.md` still
37
+ applies to *merging to master*, not just to running `npm publish` directly.
38
+
39
+ What the workflow actually does: installs, builds, then `npm publish`. That's it — it does **not**
40
+ bump the version (the pre-commit hook already forces that before the commit even lands), and it
41
+ does **not** touch `front` or any other consumer repo.
52
42
 
53
43
  **Practical implications:**
54
- - Merging a PR to this repo's `master` is not just "ship the SDK change" it also auto-bumps
55
- `front`'s `beta` branch with no human in the loop, and opens (but does not merge) a PR against
56
- `front`'s `master`. Treat a `master` merge here as a deploy action, not a routine commit.
57
- - There is no manual "bump the consumer's `package.json`" step to perform for `beta` CI already
58
- does it. A human only needs to review/merge the auto-opened PR against `front`'s `master`.
59
- - Requires `secrets.NPM_TOKEN` (npm publish) and `secrets.FRONT_REPO_PAT` (push to `front` +
60
- open PRs there) to be configured on this repo.
44
+ - The version published is exactly whatever `package.json` says at the commit that landed on
45
+ `master`. If that version is already on npm (e.g. someone forgot to bump it), the publish step
46
+ fails loudly there's no silent overwrite or skip.
47
+ - Nothing else updates automatically: after a merge here, a human still has to pin the exact new
48
+ version (no `^`/`~`) in `front/package.json` and run `npm install` there see this repo's
49
+ `AGENTS.md` and `front/AGENTS.md`'s API SDK sync rule.
50
+ - Publishes via npm's OIDC trusted publishing (`permissions: id-token: write`) — no `NPM_TOKEN` or
51
+ other secret, and no cross-repo permissions, are needed anymore.
@@ -0,0 +1,380 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <coverage generated="1786578699080" clover="3.2.0">
3
+ <project timestamp="1786578699080" name="All files">
4
+ <metrics statements="362" coveredstatements="204" conditionals="49" coveredconditionals="40" methods="62" coveredmethods="18" elements="473" coveredelements="262" complexity="0" loc="362" ncloc="362" packages="2" files="2" classes="2"/>
5
+ <package name="src">
6
+ <metrics statements="131" coveredstatements="99" conditionals="45" coveredconditionals="36" methods="15" coveredmethods="14"/>
7
+ <file name="Client.js" path="/Users/roquendo/code/insignia-education/api-sdk-js/src/Client.js">
8
+ <metrics statements="131" coveredstatements="99" conditionals="45" coveredconditionals="36" methods="15" coveredmethods="14"/>
9
+ <line num="1" count="1" type="stmt"/>
10
+ <line num="2" count="1" type="cond" truecount="1" falsecount="0"/>
11
+ <line num="3" count="1" type="stmt"/>
12
+ <line num="4" count="1" type="stmt"/>
13
+ <line num="5" count="1" type="cond" truecount="1" falsecount="0"/>
14
+ <line num="6" count="29" type="stmt"/>
15
+ <line num="7" count="29" type="stmt"/>
16
+ <line num="8" count="1" type="stmt"/>
17
+ <line num="9" count="1" type="stmt"/>
18
+ <line num="10" count="1" type="cond" truecount="1" falsecount="0"/>
19
+ <line num="11" count="2" type="stmt"/>
20
+ <line num="12" count="2" type="stmt"/>
21
+ <line num="13" count="1" type="stmt"/>
22
+ <line num="14" count="1" type="cond" truecount="1" falsecount="0"/>
23
+ <line num="15" count="29" type="stmt"/>
24
+ <line num="16" count="28" type="cond" truecount="2" falsecount="0"/>
25
+ <line num="17" count="29" type="cond" truecount="1" falsecount="0"/>
26
+ <line num="18" count="29" type="stmt"/>
27
+ <line num="19" count="29" type="cond" truecount="2" falsecount="0"/>
28
+ <line num="20" count="29" type="stmt"/>
29
+ <line num="21" count="29" type="stmt"/>
30
+ <line num="22" count="29" type="stmt"/>
31
+ <line num="23" count="1" type="stmt"/>
32
+ <line num="24" count="1" type="cond" truecount="1" falsecount="0"/>
33
+ <line num="25" count="23" type="stmt"/>
34
+ <line num="26" count="23" type="stmt"/>
35
+ <line num="27" count="23" type="stmt"/>
36
+ <line num="28" count="23" type="stmt"/>
37
+ <line num="29" count="23" type="stmt"/>
38
+ <line num="30" count="23" type="cond" truecount="0" falsecount="1"/>
39
+ <line num="31" count="23" type="stmt"/>
40
+ <line num="32" count="23" type="stmt"/>
41
+ <line num="33" count="23" type="cond" truecount="1" falsecount="0"/>
42
+ <line num="34" count="23" type="stmt"/>
43
+ <line num="35" count="23" type="stmt"/>
44
+ <line num="36" count="23" type="stmt"/>
45
+ <line num="37" count="1" type="stmt"/>
46
+ <line num="38" count="1" type="cond" truecount="1" falsecount="0"/>
47
+ <line num="39" count="23" type="cond" truecount="2" falsecount="0"/>
48
+ <line num="40" count="1" type="stmt"/>
49
+ <line num="41" count="1" type="stmt"/>
50
+ <line num="42" count="1" type="cond" truecount="1" falsecount="0"/>
51
+ <line num="43" count="1" type="stmt"/>
52
+ <line num="44" count="1" type="stmt"/>
53
+ <line num="45" count="1" type="stmt"/>
54
+ <line num="46" count="1" type="cond" truecount="1" falsecount="0"/>
55
+ <line num="47" count="23" type="cond" truecount="0" falsecount="1"/>
56
+ <line num="48" count="23" type="stmt"/>
57
+ <line num="49" count="23" type="stmt"/>
58
+ <line num="50" count="23" type="cond" truecount="1" falsecount="0"/>
59
+ <line num="51" count="1" type="cond" truecount="1" falsecount="0"/>
60
+ <line num="52" count="23" type="cond" truecount="1" falsecount="1"/>
61
+ <line num="53" count="23" type="stmt"/>
62
+ <line num="54" count="23" type="cond" truecount="1" falsecount="0"/>
63
+ <line num="55" count="1" type="stmt"/>
64
+ <line num="56" count="1" type="stmt"/>
65
+ <line num="57" count="1" type="cond" truecount="0" falsecount="1"/>
66
+ <line num="58" count="1" type="stmt"/>
67
+ <line num="59" count="1" type="stmt"/>
68
+ <line num="60" count="1" type="stmt"/>
69
+ <line num="61" count="23" type="stmt"/>
70
+ <line num="62" count="1" type="stmt"/>
71
+ <line num="63" count="1" type="cond" truecount="1" falsecount="0"/>
72
+ <line num="64" count="23" type="cond" truecount="2" falsecount="0"/>
73
+ <line num="65" count="22" type="stmt"/>
74
+ <line num="66" count="22" type="stmt"/>
75
+ <line num="67" count="23" type="cond" truecount="1" falsecount="0"/>
76
+ <line num="68" count="1" type="stmt"/>
77
+ <line num="69" count="1" type="cond" truecount="0" falsecount="1"/>
78
+ <line num="70" count="1" type="cond" truecount="1" falsecount="0"/>
79
+ <line num="71" count="21" type="stmt"/>
80
+ <line num="72" count="21" type="stmt"/>
81
+ <line num="73" count="23" type="cond" truecount="1" falsecount="0"/>
82
+ <line num="74" count="1" type="stmt"/>
83
+ <line num="75" count="1" type="stmt"/>
84
+ <line num="76" count="1" type="cond" truecount="0" falsecount="1"/>
85
+ <line num="77" count="0" type="stmt"/>
86
+ <line num="78" count="0" type="stmt"/>
87
+ <line num="79" count="23" type="stmt"/>
88
+ <line num="80" count="1" type="stmt"/>
89
+ <line num="81" count="1" type="cond" truecount="1" falsecount="0"/>
90
+ <line num="82" count="23" type="stmt"/>
91
+ <line num="83" count="23" type="cond" truecount="1" falsecount="0"/>
92
+ <line num="84" count="23" type="stmt"/>
93
+ <line num="85" count="23" type="stmt"/>
94
+ <line num="86" count="23" type="cond" truecount="0" falsecount="1"/>
95
+ <line num="87" count="0" type="stmt"/>
96
+ <line num="88" count="0" type="stmt"/>
97
+ <line num="89" count="0" type="stmt"/>
98
+ <line num="90" count="0" type="stmt"/>
99
+ <line num="91" count="0" type="stmt"/>
100
+ <line num="92" count="23" type="stmt"/>
101
+ <line num="93" count="23" type="cond" truecount="3" falsecount="0"/>
102
+ <line num="94" count="23" type="stmt"/>
103
+ <line num="95" count="1" type="stmt"/>
104
+ <line num="96" count="1" type="stmt"/>
105
+ <line num="97" count="0" type="stmt"/>
106
+ <line num="98" count="0" type="stmt"/>
107
+ <line num="99" count="0" type="stmt"/>
108
+ <line num="100" count="0" type="stmt"/>
109
+ <line num="101" count="0" type="stmt"/>
110
+ <line num="102" count="0" type="stmt"/>
111
+ <line num="103" count="0" type="stmt"/>
112
+ <line num="104" count="0" type="stmt"/>
113
+ <line num="105" count="0" type="stmt"/>
114
+ <line num="106" count="0" type="stmt"/>
115
+ <line num="107" count="0" type="stmt"/>
116
+ <line num="108" count="0" type="stmt"/>
117
+ <line num="109" count="0" type="stmt"/>
118
+ <line num="110" count="0" type="stmt"/>
119
+ <line num="111" count="0" type="stmt"/>
120
+ <line num="112" count="0" type="stmt"/>
121
+ <line num="113" count="0" type="stmt"/>
122
+ <line num="114" count="0" type="stmt"/>
123
+ <line num="115" count="0" type="stmt"/>
124
+ <line num="116" count="0" type="stmt"/>
125
+ <line num="117" count="1" type="stmt"/>
126
+ <line num="118" count="1" type="cond" truecount="1" falsecount="0"/>
127
+ <line num="119" count="14" type="cond" truecount="0" falsecount="2"/>
128
+ <line num="120" count="0" type="stmt"/>
129
+ <line num="121" count="0" type="stmt"/>
130
+ <line num="122" count="0" type="stmt"/>
131
+ <line num="123" count="0" type="stmt"/>
132
+ <line num="124" count="0" type="stmt"/>
133
+ <line num="125" count="14" type="stmt"/>
134
+ <line num="126" count="14" type="stmt"/>
135
+ <line num="127" count="1" type="cond" truecount="1" falsecount="0"/>
136
+ <line num="128" count="1" type="cond" truecount="1" falsecount="0"/>
137
+ <line num="129" count="1" type="cond" truecount="1" falsecount="0"/>
138
+ <line num="130" count="1" type="cond" truecount="1" falsecount="0"/>
139
+ <line num="131" count="1" type="stmt"/>
140
+ </file>
141
+ </package>
142
+ <package name="src.api.v1">
143
+ <metrics statements="231" coveredstatements="105" conditionals="4" coveredconditionals="4" methods="47" coveredmethods="4"/>
144
+ <file name="Users.js" path="/Users/roquendo/code/insignia-education/api-sdk-js/src/api/v1/Users.js">
145
+ <metrics statements="231" coveredstatements="105" conditionals="4" coveredconditionals="4" methods="47" coveredmethods="4"/>
146
+ <line num="1" count="1" type="stmt"/>
147
+ <line num="2" count="1" type="cond" truecount="1" falsecount="0"/>
148
+ <line num="3" count="1" type="stmt"/>
149
+ <line num="4" count="1" type="cond" truecount="1" falsecount="0"/>
150
+ <line num="5" count="1" type="stmt"/>
151
+ <line num="6" count="1" type="stmt"/>
152
+ <line num="7" count="1" type="stmt"/>
153
+ <line num="8" count="1" type="stmt"/>
154
+ <line num="9" count="1" type="stmt"/>
155
+ <line num="10" count="1" type="stmt"/>
156
+ <line num="11" count="1" type="stmt"/>
157
+ <line num="12" count="1" type="stmt"/>
158
+ <line num="13" count="1" type="stmt"/>
159
+ <line num="14" count="1" type="stmt"/>
160
+ <line num="15" count="1" type="stmt"/>
161
+ <line num="16" count="1" type="stmt"/>
162
+ <line num="17" count="1" type="stmt"/>
163
+ <line num="18" count="1" type="stmt"/>
164
+ <line num="19" count="1" type="stmt"/>
165
+ <line num="20" count="0" type="stmt"/>
166
+ <line num="21" count="0" type="stmt"/>
167
+ <line num="22" count="1" type="stmt"/>
168
+ <line num="23" count="1" type="stmt"/>
169
+ <line num="24" count="1" type="stmt"/>
170
+ <line num="25" count="1" type="stmt"/>
171
+ <line num="26" count="1" type="stmt"/>
172
+ <line num="27" count="0" type="stmt"/>
173
+ <line num="28" count="0" type="stmt"/>
174
+ <line num="29" count="0" type="stmt"/>
175
+ <line num="30" count="0" type="stmt"/>
176
+ <line num="31" count="0" type="stmt"/>
177
+ <line num="32" count="0" type="stmt"/>
178
+ <line num="33" count="0" type="stmt"/>
179
+ <line num="34" count="0" type="stmt"/>
180
+ <line num="35" count="0" type="stmt"/>
181
+ <line num="36" count="1" type="stmt"/>
182
+ <line num="37" count="1" type="stmt"/>
183
+ <line num="38" count="0" type="stmt"/>
184
+ <line num="39" count="0" type="stmt"/>
185
+ <line num="40" count="0" type="stmt"/>
186
+ <line num="41" count="0" type="stmt"/>
187
+ <line num="42" count="0" type="stmt"/>
188
+ <line num="43" count="0" type="stmt"/>
189
+ <line num="44" count="0" type="stmt"/>
190
+ <line num="45" count="0" type="stmt"/>
191
+ <line num="46" count="0" type="stmt"/>
192
+ <line num="47" count="0" type="stmt"/>
193
+ <line num="48" count="0" type="stmt"/>
194
+ <line num="49" count="1" type="stmt"/>
195
+ <line num="50" count="1" type="stmt"/>
196
+ <line num="51" count="1" type="stmt"/>
197
+ <line num="52" count="1" type="stmt"/>
198
+ <line num="53" count="0" type="stmt"/>
199
+ <line num="54" count="0" type="stmt"/>
200
+ <line num="55" count="0" type="stmt"/>
201
+ <line num="56" count="0" type="stmt"/>
202
+ <line num="57" count="0" type="stmt"/>
203
+ <line num="58" count="0" type="stmt"/>
204
+ <line num="59" count="0" type="stmt"/>
205
+ <line num="60" count="0" type="stmt"/>
206
+ <line num="61" count="0" type="stmt"/>
207
+ <line num="62" count="0" type="stmt"/>
208
+ <line num="63" count="0" type="stmt"/>
209
+ <line num="64" count="0" type="stmt"/>
210
+ <line num="65" count="0" type="stmt"/>
211
+ <line num="66" count="0" type="stmt"/>
212
+ <line num="67" count="0" type="stmt"/>
213
+ <line num="68" count="0" type="stmt"/>
214
+ <line num="69" count="0" type="stmt"/>
215
+ <line num="70" count="0" type="stmt"/>
216
+ <line num="71" count="0" type="stmt"/>
217
+ <line num="72" count="0" type="stmt"/>
218
+ <line num="73" count="0" type="stmt"/>
219
+ <line num="74" count="0" type="stmt"/>
220
+ <line num="75" count="1" type="stmt"/>
221
+ <line num="76" count="1" type="stmt"/>
222
+ <line num="77" count="1" type="stmt"/>
223
+ <line num="78" count="0" type="stmt"/>
224
+ <line num="79" count="0" type="stmt"/>
225
+ <line num="80" count="0" type="stmt"/>
226
+ <line num="81" count="0" type="stmt"/>
227
+ <line num="82" count="0" type="stmt"/>
228
+ <line num="83" count="0" type="stmt"/>
229
+ <line num="84" count="0" type="stmt"/>
230
+ <line num="85" count="0" type="stmt"/>
231
+ <line num="86" count="0" type="stmt"/>
232
+ <line num="87" count="0" type="stmt"/>
233
+ <line num="88" count="0" type="stmt"/>
234
+ <line num="89" count="0" type="stmt"/>
235
+ <line num="90" count="0" type="stmt"/>
236
+ <line num="91" count="0" type="stmt"/>
237
+ <line num="92" count="0" type="stmt"/>
238
+ <line num="93" count="1" type="stmt"/>
239
+ <line num="94" count="1" type="stmt"/>
240
+ <line num="95" count="1" type="stmt"/>
241
+ <line num="96" count="1" type="stmt"/>
242
+ <line num="97" count="1" type="cond" truecount="1" falsecount="0"/>
243
+ <line num="98" count="1" type="stmt"/>
244
+ <line num="99" count="1" type="stmt"/>
245
+ <line num="100" count="1" type="stmt"/>
246
+ <line num="101" count="1" type="stmt"/>
247
+ <line num="102" count="1" type="stmt"/>
248
+ <line num="103" count="1" type="stmt"/>
249
+ <line num="104" count="1" type="stmt"/>
250
+ <line num="105" count="1" type="stmt"/>
251
+ <line num="106" count="1" type="stmt"/>
252
+ <line num="107" count="1" type="stmt"/>
253
+ <line num="108" count="1" type="stmt"/>
254
+ <line num="109" count="1" type="stmt"/>
255
+ <line num="110" count="1" type="stmt"/>
256
+ <line num="111" count="1" type="stmt"/>
257
+ <line num="112" count="1" type="cond" truecount="1" falsecount="0"/>
258
+ <line num="113" count="1" type="stmt"/>
259
+ <line num="114" count="1" type="stmt"/>
260
+ <line num="115" count="1" type="stmt"/>
261
+ <line num="116" count="1" type="stmt"/>
262
+ <line num="117" count="1" type="stmt"/>
263
+ <line num="118" count="1" type="stmt"/>
264
+ <line num="119" count="1" type="stmt"/>
265
+ <line num="120" count="0" type="stmt"/>
266
+ <line num="121" count="0" type="stmt"/>
267
+ <line num="122" count="0" type="stmt"/>
268
+ <line num="123" count="0" type="stmt"/>
269
+ <line num="124" count="0" type="stmt"/>
270
+ <line num="125" count="0" type="stmt"/>
271
+ <line num="126" count="1" type="stmt"/>
272
+ <line num="127" count="1" type="stmt"/>
273
+ <line num="128" count="1" type="stmt"/>
274
+ <line num="129" count="0" type="stmt"/>
275
+ <line num="130" count="0" type="stmt"/>
276
+ <line num="131" count="0" type="stmt"/>
277
+ <line num="132" count="0" type="stmt"/>
278
+ <line num="133" count="0" type="stmt"/>
279
+ <line num="134" count="0" type="stmt"/>
280
+ <line num="135" count="1" type="stmt"/>
281
+ <line num="136" count="1" type="stmt"/>
282
+ <line num="137" count="1" type="stmt"/>
283
+ <line num="138" count="1" type="stmt"/>
284
+ <line num="139" count="1" type="stmt"/>
285
+ <line num="140" count="0" type="stmt"/>
286
+ <line num="141" count="0" type="stmt"/>
287
+ <line num="142" count="0" type="stmt"/>
288
+ <line num="143" count="0" type="stmt"/>
289
+ <line num="144" count="0" type="stmt"/>
290
+ <line num="145" count="0" type="stmt"/>
291
+ <line num="146" count="1" type="stmt"/>
292
+ <line num="147" count="1" type="stmt"/>
293
+ <line num="148" count="0" type="stmt"/>
294
+ <line num="149" count="0" type="stmt"/>
295
+ <line num="150" count="0" type="stmt"/>
296
+ <line num="151" count="0" type="stmt"/>
297
+ <line num="152" count="0" type="stmt"/>
298
+ <line num="153" count="0" type="stmt"/>
299
+ <line num="154" count="0" type="stmt"/>
300
+ <line num="155" count="0" type="stmt"/>
301
+ <line num="156" count="0" type="stmt"/>
302
+ <line num="157" count="1" type="stmt"/>
303
+ <line num="158" count="1" type="stmt"/>
304
+ <line num="159" count="0" type="stmt"/>
305
+ <line num="160" count="0" type="stmt"/>
306
+ <line num="161" count="0" type="stmt"/>
307
+ <line num="162" count="0" type="stmt"/>
308
+ <line num="163" count="0" type="stmt"/>
309
+ <line num="164" count="0" type="stmt"/>
310
+ <line num="165" count="0" type="stmt"/>
311
+ <line num="166" count="0" type="stmt"/>
312
+ <line num="167" count="1" type="stmt"/>
313
+ <line num="168" count="1" type="stmt"/>
314
+ <line num="169" count="0" type="stmt"/>
315
+ <line num="170" count="0" type="stmt"/>
316
+ <line num="171" count="0" type="stmt"/>
317
+ <line num="172" count="0" type="stmt"/>
318
+ <line num="173" count="0" type="stmt"/>
319
+ <line num="174" count="0" type="stmt"/>
320
+ <line num="175" count="0" type="stmt"/>
321
+ <line num="176" count="0" type="stmt"/>
322
+ <line num="177" count="1" type="stmt"/>
323
+ <line num="178" count="1" type="stmt"/>
324
+ <line num="179" count="1" type="stmt"/>
325
+ <line num="180" count="1" type="stmt"/>
326
+ <line num="181" count="1" type="stmt"/>
327
+ <line num="182" count="1" type="stmt"/>
328
+ <line num="183" count="1" type="stmt"/>
329
+ <line num="184" count="1" type="stmt"/>
330
+ <line num="185" count="1" type="stmt"/>
331
+ <line num="186" count="1" type="stmt"/>
332
+ <line num="187" count="1" type="stmt"/>
333
+ <line num="188" count="1" type="stmt"/>
334
+ <line num="189" count="1" type="stmt"/>
335
+ <line num="190" count="1" type="stmt"/>
336
+ <line num="191" count="1" type="stmt"/>
337
+ <line num="192" count="1" type="stmt"/>
338
+ <line num="193" count="1" type="stmt"/>
339
+ <line num="194" count="1" type="stmt"/>
340
+ <line num="195" count="1" type="stmt"/>
341
+ <line num="196" count="1" type="stmt"/>
342
+ <line num="197" count="1" type="stmt"/>
343
+ <line num="198" count="1" type="stmt"/>
344
+ <line num="199" count="1" type="stmt"/>
345
+ <line num="200" count="1" type="stmt"/>
346
+ <line num="201" count="0" type="stmt"/>
347
+ <line num="202" count="0" type="stmt"/>
348
+ <line num="203" count="0" type="stmt"/>
349
+ <line num="204" count="0" type="stmt"/>
350
+ <line num="205" count="0" type="stmt"/>
351
+ <line num="206" count="0" type="stmt"/>
352
+ <line num="207" count="1" type="stmt"/>
353
+ <line num="208" count="1" type="stmt"/>
354
+ <line num="209" count="1" type="stmt"/>
355
+ <line num="210" count="0" type="stmt"/>
356
+ <line num="211" count="0" type="stmt"/>
357
+ <line num="212" count="0" type="stmt"/>
358
+ <line num="213" count="0" type="stmt"/>
359
+ <line num="214" count="0" type="stmt"/>
360
+ <line num="215" count="0" type="stmt"/>
361
+ <line num="216" count="0" type="stmt"/>
362
+ <line num="217" count="0" type="stmt"/>
363
+ <line num="218" count="0" type="stmt"/>
364
+ <line num="219" count="1" type="stmt"/>
365
+ <line num="220" count="1" type="stmt"/>
366
+ <line num="221" count="1" type="stmt"/>
367
+ <line num="222" count="0" type="stmt"/>
368
+ <line num="223" count="0" type="stmt"/>
369
+ <line num="224" count="0" type="stmt"/>
370
+ <line num="225" count="0" type="stmt"/>
371
+ <line num="226" count="0" type="stmt"/>
372
+ <line num="227" count="0" type="stmt"/>
373
+ <line num="228" count="0" type="stmt"/>
374
+ <line num="229" count="0" type="stmt"/>
375
+ <line num="230" count="0" type="stmt"/>
376
+ <line num="231" count="1" type="stmt"/>
377
+ </file>
378
+ </package>
379
+ </project>
380
+ </coverage>