@hsuite/native-connect-angular 1.0.0
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.
- package/README.md +48 -0
- package/USAGE_EXAMPLES.md +476 -0
- package/assets/wallets/extension.svg +7 -0
- package/assets/wallets/hashpack.svg +6 -0
- package/assets/wallets/hsuite.svg +11 -0
- package/assets/wallets/kabila.svg +11 -0
- package/assets/wallets/walletconnect.svg +13 -0
- package/coverage/base.css +224 -0
- package/coverage/block-navigation.js +87 -0
- package/coverage/coverage-summary.json +50 -0
- package/coverage/favicon.png +0 -0
- package/coverage/index.html +476 -0
- package/coverage/lcov-report/base.css +224 -0
- package/coverage/lcov-report/block-navigation.js +87 -0
- package/coverage/lcov-report/favicon.png +0 -0
- package/coverage/lcov-report/index.html +476 -0
- package/coverage/lcov-report/lib/components/account-selector/account-actions/account-actions.component.ts.html +868 -0
- package/coverage/lcov-report/lib/components/account-selector/account-actions/index.html +116 -0
- package/coverage/lcov-report/lib/components/account-selector/account-filter/account-filter.component.ts.html +1288 -0
- package/coverage/lcov-report/lib/components/account-selector/account-filter/index.html +116 -0
- package/coverage/lcov-report/lib/components/account-selector/account-formatting.service.ts.html +685 -0
- package/coverage/lcov-report/lib/components/account-selector/account-grouping.service.ts.html +766 -0
- package/coverage/lcov-report/lib/components/account-selector/account-list/account-list.component.ts.html +1495 -0
- package/coverage/lcov-report/lib/components/account-selector/account-list/index.html +116 -0
- package/coverage/lcov-report/lib/components/account-selector/account-selector.component.ts.html +1495 -0
- package/coverage/lcov-report/lib/components/account-selector/account-selector.service.ts.html +1588 -0
- package/coverage/lcov-report/lib/components/account-selector/index.html +161 -0
- package/coverage/lcov-report/lib/components/wallet-account-display/index.html +116 -0
- package/coverage/lcov-report/lib/components/wallet-account-display/wallet-account-display.component.ts.html +505 -0
- package/coverage/lcov-report/lib/components/wallet-connect-button/index.html +116 -0
- package/coverage/lcov-report/lib/components/wallet-connect-button/wallet-connect-button.component.ts.html +805 -0
- package/coverage/lcov-report/lib/components/wallet-connect-prompt/index.html +116 -0
- package/coverage/lcov-report/lib/components/wallet-connect-prompt/wallet-connect-prompt.component.ts.html +409 -0
- package/coverage/lcov-report/lib/components/wallet-connected-guard/index.html +116 -0
- package/coverage/lcov-report/lib/components/wallet-connected-guard/wallet-connected-guard.component.ts.html +304 -0
- package/coverage/lcov-report/lib/components/wallet-connection-modal/connection-method-step/connection-method-step.component.ts.html +436 -0
- package/coverage/lcov-report/lib/components/wallet-connection-modal/connection-method-step/index.html +116 -0
- package/coverage/lcov-report/lib/components/wallet-connection-modal/index.html +116 -0
- package/coverage/lcov-report/lib/components/wallet-connection-modal/qr-pairing-step/index.html +116 -0
- package/coverage/lcov-report/lib/components/wallet-connection-modal/qr-pairing-step/qr-pairing-step.component.ts.html +2287 -0
- package/coverage/lcov-report/lib/components/wallet-connection-modal/wallet-connection-modal.component.ts.html +2275 -0
- package/coverage/lcov-report/lib/components/wallet-session-display/index.html +116 -0
- package/coverage/lcov-report/lib/components/wallet-session-display/wallet-session-display.component.ts.html +676 -0
- package/coverage/lcov-report/lib/components/wallet-transaction-status/index.html +116 -0
- package/coverage/lcov-report/lib/components/wallet-transaction-status/wallet-transaction-status.component.ts.html +703 -0
- package/coverage/lcov-report/lib/directives/index.html +146 -0
- package/coverage/lcov-report/lib/directives/wallet-connected.directive.ts.html +670 -0
- package/coverage/lcov-report/lib/directives/wallet-context.directive.ts.html +547 -0
- package/coverage/lcov-report/lib/directives/wallet-events.directive.ts.html +781 -0
- package/coverage/lcov-report/lib/hsuite-wallet.module.ts.html +715 -0
- package/coverage/lcov-report/lib/index.html +116 -0
- package/coverage/lcov-report/lib/models/connection-config.model.ts.html +280 -0
- package/coverage/lcov-report/lib/models/index.html +131 -0
- package/coverage/lcov-report/lib/models/provider-types.ts.html +577 -0
- package/coverage/lcov-report/lib/providers/base-wallet-provider.ts.html +1138 -0
- package/coverage/lcov-report/lib/providers/hsuite-native/channel-client.service.ts.html +2671 -0
- package/coverage/lcov-report/lib/providers/hsuite-native/index.html +116 -0
- package/coverage/lcov-report/lib/providers/hsuite-native-provider.ts.html +2347 -0
- package/coverage/lcov-report/lib/providers/index.html +146 -0
- package/coverage/lcov-report/lib/providers/p2p-native/index.html +131 -0
- package/coverage/lcov-report/lib/providers/p2p-native/p2p-native.provider.ts.html +2254 -0
- package/coverage/lcov-report/lib/providers/p2p-native/p2p-session-manager.ts.html +2170 -0
- package/coverage/lcov-report/lib/providers/wallet-error-handler.ts.html +1132 -0
- package/coverage/lcov-report/lib/providers/walletconnect/core/index.html +176 -0
- package/coverage/lcov-report/lib/providers/walletconnect/core/session-health.ts.html +673 -0
- package/coverage/lcov-report/lib/providers/walletconnect/core/walletconnect-client-manager.ts.html +1177 -0
- package/coverage/lcov-report/lib/providers/walletconnect/core/walletconnect-provider.ts.html +2563 -0
- package/coverage/lcov-report/lib/providers/walletconnect/core/walletconnect-session-store.ts.html +904 -0
- package/coverage/lcov-report/lib/providers/walletconnect/core/walletconnect-signing-orchestrator.ts.html +982 -0
- package/coverage/lcov-report/lib/providers/walletconnect/signers/hedera-signer.ts.html +1915 -0
- package/coverage/lcov-report/lib/providers/walletconnect/signers/index.html +146 -0
- package/coverage/lcov-report/lib/providers/walletconnect/signers/signer-factory.ts.html +445 -0
- package/coverage/lcov-report/lib/providers/walletconnect/signers/xrpl-signer.ts.html +1519 -0
- package/coverage/lcov-report/lib/services/index.html +191 -0
- package/coverage/lcov-report/lib/services/logger.service.ts.html +463 -0
- package/coverage/lcov-report/lib/services/transaction-builders/base-transaction-builder.service.ts.html +1840 -0
- package/coverage/lcov-report/lib/services/transaction-builders/hedera-amount-utils.ts.html +337 -0
- package/coverage/lcov-report/lib/services/transaction-builders/hedera-transaction-builder.service.ts.html +3940 -0
- package/coverage/lcov-report/lib/services/transaction-builders/index.html +161 -0
- package/coverage/lcov-report/lib/services/transaction-builders/xrpl-transaction-builder.service.ts.html +2581 -0
- package/coverage/lcov-report/lib/services/transaction.service.ts.html +1123 -0
- package/coverage/lcov-report/lib/services/unified-wallet.service.ts.html +2641 -0
- package/coverage/lcov-report/lib/services/wallet-context.service.ts.html +637 -0
- package/coverage/lcov-report/lib/services/wallet-event-bus.service.ts.html +643 -0
- package/coverage/lcov-report/lib/services/wallet-providers.service.ts.html +496 -0
- package/coverage/lcov-report/lib/transports/chrome-extension-transport.ts.html +823 -0
- package/coverage/lcov-report/lib/transports/index.html +116 -0
- package/coverage/lcov-report/lib/utils/index.html +116 -0
- package/coverage/lcov-report/lib/utils/ledger-icons.util.ts.html +319 -0
- package/coverage/lcov-report/prettify.css +1 -0
- package/coverage/lcov-report/prettify.js +2 -0
- package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/coverage/lcov-report/sorter.js +210 -0
- package/coverage/lcov.info +19252 -0
- package/coverage/lib/components/account-selector/account-actions/account-actions.component.ts.html +868 -0
- package/coverage/lib/components/account-selector/account-actions/index.html +116 -0
- package/coverage/lib/components/account-selector/account-filter/account-filter.component.ts.html +1288 -0
- package/coverage/lib/components/account-selector/account-filter/index.html +116 -0
- package/coverage/lib/components/account-selector/account-formatting.service.ts.html +685 -0
- package/coverage/lib/components/account-selector/account-grouping.service.ts.html +766 -0
- package/coverage/lib/components/account-selector/account-list/account-list.component.ts.html +1495 -0
- package/coverage/lib/components/account-selector/account-list/index.html +116 -0
- package/coverage/lib/components/account-selector/account-selector.component.ts.html +1495 -0
- package/coverage/lib/components/account-selector/account-selector.service.ts.html +1588 -0
- package/coverage/lib/components/account-selector/index.html +161 -0
- package/coverage/lib/components/wallet-account-display/index.html +116 -0
- package/coverage/lib/components/wallet-account-display/wallet-account-display.component.ts.html +505 -0
- package/coverage/lib/components/wallet-connect-button/index.html +116 -0
- package/coverage/lib/components/wallet-connect-button/wallet-connect-button.component.ts.html +805 -0
- package/coverage/lib/components/wallet-connect-prompt/index.html +116 -0
- package/coverage/lib/components/wallet-connect-prompt/wallet-connect-prompt.component.ts.html +409 -0
- package/coverage/lib/components/wallet-connected-guard/index.html +116 -0
- package/coverage/lib/components/wallet-connected-guard/wallet-connected-guard.component.ts.html +304 -0
- package/coverage/lib/components/wallet-connection-modal/connection-method-step/connection-method-step.component.ts.html +436 -0
- package/coverage/lib/components/wallet-connection-modal/connection-method-step/index.html +116 -0
- package/coverage/lib/components/wallet-connection-modal/index.html +116 -0
- package/coverage/lib/components/wallet-connection-modal/qr-pairing-step/index.html +116 -0
- package/coverage/lib/components/wallet-connection-modal/qr-pairing-step/qr-pairing-step.component.ts.html +2287 -0
- package/coverage/lib/components/wallet-connection-modal/wallet-connection-modal.component.ts.html +2275 -0
- package/coverage/lib/components/wallet-session-display/index.html +116 -0
- package/coverage/lib/components/wallet-session-display/wallet-session-display.component.ts.html +676 -0
- package/coverage/lib/components/wallet-transaction-status/index.html +116 -0
- package/coverage/lib/components/wallet-transaction-status/wallet-transaction-status.component.ts.html +703 -0
- package/coverage/lib/directives/index.html +146 -0
- package/coverage/lib/directives/wallet-connected.directive.ts.html +670 -0
- package/coverage/lib/directives/wallet-context.directive.ts.html +547 -0
- package/coverage/lib/directives/wallet-events.directive.ts.html +781 -0
- package/coverage/lib/hsuite-wallet.module.ts.html +715 -0
- package/coverage/lib/index.html +116 -0
- package/coverage/lib/models/connection-config.model.ts.html +280 -0
- package/coverage/lib/models/index.html +131 -0
- package/coverage/lib/models/provider-types.ts.html +577 -0
- package/coverage/lib/providers/base-wallet-provider.ts.html +1138 -0
- package/coverage/lib/providers/hsuite-native/channel-client.service.ts.html +2671 -0
- package/coverage/lib/providers/hsuite-native/index.html +116 -0
- package/coverage/lib/providers/hsuite-native-provider.ts.html +2347 -0
- package/coverage/lib/providers/index.html +146 -0
- package/coverage/lib/providers/p2p-native/index.html +131 -0
- package/coverage/lib/providers/p2p-native/p2p-native.provider.ts.html +2254 -0
- package/coverage/lib/providers/p2p-native/p2p-session-manager.ts.html +2170 -0
- package/coverage/lib/providers/wallet-error-handler.ts.html +1132 -0
- package/coverage/lib/providers/walletconnect/core/index.html +176 -0
- package/coverage/lib/providers/walletconnect/core/session-health.ts.html +673 -0
- package/coverage/lib/providers/walletconnect/core/walletconnect-client-manager.ts.html +1177 -0
- package/coverage/lib/providers/walletconnect/core/walletconnect-provider.ts.html +2563 -0
- package/coverage/lib/providers/walletconnect/core/walletconnect-session-store.ts.html +904 -0
- package/coverage/lib/providers/walletconnect/core/walletconnect-signing-orchestrator.ts.html +982 -0
- package/coverage/lib/providers/walletconnect/signers/hedera-signer.ts.html +1915 -0
- package/coverage/lib/providers/walletconnect/signers/index.html +146 -0
- package/coverage/lib/providers/walletconnect/signers/signer-factory.ts.html +445 -0
- package/coverage/lib/providers/walletconnect/signers/xrpl-signer.ts.html +1519 -0
- package/coverage/lib/services/index.html +191 -0
- package/coverage/lib/services/logger.service.ts.html +463 -0
- package/coverage/lib/services/transaction-builders/base-transaction-builder.service.ts.html +1840 -0
- package/coverage/lib/services/transaction-builders/hedera-amount-utils.ts.html +337 -0
- package/coverage/lib/services/transaction-builders/hedera-transaction-builder.service.ts.html +3940 -0
- package/coverage/lib/services/transaction-builders/index.html +161 -0
- package/coverage/lib/services/transaction-builders/xrpl-transaction-builder.service.ts.html +2581 -0
- package/coverage/lib/services/transaction.service.ts.html +1123 -0
- package/coverage/lib/services/unified-wallet.service.ts.html +2641 -0
- package/coverage/lib/services/wallet-context.service.ts.html +637 -0
- package/coverage/lib/services/wallet-event-bus.service.ts.html +643 -0
- package/coverage/lib/services/wallet-providers.service.ts.html +496 -0
- package/coverage/lib/transports/chrome-extension-transport.ts.html +823 -0
- package/coverage/lib/transports/index.html +116 -0
- package/coverage/lib/utils/index.html +116 -0
- package/coverage/lib/utils/ledger-icons.util.ts.html +319 -0
- package/coverage/prettify.css +1 -0
- package/coverage/prettify.js +2 -0
- package/coverage/sort-arrow-sprite.png +0 -0
- package/coverage/sorter.js +210 -0
- package/dist/README.md +48 -0
- package/dist/fesm2022/hsuite-native-connect-angular.mjs +14592 -0
- package/dist/fesm2022/hsuite-native-connect-angular.mjs.map +1 -0
- package/dist/index.d.ts +6949 -0
- package/examples/minimal-connect.ts +178 -0
- package/examples/multi-protocol.ts +495 -0
- package/examples/transaction-signing.ts +361 -0
- package/jest.config.json +45 -0
- package/karma.conf.js +42 -0
- package/ng-package.json +20 -0
- package/package.json +60 -0
- package/src/index.ts +203 -0
- package/src/lib/components/account-selector/account-actions/account-actions.component.ts +261 -0
- package/src/lib/components/account-selector/account-filter/account-filter.component.ts +401 -0
- package/src/lib/components/account-selector/account-formatting.service.ts +200 -0
- package/src/lib/components/account-selector/account-grouping.service.ts +227 -0
- package/src/lib/components/account-selector/account-list/account-list.component.ts +470 -0
- package/src/lib/components/account-selector/account-selector.component.html +135 -0
- package/src/lib/components/account-selector/account-selector.component.scss +2039 -0
- package/src/lib/components/account-selector/account-selector.component.ts +470 -0
- package/src/lib/components/account-selector/account-selector.service.ts +501 -0
- package/src/lib/components/wallet-account-display/wallet-account-display.component.html +34 -0
- package/src/lib/components/wallet-account-display/wallet-account-display.component.scss +99 -0
- package/src/lib/components/wallet-account-display/wallet-account-display.component.ts +140 -0
- package/src/lib/components/wallet-connect-button/wallet-connect-button.component.html +14 -0
- package/src/lib/components/wallet-connect-button/wallet-connect-button.component.scss +272 -0
- package/src/lib/components/wallet-connect-button/wallet-connect-button.component.ts +240 -0
- package/src/lib/components/wallet-connect-prompt/wallet-connect-prompt.component.html +24 -0
- package/src/lib/components/wallet-connect-prompt/wallet-connect-prompt.component.scss +50 -0
- package/src/lib/components/wallet-connect-prompt/wallet-connect-prompt.component.ts +108 -0
- package/src/lib/components/wallet-connected-guard/wallet-connected-guard.component.html +24 -0
- package/src/lib/components/wallet-connected-guard/wallet-connected-guard.component.ts +73 -0
- package/src/lib/components/wallet-connection-modal/connection-method-step/connection-method-step.component.html +56 -0
- package/src/lib/components/wallet-connection-modal/connection-method-step/connection-method-step.component.scss +218 -0
- package/src/lib/components/wallet-connection-modal/connection-method-step/connection-method-step.component.ts +117 -0
- package/src/lib/components/wallet-connection-modal/qr-pairing-step/qr-pairing-step.component.html +94 -0
- package/src/lib/components/wallet-connection-modal/qr-pairing-step/qr-pairing-step.component.scss +272 -0
- package/src/lib/components/wallet-connection-modal/qr-pairing-step/qr-pairing-step.component.ts +734 -0
- package/src/lib/components/wallet-connection-modal/wallet-connection-modal.component.html +197 -0
- package/src/lib/components/wallet-connection-modal/wallet-connection-modal.component.scss +678 -0
- package/src/lib/components/wallet-connection-modal/wallet-connection-modal.component.ts +730 -0
- package/src/lib/components/wallet-session-display/wallet-session-display.component.html +110 -0
- package/src/lib/components/wallet-session-display/wallet-session-display.component.scss +179 -0
- package/src/lib/components/wallet-session-display/wallet-session-display.component.ts +197 -0
- package/src/lib/components/wallet-transaction-status/wallet-transaction-status.component.html +65 -0
- package/src/lib/components/wallet-transaction-status/wallet-transaction-status.component.scss +254 -0
- package/src/lib/components/wallet-transaction-status/wallet-transaction-status.component.ts +206 -0
- package/src/lib/directives/wallet-connected.directive.ts +195 -0
- package/src/lib/directives/wallet-context.directive.ts +154 -0
- package/src/lib/directives/wallet-events.directive.ts +232 -0
- package/src/lib/hsuite-wallet.module.ts +210 -0
- package/src/lib/models/connection-config.model.ts +65 -0
- package/src/lib/models/provider-types.ts +164 -0
- package/src/lib/models/unified-account.model.ts +76 -0
- package/src/lib/models/wallet-context.model.ts +121 -0
- package/src/lib/models/wallet-events.model.ts +158 -0
- package/src/lib/providers/base-wallet-provider.ts +351 -0
- package/src/lib/providers/hsuite-native/channel-client.service.spec.ts +73 -0
- package/src/lib/providers/hsuite-native/channel-client.service.ts +862 -0
- package/src/lib/providers/hsuite-native/index.ts +8 -0
- package/src/lib/providers/hsuite-native-provider.ts +754 -0
- package/src/lib/providers/mobile-native/mobile-native.provider.spec.ts +19 -0
- package/src/lib/providers/p2p-native/index.ts +30 -0
- package/src/lib/providers/p2p-native/p2p-native.provider.spec.ts +523 -0
- package/src/lib/providers/p2p-native/p2p-native.provider.ts +723 -0
- package/src/lib/providers/p2p-native/p2p-session-manager.ts +695 -0
- package/src/lib/providers/wallet-error-handler.ts +349 -0
- package/src/lib/providers/walletconnect/core/base-signer.interface.ts +122 -0
- package/src/lib/providers/walletconnect/core/session-health.ts +196 -0
- package/src/lib/providers/walletconnect/core/walletconnect-client-manager.ts +364 -0
- package/src/lib/providers/walletconnect/core/walletconnect-provider.integration.spec.ts +348 -0
- package/src/lib/providers/walletconnect/core/walletconnect-provider.ts +826 -0
- package/src/lib/providers/walletconnect/core/walletconnect-session-store.ts +273 -0
- package/src/lib/providers/walletconnect/core/walletconnect-signing-orchestrator.ts +299 -0
- package/src/lib/providers/walletconnect/core/walletconnect-types.ts +48 -0
- package/src/lib/providers/walletconnect/index.ts +33 -0
- package/src/lib/providers/walletconnect/signers/hedera-signer.spec.ts +367 -0
- package/src/lib/providers/walletconnect/signers/hedera-signer.ts +610 -0
- package/src/lib/providers/walletconnect/signers/signer-factory.spec.ts +62 -0
- package/src/lib/providers/walletconnect/signers/signer-factory.ts +120 -0
- package/src/lib/providers/walletconnect/signers/xrpl-signer.spec.ts +296 -0
- package/src/lib/providers/walletconnect/signers/xrpl-signer.ts +478 -0
- package/src/lib/services/logger.service.ts +126 -0
- package/src/lib/services/transaction-builders/base-transaction-builder.service.ts +585 -0
- package/src/lib/services/transaction-builders/hedera-amount-utils.ts +84 -0
- package/src/lib/services/transaction-builders/hedera-transaction-builder.service.spec.ts +741 -0
- package/src/lib/services/transaction-builders/hedera-transaction-builder.service.ts +1285 -0
- package/src/lib/services/transaction-builders/index.ts +54 -0
- package/src/lib/services/transaction-builders/xrpl-transaction-builder.service.spec.ts +937 -0
- package/src/lib/services/transaction-builders/xrpl-transaction-builder.service.ts +832 -0
- package/src/lib/services/transaction.service.ts +346 -0
- package/src/lib/services/unified-wallet.service.spec.ts +1382 -0
- package/src/lib/services/unified-wallet.service.ts +852 -0
- package/src/lib/services/wallet-context.service.ts +184 -0
- package/src/lib/services/wallet-event-bus.service.ts +186 -0
- package/src/lib/services/wallet-providers.service.ts +137 -0
- package/src/lib/transports/chrome-extension-transport.ts +246 -0
- package/src/lib/utils/index.ts +14 -0
- package/src/lib/utils/ledger-icons.util.ts +78 -0
- package/test/test-setup.ts +21 -0
- package/test-setup.ts +63 -0
- package/tsconfig.build.json +11 -0
- package/tsconfig.json +29 -0
- package/tsconfig.spec.json +15 -0
- package/vitest.config.ts +48 -0
|
@@ -0,0 +1,2287 @@
|
|
|
1
|
+
|
|
2
|
+
<!doctype html>
|
|
3
|
+
<html lang="en">
|
|
4
|
+
|
|
5
|
+
<head>
|
|
6
|
+
<title>Code coverage report for lib/components/wallet-connection-modal/qr-pairing-step/qr-pairing-step.component.ts</title>
|
|
7
|
+
<meta charset="utf-8" />
|
|
8
|
+
<link rel="stylesheet" href="../../../../prettify.css" />
|
|
9
|
+
<link rel="stylesheet" href="../../../../base.css" />
|
|
10
|
+
<link rel="shortcut icon" type="image/x-icon" href="../../../../favicon.png" />
|
|
11
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
12
|
+
<style type='text/css'>
|
|
13
|
+
.coverage-summary .sorter {
|
|
14
|
+
background-image: url(../../../../sort-arrow-sprite.png);
|
|
15
|
+
}
|
|
16
|
+
</style>
|
|
17
|
+
</head>
|
|
18
|
+
|
|
19
|
+
<body>
|
|
20
|
+
<div class='wrapper'>
|
|
21
|
+
<div class='pad1'>
|
|
22
|
+
<h1><a href="../../../../index.html">All files</a> / <a href="index.html">lib/components/wallet-connection-modal/qr-pairing-step</a> qr-pairing-step.component.ts</h1>
|
|
23
|
+
<div class='clearfix'>
|
|
24
|
+
|
|
25
|
+
<div class='fl pad1y space-right2'>
|
|
26
|
+
<span class="strong">0% </span>
|
|
27
|
+
<span class="quiet">Statements</span>
|
|
28
|
+
<span class='fraction'>0/734</span>
|
|
29
|
+
</div>
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
<div class='fl pad1y space-right2'>
|
|
33
|
+
<span class="strong">0% </span>
|
|
34
|
+
<span class="quiet">Branches</span>
|
|
35
|
+
<span class='fraction'>0/1</span>
|
|
36
|
+
</div>
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
<div class='fl pad1y space-right2'>
|
|
40
|
+
<span class="strong">0% </span>
|
|
41
|
+
<span class="quiet">Functions</span>
|
|
42
|
+
<span class='fraction'>0/1</span>
|
|
43
|
+
</div>
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
<div class='fl pad1y space-right2'>
|
|
47
|
+
<span class="strong">0% </span>
|
|
48
|
+
<span class="quiet">Lines</span>
|
|
49
|
+
<span class='fraction'>0/734</span>
|
|
50
|
+
</div>
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
</div>
|
|
54
|
+
<p class="quiet">
|
|
55
|
+
Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
|
|
56
|
+
</p>
|
|
57
|
+
<template id="filterTemplate">
|
|
58
|
+
<div class="quiet">
|
|
59
|
+
Filter:
|
|
60
|
+
<input type="search" id="fileSearch">
|
|
61
|
+
</div>
|
|
62
|
+
</template>
|
|
63
|
+
</div>
|
|
64
|
+
<div class='status-line low'></div>
|
|
65
|
+
<pre><table class="coverage">
|
|
66
|
+
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
|
|
67
|
+
<a name='L2'></a><a href='#L2'>2</a>
|
|
68
|
+
<a name='L3'></a><a href='#L3'>3</a>
|
|
69
|
+
<a name='L4'></a><a href='#L4'>4</a>
|
|
70
|
+
<a name='L5'></a><a href='#L5'>5</a>
|
|
71
|
+
<a name='L6'></a><a href='#L6'>6</a>
|
|
72
|
+
<a name='L7'></a><a href='#L7'>7</a>
|
|
73
|
+
<a name='L8'></a><a href='#L8'>8</a>
|
|
74
|
+
<a name='L9'></a><a href='#L9'>9</a>
|
|
75
|
+
<a name='L10'></a><a href='#L10'>10</a>
|
|
76
|
+
<a name='L11'></a><a href='#L11'>11</a>
|
|
77
|
+
<a name='L12'></a><a href='#L12'>12</a>
|
|
78
|
+
<a name='L13'></a><a href='#L13'>13</a>
|
|
79
|
+
<a name='L14'></a><a href='#L14'>14</a>
|
|
80
|
+
<a name='L15'></a><a href='#L15'>15</a>
|
|
81
|
+
<a name='L16'></a><a href='#L16'>16</a>
|
|
82
|
+
<a name='L17'></a><a href='#L17'>17</a>
|
|
83
|
+
<a name='L18'></a><a href='#L18'>18</a>
|
|
84
|
+
<a name='L19'></a><a href='#L19'>19</a>
|
|
85
|
+
<a name='L20'></a><a href='#L20'>20</a>
|
|
86
|
+
<a name='L21'></a><a href='#L21'>21</a>
|
|
87
|
+
<a name='L22'></a><a href='#L22'>22</a>
|
|
88
|
+
<a name='L23'></a><a href='#L23'>23</a>
|
|
89
|
+
<a name='L24'></a><a href='#L24'>24</a>
|
|
90
|
+
<a name='L25'></a><a href='#L25'>25</a>
|
|
91
|
+
<a name='L26'></a><a href='#L26'>26</a>
|
|
92
|
+
<a name='L27'></a><a href='#L27'>27</a>
|
|
93
|
+
<a name='L28'></a><a href='#L28'>28</a>
|
|
94
|
+
<a name='L29'></a><a href='#L29'>29</a>
|
|
95
|
+
<a name='L30'></a><a href='#L30'>30</a>
|
|
96
|
+
<a name='L31'></a><a href='#L31'>31</a>
|
|
97
|
+
<a name='L32'></a><a href='#L32'>32</a>
|
|
98
|
+
<a name='L33'></a><a href='#L33'>33</a>
|
|
99
|
+
<a name='L34'></a><a href='#L34'>34</a>
|
|
100
|
+
<a name='L35'></a><a href='#L35'>35</a>
|
|
101
|
+
<a name='L36'></a><a href='#L36'>36</a>
|
|
102
|
+
<a name='L37'></a><a href='#L37'>37</a>
|
|
103
|
+
<a name='L38'></a><a href='#L38'>38</a>
|
|
104
|
+
<a name='L39'></a><a href='#L39'>39</a>
|
|
105
|
+
<a name='L40'></a><a href='#L40'>40</a>
|
|
106
|
+
<a name='L41'></a><a href='#L41'>41</a>
|
|
107
|
+
<a name='L42'></a><a href='#L42'>42</a>
|
|
108
|
+
<a name='L43'></a><a href='#L43'>43</a>
|
|
109
|
+
<a name='L44'></a><a href='#L44'>44</a>
|
|
110
|
+
<a name='L45'></a><a href='#L45'>45</a>
|
|
111
|
+
<a name='L46'></a><a href='#L46'>46</a>
|
|
112
|
+
<a name='L47'></a><a href='#L47'>47</a>
|
|
113
|
+
<a name='L48'></a><a href='#L48'>48</a>
|
|
114
|
+
<a name='L49'></a><a href='#L49'>49</a>
|
|
115
|
+
<a name='L50'></a><a href='#L50'>50</a>
|
|
116
|
+
<a name='L51'></a><a href='#L51'>51</a>
|
|
117
|
+
<a name='L52'></a><a href='#L52'>52</a>
|
|
118
|
+
<a name='L53'></a><a href='#L53'>53</a>
|
|
119
|
+
<a name='L54'></a><a href='#L54'>54</a>
|
|
120
|
+
<a name='L55'></a><a href='#L55'>55</a>
|
|
121
|
+
<a name='L56'></a><a href='#L56'>56</a>
|
|
122
|
+
<a name='L57'></a><a href='#L57'>57</a>
|
|
123
|
+
<a name='L58'></a><a href='#L58'>58</a>
|
|
124
|
+
<a name='L59'></a><a href='#L59'>59</a>
|
|
125
|
+
<a name='L60'></a><a href='#L60'>60</a>
|
|
126
|
+
<a name='L61'></a><a href='#L61'>61</a>
|
|
127
|
+
<a name='L62'></a><a href='#L62'>62</a>
|
|
128
|
+
<a name='L63'></a><a href='#L63'>63</a>
|
|
129
|
+
<a name='L64'></a><a href='#L64'>64</a>
|
|
130
|
+
<a name='L65'></a><a href='#L65'>65</a>
|
|
131
|
+
<a name='L66'></a><a href='#L66'>66</a>
|
|
132
|
+
<a name='L67'></a><a href='#L67'>67</a>
|
|
133
|
+
<a name='L68'></a><a href='#L68'>68</a>
|
|
134
|
+
<a name='L69'></a><a href='#L69'>69</a>
|
|
135
|
+
<a name='L70'></a><a href='#L70'>70</a>
|
|
136
|
+
<a name='L71'></a><a href='#L71'>71</a>
|
|
137
|
+
<a name='L72'></a><a href='#L72'>72</a>
|
|
138
|
+
<a name='L73'></a><a href='#L73'>73</a>
|
|
139
|
+
<a name='L74'></a><a href='#L74'>74</a>
|
|
140
|
+
<a name='L75'></a><a href='#L75'>75</a>
|
|
141
|
+
<a name='L76'></a><a href='#L76'>76</a>
|
|
142
|
+
<a name='L77'></a><a href='#L77'>77</a>
|
|
143
|
+
<a name='L78'></a><a href='#L78'>78</a>
|
|
144
|
+
<a name='L79'></a><a href='#L79'>79</a>
|
|
145
|
+
<a name='L80'></a><a href='#L80'>80</a>
|
|
146
|
+
<a name='L81'></a><a href='#L81'>81</a>
|
|
147
|
+
<a name='L82'></a><a href='#L82'>82</a>
|
|
148
|
+
<a name='L83'></a><a href='#L83'>83</a>
|
|
149
|
+
<a name='L84'></a><a href='#L84'>84</a>
|
|
150
|
+
<a name='L85'></a><a href='#L85'>85</a>
|
|
151
|
+
<a name='L86'></a><a href='#L86'>86</a>
|
|
152
|
+
<a name='L87'></a><a href='#L87'>87</a>
|
|
153
|
+
<a name='L88'></a><a href='#L88'>88</a>
|
|
154
|
+
<a name='L89'></a><a href='#L89'>89</a>
|
|
155
|
+
<a name='L90'></a><a href='#L90'>90</a>
|
|
156
|
+
<a name='L91'></a><a href='#L91'>91</a>
|
|
157
|
+
<a name='L92'></a><a href='#L92'>92</a>
|
|
158
|
+
<a name='L93'></a><a href='#L93'>93</a>
|
|
159
|
+
<a name='L94'></a><a href='#L94'>94</a>
|
|
160
|
+
<a name='L95'></a><a href='#L95'>95</a>
|
|
161
|
+
<a name='L96'></a><a href='#L96'>96</a>
|
|
162
|
+
<a name='L97'></a><a href='#L97'>97</a>
|
|
163
|
+
<a name='L98'></a><a href='#L98'>98</a>
|
|
164
|
+
<a name='L99'></a><a href='#L99'>99</a>
|
|
165
|
+
<a name='L100'></a><a href='#L100'>100</a>
|
|
166
|
+
<a name='L101'></a><a href='#L101'>101</a>
|
|
167
|
+
<a name='L102'></a><a href='#L102'>102</a>
|
|
168
|
+
<a name='L103'></a><a href='#L103'>103</a>
|
|
169
|
+
<a name='L104'></a><a href='#L104'>104</a>
|
|
170
|
+
<a name='L105'></a><a href='#L105'>105</a>
|
|
171
|
+
<a name='L106'></a><a href='#L106'>106</a>
|
|
172
|
+
<a name='L107'></a><a href='#L107'>107</a>
|
|
173
|
+
<a name='L108'></a><a href='#L108'>108</a>
|
|
174
|
+
<a name='L109'></a><a href='#L109'>109</a>
|
|
175
|
+
<a name='L110'></a><a href='#L110'>110</a>
|
|
176
|
+
<a name='L111'></a><a href='#L111'>111</a>
|
|
177
|
+
<a name='L112'></a><a href='#L112'>112</a>
|
|
178
|
+
<a name='L113'></a><a href='#L113'>113</a>
|
|
179
|
+
<a name='L114'></a><a href='#L114'>114</a>
|
|
180
|
+
<a name='L115'></a><a href='#L115'>115</a>
|
|
181
|
+
<a name='L116'></a><a href='#L116'>116</a>
|
|
182
|
+
<a name='L117'></a><a href='#L117'>117</a>
|
|
183
|
+
<a name='L118'></a><a href='#L118'>118</a>
|
|
184
|
+
<a name='L119'></a><a href='#L119'>119</a>
|
|
185
|
+
<a name='L120'></a><a href='#L120'>120</a>
|
|
186
|
+
<a name='L121'></a><a href='#L121'>121</a>
|
|
187
|
+
<a name='L122'></a><a href='#L122'>122</a>
|
|
188
|
+
<a name='L123'></a><a href='#L123'>123</a>
|
|
189
|
+
<a name='L124'></a><a href='#L124'>124</a>
|
|
190
|
+
<a name='L125'></a><a href='#L125'>125</a>
|
|
191
|
+
<a name='L126'></a><a href='#L126'>126</a>
|
|
192
|
+
<a name='L127'></a><a href='#L127'>127</a>
|
|
193
|
+
<a name='L128'></a><a href='#L128'>128</a>
|
|
194
|
+
<a name='L129'></a><a href='#L129'>129</a>
|
|
195
|
+
<a name='L130'></a><a href='#L130'>130</a>
|
|
196
|
+
<a name='L131'></a><a href='#L131'>131</a>
|
|
197
|
+
<a name='L132'></a><a href='#L132'>132</a>
|
|
198
|
+
<a name='L133'></a><a href='#L133'>133</a>
|
|
199
|
+
<a name='L134'></a><a href='#L134'>134</a>
|
|
200
|
+
<a name='L135'></a><a href='#L135'>135</a>
|
|
201
|
+
<a name='L136'></a><a href='#L136'>136</a>
|
|
202
|
+
<a name='L137'></a><a href='#L137'>137</a>
|
|
203
|
+
<a name='L138'></a><a href='#L138'>138</a>
|
|
204
|
+
<a name='L139'></a><a href='#L139'>139</a>
|
|
205
|
+
<a name='L140'></a><a href='#L140'>140</a>
|
|
206
|
+
<a name='L141'></a><a href='#L141'>141</a>
|
|
207
|
+
<a name='L142'></a><a href='#L142'>142</a>
|
|
208
|
+
<a name='L143'></a><a href='#L143'>143</a>
|
|
209
|
+
<a name='L144'></a><a href='#L144'>144</a>
|
|
210
|
+
<a name='L145'></a><a href='#L145'>145</a>
|
|
211
|
+
<a name='L146'></a><a href='#L146'>146</a>
|
|
212
|
+
<a name='L147'></a><a href='#L147'>147</a>
|
|
213
|
+
<a name='L148'></a><a href='#L148'>148</a>
|
|
214
|
+
<a name='L149'></a><a href='#L149'>149</a>
|
|
215
|
+
<a name='L150'></a><a href='#L150'>150</a>
|
|
216
|
+
<a name='L151'></a><a href='#L151'>151</a>
|
|
217
|
+
<a name='L152'></a><a href='#L152'>152</a>
|
|
218
|
+
<a name='L153'></a><a href='#L153'>153</a>
|
|
219
|
+
<a name='L154'></a><a href='#L154'>154</a>
|
|
220
|
+
<a name='L155'></a><a href='#L155'>155</a>
|
|
221
|
+
<a name='L156'></a><a href='#L156'>156</a>
|
|
222
|
+
<a name='L157'></a><a href='#L157'>157</a>
|
|
223
|
+
<a name='L158'></a><a href='#L158'>158</a>
|
|
224
|
+
<a name='L159'></a><a href='#L159'>159</a>
|
|
225
|
+
<a name='L160'></a><a href='#L160'>160</a>
|
|
226
|
+
<a name='L161'></a><a href='#L161'>161</a>
|
|
227
|
+
<a name='L162'></a><a href='#L162'>162</a>
|
|
228
|
+
<a name='L163'></a><a href='#L163'>163</a>
|
|
229
|
+
<a name='L164'></a><a href='#L164'>164</a>
|
|
230
|
+
<a name='L165'></a><a href='#L165'>165</a>
|
|
231
|
+
<a name='L166'></a><a href='#L166'>166</a>
|
|
232
|
+
<a name='L167'></a><a href='#L167'>167</a>
|
|
233
|
+
<a name='L168'></a><a href='#L168'>168</a>
|
|
234
|
+
<a name='L169'></a><a href='#L169'>169</a>
|
|
235
|
+
<a name='L170'></a><a href='#L170'>170</a>
|
|
236
|
+
<a name='L171'></a><a href='#L171'>171</a>
|
|
237
|
+
<a name='L172'></a><a href='#L172'>172</a>
|
|
238
|
+
<a name='L173'></a><a href='#L173'>173</a>
|
|
239
|
+
<a name='L174'></a><a href='#L174'>174</a>
|
|
240
|
+
<a name='L175'></a><a href='#L175'>175</a>
|
|
241
|
+
<a name='L176'></a><a href='#L176'>176</a>
|
|
242
|
+
<a name='L177'></a><a href='#L177'>177</a>
|
|
243
|
+
<a name='L178'></a><a href='#L178'>178</a>
|
|
244
|
+
<a name='L179'></a><a href='#L179'>179</a>
|
|
245
|
+
<a name='L180'></a><a href='#L180'>180</a>
|
|
246
|
+
<a name='L181'></a><a href='#L181'>181</a>
|
|
247
|
+
<a name='L182'></a><a href='#L182'>182</a>
|
|
248
|
+
<a name='L183'></a><a href='#L183'>183</a>
|
|
249
|
+
<a name='L184'></a><a href='#L184'>184</a>
|
|
250
|
+
<a name='L185'></a><a href='#L185'>185</a>
|
|
251
|
+
<a name='L186'></a><a href='#L186'>186</a>
|
|
252
|
+
<a name='L187'></a><a href='#L187'>187</a>
|
|
253
|
+
<a name='L188'></a><a href='#L188'>188</a>
|
|
254
|
+
<a name='L189'></a><a href='#L189'>189</a>
|
|
255
|
+
<a name='L190'></a><a href='#L190'>190</a>
|
|
256
|
+
<a name='L191'></a><a href='#L191'>191</a>
|
|
257
|
+
<a name='L192'></a><a href='#L192'>192</a>
|
|
258
|
+
<a name='L193'></a><a href='#L193'>193</a>
|
|
259
|
+
<a name='L194'></a><a href='#L194'>194</a>
|
|
260
|
+
<a name='L195'></a><a href='#L195'>195</a>
|
|
261
|
+
<a name='L196'></a><a href='#L196'>196</a>
|
|
262
|
+
<a name='L197'></a><a href='#L197'>197</a>
|
|
263
|
+
<a name='L198'></a><a href='#L198'>198</a>
|
|
264
|
+
<a name='L199'></a><a href='#L199'>199</a>
|
|
265
|
+
<a name='L200'></a><a href='#L200'>200</a>
|
|
266
|
+
<a name='L201'></a><a href='#L201'>201</a>
|
|
267
|
+
<a name='L202'></a><a href='#L202'>202</a>
|
|
268
|
+
<a name='L203'></a><a href='#L203'>203</a>
|
|
269
|
+
<a name='L204'></a><a href='#L204'>204</a>
|
|
270
|
+
<a name='L205'></a><a href='#L205'>205</a>
|
|
271
|
+
<a name='L206'></a><a href='#L206'>206</a>
|
|
272
|
+
<a name='L207'></a><a href='#L207'>207</a>
|
|
273
|
+
<a name='L208'></a><a href='#L208'>208</a>
|
|
274
|
+
<a name='L209'></a><a href='#L209'>209</a>
|
|
275
|
+
<a name='L210'></a><a href='#L210'>210</a>
|
|
276
|
+
<a name='L211'></a><a href='#L211'>211</a>
|
|
277
|
+
<a name='L212'></a><a href='#L212'>212</a>
|
|
278
|
+
<a name='L213'></a><a href='#L213'>213</a>
|
|
279
|
+
<a name='L214'></a><a href='#L214'>214</a>
|
|
280
|
+
<a name='L215'></a><a href='#L215'>215</a>
|
|
281
|
+
<a name='L216'></a><a href='#L216'>216</a>
|
|
282
|
+
<a name='L217'></a><a href='#L217'>217</a>
|
|
283
|
+
<a name='L218'></a><a href='#L218'>218</a>
|
|
284
|
+
<a name='L219'></a><a href='#L219'>219</a>
|
|
285
|
+
<a name='L220'></a><a href='#L220'>220</a>
|
|
286
|
+
<a name='L221'></a><a href='#L221'>221</a>
|
|
287
|
+
<a name='L222'></a><a href='#L222'>222</a>
|
|
288
|
+
<a name='L223'></a><a href='#L223'>223</a>
|
|
289
|
+
<a name='L224'></a><a href='#L224'>224</a>
|
|
290
|
+
<a name='L225'></a><a href='#L225'>225</a>
|
|
291
|
+
<a name='L226'></a><a href='#L226'>226</a>
|
|
292
|
+
<a name='L227'></a><a href='#L227'>227</a>
|
|
293
|
+
<a name='L228'></a><a href='#L228'>228</a>
|
|
294
|
+
<a name='L229'></a><a href='#L229'>229</a>
|
|
295
|
+
<a name='L230'></a><a href='#L230'>230</a>
|
|
296
|
+
<a name='L231'></a><a href='#L231'>231</a>
|
|
297
|
+
<a name='L232'></a><a href='#L232'>232</a>
|
|
298
|
+
<a name='L233'></a><a href='#L233'>233</a>
|
|
299
|
+
<a name='L234'></a><a href='#L234'>234</a>
|
|
300
|
+
<a name='L235'></a><a href='#L235'>235</a>
|
|
301
|
+
<a name='L236'></a><a href='#L236'>236</a>
|
|
302
|
+
<a name='L237'></a><a href='#L237'>237</a>
|
|
303
|
+
<a name='L238'></a><a href='#L238'>238</a>
|
|
304
|
+
<a name='L239'></a><a href='#L239'>239</a>
|
|
305
|
+
<a name='L240'></a><a href='#L240'>240</a>
|
|
306
|
+
<a name='L241'></a><a href='#L241'>241</a>
|
|
307
|
+
<a name='L242'></a><a href='#L242'>242</a>
|
|
308
|
+
<a name='L243'></a><a href='#L243'>243</a>
|
|
309
|
+
<a name='L244'></a><a href='#L244'>244</a>
|
|
310
|
+
<a name='L245'></a><a href='#L245'>245</a>
|
|
311
|
+
<a name='L246'></a><a href='#L246'>246</a>
|
|
312
|
+
<a name='L247'></a><a href='#L247'>247</a>
|
|
313
|
+
<a name='L248'></a><a href='#L248'>248</a>
|
|
314
|
+
<a name='L249'></a><a href='#L249'>249</a>
|
|
315
|
+
<a name='L250'></a><a href='#L250'>250</a>
|
|
316
|
+
<a name='L251'></a><a href='#L251'>251</a>
|
|
317
|
+
<a name='L252'></a><a href='#L252'>252</a>
|
|
318
|
+
<a name='L253'></a><a href='#L253'>253</a>
|
|
319
|
+
<a name='L254'></a><a href='#L254'>254</a>
|
|
320
|
+
<a name='L255'></a><a href='#L255'>255</a>
|
|
321
|
+
<a name='L256'></a><a href='#L256'>256</a>
|
|
322
|
+
<a name='L257'></a><a href='#L257'>257</a>
|
|
323
|
+
<a name='L258'></a><a href='#L258'>258</a>
|
|
324
|
+
<a name='L259'></a><a href='#L259'>259</a>
|
|
325
|
+
<a name='L260'></a><a href='#L260'>260</a>
|
|
326
|
+
<a name='L261'></a><a href='#L261'>261</a>
|
|
327
|
+
<a name='L262'></a><a href='#L262'>262</a>
|
|
328
|
+
<a name='L263'></a><a href='#L263'>263</a>
|
|
329
|
+
<a name='L264'></a><a href='#L264'>264</a>
|
|
330
|
+
<a name='L265'></a><a href='#L265'>265</a>
|
|
331
|
+
<a name='L266'></a><a href='#L266'>266</a>
|
|
332
|
+
<a name='L267'></a><a href='#L267'>267</a>
|
|
333
|
+
<a name='L268'></a><a href='#L268'>268</a>
|
|
334
|
+
<a name='L269'></a><a href='#L269'>269</a>
|
|
335
|
+
<a name='L270'></a><a href='#L270'>270</a>
|
|
336
|
+
<a name='L271'></a><a href='#L271'>271</a>
|
|
337
|
+
<a name='L272'></a><a href='#L272'>272</a>
|
|
338
|
+
<a name='L273'></a><a href='#L273'>273</a>
|
|
339
|
+
<a name='L274'></a><a href='#L274'>274</a>
|
|
340
|
+
<a name='L275'></a><a href='#L275'>275</a>
|
|
341
|
+
<a name='L276'></a><a href='#L276'>276</a>
|
|
342
|
+
<a name='L277'></a><a href='#L277'>277</a>
|
|
343
|
+
<a name='L278'></a><a href='#L278'>278</a>
|
|
344
|
+
<a name='L279'></a><a href='#L279'>279</a>
|
|
345
|
+
<a name='L280'></a><a href='#L280'>280</a>
|
|
346
|
+
<a name='L281'></a><a href='#L281'>281</a>
|
|
347
|
+
<a name='L282'></a><a href='#L282'>282</a>
|
|
348
|
+
<a name='L283'></a><a href='#L283'>283</a>
|
|
349
|
+
<a name='L284'></a><a href='#L284'>284</a>
|
|
350
|
+
<a name='L285'></a><a href='#L285'>285</a>
|
|
351
|
+
<a name='L286'></a><a href='#L286'>286</a>
|
|
352
|
+
<a name='L287'></a><a href='#L287'>287</a>
|
|
353
|
+
<a name='L288'></a><a href='#L288'>288</a>
|
|
354
|
+
<a name='L289'></a><a href='#L289'>289</a>
|
|
355
|
+
<a name='L290'></a><a href='#L290'>290</a>
|
|
356
|
+
<a name='L291'></a><a href='#L291'>291</a>
|
|
357
|
+
<a name='L292'></a><a href='#L292'>292</a>
|
|
358
|
+
<a name='L293'></a><a href='#L293'>293</a>
|
|
359
|
+
<a name='L294'></a><a href='#L294'>294</a>
|
|
360
|
+
<a name='L295'></a><a href='#L295'>295</a>
|
|
361
|
+
<a name='L296'></a><a href='#L296'>296</a>
|
|
362
|
+
<a name='L297'></a><a href='#L297'>297</a>
|
|
363
|
+
<a name='L298'></a><a href='#L298'>298</a>
|
|
364
|
+
<a name='L299'></a><a href='#L299'>299</a>
|
|
365
|
+
<a name='L300'></a><a href='#L300'>300</a>
|
|
366
|
+
<a name='L301'></a><a href='#L301'>301</a>
|
|
367
|
+
<a name='L302'></a><a href='#L302'>302</a>
|
|
368
|
+
<a name='L303'></a><a href='#L303'>303</a>
|
|
369
|
+
<a name='L304'></a><a href='#L304'>304</a>
|
|
370
|
+
<a name='L305'></a><a href='#L305'>305</a>
|
|
371
|
+
<a name='L306'></a><a href='#L306'>306</a>
|
|
372
|
+
<a name='L307'></a><a href='#L307'>307</a>
|
|
373
|
+
<a name='L308'></a><a href='#L308'>308</a>
|
|
374
|
+
<a name='L309'></a><a href='#L309'>309</a>
|
|
375
|
+
<a name='L310'></a><a href='#L310'>310</a>
|
|
376
|
+
<a name='L311'></a><a href='#L311'>311</a>
|
|
377
|
+
<a name='L312'></a><a href='#L312'>312</a>
|
|
378
|
+
<a name='L313'></a><a href='#L313'>313</a>
|
|
379
|
+
<a name='L314'></a><a href='#L314'>314</a>
|
|
380
|
+
<a name='L315'></a><a href='#L315'>315</a>
|
|
381
|
+
<a name='L316'></a><a href='#L316'>316</a>
|
|
382
|
+
<a name='L317'></a><a href='#L317'>317</a>
|
|
383
|
+
<a name='L318'></a><a href='#L318'>318</a>
|
|
384
|
+
<a name='L319'></a><a href='#L319'>319</a>
|
|
385
|
+
<a name='L320'></a><a href='#L320'>320</a>
|
|
386
|
+
<a name='L321'></a><a href='#L321'>321</a>
|
|
387
|
+
<a name='L322'></a><a href='#L322'>322</a>
|
|
388
|
+
<a name='L323'></a><a href='#L323'>323</a>
|
|
389
|
+
<a name='L324'></a><a href='#L324'>324</a>
|
|
390
|
+
<a name='L325'></a><a href='#L325'>325</a>
|
|
391
|
+
<a name='L326'></a><a href='#L326'>326</a>
|
|
392
|
+
<a name='L327'></a><a href='#L327'>327</a>
|
|
393
|
+
<a name='L328'></a><a href='#L328'>328</a>
|
|
394
|
+
<a name='L329'></a><a href='#L329'>329</a>
|
|
395
|
+
<a name='L330'></a><a href='#L330'>330</a>
|
|
396
|
+
<a name='L331'></a><a href='#L331'>331</a>
|
|
397
|
+
<a name='L332'></a><a href='#L332'>332</a>
|
|
398
|
+
<a name='L333'></a><a href='#L333'>333</a>
|
|
399
|
+
<a name='L334'></a><a href='#L334'>334</a>
|
|
400
|
+
<a name='L335'></a><a href='#L335'>335</a>
|
|
401
|
+
<a name='L336'></a><a href='#L336'>336</a>
|
|
402
|
+
<a name='L337'></a><a href='#L337'>337</a>
|
|
403
|
+
<a name='L338'></a><a href='#L338'>338</a>
|
|
404
|
+
<a name='L339'></a><a href='#L339'>339</a>
|
|
405
|
+
<a name='L340'></a><a href='#L340'>340</a>
|
|
406
|
+
<a name='L341'></a><a href='#L341'>341</a>
|
|
407
|
+
<a name='L342'></a><a href='#L342'>342</a>
|
|
408
|
+
<a name='L343'></a><a href='#L343'>343</a>
|
|
409
|
+
<a name='L344'></a><a href='#L344'>344</a>
|
|
410
|
+
<a name='L345'></a><a href='#L345'>345</a>
|
|
411
|
+
<a name='L346'></a><a href='#L346'>346</a>
|
|
412
|
+
<a name='L347'></a><a href='#L347'>347</a>
|
|
413
|
+
<a name='L348'></a><a href='#L348'>348</a>
|
|
414
|
+
<a name='L349'></a><a href='#L349'>349</a>
|
|
415
|
+
<a name='L350'></a><a href='#L350'>350</a>
|
|
416
|
+
<a name='L351'></a><a href='#L351'>351</a>
|
|
417
|
+
<a name='L352'></a><a href='#L352'>352</a>
|
|
418
|
+
<a name='L353'></a><a href='#L353'>353</a>
|
|
419
|
+
<a name='L354'></a><a href='#L354'>354</a>
|
|
420
|
+
<a name='L355'></a><a href='#L355'>355</a>
|
|
421
|
+
<a name='L356'></a><a href='#L356'>356</a>
|
|
422
|
+
<a name='L357'></a><a href='#L357'>357</a>
|
|
423
|
+
<a name='L358'></a><a href='#L358'>358</a>
|
|
424
|
+
<a name='L359'></a><a href='#L359'>359</a>
|
|
425
|
+
<a name='L360'></a><a href='#L360'>360</a>
|
|
426
|
+
<a name='L361'></a><a href='#L361'>361</a>
|
|
427
|
+
<a name='L362'></a><a href='#L362'>362</a>
|
|
428
|
+
<a name='L363'></a><a href='#L363'>363</a>
|
|
429
|
+
<a name='L364'></a><a href='#L364'>364</a>
|
|
430
|
+
<a name='L365'></a><a href='#L365'>365</a>
|
|
431
|
+
<a name='L366'></a><a href='#L366'>366</a>
|
|
432
|
+
<a name='L367'></a><a href='#L367'>367</a>
|
|
433
|
+
<a name='L368'></a><a href='#L368'>368</a>
|
|
434
|
+
<a name='L369'></a><a href='#L369'>369</a>
|
|
435
|
+
<a name='L370'></a><a href='#L370'>370</a>
|
|
436
|
+
<a name='L371'></a><a href='#L371'>371</a>
|
|
437
|
+
<a name='L372'></a><a href='#L372'>372</a>
|
|
438
|
+
<a name='L373'></a><a href='#L373'>373</a>
|
|
439
|
+
<a name='L374'></a><a href='#L374'>374</a>
|
|
440
|
+
<a name='L375'></a><a href='#L375'>375</a>
|
|
441
|
+
<a name='L376'></a><a href='#L376'>376</a>
|
|
442
|
+
<a name='L377'></a><a href='#L377'>377</a>
|
|
443
|
+
<a name='L378'></a><a href='#L378'>378</a>
|
|
444
|
+
<a name='L379'></a><a href='#L379'>379</a>
|
|
445
|
+
<a name='L380'></a><a href='#L380'>380</a>
|
|
446
|
+
<a name='L381'></a><a href='#L381'>381</a>
|
|
447
|
+
<a name='L382'></a><a href='#L382'>382</a>
|
|
448
|
+
<a name='L383'></a><a href='#L383'>383</a>
|
|
449
|
+
<a name='L384'></a><a href='#L384'>384</a>
|
|
450
|
+
<a name='L385'></a><a href='#L385'>385</a>
|
|
451
|
+
<a name='L386'></a><a href='#L386'>386</a>
|
|
452
|
+
<a name='L387'></a><a href='#L387'>387</a>
|
|
453
|
+
<a name='L388'></a><a href='#L388'>388</a>
|
|
454
|
+
<a name='L389'></a><a href='#L389'>389</a>
|
|
455
|
+
<a name='L390'></a><a href='#L390'>390</a>
|
|
456
|
+
<a name='L391'></a><a href='#L391'>391</a>
|
|
457
|
+
<a name='L392'></a><a href='#L392'>392</a>
|
|
458
|
+
<a name='L393'></a><a href='#L393'>393</a>
|
|
459
|
+
<a name='L394'></a><a href='#L394'>394</a>
|
|
460
|
+
<a name='L395'></a><a href='#L395'>395</a>
|
|
461
|
+
<a name='L396'></a><a href='#L396'>396</a>
|
|
462
|
+
<a name='L397'></a><a href='#L397'>397</a>
|
|
463
|
+
<a name='L398'></a><a href='#L398'>398</a>
|
|
464
|
+
<a name='L399'></a><a href='#L399'>399</a>
|
|
465
|
+
<a name='L400'></a><a href='#L400'>400</a>
|
|
466
|
+
<a name='L401'></a><a href='#L401'>401</a>
|
|
467
|
+
<a name='L402'></a><a href='#L402'>402</a>
|
|
468
|
+
<a name='L403'></a><a href='#L403'>403</a>
|
|
469
|
+
<a name='L404'></a><a href='#L404'>404</a>
|
|
470
|
+
<a name='L405'></a><a href='#L405'>405</a>
|
|
471
|
+
<a name='L406'></a><a href='#L406'>406</a>
|
|
472
|
+
<a name='L407'></a><a href='#L407'>407</a>
|
|
473
|
+
<a name='L408'></a><a href='#L408'>408</a>
|
|
474
|
+
<a name='L409'></a><a href='#L409'>409</a>
|
|
475
|
+
<a name='L410'></a><a href='#L410'>410</a>
|
|
476
|
+
<a name='L411'></a><a href='#L411'>411</a>
|
|
477
|
+
<a name='L412'></a><a href='#L412'>412</a>
|
|
478
|
+
<a name='L413'></a><a href='#L413'>413</a>
|
|
479
|
+
<a name='L414'></a><a href='#L414'>414</a>
|
|
480
|
+
<a name='L415'></a><a href='#L415'>415</a>
|
|
481
|
+
<a name='L416'></a><a href='#L416'>416</a>
|
|
482
|
+
<a name='L417'></a><a href='#L417'>417</a>
|
|
483
|
+
<a name='L418'></a><a href='#L418'>418</a>
|
|
484
|
+
<a name='L419'></a><a href='#L419'>419</a>
|
|
485
|
+
<a name='L420'></a><a href='#L420'>420</a>
|
|
486
|
+
<a name='L421'></a><a href='#L421'>421</a>
|
|
487
|
+
<a name='L422'></a><a href='#L422'>422</a>
|
|
488
|
+
<a name='L423'></a><a href='#L423'>423</a>
|
|
489
|
+
<a name='L424'></a><a href='#L424'>424</a>
|
|
490
|
+
<a name='L425'></a><a href='#L425'>425</a>
|
|
491
|
+
<a name='L426'></a><a href='#L426'>426</a>
|
|
492
|
+
<a name='L427'></a><a href='#L427'>427</a>
|
|
493
|
+
<a name='L428'></a><a href='#L428'>428</a>
|
|
494
|
+
<a name='L429'></a><a href='#L429'>429</a>
|
|
495
|
+
<a name='L430'></a><a href='#L430'>430</a>
|
|
496
|
+
<a name='L431'></a><a href='#L431'>431</a>
|
|
497
|
+
<a name='L432'></a><a href='#L432'>432</a>
|
|
498
|
+
<a name='L433'></a><a href='#L433'>433</a>
|
|
499
|
+
<a name='L434'></a><a href='#L434'>434</a>
|
|
500
|
+
<a name='L435'></a><a href='#L435'>435</a>
|
|
501
|
+
<a name='L436'></a><a href='#L436'>436</a>
|
|
502
|
+
<a name='L437'></a><a href='#L437'>437</a>
|
|
503
|
+
<a name='L438'></a><a href='#L438'>438</a>
|
|
504
|
+
<a name='L439'></a><a href='#L439'>439</a>
|
|
505
|
+
<a name='L440'></a><a href='#L440'>440</a>
|
|
506
|
+
<a name='L441'></a><a href='#L441'>441</a>
|
|
507
|
+
<a name='L442'></a><a href='#L442'>442</a>
|
|
508
|
+
<a name='L443'></a><a href='#L443'>443</a>
|
|
509
|
+
<a name='L444'></a><a href='#L444'>444</a>
|
|
510
|
+
<a name='L445'></a><a href='#L445'>445</a>
|
|
511
|
+
<a name='L446'></a><a href='#L446'>446</a>
|
|
512
|
+
<a name='L447'></a><a href='#L447'>447</a>
|
|
513
|
+
<a name='L448'></a><a href='#L448'>448</a>
|
|
514
|
+
<a name='L449'></a><a href='#L449'>449</a>
|
|
515
|
+
<a name='L450'></a><a href='#L450'>450</a>
|
|
516
|
+
<a name='L451'></a><a href='#L451'>451</a>
|
|
517
|
+
<a name='L452'></a><a href='#L452'>452</a>
|
|
518
|
+
<a name='L453'></a><a href='#L453'>453</a>
|
|
519
|
+
<a name='L454'></a><a href='#L454'>454</a>
|
|
520
|
+
<a name='L455'></a><a href='#L455'>455</a>
|
|
521
|
+
<a name='L456'></a><a href='#L456'>456</a>
|
|
522
|
+
<a name='L457'></a><a href='#L457'>457</a>
|
|
523
|
+
<a name='L458'></a><a href='#L458'>458</a>
|
|
524
|
+
<a name='L459'></a><a href='#L459'>459</a>
|
|
525
|
+
<a name='L460'></a><a href='#L460'>460</a>
|
|
526
|
+
<a name='L461'></a><a href='#L461'>461</a>
|
|
527
|
+
<a name='L462'></a><a href='#L462'>462</a>
|
|
528
|
+
<a name='L463'></a><a href='#L463'>463</a>
|
|
529
|
+
<a name='L464'></a><a href='#L464'>464</a>
|
|
530
|
+
<a name='L465'></a><a href='#L465'>465</a>
|
|
531
|
+
<a name='L466'></a><a href='#L466'>466</a>
|
|
532
|
+
<a name='L467'></a><a href='#L467'>467</a>
|
|
533
|
+
<a name='L468'></a><a href='#L468'>468</a>
|
|
534
|
+
<a name='L469'></a><a href='#L469'>469</a>
|
|
535
|
+
<a name='L470'></a><a href='#L470'>470</a>
|
|
536
|
+
<a name='L471'></a><a href='#L471'>471</a>
|
|
537
|
+
<a name='L472'></a><a href='#L472'>472</a>
|
|
538
|
+
<a name='L473'></a><a href='#L473'>473</a>
|
|
539
|
+
<a name='L474'></a><a href='#L474'>474</a>
|
|
540
|
+
<a name='L475'></a><a href='#L475'>475</a>
|
|
541
|
+
<a name='L476'></a><a href='#L476'>476</a>
|
|
542
|
+
<a name='L477'></a><a href='#L477'>477</a>
|
|
543
|
+
<a name='L478'></a><a href='#L478'>478</a>
|
|
544
|
+
<a name='L479'></a><a href='#L479'>479</a>
|
|
545
|
+
<a name='L480'></a><a href='#L480'>480</a>
|
|
546
|
+
<a name='L481'></a><a href='#L481'>481</a>
|
|
547
|
+
<a name='L482'></a><a href='#L482'>482</a>
|
|
548
|
+
<a name='L483'></a><a href='#L483'>483</a>
|
|
549
|
+
<a name='L484'></a><a href='#L484'>484</a>
|
|
550
|
+
<a name='L485'></a><a href='#L485'>485</a>
|
|
551
|
+
<a name='L486'></a><a href='#L486'>486</a>
|
|
552
|
+
<a name='L487'></a><a href='#L487'>487</a>
|
|
553
|
+
<a name='L488'></a><a href='#L488'>488</a>
|
|
554
|
+
<a name='L489'></a><a href='#L489'>489</a>
|
|
555
|
+
<a name='L490'></a><a href='#L490'>490</a>
|
|
556
|
+
<a name='L491'></a><a href='#L491'>491</a>
|
|
557
|
+
<a name='L492'></a><a href='#L492'>492</a>
|
|
558
|
+
<a name='L493'></a><a href='#L493'>493</a>
|
|
559
|
+
<a name='L494'></a><a href='#L494'>494</a>
|
|
560
|
+
<a name='L495'></a><a href='#L495'>495</a>
|
|
561
|
+
<a name='L496'></a><a href='#L496'>496</a>
|
|
562
|
+
<a name='L497'></a><a href='#L497'>497</a>
|
|
563
|
+
<a name='L498'></a><a href='#L498'>498</a>
|
|
564
|
+
<a name='L499'></a><a href='#L499'>499</a>
|
|
565
|
+
<a name='L500'></a><a href='#L500'>500</a>
|
|
566
|
+
<a name='L501'></a><a href='#L501'>501</a>
|
|
567
|
+
<a name='L502'></a><a href='#L502'>502</a>
|
|
568
|
+
<a name='L503'></a><a href='#L503'>503</a>
|
|
569
|
+
<a name='L504'></a><a href='#L504'>504</a>
|
|
570
|
+
<a name='L505'></a><a href='#L505'>505</a>
|
|
571
|
+
<a name='L506'></a><a href='#L506'>506</a>
|
|
572
|
+
<a name='L507'></a><a href='#L507'>507</a>
|
|
573
|
+
<a name='L508'></a><a href='#L508'>508</a>
|
|
574
|
+
<a name='L509'></a><a href='#L509'>509</a>
|
|
575
|
+
<a name='L510'></a><a href='#L510'>510</a>
|
|
576
|
+
<a name='L511'></a><a href='#L511'>511</a>
|
|
577
|
+
<a name='L512'></a><a href='#L512'>512</a>
|
|
578
|
+
<a name='L513'></a><a href='#L513'>513</a>
|
|
579
|
+
<a name='L514'></a><a href='#L514'>514</a>
|
|
580
|
+
<a name='L515'></a><a href='#L515'>515</a>
|
|
581
|
+
<a name='L516'></a><a href='#L516'>516</a>
|
|
582
|
+
<a name='L517'></a><a href='#L517'>517</a>
|
|
583
|
+
<a name='L518'></a><a href='#L518'>518</a>
|
|
584
|
+
<a name='L519'></a><a href='#L519'>519</a>
|
|
585
|
+
<a name='L520'></a><a href='#L520'>520</a>
|
|
586
|
+
<a name='L521'></a><a href='#L521'>521</a>
|
|
587
|
+
<a name='L522'></a><a href='#L522'>522</a>
|
|
588
|
+
<a name='L523'></a><a href='#L523'>523</a>
|
|
589
|
+
<a name='L524'></a><a href='#L524'>524</a>
|
|
590
|
+
<a name='L525'></a><a href='#L525'>525</a>
|
|
591
|
+
<a name='L526'></a><a href='#L526'>526</a>
|
|
592
|
+
<a name='L527'></a><a href='#L527'>527</a>
|
|
593
|
+
<a name='L528'></a><a href='#L528'>528</a>
|
|
594
|
+
<a name='L529'></a><a href='#L529'>529</a>
|
|
595
|
+
<a name='L530'></a><a href='#L530'>530</a>
|
|
596
|
+
<a name='L531'></a><a href='#L531'>531</a>
|
|
597
|
+
<a name='L532'></a><a href='#L532'>532</a>
|
|
598
|
+
<a name='L533'></a><a href='#L533'>533</a>
|
|
599
|
+
<a name='L534'></a><a href='#L534'>534</a>
|
|
600
|
+
<a name='L535'></a><a href='#L535'>535</a>
|
|
601
|
+
<a name='L536'></a><a href='#L536'>536</a>
|
|
602
|
+
<a name='L537'></a><a href='#L537'>537</a>
|
|
603
|
+
<a name='L538'></a><a href='#L538'>538</a>
|
|
604
|
+
<a name='L539'></a><a href='#L539'>539</a>
|
|
605
|
+
<a name='L540'></a><a href='#L540'>540</a>
|
|
606
|
+
<a name='L541'></a><a href='#L541'>541</a>
|
|
607
|
+
<a name='L542'></a><a href='#L542'>542</a>
|
|
608
|
+
<a name='L543'></a><a href='#L543'>543</a>
|
|
609
|
+
<a name='L544'></a><a href='#L544'>544</a>
|
|
610
|
+
<a name='L545'></a><a href='#L545'>545</a>
|
|
611
|
+
<a name='L546'></a><a href='#L546'>546</a>
|
|
612
|
+
<a name='L547'></a><a href='#L547'>547</a>
|
|
613
|
+
<a name='L548'></a><a href='#L548'>548</a>
|
|
614
|
+
<a name='L549'></a><a href='#L549'>549</a>
|
|
615
|
+
<a name='L550'></a><a href='#L550'>550</a>
|
|
616
|
+
<a name='L551'></a><a href='#L551'>551</a>
|
|
617
|
+
<a name='L552'></a><a href='#L552'>552</a>
|
|
618
|
+
<a name='L553'></a><a href='#L553'>553</a>
|
|
619
|
+
<a name='L554'></a><a href='#L554'>554</a>
|
|
620
|
+
<a name='L555'></a><a href='#L555'>555</a>
|
|
621
|
+
<a name='L556'></a><a href='#L556'>556</a>
|
|
622
|
+
<a name='L557'></a><a href='#L557'>557</a>
|
|
623
|
+
<a name='L558'></a><a href='#L558'>558</a>
|
|
624
|
+
<a name='L559'></a><a href='#L559'>559</a>
|
|
625
|
+
<a name='L560'></a><a href='#L560'>560</a>
|
|
626
|
+
<a name='L561'></a><a href='#L561'>561</a>
|
|
627
|
+
<a name='L562'></a><a href='#L562'>562</a>
|
|
628
|
+
<a name='L563'></a><a href='#L563'>563</a>
|
|
629
|
+
<a name='L564'></a><a href='#L564'>564</a>
|
|
630
|
+
<a name='L565'></a><a href='#L565'>565</a>
|
|
631
|
+
<a name='L566'></a><a href='#L566'>566</a>
|
|
632
|
+
<a name='L567'></a><a href='#L567'>567</a>
|
|
633
|
+
<a name='L568'></a><a href='#L568'>568</a>
|
|
634
|
+
<a name='L569'></a><a href='#L569'>569</a>
|
|
635
|
+
<a name='L570'></a><a href='#L570'>570</a>
|
|
636
|
+
<a name='L571'></a><a href='#L571'>571</a>
|
|
637
|
+
<a name='L572'></a><a href='#L572'>572</a>
|
|
638
|
+
<a name='L573'></a><a href='#L573'>573</a>
|
|
639
|
+
<a name='L574'></a><a href='#L574'>574</a>
|
|
640
|
+
<a name='L575'></a><a href='#L575'>575</a>
|
|
641
|
+
<a name='L576'></a><a href='#L576'>576</a>
|
|
642
|
+
<a name='L577'></a><a href='#L577'>577</a>
|
|
643
|
+
<a name='L578'></a><a href='#L578'>578</a>
|
|
644
|
+
<a name='L579'></a><a href='#L579'>579</a>
|
|
645
|
+
<a name='L580'></a><a href='#L580'>580</a>
|
|
646
|
+
<a name='L581'></a><a href='#L581'>581</a>
|
|
647
|
+
<a name='L582'></a><a href='#L582'>582</a>
|
|
648
|
+
<a name='L583'></a><a href='#L583'>583</a>
|
|
649
|
+
<a name='L584'></a><a href='#L584'>584</a>
|
|
650
|
+
<a name='L585'></a><a href='#L585'>585</a>
|
|
651
|
+
<a name='L586'></a><a href='#L586'>586</a>
|
|
652
|
+
<a name='L587'></a><a href='#L587'>587</a>
|
|
653
|
+
<a name='L588'></a><a href='#L588'>588</a>
|
|
654
|
+
<a name='L589'></a><a href='#L589'>589</a>
|
|
655
|
+
<a name='L590'></a><a href='#L590'>590</a>
|
|
656
|
+
<a name='L591'></a><a href='#L591'>591</a>
|
|
657
|
+
<a name='L592'></a><a href='#L592'>592</a>
|
|
658
|
+
<a name='L593'></a><a href='#L593'>593</a>
|
|
659
|
+
<a name='L594'></a><a href='#L594'>594</a>
|
|
660
|
+
<a name='L595'></a><a href='#L595'>595</a>
|
|
661
|
+
<a name='L596'></a><a href='#L596'>596</a>
|
|
662
|
+
<a name='L597'></a><a href='#L597'>597</a>
|
|
663
|
+
<a name='L598'></a><a href='#L598'>598</a>
|
|
664
|
+
<a name='L599'></a><a href='#L599'>599</a>
|
|
665
|
+
<a name='L600'></a><a href='#L600'>600</a>
|
|
666
|
+
<a name='L601'></a><a href='#L601'>601</a>
|
|
667
|
+
<a name='L602'></a><a href='#L602'>602</a>
|
|
668
|
+
<a name='L603'></a><a href='#L603'>603</a>
|
|
669
|
+
<a name='L604'></a><a href='#L604'>604</a>
|
|
670
|
+
<a name='L605'></a><a href='#L605'>605</a>
|
|
671
|
+
<a name='L606'></a><a href='#L606'>606</a>
|
|
672
|
+
<a name='L607'></a><a href='#L607'>607</a>
|
|
673
|
+
<a name='L608'></a><a href='#L608'>608</a>
|
|
674
|
+
<a name='L609'></a><a href='#L609'>609</a>
|
|
675
|
+
<a name='L610'></a><a href='#L610'>610</a>
|
|
676
|
+
<a name='L611'></a><a href='#L611'>611</a>
|
|
677
|
+
<a name='L612'></a><a href='#L612'>612</a>
|
|
678
|
+
<a name='L613'></a><a href='#L613'>613</a>
|
|
679
|
+
<a name='L614'></a><a href='#L614'>614</a>
|
|
680
|
+
<a name='L615'></a><a href='#L615'>615</a>
|
|
681
|
+
<a name='L616'></a><a href='#L616'>616</a>
|
|
682
|
+
<a name='L617'></a><a href='#L617'>617</a>
|
|
683
|
+
<a name='L618'></a><a href='#L618'>618</a>
|
|
684
|
+
<a name='L619'></a><a href='#L619'>619</a>
|
|
685
|
+
<a name='L620'></a><a href='#L620'>620</a>
|
|
686
|
+
<a name='L621'></a><a href='#L621'>621</a>
|
|
687
|
+
<a name='L622'></a><a href='#L622'>622</a>
|
|
688
|
+
<a name='L623'></a><a href='#L623'>623</a>
|
|
689
|
+
<a name='L624'></a><a href='#L624'>624</a>
|
|
690
|
+
<a name='L625'></a><a href='#L625'>625</a>
|
|
691
|
+
<a name='L626'></a><a href='#L626'>626</a>
|
|
692
|
+
<a name='L627'></a><a href='#L627'>627</a>
|
|
693
|
+
<a name='L628'></a><a href='#L628'>628</a>
|
|
694
|
+
<a name='L629'></a><a href='#L629'>629</a>
|
|
695
|
+
<a name='L630'></a><a href='#L630'>630</a>
|
|
696
|
+
<a name='L631'></a><a href='#L631'>631</a>
|
|
697
|
+
<a name='L632'></a><a href='#L632'>632</a>
|
|
698
|
+
<a name='L633'></a><a href='#L633'>633</a>
|
|
699
|
+
<a name='L634'></a><a href='#L634'>634</a>
|
|
700
|
+
<a name='L635'></a><a href='#L635'>635</a>
|
|
701
|
+
<a name='L636'></a><a href='#L636'>636</a>
|
|
702
|
+
<a name='L637'></a><a href='#L637'>637</a>
|
|
703
|
+
<a name='L638'></a><a href='#L638'>638</a>
|
|
704
|
+
<a name='L639'></a><a href='#L639'>639</a>
|
|
705
|
+
<a name='L640'></a><a href='#L640'>640</a>
|
|
706
|
+
<a name='L641'></a><a href='#L641'>641</a>
|
|
707
|
+
<a name='L642'></a><a href='#L642'>642</a>
|
|
708
|
+
<a name='L643'></a><a href='#L643'>643</a>
|
|
709
|
+
<a name='L644'></a><a href='#L644'>644</a>
|
|
710
|
+
<a name='L645'></a><a href='#L645'>645</a>
|
|
711
|
+
<a name='L646'></a><a href='#L646'>646</a>
|
|
712
|
+
<a name='L647'></a><a href='#L647'>647</a>
|
|
713
|
+
<a name='L648'></a><a href='#L648'>648</a>
|
|
714
|
+
<a name='L649'></a><a href='#L649'>649</a>
|
|
715
|
+
<a name='L650'></a><a href='#L650'>650</a>
|
|
716
|
+
<a name='L651'></a><a href='#L651'>651</a>
|
|
717
|
+
<a name='L652'></a><a href='#L652'>652</a>
|
|
718
|
+
<a name='L653'></a><a href='#L653'>653</a>
|
|
719
|
+
<a name='L654'></a><a href='#L654'>654</a>
|
|
720
|
+
<a name='L655'></a><a href='#L655'>655</a>
|
|
721
|
+
<a name='L656'></a><a href='#L656'>656</a>
|
|
722
|
+
<a name='L657'></a><a href='#L657'>657</a>
|
|
723
|
+
<a name='L658'></a><a href='#L658'>658</a>
|
|
724
|
+
<a name='L659'></a><a href='#L659'>659</a>
|
|
725
|
+
<a name='L660'></a><a href='#L660'>660</a>
|
|
726
|
+
<a name='L661'></a><a href='#L661'>661</a>
|
|
727
|
+
<a name='L662'></a><a href='#L662'>662</a>
|
|
728
|
+
<a name='L663'></a><a href='#L663'>663</a>
|
|
729
|
+
<a name='L664'></a><a href='#L664'>664</a>
|
|
730
|
+
<a name='L665'></a><a href='#L665'>665</a>
|
|
731
|
+
<a name='L666'></a><a href='#L666'>666</a>
|
|
732
|
+
<a name='L667'></a><a href='#L667'>667</a>
|
|
733
|
+
<a name='L668'></a><a href='#L668'>668</a>
|
|
734
|
+
<a name='L669'></a><a href='#L669'>669</a>
|
|
735
|
+
<a name='L670'></a><a href='#L670'>670</a>
|
|
736
|
+
<a name='L671'></a><a href='#L671'>671</a>
|
|
737
|
+
<a name='L672'></a><a href='#L672'>672</a>
|
|
738
|
+
<a name='L673'></a><a href='#L673'>673</a>
|
|
739
|
+
<a name='L674'></a><a href='#L674'>674</a>
|
|
740
|
+
<a name='L675'></a><a href='#L675'>675</a>
|
|
741
|
+
<a name='L676'></a><a href='#L676'>676</a>
|
|
742
|
+
<a name='L677'></a><a href='#L677'>677</a>
|
|
743
|
+
<a name='L678'></a><a href='#L678'>678</a>
|
|
744
|
+
<a name='L679'></a><a href='#L679'>679</a>
|
|
745
|
+
<a name='L680'></a><a href='#L680'>680</a>
|
|
746
|
+
<a name='L681'></a><a href='#L681'>681</a>
|
|
747
|
+
<a name='L682'></a><a href='#L682'>682</a>
|
|
748
|
+
<a name='L683'></a><a href='#L683'>683</a>
|
|
749
|
+
<a name='L684'></a><a href='#L684'>684</a>
|
|
750
|
+
<a name='L685'></a><a href='#L685'>685</a>
|
|
751
|
+
<a name='L686'></a><a href='#L686'>686</a>
|
|
752
|
+
<a name='L687'></a><a href='#L687'>687</a>
|
|
753
|
+
<a name='L688'></a><a href='#L688'>688</a>
|
|
754
|
+
<a name='L689'></a><a href='#L689'>689</a>
|
|
755
|
+
<a name='L690'></a><a href='#L690'>690</a>
|
|
756
|
+
<a name='L691'></a><a href='#L691'>691</a>
|
|
757
|
+
<a name='L692'></a><a href='#L692'>692</a>
|
|
758
|
+
<a name='L693'></a><a href='#L693'>693</a>
|
|
759
|
+
<a name='L694'></a><a href='#L694'>694</a>
|
|
760
|
+
<a name='L695'></a><a href='#L695'>695</a>
|
|
761
|
+
<a name='L696'></a><a href='#L696'>696</a>
|
|
762
|
+
<a name='L697'></a><a href='#L697'>697</a>
|
|
763
|
+
<a name='L698'></a><a href='#L698'>698</a>
|
|
764
|
+
<a name='L699'></a><a href='#L699'>699</a>
|
|
765
|
+
<a name='L700'></a><a href='#L700'>700</a>
|
|
766
|
+
<a name='L701'></a><a href='#L701'>701</a>
|
|
767
|
+
<a name='L702'></a><a href='#L702'>702</a>
|
|
768
|
+
<a name='L703'></a><a href='#L703'>703</a>
|
|
769
|
+
<a name='L704'></a><a href='#L704'>704</a>
|
|
770
|
+
<a name='L705'></a><a href='#L705'>705</a>
|
|
771
|
+
<a name='L706'></a><a href='#L706'>706</a>
|
|
772
|
+
<a name='L707'></a><a href='#L707'>707</a>
|
|
773
|
+
<a name='L708'></a><a href='#L708'>708</a>
|
|
774
|
+
<a name='L709'></a><a href='#L709'>709</a>
|
|
775
|
+
<a name='L710'></a><a href='#L710'>710</a>
|
|
776
|
+
<a name='L711'></a><a href='#L711'>711</a>
|
|
777
|
+
<a name='L712'></a><a href='#L712'>712</a>
|
|
778
|
+
<a name='L713'></a><a href='#L713'>713</a>
|
|
779
|
+
<a name='L714'></a><a href='#L714'>714</a>
|
|
780
|
+
<a name='L715'></a><a href='#L715'>715</a>
|
|
781
|
+
<a name='L716'></a><a href='#L716'>716</a>
|
|
782
|
+
<a name='L717'></a><a href='#L717'>717</a>
|
|
783
|
+
<a name='L718'></a><a href='#L718'>718</a>
|
|
784
|
+
<a name='L719'></a><a href='#L719'>719</a>
|
|
785
|
+
<a name='L720'></a><a href='#L720'>720</a>
|
|
786
|
+
<a name='L721'></a><a href='#L721'>721</a>
|
|
787
|
+
<a name='L722'></a><a href='#L722'>722</a>
|
|
788
|
+
<a name='L723'></a><a href='#L723'>723</a>
|
|
789
|
+
<a name='L724'></a><a href='#L724'>724</a>
|
|
790
|
+
<a name='L725'></a><a href='#L725'>725</a>
|
|
791
|
+
<a name='L726'></a><a href='#L726'>726</a>
|
|
792
|
+
<a name='L727'></a><a href='#L727'>727</a>
|
|
793
|
+
<a name='L728'></a><a href='#L728'>728</a>
|
|
794
|
+
<a name='L729'></a><a href='#L729'>729</a>
|
|
795
|
+
<a name='L730'></a><a href='#L730'>730</a>
|
|
796
|
+
<a name='L731'></a><a href='#L731'>731</a>
|
|
797
|
+
<a name='L732'></a><a href='#L732'>732</a>
|
|
798
|
+
<a name='L733'></a><a href='#L733'>733</a>
|
|
799
|
+
<a name='L734'></a><a href='#L734'>734</a>
|
|
800
|
+
<a name='L735'></a><a href='#L735'>735</a></td><td class="line-coverage quiet"><span class="cline-any cline-no"> </span>
|
|
801
|
+
<span class="cline-any cline-no"> </span>
|
|
802
|
+
<span class="cline-any cline-no"> </span>
|
|
803
|
+
<span class="cline-any cline-no"> </span>
|
|
804
|
+
<span class="cline-any cline-no"> </span>
|
|
805
|
+
<span class="cline-any cline-no"> </span>
|
|
806
|
+
<span class="cline-any cline-no"> </span>
|
|
807
|
+
<span class="cline-any cline-no"> </span>
|
|
808
|
+
<span class="cline-any cline-no"> </span>
|
|
809
|
+
<span class="cline-any cline-no"> </span>
|
|
810
|
+
<span class="cline-any cline-no"> </span>
|
|
811
|
+
<span class="cline-any cline-no"> </span>
|
|
812
|
+
<span class="cline-any cline-no"> </span>
|
|
813
|
+
<span class="cline-any cline-no"> </span>
|
|
814
|
+
<span class="cline-any cline-no"> </span>
|
|
815
|
+
<span class="cline-any cline-no"> </span>
|
|
816
|
+
<span class="cline-any cline-no"> </span>
|
|
817
|
+
<span class="cline-any cline-no"> </span>
|
|
818
|
+
<span class="cline-any cline-no"> </span>
|
|
819
|
+
<span class="cline-any cline-no"> </span>
|
|
820
|
+
<span class="cline-any cline-no"> </span>
|
|
821
|
+
<span class="cline-any cline-no"> </span>
|
|
822
|
+
<span class="cline-any cline-no"> </span>
|
|
823
|
+
<span class="cline-any cline-no"> </span>
|
|
824
|
+
<span class="cline-any cline-no"> </span>
|
|
825
|
+
<span class="cline-any cline-no"> </span>
|
|
826
|
+
<span class="cline-any cline-no"> </span>
|
|
827
|
+
<span class="cline-any cline-no"> </span>
|
|
828
|
+
<span class="cline-any cline-no"> </span>
|
|
829
|
+
<span class="cline-any cline-no"> </span>
|
|
830
|
+
<span class="cline-any cline-no"> </span>
|
|
831
|
+
<span class="cline-any cline-no"> </span>
|
|
832
|
+
<span class="cline-any cline-no"> </span>
|
|
833
|
+
<span class="cline-any cline-no"> </span>
|
|
834
|
+
<span class="cline-any cline-no"> </span>
|
|
835
|
+
<span class="cline-any cline-no"> </span>
|
|
836
|
+
<span class="cline-any cline-no"> </span>
|
|
837
|
+
<span class="cline-any cline-no"> </span>
|
|
838
|
+
<span class="cline-any cline-no"> </span>
|
|
839
|
+
<span class="cline-any cline-no"> </span>
|
|
840
|
+
<span class="cline-any cline-no"> </span>
|
|
841
|
+
<span class="cline-any cline-no"> </span>
|
|
842
|
+
<span class="cline-any cline-no"> </span>
|
|
843
|
+
<span class="cline-any cline-no"> </span>
|
|
844
|
+
<span class="cline-any cline-no"> </span>
|
|
845
|
+
<span class="cline-any cline-no"> </span>
|
|
846
|
+
<span class="cline-any cline-no"> </span>
|
|
847
|
+
<span class="cline-any cline-no"> </span>
|
|
848
|
+
<span class="cline-any cline-no"> </span>
|
|
849
|
+
<span class="cline-any cline-no"> </span>
|
|
850
|
+
<span class="cline-any cline-no"> </span>
|
|
851
|
+
<span class="cline-any cline-no"> </span>
|
|
852
|
+
<span class="cline-any cline-no"> </span>
|
|
853
|
+
<span class="cline-any cline-no"> </span>
|
|
854
|
+
<span class="cline-any cline-no"> </span>
|
|
855
|
+
<span class="cline-any cline-no"> </span>
|
|
856
|
+
<span class="cline-any cline-no"> </span>
|
|
857
|
+
<span class="cline-any cline-no"> </span>
|
|
858
|
+
<span class="cline-any cline-no"> </span>
|
|
859
|
+
<span class="cline-any cline-no"> </span>
|
|
860
|
+
<span class="cline-any cline-no"> </span>
|
|
861
|
+
<span class="cline-any cline-no"> </span>
|
|
862
|
+
<span class="cline-any cline-no"> </span>
|
|
863
|
+
<span class="cline-any cline-no"> </span>
|
|
864
|
+
<span class="cline-any cline-no"> </span>
|
|
865
|
+
<span class="cline-any cline-no"> </span>
|
|
866
|
+
<span class="cline-any cline-no"> </span>
|
|
867
|
+
<span class="cline-any cline-no"> </span>
|
|
868
|
+
<span class="cline-any cline-no"> </span>
|
|
869
|
+
<span class="cline-any cline-no"> </span>
|
|
870
|
+
<span class="cline-any cline-no"> </span>
|
|
871
|
+
<span class="cline-any cline-no"> </span>
|
|
872
|
+
<span class="cline-any cline-no"> </span>
|
|
873
|
+
<span class="cline-any cline-no"> </span>
|
|
874
|
+
<span class="cline-any cline-no"> </span>
|
|
875
|
+
<span class="cline-any cline-no"> </span>
|
|
876
|
+
<span class="cline-any cline-no"> </span>
|
|
877
|
+
<span class="cline-any cline-no"> </span>
|
|
878
|
+
<span class="cline-any cline-no"> </span>
|
|
879
|
+
<span class="cline-any cline-no"> </span>
|
|
880
|
+
<span class="cline-any cline-no"> </span>
|
|
881
|
+
<span class="cline-any cline-no"> </span>
|
|
882
|
+
<span class="cline-any cline-no"> </span>
|
|
883
|
+
<span class="cline-any cline-no"> </span>
|
|
884
|
+
<span class="cline-any cline-no"> </span>
|
|
885
|
+
<span class="cline-any cline-no"> </span>
|
|
886
|
+
<span class="cline-any cline-no"> </span>
|
|
887
|
+
<span class="cline-any cline-no"> </span>
|
|
888
|
+
<span class="cline-any cline-no"> </span>
|
|
889
|
+
<span class="cline-any cline-no"> </span>
|
|
890
|
+
<span class="cline-any cline-no"> </span>
|
|
891
|
+
<span class="cline-any cline-no"> </span>
|
|
892
|
+
<span class="cline-any cline-no"> </span>
|
|
893
|
+
<span class="cline-any cline-no"> </span>
|
|
894
|
+
<span class="cline-any cline-no"> </span>
|
|
895
|
+
<span class="cline-any cline-no"> </span>
|
|
896
|
+
<span class="cline-any cline-no"> </span>
|
|
897
|
+
<span class="cline-any cline-no"> </span>
|
|
898
|
+
<span class="cline-any cline-no"> </span>
|
|
899
|
+
<span class="cline-any cline-no"> </span>
|
|
900
|
+
<span class="cline-any cline-no"> </span>
|
|
901
|
+
<span class="cline-any cline-no"> </span>
|
|
902
|
+
<span class="cline-any cline-no"> </span>
|
|
903
|
+
<span class="cline-any cline-no"> </span>
|
|
904
|
+
<span class="cline-any cline-no"> </span>
|
|
905
|
+
<span class="cline-any cline-no"> </span>
|
|
906
|
+
<span class="cline-any cline-no"> </span>
|
|
907
|
+
<span class="cline-any cline-no"> </span>
|
|
908
|
+
<span class="cline-any cline-no"> </span>
|
|
909
|
+
<span class="cline-any cline-no"> </span>
|
|
910
|
+
<span class="cline-any cline-no"> </span>
|
|
911
|
+
<span class="cline-any cline-no"> </span>
|
|
912
|
+
<span class="cline-any cline-no"> </span>
|
|
913
|
+
<span class="cline-any cline-no"> </span>
|
|
914
|
+
<span class="cline-any cline-no"> </span>
|
|
915
|
+
<span class="cline-any cline-no"> </span>
|
|
916
|
+
<span class="cline-any cline-no"> </span>
|
|
917
|
+
<span class="cline-any cline-no"> </span>
|
|
918
|
+
<span class="cline-any cline-no"> </span>
|
|
919
|
+
<span class="cline-any cline-no"> </span>
|
|
920
|
+
<span class="cline-any cline-no"> </span>
|
|
921
|
+
<span class="cline-any cline-no"> </span>
|
|
922
|
+
<span class="cline-any cline-no"> </span>
|
|
923
|
+
<span class="cline-any cline-no"> </span>
|
|
924
|
+
<span class="cline-any cline-no"> </span>
|
|
925
|
+
<span class="cline-any cline-no"> </span>
|
|
926
|
+
<span class="cline-any cline-no"> </span>
|
|
927
|
+
<span class="cline-any cline-no"> </span>
|
|
928
|
+
<span class="cline-any cline-no"> </span>
|
|
929
|
+
<span class="cline-any cline-no"> </span>
|
|
930
|
+
<span class="cline-any cline-no"> </span>
|
|
931
|
+
<span class="cline-any cline-no"> </span>
|
|
932
|
+
<span class="cline-any cline-no"> </span>
|
|
933
|
+
<span class="cline-any cline-no"> </span>
|
|
934
|
+
<span class="cline-any cline-no"> </span>
|
|
935
|
+
<span class="cline-any cline-no"> </span>
|
|
936
|
+
<span class="cline-any cline-no"> </span>
|
|
937
|
+
<span class="cline-any cline-no"> </span>
|
|
938
|
+
<span class="cline-any cline-no"> </span>
|
|
939
|
+
<span class="cline-any cline-no"> </span>
|
|
940
|
+
<span class="cline-any cline-no"> </span>
|
|
941
|
+
<span class="cline-any cline-no"> </span>
|
|
942
|
+
<span class="cline-any cline-no"> </span>
|
|
943
|
+
<span class="cline-any cline-no"> </span>
|
|
944
|
+
<span class="cline-any cline-no"> </span>
|
|
945
|
+
<span class="cline-any cline-no"> </span>
|
|
946
|
+
<span class="cline-any cline-no"> </span>
|
|
947
|
+
<span class="cline-any cline-no"> </span>
|
|
948
|
+
<span class="cline-any cline-no"> </span>
|
|
949
|
+
<span class="cline-any cline-no"> </span>
|
|
950
|
+
<span class="cline-any cline-no"> </span>
|
|
951
|
+
<span class="cline-any cline-no"> </span>
|
|
952
|
+
<span class="cline-any cline-no"> </span>
|
|
953
|
+
<span class="cline-any cline-no"> </span>
|
|
954
|
+
<span class="cline-any cline-no"> </span>
|
|
955
|
+
<span class="cline-any cline-no"> </span>
|
|
956
|
+
<span class="cline-any cline-no"> </span>
|
|
957
|
+
<span class="cline-any cline-no"> </span>
|
|
958
|
+
<span class="cline-any cline-no"> </span>
|
|
959
|
+
<span class="cline-any cline-no"> </span>
|
|
960
|
+
<span class="cline-any cline-no"> </span>
|
|
961
|
+
<span class="cline-any cline-no"> </span>
|
|
962
|
+
<span class="cline-any cline-no"> </span>
|
|
963
|
+
<span class="cline-any cline-no"> </span>
|
|
964
|
+
<span class="cline-any cline-no"> </span>
|
|
965
|
+
<span class="cline-any cline-no"> </span>
|
|
966
|
+
<span class="cline-any cline-no"> </span>
|
|
967
|
+
<span class="cline-any cline-no"> </span>
|
|
968
|
+
<span class="cline-any cline-no"> </span>
|
|
969
|
+
<span class="cline-any cline-no"> </span>
|
|
970
|
+
<span class="cline-any cline-no"> </span>
|
|
971
|
+
<span class="cline-any cline-no"> </span>
|
|
972
|
+
<span class="cline-any cline-no"> </span>
|
|
973
|
+
<span class="cline-any cline-no"> </span>
|
|
974
|
+
<span class="cline-any cline-no"> </span>
|
|
975
|
+
<span class="cline-any cline-no"> </span>
|
|
976
|
+
<span class="cline-any cline-no"> </span>
|
|
977
|
+
<span class="cline-any cline-no"> </span>
|
|
978
|
+
<span class="cline-any cline-no"> </span>
|
|
979
|
+
<span class="cline-any cline-no"> </span>
|
|
980
|
+
<span class="cline-any cline-no"> </span>
|
|
981
|
+
<span class="cline-any cline-no"> </span>
|
|
982
|
+
<span class="cline-any cline-no"> </span>
|
|
983
|
+
<span class="cline-any cline-no"> </span>
|
|
984
|
+
<span class="cline-any cline-no"> </span>
|
|
985
|
+
<span class="cline-any cline-no"> </span>
|
|
986
|
+
<span class="cline-any cline-no"> </span>
|
|
987
|
+
<span class="cline-any cline-no"> </span>
|
|
988
|
+
<span class="cline-any cline-no"> </span>
|
|
989
|
+
<span class="cline-any cline-no"> </span>
|
|
990
|
+
<span class="cline-any cline-no"> </span>
|
|
991
|
+
<span class="cline-any cline-no"> </span>
|
|
992
|
+
<span class="cline-any cline-no"> </span>
|
|
993
|
+
<span class="cline-any cline-no"> </span>
|
|
994
|
+
<span class="cline-any cline-no"> </span>
|
|
995
|
+
<span class="cline-any cline-no"> </span>
|
|
996
|
+
<span class="cline-any cline-no"> </span>
|
|
997
|
+
<span class="cline-any cline-no"> </span>
|
|
998
|
+
<span class="cline-any cline-no"> </span>
|
|
999
|
+
<span class="cline-any cline-no"> </span>
|
|
1000
|
+
<span class="cline-any cline-no"> </span>
|
|
1001
|
+
<span class="cline-any cline-no"> </span>
|
|
1002
|
+
<span class="cline-any cline-no"> </span>
|
|
1003
|
+
<span class="cline-any cline-no"> </span>
|
|
1004
|
+
<span class="cline-any cline-no"> </span>
|
|
1005
|
+
<span class="cline-any cline-no"> </span>
|
|
1006
|
+
<span class="cline-any cline-no"> </span>
|
|
1007
|
+
<span class="cline-any cline-no"> </span>
|
|
1008
|
+
<span class="cline-any cline-no"> </span>
|
|
1009
|
+
<span class="cline-any cline-no"> </span>
|
|
1010
|
+
<span class="cline-any cline-no"> </span>
|
|
1011
|
+
<span class="cline-any cline-no"> </span>
|
|
1012
|
+
<span class="cline-any cline-no"> </span>
|
|
1013
|
+
<span class="cline-any cline-no"> </span>
|
|
1014
|
+
<span class="cline-any cline-no"> </span>
|
|
1015
|
+
<span class="cline-any cline-no"> </span>
|
|
1016
|
+
<span class="cline-any cline-no"> </span>
|
|
1017
|
+
<span class="cline-any cline-no"> </span>
|
|
1018
|
+
<span class="cline-any cline-no"> </span>
|
|
1019
|
+
<span class="cline-any cline-no"> </span>
|
|
1020
|
+
<span class="cline-any cline-no"> </span>
|
|
1021
|
+
<span class="cline-any cline-no"> </span>
|
|
1022
|
+
<span class="cline-any cline-no"> </span>
|
|
1023
|
+
<span class="cline-any cline-no"> </span>
|
|
1024
|
+
<span class="cline-any cline-no"> </span>
|
|
1025
|
+
<span class="cline-any cline-no"> </span>
|
|
1026
|
+
<span class="cline-any cline-no"> </span>
|
|
1027
|
+
<span class="cline-any cline-no"> </span>
|
|
1028
|
+
<span class="cline-any cline-no"> </span>
|
|
1029
|
+
<span class="cline-any cline-no"> </span>
|
|
1030
|
+
<span class="cline-any cline-no"> </span>
|
|
1031
|
+
<span class="cline-any cline-no"> </span>
|
|
1032
|
+
<span class="cline-any cline-no"> </span>
|
|
1033
|
+
<span class="cline-any cline-no"> </span>
|
|
1034
|
+
<span class="cline-any cline-no"> </span>
|
|
1035
|
+
<span class="cline-any cline-no"> </span>
|
|
1036
|
+
<span class="cline-any cline-no"> </span>
|
|
1037
|
+
<span class="cline-any cline-no"> </span>
|
|
1038
|
+
<span class="cline-any cline-no"> </span>
|
|
1039
|
+
<span class="cline-any cline-no"> </span>
|
|
1040
|
+
<span class="cline-any cline-no"> </span>
|
|
1041
|
+
<span class="cline-any cline-no"> </span>
|
|
1042
|
+
<span class="cline-any cline-no"> </span>
|
|
1043
|
+
<span class="cline-any cline-no"> </span>
|
|
1044
|
+
<span class="cline-any cline-no"> </span>
|
|
1045
|
+
<span class="cline-any cline-no"> </span>
|
|
1046
|
+
<span class="cline-any cline-no"> </span>
|
|
1047
|
+
<span class="cline-any cline-no"> </span>
|
|
1048
|
+
<span class="cline-any cline-no"> </span>
|
|
1049
|
+
<span class="cline-any cline-no"> </span>
|
|
1050
|
+
<span class="cline-any cline-no"> </span>
|
|
1051
|
+
<span class="cline-any cline-no"> </span>
|
|
1052
|
+
<span class="cline-any cline-no"> </span>
|
|
1053
|
+
<span class="cline-any cline-no"> </span>
|
|
1054
|
+
<span class="cline-any cline-no"> </span>
|
|
1055
|
+
<span class="cline-any cline-no"> </span>
|
|
1056
|
+
<span class="cline-any cline-no"> </span>
|
|
1057
|
+
<span class="cline-any cline-no"> </span>
|
|
1058
|
+
<span class="cline-any cline-no"> </span>
|
|
1059
|
+
<span class="cline-any cline-no"> </span>
|
|
1060
|
+
<span class="cline-any cline-no"> </span>
|
|
1061
|
+
<span class="cline-any cline-no"> </span>
|
|
1062
|
+
<span class="cline-any cline-no"> </span>
|
|
1063
|
+
<span class="cline-any cline-no"> </span>
|
|
1064
|
+
<span class="cline-any cline-no"> </span>
|
|
1065
|
+
<span class="cline-any cline-no"> </span>
|
|
1066
|
+
<span class="cline-any cline-no"> </span>
|
|
1067
|
+
<span class="cline-any cline-no"> </span>
|
|
1068
|
+
<span class="cline-any cline-no"> </span>
|
|
1069
|
+
<span class="cline-any cline-no"> </span>
|
|
1070
|
+
<span class="cline-any cline-no"> </span>
|
|
1071
|
+
<span class="cline-any cline-no"> </span>
|
|
1072
|
+
<span class="cline-any cline-no"> </span>
|
|
1073
|
+
<span class="cline-any cline-no"> </span>
|
|
1074
|
+
<span class="cline-any cline-no"> </span>
|
|
1075
|
+
<span class="cline-any cline-no"> </span>
|
|
1076
|
+
<span class="cline-any cline-no"> </span>
|
|
1077
|
+
<span class="cline-any cline-no"> </span>
|
|
1078
|
+
<span class="cline-any cline-no"> </span>
|
|
1079
|
+
<span class="cline-any cline-no"> </span>
|
|
1080
|
+
<span class="cline-any cline-no"> </span>
|
|
1081
|
+
<span class="cline-any cline-no"> </span>
|
|
1082
|
+
<span class="cline-any cline-no"> </span>
|
|
1083
|
+
<span class="cline-any cline-no"> </span>
|
|
1084
|
+
<span class="cline-any cline-no"> </span>
|
|
1085
|
+
<span class="cline-any cline-no"> </span>
|
|
1086
|
+
<span class="cline-any cline-no"> </span>
|
|
1087
|
+
<span class="cline-any cline-no"> </span>
|
|
1088
|
+
<span class="cline-any cline-no"> </span>
|
|
1089
|
+
<span class="cline-any cline-no"> </span>
|
|
1090
|
+
<span class="cline-any cline-no"> </span>
|
|
1091
|
+
<span class="cline-any cline-no"> </span>
|
|
1092
|
+
<span class="cline-any cline-no"> </span>
|
|
1093
|
+
<span class="cline-any cline-no"> </span>
|
|
1094
|
+
<span class="cline-any cline-no"> </span>
|
|
1095
|
+
<span class="cline-any cline-no"> </span>
|
|
1096
|
+
<span class="cline-any cline-no"> </span>
|
|
1097
|
+
<span class="cline-any cline-no"> </span>
|
|
1098
|
+
<span class="cline-any cline-no"> </span>
|
|
1099
|
+
<span class="cline-any cline-no"> </span>
|
|
1100
|
+
<span class="cline-any cline-no"> </span>
|
|
1101
|
+
<span class="cline-any cline-no"> </span>
|
|
1102
|
+
<span class="cline-any cline-no"> </span>
|
|
1103
|
+
<span class="cline-any cline-no"> </span>
|
|
1104
|
+
<span class="cline-any cline-no"> </span>
|
|
1105
|
+
<span class="cline-any cline-no"> </span>
|
|
1106
|
+
<span class="cline-any cline-no"> </span>
|
|
1107
|
+
<span class="cline-any cline-no"> </span>
|
|
1108
|
+
<span class="cline-any cline-no"> </span>
|
|
1109
|
+
<span class="cline-any cline-no"> </span>
|
|
1110
|
+
<span class="cline-any cline-no"> </span>
|
|
1111
|
+
<span class="cline-any cline-no"> </span>
|
|
1112
|
+
<span class="cline-any cline-no"> </span>
|
|
1113
|
+
<span class="cline-any cline-no"> </span>
|
|
1114
|
+
<span class="cline-any cline-no"> </span>
|
|
1115
|
+
<span class="cline-any cline-no"> </span>
|
|
1116
|
+
<span class="cline-any cline-no"> </span>
|
|
1117
|
+
<span class="cline-any cline-no"> </span>
|
|
1118
|
+
<span class="cline-any cline-no"> </span>
|
|
1119
|
+
<span class="cline-any cline-no"> </span>
|
|
1120
|
+
<span class="cline-any cline-no"> </span>
|
|
1121
|
+
<span class="cline-any cline-no"> </span>
|
|
1122
|
+
<span class="cline-any cline-no"> </span>
|
|
1123
|
+
<span class="cline-any cline-no"> </span>
|
|
1124
|
+
<span class="cline-any cline-no"> </span>
|
|
1125
|
+
<span class="cline-any cline-no"> </span>
|
|
1126
|
+
<span class="cline-any cline-no"> </span>
|
|
1127
|
+
<span class="cline-any cline-no"> </span>
|
|
1128
|
+
<span class="cline-any cline-no"> </span>
|
|
1129
|
+
<span class="cline-any cline-no"> </span>
|
|
1130
|
+
<span class="cline-any cline-no"> </span>
|
|
1131
|
+
<span class="cline-any cline-no"> </span>
|
|
1132
|
+
<span class="cline-any cline-no"> </span>
|
|
1133
|
+
<span class="cline-any cline-no"> </span>
|
|
1134
|
+
<span class="cline-any cline-no"> </span>
|
|
1135
|
+
<span class="cline-any cline-no"> </span>
|
|
1136
|
+
<span class="cline-any cline-no"> </span>
|
|
1137
|
+
<span class="cline-any cline-no"> </span>
|
|
1138
|
+
<span class="cline-any cline-no"> </span>
|
|
1139
|
+
<span class="cline-any cline-no"> </span>
|
|
1140
|
+
<span class="cline-any cline-no"> </span>
|
|
1141
|
+
<span class="cline-any cline-no"> </span>
|
|
1142
|
+
<span class="cline-any cline-no"> </span>
|
|
1143
|
+
<span class="cline-any cline-no"> </span>
|
|
1144
|
+
<span class="cline-any cline-no"> </span>
|
|
1145
|
+
<span class="cline-any cline-no"> </span>
|
|
1146
|
+
<span class="cline-any cline-no"> </span>
|
|
1147
|
+
<span class="cline-any cline-no"> </span>
|
|
1148
|
+
<span class="cline-any cline-no"> </span>
|
|
1149
|
+
<span class="cline-any cline-no"> </span>
|
|
1150
|
+
<span class="cline-any cline-no"> </span>
|
|
1151
|
+
<span class="cline-any cline-no"> </span>
|
|
1152
|
+
<span class="cline-any cline-no"> </span>
|
|
1153
|
+
<span class="cline-any cline-no"> </span>
|
|
1154
|
+
<span class="cline-any cline-no"> </span>
|
|
1155
|
+
<span class="cline-any cline-no"> </span>
|
|
1156
|
+
<span class="cline-any cline-no"> </span>
|
|
1157
|
+
<span class="cline-any cline-no"> </span>
|
|
1158
|
+
<span class="cline-any cline-no"> </span>
|
|
1159
|
+
<span class="cline-any cline-no"> </span>
|
|
1160
|
+
<span class="cline-any cline-no"> </span>
|
|
1161
|
+
<span class="cline-any cline-no"> </span>
|
|
1162
|
+
<span class="cline-any cline-no"> </span>
|
|
1163
|
+
<span class="cline-any cline-no"> </span>
|
|
1164
|
+
<span class="cline-any cline-no"> </span>
|
|
1165
|
+
<span class="cline-any cline-no"> </span>
|
|
1166
|
+
<span class="cline-any cline-no"> </span>
|
|
1167
|
+
<span class="cline-any cline-no"> </span>
|
|
1168
|
+
<span class="cline-any cline-no"> </span>
|
|
1169
|
+
<span class="cline-any cline-no"> </span>
|
|
1170
|
+
<span class="cline-any cline-no"> </span>
|
|
1171
|
+
<span class="cline-any cline-no"> </span>
|
|
1172
|
+
<span class="cline-any cline-no"> </span>
|
|
1173
|
+
<span class="cline-any cline-no"> </span>
|
|
1174
|
+
<span class="cline-any cline-no"> </span>
|
|
1175
|
+
<span class="cline-any cline-no"> </span>
|
|
1176
|
+
<span class="cline-any cline-no"> </span>
|
|
1177
|
+
<span class="cline-any cline-no"> </span>
|
|
1178
|
+
<span class="cline-any cline-no"> </span>
|
|
1179
|
+
<span class="cline-any cline-no"> </span>
|
|
1180
|
+
<span class="cline-any cline-no"> </span>
|
|
1181
|
+
<span class="cline-any cline-no"> </span>
|
|
1182
|
+
<span class="cline-any cline-no"> </span>
|
|
1183
|
+
<span class="cline-any cline-no"> </span>
|
|
1184
|
+
<span class="cline-any cline-no"> </span>
|
|
1185
|
+
<span class="cline-any cline-no"> </span>
|
|
1186
|
+
<span class="cline-any cline-no"> </span>
|
|
1187
|
+
<span class="cline-any cline-no"> </span>
|
|
1188
|
+
<span class="cline-any cline-no"> </span>
|
|
1189
|
+
<span class="cline-any cline-no"> </span>
|
|
1190
|
+
<span class="cline-any cline-no"> </span>
|
|
1191
|
+
<span class="cline-any cline-no"> </span>
|
|
1192
|
+
<span class="cline-any cline-no"> </span>
|
|
1193
|
+
<span class="cline-any cline-no"> </span>
|
|
1194
|
+
<span class="cline-any cline-no"> </span>
|
|
1195
|
+
<span class="cline-any cline-no"> </span>
|
|
1196
|
+
<span class="cline-any cline-no"> </span>
|
|
1197
|
+
<span class="cline-any cline-no"> </span>
|
|
1198
|
+
<span class="cline-any cline-no"> </span>
|
|
1199
|
+
<span class="cline-any cline-no"> </span>
|
|
1200
|
+
<span class="cline-any cline-no"> </span>
|
|
1201
|
+
<span class="cline-any cline-no"> </span>
|
|
1202
|
+
<span class="cline-any cline-no"> </span>
|
|
1203
|
+
<span class="cline-any cline-no"> </span>
|
|
1204
|
+
<span class="cline-any cline-no"> </span>
|
|
1205
|
+
<span class="cline-any cline-no"> </span>
|
|
1206
|
+
<span class="cline-any cline-no"> </span>
|
|
1207
|
+
<span class="cline-any cline-no"> </span>
|
|
1208
|
+
<span class="cline-any cline-no"> </span>
|
|
1209
|
+
<span class="cline-any cline-no"> </span>
|
|
1210
|
+
<span class="cline-any cline-no"> </span>
|
|
1211
|
+
<span class="cline-any cline-no"> </span>
|
|
1212
|
+
<span class="cline-any cline-no"> </span>
|
|
1213
|
+
<span class="cline-any cline-no"> </span>
|
|
1214
|
+
<span class="cline-any cline-no"> </span>
|
|
1215
|
+
<span class="cline-any cline-no"> </span>
|
|
1216
|
+
<span class="cline-any cline-no"> </span>
|
|
1217
|
+
<span class="cline-any cline-no"> </span>
|
|
1218
|
+
<span class="cline-any cline-no"> </span>
|
|
1219
|
+
<span class="cline-any cline-no"> </span>
|
|
1220
|
+
<span class="cline-any cline-no"> </span>
|
|
1221
|
+
<span class="cline-any cline-no"> </span>
|
|
1222
|
+
<span class="cline-any cline-no"> </span>
|
|
1223
|
+
<span class="cline-any cline-no"> </span>
|
|
1224
|
+
<span class="cline-any cline-no"> </span>
|
|
1225
|
+
<span class="cline-any cline-no"> </span>
|
|
1226
|
+
<span class="cline-any cline-no"> </span>
|
|
1227
|
+
<span class="cline-any cline-no"> </span>
|
|
1228
|
+
<span class="cline-any cline-no"> </span>
|
|
1229
|
+
<span class="cline-any cline-no"> </span>
|
|
1230
|
+
<span class="cline-any cline-no"> </span>
|
|
1231
|
+
<span class="cline-any cline-no"> </span>
|
|
1232
|
+
<span class="cline-any cline-no"> </span>
|
|
1233
|
+
<span class="cline-any cline-no"> </span>
|
|
1234
|
+
<span class="cline-any cline-no"> </span>
|
|
1235
|
+
<span class="cline-any cline-no"> </span>
|
|
1236
|
+
<span class="cline-any cline-no"> </span>
|
|
1237
|
+
<span class="cline-any cline-no"> </span>
|
|
1238
|
+
<span class="cline-any cline-no"> </span>
|
|
1239
|
+
<span class="cline-any cline-no"> </span>
|
|
1240
|
+
<span class="cline-any cline-no"> </span>
|
|
1241
|
+
<span class="cline-any cline-no"> </span>
|
|
1242
|
+
<span class="cline-any cline-no"> </span>
|
|
1243
|
+
<span class="cline-any cline-no"> </span>
|
|
1244
|
+
<span class="cline-any cline-no"> </span>
|
|
1245
|
+
<span class="cline-any cline-no"> </span>
|
|
1246
|
+
<span class="cline-any cline-no"> </span>
|
|
1247
|
+
<span class="cline-any cline-no"> </span>
|
|
1248
|
+
<span class="cline-any cline-no"> </span>
|
|
1249
|
+
<span class="cline-any cline-no"> </span>
|
|
1250
|
+
<span class="cline-any cline-no"> </span>
|
|
1251
|
+
<span class="cline-any cline-no"> </span>
|
|
1252
|
+
<span class="cline-any cline-no"> </span>
|
|
1253
|
+
<span class="cline-any cline-no"> </span>
|
|
1254
|
+
<span class="cline-any cline-no"> </span>
|
|
1255
|
+
<span class="cline-any cline-no"> </span>
|
|
1256
|
+
<span class="cline-any cline-no"> </span>
|
|
1257
|
+
<span class="cline-any cline-no"> </span>
|
|
1258
|
+
<span class="cline-any cline-no"> </span>
|
|
1259
|
+
<span class="cline-any cline-no"> </span>
|
|
1260
|
+
<span class="cline-any cline-no"> </span>
|
|
1261
|
+
<span class="cline-any cline-no"> </span>
|
|
1262
|
+
<span class="cline-any cline-no"> </span>
|
|
1263
|
+
<span class="cline-any cline-no"> </span>
|
|
1264
|
+
<span class="cline-any cline-no"> </span>
|
|
1265
|
+
<span class="cline-any cline-no"> </span>
|
|
1266
|
+
<span class="cline-any cline-no"> </span>
|
|
1267
|
+
<span class="cline-any cline-no"> </span>
|
|
1268
|
+
<span class="cline-any cline-no"> </span>
|
|
1269
|
+
<span class="cline-any cline-no"> </span>
|
|
1270
|
+
<span class="cline-any cline-no"> </span>
|
|
1271
|
+
<span class="cline-any cline-no"> </span>
|
|
1272
|
+
<span class="cline-any cline-no"> </span>
|
|
1273
|
+
<span class="cline-any cline-no"> </span>
|
|
1274
|
+
<span class="cline-any cline-no"> </span>
|
|
1275
|
+
<span class="cline-any cline-no"> </span>
|
|
1276
|
+
<span class="cline-any cline-no"> </span>
|
|
1277
|
+
<span class="cline-any cline-no"> </span>
|
|
1278
|
+
<span class="cline-any cline-no"> </span>
|
|
1279
|
+
<span class="cline-any cline-no"> </span>
|
|
1280
|
+
<span class="cline-any cline-no"> </span>
|
|
1281
|
+
<span class="cline-any cline-no"> </span>
|
|
1282
|
+
<span class="cline-any cline-no"> </span>
|
|
1283
|
+
<span class="cline-any cline-no"> </span>
|
|
1284
|
+
<span class="cline-any cline-no"> </span>
|
|
1285
|
+
<span class="cline-any cline-no"> </span>
|
|
1286
|
+
<span class="cline-any cline-no"> </span>
|
|
1287
|
+
<span class="cline-any cline-no"> </span>
|
|
1288
|
+
<span class="cline-any cline-no"> </span>
|
|
1289
|
+
<span class="cline-any cline-no"> </span>
|
|
1290
|
+
<span class="cline-any cline-no"> </span>
|
|
1291
|
+
<span class="cline-any cline-no"> </span>
|
|
1292
|
+
<span class="cline-any cline-no"> </span>
|
|
1293
|
+
<span class="cline-any cline-no"> </span>
|
|
1294
|
+
<span class="cline-any cline-no"> </span>
|
|
1295
|
+
<span class="cline-any cline-no"> </span>
|
|
1296
|
+
<span class="cline-any cline-no"> </span>
|
|
1297
|
+
<span class="cline-any cline-no"> </span>
|
|
1298
|
+
<span class="cline-any cline-no"> </span>
|
|
1299
|
+
<span class="cline-any cline-no"> </span>
|
|
1300
|
+
<span class="cline-any cline-no"> </span>
|
|
1301
|
+
<span class="cline-any cline-no"> </span>
|
|
1302
|
+
<span class="cline-any cline-no"> </span>
|
|
1303
|
+
<span class="cline-any cline-no"> </span>
|
|
1304
|
+
<span class="cline-any cline-no"> </span>
|
|
1305
|
+
<span class="cline-any cline-no"> </span>
|
|
1306
|
+
<span class="cline-any cline-no"> </span>
|
|
1307
|
+
<span class="cline-any cline-no"> </span>
|
|
1308
|
+
<span class="cline-any cline-no"> </span>
|
|
1309
|
+
<span class="cline-any cline-no"> </span>
|
|
1310
|
+
<span class="cline-any cline-no"> </span>
|
|
1311
|
+
<span class="cline-any cline-no"> </span>
|
|
1312
|
+
<span class="cline-any cline-no"> </span>
|
|
1313
|
+
<span class="cline-any cline-no"> </span>
|
|
1314
|
+
<span class="cline-any cline-no"> </span>
|
|
1315
|
+
<span class="cline-any cline-no"> </span>
|
|
1316
|
+
<span class="cline-any cline-no"> </span>
|
|
1317
|
+
<span class="cline-any cline-no"> </span>
|
|
1318
|
+
<span class="cline-any cline-no"> </span>
|
|
1319
|
+
<span class="cline-any cline-no"> </span>
|
|
1320
|
+
<span class="cline-any cline-no"> </span>
|
|
1321
|
+
<span class="cline-any cline-no"> </span>
|
|
1322
|
+
<span class="cline-any cline-no"> </span>
|
|
1323
|
+
<span class="cline-any cline-no"> </span>
|
|
1324
|
+
<span class="cline-any cline-no"> </span>
|
|
1325
|
+
<span class="cline-any cline-no"> </span>
|
|
1326
|
+
<span class="cline-any cline-no"> </span>
|
|
1327
|
+
<span class="cline-any cline-no"> </span>
|
|
1328
|
+
<span class="cline-any cline-no"> </span>
|
|
1329
|
+
<span class="cline-any cline-no"> </span>
|
|
1330
|
+
<span class="cline-any cline-no"> </span>
|
|
1331
|
+
<span class="cline-any cline-no"> </span>
|
|
1332
|
+
<span class="cline-any cline-no"> </span>
|
|
1333
|
+
<span class="cline-any cline-no"> </span>
|
|
1334
|
+
<span class="cline-any cline-no"> </span>
|
|
1335
|
+
<span class="cline-any cline-no"> </span>
|
|
1336
|
+
<span class="cline-any cline-no"> </span>
|
|
1337
|
+
<span class="cline-any cline-no"> </span>
|
|
1338
|
+
<span class="cline-any cline-no"> </span>
|
|
1339
|
+
<span class="cline-any cline-no"> </span>
|
|
1340
|
+
<span class="cline-any cline-no"> </span>
|
|
1341
|
+
<span class="cline-any cline-no"> </span>
|
|
1342
|
+
<span class="cline-any cline-no"> </span>
|
|
1343
|
+
<span class="cline-any cline-no"> </span>
|
|
1344
|
+
<span class="cline-any cline-no"> </span>
|
|
1345
|
+
<span class="cline-any cline-no"> </span>
|
|
1346
|
+
<span class="cline-any cline-no"> </span>
|
|
1347
|
+
<span class="cline-any cline-no"> </span>
|
|
1348
|
+
<span class="cline-any cline-no"> </span>
|
|
1349
|
+
<span class="cline-any cline-no"> </span>
|
|
1350
|
+
<span class="cline-any cline-no"> </span>
|
|
1351
|
+
<span class="cline-any cline-no"> </span>
|
|
1352
|
+
<span class="cline-any cline-no"> </span>
|
|
1353
|
+
<span class="cline-any cline-no"> </span>
|
|
1354
|
+
<span class="cline-any cline-no"> </span>
|
|
1355
|
+
<span class="cline-any cline-no"> </span>
|
|
1356
|
+
<span class="cline-any cline-no"> </span>
|
|
1357
|
+
<span class="cline-any cline-no"> </span>
|
|
1358
|
+
<span class="cline-any cline-no"> </span>
|
|
1359
|
+
<span class="cline-any cline-no"> </span>
|
|
1360
|
+
<span class="cline-any cline-no"> </span>
|
|
1361
|
+
<span class="cline-any cline-no"> </span>
|
|
1362
|
+
<span class="cline-any cline-no"> </span>
|
|
1363
|
+
<span class="cline-any cline-no"> </span>
|
|
1364
|
+
<span class="cline-any cline-no"> </span>
|
|
1365
|
+
<span class="cline-any cline-no"> </span>
|
|
1366
|
+
<span class="cline-any cline-no"> </span>
|
|
1367
|
+
<span class="cline-any cline-no"> </span>
|
|
1368
|
+
<span class="cline-any cline-no"> </span>
|
|
1369
|
+
<span class="cline-any cline-no"> </span>
|
|
1370
|
+
<span class="cline-any cline-no"> </span>
|
|
1371
|
+
<span class="cline-any cline-no"> </span>
|
|
1372
|
+
<span class="cline-any cline-no"> </span>
|
|
1373
|
+
<span class="cline-any cline-no"> </span>
|
|
1374
|
+
<span class="cline-any cline-no"> </span>
|
|
1375
|
+
<span class="cline-any cline-no"> </span>
|
|
1376
|
+
<span class="cline-any cline-no"> </span>
|
|
1377
|
+
<span class="cline-any cline-no"> </span>
|
|
1378
|
+
<span class="cline-any cline-no"> </span>
|
|
1379
|
+
<span class="cline-any cline-no"> </span>
|
|
1380
|
+
<span class="cline-any cline-no"> </span>
|
|
1381
|
+
<span class="cline-any cline-no"> </span>
|
|
1382
|
+
<span class="cline-any cline-no"> </span>
|
|
1383
|
+
<span class="cline-any cline-no"> </span>
|
|
1384
|
+
<span class="cline-any cline-no"> </span>
|
|
1385
|
+
<span class="cline-any cline-no"> </span>
|
|
1386
|
+
<span class="cline-any cline-no"> </span>
|
|
1387
|
+
<span class="cline-any cline-no"> </span>
|
|
1388
|
+
<span class="cline-any cline-no"> </span>
|
|
1389
|
+
<span class="cline-any cline-no"> </span>
|
|
1390
|
+
<span class="cline-any cline-no"> </span>
|
|
1391
|
+
<span class="cline-any cline-no"> </span>
|
|
1392
|
+
<span class="cline-any cline-no"> </span>
|
|
1393
|
+
<span class="cline-any cline-no"> </span>
|
|
1394
|
+
<span class="cline-any cline-no"> </span>
|
|
1395
|
+
<span class="cline-any cline-no"> </span>
|
|
1396
|
+
<span class="cline-any cline-no"> </span>
|
|
1397
|
+
<span class="cline-any cline-no"> </span>
|
|
1398
|
+
<span class="cline-any cline-no"> </span>
|
|
1399
|
+
<span class="cline-any cline-no"> </span>
|
|
1400
|
+
<span class="cline-any cline-no"> </span>
|
|
1401
|
+
<span class="cline-any cline-no"> </span>
|
|
1402
|
+
<span class="cline-any cline-no"> </span>
|
|
1403
|
+
<span class="cline-any cline-no"> </span>
|
|
1404
|
+
<span class="cline-any cline-no"> </span>
|
|
1405
|
+
<span class="cline-any cline-no"> </span>
|
|
1406
|
+
<span class="cline-any cline-no"> </span>
|
|
1407
|
+
<span class="cline-any cline-no"> </span>
|
|
1408
|
+
<span class="cline-any cline-no"> </span>
|
|
1409
|
+
<span class="cline-any cline-no"> </span>
|
|
1410
|
+
<span class="cline-any cline-no"> </span>
|
|
1411
|
+
<span class="cline-any cline-no"> </span>
|
|
1412
|
+
<span class="cline-any cline-no"> </span>
|
|
1413
|
+
<span class="cline-any cline-no"> </span>
|
|
1414
|
+
<span class="cline-any cline-no"> </span>
|
|
1415
|
+
<span class="cline-any cline-no"> </span>
|
|
1416
|
+
<span class="cline-any cline-no"> </span>
|
|
1417
|
+
<span class="cline-any cline-no"> </span>
|
|
1418
|
+
<span class="cline-any cline-no"> </span>
|
|
1419
|
+
<span class="cline-any cline-no"> </span>
|
|
1420
|
+
<span class="cline-any cline-no"> </span>
|
|
1421
|
+
<span class="cline-any cline-no"> </span>
|
|
1422
|
+
<span class="cline-any cline-no"> </span>
|
|
1423
|
+
<span class="cline-any cline-no"> </span>
|
|
1424
|
+
<span class="cline-any cline-no"> </span>
|
|
1425
|
+
<span class="cline-any cline-no"> </span>
|
|
1426
|
+
<span class="cline-any cline-no"> </span>
|
|
1427
|
+
<span class="cline-any cline-no"> </span>
|
|
1428
|
+
<span class="cline-any cline-no"> </span>
|
|
1429
|
+
<span class="cline-any cline-no"> </span>
|
|
1430
|
+
<span class="cline-any cline-no"> </span>
|
|
1431
|
+
<span class="cline-any cline-no"> </span>
|
|
1432
|
+
<span class="cline-any cline-no"> </span>
|
|
1433
|
+
<span class="cline-any cline-no"> </span>
|
|
1434
|
+
<span class="cline-any cline-no"> </span>
|
|
1435
|
+
<span class="cline-any cline-no"> </span>
|
|
1436
|
+
<span class="cline-any cline-no"> </span>
|
|
1437
|
+
<span class="cline-any cline-no"> </span>
|
|
1438
|
+
<span class="cline-any cline-no"> </span>
|
|
1439
|
+
<span class="cline-any cline-no"> </span>
|
|
1440
|
+
<span class="cline-any cline-no"> </span>
|
|
1441
|
+
<span class="cline-any cline-no"> </span>
|
|
1442
|
+
<span class="cline-any cline-no"> </span>
|
|
1443
|
+
<span class="cline-any cline-no"> </span>
|
|
1444
|
+
<span class="cline-any cline-no"> </span>
|
|
1445
|
+
<span class="cline-any cline-no"> </span>
|
|
1446
|
+
<span class="cline-any cline-no"> </span>
|
|
1447
|
+
<span class="cline-any cline-no"> </span>
|
|
1448
|
+
<span class="cline-any cline-no"> </span>
|
|
1449
|
+
<span class="cline-any cline-no"> </span>
|
|
1450
|
+
<span class="cline-any cline-no"> </span>
|
|
1451
|
+
<span class="cline-any cline-no"> </span>
|
|
1452
|
+
<span class="cline-any cline-no"> </span>
|
|
1453
|
+
<span class="cline-any cline-no"> </span>
|
|
1454
|
+
<span class="cline-any cline-no"> </span>
|
|
1455
|
+
<span class="cline-any cline-no"> </span>
|
|
1456
|
+
<span class="cline-any cline-no"> </span>
|
|
1457
|
+
<span class="cline-any cline-no"> </span>
|
|
1458
|
+
<span class="cline-any cline-no"> </span>
|
|
1459
|
+
<span class="cline-any cline-no"> </span>
|
|
1460
|
+
<span class="cline-any cline-no"> </span>
|
|
1461
|
+
<span class="cline-any cline-no"> </span>
|
|
1462
|
+
<span class="cline-any cline-no"> </span>
|
|
1463
|
+
<span class="cline-any cline-no"> </span>
|
|
1464
|
+
<span class="cline-any cline-no"> </span>
|
|
1465
|
+
<span class="cline-any cline-no"> </span>
|
|
1466
|
+
<span class="cline-any cline-no"> </span>
|
|
1467
|
+
<span class="cline-any cline-no"> </span>
|
|
1468
|
+
<span class="cline-any cline-no"> </span>
|
|
1469
|
+
<span class="cline-any cline-no"> </span>
|
|
1470
|
+
<span class="cline-any cline-no"> </span>
|
|
1471
|
+
<span class="cline-any cline-no"> </span>
|
|
1472
|
+
<span class="cline-any cline-no"> </span>
|
|
1473
|
+
<span class="cline-any cline-no"> </span>
|
|
1474
|
+
<span class="cline-any cline-no"> </span>
|
|
1475
|
+
<span class="cline-any cline-no"> </span>
|
|
1476
|
+
<span class="cline-any cline-no"> </span>
|
|
1477
|
+
<span class="cline-any cline-no"> </span>
|
|
1478
|
+
<span class="cline-any cline-no"> </span>
|
|
1479
|
+
<span class="cline-any cline-no"> </span>
|
|
1480
|
+
<span class="cline-any cline-no"> </span>
|
|
1481
|
+
<span class="cline-any cline-no"> </span>
|
|
1482
|
+
<span class="cline-any cline-no"> </span>
|
|
1483
|
+
<span class="cline-any cline-no"> </span>
|
|
1484
|
+
<span class="cline-any cline-no"> </span>
|
|
1485
|
+
<span class="cline-any cline-no"> </span>
|
|
1486
|
+
<span class="cline-any cline-no"> </span>
|
|
1487
|
+
<span class="cline-any cline-no"> </span>
|
|
1488
|
+
<span class="cline-any cline-no"> </span>
|
|
1489
|
+
<span class="cline-any cline-no"> </span>
|
|
1490
|
+
<span class="cline-any cline-no"> </span>
|
|
1491
|
+
<span class="cline-any cline-no"> </span>
|
|
1492
|
+
<span class="cline-any cline-no"> </span>
|
|
1493
|
+
<span class="cline-any cline-no"> </span>
|
|
1494
|
+
<span class="cline-any cline-no"> </span>
|
|
1495
|
+
<span class="cline-any cline-no"> </span>
|
|
1496
|
+
<span class="cline-any cline-no"> </span>
|
|
1497
|
+
<span class="cline-any cline-no"> </span>
|
|
1498
|
+
<span class="cline-any cline-no"> </span>
|
|
1499
|
+
<span class="cline-any cline-no"> </span>
|
|
1500
|
+
<span class="cline-any cline-no"> </span>
|
|
1501
|
+
<span class="cline-any cline-no"> </span>
|
|
1502
|
+
<span class="cline-any cline-no"> </span>
|
|
1503
|
+
<span class="cline-any cline-no"> </span>
|
|
1504
|
+
<span class="cline-any cline-no"> </span>
|
|
1505
|
+
<span class="cline-any cline-no"> </span>
|
|
1506
|
+
<span class="cline-any cline-no"> </span>
|
|
1507
|
+
<span class="cline-any cline-no"> </span>
|
|
1508
|
+
<span class="cline-any cline-no"> </span>
|
|
1509
|
+
<span class="cline-any cline-no"> </span>
|
|
1510
|
+
<span class="cline-any cline-no"> </span>
|
|
1511
|
+
<span class="cline-any cline-no"> </span>
|
|
1512
|
+
<span class="cline-any cline-no"> </span>
|
|
1513
|
+
<span class="cline-any cline-no"> </span>
|
|
1514
|
+
<span class="cline-any cline-no"> </span>
|
|
1515
|
+
<span class="cline-any cline-no"> </span>
|
|
1516
|
+
<span class="cline-any cline-no"> </span>
|
|
1517
|
+
<span class="cline-any cline-no"> </span>
|
|
1518
|
+
<span class="cline-any cline-no"> </span>
|
|
1519
|
+
<span class="cline-any cline-no"> </span>
|
|
1520
|
+
<span class="cline-any cline-no"> </span>
|
|
1521
|
+
<span class="cline-any cline-no"> </span>
|
|
1522
|
+
<span class="cline-any cline-no"> </span>
|
|
1523
|
+
<span class="cline-any cline-no"> </span>
|
|
1524
|
+
<span class="cline-any cline-no"> </span>
|
|
1525
|
+
<span class="cline-any cline-no"> </span>
|
|
1526
|
+
<span class="cline-any cline-no"> </span>
|
|
1527
|
+
<span class="cline-any cline-no"> </span>
|
|
1528
|
+
<span class="cline-any cline-no"> </span>
|
|
1529
|
+
<span class="cline-any cline-no"> </span>
|
|
1530
|
+
<span class="cline-any cline-no"> </span>
|
|
1531
|
+
<span class="cline-any cline-no"> </span>
|
|
1532
|
+
<span class="cline-any cline-no"> </span>
|
|
1533
|
+
<span class="cline-any cline-no"> </span>
|
|
1534
|
+
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js"><span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ><span class="branch-0 cbranch-no" title="branch not covered" >/**</span></span></span>
|
|
1535
|
+
<span class="cstat-no" title="statement not covered" > * HSuite Native Connect</span>
|
|
1536
|
+
<span class="cstat-no" title="statement not covered" > * Copyright 2024-2025 HSuite (https://hsuite.finance)</span>
|
|
1537
|
+
<span class="cstat-no" title="statement not covered" > *</span>
|
|
1538
|
+
<span class="cstat-no" title="statement not covered" > * SPDX-License-Identifier: PolyForm-Noncommercial-1.0.0</span>
|
|
1539
|
+
<span class="cstat-no" title="statement not covered" > *</span>
|
|
1540
|
+
<span class="cstat-no" title="statement not covered" > * This file is part of HSuite Native Connect. For commercial licensing,</span>
|
|
1541
|
+
<span class="cstat-no" title="statement not covered" > * visit https://hsuite.finance/licensing</span>
|
|
1542
|
+
<span class="cstat-no" title="statement not covered" > */</span>
|
|
1543
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1544
|
+
<span class="cstat-no" title="statement not covered" >/**</span>
|
|
1545
|
+
<span class="cstat-no" title="statement not covered" > * @file qr-pairing-step.component.ts</span>
|
|
1546
|
+
<span class="cstat-no" title="statement not covered" > * @description QR code pairing step for mobile wallet connection</span>
|
|
1547
|
+
<span class="cstat-no" title="statement not covered" > *</span>
|
|
1548
|
+
<span class="cstat-no" title="statement not covered" > * Implements single-QR Nostr-first pairing flow:</span>
|
|
1549
|
+
<span class="cstat-no" title="statement not covered" > * 1. Display compact QR code with session invite</span>
|
|
1550
|
+
<span class="cstat-no" title="statement not covered" > * 2. Wait for wallet to scan and connect via Nostr</span>
|
|
1551
|
+
<span class="cstat-no" title="statement not covered" > * 3. Wait for user approval in wallet</span>
|
|
1552
|
+
<span class="cstat-no" title="statement not covered" > * 4. Connection established (P2P upgrade happens automatically)</span>
|
|
1553
|
+
<span class="cstat-no" title="statement not covered" > *</span>
|
|
1554
|
+
<span class="cstat-no" title="statement not covered" > * This enables fully decentralized cross-device connections with only</span>
|
|
1555
|
+
<span class="cstat-no" title="statement not covered" > * a single QR scan - much simpler than the previous 2-QR WebRTC flow.</span>
|
|
1556
|
+
<span class="cstat-no" title="statement not covered" > *</span>
|
|
1557
|
+
<span class="cstat-no" title="statement not covered" > * Features:</span>
|
|
1558
|
+
<span class="cstat-no" title="statement not covered" > * - Single QR code display (no answer scanning needed)</span>
|
|
1559
|
+
<span class="cstat-no" title="statement not covered" > * - QR code with HSuite logo in center</span>
|
|
1560
|
+
<span class="cstat-no" title="statement not covered" > * - Countdown timer with expiry handling</span>
|
|
1561
|
+
<span class="cstat-no" title="statement not covered" > * - Refresh capability for expired offers</span>
|
|
1562
|
+
<span class="cstat-no" title="statement not covered" > * - Waiting for approval state</span>
|
|
1563
|
+
<span class="cstat-no" title="statement not covered" > */</span>
|
|
1564
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1565
|
+
<span class="cstat-no" title="statement not covered" >import { CommonModule } from '@angular/common';</span>
|
|
1566
|
+
<span class="cstat-no" title="statement not covered" >import {</span>
|
|
1567
|
+
<span class="cstat-no" title="statement not covered" > Component,</span>
|
|
1568
|
+
<span class="cstat-no" title="statement not covered" > Input,</span>
|
|
1569
|
+
<span class="cstat-no" title="statement not covered" > Output,</span>
|
|
1570
|
+
<span class="cstat-no" title="statement not covered" > EventEmitter,</span>
|
|
1571
|
+
<span class="cstat-no" title="statement not covered" > ChangeDetectionStrategy,</span>
|
|
1572
|
+
<span class="cstat-no" title="statement not covered" > signal,</span>
|
|
1573
|
+
<span class="cstat-no" title="statement not covered" > OnChanges,</span>
|
|
1574
|
+
<span class="cstat-no" title="statement not covered" > SimpleChanges,</span>
|
|
1575
|
+
<span class="cstat-no" title="statement not covered" > OnDestroy,</span>
|
|
1576
|
+
<span class="cstat-no" title="statement not covered" > AfterViewInit,</span>
|
|
1577
|
+
<span class="cstat-no" title="statement not covered" > ElementRef,</span>
|
|
1578
|
+
<span class="cstat-no" title="statement not covered" > ViewChild,</span>
|
|
1579
|
+
<span class="cstat-no" title="statement not covered" > inject,</span>
|
|
1580
|
+
<span class="cstat-no" title="statement not covered" >} from '@angular/core';</span>
|
|
1581
|
+
<span class="cstat-no" title="statement not covered" >import { copyToClipboard } from '@hsuite/native-connect-ui';</span>
|
|
1582
|
+
<span class="cstat-no" title="statement not covered" >import { IonIcon, IonSpinner, IonButton } from '@ionic/angular/standalone';</span>
|
|
1583
|
+
<span class="cstat-no" title="statement not covered" >import { addIcons } from 'ionicons';</span>
|
|
1584
|
+
<span class="cstat-no" title="statement not covered" >import {</span>
|
|
1585
|
+
<span class="cstat-no" title="statement not covered" > qrCodeOutline,</span>
|
|
1586
|
+
<span class="cstat-no" title="statement not covered" > refreshOutline,</span>
|
|
1587
|
+
<span class="cstat-no" title="statement not covered" > checkmarkCircleOutline,</span>
|
|
1588
|
+
<span class="cstat-no" title="statement not covered" > closeCircleOutline,</span>
|
|
1589
|
+
<span class="cstat-no" title="statement not covered" > phonePortraitOutline,</span>
|
|
1590
|
+
<span class="cstat-no" title="statement not covered" > arrowBackOutline,</span>
|
|
1591
|
+
<span class="cstat-no" title="statement not covered" > timeOutline,</span>
|
|
1592
|
+
<span class="cstat-no" title="statement not covered" > copyOutline,</span>
|
|
1593
|
+
<span class="cstat-no" title="statement not covered" > checkmarkOutline,</span>
|
|
1594
|
+
<span class="cstat-no" title="statement not covered" >} from 'ionicons/icons';</span>
|
|
1595
|
+
<span class="cstat-no" title="statement not covered" >import * as QRCode from 'qrcode'; // qrcode has no default export; use namespace import for toCanvas</span>
|
|
1596
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1597
|
+
<span class="cstat-no" title="statement not covered" >import { LoggerService } from '../../../services/logger.service';</span>
|
|
1598
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1599
|
+
<span class="cstat-no" title="statement not covered" >/**</span>
|
|
1600
|
+
<span class="cstat-no" title="statement not covered" > * Connection state for the QR pairing step.</span>
|
|
1601
|
+
<span class="cstat-no" title="statement not covered" > *</span>
|
|
1602
|
+
<span class="cstat-no" title="statement not covered" > * States:</span>
|
|
1603
|
+
<span class="cstat-no" title="statement not covered" > * - loading: Generating session invite</span>
|
|
1604
|
+
<span class="cstat-no" title="statement not covered" > * - displaying: Showing QR code for wallet to scan</span>
|
|
1605
|
+
<span class="cstat-no" title="statement not covered" > * - waiting_wallet: QR scanned, waiting for wallet to connect via Nostr</span>
|
|
1606
|
+
<span class="cstat-no" title="statement not covered" > * - waiting_approval: Wallet connected, waiting for user to approve</span>
|
|
1607
|
+
<span class="cstat-no" title="statement not covered" > * - connected: Session approved and connected</span>
|
|
1608
|
+
<span class="cstat-no" title="statement not covered" > * - expired: QR code expired</span>
|
|
1609
|
+
<span class="cstat-no" title="statement not covered" > * - error: An error occurred</span>
|
|
1610
|
+
<span class="cstat-no" title="statement not covered" > */</span>
|
|
1611
|
+
<span class="cstat-no" title="statement not covered" >export type QrPairingState =</span>
|
|
1612
|
+
<span class="cstat-no" title="statement not covered" > | 'loading'</span>
|
|
1613
|
+
<span class="cstat-no" title="statement not covered" > | 'displaying'</span>
|
|
1614
|
+
<span class="cstat-no" title="statement not covered" > | 'waiting_wallet'</span>
|
|
1615
|
+
<span class="cstat-no" title="statement not covered" > | 'waiting_approval'</span>
|
|
1616
|
+
<span class="cstat-no" title="statement not covered" > | 'connected'</span>
|
|
1617
|
+
<span class="cstat-no" title="statement not covered" > | 'expired'</span>
|
|
1618
|
+
<span class="cstat-no" title="statement not covered" > | 'error';</span>
|
|
1619
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1620
|
+
<span class="cstat-no" title="statement not covered" >/**</span>
|
|
1621
|
+
<span class="cstat-no" title="statement not covered" > * QR Pairing Step Component</span>
|
|
1622
|
+
<span class="cstat-no" title="statement not covered" > *</span>
|
|
1623
|
+
<span class="cstat-no" title="statement not covered" > * Implements single-QR Nostr-first pairing for cross-device P2P connections.</span>
|
|
1624
|
+
<span class="cstat-no" title="statement not covered" > * Much simpler than the previous 2-QR WebRTC approach.</span>
|
|
1625
|
+
<span class="cstat-no" title="statement not covered" > */</span>
|
|
1626
|
+
<span class="cstat-no" title="statement not covered" >@Component({</span>
|
|
1627
|
+
<span class="cstat-no" title="statement not covered" > selector: 'hsuite-qr-pairing-step',</span>
|
|
1628
|
+
<span class="cstat-no" title="statement not covered" > standalone: true,</span>
|
|
1629
|
+
<span class="cstat-no" title="statement not covered" > changeDetection: ChangeDetectionStrategy.OnPush,</span>
|
|
1630
|
+
<span class="cstat-no" title="statement not covered" > imports: [CommonModule, IonIcon, IonSpinner, IonButton],</span>
|
|
1631
|
+
<span class="cstat-no" title="statement not covered" > template: `</span>
|
|
1632
|
+
<span class="cstat-no" title="statement not covered" > <div class="qr-pairing-container"></span>
|
|
1633
|
+
<span class="cstat-no" title="statement not covered" > <!-- Hidden canvas for QR generation - always rendered --></span>
|
|
1634
|
+
<span class="cstat-no" title="statement not covered" > <canvas #qrCanvas width="300" height="300" class="hidden-canvas"></canvas></span>
|
|
1635
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1636
|
+
<span class="cstat-no" title="statement not covered" > <!-- Loading State --></span>
|
|
1637
|
+
<span class="cstat-no" title="statement not covered" > <div *ngIf="pairingState() === 'loading'" class="state-panel loading"></span>
|
|
1638
|
+
<span class="cstat-no" title="statement not covered" > <ion-spinner name="crescent"></ion-spinner></span>
|
|
1639
|
+
<span class="cstat-no" title="statement not covered" > <p>Generating secure connection...</p></span>
|
|
1640
|
+
<span class="cstat-no" title="statement not covered" > </div></span>
|
|
1641
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1642
|
+
<span class="cstat-no" title="statement not covered" > <!-- QR Display State --></span>
|
|
1643
|
+
<span class="cstat-no" title="statement not covered" > <div *ngIf="pairingState() === 'displaying'" class="qr-display"></span>
|
|
1644
|
+
<span class="cstat-no" title="statement not covered" > <div class="qr-header"></span>
|
|
1645
|
+
<span class="cstat-no" title="statement not covered" > <h3>Scan with Your Wallet</h3></span>
|
|
1646
|
+
<span class="cstat-no" title="statement not covered" > <p class="qr-subtitle">Open HSuite Wallet and scan this QR code</p></span>
|
|
1647
|
+
<span class="cstat-no" title="statement not covered" > </div></span>
|
|
1648
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1649
|
+
<span class="cstat-no" title="statement not covered" > <div class="qr-wrapper"></span>
|
|
1650
|
+
<span class="cstat-no" title="statement not covered" > <canvas #qrCanvasDisplay width="300" height="300"></canvas></span>
|
|
1651
|
+
<span class="cstat-no" title="statement not covered" > </div></span>
|
|
1652
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1653
|
+
<span class="cstat-no" title="statement not covered" > <div class="qr-meta"></span>
|
|
1654
|
+
<span class="cstat-no" title="statement not covered" > <div class="countdown" [class.warning]="countdown() < 30"></span>
|
|
1655
|
+
<span class="cstat-no" title="statement not covered" > <ion-icon name="time-outline"></ion-icon></span>
|
|
1656
|
+
<span class="cstat-no" title="statement not covered" > <span>{{ formatCountdown() }}</span></span>
|
|
1657
|
+
<span class="cstat-no" title="statement not covered" > </div></span>
|
|
1658
|
+
<span class="cstat-no" title="statement not covered" > <ion-button fill="clear" size="small" (click)="copyUri()"></span>
|
|
1659
|
+
<span class="cstat-no" title="statement not covered" > <ion-icon</span>
|
|
1660
|
+
<span class="cstat-no" title="statement not covered" > slot="icon-only"</span>
|
|
1661
|
+
<span class="cstat-no" title="statement not covered" > [name]="copied() ? 'checkmark-outline' : 'copy-outline'"</span>
|
|
1662
|
+
<span class="cstat-no" title="statement not covered" > ></ion-icon></span>
|
|
1663
|
+
<span class="cstat-no" title="statement not covered" > </ion-button></span>
|
|
1664
|
+
<span class="cstat-no" title="statement not covered" > </div></span>
|
|
1665
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1666
|
+
<span class="cstat-no" title="statement not covered" > <div class="instructions"></span>
|
|
1667
|
+
<span class="cstat-no" title="statement not covered" > <ol></span>
|
|
1668
|
+
<span class="cstat-no" title="statement not covered" > <li>Open HSuite Wallet on your phone</li></span>
|
|
1669
|
+
<span class="cstat-no" title="statement not covered" > <li>Go to Sessions tab</li></span>
|
|
1670
|
+
<span class="cstat-no" title="statement not covered" > <li>Tap "Scan QR" and scan this code</li></span>
|
|
1671
|
+
<span class="cstat-no" title="statement not covered" > </ol></span>
|
|
1672
|
+
<span class="cstat-no" title="statement not covered" > </div></span>
|
|
1673
|
+
<span class="cstat-no" title="statement not covered" > </div></span>
|
|
1674
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1675
|
+
<span class="cstat-no" title="statement not covered" > <!-- Waiting for Wallet State --></span>
|
|
1676
|
+
<span class="cstat-no" title="statement not covered" > <div *ngIf="pairingState() === 'waiting_wallet'" class="state-panel waiting"></span>
|
|
1677
|
+
<span class="cstat-no" title="statement not covered" > <div class="waiting-icon-wrapper"></span>
|
|
1678
|
+
<span class="cstat-no" title="statement not covered" > <ion-spinner name="crescent"></ion-spinner></span>
|
|
1679
|
+
<span class="cstat-no" title="statement not covered" > </div></span>
|
|
1680
|
+
<span class="cstat-no" title="statement not covered" > <h3>Waiting for Wallet</h3></span>
|
|
1681
|
+
<span class="cstat-no" title="statement not covered" > <p class="waiting-description">Scan the QR code with your wallet app to connect.</p></span>
|
|
1682
|
+
<span class="cstat-no" title="statement not covered" > </div></span>
|
|
1683
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1684
|
+
<span class="cstat-no" title="statement not covered" > <!-- Waiting for Approval State --></span>
|
|
1685
|
+
<span class="cstat-no" title="statement not covered" > <div *ngIf="pairingState() === 'waiting_approval'" class="state-panel waiting-approval"></span>
|
|
1686
|
+
<span class="cstat-no" title="statement not covered" > <div class="waiting-icon-wrapper"></span>
|
|
1687
|
+
<span class="cstat-no" title="statement not covered" > <ion-spinner name="crescent"></ion-spinner></span>
|
|
1688
|
+
<span class="cstat-no" title="statement not covered" > </div></span>
|
|
1689
|
+
<span class="cstat-no" title="statement not covered" > <h3>Waiting for Wallet Approval</h3></span>
|
|
1690
|
+
<span class="cstat-no" title="statement not covered" > <p class="waiting-description"></span>
|
|
1691
|
+
<span class="cstat-no" title="statement not covered" > The wallet is connected. Please approve the session in your wallet app.</span>
|
|
1692
|
+
<span class="cstat-no" title="statement not covered" > </p></span>
|
|
1693
|
+
<span class="cstat-no" title="statement not covered" > <div class="waiting-steps"></span>
|
|
1694
|
+
<span class="cstat-no" title="statement not covered" > <div class="waiting-step"></span>
|
|
1695
|
+
<span class="cstat-no" title="statement not covered" > <span class="step-check">&#10003;</span></span>
|
|
1696
|
+
<span class="cstat-no" title="statement not covered" > <span>QR code scanned</span></span>
|
|
1697
|
+
<span class="cstat-no" title="statement not covered" > </div></span>
|
|
1698
|
+
<span class="cstat-no" title="statement not covered" > <div class="waiting-step"></span>
|
|
1699
|
+
<span class="cstat-no" title="statement not covered" > <span class="step-check">&#10003;</span></span>
|
|
1700
|
+
<span class="cstat-no" title="statement not covered" > <span>Wallet connected</span></span>
|
|
1701
|
+
<span class="cstat-no" title="statement not covered" > </div></span>
|
|
1702
|
+
<span class="cstat-no" title="statement not covered" > <div class="waiting-step active"></span>
|
|
1703
|
+
<span class="cstat-no" title="statement not covered" > <ion-spinner name="dots"></ion-spinner></span>
|
|
1704
|
+
<span class="cstat-no" title="statement not covered" > <span>Awaiting approval in wallet...</span></span>
|
|
1705
|
+
<span class="cstat-no" title="statement not covered" > </div></span>
|
|
1706
|
+
<span class="cstat-no" title="statement not covered" > </div></span>
|
|
1707
|
+
<span class="cstat-no" title="statement not covered" > </div></span>
|
|
1708
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1709
|
+
<span class="cstat-no" title="statement not covered" > <!-- Connected State --></span>
|
|
1710
|
+
<span class="cstat-no" title="statement not covered" > <div *ngIf="pairingState() === 'connected'" class="state-panel connected"></span>
|
|
1711
|
+
<span class="cstat-no" title="statement not covered" > <ion-icon name="checkmark-circle-outline" color="success"></ion-icon></span>
|
|
1712
|
+
<span class="cstat-no" title="statement not covered" > <p>Connected successfully!</p></span>
|
|
1713
|
+
<span class="cstat-no" title="statement not covered" > </div></span>
|
|
1714
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1715
|
+
<span class="cstat-no" title="statement not covered" > <!-- Error State --></span>
|
|
1716
|
+
<span class="cstat-no" title="statement not covered" > <div *ngIf="pairingState() === 'error'" class="state-panel error"></span>
|
|
1717
|
+
<span class="cstat-no" title="statement not covered" > <ion-icon name="close-circle-outline" color="danger"></ion-icon></span>
|
|
1718
|
+
<span class="cstat-no" title="statement not covered" > <p>{{ errorMessage || 'Connection failed' }}</p></span>
|
|
1719
|
+
<span class="cstat-no" title="statement not covered" > <ion-button fill="outline" (click)="refresh()"></span>
|
|
1720
|
+
<span class="cstat-no" title="statement not covered" > <ion-icon slot="start" name="refresh-outline"></ion-icon></span>
|
|
1721
|
+
<span class="cstat-no" title="statement not covered" > Try Again</span>
|
|
1722
|
+
<span class="cstat-no" title="statement not covered" > </ion-button></span>
|
|
1723
|
+
<span class="cstat-no" title="statement not covered" > </div></span>
|
|
1724
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1725
|
+
<span class="cstat-no" title="statement not covered" > <!-- Expired State --></span>
|
|
1726
|
+
<span class="cstat-no" title="statement not covered" > <div *ngIf="pairingState() === 'expired'" class="state-panel expired"></span>
|
|
1727
|
+
<span class="cstat-no" title="statement not covered" > <ion-icon name="time-outline" color="warning"></ion-icon></span>
|
|
1728
|
+
<span class="cstat-no" title="statement not covered" > <p>QR code expired</p></span>
|
|
1729
|
+
<span class="cstat-no" title="statement not covered" > <ion-button fill="outline" (click)="refresh()"></span>
|
|
1730
|
+
<span class="cstat-no" title="statement not covered" > <ion-icon slot="start" name="refresh-outline"></ion-icon></span>
|
|
1731
|
+
<span class="cstat-no" title="statement not covered" > Generate New</span>
|
|
1732
|
+
<span class="cstat-no" title="statement not covered" > </ion-button></span>
|
|
1733
|
+
<span class="cstat-no" title="statement not covered" > </div></span>
|
|
1734
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1735
|
+
<span class="cstat-no" title="statement not covered" > <!-- Footer Actions (cancel) - hidden during waiting/connected --></span>
|
|
1736
|
+
<span class="cstat-no" title="statement not covered" > <div</span>
|
|
1737
|
+
<span class="cstat-no" title="statement not covered" > class="footer-actions"</span>
|
|
1738
|
+
<span class="cstat-no" title="statement not covered" > *ngIf="!['waiting_wallet', 'waiting_approval', 'connected'].includes(pairingState())"</span>
|
|
1739
|
+
<span class="cstat-no" title="statement not covered" > ></span>
|
|
1740
|
+
<span class="cstat-no" title="statement not covered" > <ion-button fill="clear" (click)="cancel()"></span>
|
|
1741
|
+
<span class="cstat-no" title="statement not covered" > <ion-icon slot="start" name="arrow-back-outline"></ion-icon></span>
|
|
1742
|
+
<span class="cstat-no" title="statement not covered" > Cancel</span>
|
|
1743
|
+
<span class="cstat-no" title="statement not covered" > </ion-button></span>
|
|
1744
|
+
<span class="cstat-no" title="statement not covered" > </div></span>
|
|
1745
|
+
<span class="cstat-no" title="statement not covered" > </div></span>
|
|
1746
|
+
<span class="cstat-no" title="statement not covered" > `,</span>
|
|
1747
|
+
<span class="cstat-no" title="statement not covered" > styles: [</span>
|
|
1748
|
+
<span class="cstat-no" title="statement not covered" > `</span>
|
|
1749
|
+
<span class="cstat-no" title="statement not covered" > .qr-pairing-container {</span>
|
|
1750
|
+
<span class="cstat-no" title="statement not covered" > display: flex;</span>
|
|
1751
|
+
<span class="cstat-no" title="statement not covered" > flex-direction: column;</span>
|
|
1752
|
+
<span class="cstat-no" title="statement not covered" > padding: 1rem;</span>
|
|
1753
|
+
<span class="cstat-no" title="statement not covered" > min-height: 400px;</span>
|
|
1754
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1755
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1756
|
+
<span class="cstat-no" title="statement not covered" > .hidden-canvas {</span>
|
|
1757
|
+
<span class="cstat-no" title="statement not covered" > position: absolute;</span>
|
|
1758
|
+
<span class="cstat-no" title="statement not covered" > left: -9999px;</span>
|
|
1759
|
+
<span class="cstat-no" title="statement not covered" > top: -9999px;</span>
|
|
1760
|
+
<span class="cstat-no" title="statement not covered" > visibility: hidden;</span>
|
|
1761
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1762
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1763
|
+
<span class="cstat-no" title="statement not covered" > .qr-display {</span>
|
|
1764
|
+
<span class="cstat-no" title="statement not covered" > display: flex;</span>
|
|
1765
|
+
<span class="cstat-no" title="statement not covered" > flex-direction: column;</span>
|
|
1766
|
+
<span class="cstat-no" title="statement not covered" > align-items: center;</span>
|
|
1767
|
+
<span class="cstat-no" title="statement not covered" > flex: 1;</span>
|
|
1768
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1769
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1770
|
+
<span class="cstat-no" title="statement not covered" > .qr-header {</span>
|
|
1771
|
+
<span class="cstat-no" title="statement not covered" > text-align: center;</span>
|
|
1772
|
+
<span class="cstat-no" title="statement not covered" > margin-bottom: 1.5rem;</span>
|
|
1773
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1774
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1775
|
+
<span class="cstat-no" title="statement not covered" > .qr-header h3 {</span>
|
|
1776
|
+
<span class="cstat-no" title="statement not covered" > margin: 0 0 0.5rem 0;</span>
|
|
1777
|
+
<span class="cstat-no" title="statement not covered" > font-size: 1.25rem;</span>
|
|
1778
|
+
<span class="cstat-no" title="statement not covered" > font-weight: 600;</span>
|
|
1779
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1780
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1781
|
+
<span class="cstat-no" title="statement not covered" > .qr-subtitle {</span>
|
|
1782
|
+
<span class="cstat-no" title="statement not covered" > margin: 0;</span>
|
|
1783
|
+
<span class="cstat-no" title="statement not covered" > color: var(--ion-color-medium-shade);</span>
|
|
1784
|
+
<span class="cstat-no" title="statement not covered" > font-size: 0.875rem;</span>
|
|
1785
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1786
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1787
|
+
<span class="cstat-no" title="statement not covered" > .qr-wrapper {</span>
|
|
1788
|
+
<span class="cstat-no" title="statement not covered" > display: flex;</span>
|
|
1789
|
+
<span class="cstat-no" title="statement not covered" > justify-content: center;</span>
|
|
1790
|
+
<span class="cstat-no" title="statement not covered" > padding: 1rem;</span>
|
|
1791
|
+
<span class="cstat-no" title="statement not covered" > background: white;</span>
|
|
1792
|
+
<span class="cstat-no" title="statement not covered" > border-radius: 12px;</span>
|
|
1793
|
+
<span class="cstat-no" title="statement not covered" > box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);</span>
|
|
1794
|
+
<span class="cstat-no" title="statement not covered" > margin-bottom: 1rem;</span>
|
|
1795
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1796
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1797
|
+
<span class="cstat-no" title="statement not covered" > .qr-meta {</span>
|
|
1798
|
+
<span class="cstat-no" title="statement not covered" > display: flex;</span>
|
|
1799
|
+
<span class="cstat-no" title="statement not covered" > justify-content: center;</span>
|
|
1800
|
+
<span class="cstat-no" title="statement not covered" > align-items: center;</span>
|
|
1801
|
+
<span class="cstat-no" title="statement not covered" > gap: 1rem;</span>
|
|
1802
|
+
<span class="cstat-no" title="statement not covered" > margin-bottom: 1rem;</span>
|
|
1803
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1804
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1805
|
+
<span class="cstat-no" title="statement not covered" > .countdown {</span>
|
|
1806
|
+
<span class="cstat-no" title="statement not covered" > display: flex;</span>
|
|
1807
|
+
<span class="cstat-no" title="statement not covered" > align-items: center;</span>
|
|
1808
|
+
<span class="cstat-no" title="statement not covered" > gap: 0.25rem;</span>
|
|
1809
|
+
<span class="cstat-no" title="statement not covered" > padding: 0.25rem 0.75rem;</span>
|
|
1810
|
+
<span class="cstat-no" title="statement not covered" > background: var(--ion-color-light);</span>
|
|
1811
|
+
<span class="cstat-no" title="statement not covered" > border-radius: 1rem;</span>
|
|
1812
|
+
<span class="cstat-no" title="statement not covered" > font-size: 0.875rem;</span>
|
|
1813
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1814
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1815
|
+
<span class="cstat-no" title="statement not covered" > .countdown.warning {</span>
|
|
1816
|
+
<span class="cstat-no" title="statement not covered" > background: var(--ion-color-warning-tint);</span>
|
|
1817
|
+
<span class="cstat-no" title="statement not covered" > color: var(--ion-color-warning-shade);</span>
|
|
1818
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1819
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1820
|
+
<span class="cstat-no" title="statement not covered" > .instructions {</span>
|
|
1821
|
+
<span class="cstat-no" title="statement not covered" > margin-bottom: 1rem;</span>
|
|
1822
|
+
<span class="cstat-no" title="statement not covered" > width: 100%;</span>
|
|
1823
|
+
<span class="cstat-no" title="statement not covered" > max-width: 300px;</span>
|
|
1824
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1825
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1826
|
+
<span class="cstat-no" title="statement not covered" > .instructions ol {</span>
|
|
1827
|
+
<span class="cstat-no" title="statement not covered" > text-align: left;</span>
|
|
1828
|
+
<span class="cstat-no" title="statement not covered" > padding-left: 1.25rem;</span>
|
|
1829
|
+
<span class="cstat-no" title="statement not covered" > margin: 0;</span>
|
|
1830
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1831
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1832
|
+
<span class="cstat-no" title="statement not covered" > .instructions li {</span>
|
|
1833
|
+
<span class="cstat-no" title="statement not covered" > margin-bottom: 0.5rem;</span>
|
|
1834
|
+
<span class="cstat-no" title="statement not covered" > color: var(--ion-color-medium-shade);</span>
|
|
1835
|
+
<span class="cstat-no" title="statement not covered" > font-size: 0.875rem;</span>
|
|
1836
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1837
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1838
|
+
<span class="cstat-no" title="statement not covered" > .state-panel {</span>
|
|
1839
|
+
<span class="cstat-no" title="statement not covered" > display: flex;</span>
|
|
1840
|
+
<span class="cstat-no" title="statement not covered" > flex-direction: column;</span>
|
|
1841
|
+
<span class="cstat-no" title="statement not covered" > align-items: center;</span>
|
|
1842
|
+
<span class="cstat-no" title="statement not covered" > justify-content: center;</span>
|
|
1843
|
+
<span class="cstat-no" title="statement not covered" > gap: 1rem;</span>
|
|
1844
|
+
<span class="cstat-no" title="statement not covered" > flex: 1;</span>
|
|
1845
|
+
<span class="cstat-no" title="statement not covered" > text-align: center;</span>
|
|
1846
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1847
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1848
|
+
<span class="cstat-no" title="statement not covered" > .state-panel ion-spinner {</span>
|
|
1849
|
+
<span class="cstat-no" title="statement not covered" > width: 48px;</span>
|
|
1850
|
+
<span class="cstat-no" title="statement not covered" > height: 48px;</span>
|
|
1851
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1852
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1853
|
+
<span class="cstat-no" title="statement not covered" > .state-panel ion-icon {</span>
|
|
1854
|
+
<span class="cstat-no" title="statement not covered" > font-size: 64px;</span>
|
|
1855
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1856
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1857
|
+
<span class="cstat-no" title="statement not covered" > /* Waiting States */</span>
|
|
1858
|
+
<span class="cstat-no" title="statement not covered" > .waiting,</span>
|
|
1859
|
+
<span class="cstat-no" title="statement not covered" > .waiting-approval {</span>
|
|
1860
|
+
<span class="cstat-no" title="statement not covered" > padding: 1.5rem;</span>
|
|
1861
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1862
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1863
|
+
<span class="cstat-no" title="statement not covered" > .waiting h3,</span>
|
|
1864
|
+
<span class="cstat-no" title="statement not covered" > .waiting-approval h3 {</span>
|
|
1865
|
+
<span class="cstat-no" title="statement not covered" > margin: 0 0 0.5rem 0;</span>
|
|
1866
|
+
<span class="cstat-no" title="statement not covered" > font-size: 1.25rem;</span>
|
|
1867
|
+
<span class="cstat-no" title="statement not covered" > font-weight: 600;</span>
|
|
1868
|
+
<span class="cstat-no" title="statement not covered" > color: var(--ion-color-primary);</span>
|
|
1869
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1870
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1871
|
+
<span class="cstat-no" title="statement not covered" > .waiting-description {</span>
|
|
1872
|
+
<span class="cstat-no" title="statement not covered" > color: var(--ion-color-medium-shade);</span>
|
|
1873
|
+
<span class="cstat-no" title="statement not covered" > font-size: 0.9rem;</span>
|
|
1874
|
+
<span class="cstat-no" title="statement not covered" > margin-bottom: 1.5rem;</span>
|
|
1875
|
+
<span class="cstat-no" title="statement not covered" > max-width: 280px;</span>
|
|
1876
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1877
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1878
|
+
<span class="cstat-no" title="statement not covered" > .waiting-icon-wrapper {</span>
|
|
1879
|
+
<span class="cstat-no" title="statement not covered" > width: 80px;</span>
|
|
1880
|
+
<span class="cstat-no" title="statement not covered" > height: 80px;</span>
|
|
1881
|
+
<span class="cstat-no" title="statement not covered" > border-radius: 50%;</span>
|
|
1882
|
+
<span class="cstat-no" title="statement not covered" > background: var(--ion-color-primary-tint);</span>
|
|
1883
|
+
<span class="cstat-no" title="statement not covered" > display: flex;</span>
|
|
1884
|
+
<span class="cstat-no" title="statement not covered" > align-items: center;</span>
|
|
1885
|
+
<span class="cstat-no" title="statement not covered" > justify-content: center;</span>
|
|
1886
|
+
<span class="cstat-no" title="statement not covered" > margin-bottom: 1rem;</span>
|
|
1887
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1888
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1889
|
+
<span class="cstat-no" title="statement not covered" > .waiting-icon-wrapper ion-spinner {</span>
|
|
1890
|
+
<span class="cstat-no" title="statement not covered" > width: 40px;</span>
|
|
1891
|
+
<span class="cstat-no" title="statement not covered" > height: 40px;</span>
|
|
1892
|
+
<span class="cstat-no" title="statement not covered" > --color: var(--ion-color-primary);</span>
|
|
1893
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1894
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1895
|
+
<span class="cstat-no" title="statement not covered" > .waiting-steps {</span>
|
|
1896
|
+
<span class="cstat-no" title="statement not covered" > display: flex;</span>
|
|
1897
|
+
<span class="cstat-no" title="statement not covered" > flex-direction: column;</span>
|
|
1898
|
+
<span class="cstat-no" title="statement not covered" > gap: 0.75rem;</span>
|
|
1899
|
+
<span class="cstat-no" title="statement not covered" > padding: 1rem;</span>
|
|
1900
|
+
<span class="cstat-no" title="statement not covered" > background: var(--ion-color-light);</span>
|
|
1901
|
+
<span class="cstat-no" title="statement not covered" > border-radius: 12px;</span>
|
|
1902
|
+
<span class="cstat-no" title="statement not covered" > width: 100%;</span>
|
|
1903
|
+
<span class="cstat-no" title="statement not covered" > max-width: 280px;</span>
|
|
1904
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1905
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1906
|
+
<span class="cstat-no" title="statement not covered" > .waiting-step {</span>
|
|
1907
|
+
<span class="cstat-no" title="statement not covered" > display: flex;</span>
|
|
1908
|
+
<span class="cstat-no" title="statement not covered" > align-items: center;</span>
|
|
1909
|
+
<span class="cstat-no" title="statement not covered" > gap: 0.75rem;</span>
|
|
1910
|
+
<span class="cstat-no" title="statement not covered" > font-size: 0.875rem;</span>
|
|
1911
|
+
<span class="cstat-no" title="statement not covered" > color: var(--ion-color-medium-shade);</span>
|
|
1912
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1913
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1914
|
+
<span class="cstat-no" title="statement not covered" > .waiting-step .step-check {</span>
|
|
1915
|
+
<span class="cstat-no" title="statement not covered" > width: 20px;</span>
|
|
1916
|
+
<span class="cstat-no" title="statement not covered" > height: 20px;</span>
|
|
1917
|
+
<span class="cstat-no" title="statement not covered" > border-radius: 50%;</span>
|
|
1918
|
+
<span class="cstat-no" title="statement not covered" > background: var(--ion-color-success);</span>
|
|
1919
|
+
<span class="cstat-no" title="statement not covered" > color: white;</span>
|
|
1920
|
+
<span class="cstat-no" title="statement not covered" > font-size: 0.75rem;</span>
|
|
1921
|
+
<span class="cstat-no" title="statement not covered" > display: flex;</span>
|
|
1922
|
+
<span class="cstat-no" title="statement not covered" > align-items: center;</span>
|
|
1923
|
+
<span class="cstat-no" title="statement not covered" > justify-content: center;</span>
|
|
1924
|
+
<span class="cstat-no" title="statement not covered" > flex-shrink: 0;</span>
|
|
1925
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1926
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1927
|
+
<span class="cstat-no" title="statement not covered" > .waiting-step.active {</span>
|
|
1928
|
+
<span class="cstat-no" title="statement not covered" > color: var(--ion-color-primary);</span>
|
|
1929
|
+
<span class="cstat-no" title="statement not covered" > font-weight: 500;</span>
|
|
1930
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1931
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1932
|
+
<span class="cstat-no" title="statement not covered" > .waiting-step.active ion-spinner {</span>
|
|
1933
|
+
<span class="cstat-no" title="statement not covered" > width: 20px;</span>
|
|
1934
|
+
<span class="cstat-no" title="statement not covered" > height: 20px;</span>
|
|
1935
|
+
<span class="cstat-no" title="statement not covered" > --color: var(--ion-color-primary);</span>
|
|
1936
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1937
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1938
|
+
<span class="cstat-no" title="statement not covered" > .footer-actions {</span>
|
|
1939
|
+
<span class="cstat-no" title="statement not covered" > margin-top: auto;</span>
|
|
1940
|
+
<span class="cstat-no" title="statement not covered" > padding-top: 1rem;</span>
|
|
1941
|
+
<span class="cstat-no" title="statement not covered" > border-top: 1px solid var(--ion-color-light);</span>
|
|
1942
|
+
<span class="cstat-no" title="statement not covered" > display: flex;</span>
|
|
1943
|
+
<span class="cstat-no" title="statement not covered" > justify-content: center;</span>
|
|
1944
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1945
|
+
<span class="cstat-no" title="statement not covered" > `,</span>
|
|
1946
|
+
<span class="cstat-no" title="statement not covered" > ],</span>
|
|
1947
|
+
<span class="cstat-no" title="statement not covered" >})</span>
|
|
1948
|
+
<span class="cstat-no" title="statement not covered" >export class QrPairingStepComponent implements AfterViewInit, OnChanges, OnDestroy {</span>
|
|
1949
|
+
<span class="cstat-no" title="statement not covered" > private readonly logger = inject(LoggerService).scoped('QrPairingStep');</span>
|
|
1950
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1951
|
+
<span class="cstat-no" title="statement not covered" > /**</span>
|
|
1952
|
+
<span class="cstat-no" title="statement not covered" > * The encoded offer data to display as QR code (hsc:connect?i=...)</span>
|
|
1953
|
+
<span class="cstat-no" title="statement not covered" > */</span>
|
|
1954
|
+
<span class="cstat-no" title="statement not covered" > @Input() offerData: string = '';</span>
|
|
1955
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1956
|
+
<span class="cstat-no" title="statement not covered" > /**</span>
|
|
1957
|
+
<span class="cstat-no" title="statement not covered" > * App name to display in instructions</span>
|
|
1958
|
+
<span class="cstat-no" title="statement not covered" > */</span>
|
|
1959
|
+
<span class="cstat-no" title="statement not covered" > @Input() appName: string = 'This app';</span>
|
|
1960
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1961
|
+
<span class="cstat-no" title="statement not covered" > /**</span>
|
|
1962
|
+
<span class="cstat-no" title="statement not covered" > * Whether currently loading/generating the offer</span>
|
|
1963
|
+
<span class="cstat-no" title="statement not covered" > */</span>
|
|
1964
|
+
<span class="cstat-no" title="statement not covered" > @Input() isLoading: boolean = false;</span>
|
|
1965
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1966
|
+
<span class="cstat-no" title="statement not covered" > /**</span>
|
|
1967
|
+
<span class="cstat-no" title="statement not covered" > * Whether waiting for wallet to connect via Nostr</span>
|
|
1968
|
+
<span class="cstat-no" title="statement not covered" > */</span>
|
|
1969
|
+
<span class="cstat-no" title="statement not covered" > @Input() isWaitingForWallet: boolean = false;</span>
|
|
1970
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1971
|
+
<span class="cstat-no" title="statement not covered" > /**</span>
|
|
1972
|
+
<span class="cstat-no" title="statement not covered" > * Whether waiting for wallet user to approve the session</span>
|
|
1973
|
+
<span class="cstat-no" title="statement not covered" > */</span>
|
|
1974
|
+
<span class="cstat-no" title="statement not covered" > @Input() isWaitingForApproval: boolean = false;</span>
|
|
1975
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1976
|
+
<span class="cstat-no" title="statement not covered" > /**</span>
|
|
1977
|
+
<span class="cstat-no" title="statement not covered" > * Error message if any</span>
|
|
1978
|
+
<span class="cstat-no" title="statement not covered" > */</span>
|
|
1979
|
+
<span class="cstat-no" title="statement not covered" > @Input() errorMessage: string | null = null;</span>
|
|
1980
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1981
|
+
<span class="cstat-no" title="statement not covered" > /**</span>
|
|
1982
|
+
<span class="cstat-no" title="statement not covered" > * Expiry time in seconds for the QR code</span>
|
|
1983
|
+
<span class="cstat-no" title="statement not covered" > */</span>
|
|
1984
|
+
<span class="cstat-no" title="statement not covered" > @Input() expirySeconds: number = 120;</span>
|
|
1985
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1986
|
+
<span class="cstat-no" title="statement not covered" > /**</span>
|
|
1987
|
+
<span class="cstat-no" title="statement not covered" > * Emitted when QR code expires</span>
|
|
1988
|
+
<span class="cstat-no" title="statement not covered" > */</span>
|
|
1989
|
+
<span class="cstat-no" title="statement not covered" > @Output() expired = new EventEmitter<void>();</span>
|
|
1990
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1991
|
+
<span class="cstat-no" title="statement not covered" > /**</span>
|
|
1992
|
+
<span class="cstat-no" title="statement not covered" > * Emitted when connection is established</span>
|
|
1993
|
+
<span class="cstat-no" title="statement not covered" > */</span>
|
|
1994
|
+
<span class="cstat-no" title="statement not covered" > @Output() connected = new EventEmitter<void>();</span>
|
|
1995
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1996
|
+
<span class="cstat-no" title="statement not covered" > /**</span>
|
|
1997
|
+
<span class="cstat-no" title="statement not covered" > * Emitted when user cancels/goes back</span>
|
|
1998
|
+
<span class="cstat-no" title="statement not covered" > */</span>
|
|
1999
|
+
<span class="cstat-no" title="statement not covered" > @Output() cancelled = new EventEmitter<void>();</span>
|
|
2000
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
2001
|
+
<span class="cstat-no" title="statement not covered" > /**</span>
|
|
2002
|
+
<span class="cstat-no" title="statement not covered" > * Emitted when user requests refresh</span>
|
|
2003
|
+
<span class="cstat-no" title="statement not covered" > */</span>
|
|
2004
|
+
<span class="cstat-no" title="statement not covered" > @Output() refreshRequested = new EventEmitter<void>();</span>
|
|
2005
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
2006
|
+
<span class="cstat-no" title="statement not covered" > @ViewChild('qrCanvas') qrCanvas?: ElementRef<HTMLCanvasElement>;</span>
|
|
2007
|
+
<span class="cstat-no" title="statement not covered" > @ViewChild('qrCanvasDisplay') qrCanvasDisplay?: ElementRef<HTMLCanvasElement>;</span>
|
|
2008
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
2009
|
+
<span class="cstat-no" title="statement not covered" > // Internal state</span>
|
|
2010
|
+
<span class="cstat-no" title="statement not covered" > readonly pairingState = signal<QrPairingState>('loading');</span>
|
|
2011
|
+
<span class="cstat-no" title="statement not covered" > readonly countdown = signal<number>(120);</span>
|
|
2012
|
+
<span class="cstat-no" title="statement not covered" > readonly copied = signal<boolean>(false);</span>
|
|
2013
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
2014
|
+
<span class="cstat-no" title="statement not covered" > private countdownInterval?: ReturnType<typeof setInterval>;</span>
|
|
2015
|
+
<span class="cstat-no" title="statement not covered" > private viewReady = false;</span>
|
|
2016
|
+
<span class="cstat-no" title="statement not covered" > private pendingQrGeneration = false;</span>
|
|
2017
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
2018
|
+
<span class="cstat-no" title="statement not covered" > /**</span>
|
|
2019
|
+
<span class="cstat-no" title="statement not covered" > *</span>
|
|
2020
|
+
<span class="cstat-no" title="statement not covered" > */</span>
|
|
2021
|
+
<span class="cstat-no" title="statement not covered" > constructor() {</span>
|
|
2022
|
+
<span class="cstat-no" title="statement not covered" > addIcons({</span>
|
|
2023
|
+
<span class="cstat-no" title="statement not covered" > qrCodeOutline,</span>
|
|
2024
|
+
<span class="cstat-no" title="statement not covered" > refreshOutline,</span>
|
|
2025
|
+
<span class="cstat-no" title="statement not covered" > checkmarkCircleOutline,</span>
|
|
2026
|
+
<span class="cstat-no" title="statement not covered" > closeCircleOutline,</span>
|
|
2027
|
+
<span class="cstat-no" title="statement not covered" > phonePortraitOutline,</span>
|
|
2028
|
+
<span class="cstat-no" title="statement not covered" > arrowBackOutline,</span>
|
|
2029
|
+
<span class="cstat-no" title="statement not covered" > timeOutline,</span>
|
|
2030
|
+
<span class="cstat-no" title="statement not covered" > copyOutline,</span>
|
|
2031
|
+
<span class="cstat-no" title="statement not covered" > checkmarkOutline,</span>
|
|
2032
|
+
<span class="cstat-no" title="statement not covered" > });</span>
|
|
2033
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2034
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
2035
|
+
<span class="cstat-no" title="statement not covered" > /**</span>
|
|
2036
|
+
<span class="cstat-no" title="statement not covered" > *</span>
|
|
2037
|
+
<span class="cstat-no" title="statement not covered" > */</span>
|
|
2038
|
+
<span class="cstat-no" title="statement not covered" > ngAfterViewInit(): void {</span>
|
|
2039
|
+
<span class="cstat-no" title="statement not covered" > this.viewReady = true;</span>
|
|
2040
|
+
<span class="cstat-no" title="statement not covered" > // Generate QR if we have pending data</span>
|
|
2041
|
+
<span class="cstat-no" title="statement not covered" > if (this.pendingQrGeneration && this.offerData) {</span>
|
|
2042
|
+
<span class="cstat-no" title="statement not covered" > void this.generateQRCode(this.offerData);</span>
|
|
2043
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2044
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2045
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
2046
|
+
<span class="cstat-no" title="statement not covered" > /**</span>
|
|
2047
|
+
<span class="cstat-no" title="statement not covered" > *</span>
|
|
2048
|
+
<span class="cstat-no" title="statement not covered" > * @param changes</span>
|
|
2049
|
+
<span class="cstat-no" title="statement not covered" > */</span>
|
|
2050
|
+
<span class="cstat-no" title="statement not covered" > ngOnChanges(changes: SimpleChanges): void {</span>
|
|
2051
|
+
<span class="cstat-no" title="statement not covered" > // Update state based on inputs</span>
|
|
2052
|
+
<span class="cstat-no" title="statement not covered" > if (</span>
|
|
2053
|
+
<span class="cstat-no" title="statement not covered" > changes['isLoading'] ||</span>
|
|
2054
|
+
<span class="cstat-no" title="statement not covered" > changes['isWaitingForWallet'] ||</span>
|
|
2055
|
+
<span class="cstat-no" title="statement not covered" > changes['isWaitingForApproval'] ||</span>
|
|
2056
|
+
<span class="cstat-no" title="statement not covered" > changes['offerData'] ||</span>
|
|
2057
|
+
<span class="cstat-no" title="statement not covered" > changes['errorMessage']</span>
|
|
2058
|
+
<span class="cstat-no" title="statement not covered" > ) {</span>
|
|
2059
|
+
<span class="cstat-no" title="statement not covered" > this.updateState();</span>
|
|
2060
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2061
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
2062
|
+
<span class="cstat-no" title="statement not covered" > if (changes['offerData'] && this.offerData) {</span>
|
|
2063
|
+
<span class="cstat-no" title="statement not covered" > if (this.viewReady) {</span>
|
|
2064
|
+
<span class="cstat-no" title="statement not covered" > void this.generateQRCode(this.offerData);</span>
|
|
2065
|
+
<span class="cstat-no" title="statement not covered" > } else {</span>
|
|
2066
|
+
<span class="cstat-no" title="statement not covered" > this.pendingQrGeneration = true;</span>
|
|
2067
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2068
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2069
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
2070
|
+
<span class="cstat-no" title="statement not covered" > if (changes['expirySeconds']) {</span>
|
|
2071
|
+
<span class="cstat-no" title="statement not covered" > this.countdown.set(this.expirySeconds);</span>
|
|
2072
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2073
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2074
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
2075
|
+
<span class="cstat-no" title="statement not covered" > /**</span>
|
|
2076
|
+
<span class="cstat-no" title="statement not covered" > *</span>
|
|
2077
|
+
<span class="cstat-no" title="statement not covered" > */</span>
|
|
2078
|
+
<span class="cstat-no" title="statement not covered" > ngOnDestroy(): void {</span>
|
|
2079
|
+
<span class="cstat-no" title="statement not covered" > this.stopCountdown();</span>
|
|
2080
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2081
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
2082
|
+
<span class="cstat-no" title="statement not covered" > /**</span>
|
|
2083
|
+
<span class="cstat-no" title="statement not covered" > * Format countdown for display (MM:SS)</span>
|
|
2084
|
+
<span class="cstat-no" title="statement not covered" > */</span>
|
|
2085
|
+
<span class="cstat-no" title="statement not covered" > formatCountdown(): string {</span>
|
|
2086
|
+
<span class="cstat-no" title="statement not covered" > const seconds = this.countdown();</span>
|
|
2087
|
+
<span class="cstat-no" title="statement not covered" > const mins = Math.floor(seconds / 60);</span>
|
|
2088
|
+
<span class="cstat-no" title="statement not covered" > const secs = seconds % 60;</span>
|
|
2089
|
+
<span class="cstat-no" title="statement not covered" > return `${mins}:${secs.toString().padStart(2, '0')}`;</span>
|
|
2090
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2091
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
2092
|
+
<span class="cstat-no" title="statement not covered" > /**</span>
|
|
2093
|
+
<span class="cstat-no" title="statement not covered" > * Handle QR code expiry</span>
|
|
2094
|
+
<span class="cstat-no" title="statement not covered" > */</span>
|
|
2095
|
+
<span class="cstat-no" title="statement not covered" > onQrExpired(): void {</span>
|
|
2096
|
+
<span class="cstat-no" title="statement not covered" > this.pairingState.set('expired');</span>
|
|
2097
|
+
<span class="cstat-no" title="statement not covered" > this.expired.emit();</span>
|
|
2098
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2099
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
2100
|
+
<span class="cstat-no" title="statement not covered" > /**</span>
|
|
2101
|
+
<span class="cstat-no" title="statement not covered" > * Request a new QR code</span>
|
|
2102
|
+
<span class="cstat-no" title="statement not covered" > */</span>
|
|
2103
|
+
<span class="cstat-no" title="statement not covered" > refresh(): void {</span>
|
|
2104
|
+
<span class="cstat-no" title="statement not covered" > this.pairingState.set('loading');</span>
|
|
2105
|
+
<span class="cstat-no" title="statement not covered" > this.refreshRequested.emit();</span>
|
|
2106
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2107
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
2108
|
+
<span class="cstat-no" title="statement not covered" > /**</span>
|
|
2109
|
+
<span class="cstat-no" title="statement not covered" > * Go back / cancel</span>
|
|
2110
|
+
<span class="cstat-no" title="statement not covered" > */</span>
|
|
2111
|
+
<span class="cstat-no" title="statement not covered" > cancel(): void {</span>
|
|
2112
|
+
<span class="cstat-no" title="statement not covered" > this.cancelled.emit();</span>
|
|
2113
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2114
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
2115
|
+
<span class="cstat-no" title="statement not covered" > /**</span>
|
|
2116
|
+
<span class="cstat-no" title="statement not covered" > * Copy the offer URI to clipboard</span>
|
|
2117
|
+
<span class="cstat-no" title="statement not covered" > */</span>
|
|
2118
|
+
<span class="cstat-no" title="statement not covered" > async copyUri(): Promise<void> {</span>
|
|
2119
|
+
<span class="cstat-no" title="statement not covered" > if (!this.offerData) return;</span>
|
|
2120
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
2121
|
+
<span class="cstat-no" title="statement not covered" > const success = await copyToClipboard(this.offerData);</span>
|
|
2122
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
2123
|
+
<span class="cstat-no" title="statement not covered" > if (success) {</span>
|
|
2124
|
+
<span class="cstat-no" title="statement not covered" > this.copied.set(true);</span>
|
|
2125
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
2126
|
+
<span class="cstat-no" title="statement not covered" > // Reset after 2 seconds</span>
|
|
2127
|
+
<span class="cstat-no" title="statement not covered" > setTimeout(() => {</span>
|
|
2128
|
+
<span class="cstat-no" title="statement not covered" > this.copied.set(false);</span>
|
|
2129
|
+
<span class="cstat-no" title="statement not covered" > }, 2000);</span>
|
|
2130
|
+
<span class="cstat-no" title="statement not covered" > } else {</span>
|
|
2131
|
+
<span class="cstat-no" title="statement not covered" > this.logger.error('Failed to copy URI');</span>
|
|
2132
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2133
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2134
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
2135
|
+
<span class="cstat-no" title="statement not covered" > // ========== Private Methods ==========</span>
|
|
2136
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
2137
|
+
<span class="cstat-no" title="statement not covered" > /**</span>
|
|
2138
|
+
<span class="cstat-no" title="statement not covered" > * Generate QR code with HSuite logo overlay</span>
|
|
2139
|
+
<span class="cstat-no" title="statement not covered" > * @param data</span>
|
|
2140
|
+
<span class="cstat-no" title="statement not covered" > */</span>
|
|
2141
|
+
<span class="cstat-no" title="statement not covered" > private async generateQRCode(data: string): Promise<void> {</span>
|
|
2142
|
+
<span class="cstat-no" title="statement not covered" > const canvas = this.qrCanvas?.nativeElement;</span>
|
|
2143
|
+
<span class="cstat-no" title="statement not covered" > if (!canvas) {</span>
|
|
2144
|
+
<span class="cstat-no" title="statement not covered" > this.logger.warn('Canvas not available for QR generation');</span>
|
|
2145
|
+
<span class="cstat-no" title="statement not covered" > return;</span>
|
|
2146
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2147
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
2148
|
+
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
2149
|
+
<span class="cstat-no" title="statement not covered" > // Generate QR code - session invites are small (~300 bytes), so we can use higher error correction</span>
|
|
2150
|
+
<span class="cstat-no" title="statement not covered" > await QRCode.toCanvas(canvas, data, {</span>
|
|
2151
|
+
<span class="cstat-no" title="statement not covered" > width: 300,</span>
|
|
2152
|
+
<span class="cstat-no" title="statement not covered" > margin: 2,</span>
|
|
2153
|
+
<span class="cstat-no" title="statement not covered" > color: {</span>
|
|
2154
|
+
<span class="cstat-no" title="statement not covered" > dark: '#000000',</span>
|
|
2155
|
+
<span class="cstat-no" title="statement not covered" > light: '#ffffff',</span>
|
|
2156
|
+
<span class="cstat-no" title="statement not covered" > },</span>
|
|
2157
|
+
<span class="cstat-no" title="statement not covered" > errorCorrectionLevel: 'M', // Medium error correction</span>
|
|
2158
|
+
<span class="cstat-no" title="statement not covered" > });</span>
|
|
2159
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
2160
|
+
<span class="cstat-no" title="statement not covered" > // Add HSuite logo in center</span>
|
|
2161
|
+
<span class="cstat-no" title="statement not covered" > const ctx = canvas.getContext('2d');</span>
|
|
2162
|
+
<span class="cstat-no" title="statement not covered" > if (!ctx) return;</span>
|
|
2163
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
2164
|
+
<span class="cstat-no" title="statement not covered" > // Load logo</span>
|
|
2165
|
+
<span class="cstat-no" title="statement not covered" > const logo = new Image();</span>
|
|
2166
|
+
<span class="cstat-no" title="statement not covered" > logo.crossOrigin = 'anonymous';</span>
|
|
2167
|
+
<span class="cstat-no" title="statement not covered" > logo.onload = () => {</span>
|
|
2168
|
+
<span class="cstat-no" title="statement not covered" > // Logo size is 20% of QR code</span>
|
|
2169
|
+
<span class="cstat-no" title="statement not covered" > const logoSize = Math.floor(canvas.width * 0.2);</span>
|
|
2170
|
+
<span class="cstat-no" title="statement not covered" > const logoX = (canvas.width - logoSize) / 2;</span>
|
|
2171
|
+
<span class="cstat-no" title="statement not covered" > const logoY = (canvas.height - logoSize) / 2;</span>
|
|
2172
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
2173
|
+
<span class="cstat-no" title="statement not covered" > // Draw white background circle for logo</span>
|
|
2174
|
+
<span class="cstat-no" title="statement not covered" > const circlePadding = 4;</span>
|
|
2175
|
+
<span class="cstat-no" title="statement not covered" > ctx.fillStyle = '#ffffff';</span>
|
|
2176
|
+
<span class="cstat-no" title="statement not covered" > ctx.beginPath();</span>
|
|
2177
|
+
<span class="cstat-no" title="statement not covered" > ctx.arc(canvas.width / 2, canvas.height / 2, logoSize / 2 + circlePadding, 0, 2 * Math.PI);</span>
|
|
2178
|
+
<span class="cstat-no" title="statement not covered" > ctx.fill();</span>
|
|
2179
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
2180
|
+
<span class="cstat-no" title="statement not covered" > // Draw logo</span>
|
|
2181
|
+
<span class="cstat-no" title="statement not covered" > ctx.drawImage(logo, logoX, logoY, logoSize, logoSize);</span>
|
|
2182
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
2183
|
+
<span class="cstat-no" title="statement not covered" > // Show the QR display and copy to visible canvas</span>
|
|
2184
|
+
<span class="cstat-no" title="statement not covered" > this.pairingState.set('displaying');</span>
|
|
2185
|
+
<span class="cstat-no" title="statement not covered" > this.startCountdown();</span>
|
|
2186
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
2187
|
+
<span class="cstat-no" title="statement not covered" > // Copy to display canvas after a tick</span>
|
|
2188
|
+
<span class="cstat-no" title="statement not covered" > setTimeout(() => this.copyToDisplayCanvas(), 0);</span>
|
|
2189
|
+
<span class="cstat-no" title="statement not covered" > };</span>
|
|
2190
|
+
<span class="cstat-no" title="statement not covered" > logo.onerror = () => {</span>
|
|
2191
|
+
<span class="cstat-no" title="statement not covered" > // Still show QR even without logo</span>
|
|
2192
|
+
<span class="cstat-no" title="statement not covered" > this.pairingState.set('displaying');</span>
|
|
2193
|
+
<span class="cstat-no" title="statement not covered" > this.startCountdown();</span>
|
|
2194
|
+
<span class="cstat-no" title="statement not covered" > setTimeout(() => this.copyToDisplayCanvas(), 0);</span>
|
|
2195
|
+
<span class="cstat-no" title="statement not covered" > };</span>
|
|
2196
|
+
<span class="cstat-no" title="statement not covered" > logo.src = '/assets/hsuite_icon.png';</span>
|
|
2197
|
+
<span class="cstat-no" title="statement not covered" > } catch (error) {</span>
|
|
2198
|
+
<span class="cstat-no" title="statement not covered" > this.logger.error('Failed to generate QR code', {</span>
|
|
2199
|
+
<span class="cstat-no" title="statement not covered" > error: error instanceof Error ? error.message : String(error),</span>
|
|
2200
|
+
<span class="cstat-no" title="statement not covered" > });</span>
|
|
2201
|
+
<span class="cstat-no" title="statement not covered" > this.pairingState.set('error');</span>
|
|
2202
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2203
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2204
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
2205
|
+
<span class="cstat-no" title="statement not covered" > /**</span>
|
|
2206
|
+
<span class="cstat-no" title="statement not covered" > * Copy the generated QR from hidden canvas to display canvas</span>
|
|
2207
|
+
<span class="cstat-no" title="statement not covered" > */</span>
|
|
2208
|
+
<span class="cstat-no" title="statement not covered" > private copyToDisplayCanvas(): void {</span>
|
|
2209
|
+
<span class="cstat-no" title="statement not covered" > const srcCanvas = this.qrCanvas?.nativeElement;</span>
|
|
2210
|
+
<span class="cstat-no" title="statement not covered" > const destCanvas = this.qrCanvasDisplay?.nativeElement;</span>
|
|
2211
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
2212
|
+
<span class="cstat-no" title="statement not covered" > if (!srcCanvas || !destCanvas) {</span>
|
|
2213
|
+
<span class="cstat-no" title="statement not covered" > this.logger.warn('Cannot copy to display canvas - missing canvas elements');</span>
|
|
2214
|
+
<span class="cstat-no" title="statement not covered" > return;</span>
|
|
2215
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2216
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
2217
|
+
<span class="cstat-no" title="statement not covered" > const destCtx = destCanvas.getContext('2d');</span>
|
|
2218
|
+
<span class="cstat-no" title="statement not covered" > if (!destCtx) return;</span>
|
|
2219
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
2220
|
+
<span class="cstat-no" title="statement not covered" > destCtx.drawImage(srcCanvas, 0, 0);</span>
|
|
2221
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2222
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
2223
|
+
<span class="cstat-no" title="statement not covered" > /**</span>
|
|
2224
|
+
<span class="cstat-no" title="statement not covered" > * Start countdown timer</span>
|
|
2225
|
+
<span class="cstat-no" title="statement not covered" > */</span>
|
|
2226
|
+
<span class="cstat-no" title="statement not covered" > private startCountdown(): void {</span>
|
|
2227
|
+
<span class="cstat-no" title="statement not covered" > this.stopCountdown();</span>
|
|
2228
|
+
<span class="cstat-no" title="statement not covered" > this.countdown.set(this.expirySeconds);</span>
|
|
2229
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
2230
|
+
<span class="cstat-no" title="statement not covered" > this.countdownInterval = setInterval(() => {</span>
|
|
2231
|
+
<span class="cstat-no" title="statement not covered" > const current = this.countdown();</span>
|
|
2232
|
+
<span class="cstat-no" title="statement not covered" > if (current <= 1) {</span>
|
|
2233
|
+
<span class="cstat-no" title="statement not covered" > this.stopCountdown();</span>
|
|
2234
|
+
<span class="cstat-no" title="statement not covered" > this.onQrExpired();</span>
|
|
2235
|
+
<span class="cstat-no" title="statement not covered" > } else {</span>
|
|
2236
|
+
<span class="cstat-no" title="statement not covered" > this.countdown.set(current - 1);</span>
|
|
2237
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2238
|
+
<span class="cstat-no" title="statement not covered" > }, 1000);</span>
|
|
2239
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2240
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
2241
|
+
<span class="cstat-no" title="statement not covered" > /**</span>
|
|
2242
|
+
<span class="cstat-no" title="statement not covered" > * Stop countdown timer</span>
|
|
2243
|
+
<span class="cstat-no" title="statement not covered" > */</span>
|
|
2244
|
+
<span class="cstat-no" title="statement not covered" > private stopCountdown(): void {</span>
|
|
2245
|
+
<span class="cstat-no" title="statement not covered" > if (this.countdownInterval) {</span>
|
|
2246
|
+
<span class="cstat-no" title="statement not covered" > clearInterval(this.countdownInterval);</span>
|
|
2247
|
+
<span class="cstat-no" title="statement not covered" > this.countdownInterval = undefined;</span>
|
|
2248
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2249
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2250
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
2251
|
+
<span class="cstat-no" title="statement not covered" > /**</span>
|
|
2252
|
+
<span class="cstat-no" title="statement not covered" > * Update internal state based on inputs.</span>
|
|
2253
|
+
<span class="cstat-no" title="statement not covered" > * Priority: error > waiting_approval > waiting_wallet > loading</span>
|
|
2254
|
+
<span class="cstat-no" title="statement not covered" > */</span>
|
|
2255
|
+
<span class="cstat-no" title="statement not covered" > private updateState(): void {</span>
|
|
2256
|
+
<span class="cstat-no" title="statement not covered" > if (this.errorMessage) {</span>
|
|
2257
|
+
<span class="cstat-no" title="statement not covered" > this.pairingState.set('error');</span>
|
|
2258
|
+
<span class="cstat-no" title="statement not covered" > } else if (this.isWaitingForApproval) {</span>
|
|
2259
|
+
<span class="cstat-no" title="statement not covered" > this.pairingState.set('waiting_approval');</span>
|
|
2260
|
+
<span class="cstat-no" title="statement not covered" > } else if (this.isWaitingForWallet) {</span>
|
|
2261
|
+
<span class="cstat-no" title="statement not covered" > this.pairingState.set('waiting_wallet');</span>
|
|
2262
|
+
<span class="cstat-no" title="statement not covered" > } else if (this.isLoading && !this.offerData) {</span>
|
|
2263
|
+
<span class="cstat-no" title="statement not covered" > this.pairingState.set('loading');</span>
|
|
2264
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2265
|
+
<span class="cstat-no" title="statement not covered" > // Note: 'displaying' is set after QR generation completes</span>
|
|
2266
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2267
|
+
<span class="cstat-no" title="statement not covered" >}</span>
|
|
2268
|
+
</pre></td></tr></table></pre>
|
|
2269
|
+
|
|
2270
|
+
<div class='push'></div><!-- for sticky footer -->
|
|
2271
|
+
</div><!-- /wrapper -->
|
|
2272
|
+
<div class='footer quiet pad2 space-top1 center small'>
|
|
2273
|
+
Code coverage generated by
|
|
2274
|
+
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
2275
|
+
at 2026-06-02T14:30:38.257Z
|
|
2276
|
+
</div>
|
|
2277
|
+
<script src="../../../../prettify.js"></script>
|
|
2278
|
+
<script>
|
|
2279
|
+
window.onload = function () {
|
|
2280
|
+
prettyPrint();
|
|
2281
|
+
};
|
|
2282
|
+
</script>
|
|
2283
|
+
<script src="../../../../sorter.js"></script>
|
|
2284
|
+
<script src="../../../../block-navigation.js"></script>
|
|
2285
|
+
</body>
|
|
2286
|
+
</html>
|
|
2287
|
+
|