From 9e72224c23b204c248fe71d890f78a2e55aedf1c Mon Sep 17 00:00:00 2001 From: Tim K Date: Sun, 3 Jul 2022 10:39:30 -0400 Subject: [PATCH] LNPay Core Alpha --- .bowerrc | 3 + .env.example | 64 + .gitattributes | 6 + .github/CONTRIBUTING.md | 7 + .github/ISSUE_TEMPLATE.md | 14 + .github/PULL_REQUEST_TEMPLATE.md | 7 + .github/workflows/main.yml | 15 + .gitignore | 41 + .gitmodules | 0 .travis.yml | 45 + LICENSE | 21 + README.md | 163 + codeception.yml | 36 + composer.json | 100 + composer.lock | 7530 +++++++++++++++++ config/.gitignore | 4 + config/__autocomplete.php | 33 + config/console.php | 40 + config/main.php | 73 + config/params.php | 8 + config/test.php | 176 + config/test_db.php | 10 + config/web.php | 124 + docker-compose.yml | 48 + docker.sh | 64 + docker/cron/lnpay.cron | 4 + docker/lnd/lnd.conf | 84 + .../supervisor/conf.d/yii-queue-worker.conf | 10 + docker/supervisor/supervisord.conf | 32 + docker/tor/torrc_example | 8 + environments/dev/config/console-local.php | 6 + environments/dev/config/main-local.php | 64 + environments/dev/config/web-local.php | 39 + environments/index.php | 59 + environments/prod/config/console-local.php | 6 + environments/prod/config/main-local.php | 52 + environments/prod/config/web-local.php | 44 + environments/prod_init.sh | 22 + init | 221 + init.bat | 20 + polar/LNPay-0.13.0.polar.zip | Bin 0 -> 1022168 bytes polar/README.md | 63 + polar/add_node2.png | Bin 0 -> 212006 bytes polar/polar1.png | Bin 0 -> 234393 bytes requirements.php | 162 + runtime/.gitignore | 5 + runtime/cron/.gitignore | 1 + runtime/node_tls/.gitignore | 1 + runtime/supervisor/.gitignore | 1 + src/LNPay.php | 11 + src/LNPayTrait.php | 15 + src/assets/AppAsset.php | 31 + src/assets/AppSbAsset.php | 31 + src/assets/JsTzAsset.php | 21 + src/assets/PaywallAsset.php | 26 + src/base/ApiController.php | 168 + src/base/DashController.php | 46 + src/behaviors/JsonDataBehavior.php | 235 + src/behaviors/UserAccessKeyBehavior.php | 194 + src/commands/CronController.php | 140 + src/commands/HelloController.php | 221 + src/commands/PlayController.php | 47 + src/commands/RpcListenerController.php | 118 + src/components/ActionComponent.php | 325 + src/components/AnalyticsComponent.php | 41 + src/components/ApiLogTarget.php | 45 + src/components/HelperComponent.php | 253 + src/components/LNPayComponent.php | 70 + src/components/LNPayRequestComponent.php | 25 + src/components/LNPayUrlManager.php | 12 + src/components/MailerComponent.php | 25 + src/components/SupervisorComponent.php | 218 + src/controllers/AccountController.php | 84 + src/controllers/ApiLogController.php | 75 + src/controllers/DashboardController.php | 196 + src/controllers/DistroRouterController.php | 92 + src/controllers/DomainController.php | 101 + src/controllers/HomeController.php | 217 + src/controllers/WebhookController.php | 169 + src/controllers/WebhookReceiverController.php | 82 + src/controllers/v1/ActionNameController.php | 58 + src/controllers/v1/JobController.php | 70 + src/controllers/v1/LntxController.php | 49 + src/controllers/v1/StatusTypeController.php | 50 + src/controllers/v1/UserController.php | 82 + src/controllers/v1/WebhookController.php | 121 + src/events/ActionEvent.php | 57 + .../UnableToStartListenerException.php | 16 + src/exceptions/WalletBusyException.php | 17 + src/formatters/LnPayFormatter.php | 25 + src/helpers/QRImageWithText.php | 99 + src/jobs/AnalyticsLogJob.php | 16 + src/jobs/IntegrationWebhookRequestJob.php | 35 + src/jobs/LnWalletKeysendFormJob.php | 68 + src/jobs/LnWalletLnurlPayFormJob.php | 82 + src/jobs/ProcessLndResponseJob.php | 90 + .../SupervisorRemoveLndRpcConfigFileJob.php | 14 + .../SupervisorUpdateLndRpcConfigFileJob.php | 15 + .../SupervisorWriteLndRpcConfigFileJob.php | 15 + src/mail/layouts/html.php | 22 + src/mail/passwordResetToken-html.php | 15 + src/migrations/m190709_173552_init.php | 89 + src/migrations/m190813_234443_api_parent.php | 46 + .../m191006_214944_custy_domain.php | 76 + src/migrations/m191024_120848_action.php | 69 + src/migrations/m191027_080425_webhook.php | 74 + src/migrations/m191106_225434_faucet.php | 119 + .../m191109_233012_faucet_distro.php | 52 + .../m191120_174352_action_types.php | 42 + src/migrations/m191124_113412_tz.php | 41 + .../m191129_223556_action_cleanup.php | 48 + src/migrations/m191210_233454_wallet.php | 143 + .../m191214_120829_minor_updates.php | 44 + .../m191215_224105_base_wallet_actions.php | 92 + .../m200111_005210_description_hash.php | 42 + .../m200112_221805_webhook_mods.php | 77 + .../m200120_151707_pw_link_type.php | 45 + src/migrations/m200126_005039_api_logger.php | 54 + src/migrations/m200127_105943_keysend.php | 44 + src/migrations/m200127_221736_key_updates.php | 106 + .../m200208_211205_api_log_changes.php | 56 + src/migrations/m200211_113828_usr_hash.php | 42 + src/migrations/m200215_174524_webhook_log.php | 61 + src/migrations/m200219_142429_api_version.php | 42 + src/migrations/m200220_201526_jsonify.php | 57 + .../m200317_165227_key_suspend_role.php | 45 + .../m200318_160034_non_custodial.php | 147 + .../m200327_191800_baselink_user.php | 45 + src/migrations/m200328_131216_yii2queue.php | 70 + .../m200402_155750_rpc_listener.php | 72 + .../m200404_175632_fix_action_id.php | 51 + .../m200406_132737_lnd_rpc_action_names.php | 52 + .../m200407_174604_node_health_actions.php | 48 + .../m200412_143635_base_link_paywall.php | 57 + src/migrations/m200421_152700_wallet_node.php | 51 + src/migrations/m200714_112957_2fa.php | 44 + src/migrations/m200719_162034_lntx_fees.php | 42 + src/migrations/m210221_130834_fee_wallet.php | 50 + src/migrations/m210223_184645_fee_action.php | 45 + src/migrations/m210402_000953_htlcEvent.php | 44 + src/migrations/m210414_152818_wallet_type.php | 66 + .../m210423_153759_lnurl_withdraw_role.php | 60 + .../m210707_194325_node_onchain.php | 48 + src/migrations/m211017_134236_loop.php | 74 + src/migrations/m211228_154357_amp_lntx_db.php | 44 + src/migrations/m211229_135314_lnurlp.php | 208 + .../m220116_141606_wallet_send_failure.php | 47 + .../m220124_143632_lnurlpay_inoutbound.php | 57 + .../m220130_004513_wallet_change_node.php | 44 + .../m220203_170922_utf8mb4_encoding.php | 49 + src/migrations/m220208_011157_org.php | 129 + .../m220225_185302_lnurlpay_domain.php | 44 + src/migrations/m220302_141930_cdomain_id.php | 42 + .../m220426_174013_wallet_external_admin.php | 72 + src/migrations/m230109_155754_wtx_rollup.php | 55 + src/models/BaseLink.php | 228 + src/models/BaseLinkAnalytics.php | 111 + src/models/ChangePasswordForm.php | 68 + src/models/CustyDomain.php | 172 + src/models/DistroMethod.php | 88 + src/models/LinkType.php | 60 + src/models/LnTx.php | 476 ++ src/models/LoginForm.php | 90 + src/models/PasswordResetRequestForm.php | 60 + src/models/ResetPasswordForm.php | 64 + src/models/SignupForm.php | 96 + src/models/StatusType.php | 137 + src/models/User.php | 694 ++ src/models/UserAccessKey.php | 106 + src/models/action/ActionData.php | 55 + src/models/action/ActionFeed.php | 159 + src/models/action/ActionName.php | 121 + src/models/integration/IntegrationService.php | 62 + src/models/integration/IntegrationWebhook.php | 197 + .../integration/IntegrationWebhookRequest.php | 140 + .../integration/IntegrationWebhookSearch.php | 81 + src/models/integration/WebhookTestForm.php | 31 + src/models/log/UserApiLog.php | 93 + src/models/log/UserApiLogSearch.php | 89 + src/node/Module.php | 68 + src/node/components/LnBaseNodeClass.php | 17 + src/node/components/LnBaseNodeInterface.php | 20 + src/node/components/LnMacaroonObject.php | 231 + src/node/components/LndNodeConnector.php | 651 ++ .../controllers/AuthprofileController.php | 135 + src/node/controllers/BaseNodeController.php | 44 + src/node/controllers/DashboardController.php | 202 + src/node/controllers/LnController.php | 166 + src/node/controllers/RpcController.php | 94 + .../controllers/api/v1/EventsController.php | 142 + .../controllers/api/v1/LnNodeController.php | 101 + .../controllers/api/v1/LncliController.php | 63 + .../controllers/api/v1/NodeApiController.php | 56 + .../controllers/api/v1/PaymentsController.php | 36 + .../MacaroonNotGeneratedYetException.php | 18 + .../UnableToBakeMacaroonException.php | 18 + .../UnableToCreateInvoiceException.php | 18 + .../UnableToDecodeInvoiceException.php | 18 + .../UnableToGetChannelBalanceException.php | 18 + .../UnableToGetNewAddressException.php | 18 + .../UnableToGetWalletBalanceException.php | 18 + .../UnableToListChannelsException.php | 18 + .../UnableToLookupInvoiceException.php | 18 + .../UnableToPayInvoiceException.php | 18 + .../UnableToQueryRoutesException.php | 18 + .../UnableToSendKeysendException.php | 18 + .../fixtures/LnNodeDefaultWalletsFixture.php | 12 + src/node/fixtures/LnNodeFixture.php | 15 + .../fixtures/LnNodeImplementationFixture.php | 12 + src/node/fixtures/LnNodeProfileFixture.php | 12 + src/node/fixtures/_data/ln_node.php | 148 + .../_data/ln_node_default_wallets.php | 70 + .../fixtures/_data/ln_node_implementation.php | 9 + src/node/fixtures/_data/ln_node_profile.php | 37 + src/node/models/LnNode.php | 684 ++ src/node/models/LnNodeImplementation.php | 75 + src/node/models/LnNodeProfile.php | 181 + src/node/models/LnNodeProfileSearch.php | 78 + src/node/models/LnNodeSearch.php | 81 + src/node/models/NodeAddForm.php | 356 + src/node/models/NodeCreateForm.php | 89 + src/node/models/NodeListener.php | 291 + .../models/analytics/HtlcEventQueryForm.php | 59 + src/node/views/_nav-node-index.php | 14 + src/node/views/_nav-node.php | 37 + src/node/views/authprofile/_form.php | 69 + src/node/views/authprofile/_search.php | 51 + src/node/views/authprofile/create.php | 20 + src/node/views/authprofile/index.php | 43 + src/node/views/authprofile/update.php | 21 + src/node/views/authprofile/view.php | 43 + src/node/views/dashboard/_form-create.php | 26 + src/node/views/dashboard/_form-lndconnect.php | 70 + src/node/views/dashboard/_form.php | 99 + .../views/dashboard/_node-accordion-pane.php | 9 + src/node/views/dashboard/_search.php | 55 + src/node/views/dashboard/add.php | 21 + src/node/views/dashboard/create.php | 26 + src/node/views/dashboard/index.php | 60 + src/node/views/dashboard/provisioning.php | 21 + src/node/views/dashboard/update.php | 21 + src/node/views/ln/_connect-base64.php | 10 + src/node/views/ln/_connect-files.php | 0 src/node/views/ln/_connect-hex.php | 10 + src/node/views/ln/_connect-lndconnect.php | 12 + src/node/views/ln/_node-details.php | 63 + src/node/views/ln/connect.php | 56 + src/node/views/ln/network_fees.php | 44 + src/node/views/ln/node.php | 95 + src/node/views/ln/onchain.php | 35 + src/node/views/ln/settings.php | 27 + src/node/views/rpc/_rpc-listeners-item.php | 48 + src/node/views/rpc/rpc-forwarder.php | 47 + src/node/views/rpc/rpc-listeners.php | 85 + src/org/Module.php | 54 + src/org/controllers/BaseOrgController.php | 31 + src/org/controllers/HomeController.php | 43 + src/org/models/Org.php | 110 + src/org/models/OrgUserType.php | 63 + src/org/views/_nav-org.php | 16 + src/org/views/home/index.php | 31 + src/org/views/home/members.php | 22 + src/views/account/_change-password.php | 46 + src/views/account/account-index.php | 42 + src/views/account/mfa.php | 31 + src/views/account/product.php | 41 + src/views/api-log/_search.php | 58 + src/views/api-log/index.php | 56 + src/views/api-log/view.php | 44 + src/views/dashboard/_faucet-grid.php | 86 + src/views/dashboard/_invoices-breakdown.php | 45 + src/views/dashboard/_layouts.php | 48 + src/views/dashboard/_link-breakdown.php | 59 + src/views/dashboard/_link-totals.php | 75 + src/views/dashboard/_withdraw.php | 27 + .../dashboard/_withdrawals-breakdown.php | 40 + src/views/dashboard/advanced-wallets.php | 59 + src/views/dashboard/developers.php | 15 + src/views/dashboard/events.php | 38 + src/views/dashboard/faucets.php | 22 + src/views/dashboard/home.php | 219 + src/views/dashboard/home_old.php | 71 + src/views/dashboard/layouts.php | 18 + src/views/dashboard/paywalls.php | 28 + src/views/distro-router/details/_api.php | 1 + src/views/distro-router/details/_email.php | 3 + src/views/distro-router/details/_image.php | 4 + src/views/distro-router/details/_ln_uri.php | 2 + src/views/distro-router/details/_print.php | 5 + .../distro-router/details/_raw_lnurl.php | 8 + src/views/distro-router/details/_web.php | 4 + src/views/domain/_form.php | 42 + src/views/domain/create.php | 19 + src/views/domain/index.php | 34 + src/views/home/_login-form.php | 31 + src/views/home/_signup-form.php | 30 + src/views/home/error.php | 27 + src/views/home/index.php | 37 + src/views/home/login.php | 29 + src/views/home/mfa-verify.php | 20 + src/views/home/requestPasswordResetToken.php | 31 + src/views/home/resetPassword.php | 31 + src/views/home/signup.php | 31 + src/views/layouts/_footer.php | 20 + src/views/layouts/_header.php | 1 + src/views/layouts/main.php | 167 + src/views/layouts/public.php | 90 + src/views/layouts/sb-admin/content.php | 47 + src/views/layouts/sb-admin/footer.php | 10 + .../layouts/sb-admin/guest/header-guest.php | 28 + .../layouts/sb-admin/guest/main-guest.php | 67 + src/views/layouts/sb-admin/header.php | 196 + src/views/layouts/sb-admin/main.php | 72 + src/views/layouts/sb-admin/sidebar.php | 198 + src/views/layouts/sidebar/__base_sidebar.php | 17 + src/views/layouts/sidebar/_nav-account.php | 42 + src/views/layouts/sidebar/_nav-developers.php | 16 + src/views/webhook/_form.php | 99 + src/views/webhook/_requests-pane-request.php | 6 + src/views/webhook/_requests-pane-response.php | 3 + src/views/webhook/_requests-pane.php | 29 + src/views/webhook/_requests.php | 21 + src/views/webhook/_search.php | 53 + src/views/webhook/create.php | 21 + src/views/webhook/index.php | 82 + src/views/webhook/update.php | 21 + src/views/webhook/view.php | 25 + src/wallet/Module.php | 101 + src/wallet/controllers/WalletController.php | 273 + .../WalletTransactionController.php | 129 + .../controllers/api/v1/LnurlpayController.php | 262 + .../controllers/api/v1/WalletController.php | 378 + .../api/v1/WalletTransactionController.php | 61 + .../controllers/pub/IndexController.php | 49 + .../InvalidLnurlpayLinkException.php | 20 + .../UnableToCreateLnurlpayException.php | 21 + .../UnableToGenerateLnurlpayException.php | 20 + .../UnableToPayLnurlpayException.php | 20 + .../UnableToUpdateLnurlpayException.php | 20 + src/wallet/models/LnLoopOutForm.php | 104 + src/wallet/models/LnWalletDepositForm.php | 59 + src/wallet/models/LnWalletKeysendForm.php | 209 + src/wallet/models/LnWalletLnurlpayPayForm.php | 169 + src/wallet/models/LnWalletWithdrawForm.php | 230 + src/wallet/models/Wallet.php | 454 + src/wallet/models/WalletLnurlpay.php | 310 + src/wallet/models/WalletLnurlw.php | 115 + src/wallet/models/WalletNodeChangeForm.php | 129 + src/wallet/models/WalletSearch.php | 82 + src/wallet/models/WalletTransaction.php | 377 + src/wallet/models/WalletTransactionSearch.php | 83 + src/wallet/models/WalletTransactionType.php | 87 + src/wallet/models/WalletTransferForm.php | 181 + src/wallet/models/WalletType.php | 73 + src/wallet/views/layouts/_nav-wallets.php | 66 + src/wallet/views/pub/index/index.php | 118 + src/wallet/views/pub/index/invalid-wallet.php | 1 + src/wallet/views/wallet-transaction/_form.php | 35 + .../views/wallet-transaction/_search.php | 48 + .../views/wallet-transaction/create.php | 20 + src/wallet/views/wallet-transaction/index.php | 81 + .../views/wallet-transaction/update.php | 21 + src/wallet/views/wallet-transaction/view.php | 34 + src/wallet/views/wallet/_form.php | 42 + src/wallet/views/wallet/_search.php | 46 + src/wallet/views/wallet/create.php | 20 + src/wallet/views/wallet/dashboard.php | 111 + src/wallet/views/wallet/update.php | 21 + src/wallet/views/wallet/view.php | 189 + .../views/wallet/views/_access-keys.php | 42 + src/wallet/views/wallet/views/_keysend.php | 56 + src/wallet/views/wallet/views/_ln-node.php | 54 + src/wallet/views/wallet/views/_lnurl-pay.php | 21 + src/wallet/views/wallet/views/_loop.php | 36 + .../views/wallet/views/_wtx-breakdown.php | 45 + src/widgets/Alert.php | 75 + t | 2 + test.sh | 3 + tests/.gitignore | 1 + tests/_bootstrap.php | 15 + tests/_data/.gitkeep | 1 + tests/_data/auth_assignment.php | 161 + tests/_data/auth_item.php | 121 + tests/_data/auth_item_child.php | 56 + tests/_data/custy_domain.php | 34 + tests/_data/ln_tx.php | 73 + tests/_data/org.php | 13 + tests/_data/user.php | 41 + tests/_data/user_access_key.php | 329 + tests/_data/wallet.php | 114 + tests/_data/wallet_lnurlpay.php | 99 + tests/_data/wallet_transaction.php | 149 + tests/_data/wallet_transaction_type.php | 49 + tests/_output/.gitignore | 2 + tests/_support/AcceptanceTester.php | 26 + tests/_support/ApiTester.php | 26 + tests/_support/FunctionalTester.php | 23 + tests/_support/Helper/Api.php | 10 + tests/_support/UnitTester.php | 26 + tests/acceptance.suite.yml | 12 + tests/acceptance/HomeCest.php | 18 + tests/acceptance/_bootstrap.php | 1 + tests/api.suite.yml | 13 + tests/api/AuthCest.php | 88 + tests/api/_bootstrap.php | 1 + tests/api/lntx/LnTxGetCest.php | 75 + .../lnurlpay/LnurlpayCallbackProcessCest.php | 97 + tests/api/lnurlpay/LnurlpayCest.php | 214 + .../DisposableLnurlWithdrawCest.php | 105 + .../PermanentLnurlWithdrawCest.php | 101 + .../LnurlWithdrawProcessDisposableCest.php | 115 + .../node/LnurlWithdrawProcessPublicCest.php | 63 + .../node/LnurlWithdrawProcessStaticCest.php | 122 + tests/api/node/LnurlpayNodeCest.php | 68 + tests/api/node/NodeDecodeInvoiceCest.php | 45 + tests/api/node/NodeListCest.php | 54 + tests/api/node/NodeQueryRouteCest.php | 46 + tests/api/node/WalletGenerateInvoiceCest.php | 124 + tests/api/node/WalletKeysendCest.php | 74 + tests/api/node/WalletPayInvoiceCest.php | 164 + tests/api/wallet/WalletAuthCest.php | 79 + tests/api/wallet/WalletCreateCest.php | 95 + tests/api/wallet/WalletGetCest.php | 102 + tests/api/wallet/WalletListCest.php | 116 + .../api/wallet/WalletTransactionListCest.php | 77 + tests/api/wallet/WalletTransferCest.php | 153 + tests/bin/yii | 33 + tests/bin/yii.bat | 20 + tests/fixtures/AuthAssignmentFixture.php | 13 + tests/fixtures/AuthItemChildFixture.php | 13 + tests/fixtures/AuthItemFixture.php | 13 + tests/fixtures/CustyDomainFixture.php | 12 + tests/fixtures/LnTxFixture.php | 12 + tests/fixtures/OrgFixture.php | 12 + tests/fixtures/UserAccessKeyFixture.php | 12 + tests/fixtures/UserFixture.php | 12 + tests/fixtures/WalletFixture.php | 12 + tests/fixtures/WalletLnurlpayFixture.php | 12 + tests/fixtures/WalletTransactionFixture.php | 12 + .../fixtures/WalletTransactionTypeFixture.php | 12 + tests/functional.suite.yml | 19 + tests/functional/JobCest.php | 33 + tests/functional/_bootstrap.php | 2 + tests/polar-deprecated/docker-compose.yml | 128 + tests/polar-deprecated/export.json | 511 ++ tests/test_to_fix/node/NodeListenerTest.php | 60 + tests/test_to_fix/wallet/LnNodeWalletTest.php | 75 + tests/test_to_fix/wallet/WalletTest.php | 74 + .../wallet/WalletTransactionTest.php | 72 + .../wallet/WalletTransferFormTest.php | 80 + tests/unit.suite.yml | 13 + tests/unit/_bootstrap.php | 3 + .../behaviors/UserAccessKeyBehaviorTest.php | 16 + tests/unit/components/ActionComponentCest.php | 46 + .../components/node/LnMacaroonObjectTest.php | 99 + tests/unit/models/ChangePasswordFormTest.php | 63 + .../models/IntegrationWebhookRequestTest.php | 83 + tests/unit/models/IntegrationWebhookTest.php | 65 + tests/unit/models/LoginFormTest.php | 39 + tests/unit/models/UserTest.php | 91 + tests/unit/models/WalletCompressTest.php | 44 + web/.htaccess | 11 + web/assets/.gitignore | 2 + web/css/sba.css | 229 + web/css/site.css | 775 ++ web/favicon.ico | Bin 0 -> 15406 bytes web/img/LN-Pay-Full-600.png | Bin 0 -> 10373 bytes web/img/LNPay-Logo-1200_256x256.png | Bin 0 -> 21242 bytes web/img/demo.png | Bin 0 -> 9001 bytes web/img/editor/amount.png | Bin 0 -> 10072 bytes web/img/editor/invoice-string.png | Bin 0 -> 8362 bytes web/img/editor/memo.png | Bin 0 -> 13491 bytes web/img/editor/pay-button-block.png | Bin 0 -> 6890 bytes web/img/editor/sample_qr.png | Bin 0 -> 2203 bytes web/img/icon_large_nodes.png | Bin 0 -> 92085 bytes web/img/icon_large_wallets.png | Bin 0 -> 67543 bytes web/img/icons/advanced-wallet.svg | 48 + web/img/icons/analytics.svg | 48 + web/img/icons/authenticator.svg | 61 + web/img/icons/chain.svg | 77 + web/img/icons/dashboard.svg | 66 + web/img/icons/domain.svg | 70 + web/img/icons/events.svg | 75 + web/img/icons/fees.svg | 121 + web/img/icons/flowchart.svg | 69 + web/img/icons/home.svg | 72 + web/img/icons/keys-auth.svg | 60 + web/img/icons/layout.svg | 52 + web/img/icons/lnurl-pay.svg | 9 + web/img/icons/lnurl-withdraw.svg | 9 + web/img/icons/log.svg | 70 + web/img/icons/loop.svg | 4 + web/img/icons/node-add.svg | 52 + web/img/icons/node-connect.svg | 69 + web/img/icons/node-info.svg | 43 + web/img/icons/nodes.svg | 32 + web/img/icons/people.svg | 4 + web/img/icons/rpc-forwarder.svg | 51 + web/img/icons/rpc-listen.svg | 72 + web/img/icons/settings.svg | 62 + web/img/icons/wall-of-bricks.svg | 54 + web/img/icons/wallet.svg | 48 + web/img/icons/water-tap.svg | 71 + web/img/icons/webhook.svg | 80 + web/img/paywall-logo-circle.png | Bin 0 -> 97603 bytes web/img/paywall-logo.png | Bin 0 -> 63890 bytes web/index-test.php | 22 + web/index.php | 25 + web/js/functions.js | 68 + web/js/quiet/LICENSE | 12 + web/js/quiet/LICENSE-3RD-PARTY | 104 + web/js/quiet/README.md | 54 + web/js/quiet/docs/Quiet.html | 2194 +++++ web/js/quiet/docs/index.html | 138 + web/js/quiet/docs/quiet.js.html | 630 ++ web/js/quiet/docs/scripts/linenumber.js | 17 + .../scripts/prettify/Apache-License-2.0.txt | 202 + .../quiet/docs/scripts/prettify/lang-css.js | 2 + .../quiet/docs/scripts/prettify/prettify.js | 28 + web/js/quiet/docs/styles/jsdoc-default.css | 290 + web/js/quiet/docs/styles/prettify-jsdoc.css | 111 + .../quiet/docs/styles/prettify-tomorrow.css | 132 + web/js/quiet/examples/text/receivetext.html | 24 + web/js/quiet/examples/text/receivetext.js | 50 + web/js/quiet/examples/text/sendtext.html | 27 + web/js/quiet/examples/text/sendtext.js | 55 + web/js/quiet/libfec.js | 16 + web/js/quiet/quiet-emscripten.js | 20 + web/js/quiet/quiet-emscripten.js.mem | Bin 0 -> 45051 bytes web/js/quiet/quiet-profiles.json | 270 + web/js/quiet/quiet.js | 954 +++ web/js/sendinvoice.js | 55 + web/robots.txt | 2 + yii | 31 + yii.bat | 20 + 535 files changed, 48503 insertions(+) create mode 100644 .bowerrc create mode 100644 .env.example create mode 100644 .gitattributes create mode 100644 .github/CONTRIBUTING.md create mode 100644 .github/ISSUE_TEMPLATE.md create mode 100644 .github/PULL_REQUEST_TEMPLATE.md create mode 100644 .github/workflows/main.yml create mode 100644 .gitignore create mode 100644 .gitmodules create mode 100644 .travis.yml create mode 100644 LICENSE create mode 100644 README.md create mode 100644 codeception.yml create mode 100644 composer.json create mode 100644 composer.lock create mode 100644 config/.gitignore create mode 100644 config/__autocomplete.php create mode 100644 config/console.php create mode 100644 config/main.php create mode 100644 config/params.php create mode 100644 config/test.php create mode 100644 config/test_db.php create mode 100644 config/web.php create mode 100644 docker-compose.yml create mode 100755 docker.sh create mode 100644 docker/cron/lnpay.cron create mode 100644 docker/lnd/lnd.conf create mode 100644 docker/supervisor/conf.d/yii-queue-worker.conf create mode 100644 docker/supervisor/supervisord.conf create mode 100644 docker/tor/torrc_example create mode 100644 environments/dev/config/console-local.php create mode 100644 environments/dev/config/main-local.php create mode 100755 environments/dev/config/web-local.php create mode 100755 environments/index.php create mode 100644 environments/prod/config/console-local.php create mode 100644 environments/prod/config/main-local.php create mode 100755 environments/prod/config/web-local.php create mode 100644 environments/prod_init.sh create mode 100755 init create mode 100755 init.bat create mode 100644 polar/LNPay-0.13.0.polar.zip create mode 100644 polar/README.md create mode 100644 polar/add_node2.png create mode 100644 polar/polar1.png create mode 100644 requirements.php create mode 100755 runtime/.gitignore create mode 100755 runtime/cron/.gitignore create mode 100755 runtime/node_tls/.gitignore create mode 100755 runtime/supervisor/.gitignore create mode 100644 src/LNPay.php create mode 100644 src/LNPayTrait.php create mode 100644 src/assets/AppAsset.php create mode 100644 src/assets/AppSbAsset.php create mode 100644 src/assets/JsTzAsset.php create mode 100644 src/assets/PaywallAsset.php create mode 100644 src/base/ApiController.php create mode 100644 src/base/DashController.php create mode 100644 src/behaviors/JsonDataBehavior.php create mode 100644 src/behaviors/UserAccessKeyBehavior.php create mode 100644 src/commands/CronController.php create mode 100644 src/commands/HelloController.php create mode 100644 src/commands/PlayController.php create mode 100644 src/commands/RpcListenerController.php create mode 100644 src/components/ActionComponent.php create mode 100644 src/components/AnalyticsComponent.php create mode 100644 src/components/ApiLogTarget.php create mode 100644 src/components/HelperComponent.php create mode 100644 src/components/LNPayComponent.php create mode 100644 src/components/LNPayRequestComponent.php create mode 100644 src/components/LNPayUrlManager.php create mode 100644 src/components/MailerComponent.php create mode 100644 src/components/SupervisorComponent.php create mode 100644 src/controllers/AccountController.php create mode 100644 src/controllers/ApiLogController.php create mode 100644 src/controllers/DashboardController.php create mode 100644 src/controllers/DistroRouterController.php create mode 100644 src/controllers/DomainController.php create mode 100644 src/controllers/HomeController.php create mode 100644 src/controllers/WebhookController.php create mode 100644 src/controllers/WebhookReceiverController.php create mode 100644 src/controllers/v1/ActionNameController.php create mode 100644 src/controllers/v1/JobController.php create mode 100644 src/controllers/v1/LntxController.php create mode 100644 src/controllers/v1/StatusTypeController.php create mode 100644 src/controllers/v1/UserController.php create mode 100644 src/controllers/v1/WebhookController.php create mode 100644 src/events/ActionEvent.php create mode 100644 src/exceptions/UnableToStartListenerException.php create mode 100644 src/exceptions/WalletBusyException.php create mode 100644 src/formatters/LnPayFormatter.php create mode 100644 src/helpers/QRImageWithText.php create mode 100644 src/jobs/AnalyticsLogJob.php create mode 100644 src/jobs/IntegrationWebhookRequestJob.php create mode 100644 src/jobs/LnWalletKeysendFormJob.php create mode 100644 src/jobs/LnWalletLnurlPayFormJob.php create mode 100644 src/jobs/ProcessLndResponseJob.php create mode 100644 src/jobs/SupervisorRemoveLndRpcConfigFileJob.php create mode 100644 src/jobs/SupervisorUpdateLndRpcConfigFileJob.php create mode 100644 src/jobs/SupervisorWriteLndRpcConfigFileJob.php create mode 100644 src/mail/layouts/html.php create mode 100755 src/mail/passwordResetToken-html.php create mode 100644 src/migrations/m190709_173552_init.php create mode 100644 src/migrations/m190813_234443_api_parent.php create mode 100644 src/migrations/m191006_214944_custy_domain.php create mode 100644 src/migrations/m191024_120848_action.php create mode 100644 src/migrations/m191027_080425_webhook.php create mode 100644 src/migrations/m191106_225434_faucet.php create mode 100644 src/migrations/m191109_233012_faucet_distro.php create mode 100644 src/migrations/m191120_174352_action_types.php create mode 100644 src/migrations/m191124_113412_tz.php create mode 100644 src/migrations/m191129_223556_action_cleanup.php create mode 100644 src/migrations/m191210_233454_wallet.php create mode 100644 src/migrations/m191214_120829_minor_updates.php create mode 100644 src/migrations/m191215_224105_base_wallet_actions.php create mode 100644 src/migrations/m200111_005210_description_hash.php create mode 100644 src/migrations/m200112_221805_webhook_mods.php create mode 100644 src/migrations/m200120_151707_pw_link_type.php create mode 100644 src/migrations/m200126_005039_api_logger.php create mode 100644 src/migrations/m200127_105943_keysend.php create mode 100644 src/migrations/m200127_221736_key_updates.php create mode 100644 src/migrations/m200208_211205_api_log_changes.php create mode 100644 src/migrations/m200211_113828_usr_hash.php create mode 100644 src/migrations/m200215_174524_webhook_log.php create mode 100644 src/migrations/m200219_142429_api_version.php create mode 100644 src/migrations/m200220_201526_jsonify.php create mode 100644 src/migrations/m200317_165227_key_suspend_role.php create mode 100644 src/migrations/m200318_160034_non_custodial.php create mode 100644 src/migrations/m200327_191800_baselink_user.php create mode 100644 src/migrations/m200328_131216_yii2queue.php create mode 100644 src/migrations/m200402_155750_rpc_listener.php create mode 100644 src/migrations/m200404_175632_fix_action_id.php create mode 100644 src/migrations/m200406_132737_lnd_rpc_action_names.php create mode 100644 src/migrations/m200407_174604_node_health_actions.php create mode 100644 src/migrations/m200412_143635_base_link_paywall.php create mode 100644 src/migrations/m200421_152700_wallet_node.php create mode 100644 src/migrations/m200714_112957_2fa.php create mode 100644 src/migrations/m200719_162034_lntx_fees.php create mode 100644 src/migrations/m210221_130834_fee_wallet.php create mode 100644 src/migrations/m210223_184645_fee_action.php create mode 100644 src/migrations/m210402_000953_htlcEvent.php create mode 100644 src/migrations/m210414_152818_wallet_type.php create mode 100644 src/migrations/m210423_153759_lnurl_withdraw_role.php create mode 100644 src/migrations/m210707_194325_node_onchain.php create mode 100644 src/migrations/m211017_134236_loop.php create mode 100644 src/migrations/m211228_154357_amp_lntx_db.php create mode 100644 src/migrations/m211229_135314_lnurlp.php create mode 100644 src/migrations/m220116_141606_wallet_send_failure.php create mode 100644 src/migrations/m220124_143632_lnurlpay_inoutbound.php create mode 100644 src/migrations/m220130_004513_wallet_change_node.php create mode 100644 src/migrations/m220203_170922_utf8mb4_encoding.php create mode 100644 src/migrations/m220208_011157_org.php create mode 100644 src/migrations/m220225_185302_lnurlpay_domain.php create mode 100644 src/migrations/m220302_141930_cdomain_id.php create mode 100644 src/migrations/m220426_174013_wallet_external_admin.php create mode 100644 src/migrations/m230109_155754_wtx_rollup.php create mode 100644 src/models/BaseLink.php create mode 100644 src/models/BaseLinkAnalytics.php create mode 100644 src/models/ChangePasswordForm.php create mode 100644 src/models/CustyDomain.php create mode 100644 src/models/DistroMethod.php create mode 100644 src/models/LinkType.php create mode 100644 src/models/LnTx.php create mode 100644 src/models/LoginForm.php create mode 100755 src/models/PasswordResetRequestForm.php create mode 100755 src/models/ResetPasswordForm.php create mode 100644 src/models/SignupForm.php create mode 100644 src/models/StatusType.php create mode 100644 src/models/User.php create mode 100644 src/models/UserAccessKey.php create mode 100644 src/models/action/ActionData.php create mode 100644 src/models/action/ActionFeed.php create mode 100644 src/models/action/ActionName.php create mode 100644 src/models/integration/IntegrationService.php create mode 100644 src/models/integration/IntegrationWebhook.php create mode 100644 src/models/integration/IntegrationWebhookRequest.php create mode 100644 src/models/integration/IntegrationWebhookSearch.php create mode 100644 src/models/integration/WebhookTestForm.php create mode 100644 src/models/log/UserApiLog.php create mode 100644 src/models/log/UserApiLogSearch.php create mode 100644 src/node/Module.php create mode 100644 src/node/components/LnBaseNodeClass.php create mode 100644 src/node/components/LnBaseNodeInterface.php create mode 100644 src/node/components/LnMacaroonObject.php create mode 100644 src/node/components/LndNodeConnector.php create mode 100644 src/node/controllers/AuthprofileController.php create mode 100644 src/node/controllers/BaseNodeController.php create mode 100644 src/node/controllers/DashboardController.php create mode 100644 src/node/controllers/LnController.php create mode 100644 src/node/controllers/RpcController.php create mode 100644 src/node/controllers/api/v1/EventsController.php create mode 100644 src/node/controllers/api/v1/LnNodeController.php create mode 100644 src/node/controllers/api/v1/LncliController.php create mode 100644 src/node/controllers/api/v1/NodeApiController.php create mode 100644 src/node/controllers/api/v1/PaymentsController.php create mode 100644 src/node/exceptions/MacaroonNotGeneratedYetException.php create mode 100644 src/node/exceptions/UnableToBakeMacaroonException.php create mode 100644 src/node/exceptions/UnableToCreateInvoiceException.php create mode 100644 src/node/exceptions/UnableToDecodeInvoiceException.php create mode 100644 src/node/exceptions/UnableToGetChannelBalanceException.php create mode 100644 src/node/exceptions/UnableToGetNewAddressException.php create mode 100644 src/node/exceptions/UnableToGetWalletBalanceException.php create mode 100644 src/node/exceptions/UnableToListChannelsException.php create mode 100644 src/node/exceptions/UnableToLookupInvoiceException.php create mode 100644 src/node/exceptions/UnableToPayInvoiceException.php create mode 100644 src/node/exceptions/UnableToQueryRoutesException.php create mode 100644 src/node/exceptions/UnableToSendKeysendException.php create mode 100644 src/node/fixtures/LnNodeDefaultWalletsFixture.php create mode 100644 src/node/fixtures/LnNodeFixture.php create mode 100644 src/node/fixtures/LnNodeImplementationFixture.php create mode 100644 src/node/fixtures/LnNodeProfileFixture.php create mode 100644 src/node/fixtures/_data/ln_node.php create mode 100644 src/node/fixtures/_data/ln_node_default_wallets.php create mode 100644 src/node/fixtures/_data/ln_node_implementation.php create mode 100644 src/node/fixtures/_data/ln_node_profile.php create mode 100644 src/node/models/LnNode.php create mode 100644 src/node/models/LnNodeImplementation.php create mode 100644 src/node/models/LnNodeProfile.php create mode 100644 src/node/models/LnNodeProfileSearch.php create mode 100644 src/node/models/LnNodeSearch.php create mode 100644 src/node/models/NodeAddForm.php create mode 100644 src/node/models/NodeCreateForm.php create mode 100644 src/node/models/NodeListener.php create mode 100644 src/node/models/analytics/HtlcEventQueryForm.php create mode 100644 src/node/views/_nav-node-index.php create mode 100644 src/node/views/_nav-node.php create mode 100644 src/node/views/authprofile/_form.php create mode 100644 src/node/views/authprofile/_search.php create mode 100644 src/node/views/authprofile/create.php create mode 100644 src/node/views/authprofile/index.php create mode 100644 src/node/views/authprofile/update.php create mode 100644 src/node/views/authprofile/view.php create mode 100644 src/node/views/dashboard/_form-create.php create mode 100644 src/node/views/dashboard/_form-lndconnect.php create mode 100644 src/node/views/dashboard/_form.php create mode 100644 src/node/views/dashboard/_node-accordion-pane.php create mode 100644 src/node/views/dashboard/_search.php create mode 100644 src/node/views/dashboard/add.php create mode 100644 src/node/views/dashboard/create.php create mode 100644 src/node/views/dashboard/index.php create mode 100644 src/node/views/dashboard/provisioning.php create mode 100644 src/node/views/dashboard/update.php create mode 100644 src/node/views/ln/_connect-base64.php create mode 100644 src/node/views/ln/_connect-files.php create mode 100644 src/node/views/ln/_connect-hex.php create mode 100644 src/node/views/ln/_connect-lndconnect.php create mode 100644 src/node/views/ln/_node-details.php create mode 100644 src/node/views/ln/connect.php create mode 100644 src/node/views/ln/network_fees.php create mode 100644 src/node/views/ln/node.php create mode 100644 src/node/views/ln/onchain.php create mode 100644 src/node/views/ln/settings.php create mode 100644 src/node/views/rpc/_rpc-listeners-item.php create mode 100644 src/node/views/rpc/rpc-forwarder.php create mode 100644 src/node/views/rpc/rpc-listeners.php create mode 100644 src/org/Module.php create mode 100644 src/org/controllers/BaseOrgController.php create mode 100644 src/org/controllers/HomeController.php create mode 100644 src/org/models/Org.php create mode 100644 src/org/models/OrgUserType.php create mode 100644 src/org/views/_nav-org.php create mode 100644 src/org/views/home/index.php create mode 100644 src/org/views/home/members.php create mode 100644 src/views/account/_change-password.php create mode 100644 src/views/account/account-index.php create mode 100644 src/views/account/mfa.php create mode 100644 src/views/account/product.php create mode 100644 src/views/api-log/_search.php create mode 100644 src/views/api-log/index.php create mode 100644 src/views/api-log/view.php create mode 100644 src/views/dashboard/_faucet-grid.php create mode 100644 src/views/dashboard/_invoices-breakdown.php create mode 100644 src/views/dashboard/_layouts.php create mode 100644 src/views/dashboard/_link-breakdown.php create mode 100644 src/views/dashboard/_link-totals.php create mode 100644 src/views/dashboard/_withdraw.php create mode 100644 src/views/dashboard/_withdrawals-breakdown.php create mode 100644 src/views/dashboard/advanced-wallets.php create mode 100644 src/views/dashboard/developers.php create mode 100644 src/views/dashboard/events.php create mode 100644 src/views/dashboard/faucets.php create mode 100644 src/views/dashboard/home.php create mode 100644 src/views/dashboard/home_old.php create mode 100644 src/views/dashboard/layouts.php create mode 100644 src/views/dashboard/paywalls.php create mode 100644 src/views/distro-router/details/_api.php create mode 100644 src/views/distro-router/details/_email.php create mode 100644 src/views/distro-router/details/_image.php create mode 100644 src/views/distro-router/details/_ln_uri.php create mode 100644 src/views/distro-router/details/_print.php create mode 100644 src/views/distro-router/details/_raw_lnurl.php create mode 100644 src/views/distro-router/details/_web.php create mode 100644 src/views/domain/_form.php create mode 100644 src/views/domain/create.php create mode 100644 src/views/domain/index.php create mode 100644 src/views/home/_login-form.php create mode 100644 src/views/home/_signup-form.php create mode 100644 src/views/home/error.php create mode 100644 src/views/home/index.php create mode 100644 src/views/home/login.php create mode 100644 src/views/home/mfa-verify.php create mode 100644 src/views/home/requestPasswordResetToken.php create mode 100644 src/views/home/resetPassword.php create mode 100644 src/views/home/signup.php create mode 100644 src/views/layouts/_footer.php create mode 100644 src/views/layouts/_header.php create mode 100644 src/views/layouts/main.php create mode 100644 src/views/layouts/public.php create mode 100644 src/views/layouts/sb-admin/content.php create mode 100644 src/views/layouts/sb-admin/footer.php create mode 100644 src/views/layouts/sb-admin/guest/header-guest.php create mode 100644 src/views/layouts/sb-admin/guest/main-guest.php create mode 100644 src/views/layouts/sb-admin/header.php create mode 100644 src/views/layouts/sb-admin/main.php create mode 100644 src/views/layouts/sb-admin/sidebar.php create mode 100644 src/views/layouts/sidebar/__base_sidebar.php create mode 100644 src/views/layouts/sidebar/_nav-account.php create mode 100644 src/views/layouts/sidebar/_nav-developers.php create mode 100644 src/views/webhook/_form.php create mode 100644 src/views/webhook/_requests-pane-request.php create mode 100644 src/views/webhook/_requests-pane-response.php create mode 100644 src/views/webhook/_requests-pane.php create mode 100644 src/views/webhook/_requests.php create mode 100644 src/views/webhook/_search.php create mode 100644 src/views/webhook/create.php create mode 100644 src/views/webhook/index.php create mode 100644 src/views/webhook/update.php create mode 100644 src/views/webhook/view.php create mode 100644 src/wallet/Module.php create mode 100644 src/wallet/controllers/WalletController.php create mode 100644 src/wallet/controllers/WalletTransactionController.php create mode 100644 src/wallet/controllers/api/v1/LnurlpayController.php create mode 100644 src/wallet/controllers/api/v1/WalletController.php create mode 100644 src/wallet/controllers/api/v1/WalletTransactionController.php create mode 100644 src/wallet/controllers/pub/IndexController.php create mode 100644 src/wallet/exceptions/InvalidLnurlpayLinkException.php create mode 100644 src/wallet/exceptions/UnableToCreateLnurlpayException.php create mode 100644 src/wallet/exceptions/UnableToGenerateLnurlpayException.php create mode 100644 src/wallet/exceptions/UnableToPayLnurlpayException.php create mode 100644 src/wallet/exceptions/UnableToUpdateLnurlpayException.php create mode 100644 src/wallet/models/LnLoopOutForm.php create mode 100644 src/wallet/models/LnWalletDepositForm.php create mode 100644 src/wallet/models/LnWalletKeysendForm.php create mode 100644 src/wallet/models/LnWalletLnurlpayPayForm.php create mode 100644 src/wallet/models/LnWalletWithdrawForm.php create mode 100644 src/wallet/models/Wallet.php create mode 100644 src/wallet/models/WalletLnurlpay.php create mode 100644 src/wallet/models/WalletLnurlw.php create mode 100644 src/wallet/models/WalletNodeChangeForm.php create mode 100644 src/wallet/models/WalletSearch.php create mode 100644 src/wallet/models/WalletTransaction.php create mode 100644 src/wallet/models/WalletTransactionSearch.php create mode 100644 src/wallet/models/WalletTransactionType.php create mode 100644 src/wallet/models/WalletTransferForm.php create mode 100644 src/wallet/models/WalletType.php create mode 100644 src/wallet/views/layouts/_nav-wallets.php create mode 100644 src/wallet/views/pub/index/index.php create mode 100644 src/wallet/views/pub/index/invalid-wallet.php create mode 100644 src/wallet/views/wallet-transaction/_form.php create mode 100644 src/wallet/views/wallet-transaction/_search.php create mode 100644 src/wallet/views/wallet-transaction/create.php create mode 100644 src/wallet/views/wallet-transaction/index.php create mode 100644 src/wallet/views/wallet-transaction/update.php create mode 100644 src/wallet/views/wallet-transaction/view.php create mode 100644 src/wallet/views/wallet/_form.php create mode 100644 src/wallet/views/wallet/_search.php create mode 100644 src/wallet/views/wallet/create.php create mode 100644 src/wallet/views/wallet/dashboard.php create mode 100644 src/wallet/views/wallet/update.php create mode 100644 src/wallet/views/wallet/view.php create mode 100644 src/wallet/views/wallet/views/_access-keys.php create mode 100644 src/wallet/views/wallet/views/_keysend.php create mode 100644 src/wallet/views/wallet/views/_ln-node.php create mode 100644 src/wallet/views/wallet/views/_lnurl-pay.php create mode 100644 src/wallet/views/wallet/views/_loop.php create mode 100644 src/wallet/views/wallet/views/_wtx-breakdown.php create mode 100644 src/widgets/Alert.php create mode 100755 t create mode 100644 test.sh create mode 100644 tests/.gitignore create mode 100644 tests/_bootstrap.php create mode 100644 tests/_data/.gitkeep create mode 100644 tests/_data/auth_assignment.php create mode 100644 tests/_data/auth_item.php create mode 100644 tests/_data/auth_item_child.php create mode 100644 tests/_data/custy_domain.php create mode 100644 tests/_data/ln_tx.php create mode 100644 tests/_data/org.php create mode 100644 tests/_data/user.php create mode 100644 tests/_data/user_access_key.php create mode 100644 tests/_data/wallet.php create mode 100644 tests/_data/wallet_lnurlpay.php create mode 100644 tests/_data/wallet_transaction.php create mode 100644 tests/_data/wallet_transaction_type.php create mode 100755 tests/_output/.gitignore create mode 100644 tests/_support/AcceptanceTester.php create mode 100644 tests/_support/ApiTester.php create mode 100644 tests/_support/FunctionalTester.php create mode 100644 tests/_support/Helper/Api.php create mode 100644 tests/_support/UnitTester.php create mode 100644 tests/acceptance.suite.yml create mode 100644 tests/acceptance/HomeCest.php create mode 100644 tests/acceptance/_bootstrap.php create mode 100644 tests/api.suite.yml create mode 100644 tests/api/AuthCest.php create mode 100644 tests/api/_bootstrap.php create mode 100644 tests/api/lntx/LnTxGetCest.php create mode 100644 tests/api/lnurlpay/LnurlpayCallbackProcessCest.php create mode 100644 tests/api/lnurlpay/LnurlpayCest.php create mode 100644 tests/api/lnurlwithdraw/DisposableLnurlWithdrawCest.php create mode 100644 tests/api/lnurlwithdraw/PermanentLnurlWithdrawCest.php create mode 100644 tests/api/node/LnurlWithdrawProcessDisposableCest.php create mode 100644 tests/api/node/LnurlWithdrawProcessPublicCest.php create mode 100644 tests/api/node/LnurlWithdrawProcessStaticCest.php create mode 100644 tests/api/node/LnurlpayNodeCest.php create mode 100644 tests/api/node/NodeDecodeInvoiceCest.php create mode 100644 tests/api/node/NodeListCest.php create mode 100644 tests/api/node/NodeQueryRouteCest.php create mode 100644 tests/api/node/WalletGenerateInvoiceCest.php create mode 100644 tests/api/node/WalletKeysendCest.php create mode 100644 tests/api/node/WalletPayInvoiceCest.php create mode 100644 tests/api/wallet/WalletAuthCest.php create mode 100644 tests/api/wallet/WalletCreateCest.php create mode 100644 tests/api/wallet/WalletGetCest.php create mode 100644 tests/api/wallet/WalletListCest.php create mode 100644 tests/api/wallet/WalletTransactionListCest.php create mode 100644 tests/api/wallet/WalletTransferCest.php create mode 100755 tests/bin/yii create mode 100644 tests/bin/yii.bat create mode 100644 tests/fixtures/AuthAssignmentFixture.php create mode 100644 tests/fixtures/AuthItemChildFixture.php create mode 100644 tests/fixtures/AuthItemFixture.php create mode 100644 tests/fixtures/CustyDomainFixture.php create mode 100644 tests/fixtures/LnTxFixture.php create mode 100644 tests/fixtures/OrgFixture.php create mode 100644 tests/fixtures/UserAccessKeyFixture.php create mode 100644 tests/fixtures/UserFixture.php create mode 100644 tests/fixtures/WalletFixture.php create mode 100644 tests/fixtures/WalletLnurlpayFixture.php create mode 100644 tests/fixtures/WalletTransactionFixture.php create mode 100644 tests/fixtures/WalletTransactionTypeFixture.php create mode 100644 tests/functional.suite.yml create mode 100644 tests/functional/JobCest.php create mode 100644 tests/functional/_bootstrap.php create mode 100644 tests/polar-deprecated/docker-compose.yml create mode 100644 tests/polar-deprecated/export.json create mode 100644 tests/test_to_fix/node/NodeListenerTest.php create mode 100644 tests/test_to_fix/wallet/LnNodeWalletTest.php create mode 100644 tests/test_to_fix/wallet/WalletTest.php create mode 100644 tests/test_to_fix/wallet/WalletTransactionTest.php create mode 100644 tests/test_to_fix/wallet/WalletTransferFormTest.php create mode 100644 tests/unit.suite.yml create mode 100644 tests/unit/_bootstrap.php create mode 100644 tests/unit/behaviors/UserAccessKeyBehaviorTest.php create mode 100644 tests/unit/components/ActionComponentCest.php create mode 100644 tests/unit/components/node/LnMacaroonObjectTest.php create mode 100644 tests/unit/models/ChangePasswordFormTest.php create mode 100644 tests/unit/models/IntegrationWebhookRequestTest.php create mode 100644 tests/unit/models/IntegrationWebhookTest.php create mode 100644 tests/unit/models/LoginFormTest.php create mode 100644 tests/unit/models/UserTest.php create mode 100644 tests/unit/models/WalletCompressTest.php create mode 100644 web/.htaccess create mode 100644 web/assets/.gitignore create mode 100644 web/css/sba.css create mode 100644 web/css/site.css create mode 100644 web/favicon.ico create mode 100644 web/img/LN-Pay-Full-600.png create mode 100644 web/img/LNPay-Logo-1200_256x256.png create mode 100644 web/img/demo.png create mode 100644 web/img/editor/amount.png create mode 100644 web/img/editor/invoice-string.png create mode 100644 web/img/editor/memo.png create mode 100644 web/img/editor/pay-button-block.png create mode 100644 web/img/editor/sample_qr.png create mode 100644 web/img/icon_large_nodes.png create mode 100644 web/img/icon_large_wallets.png create mode 100644 web/img/icons/advanced-wallet.svg create mode 100644 web/img/icons/analytics.svg create mode 100644 web/img/icons/authenticator.svg create mode 100644 web/img/icons/chain.svg create mode 100644 web/img/icons/dashboard.svg create mode 100644 web/img/icons/domain.svg create mode 100644 web/img/icons/events.svg create mode 100644 web/img/icons/fees.svg create mode 100644 web/img/icons/flowchart.svg create mode 100644 web/img/icons/home.svg create mode 100644 web/img/icons/keys-auth.svg create mode 100644 web/img/icons/layout.svg create mode 100644 web/img/icons/lnurl-pay.svg create mode 100644 web/img/icons/lnurl-withdraw.svg create mode 100644 web/img/icons/log.svg create mode 100644 web/img/icons/loop.svg create mode 100644 web/img/icons/node-add.svg create mode 100644 web/img/icons/node-connect.svg create mode 100644 web/img/icons/node-info.svg create mode 100644 web/img/icons/nodes.svg create mode 100644 web/img/icons/people.svg create mode 100644 web/img/icons/rpc-forwarder.svg create mode 100644 web/img/icons/rpc-listen.svg create mode 100644 web/img/icons/settings.svg create mode 100644 web/img/icons/wall-of-bricks.svg create mode 100644 web/img/icons/wallet.svg create mode 100644 web/img/icons/water-tap.svg create mode 100644 web/img/icons/webhook.svg create mode 100644 web/img/paywall-logo-circle.png create mode 100644 web/img/paywall-logo.png create mode 100644 web/index-test.php create mode 100644 web/index.php create mode 100644 web/js/functions.js create mode 100755 web/js/quiet/LICENSE create mode 100755 web/js/quiet/LICENSE-3RD-PARTY create mode 100755 web/js/quiet/README.md create mode 100755 web/js/quiet/docs/Quiet.html create mode 100755 web/js/quiet/docs/index.html create mode 100755 web/js/quiet/docs/quiet.js.html create mode 100755 web/js/quiet/docs/scripts/linenumber.js create mode 100755 web/js/quiet/docs/scripts/prettify/Apache-License-2.0.txt create mode 100755 web/js/quiet/docs/scripts/prettify/lang-css.js create mode 100755 web/js/quiet/docs/scripts/prettify/prettify.js create mode 100755 web/js/quiet/docs/styles/jsdoc-default.css create mode 100755 web/js/quiet/docs/styles/prettify-jsdoc.css create mode 100755 web/js/quiet/docs/styles/prettify-tomorrow.css create mode 100755 web/js/quiet/examples/text/receivetext.html create mode 100755 web/js/quiet/examples/text/receivetext.js create mode 100755 web/js/quiet/examples/text/sendtext.html create mode 100755 web/js/quiet/examples/text/sendtext.js create mode 100644 web/js/quiet/libfec.js create mode 100755 web/js/quiet/quiet-emscripten.js create mode 100755 web/js/quiet/quiet-emscripten.js.mem create mode 100755 web/js/quiet/quiet-profiles.json create mode 100755 web/js/quiet/quiet.js create mode 100644 web/js/sendinvoice.js create mode 100644 web/robots.txt create mode 100755 yii create mode 100644 yii.bat diff --git a/.bowerrc b/.bowerrc new file mode 100644 index 00000000..a39b5b0f --- /dev/null +++ b/.bowerrc @@ -0,0 +1,3 @@ +{ + "directory" : "vendor/bower-asset" +} diff --git a/.env.example b/.env.example new file mode 100644 index 00000000..6a171d3f --- /dev/null +++ b/.env.example @@ -0,0 +1,64 @@ +############## SAMPLE ENVIRONMENT DEFAULTS + +INSTANCE_ID=lnpay-1 + +# Used for generating URLs via console +BASE_URL=https://lnpay.local:8111 + +# Endpoint to receive lightning node events +LN_NODE_INGESTION_ENDPOINT=http://192.168.69.11 + +# Yii Settings (IF DEVELOPMENT) +YII_DEBUG=true +YII_ENV=dev + +# LNPay version +LNPAY_FLAVOR=OPEN + +# Database +DB_HOST=192.168.69.22 +DB_USER=root +DB_PASS=example +DB_DB=lnpay_db + +# Mongo database +MONGO_HOST= +MONGO_USER= +MONGO_PASS= +MONGO_DB= + +#PHP bin path +PHP_BIN_PATH=/usr/local/bin/php + +# cookie auth key, generate this randomly +YII_COOKIE_VALIDATION_KEY=yii-cookie-validation-key + +# general encryption key for sensitive info +GENERAL_ENCRYPTION_KEY=general-encryption-key + +#Supervisor Server, this is for monitoring RPC listeners +SUPERVISOR_RPC_HOST=192.168.69.11 +SUPERVISOR_RPC_PORT=9001 +SUPERVISOR_CONF_PATH=/app/docker/supervisor/conf.d/ +SUPERVISOR_SERVER_APP_PATH=/app/ + +# Email - if DEV emails are sent to files in /runtime/mail +DEFAULT_EMAIL_FROM= +DEFAULT_EMAIL_HOST= +DEFAULT_EMAIL_PORT= +DEFAULT_EMAIL_USERNAME= +DEFAULT_EMAIL_PASSWORD= + +######## Scale environment vars + +# Redis +# REDIS_HOST=192.168.69.44 +# REDIS_CACHE_DB=1 +# REDIS_MUTEX_DB=2 + +# Papertrail logging (OPTIONAL) +# PAPERTRAIL_HOST= +# PAPERTRAIL_PORT= + +# Server side tracking help +# AMPLITUDE_API_KEY= diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000..3e9092c6 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,6 @@ +# Ignore all test and documentation for archive +/.github export-ignore +/.gitattributes export-ignore +/.scrutinizer.yml export-ignore +/.travis.yml export-ignore +/docs export-ignore diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md new file mode 100644 index 00000000..3d8d32c2 --- /dev/null +++ b/.github/CONTRIBUTING.md @@ -0,0 +1,7 @@ +Contributing to Yii2 +==================== + +- [Report an issue](https://github.com/yiisoft/yii2/blob/master/docs/internals/report-an-issue.md) +- [Translate documentation or messages](https://github.com/yiisoft/yii2/blob/master/docs/internals/translation-workflow.md) +- [Give us feedback or start a design discussion](http://www.yiiframework.com/forum/index.php/forum/42-general-discussions-for-yii-20/) +- [Contribute to the core code or fix bugs](https://github.com/yiisoft/yii2/blob/master/docs/internals/git-workflow.md) diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md new file mode 100644 index 00000000..52ec8692 --- /dev/null +++ b/.github/ISSUE_TEMPLATE.md @@ -0,0 +1,14 @@ +### What steps will reproduce the problem? + +### What's expected? + +### What do you get instead? + + +### Additional info + +| Q | A +| ---------------- | --- +| Yii vesion | +| PHP version | +| Operating system | diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 00000000..968a845d --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,7 @@ +| Q | A +| ------------- | --- +| Is bugfix? | yes/no +| New feature? | yes/no +| Breaks BC? | yes/no +| Tests pass? | yes/no +| Fixed issues | comma-separated list of tickets # fixed by the PR, if any diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 00000000..79ec46ad --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,15 @@ +name: lnpay-build-test-workflow +on: [push,pull_request] +jobs: + test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Build the stack + run: bash docker.sh build + - name: Build codecept + run: docker exec lnpay-php vendor/bin/codecept build + - name: Run API Tests + run: docker exec lnpay-php vendor/bin/codecept run -g base_api -vvv + - name: Run unit,functional Tests + run: docker exec lnpay-php vendor/bin/codecept run unit,functional diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..6d882acb --- /dev/null +++ b/.gitignore @@ -0,0 +1,41 @@ +# phpstorm project files +.idea + +# netbeans project files +nbproject + +# zend studio for eclipse project files +.buildpath +.project +.settings + +# windows thumbnail cache +Thumbs.db + +# composer vendor dir +/vendor + +# composer itself is not needed +composer.phar + +# Mac DS_Store Files +.DS_Store + +# phpunit itself is not needed +phpunit.phar +# local phpunit config +/phpunit.xml + +tests/_output/* +tests/_support/_generated + +#vagrant folder +/.vagrant + +# Ignore environment files +.env +prod.env + +lnrpc/ + +cluster/ssh \ No newline at end of file diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 00000000..e69de29b diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 00000000..18e63d91 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,45 @@ +language: php + +php: + - 5.4 + - 5.5 + - 5.6 + - 7.0 + - 7.1 +# - hhvm + +# faster builds on new travis setup not using sudo +sudo: false + +# cache vendor dirs +cache: + directories: + - $HOME/.composer/cache + +services: + - mysql + +before_install: + - mysql -e 'CREATE DATABASE IF NOT EXISTS yii2_basic_tests;' + +install: + - travis_retry composer self-update && composer --version + - travis_retry composer update --dev --prefer-dist --no-interaction + # install php extensions + - | + if (php --version | grep -i HipHop > /dev/null); then + echo "Skipping imagick and gmagick tests on HHVM" + else + pear config-set preferred_state beta + printf "\n" | pecl install imagick + # gmagick is not installed on travis currently + #printf "\n" | pecl install gmagick + fi +# setup application: + - | + sed -i "s/'cookieValidationKey' => ''/'cookieValidationKey' => 'testkey'/" config/web.php + +script: + - | + php -S localhost:8080 -t web > /dev/null 2>&1 & + vendor/bin/codecept run diff --git a/LICENSE b/LICENSE new file mode 100644 index 00000000..2590962a --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 LNPAY + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 00000000..c7ba4c55 --- /dev/null +++ b/README.md @@ -0,0 +1,163 @@ +LNPAY + +[![License](https://img.shields.io/badge/license-ELv2-yellow)](https://www.elastic.co/licensing/elastic-license) +![Build Status](https://github.com/lnpay/lnpay-core/actions/workflows/main.yml/badge.svg) +![Latest Stable Version](https://img.shields.io/github/tag/lnpay/lnpay-core.svg?label=stable) + + +#### LNPAY CORE is an enterprise toolkit / API for building Lightning Network applications on the web. Built with Yii2/PHP. + + +REQUIREMENTS +------------ + +Docker Engine is suggested for development environment. +Since this is PHP, it's pretty easy to run on a base Ubuntu image with apache/nginx. + + +DEV ENVIRONMENT +------------ + +### Install with Docker + +Clone repo + + $ git clone https://github.com/lnpay/lnpay-core + +Run the build script + + $ cd lnpay-core + $ bash docker.sh build + + # Wait for build process, then start the queue workers + + $ bash docker.sh start + +Add the following line to your `/etc/hosts` file + + 127.0.0.1 lnpay.local + +You can then access the application through the following URL: + + http://lnpay.local:8111 + +CONFIGURATION +------------- + +### .env file + +There is a `.env.example` file that is automatically copied over as `.env` on first build. +This file contains the environment specific config vars. Here is an example + +``` +############## SAMPLE ENVIRONMENT DEFAULTS + +INSTANCE_ID=lnpay-1 + +BASE_URL=https://lnpay.local:8111 + +# Yii Settings (IF DEVELOPMENT) +YII_DEBUG=true +YII_ENV=dev + +# Database +DB_HOST=192.168.69.22 +DB_USER=root +DB_PASS=example +DB_DB=lnpay_db + +#PHP bin path +PHP_BIN_PATH=/usr/local/bin/php + +# Redis +REDIS_HOST=192.168.69.44 +REDIS_CACHE_DB=1 +REDIS_MUTEX_DB=2 + +# Papertrail logging (OPTIONAL) +PAPERTRAIL_HOST= +PAPERTRAIL_PORT= + +# cookie auth key, generate this randomly +YII_COOKIE_VALIDATION_KEY=609F45AEgenerateNEWinPRODEA480D3B68 + +#Supervisor Server, this is for monitoring RPC listeners +SUPERVISOR_RPC_HOST=192.168.69.11 +SUPERVISOR_RPC_PORT=9001 +SUPERVISOR_CONF_PATH=/app/docker/supervisor/conf.d/ +SUPERVISOR_SERVER_APP_PATH=/app/ + +# Email - if DEV emails are sent to files in /runtime/mail +DEFAULT_EMAIL_FROM= +DEFAULT_EMAIL_HOST= +DEFAULT_EMAIL_PORT= +DEFAULT_EMAIL_USERNAME= +DEFAULT_EMAIL_PASSWORD= + +# Helps track aggregate sat movement for an idea of what's going on (OPTIONAL) +AMPLITUDE_API_KEY= +``` + +# Operating the environment + +### Starting / Stopping / Destroying Docker containers + $ bash docker.sh start # Start docker container + $ bash docker.sh stop # Stop docker container + $ bash docker.sh destroy # Destroy docker containers + +### Accessing docker containers + $ docker exec -it lnpay-php bash + $ docker exec -it lnpay-db bash + +### Accessing local mysql database + `lnpay.local:8222` with user/pass `root/example` + +### Accessing local mysql database + +Database migrations should be run often to pull in database changes from other devs. + + $ docker exec lnpay-php php yii migrate + +**NOTES:** +- The default configuration uses a host-volume in your home directory `.docker-composer` for composer caches + +WORKERS +------------- + +`php yii queue/listen --verbose` to start a listener, and `php yii queue/run --verbose` can be used to run the queue and then exit. + +The queue currently pulls from the `queue` table in the database. + +http://lnpay.local:8111/monitor is a lightweight interface to see what is going on. + + + +SUPERVISOR +---------- +Supervisor is used to make sure workers stay up and keep RPC subscribes going + +`$ supervisord` + +Configuration files supervisor are mapped to the service inside the container for easy editing: `docker/dev/supervisor/` + + +TESTING +------- + +Tests are located in `tests` directory. They are developed with [Codeception PHP Testing Framework](http://codeception.com/). +By default there are 4 test suites: + +- `unit` +- `api` +- `functional` +- `acceptance` + +Tests can be executed by running + +``` +docker exec lnpay-php vendor/bin/codecept run +``` + +The command above will execute unit and functional tests. Unit tests are testing the system components, while functional +tests are for testing user interaction. Acceptance tests are disabled by default as they require additional setup since +they perform testing in real browser. diff --git a/codeception.yml b/codeception.yml new file mode 100644 index 00000000..a95affe0 --- /dev/null +++ b/codeception.yml @@ -0,0 +1,36 @@ +actor: Tester +paths: + tests: tests + log: tests/_output + data: tests/_data + helpers: tests/_support +settings: + bootstrap: _bootstrap.php + memory_limit: 1024M + colors: true +modules: + config: + Yii2: + configFile: 'config/test.php' + +# To enable code coverage: +#coverage: +# #c3_url: http://localhost:8080/index-test.php/ +# enabled: true +# #remote: true +# #remote_config: '../codeception.yml' +# whitelist: +# include: +# - models/* +# - controllers/* +# - commands/* +# - mail/* +# blacklist: +# include: +# - assets/* +# - config/* +# - runtime/* +# - vendor/* +# - views/* +# - web/* +# - tests/* diff --git a/composer.json b/composer.json new file mode 100644 index 00000000..ab3e4d7d --- /dev/null +++ b/composer.json @@ -0,0 +1,100 @@ +{ + "name": "lnpay/lnpay-core", + "description": "LNPay Core", + "keywords": ["bitcoin", "lightning network"], + "homepage": "https://lnpay.co/", + "type": "project", + "license": "BSD-3-Clause", + "minimum-stability": "dev", + "require": { + "php": ">=7.3.0", + "ext-json": "*", + "ext-intl": "*", + "ext-curl":"*", + "yiisoft/yii2": "^2.0.0", + "symfony/process": "^3.3||^4.0", + "yiisoft/yii2-redis": "~2.0.0", + "yiisoft/yii2-bootstrap": "~2.0.0", + "yiisoft/yii2-queue": "^2.3", + "yiisoft/yii2-swiftmailer": "~2.0.0 || ~2.1.0", + "zumba/amplitude-php": "^1.0.0", + "vlucas/phpdotenv": "^5.5", + "guzzlehttp/guzzle": "^7.1@dev", + "bitwasp/bech32": "dev-master", + "tkijewski/php-lnurl": "dev-master", + "chillerlan/php-qrcode": "^3.4.0", + "lnpay/php-lnd-grpc": "v0.13.0-beta", + "zhuravljov/yii2-queue-monitor": "^1.0@dev", + "supervisorphp/supervisor": "~3.0", + "supervisorphp/configuration": "^0.3.0@dev", + "creocoder/yii2-flysystem": "dev-master", + "ihor/supervisor-xml-rpc": "~0.2", + "rekurzia/yii2-papertrail-log-target": "dev-master", + "vxm/yii2-mfa": "^1.0@dev", + "lnpay/php-lndconnect": "dev-master", + "flow/jsonpath": "dev-master", + "yiisoft/yii2-mongodb": "2.1.x-dev", + "hoaaah/yii2-startbootstrap-sb-admin-2-asset": "dev-master" + }, + "require-dev": { + "yiisoft/yii2-debug": "~2.1.0", + "yiisoft/yii2-gii": "~2.1.0", + "yiisoft/yii2-faker": "~2.0.0", + "codeception/base": "~2.3.0", + "codeception/verify": "~0.4.0", + "codeception/specify": "~0.4.6", + "symfony/browser-kit": ">=2.7 <=4.2.4", + "facebook/webdriver": "^1.0.1" + }, + "config": { + "process-timeout": 1800, + "fxp-asset": { + "enabled": true + } + }, + "scripts": { + "post-install-cmd": [ + "yii\\composer\\Installer::postInstall", + "git submodule update --init" + ], + "post-create-project-cmd": [ + "yii\\composer\\Installer::postCreateProject", + "yii\\composer\\Installer::postInstall" + ] + }, + "extra": { + "yii\\composer\\Installer::postCreateProject": { + "setPermission": [ + { + "runtime": "0777", + "web/assets": "0777", + "yii": "0755" + } + ] + }, + "yii\\composer\\Installer::postInstall": { + "generateCookieValidationKey": [ + "config/web.php" + ] + } + }, + "repositories": [ + { + "type": "composer", + "url": "https://asset-packagist.org" + }, + { + "type": "vcs", + "url": "https://github.com/tkijewski/configuration" + } + ], + "autoload": { + "psr-4": { + "lnpay\\": "src", + "lnpay\\node\\": "src/node", + "lnpay\\wallet\\": "src/wallet", + "lnpay\\org\\": "src/org", + "lnpay\\fixtures\\": "tests/fixtures" + } + } +} diff --git a/composer.lock b/composer.lock new file mode 100644 index 00000000..65f9b485 --- /dev/null +++ b/composer.lock @@ -0,0 +1,7530 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "92f91971e6a88a8e8f033ae45ef121ef", + "packages": [ + { + "name": "beberlei/assert", + "version": "v3.x-dev", + "source": { + "type": "git", + "url": "https://github.com/beberlei/assert.git", + "reference": "d63a6943fc4fd1a2aedb65994e3548715105abcf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/beberlei/assert/zipball/d63a6943fc4fd1a2aedb65994e3548715105abcf", + "reference": "d63a6943fc4fd1a2aedb65994e3548715105abcf", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-json": "*", + "ext-mbstring": "*", + "ext-simplexml": "*", + "php": "^7" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "*", + "phpstan/phpstan-shim": "*", + "phpunit/phpunit": ">=6.0.0 <8" + }, + "suggest": { + "ext-intl": "Needed to allow Assertion::count(), Assertion::isCountable(), Assertion::minCount(), and Assertion::maxCount() to operate on ResourceBundles" + }, + "type": "library", + "autoload": { + "files": [ + "lib/Assert/functions.php" + ], + "psr-4": { + "Assert\\": "lib/Assert" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-2-Clause" + ], + "authors": [ + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de", + "role": "Lead Developer" + }, + { + "name": "Richard Quadling", + "email": "rquadling@gmail.com", + "role": "Collaborator" + } + ], + "description": "Thin assertion library for input validation in business models.", + "keywords": [ + "assert", + "assertion", + "validation" + ], + "support": { + "issues": "https://github.com/beberlei/assert/issues", + "source": "https://github.com/beberlei/assert/tree/v3" + }, + "time": "2019-12-19T17:51:41+00:00" + }, + { + "name": "bitwasp/bech32", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/Bit-Wasp/bech32.git", + "reference": "4817830364ca029a9371d8d2a223bbbeb43b63fa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Bit-Wasp/bech32/zipball/4817830364ca029a9371d8d2a223bbbeb43b63fa", + "reference": "4817830364ca029a9371d8d2a223bbbeb43b63fa", + "shasum": "" + }, + "require-dev": { + "phpunit/phpunit": "^5.4.0", + "squizlabs/php_codesniffer": "^2.0.0" + }, + "default-branch": true, + "type": "library", + "autoload": { + "files": [ + "src/bech32.php" + ], + "psr-4": { + "BitWasp\\Bech32\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Unlicense" + ], + "authors": [ + { + "name": "Thomas Kerin", + "homepage": "https://thomaskerin.io", + "role": "Author" + } + ], + "description": "Pure (no dependencies) implementation of bech32", + "homepage": "https://github.com/bit-wasp/bech32", + "support": { + "issues": "https://github.com/Bit-Wasp/bech32/issues", + "source": "https://github.com/Bit-Wasp/bech32/tree/master" + }, + "time": "2019-04-09T14:42:59+00:00" + }, + { + "name": "bower-asset/bootstrap", + "version": "v3.4.1", + "source": { + "type": "git", + "url": "https://github.com/twbs/bootstrap.git", + "reference": "68b0d231a13201eb14acd3dc84e51543d16e5f7e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/twbs/bootstrap/zipball/68b0d231a13201eb14acd3dc84e51543d16e5f7e", + "reference": "68b0d231a13201eb14acd3dc84e51543d16e5f7e" + }, + "require": { + "bower-asset/jquery": ">=1.9.1,<4.0" + }, + "type": "bower-asset", + "license": [ + "MIT" + ] + }, + { + "name": "bower-asset/inputmask", + "version": "3.3.11", + "source": { + "type": "git", + "url": "https://github.com/RobinHerbots/Inputmask.git", + "reference": "5e670ad62f50c738388d4dcec78d2888505ad77b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/RobinHerbots/Inputmask/zipball/5e670ad62f50c738388d4dcec78d2888505ad77b", + "reference": "5e670ad62f50c738388d4dcec78d2888505ad77b" + }, + "require": { + "bower-asset/jquery": ">=1.7" + }, + "type": "bower-asset", + "license": [ + "http://opensource.org/licenses/mit-license.php" + ] + }, + { + "name": "bower-asset/jquery", + "version": "3.6.3", + "source": { + "type": "git", + "url": "https://github.com/jquery/jquery-dist.git", + "reference": "da0f228131a578aea168b799fe4d7fe01764c98b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/jquery/jquery-dist/zipball/da0f228131a578aea168b799fe4d7fe01764c98b", + "reference": "da0f228131a578aea168b799fe4d7fe01764c98b" + }, + "type": "bower-asset", + "license": [ + "MIT" + ] + }, + { + "name": "bower-asset/punycode", + "version": "v1.3.2", + "source": { + "type": "git", + "url": "git@github.com:bestiejs/punycode.js.git", + "reference": "38c8d3131a82567bfef18da09f7f4db68c84f8a3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/bestiejs/punycode.js/zipball/38c8d3131a82567bfef18da09f7f4db68c84f8a3", + "reference": "38c8d3131a82567bfef18da09f7f4db68c84f8a3" + }, + "type": "bower-asset" + }, + { + "name": "bower-asset/startbootstrap-sb-admin-2", + "version": "v4.1.4", + "source": { + "type": "git", + "url": "git@github.com:IronSummitMedia/startbootstrap-sb-admin-2.git", + "reference": "f0309881ef82794a1bd6257cd321801bc38a0f3d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/IronSummitMedia/startbootstrap-sb-admin-2/zipball/f0309881ef82794a1bd6257cd321801bc38a0f3d", + "reference": "f0309881ef82794a1bd6257cd321801bc38a0f3d" + }, + "type": "bower-asset" + }, + { + "name": "bower-asset/yii2-pjax", + "version": "2.0.8", + "source": { + "type": "git", + "url": "git@github.com:yiisoft/jquery-pjax.git", + "reference": "a9298d57da63d14a950f1b94366a864bc62264fb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/jquery-pjax/zipball/a9298d57da63d14a950f1b94366a864bc62264fb", + "reference": "a9298d57da63d14a950f1b94366a864bc62264fb" + }, + "require": { + "bower-asset/jquery": ">=1.8" + }, + "type": "bower-asset", + "license": [ + "MIT" + ] + }, + { + "name": "cebe/markdown", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/cebe/markdown.git", + "reference": "2b2461bed9e15305486319ee552bafca75d1cdaa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/cebe/markdown/zipball/2b2461bed9e15305486319ee552bafca75d1cdaa", + "reference": "2b2461bed9e15305486319ee552bafca75d1cdaa", + "shasum": "" + }, + "require": { + "lib-pcre": "*", + "php": ">=5.4.0" + }, + "require-dev": { + "cebe/indent": "*", + "facebook/xhprof": "*@dev", + "phpunit/phpunit": "4.1.*" + }, + "default-branch": true, + "bin": [ + "bin/markdown" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "cebe\\markdown\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Carsten Brandt", + "email": "mail@cebe.cc", + "homepage": "http://cebe.cc/", + "role": "Creator" + } + ], + "description": "A super fast, highly extensible markdown parser for PHP", + "homepage": "https://github.com/cebe/markdown#readme", + "keywords": [ + "extensible", + "fast", + "gfm", + "markdown", + "markdown-extra" + ], + "support": { + "issues": "https://github.com/cebe/markdown/issues", + "source": "https://github.com/cebe/markdown" + }, + "time": "2020-02-26T01:55:18+00:00" + }, + { + "name": "chillerlan/php-qrcode", + "version": "3.4.1", + "source": { + "type": "git", + "url": "https://github.com/chillerlan/php-qrcode.git", + "reference": "468603b687a5fe75c1ff33857a45f1726c7b95a9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/chillerlan/php-qrcode/zipball/468603b687a5fe75c1ff33857a45f1726c7b95a9", + "reference": "468603b687a5fe75c1ff33857a45f1726c7b95a9", + "shasum": "" + }, + "require": { + "chillerlan/php-settings-container": "^1.2.2", + "ext-mbstring": "*", + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "phan/phan": "^3.2.2", + "phpunit/phpunit": "^8.5", + "setasign/fpdf": "^1.8.2" + }, + "suggest": { + "chillerlan/php-authenticator": "Yet another Google authenticator! Also creates URIs for mobile apps.", + "setasign/fpdf": "Required to use the QR FPDF output." + }, + "type": "library", + "autoload": { + "psr-4": { + "chillerlan\\QRCode\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kazuhiko Arase", + "homepage": "https://github.com/kazuhikoarase" + }, + { + "name": "Smiley", + "email": "smiley@chillerlan.net", + "homepage": "https://github.com/codemasher" + }, + { + "name": "Contributors", + "homepage": "https://github.com/chillerlan/php-qrcode/graphs/contributors" + } + ], + "description": "A QR code generator. PHP 7.2+", + "homepage": "https://github.com/chillerlan/php-qrcode", + "keywords": [ + "phpqrcode", + "qr", + "qr code", + "qrcode", + "qrcode-generator" + ], + "support": { + "issues": "https://github.com/chillerlan/php-qrcode/issues", + "source": "https://github.com/chillerlan/php-qrcode/tree/3.4.1" + }, + "funding": [ + { + "url": "https://www.paypal.com/donate?hosted_button_id=WLYUNAT9ZTJZ4", + "type": "custom" + }, + { + "url": "https://ko-fi.com/codemasher", + "type": "ko_fi" + } + ], + "time": "2021-09-03T17:54:45+00:00" + }, + { + "name": "chillerlan/php-settings-container", + "version": "v1.2.x-dev", + "source": { + "type": "git", + "url": "https://github.com/chillerlan/php-settings-container.git", + "reference": "d1b5284d6eb3a767459738bb0b20073f0cb3eeaf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/chillerlan/php-settings-container/zipball/d1b5284d6eb3a767459738bb0b20073f0cb3eeaf", + "reference": "d1b5284d6eb3a767459738bb0b20073f0cb3eeaf", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^8.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "chillerlan\\Settings\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Smiley", + "email": "smiley@chillerlan.net", + "homepage": "https://github.com/codemasher" + } + ], + "description": "A container class for immutable settings objects. Not a DI container. PHP 7.2+", + "homepage": "https://github.com/chillerlan/php-settings-container", + "keywords": [ + "PHP7", + "Settings", + "container", + "helper" + ], + "support": { + "issues": "https://github.com/chillerlan/php-settings-container/issues", + "source": "https://github.com/chillerlan/php-settings-container" + }, + "funding": [ + { + "url": "https://www.paypal.com/donate?hosted_button_id=WLYUNAT9ZTJZ4", + "type": "custom" + }, + { + "url": "https://ko-fi.com/codemasher", + "type": "ko_fi" + } + ], + "time": "2021-09-03T17:33:25+00:00" + }, + { + "name": "creocoder/yii2-flysystem", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/creocoder/yii2-flysystem.git", + "reference": "1f2ded6d4e9c6a99aa7aab99d3797e4c834c1a13" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/creocoder/yii2-flysystem/zipball/1f2ded6d4e9c6a99aa7aab99d3797e4c834c1a13", + "reference": "1f2ded6d4e9c6a99aa7aab99d3797e4c834c1a13", + "shasum": "" + }, + "require": { + "league/flysystem": "~1.0", + "yiisoft/yii2": "~2.0.0" + }, + "conflict": { + "league/flysystem-aws-s3-v3": "<1.0.26" + }, + "require-dev": { + "league/flysystem-aws-s3-v3": "~1.0", + "league/flysystem-azure": "~1.0", + "league/flysystem-cached-adapter": "~1.0", + "league/flysystem-gridfs": "~1.0", + "league/flysystem-rackspace": "~1.0", + "league/flysystem-replicate-adapter": "~1.0", + "league/flysystem-sftp": "~1.0", + "league/flysystem-webdav": "~1.0", + "league/flysystem-ziparchive": "~1.0", + "spatie/flysystem-dropbox": "~1.0" + }, + "default-branch": true, + "type": "yii2-extension", + "autoload": { + "psr-4": { + "creocoder\\flysystem\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Alexander Kochetov", + "email": "creocoder@gmail.com" + } + ], + "description": "The flysystem extension for the Yii framework", + "keywords": [ + "Flysystem", + "GridFS", + "WebDAV", + "aws", + "azure", + "copy.com", + "dropbox", + "files", + "filesystem", + "ftp", + "rackspace", + "s3", + "sftp", + "yii2" + ], + "support": { + "issues": "https://github.com/creocoder/yii2-flysystem/issues", + "source": "https://github.com/creocoder/yii2-flysystem/tree/1.1.0" + }, + "time": "2021-11-09T19:57:53+00:00" + }, + { + "name": "doctrine/deprecations", + "version": "v1.0.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/deprecations.git", + "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de", + "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de", + "shasum": "" + }, + "require": { + "php": "^7.1|^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9", + "phpunit/phpunit": "^7.5|^8.5|^9.5", + "psr/log": "^1|^2|^3" + }, + "suggest": { + "psr/log": "Allows logging deprecations via PSR-3 logger implementation" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", + "homepage": "https://www.doctrine-project.org/", + "support": { + "issues": "https://github.com/doctrine/deprecations/issues", + "source": "https://github.com/doctrine/deprecations/tree/v1.0.0" + }, + "time": "2022-05-02T15:47:09+00:00" + }, + { + "name": "doctrine/lexer", + "version": "2.1.x-dev", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "e74756f7517d72c238b9163fcd1ed54eb1f92bd0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/e74756f7517d72c238b9163fcd1ed54eb1f92bd0", + "reference": "e74756f7517d72c238b9163fcd1ed54eb1f92bd0", + "shasum": "" + }, + "require": { + "doctrine/deprecations": "^1.0", + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9 || ^10", + "phpstan/phpstan": "^1.3", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "psalm/plugin-phpunit": "^0.18.3", + "vimeo/psalm": "^4.11 || ^5.0" + }, + "default-branch": true, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Lexer\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "https://www.doctrine-project.org/projects/lexer.html", + "keywords": [ + "annotations", + "docblock", + "lexer", + "parser", + "php" + ], + "support": { + "issues": "https://github.com/doctrine/lexer/issues", + "source": "https://github.com/doctrine/lexer/tree/2.1.x" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", + "type": "tidelift" + } + ], + "time": "2022-12-29T09:22:42+00:00" + }, + { + "name": "egulias/email-validator", + "version": "3.x-dev", + "source": { + "type": "git", + "url": "https://github.com/egulias/EmailValidator.git", + "reference": "b531a2311709443320c786feb4519cfaf94af796" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/b531a2311709443320c786feb4519cfaf94af796", + "reference": "b531a2311709443320c786feb4519cfaf94af796", + "shasum": "" + }, + "require": { + "doctrine/lexer": "^1.2|^2", + "php": ">=7.2", + "symfony/polyfill-intl-idn": "^1.15" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.8|^9.3.3", + "vimeo/psalm": "^4" + }, + "suggest": { + "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" + }, + "default-branch": true, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Egulias\\EmailValidator\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Eduardo Gulias Davis" + } + ], + "description": "A library for validating emails against several RFCs", + "homepage": "https://github.com/egulias/EmailValidator", + "keywords": [ + "email", + "emailvalidation", + "emailvalidator", + "validation", + "validator" + ], + "support": { + "issues": "https://github.com/egulias/EmailValidator/issues", + "source": "https://github.com/egulias/EmailValidator/tree/3.2.5" + }, + "funding": [ + { + "url": "https://github.com/egulias", + "type": "github" + } + ], + "time": "2023-01-02T17:26:14+00:00" + }, + { + "name": "ezyang/htmlpurifier", + "version": "v4.16.0", + "source": { + "type": "git", + "url": "https://github.com/ezyang/htmlpurifier.git", + "reference": "523407fb06eb9e5f3d59889b3978d5bfe94299c8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/523407fb06eb9e5f3d59889b3978d5bfe94299c8", + "reference": "523407fb06eb9e5f3d59889b3978d5bfe94299c8", + "shasum": "" + }, + "require": { + "php": "~5.6.0 || ~7.0.0 || ~7.1.0 || ~7.2.0 || ~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0" + }, + "require-dev": { + "cerdic/css-tidy": "^1.7 || ^2.0", + "simpletest/simpletest": "dev-master" + }, + "suggest": { + "cerdic/css-tidy": "If you want to use the filter 'Filter.ExtractStyleBlocks'.", + "ext-bcmath": "Used for unit conversion and imagecrash protection", + "ext-iconv": "Converts text to and from non-UTF-8 encodings", + "ext-tidy": "Used for pretty-printing HTML" + }, + "type": "library", + "autoload": { + "files": [ + "library/HTMLPurifier.composer.php" + ], + "psr-0": { + "HTMLPurifier": "library/" + }, + "exclude-from-classmap": [ + "/library/HTMLPurifier/Language/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1-or-later" + ], + "authors": [ + { + "name": "Edward Z. Yang", + "email": "admin@htmlpurifier.org", + "homepage": "http://ezyang.com" + } + ], + "description": "Standards compliant HTML filter written in PHP", + "homepage": "http://htmlpurifier.org/", + "keywords": [ + "html" + ], + "support": { + "issues": "https://github.com/ezyang/htmlpurifier/issues", + "source": "https://github.com/ezyang/htmlpurifier/tree/v4.16.0" + }, + "time": "2022-09-18T07:06:19+00:00" + }, + { + "name": "flow/jsonpath", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/FlowCommunications/JSONPath.git", + "reference": "998cb296e7cf571dac397e8d1325e4b24bccfdd3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FlowCommunications/JSONPath/zipball/998cb296e7cf571dac397e8d1325e4b24bccfdd3", + "reference": "998cb296e7cf571dac397e8d1325e4b24bccfdd3", + "shasum": "" + }, + "require": { + "php": ">=5.4.0" + }, + "require-dev": { + "peekmo/jsonpath": "dev-master", + "phpunit/phpunit": "^7.0" + }, + "default-branch": true, + "type": "library", + "autoload": { + "psr-0": { + "Flow\\JSONPath": "src/", + "Flow\\JSONPath\\Test": "tests/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Stephen Frank", + "email": "stephen@flowsa.com" + } + ], + "description": "JSONPath implementation for parsing, searching and flattening arrays", + "support": { + "issues": "https://github.com/FlowCommunications/JSONPath/issues", + "source": "https://github.com/FlowCommunications/JSONPath/tree/master" + }, + "abandoned": "softcreatr/jsonpath", + "time": "2020-10-14T12:22:28+00:00" + }, + { + "name": "google/common-protos", + "version": "1.4.0", + "source": { + "type": "git", + "url": "https://github.com/googleapis/common-protos-php.git", + "reference": "b1ee63636d94fe88f6cff600a0f23fae06b6fa2e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/googleapis/common-protos-php/zipball/b1ee63636d94fe88f6cff600a0f23fae06b6fa2e", + "reference": "b1ee63636d94fe88f6cff600a0f23fae06b6fa2e", + "shasum": "" + }, + "require": { + "google/protobuf": "^3.6.1" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.36", + "sami/sami": "*" + }, + "type": "library", + "autoload": { + "psr-4": { + "Google\\": "src", + "GPBMetadata\\Google\\": "metadata" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "description": "Google API Common Protos for PHP", + "homepage": "https://github.com/googleapis/common-protos-php", + "keywords": [ + "google" + ], + "support": { + "issues": "https://github.com/googleapis/common-protos-php/issues", + "source": "https://github.com/googleapis/common-protos-php/tree/1.4.0" + }, + "time": "2021-11-18T21:49:24+00:00" + }, + { + "name": "google/protobuf", + "version": "v3.21.12", + "source": { + "type": "git", + "url": "https://github.com/protocolbuffers/protobuf-php.git", + "reference": "93019df2df0f8c5c01757ef79f3f077d2cb35b65" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/protocolbuffers/protobuf-php/zipball/93019df2df0f8c5c01757ef79f3f077d2cb35b65", + "reference": "93019df2df0f8c5c01757ef79f3f077d2cb35b65", + "shasum": "" + }, + "require": { + "php": ">=7.0.0" + }, + "require-dev": { + "phpunit/phpunit": ">=5.0.0" + }, + "suggest": { + "ext-bcmath": "Need to support JSON deserialization" + }, + "type": "library", + "autoload": { + "psr-4": { + "Google\\Protobuf\\": "src/Google/Protobuf", + "GPBMetadata\\Google\\Protobuf\\": "src/GPBMetadata/Google/Protobuf" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "proto library for PHP", + "homepage": "https://developers.google.com/protocol-buffers/", + "keywords": [ + "proto" + ], + "support": { + "source": "https://github.com/protocolbuffers/protobuf-php/tree/v3.21.12" + }, + "time": "2022-12-14T14:50:49+00:00" + }, + { + "name": "graham-campbell/result-type", + "version": "1.1.x-dev", + "source": { + "type": "git", + "url": "https://github.com/GrahamCampbell/Result-Type.git", + "reference": "821e73872c8eec935700049e46e009382a2efaaf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/821e73872c8eec935700049e46e009382a2efaaf", + "reference": "821e73872c8eec935700049e46e009382a2efaaf", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "phpoption/phpoption": "^1.9" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.30 || ^9.5.25" + }, + "default-branch": true, + "type": "library", + "autoload": { + "psr-4": { + "GrahamCampbell\\ResultType\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + } + ], + "description": "An Implementation Of The Result Type", + "keywords": [ + "Graham Campbell", + "GrahamCampbell", + "Result Type", + "Result-Type", + "result" + ], + "support": { + "issues": "https://github.com/GrahamCampbell/Result-Type/issues", + "source": "https://github.com/GrahamCampbell/Result-Type/tree/1.1" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/graham-campbell/result-type", + "type": "tidelift" + } + ], + "time": "2022-10-15T20:51:53+00:00" + }, + { + "name": "grpc/grpc", + "version": "1.42.0", + "source": { + "type": "git", + "url": "https://github.com/grpc/grpc-php.git", + "reference": "9fa44f104cb92e924d4da547323a97f3d8aca6d4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/grpc/grpc-php/zipball/9fa44f104cb92e924d4da547323a97f3d8aca6d4", + "reference": "9fa44f104cb92e924d4da547323a97f3d8aca6d4", + "shasum": "" + }, + "require": { + "php": ">=7.0.0" + }, + "require-dev": { + "google/auth": "^v1.3.0" + }, + "suggest": { + "ext-protobuf": "For better performance, install the protobuf C extension.", + "google/protobuf": "To get started using grpc quickly, install the native protobuf library." + }, + "type": "library", + "autoload": { + "psr-4": { + "Grpc\\": "src/lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "description": "gRPC library for PHP", + "homepage": "https://grpc.io", + "keywords": [ + "rpc" + ], + "support": { + "source": "https://github.com/grpc/grpc-php/tree/v1.42.0" + }, + "time": "2021-11-19T08:13:51+00:00" + }, + { + "name": "guzzlehttp/guzzle", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "8459341c16f96b9610dcdfe22bd3060d60c0da04" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/8459341c16f96b9610dcdfe22bd3060d60c0da04", + "reference": "8459341c16f96b9610dcdfe22bd3060d60c0da04", + "shasum": "" + }, + "require": { + "ext-json": "*", + "guzzlehttp/promises": "^1.5", + "guzzlehttp/psr7": "^1.9 || ^2.4", + "php": "^7.2.5 || ^8.0", + "psr/http-client": "^1.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" + }, + "provide": { + "psr/http-client-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.1", + "ext-curl": "*", + "php-http/client-integration-tests": "^3.0", + "phpunit/phpunit": "^8.5.29 || ^9.5.23", + "psr/log": "^1.1 || ^2.0 || ^3.0" + }, + "suggest": { + "ext-curl": "Required for CURL handler support", + "ext-intl": "Required for Internationalized Domain Name (IDN) support", + "psr/log": "Required for using the Log middleware" + }, + "default-branch": true, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + }, + "branch-alias": { + "dev-master": "7.5-dev" + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Jeremy Lindblom", + "email": "jeremeamia@gmail.com", + "homepage": "https://github.com/jeremeamia" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "psr-18", + "psr-7", + "rest", + "web service" + ], + "support": { + "issues": "https://github.com/guzzle/guzzle/issues", + "source": "https://github.com/guzzle/guzzle/tree/master" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", + "type": "tidelift" + } + ], + "time": "2022-08-29T11:03:19+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "b94b2807d85443f9719887892882d0329d1e2598" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/b94b2807d85443f9719887892882d0329d1e2598", + "reference": "b94b2807d85443f9719887892882d0329d1e2598", + "shasum": "" + }, + "require": { + "php": ">=5.5" + }, + "require-dev": { + "symfony/phpunit-bridge": "^4.4 || ^5.1" + }, + "default-branch": true, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.5-dev" + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "support": { + "issues": "https://github.com/guzzle/promises/issues", + "source": "https://github.com/guzzle/promises/tree/1.5.2" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", + "type": "tidelift" + } + ], + "time": "2022-08-28T14:55:35+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "1.x-dev", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "e98e3e6d4f86621a9b75f623996e6bbdeb4b9318" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/e98e3e6d4f86621a9b75f623996e6bbdeb4b9318", + "reference": "e98e3e6d4f86621a9b75f623996e6bbdeb4b9318", + "shasum": "" + }, + "require": { + "php": ">=5.4.0", + "psr/http-message": "~1.0", + "ralouphie/getallheaders": "^2.0.5 || ^3.0.0" + }, + "provide": { + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "ext-zlib": "*", + "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.10" + }, + "suggest": { + "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "psr-7", + "request", + "response", + "stream", + "uri", + "url" + ], + "support": { + "issues": "https://github.com/guzzle/psr7/issues", + "source": "https://github.com/guzzle/psr7/tree/1.9.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", + "type": "tidelift" + } + ], + "time": "2022-06-20T21:43:03+00:00" + }, + { + "name": "hoaaah/yii2-startbootstrap-sb-admin-2-asset", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/hoaaah/yii2-startbootstrap-sb-admin-2-asset.git", + "reference": "8bdbc37d9eed2058be5572b44b4a074b3ce921ea" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hoaaah/yii2-startbootstrap-sb-admin-2-asset/zipball/8bdbc37d9eed2058be5572b44b4a074b3ce921ea", + "reference": "8bdbc37d9eed2058be5572b44b4a074b3ce921ea", + "shasum": "" + }, + "require": { + "bower-asset/startbootstrap-sb-admin-2": "~4.0", + "yiisoft/yii2": "*", + "yiisoft/yii2-bootstrap4": "*" + }, + "default-branch": true, + "type": "yii2-extension", + "autoload": { + "psr-4": { + "hoaaah\\sbadmin2\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "hoaaah", + "email": "heru@belajararief.com" + } + ], + "description": "This extensions is library for Startbootstrap SB Admin 2 Template with Bootstrap4", + "keywords": [ + "extension", + "yii2" + ], + "support": { + "issues": "https://github.com/hoaaah/yii2-startbootstrap-sb-admin-2-asset/issues", + "source": "https://github.com/hoaaah/yii2-startbootstrap-sb-admin-2-asset/tree/v0.1.3" + }, + "time": "2021-06-04T16:32:22+00:00" + }, + { + "name": "ihor/supervisor-xml-rpc", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/ihor/SupervisorXMLRPC.git", + "reference": "a569ecc340e119df360c51b0af28488e75566421" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ihor/SupervisorXMLRPC/zipball/a569ecc340e119df360c51b0af28488e75566421", + "reference": "a569ecc340e119df360c51b0af28488e75566421", + "shasum": "" + }, + "require": { + "php": ">=5.4.0" + }, + "default-branch": true, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.2-dev" + } + }, + "autoload": { + "psr-0": { + "Supervisor\\": "." + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ihor Burlachenko", + "email": "burlachenko.ihor@gmail.com" + } + ], + "description": "Simple Supervisor XML RPC Client in PHP (http://supervisord.org)", + "keywords": [ + "api", + "supervisor", + "supervisorctl", + "supervisord", + "xml-rpc" + ], + "support": { + "issues": "https://github.com/ihor/SupervisorXMLRPC/issues", + "source": "https://github.com/ihor/SupervisorXMLRPC/tree/0.2.1" + }, + "time": "2019-05-03T09:44:37+00:00" + }, + { + "name": "indigophp/ini", + "version": "v0.2.0", + "source": { + "type": "git", + "url": "https://github.com/indigophp/ini.git", + "reference": "182167ee30280b8f875aac252d6c8334f4d9aec2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/indigophp/ini/zipball/182167ee30280b8f875aac252d6c8334f4d9aec2", + "reference": "182167ee30280b8f875aac252d6c8334f4d9aec2", + "shasum": "" + }, + "require": { + "php": ">=5.4.5" + }, + "require-dev": { + "coduo/phpspec-data-provider-extension": "^1.0", + "henrikbjorn/phpspec-code-coverage": "^1.0", + "phpspec/phpspec": "^2.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.3-dev" + } + }, + "autoload": { + "psr-4": { + "Indigo\\Ini\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "Provides better INI parsing and rendering", + "homepage": "http://indigophp.com", + "keywords": [ + "ini", + "parser", + "renderer" + ], + "support": { + "issues": "https://github.com/indigophp/ini/issues", + "source": "https://github.com/indigophp/ini/tree/master" + }, + "abandoned": true, + "time": "2016-01-04T01:21:08+00:00" + }, + { + "name": "league/flysystem", + "version": "1.x-dev", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem.git", + "reference": "3239285c825c152bcc315fe0e87d6b55f5972ed1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/3239285c825c152bcc315fe0e87d6b55f5972ed1", + "reference": "3239285c825c152bcc315fe0e87d6b55f5972ed1", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "league/mime-type-detection": "^1.3", + "php": "^7.2.5 || ^8.0" + }, + "conflict": { + "league/flysystem-sftp": "<1.0.6" + }, + "require-dev": { + "phpspec/prophecy": "^1.11.1", + "phpunit/phpunit": "^8.5.8" + }, + "suggest": { + "ext-ftp": "Allows you to use FTP server storage", + "ext-openssl": "Allows you to use FTPS server storage", + "league/flysystem-aws-s3-v2": "Allows you to use S3 storage with AWS SDK v2", + "league/flysystem-aws-s3-v3": "Allows you to use S3 storage with AWS SDK v3", + "league/flysystem-azure": "Allows you to use Windows Azure Blob storage", + "league/flysystem-cached-adapter": "Flysystem adapter decorator for metadata caching", + "league/flysystem-eventable-filesystem": "Allows you to use EventableFilesystem", + "league/flysystem-rackspace": "Allows you to use Rackspace Cloud Files", + "league/flysystem-sftp": "Allows you to use SFTP server storage via phpseclib", + "league/flysystem-webdav": "Allows you to use WebDAV storage", + "league/flysystem-ziparchive": "Allows you to use ZipArchive adapter", + "spatie/flysystem-dropbox": "Allows you to use Dropbox storage", + "srmklive/flysystem-dropbox-v2": "Allows you to use Dropbox storage for PHP 5 applications" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Flysystem\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frenky.net" + } + ], + "description": "Filesystem abstraction: Many filesystems, one API.", + "keywords": [ + "Cloud Files", + "WebDAV", + "abstraction", + "aws", + "cloud", + "copy.com", + "dropbox", + "file systems", + "files", + "filesystem", + "filesystems", + "ftp", + "rackspace", + "remote", + "s3", + "sftp", + "storage" + ], + "support": { + "issues": "https://github.com/thephpleague/flysystem/issues", + "source": "https://github.com/thephpleague/flysystem/tree/1.x" + }, + "funding": [ + { + "url": "https://offset.earth/frankdejonge", + "type": "other" + } + ], + "time": "2022-10-04T09:16:37+00:00" + }, + { + "name": "league/mime-type-detection", + "version": "1.11.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/mime-type-detection.git", + "reference": "ff6248ea87a9f116e78edd6002e39e5128a0d4dd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/ff6248ea87a9f116e78edd6002e39e5128a0d4dd", + "reference": "ff6248ea87a9f116e78edd6002e39e5128a0d4dd", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.2", + "phpstan/phpstan": "^0.12.68", + "phpunit/phpunit": "^8.5.8 || ^9.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\MimeTypeDetection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "Mime-type detection for Flysystem", + "support": { + "issues": "https://github.com/thephpleague/mime-type-detection/issues", + "source": "https://github.com/thephpleague/mime-type-detection/tree/1.11.0" + }, + "funding": [ + { + "url": "https://github.com/frankdejonge", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/flysystem", + "type": "tidelift" + } + ], + "time": "2022-04-17T13:12:02+00:00" + }, + { + "name": "lnpay/php-lnd-grpc", + "version": "v0.13.0-beta", + "source": { + "type": "git", + "url": "https://github.com/lnpay/php-lnd-grpc.git", + "reference": "9740411d91e98ae27c98da648213dd27bc46ba70" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/lnpay/php-lnd-grpc/zipball/9740411d91e98ae27c98da648213dd27bc46ba70", + "reference": "9740411d91e98ae27c98da648213dd27bc46ba70", + "shasum": "" + }, + "require": { + "google/common-protos": "^1.1", + "google/protobuf": "^3.8.0", + "grpc/grpc": "^1.22.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Lnrpc\\": "Lnrpc/", + "Signrpc\\": "Signrpc/", + "Chainrpc\\": "Chainrpc/", + "Routerrpc\\": "Routerrpc/", + "Walletrpc\\": "Walletrpc/", + "GPBMetadata\\": "GPBMetadata/", + "Invoicesrpc\\": "Invoicesrpc/", + "GPBMetadata\\Google\\": "grpc/third_party/protobuf/php/src/GPBMetadata/Google/Protobuf/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "authors": [ + { + "name": "Tim Kijewski", + "email": "bootstrapbandit7@gmail.com" + } + ], + "description": "PHP LND RPC Implementation", + "support": { + "issues": "https://github.com/lnpay/php-lnd-grpc/issues", + "source": "https://github.com/lnpay/php-lnd-grpc/tree/v0.13.0-beta" + }, + "time": "2021-06-23T18:28:31+00:00" + }, + { + "name": "lnpay/php-lndconnect", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/lnpay/php-lndconnect.git", + "reference": "3fc7317f00837773c0744030de4ec4fe55a6599c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/lnpay/php-lndconnect/zipball/3fc7317f00837773c0744030de4ec4fe55a6599c", + "reference": "3fc7317f00837773c0744030de4ec4fe55a6599c", + "shasum": "" + }, + "require-dev": { + "phpunit/phpunit": "^5.4.0", + "squizlabs/php_codesniffer": "^2.0.0" + }, + "default-branch": true, + "type": "library", + "autoload": { + "psr-4": { + "LndConnect\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Tim Kijewski", + "role": "Author" + } + ], + "description": "PHP implementation of LNDConnect Spec", + "homepage": "https://github.com/lnpay/php-lndconnect", + "keywords": [ + "lightning-network", + "lndconnect", + "macaroon" + ], + "support": { + "issues": "https://github.com/lnpay/php-lndconnect/issues", + "source": "https://github.com/lnpay/php-lndconnect/tree/master" + }, + "time": "2020-07-24T19:01:06+00:00" + }, + { + "name": "monolog/monolog", + "version": "1.x-dev", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "904713c5929655dc9b97288b69cfeedad610c9a1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/904713c5929655dc9b97288b69cfeedad610c9a1", + "reference": "904713c5929655dc9b97288b69cfeedad610c9a1", + "shasum": "" + }, + "require": { + "php": ">=5.3.0", + "psr/log": "~1.0" + }, + "provide": { + "psr/log-implementation": "1.0.0" + }, + "require-dev": { + "aws/aws-sdk-php": "^2.4.9 || ^3.0", + "doctrine/couchdb": "~1.0@dev", + "graylog2/gelf-php": "~1.0", + "php-amqplib/php-amqplib": "~2.4", + "php-console/php-console": "^3.1.3", + "phpstan/phpstan": "^0.12.59", + "phpunit/phpunit": "~4.5", + "ruflin/elastica": ">=0.90 <3.0", + "sentry/sentry": "^0.13", + "swiftmailer/swiftmailer": "^5.3|^6.0" + }, + "suggest": { + "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", + "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-mongo": "Allow sending log messages to a MongoDB server", + "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", + "mongodb/mongodb": "Allow sending log messages to a MongoDB server via PHP Driver", + "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", + "php-console/php-console": "Allow sending log messages to Google Chrome", + "rollbar/rollbar": "Allow sending log messages to Rollbar", + "ruflin/elastica": "Allow sending log messages to an Elastic Search server", + "sentry/sentry": "Allow sending log messages to a Sentry server" + }, + "type": "library", + "autoload": { + "psr-4": { + "Monolog\\": "src/Monolog" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "Sends your logs to files, sockets, inboxes, databases and various web services", + "homepage": "http://github.com/Seldaek/monolog", + "keywords": [ + "log", + "logging", + "psr-3" + ], + "support": { + "issues": "https://github.com/Seldaek/monolog/issues", + "source": "https://github.com/Seldaek/monolog/tree/1.27.1" + }, + "funding": [ + { + "url": "https://github.com/Seldaek", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", + "type": "tidelift" + } + ], + "time": "2022-06-09T08:53:42+00:00" + }, + { + "name": "npm-asset/bootstrap", + "version": "4.6.2", + "dist": { + "type": "tar", + "url": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.6.2.tgz" + }, + "type": "npm-asset", + "license": [ + "MIT" + ] + }, + { + "name": "paragonie/constant_time_encoding", + "version": "v2.6.3", + "source": { + "type": "git", + "url": "https://github.com/paragonie/constant_time_encoding.git", + "reference": "58c3f47f650c94ec05a151692652a868995d2938" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/58c3f47f650c94ec05a151692652a868995d2938", + "reference": "58c3f47f650c94ec05a151692652a868995d2938", + "shasum": "" + }, + "require": { + "php": "^7|^8" + }, + "require-dev": { + "phpunit/phpunit": "^6|^7|^8|^9", + "vimeo/psalm": "^1|^2|^3|^4" + }, + "type": "library", + "autoload": { + "psr-4": { + "ParagonIE\\ConstantTime\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Paragon Initiative Enterprises", + "email": "security@paragonie.com", + "homepage": "https://paragonie.com", + "role": "Maintainer" + }, + { + "name": "Steve 'Sc00bz' Thomas", + "email": "steve@tobtu.com", + "homepage": "https://www.tobtu.com", + "role": "Original Developer" + } + ], + "description": "Constant-time Implementations of RFC 4648 Encoding (Base-64, Base-32, Base-16)", + "keywords": [ + "base16", + "base32", + "base32_decode", + "base32_encode", + "base64", + "base64_decode", + "base64_encode", + "bin2hex", + "encoding", + "hex", + "hex2bin", + "rfc4648" + ], + "support": { + "email": "info@paragonie.com", + "issues": "https://github.com/paragonie/constant_time_encoding/issues", + "source": "https://github.com/paragonie/constant_time_encoding" + }, + "time": "2022-06-14T06:56:20+00:00" + }, + { + "name": "paragonie/random_compat", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/paragonie/random_compat.git", + "reference": "64f3265002e9e181436942aac2fbd482e186dc55" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paragonie/random_compat/zipball/64f3265002e9e181436942aac2fbd482e186dc55", + "reference": "64f3265002e9e181436942aac2fbd482e186dc55", + "shasum": "" + }, + "require": { + "php": ">=5.2.0" + }, + "require-dev": { + "phpunit/phpunit": "*" + }, + "suggest": { + "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." + }, + "default-branch": true, + "type": "library", + "autoload": { + "files": [ + "lib/random.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Paragon Initiative Enterprises", + "email": "security@paragonie.com", + "homepage": "https://paragonie.com" + } + ], + "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", + "keywords": [ + "csprng", + "polyfill", + "pseudorandom", + "random" + ], + "support": { + "email": "info@paragonie.com", + "issues": "https://github.com/paragonie/random_compat/issues", + "source": "https://github.com/paragonie/random_compat" + }, + "time": "2022-06-19T18:08:39+00:00" + }, + { + "name": "phpoption/phpoption", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/php-option.git", + "reference": "00430c0532ae544fb1c81e45705b3d356bfc25d0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/00430c0532ae544fb1c81e45705b3d356bfc25d0", + "reference": "00430c0532ae544fb1c81e45705b3d356bfc25d0", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.1", + "phpunit/phpunit": "^8.5.30 || ^9.5.25" + }, + "default-branch": true, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": true + }, + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "autoload": { + "psr-4": { + "PhpOption\\": "src/PhpOption/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com", + "homepage": "https://github.com/schmittjoh" + }, + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + } + ], + "description": "Option Type for PHP", + "keywords": [ + "language", + "option", + "php", + "type" + ], + "support": { + "issues": "https://github.com/schmittjoh/php-option/issues", + "source": "https://github.com/schmittjoh/php-option/tree/master" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption", + "type": "tidelift" + } + ], + "time": "2022-10-15T20:52:05+00:00" + }, + { + "name": "psr/http-client", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-client.git", + "reference": "22b2ef5687f43679481615605d7a15c557ce85b1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/22b2ef5687f43679481615605d7a15c557ce85b1", + "reference": "22b2ef5687f43679481615605d7a15c557ce85b1", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0", + "psr/http-message": "^1.0" + }, + "default-branch": true, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP clients", + "homepage": "https://github.com/php-fig/http-client", + "keywords": [ + "http", + "http-client", + "psr", + "psr-18" + ], + "support": { + "source": "https://github.com/php-fig/http-client/tree/master" + }, + "time": "2020-09-19T09:12:31+00:00" + }, + { + "name": "psr/http-message", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "efd67d1dc14a7ef4fc4e518e7dee91c271d524e4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/efd67d1dc14a7ef4fc4e518e7dee91c271d524e4", + "reference": "efd67d1dc14a7ef4fc4e518e7dee91c271d524e4", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "default-branch": true, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-message/tree/master" + }, + "time": "2019-08-29T13:16:46+00:00" + }, + { + "name": "psr/log", + "version": "1.1.4", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "d49695b909c3b7628b6289db5479a1c204601f11" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", + "reference": "d49695b909c3b7628b6289db5479a1c204601f11", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/1.1.4" + }, + "time": "2021-05-03T11:20:27+00:00" + }, + { + "name": "ralouphie/getallheaders", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" + }, + "type": "library", + "autoload": { + "files": [ + "src/getallheaders.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "description": "A polyfill for getallheaders.", + "support": { + "issues": "https://github.com/ralouphie/getallheaders/issues", + "source": "https://github.com/ralouphie/getallheaders/tree/develop" + }, + "time": "2019-03-08T08:55:37+00:00" + }, + { + "name": "rekurzia/yii2-papertrail-log-target", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/rekurzia/yii2-papertrail-log-target.git", + "reference": "72aba17659587dc8f5fa30db1a4bb3945ede811a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/rekurzia/yii2-papertrail-log-target/zipball/72aba17659587dc8f5fa30db1a4bb3945ede811a", + "reference": "72aba17659587dc8f5fa30db1a4bb3945ede811a", + "shasum": "" + }, + "require": { + "ext-sockets": "*", + "monolog/monolog": "~1.0", + "php": "~5.6|~7.0", + "yiisoft/yii2": "~2.0" + }, + "require-dev": { + "yiisoft/yii2-coding-standards": "~2.0" + }, + "default-branch": true, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Vladimír Kriška", + "email": "ujovlado@gmail.com" + } + ], + "description": "Minimal implementation of Yii2 log target sending messages to Papertrail", + "homepage": "https://github.com/rekurzia/yii2-papertrail-log-target", + "keywords": [ + "log", + "papertrail", + "target", + "yii2" + ], + "support": { + "issues": "https://github.com/rekurzia/yii2-papertrail-log-target/issues", + "source": "https://github.com/rekurzia/yii2-papertrail-log-target/tree/v0.10.0" + }, + "time": "2017-01-22T18:53:21+00:00" + }, + { + "name": "spomky-labs/otphp", + "version": "v9.1.4", + "source": { + "type": "git", + "url": "https://github.com/Spomky-Labs/otphp.git", + "reference": "48d463cf909320399fe08eab2e1cd18d899d5068" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Spomky-Labs/otphp/zipball/48d463cf909320399fe08eab2e1cd18d899d5068", + "reference": "48d463cf909320399fe08eab2e1cd18d899d5068", + "shasum": "" + }, + "require": { + "beberlei/assert": "^2.4|^3.0", + "paragonie/constant_time_encoding": "^2.0", + "php": "^7.1" + }, + "require-dev": { + "phpunit/phpunit": "^6.0", + "satooshi/php-coveralls": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "OTPHP\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Florent Morselli", + "homepage": "https://github.com/Spomky" + }, + { + "name": "All contributors", + "homepage": "https://github.com/Spomky-Labs/otphp/contributors" + } + ], + "description": "A PHP library for generating one time passwords according to RFC 4226 (HOTP Algorithm) and the RFC 6238 (TOTP Algorithm) and compatible with Google Authenticator", + "homepage": "https://github.com/Spomky-Labs/otphp", + "keywords": [ + "FreeOTP", + "RFC 4226", + "RFC 6238", + "google authenticator", + "hotp", + "otp", + "totp" + ], + "support": { + "issues": "https://github.com/Spomky-Labs/otphp/issues", + "source": "https://github.com/Spomky-Labs/otphp/tree/v9.0" + }, + "time": "2019-03-18T10:08:51+00:00" + }, + { + "name": "supervisorphp/configuration", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/tkijewski/configuration.git", + "reference": "d029bae4ad7ecde10d728ff357135b79204c9914" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/tkijewski/configuration/zipball/d029bae4ad7ecde10d728ff357135b79204c9914", + "reference": "d029bae4ad7ecde10d728ff357135b79204c9914", + "shasum": "" + }, + "require": { + "indigophp/ini": "^0.2", + "league/flysystem": "^1.0", + "php": ">=5.4", + "symfony/options-resolver": "^2.6|^3.0|^4.0|^5.0" + }, + "require-dev": { + "henrikbjorn/phpspec-code-coverage": "^1.0", + "phpspec/phpspec": "^2.4" + }, + "default-branch": true, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.3-dev" + } + }, + "autoload": { + "psr-4": { + "Supervisor\\Configuration\\": "src/" + }, + "files": [ + "src/functions.php" + ] + }, + "autoload-dev": { + "psr-4": { + "spec\\Supervisor\\Configuration\\": "spec/" + } + }, + "scripts": { + "test": [ + "vendor/bin/phpspec run" + ], + "test-ci": [ + "vendor/bin/phpspec run -c phpspec.yml.ci" + ] + }, + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "Manage Supervisor configuration in PHP", + "homepage": "http://supervisorphp.com", + "keywords": [ + "configuration", + "supervisor" + ], + "support": { + "source": "https://github.com/tkijewski/configuration/tree/master" + }, + "time": "2020-09-22T13:54:31+00:00" + }, + { + "name": "supervisorphp/supervisor", + "version": "v3.0.0", + "source": { + "type": "git", + "url": "https://github.com/supervisorphp/supervisor.git", + "reference": "41b52b9e74daffd58c4993b21d59c29515a3493e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/supervisorphp/supervisor/zipball/41b52b9e74daffd58c4993b21d59c29515a3493e", + "reference": "41b52b9e74daffd58c4993b21d59c29515a3493e", + "shasum": "" + }, + "require": { + "php": ">=5.4.0" + }, + "require-dev": { + "behat/behat": "~3.0.0", + "guzzlehttp/guzzle": ">=4.0.0", + "henrikbjorn/phpspec-code-coverage": "~1.0.0", + "lstrojny/fxmlrpc": "dev-master", + "phpspec/phpspec": "~2.1.0", + "rhumsaa/array_column": "~1.1.0", + "supervisorphp/configuration": "~0.1.0", + "zendframework/zend-xmlrpc": ">=2.3.3" + }, + "suggest": { + "lstrojny/fxmlrpc": "A modern, super fast XML/RPC client for PHP >=5.4", + "zendframework/zend-xmlrpc": "XmlRpc component from Zend Framework 2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1-dev" + } + }, + "autoload": { + "psr-4": { + "Supervisor\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "PHP library for managing Supervisor through XML-RPC API", + "homepage": "https://supervisorphp.com", + "keywords": [ + "process manager", + "supervisor" + ], + "support": { + "issues": "https://github.com/supervisorphp/supervisor/issues", + "source": "https://github.com/supervisorphp/supervisor/tree/v3.0.0" + }, + "time": "2015-01-13T23:06:23+00:00" + }, + { + "name": "swiftmailer/swiftmailer", + "version": "v6.3.0", + "source": { + "type": "git", + "url": "https://github.com/swiftmailer/swiftmailer.git", + "reference": "8a5d5072dca8f48460fce2f4131fcc495eec654c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/8a5d5072dca8f48460fce2f4131fcc495eec654c", + "reference": "8a5d5072dca8f48460fce2f4131fcc495eec654c", + "shasum": "" + }, + "require": { + "egulias/email-validator": "^2.0|^3.1", + "php": ">=7.0.0", + "symfony/polyfill-iconv": "^1.0", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0" + }, + "require-dev": { + "mockery/mockery": "^1.0", + "symfony/phpunit-bridge": "^4.4|^5.4" + }, + "suggest": { + "ext-intl": "Needed to support internationalized email addresses" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.2-dev" + } + }, + "autoload": { + "files": [ + "lib/swift_required.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Chris Corbyn" + }, + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "Swiftmailer, free feature-rich PHP mailer", + "homepage": "https://swiftmailer.symfony.com", + "keywords": [ + "email", + "mail", + "mailer" + ], + "support": { + "issues": "https://github.com/swiftmailer/swiftmailer/issues", + "source": "https://github.com/swiftmailer/swiftmailer/tree/v6.3.0" + }, + "funding": [ + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/swiftmailer/swiftmailer", + "type": "tidelift" + } + ], + "abandoned": "symfony/mailer", + "time": "2021-10-18T15:26:12+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "2.5.x-dev", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e8b495ea28c1d97b5e0c121748d6f9b53d075c66", + "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/2.5" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-01-02T09:53:40+00:00" + }, + { + "name": "symfony/options-resolver", + "version": "5.4.x-dev", + "source": { + "type": "git", + "url": "https://github.com/symfony/options-resolver.git", + "reference": "b03c99236445492f20c61666e8f7e5d388b078e5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/b03c99236445492f20c61666e8f7e5d388b078e5", + "reference": "b03c99236445492f20c61666e8f7e5d388b078e5", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php73": "~1.0", + "symfony/polyfill-php80": "^1.16" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\OptionsResolver\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an improved replacement for the array_replace PHP function", + "homepage": "https://symfony.com", + "keywords": [ + "config", + "configuration", + "options" + ], + "support": { + "source": "https://github.com/symfony/options-resolver/tree/5.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-01-01T08:32:19+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "dev-main", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "5bbc823adecdae860bb64756d639ecfec17b050a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/5bbc823adecdae860bb64756d639ecfec17b050a", + "reference": "5bbc823adecdae860bb64756d639ecfec17b050a", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-ctype": "*" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "default-branch": true, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-iconv", + "version": "dev-main", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-iconv.git", + "reference": "927013f3aac555983a5059aada98e1907d842695" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/927013f3aac555983a5059aada98e1907d842695", + "reference": "927013f3aac555983a5059aada98e1907d842695", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-iconv": "*" + }, + "suggest": { + "ext-iconv": "For best performance" + }, + "default-branch": true, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Iconv\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Iconv extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "iconv", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-iconv/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-intl-idn", + "version": "dev-main", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "639084e360537a19f9ee352433b84ce831f3d2da" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/639084e360537a19f9ee352433b84ce831f3d2da", + "reference": "639084e360537a19f9ee352433b84ce831f3d2da", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "symfony/polyfill-intl-normalizer": "^1.10", + "symfony/polyfill-php72": "^1.10" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "default-branch": true, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + }, + { + "name": "Trevor Rowbotham", + "email": "trevor.rowbotham@pm.me" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "idn", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "dev-main", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/19bd1e4fcd5b91116f14d8533c57831ed00571b6", + "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "default-branch": true, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's Normalizer class and related functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "dev-main", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534", + "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "default-branch": true, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-php72", + "version": "dev-main", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php72.git", + "reference": "869329b1e9894268a8a61dabb69153029b7a8c97" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/869329b1e9894268a8a61dabb69153029b7a8c97", + "reference": "869329b1e9894268a8a61dabb69153029b7a8c97", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "default-branch": true, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php72\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php72/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-php73", + "version": "dev-main", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php73.git", + "reference": "9e8ecb5f92152187c4799efd3c96b78ccab18ff9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/9e8ecb5f92152187c4799efd3c96b78ccab18ff9", + "reference": "9e8ecb5f92152187c4799efd3c96b78ccab18ff9", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "default-branch": true, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php73\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php73/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "dev-main", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", + "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "default-branch": true, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/process", + "version": "4.4.x-dev", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "5cee9cdc4f7805e2699d9fd66991a0e6df8252a2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/5cee9cdc4f7805e2699d9fd66991a0e6df8252a2", + "reference": "5cee9cdc4f7805e2699d9fd66991a0e6df8252a2", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "symfony/polyfill-php80": "^1.16" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Executes commands in sub-processes", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/process/tree/4.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-06-27T13:16:42+00:00" + }, + { + "name": "tkijewski/php-lnurl", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/tkijewski/php-lnurl.git", + "reference": "c5b34d45235f1d244a0d48d071975390f7cf2244" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/tkijewski/php-lnurl/zipball/c5b34d45235f1d244a0d48d071975390f7cf2244", + "reference": "c5b34d45235f1d244a0d48d071975390f7cf2244", + "shasum": "" + }, + "require": { + "bitwasp/bech32": "*" + }, + "require-dev": { + "phpunit/phpunit": "^5.4.0", + "squizlabs/php_codesniffer": "^2.0.0" + }, + "default-branch": true, + "type": "library", + "autoload": { + "files": [ + "src/lnurl.php" + ], + "psr-4": { + "tkijewski\\lnurl\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Unlicense" + ], + "authors": [ + { + "name": "Tim Kijewski", + "role": "Author" + } + ], + "description": "PHP implementation of lnurl Spec", + "homepage": "https://github.com/tkijewski/php-lnurl", + "support": { + "issues": "https://github.com/tkijewski/php-lnurl/issues", + "source": "https://github.com/tkijewski/php-lnurl/tree/master" + }, + "time": "2022-08-05T00:02:39+00:00" + }, + { + "name": "vlucas/phpdotenv", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/vlucas/phpdotenv.git", + "reference": "1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7", + "reference": "1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7", + "shasum": "" + }, + "require": { + "ext-pcre": "*", + "graham-campbell/result-type": "^1.0.2", + "php": "^7.1.3 || ^8.0", + "phpoption/phpoption": "^1.8", + "symfony/polyfill-ctype": "^1.23", + "symfony/polyfill-mbstring": "^1.23.1", + "symfony/polyfill-php80": "^1.23.1" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "ext-filter": "*", + "phpunit/phpunit": "^7.5.20 || ^8.5.30 || ^9.5.25" + }, + "suggest": { + "ext-filter": "Required to use the boolean validator." + }, + "default-branch": true, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": true + }, + "branch-alias": { + "dev-master": "5.5-dev" + } + }, + "autoload": { + "psr-4": { + "Dotenv\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Vance Lucas", + "email": "vance@vancelucas.com", + "homepage": "https://github.com/vlucas" + } + ], + "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", + "keywords": [ + "dotenv", + "env", + "environment" + ], + "support": { + "issues": "https://github.com/vlucas/phpdotenv/issues", + "source": "https://github.com/vlucas/phpdotenv/tree/v5.5.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv", + "type": "tidelift" + } + ], + "time": "2022-10-16T01:01:54+00:00" + }, + { + "name": "vxm/yii2-mfa", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/vuongxuongminh/yii2-mfa.git", + "reference": "62e5eaa06c961f5c97a6ca74df5bdc89a070a915" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/vuongxuongminh/yii2-mfa/zipball/62e5eaa06c961f5c97a6ca74df5bdc89a070a915", + "reference": "62e5eaa06c961f5c97a6ca74df5bdc89a070a915", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "spomky-labs/otphp": "^9.0", + "yiisoft/yii2": ">=2.0.13" + }, + "default-branch": true, + "type": "yii2-extension", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "vxm\\mfa\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Vuong Minh", + "email": "vuongxuongminh@gmail.com" + } + ], + "description": "Multi-factor authentication for yii2", + "keywords": [ + "MFA", + "extension", + "yii2" + ], + "support": { + "issues": "https://github.com/vuongxuongminh/yii2-mfa/issues", + "source": "https://github.com/vuongxuongminh/yii2-mfa/tree/1.0.1" + }, + "time": "2020-06-23T16:29:54+00:00" + }, + { + "name": "yiisoft/yii2", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/yii2-framework.git", + "reference": "48f4c268a2406f4c726ce7a9792d5f424875d0c9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/yii2-framework/zipball/48f4c268a2406f4c726ce7a9792d5f424875d0c9", + "reference": "48f4c268a2406f4c726ce7a9792d5f424875d0c9", + "shasum": "" + }, + "require": { + "bower-asset/inputmask": "~3.2.2 | ~3.3.5", + "bower-asset/jquery": "3.6.*@stable | 3.5.*@stable | 3.4.*@stable | 3.3.*@stable | 3.2.*@stable | 3.1.*@stable | 2.2.*@stable | 2.1.*@stable | 1.11.*@stable | 1.12.*@stable", + "bower-asset/punycode": "1.3.*", + "bower-asset/yii2-pjax": "~2.0.1", + "cebe/markdown": "~1.0.0 | ~1.1.0 | ~1.2.0", + "ext-ctype": "*", + "ext-mbstring": "*", + "ezyang/htmlpurifier": "~4.6", + "lib-pcre": "*", + "paragonie/random_compat": ">=1", + "php": ">=5.4.0", + "yiisoft/yii2-composer": "~2.0.4" + }, + "default-branch": true, + "bin": [ + "yii" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "yii\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Qiang Xue", + "email": "qiang.xue@gmail.com", + "homepage": "https://www.yiiframework.com/", + "role": "Founder and project lead" + }, + { + "name": "Alexander Makarov", + "email": "sam@rmcreative.ru", + "homepage": "https://rmcreative.ru/", + "role": "Core framework development" + }, + { + "name": "Maurizio Domba", + "homepage": "http://mdomba.info/", + "role": "Core framework development" + }, + { + "name": "Carsten Brandt", + "email": "mail@cebe.cc", + "homepage": "https://www.cebe.cc/", + "role": "Core framework development" + }, + { + "name": "Timur Ruziev", + "email": "resurtm@gmail.com", + "homepage": "http://resurtm.com/", + "role": "Core framework development" + }, + { + "name": "Paul Klimov", + "email": "klimov.paul@gmail.com", + "role": "Core framework development" + }, + { + "name": "Dmitry Naumenko", + "email": "d.naumenko.a@gmail.com", + "role": "Core framework development" + }, + { + "name": "Boudewijn Vahrmeijer", + "email": "info@dynasource.eu", + "homepage": "http://dynasource.eu", + "role": "Core framework development" + } + ], + "description": "Yii PHP Framework Version 2", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "framework", + "yii2" + ], + "support": { + "forum": "https://forum.yiiframework.com/", + "irc": "ircs://irc.libera.chat:6697/yii", + "issues": "https://github.com/yiisoft/yii2/issues?state=open", + "source": "https://github.com/yiisoft/yii2", + "wiki": "https://www.yiiframework.com/wiki" + }, + "funding": [ + { + "url": "https://github.com/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "open_collective" + }, + { + "url": "https://tidelift.com/funding/github/packagist/yiisoft/yii2", + "type": "tidelift" + } + ], + "time": "2022-12-29T20:37:32+00:00" + }, + { + "name": "yiisoft/yii2-bootstrap", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/yii2-bootstrap.git", + "reference": "bdbaa9de468f480a49f12849a101fd91b755f050" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/yii2-bootstrap/zipball/bdbaa9de468f480a49f12849a101fd91b755f050", + "reference": "bdbaa9de468f480a49f12849a101fd91b755f050", + "shasum": "" + }, + "require": { + "bower-asset/bootstrap": "3.4.* | 3.3.* | 3.2.* | 3.1.*", + "yiisoft/yii2": "~2.0.6" + }, + "require-dev": { + "cweagans/composer-patches": "^1.7", + "phpunit/phpunit": "4.8.34" + }, + "default-branch": true, + "type": "yii2-extension", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + }, + "patches": { + "phpunit/phpunit-mock-objects": { + "Fix PHP 7 and 8 compatibility": "https://yiisoft.github.io/phpunit-patches/phpunit_mock_objects.patch" + }, + "phpunit/phpunit": { + "Fix PHP 7 compatibility": "https://yiisoft.github.io/phpunit-patches/phpunit_php7.patch", + "Fix PHP 8 compatibility": "https://yiisoft.github.io/phpunit-patches/phpunit_php8.patch" + } + } + }, + "autoload": { + "psr-4": { + "yii\\bootstrap\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Qiang Xue", + "email": "qiang.xue@gmail.com", + "homepage": "http://www.yiiframework.com/" + }, + { + "name": "Alexander Makarov", + "email": "sam@rmcreative.ru", + "homepage": "http://rmcreative.ru/" + }, + { + "name": "Antonio Ramirez", + "email": "amigo.cobos@gmail.com" + }, + { + "name": "Paul Klimov", + "email": "klimov.paul@gmail.com" + } + ], + "description": "The Twitter Bootstrap extension for the Yii framework", + "keywords": [ + "bootstrap", + "yii2" + ], + "support": { + "forum": "http://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/yii2-bootstrap/issues", + "source": "https://github.com/yiisoft/yii2-bootstrap", + "wiki": "http://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "open_collective" + }, + { + "url": "https://tidelift.com/funding/github/packagist/yiisoft/yii2-bootstrap", + "type": "tidelift" + } + ], + "time": "2021-12-09T13:37:41+00:00" + }, + { + "name": "yiisoft/yii2-bootstrap4", + "version": "2.0.10", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/yii2-bootstrap4.git", + "reference": "e6d0e58f43d3910129d554ac183aac17f65be639" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/yii2-bootstrap4/zipball/e6d0e58f43d3910129d554ac183aac17f65be639", + "reference": "e6d0e58f43d3910129d554ac183aac17f65be639", + "shasum": "" + }, + "require": { + "npm-asset/bootstrap": "^4.3", + "yiisoft/yii2": "~2.0" + }, + "require-dev": { + "cweagans/composer-patches": "^1.7", + "phpunit/phpunit": "4.8.34", + "yiisoft/yii2-coding-standards": "~2.0" + }, + "type": "yii2-extension", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + }, + "patches": { + "phpunit/phpunit-mock-objects": { + "Fix PHP 7 and 8 compatibility": "https://yiisoft.github.io/phpunit-patches/phpunit_mock_objects.patch" + }, + "phpunit/phpunit": { + "Fix PHP 7 compatibility": "https://yiisoft.github.io/phpunit-patches/phpunit_php7.patch", + "Fix PHP 8 compatibility": "https://yiisoft.github.io/phpunit-patches/phpunit_php8.patch" + } + } + }, + "autoload": { + "psr-4": { + "yii\\bootstrap4\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Qiang Xue", + "email": "qiang.xue@gmail.com", + "homepage": "http://www.yiiframework.com/" + }, + { + "name": "Alexander Makarov", + "email": "sam@rmcreative.ru", + "homepage": "http://rmcreative.ru/" + }, + { + "name": "Antonio Ramirez", + "email": "amigo.cobos@gmail.com" + }, + { + "name": "Paul Klimov", + "email": "klimov.paul@gmail.com" + }, + { + "name": "Simon Karlen", + "email": "simi.albi@outlook.com" + } + ], + "description": "The Twitter Bootstrap extension for the Yii framework", + "keywords": [ + "bootstrap", + "bootstrap4", + "yii2" + ], + "support": { + "forum": "http://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/yii2-bootstrap4/issues", + "source": "https://github.com/yiisoft/yii2-bootstrap4", + "wiki": "http://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "open_collective" + }, + { + "url": "https://tidelift.com/funding/github/packagist/yiisoft/yii2-bootstrap4", + "type": "tidelift" + } + ], + "time": "2021-05-05T21:56:41+00:00" + }, + { + "name": "yiisoft/yii2-composer", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/yii2-composer.git", + "reference": "0933fd949a036348283322024948541324cce66a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/yii2-composer/zipball/0933fd949a036348283322024948541324cce66a", + "reference": "0933fd949a036348283322024948541324cce66a", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.0 | ^2.0" + }, + "require-dev": { + "composer/composer": "^1.0 | ^2.0@dev", + "phpunit/phpunit": "<7" + }, + "default-branch": true, + "type": "composer-plugin", + "extra": { + "class": "yii\\composer\\Plugin", + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "yii\\composer\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Qiang Xue", + "email": "qiang.xue@gmail.com" + }, + { + "name": "Carsten Brandt", + "email": "mail@cebe.cc" + } + ], + "description": "The composer plugin for Yii extension installer", + "keywords": [ + "composer", + "extension installer", + "yii2" + ], + "support": { + "forum": "http://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/yii2-composer/issues", + "source": "https://github.com/yiisoft/yii2-composer", + "wiki": "http://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "open_collective" + }, + { + "url": "https://tidelift.com/funding/github/packagist/yiisoft/yii2-composer", + "type": "tidelift" + } + ], + "time": "2021-10-20T07:23:20+00:00" + }, + { + "name": "yiisoft/yii2-mongodb", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/yii2-mongodb.git", + "reference": "c3dfb4ba884b84c689e10ae888f164320069cfe0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/yii2-mongodb/zipball/c3dfb4ba884b84c689e10ae888f164320069cfe0", + "reference": "c3dfb4ba884b84c689e10ae888f164320069cfe0", + "shasum": "" + }, + "require": { + "ext-mongodb": ">=1.0.0", + "paragonie/random_compat": ">=1", + "yiisoft/yii2": "~2.0.39" + }, + "require-dev": { + "cweagans/composer-patches": "^1.7", + "phpunit/phpunit": "4.8.34" + }, + "default-branch": true, + "type": "yii2-extension", + "extra": { + "branch-alias": { + "dev-master": "2.1.x-dev" + }, + "composer-exit-on-patch-failure": true, + "patches": { + "phpunit/phpunit-mock-objects": { + "Fix PHP 7 and 8 compatibility": "https://yiisoft.github.io/phpunit-patches/phpunit_mock_objects.patch" + }, + "phpunit/phpunit": { + "Fix PHP 7 compatibility": "https://yiisoft.github.io/phpunit-patches/phpunit_php7.patch", + "Fix PHP 8 compatibility": "https://yiisoft.github.io/phpunit-patches/phpunit_php8.patch", + "Fix PHP 8.1 compatibility": "https://yiisoft.github.io/phpunit-patches/phpunit_php81.patch" + } + } + }, + "autoload": { + "psr-4": { + "yii\\mongodb\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Paul Klimov", + "email": "klimov.paul@gmail.com" + } + ], + "description": "MongoDB extension for the Yii framework", + "keywords": [ + "GridFS", + "active-record", + "mongo", + "mongodb", + "yii2" + ], + "support": { + "forum": "http://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/yii2-mongodb/issues", + "source": "https://github.com/yiisoft/yii2-mongodb", + "wiki": "http://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "open_collective" + }, + { + "url": "https://tidelift.com/funding/github/packagist/yiisoft/yii2-mongodb", + "type": "tidelift" + } + ], + "time": "2022-09-04T11:16:47+00:00" + }, + { + "name": "yiisoft/yii2-queue", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/yii2-queue.git", + "reference": "4408839fa4efff21f34a7fe1d4a391b435a53a8f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/yii2-queue/zipball/4408839fa4efff21f34a7fe1d4a391b435a53a8f", + "reference": "4408839fa4efff21f34a7fe1d4a391b435a53a8f", + "shasum": "" + }, + "require": { + "php": ">=5.5.0", + "symfony/process": "^3.3||^4.0||^5.0||^6.0", + "yiisoft/yii2": "~2.0.14" + }, + "require-dev": { + "aws/aws-sdk-php": ">=2.4", + "enqueue/amqp-lib": "^0.8||^0.9.10", + "enqueue/stomp": "^0.8.39", + "opis/closure": "*", + "pda/pheanstalk": "v3.*", + "php-amqplib/php-amqplib": "*", + "phpunit/phpunit": "~4.4", + "yiisoft/yii2-debug": "*", + "yiisoft/yii2-gii": "*", + "yiisoft/yii2-redis": "*" + }, + "suggest": { + "aws/aws-sdk-php": "Need for aws SQS.", + "enqueue/amqp-lib": "Need for AMQP interop queue.", + "enqueue/stomp": "Need for Stomp queue.", + "ext-gearman": "Need for Gearman queue.", + "ext-pcntl": "Need for process signals.", + "pda/pheanstalk": "Need for Beanstalk queue.", + "php-amqplib/php-amqplib": "Need for AMQP queue.", + "yiisoft/yii2-redis": "Need for Redis queue." + }, + "default-branch": true, + "type": "yii2-extension", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "yii\\queue\\": "src", + "yii\\queue\\db\\": "src/drivers/db", + "yii\\queue\\sqs\\": "src/drivers/sqs", + "yii\\queue\\amqp\\": "src/drivers/amqp", + "yii\\queue\\file\\": "src/drivers/file", + "yii\\queue\\sync\\": "src/drivers/sync", + "yii\\queue\\redis\\": "src/drivers/redis", + "yii\\queue\\stomp\\": "src/drivers/stomp", + "yii\\queue\\gearman\\": "src/drivers/gearman", + "yii\\queue\\beanstalk\\": "src/drivers/beanstalk", + "yii\\queue\\amqp_interop\\": "src/drivers/amqp_interop" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Roman Zhuravlev", + "email": "zhuravljov@gmail.com" + } + ], + "description": "Yii2 Queue Extension which supported DB, Redis, RabbitMQ, Beanstalk, SQS and Gearman", + "keywords": [ + "async", + "beanstalk", + "db", + "gearman", + "gii", + "queue", + "rabbitmq", + "redis", + "sqs", + "yii" + ], + "support": { + "docs": "https://github.com/yiisoft/yii2-queue/blob/master/docs/guide", + "issues": "https://github.com/yiisoft/yii2-queue/issues", + "source": "https://github.com/yiisoft/yii2-queue" + }, + "funding": [ + { + "url": "https://github.com/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "open_collective" + }, + { + "url": "https://tidelift.com/funding/github/packagist/yiisoft/yii2-queue", + "type": "tidelift" + } + ], + "time": "2022-11-18T17:17:01+00:00" + }, + { + "name": "yiisoft/yii2-redis", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/yii2-redis.git", + "reference": "2f7b6b35573d0cbe9561cc961345bfc9fa7cbbf1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/yii2-redis/zipball/2f7b6b35573d0cbe9561cc961345bfc9fa7cbbf1", + "reference": "2f7b6b35573d0cbe9561cc961345bfc9fa7cbbf1", + "shasum": "" + }, + "require": { + "ext-openssl": "*", + "yiisoft/yii2": "~2.0.39" + }, + "require-dev": { + "phpunit/phpunit": "<7", + "yiisoft/yii2-dev": "~2.0.39" + }, + "default-branch": true, + "type": "yii2-extension", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "yii\\redis\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Carsten Brandt", + "email": "mail@cebe.cc" + } + ], + "description": "Redis Cache, Session and ActiveRecord for the Yii framework", + "keywords": [ + "active-record", + "cache", + "redis", + "session", + "yii2" + ], + "support": { + "forum": "http://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/yii2-redis/issues", + "source": "https://github.com/yiisoft/yii2-redis", + "wiki": "http://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "open_collective" + }, + { + "url": "https://tidelift.com/funding/github/packagist/yiisoft/yii2-redis", + "type": "tidelift" + } + ], + "time": "2022-09-04T10:34:55+00:00" + }, + { + "name": "yiisoft/yii2-swiftmailer", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/yii2-swiftmailer.git", + "reference": "2472a3886b50d398c67dad9cd463d69a30174a82" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/yii2-swiftmailer/zipball/2472a3886b50d398c67dad9cd463d69a30174a82", + "reference": "2472a3886b50d398c67dad9cd463d69a30174a82", + "shasum": "" + }, + "require": { + "swiftmailer/swiftmailer": "~6.0", + "yiisoft/yii2": ">=2.0.4" + }, + "require-dev": { + "cweagans/composer-patches": "^1.7", + "phpunit/phpunit": "4.8.34" + }, + "default-branch": true, + "type": "yii2-extension", + "extra": { + "branch-alias": { + "dev-master": "2.1.x-dev" + }, + "composer-exit-on-patch-failure": true, + "patches": { + "phpunit/phpunit-mock-objects": { + "Fix PHP 7 and 8 compatibility": "https://yiisoft.github.io/phpunit-patches/phpunit_mock_objects.patch" + }, + "phpunit/phpunit": { + "Fix PHP 7 compatibility": "https://yiisoft.github.io/phpunit-patches/phpunit_php7.patch", + "Fix PHP 8 compatibility": "https://yiisoft.github.io/phpunit-patches/phpunit_php8.patch" + } + } + }, + "autoload": { + "psr-4": { + "yii\\swiftmailer\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Paul Klimov", + "email": "klimov.paul@gmail.com" + } + ], + "description": "The SwiftMailer integration for the Yii framework", + "keywords": [ + "email", + "mail", + "mailer", + "swift", + "swiftmailer", + "yii2" + ], + "support": { + "forum": "http://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/yii2-swiftmailer/issues", + "source": "https://github.com/yiisoft/yii2-swiftmailer", + "wiki": "http://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "open_collective" + }, + { + "url": "https://tidelift.com/funding/github/packagist/yiisoft/yii2-swiftmailer", + "type": "tidelift" + } + ], + "time": "2021-12-30T08:48:58+00:00" + }, + { + "name": "zhuravljov/yii2-queue-monitor", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/zhuravljov/yii2-queue-monitor.git", + "reference": "fa5246ba653164848fbd27b86a83e1adb8145c2e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zhuravljov/yii2-queue-monitor/zipball/fa5246ba653164848fbd27b86a83e1adb8145c2e", + "reference": "fa5246ba653164848fbd27b86a83e1adb8145c2e", + "shasum": "" + }, + "require": { + "ext-pdo": "*", + "php": ">=5.5.0", + "yiisoft/yii2": "~2.0.14", + "yiisoft/yii2-bootstrap": "~2.0.0", + "yiisoft/yii2-queue": ">=2.2.0" + }, + "require-dev": { + "yiisoft/yii2-debug": "~2.0.0", + "zhuravljov/yii2-pagination": "~1.0" + }, + "suggest": { + "zhuravljov/yii2-pagination": "Makes pagination more responsive" + }, + "default-branch": true, + "type": "yii2-extension", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "zhuravljov\\yii\\queue\\monitor\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Roman Zhuravlev", + "email": "zhuravljov@gmail.com" + } + ], + "description": "Yii2 Queue Analytics Module", + "keywords": [ + "analytics", + "module", + "queue", + "yii" + ], + "support": { + "issues": "https://github.com/zhuravljov/yii2-queue-monitor/issues", + "source": "https://github.com/zhuravljov/yii2-queue-monitor" + }, + "time": "2020-08-04T21:28:39+00:00" + }, + { + "name": "zumba/amplitude-php", + "version": "1.0.6", + "source": { + "type": "git", + "url": "https://github.com/zumba/amplitude-php.git", + "reference": "99d776d1b60d2a4d8bb26e4039e368edd3d89aac" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zumba/amplitude-php/zipball/99d776d1b60d2a4d8bb26e4039e368edd3d89aac", + "reference": "99d776d1b60d2a4d8bb26e4039e368edd3d89aac", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "ext-json": "*", + "php": ">=7.2", + "psr/log": "^1.0 | ^2.0 | ^3.0" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.4", + "phpunit/phpunit": "8.3.* | ^9", + "squizlabs/php_codesniffer": "3.4.*" + }, + "type": "library", + "autoload": { + "psr-4": { + "Zumba\\Amplitude\\": "./src/", + "Zumba\\Amplitude\\Test\\": "./test/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Zumba Fitness, LLC", + "homepage": "https://tech.zumba.com" + }, + { + "name": "Jonathan Foote", + "email": "jonathan.foote@zumba.com", + "role": "Developer" + } + ], + "description": "PHP SDK for Amplitude", + "homepage": "https://github.com/zumba/amplitude-php", + "keywords": [ + "amplitude", + "analytics", + "sdk", + "tracking" + ], + "support": { + "issues": "https://github.com/zumba/amplitude-php/issues", + "source": "https://github.com/zumba/amplitude-php/tree/1.0.6" + }, + "time": "2022-09-09T13:49:49+00:00" + } + ], + "packages-dev": [ + { + "name": "behat/gherkin", + "version": "v4.4.5", + "source": { + "type": "git", + "url": "https://github.com/Behat/Gherkin.git", + "reference": "5c14cff4f955b17d20d088dec1bde61c0539ec74" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Behat/Gherkin/zipball/5c14cff4f955b17d20d088dec1bde61c0539ec74", + "reference": "5c14cff4f955b17d20d088dec1bde61c0539ec74", + "shasum": "" + }, + "require": { + "php": ">=5.3.1" + }, + "require-dev": { + "phpunit/phpunit": "~4.5|~5", + "symfony/phpunit-bridge": "~2.7|~3", + "symfony/yaml": "~2.3|~3" + }, + "suggest": { + "symfony/yaml": "If you want to parse features, represented in YAML files" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.4-dev" + } + }, + "autoload": { + "psr-0": { + "Behat\\Gherkin": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + } + ], + "description": "Gherkin DSL parser for PHP 5.3", + "homepage": "http://behat.org/", + "keywords": [ + "BDD", + "Behat", + "Cucumber", + "DSL", + "gherkin", + "parser" + ], + "support": { + "issues": "https://github.com/Behat/Gherkin/issues", + "source": "https://github.com/Behat/Gherkin/tree/master" + }, + "time": "2016-10-30T11:50:56+00:00" + }, + { + "name": "codeception/base", + "version": "2.3.x-dev", + "source": { + "type": "git", + "url": "https://github.com/Codeception/base.git", + "reference": "6c53e3d68cd0e4cda65c70cc72fb3e81f47fca28" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Codeception/base/zipball/6c53e3d68cd0e4cda65c70cc72fb3e81f47fca28", + "reference": "6c53e3d68cd0e4cda65c70cc72fb3e81f47fca28", + "shasum": "" + }, + "require": { + "behat/gherkin": "~4.4.0", + "codeception/stub": "^1.0", + "ext-json": "*", + "ext-mbstring": "*", + "guzzlehttp/psr7": "~1.0", + "php": ">=5.4.0 <8.0", + "phpunit/php-code-coverage": ">=2.2.4 <6.0", + "phpunit/phpunit": ">=4.8.28 <5.0.0 || >=5.6.3 <7.0", + "sebastian/comparator": ">1.1 <3.0", + "sebastian/diff": ">=1.4 <3.0", + "symfony/browser-kit": ">=2.7 <5.0", + "symfony/console": ">=2.7 <5.0", + "symfony/css-selector": ">=2.7 <5.0", + "symfony/dom-crawler": ">=2.7 <5.0", + "symfony/event-dispatcher": ">=2.7 <5.0", + "symfony/finder": ">=2.7 <5.0", + "symfony/yaml": ">=2.7 <5.0" + }, + "require-dev": { + "codeception/specify": "~0.3", + "facebook/graph-sdk": "~5.3", + "flow/jsonpath": "~0.2", + "monolog/monolog": "~1.8", + "pda/pheanstalk": "~3.0", + "php-amqplib/php-amqplib": "~2.4", + "predis/predis": "^1.0", + "squizlabs/php_codesniffer": "~2.0", + "symfony/process": ">=2.7 <5.0", + "vlucas/phpdotenv": "^2.4.0" + }, + "suggest": { + "aws/aws-sdk-php": "For using AWS Auth in REST module and Queue module", + "codeception/phpbuiltinserver": "Start and stop PHP built-in web server for your tests", + "codeception/specify": "BDD-style code blocks", + "codeception/verify": "BDD-style assertions", + "flow/jsonpath": "For using JSONPath in REST module", + "league/factory-muffin": "For DataFactory module", + "league/factory-muffin-faker": "For Faker support in DataFactory module", + "phpseclib/phpseclib": "for SFTP option in FTP Module", + "stecman/symfony-console-completion": "For BASH autocompletion", + "symfony/phpunit-bridge": "For phpunit-bridge support" + }, + "bin": [ + "codecept" + ], + "type": "library", + "extra": { + "branch-alias": [] + }, + "autoload": { + "psr-4": { + "Codeception\\": "src\\Codeception", + "Codeception\\Extension\\": "ext" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Bodnarchuk", + "email": "davert@mail.ua", + "homepage": "http://codegyre.com" + } + ], + "description": "BDD-style testing framework", + "homepage": "http://codeception.com/", + "keywords": [ + "BDD", + "TDD", + "acceptance testing", + "functional testing", + "unit testing" + ], + "support": { + "source": "https://github.com/Codeception/base/tree/2.3" + }, + "abandoned": true, + "time": "2018-02-26T23:42:52+00:00" + }, + { + "name": "codeception/specify", + "version": "0.4.6", + "source": { + "type": "git", + "url": "https://github.com/Codeception/Specify.git", + "reference": "21b586f503ca444aa519dd9cafb32f113a05f286" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Codeception/Specify/zipball/21b586f503ca444aa519dd9cafb32f113a05f286", + "reference": "21b586f503ca444aa519dd9cafb32f113a05f286", + "shasum": "" + }, + "require": { + "myclabs/deep-copy": "~1.1", + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "autoload": { + "psr-0": { + "Codeception\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Bodnarchuk", + "email": "davert.php@mailican.com" + } + ], + "description": "BDD code blocks for PHPUnit and Codeception", + "support": { + "issues": "https://github.com/Codeception/Specify/issues", + "source": "https://github.com/Codeception/Specify/tree/master" + }, + "time": "2016-10-21T09:42:00+00:00" + }, + { + "name": "codeception/stub", + "version": "1.0.4", + "source": { + "type": "git", + "url": "https://github.com/Codeception/Stub.git", + "reference": "681b62348837a5ef07d10d8a226f5bc358cc8805" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Codeception/Stub/zipball/681b62348837a5ef07d10d8a226f5bc358cc8805", + "reference": "681b62348837a5ef07d10d8a226f5bc358cc8805", + "shasum": "" + }, + "require": { + "phpunit/phpunit-mock-objects": ">2.3 <7.0" + }, + "require-dev": { + "phpunit/phpunit": ">=4.8 <8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Codeception\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Flexible Stub wrapper for PHPUnit's Mock Builder", + "support": { + "issues": "https://github.com/Codeception/Stub/issues", + "source": "https://github.com/Codeception/Stub/tree/master" + }, + "time": "2018-05-17T09:31:08+00:00" + }, + { + "name": "codeception/verify", + "version": "0.4.0", + "source": { + "type": "git", + "url": "https://github.com/Codeception/Verify.git", + "reference": "8a17273017e23a866df3fa2ad2b4182b7ce354f0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Codeception/Verify/zipball/8a17273017e23a866df3fa2ad2b4182b7ce354f0", + "reference": "8a17273017e23a866df3fa2ad2b4182b7ce354f0", + "shasum": "" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "autoload": { + "files": [ + "src/Codeception/function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Bodnarchuk", + "email": "davert.php@mailican.com" + } + ], + "description": "BDD assertion library for PHPUnit", + "support": { + "issues": "https://github.com/Codeception/Verify/issues", + "source": "https://github.com/Codeception/Verify/tree/0.4.0" + }, + "time": "2017-07-12T16:50:18+00:00" + }, + { + "name": "doctrine/instantiator", + "version": "1.5.x-dev", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/0a0fa9780f5d4e507415a065172d26a98d02047b", + "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9 || ^11", + "ext-pdo": "*", + "ext-phar": "*", + "phpbench/phpbench": "^0.16 || ^1", + "phpstan/phpstan": "^1.4", + "phpstan/phpstan-phpunit": "^1", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "vimeo/psalm": "^4.30 || ^5.4" + }, + "default-branch": true, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "https://ocramius.github.io/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://www.doctrine-project.org/projects/instantiator.html", + "keywords": [ + "constructor", + "instantiate" + ], + "support": { + "issues": "https://github.com/doctrine/instantiator/issues", + "source": "https://github.com/doctrine/instantiator/tree/1.5.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", + "type": "tidelift" + } + ], + "time": "2022-12-30T00:15:36+00:00" + }, + { + "name": "facebook/webdriver", + "version": "dev-community", + "source": { + "type": "git", + "url": "https://github.com/php-webdriver/php-webdriver-archive.git", + "reference": "1a4f7a1fc682e5d338e55580480862daa83acec7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-webdriver/php-webdriver-archive/zipball/1a4f7a1fc682e5d338e55580480862daa83acec7", + "reference": "1a4f7a1fc682e5d338e55580480862daa83acec7", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "ext-json": "*", + "ext-zip": "*", + "php": "^5.6 || ~7.0", + "symfony/polyfill-mbstring": "^1.12", + "symfony/process": "^2.8 || ^3.1 || ^4.0 || ^5.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.0", + "jakub-onderka/php-parallel-lint": "^1.0", + "php-coveralls/php-coveralls": "^2.0", + "php-mock/php-mock-phpunit": "^1.1", + "phpunit/phpunit": "^5.7", + "sebastian/environment": "^1.3.4 || ^2.0 || ^3.0", + "sminnee/phpunit-mock-objects": "^3.4", + "squizlabs/php_codesniffer": "^3.5", + "symfony/var-dumper": "^3.3 || ^4.0 || ^5.0" + }, + "suggest": { + "ext-SimpleXML": "For Firefox profile creation" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-community": "1.8.x-dev" + } + }, + "autoload": { + "files": [ + "lib/Exception/TimeoutException.php" + ], + "psr-4": { + "Facebook\\WebDriver\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "description": "A PHP client for Selenium WebDriver", + "homepage": "https://github.com/facebook/php-webdriver", + "keywords": [ + "facebook", + "php", + "selenium", + "webdriver" + ], + "support": { + "forum": "https://www.facebook.com/groups/phpwebdriver/", + "issues": "https://github.com/facebook/php-webdriver/issues", + "source": "https://github.com/facebook/php-webdriver" + }, + "abandoned": "php-webdriver/webdriver", + "time": "2020-01-11T18:57:04+00:00" + }, + { + "name": "fakerphp/faker", + "version": "v1.20.0", + "source": { + "type": "git", + "url": "https://github.com/FakerPHP/Faker.git", + "reference": "37f751c67a5372d4e26353bd9384bc03744ec77b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/37f751c67a5372d4e26353bd9384bc03744ec77b", + "reference": "37f751c67a5372d4e26353bd9384bc03744ec77b", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0", + "psr/container": "^1.0 || ^2.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" + }, + "conflict": { + "fzaninotto/faker": "*" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "doctrine/persistence": "^1.3 || ^2.0", + "ext-intl": "*", + "symfony/phpunit-bridge": "^4.4 || ^5.2" + }, + "suggest": { + "doctrine/orm": "Required to use Faker\\ORM\\Doctrine", + "ext-curl": "Required by Faker\\Provider\\Image to download images.", + "ext-dom": "Required by Faker\\Provider\\HtmlLorem for generating random HTML.", + "ext-iconv": "Required by Faker\\Provider\\ru_RU\\Text::realText() for generating real Russian text.", + "ext-mbstring": "Required for multibyte Unicode string functionality." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "v1.20-dev" + } + }, + "autoload": { + "psr-4": { + "Faker\\": "src/Faker/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "François Zaninotto" + } + ], + "description": "Faker is a PHP library that generates fake data for you.", + "keywords": [ + "data", + "faker", + "fixtures" + ], + "support": { + "issues": "https://github.com/FakerPHP/Faker/issues", + "source": "https://github.com/FakerPHP/Faker/tree/v1.20.0" + }, + "time": "2022-07-20T13:12:54+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.x-dev", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614", + "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3,<3.2.2" + }, + "require-dev": { + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" + }, + "default-branch": true, + "type": "library", + "autoload": { + "files": [ + "src/DeepCopy/deep_copy.php" + ], + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.11.0" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2022-03-03T13:19:32+00:00" + }, + { + "name": "phar-io/manifest", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "2df402786ab5368a0169091f61a7c1e0eb6852d0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/2df402786ab5368a0169091f61a7c1e0eb6852d0", + "reference": "2df402786ab5368a0169091f61a7c1e0eb6852d0", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-phar": "*", + "phar-io/version": "^1.0.1", + "php": "^5.6 || ^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "support": { + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/master" + }, + "time": "2017-03-05T18:14:27+00:00" + }, + { + "name": "phar-io/version", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/a70c0ced4be299a63d32fa96d9281d03e94041df", + "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Library for handling version information and constraints", + "support": { + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/master" + }, + "time": "2017-03-05T17:38:23+00:00" + }, + { + "name": "phpdocumentor/reflection-common", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "a0eeab580cbdf4414fef6978732510a36ed0a9d6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/a0eeab580cbdf4414fef6978732510a36ed0a9d6", + "reference": "a0eeab580cbdf4414fef6978732510a36ed0a9d6", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", + "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/master" + }, + "time": "2021-06-25T13:47:51+00:00" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "5.3.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "622548b623e81ca6d78b721c5e029f4ce664f170" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170", + "reference": "622548b623e81ca6d78b721c5e029f4ce664f170", + "shasum": "" + }, + "require": { + "ext-filter": "*", + "php": "^7.2 || ^8.0", + "phpdocumentor/reflection-common": "^2.2", + "phpdocumentor/type-resolver": "^1.3", + "webmozart/assert": "^1.9.1" + }, + "require-dev": { + "mockery/mockery": "~1.3.2", + "psalm/phar": "^4.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + }, + { + "name": "Jaap van Otterdijk", + "email": "account@ijaap.nl" + } + ], + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0" + }, + "time": "2021-10-19T17:43:47+00:00" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "1.6.1", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "77a32518733312af16a44300404e945338981de3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/77a32518733312af16a44300404e945338981de3", + "reference": "77a32518733312af16a44300404e945338981de3", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0", + "phpdocumentor/reflection-common": "^2.0" + }, + "require-dev": { + "ext-tokenizer": "*", + "psalm/phar": "^4.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-1.x": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", + "support": { + "issues": "https://github.com/phpDocumentor/TypeResolver/issues", + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.1" + }, + "time": "2022-03-15T21:29:03+00:00" + }, + { + "name": "phpspec/php-diff", + "version": "v1.1.3", + "source": { + "type": "git", + "url": "https://github.com/phpspec/php-diff.git", + "reference": "fc1156187f9f6c8395886fe85ed88a0a245d72e9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/php-diff/zipball/fc1156187f9f6c8395886fe85ed88a0a245d72e9", + "reference": "fc1156187f9f6c8395886fe85ed88a0a245d72e9", + "shasum": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-0": { + "Diff": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Chris Boulton", + "homepage": "http://github.com/chrisboulton" + } + ], + "description": "A comprehensive library for generating differences between two hashable objects (strings or arrays).", + "support": { + "source": "https://github.com/phpspec/php-diff/tree/v1.1.3" + }, + "time": "2020-09-18T13:47:07+00:00" + }, + { + "name": "phpspec/prophecy", + "version": "v1.10.3", + "source": { + "type": "git", + "url": "https://github.com/phpspec/prophecy.git", + "reference": "451c3cd1418cf640de218914901e51b064abb093" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/451c3cd1418cf640de218914901e51b064abb093", + "reference": "451c3cd1418cf640de218914901e51b064abb093", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": "^5.3|^7.0", + "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0", + "sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0", + "sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0" + }, + "require-dev": { + "phpspec/phpspec": "^2.5 || ^3.2", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10.x-dev" + } + }, + "autoload": { + "psr-4": { + "Prophecy\\": "src/Prophecy" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + }, + { + "name": "Marcello Duarte", + "email": "marcello.duarte@gmail.com" + } + ], + "description": "Highly opinionated mocking framework for PHP 5.3+", + "homepage": "https://github.com/phpspec/prophecy", + "keywords": [ + "Double", + "Dummy", + "fake", + "mock", + "spy", + "stub" + ], + "support": { + "issues": "https://github.com/phpspec/prophecy/issues", + "source": "https://github.com/phpspec/prophecy/tree/v1.10.3" + }, + "time": "2020-03-05T15:02:03+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "5.3.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "c89677919c5dd6d3b3852f230a663118762218ac" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/c89677919c5dd6d3b3852f230a663118762218ac", + "reference": "c89677919c5dd6d3b3852f230a663118762218ac", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-xmlwriter": "*", + "php": "^7.0", + "phpunit/php-file-iterator": "^1.4.2", + "phpunit/php-text-template": "^1.2.1", + "phpunit/php-token-stream": "^2.0.1", + "sebastian/code-unit-reverse-lookup": "^1.0.1", + "sebastian/environment": "^3.0", + "sebastian/version": "^2.0.1", + "theseer/tokenizer": "^1.1" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" + }, + "suggest": { + "ext-xdebug": "^2.5.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.3.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/5.3" + }, + "time": "2018-04-06T15:36:58+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "1.4.x-dev", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4", + "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "support": { + "irc": "irc://irc.freenode.net/phpunit", + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/1.4.5" + }, + "time": "2017-11-27T13:52:08+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/1.2.1" + }, + "time": "2015-06-21T13:50:34+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "1.0.x-dev", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "9513098641797ce5f459dbc1de5a54c29b0ec1fb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/9513098641797ce5f459dbc1de5a54c29b0ec1fb", + "reference": "9513098641797ce5f459dbc1de5a54c29b0ec1fb", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "source": "https://github.com/sebastianbergmann/php-timer/tree/1.0" + }, + "time": "2018-01-06T05:27:16+00:00" + }, + { + "name": "phpunit/php-token-stream", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-token-stream.git", + "reference": "791198a2c6254db10131eecfe8c06670700904db" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/791198a2c6254db10131eecfe8c06670700904db", + "reference": "791198a2c6254db10131eecfe8c06670700904db", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.2.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Wrapper around PHP's tokenizer extension.", + "homepage": "https://github.com/sebastianbergmann/php-token-stream/", + "keywords": [ + "tokenizer" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-token-stream/issues", + "source": "https://github.com/sebastianbergmann/php-token-stream/tree/master" + }, + "abandoned": true, + "time": "2017-11-27T05:48:46+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "6.5.14", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "bac23fe7ff13dbdb461481f706f0e9fe746334b7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/bac23fe7ff13dbdb461481f706f0e9fe746334b7", + "reference": "bac23fe7ff13dbdb461481f706f0e9fe746334b7", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "myclabs/deep-copy": "^1.6.1", + "phar-io/manifest": "^1.0.1", + "phar-io/version": "^1.0", + "php": "^7.0", + "phpspec/prophecy": "^1.7", + "phpunit/php-code-coverage": "^5.3", + "phpunit/php-file-iterator": "^1.4.3", + "phpunit/php-text-template": "^1.2.1", + "phpunit/php-timer": "^1.0.9", + "phpunit/phpunit-mock-objects": "^5.0.9", + "sebastian/comparator": "^2.1", + "sebastian/diff": "^2.0", + "sebastian/environment": "^3.1", + "sebastian/exporter": "^3.1", + "sebastian/global-state": "^2.0", + "sebastian/object-enumerator": "^3.0.3", + "sebastian/resource-operations": "^1.0", + "sebastian/version": "^2.0.1" + }, + "conflict": { + "phpdocumentor/reflection-docblock": "3.0.2", + "phpunit/dbunit": "<3.0" + }, + "require-dev": { + "ext-pdo": "*" + }, + "suggest": { + "ext-xdebug": "*", + "phpunit/php-invoker": "^1.1" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.5.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "source": "https://github.com/sebastianbergmann/phpunit/tree/6.5.14" + }, + "time": "2019-02-01T05:22:47+00:00" + }, + { + "name": "phpunit/phpunit-mock-objects", + "version": "5.0.x-dev", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", + "reference": "13862f9c620ffbc8895792abe2a9e473326fb905" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/13862f9c620ffbc8895792abe2a9e473326fb905", + "reference": "13862f9c620ffbc8895792abe2a9e473326fb905", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.5", + "php": "^7.0", + "phpunit/php-text-template": "^1.2.1", + "sebastian/exporter": "^3.1" + }, + "conflict": { + "phpunit/phpunit": "<6.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.5.11" + }, + "suggest": { + "ext-soap": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Mock Object library for PHPUnit", + "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", + "keywords": [ + "mock", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/phpunit-mock-objects/issues", + "source": "https://github.com/sebastianbergmann/phpunit-mock-objects/tree/5.0" + }, + "abandoned": true, + "time": "2018-09-09T05:48:43+00:00" + }, + { + "name": "psr/container", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "2ae37329ee82f91efadc282cc2d527fd6065a5ef" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/2ae37329ee82f91efadc282cc2d527fd6065a5ef", + "reference": "2ae37329ee82f91efadc282cc2d527fd6065a5ef", + "shasum": "" + }, + "require": { + "php": ">=7.2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/2.0.1" + }, + "time": "2021-03-24T13:40:57+00:00" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "1.0.x-dev", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "1de8cd5c010cb153fcd68b8d0f64606f523f7619" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/1de8cd5c010cb153fcd68b8d0f64606f523f7619", + "reference": "1de8cd5c010cb153fcd68b8d0f64606f523f7619", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "phpunit/phpunit": "^8.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/1.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-11-30T08:15:22+00:00" + }, + { + "name": "sebastian/comparator", + "version": "2.1.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "34369daee48eafb2651bea869b4b15d75ccc35f9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/34369daee48eafb2651bea869b4b15d75ccc35f9", + "reference": "34369daee48eafb2651bea869b4b15d75ccc35f9", + "shasum": "" + }, + "require": { + "php": "^7.0", + "sebastian/diff": "^2.0 || ^3.0", + "sebastian/exporter": "^3.1" + }, + "require-dev": { + "phpunit/phpunit": "^6.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "source": "https://github.com/sebastianbergmann/comparator/tree/master" + }, + "time": "2018-02-01T13:46:46+00:00" + }, + { + "name": "sebastian/diff", + "version": "2.0.x-dev", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "abcc70409ddfb310a8cb41ef0c2e857425438cf4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/abcc70409ddfb310a8cb41ef0c2e857425438cf4", + "reference": "abcc70409ddfb310a8cb41ef0c2e857425438cf4", + "shasum": "" + }, + "require": { + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/diff/issues", + "source": "https://github.com/sebastianbergmann/diff/tree/master" + }, + "time": "2017-12-14T11:32:19+00:00" + }, + { + "name": "sebastian/environment", + "version": "3.1.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/cd0871b3975fb7fc44d11314fd1ee20925fce4f5", + "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5", + "shasum": "" + }, + "require": { + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/environment/issues", + "source": "https://github.com/sebastianbergmann/environment/tree/master" + }, + "time": "2017-07-01T08:51:00+00:00" + }, + { + "name": "sebastian/exporter", + "version": "3.1.x-dev", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "73a9676f2833b9a7c36968f9d882589cd75511e6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/73a9676f2833b9a7c36968f9d882589cd75511e6", + "reference": "73a9676f2833b9a7c36968f9d882589cd75511e6", + "shasum": "" + }, + "require": { + "php": ">=7.0", + "sebastian/recursion-context": "^3.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "^8.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "http://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "source": "https://github.com/sebastianbergmann/exporter/tree/3.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-09-14T06:00:17+00:00" + }, + { + "name": "sebastian/global-state", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", + "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", + "shasum": "" + }, + "require": { + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" + }, + "suggest": { + "ext-uopz": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "source": "https://github.com/sebastianbergmann/global-state/tree/2.0.0" + }, + "time": "2017-04-27T15:39:26+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "3.0.x-dev", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2", + "reference": "e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2", + "shasum": "" + }, + "require": { + "php": ">=7.0", + "sebastian/object-reflector": "^1.1.1", + "sebastian/recursion-context": "^3.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/3.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-11-30T07:40:27+00:00" + }, + { + "name": "sebastian/object-reflector", + "version": "1.1.x-dev", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "9b8772b9cbd456ab45d4a598d2dd1a1bced6363d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/9b8772b9cbd456ab45d4a598d2dd1a1bced6363d", + "reference": "9b8772b9cbd456ab45d4a598d2dd1a1bced6363d", + "shasum": "" + }, + "require": { + "php": ">=7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-reflector/issues", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/1.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-11-30T07:37:18+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "3.0.x-dev", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "367dcba38d6e1977be014dc4b22f47a484dac7fb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/367dcba38d6e1977be014dc4b22f47a484dac7fb", + "reference": "367dcba38d6e1977be014dc4b22f47a484dac7fb", + "shasum": "" + }, + "require": { + "php": ">=7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "support": { + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/3.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-11-30T07:34:24+00:00" + }, + { + "name": "sebastian/resource-operations", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", + "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", + "shasum": "" + }, + "require": { + "php": ">=5.6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides a list of PHP built-in functions that operate on resources", + "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "support": { + "issues": "https://github.com/sebastianbergmann/resource-operations/issues", + "source": "https://github.com/sebastianbergmann/resource-operations/tree/master" + }, + "time": "2015-07-28T20:34:47+00:00" + }, + { + "name": "sebastian/version", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "support": { + "issues": "https://github.com/sebastianbergmann/version/issues", + "source": "https://github.com/sebastianbergmann/version/tree/master" + }, + "time": "2016-10-03T07:35:21+00:00" + }, + { + "name": "symfony/browser-kit", + "version": "v4.2.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/browser-kit.git", + "reference": "61d85c5af2fc058014c7c89504c3944e73a086f0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/browser-kit/zipball/61d85c5af2fc058014c7c89504c3944e73a086f0", + "reference": "61d85c5af2fc058014c7c89504c3944e73a086f0", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "symfony/dom-crawler": "~3.4|~4.0" + }, + "require-dev": { + "symfony/css-selector": "~3.4|~4.0", + "symfony/process": "~3.4|~4.0" + }, + "suggest": { + "symfony/process": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.2-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\BrowserKit\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony BrowserKit Component", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/browser-kit/tree/4.2" + }, + "time": "2019-02-23T15:17:42+00:00" + }, + { + "name": "symfony/console", + "version": "4.4.x-dev", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "33fa45ffc81fdcc1ca368d4946da859c8cdb58d9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/33fa45ffc81fdcc1ca368d4946da859c8cdb58d9", + "reference": "33fa45ffc81fdcc1ca368d4946da859c8cdb58d9", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php73": "^1.8", + "symfony/polyfill-php80": "^1.16", + "symfony/service-contracts": "^1.1|^2" + }, + "conflict": { + "psr/log": ">=3", + "symfony/dependency-injection": "<3.4", + "symfony/event-dispatcher": "<4.3|>=5", + "symfony/lock": "<4.4", + "symfony/process": "<3.3" + }, + "provide": { + "psr/log-implementation": "1.0|2.0" + }, + "require-dev": { + "psr/log": "^1|^2", + "symfony/config": "^3.4|^4.0|^5.0", + "symfony/dependency-injection": "^3.4|^4.0|^5.0", + "symfony/event-dispatcher": "^4.3", + "symfony/lock": "^4.4|^5.0", + "symfony/process": "^3.4|^4.0|^5.0", + "symfony/var-dumper": "^4.3|^5.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Eases the creation of beautiful and testable command line interfaces", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/console/tree/4.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-05T17:10:16+00:00" + }, + { + "name": "symfony/css-selector", + "version": "4.4.x-dev", + "source": { + "type": "git", + "url": "https://github.com/symfony/css-selector.git", + "reference": "bd0a6737e48de45b4b0b7b6fc98c78404ddceaed" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/bd0a6737e48de45b4b0b7b6fc98c78404ddceaed", + "reference": "bd0a6737e48de45b4b0b7b6fc98c78404ddceaed", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "symfony/polyfill-php80": "^1.16" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\CssSelector\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Jean-François Simon", + "email": "jeanfrancois.simon@sensiolabs.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Converts CSS selectors to XPath expressions", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/css-selector/tree/4.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-06-27T13:16:42+00:00" + }, + { + "name": "symfony/dom-crawler", + "version": "4.4.x-dev", + "source": { + "type": "git", + "url": "https://github.com/symfony/dom-crawler.git", + "reference": "4b8daf6c56801e6d664224261cb100b73edc78a5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/4b8daf6c56801e6d664224261cb100b73edc78a5", + "reference": "4b8daf6c56801e6d664224261cb100b73edc78a5", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "masterminds/html5": "<2.6" + }, + "require-dev": { + "masterminds/html5": "^2.6", + "symfony/css-selector": "^3.4|^4.0|^5.0" + }, + "suggest": { + "symfony/css-selector": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\DomCrawler\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Eases DOM navigation for HTML and XML documents", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/dom-crawler/tree/4.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-08-03T12:57:57+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "4.4.x-dev", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "1e866e9e5c1b22168e0ce5f0b467f19bba61266a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/1e866e9e5c1b22168e0ce5f0b467f19bba61266a", + "reference": "1e866e9e5c1b22168e0ce5f0b467f19bba61266a", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "symfony/event-dispatcher-contracts": "^1.1", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "symfony/dependency-injection": "<3.4" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "1.1" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^3.4|^4.0|^5.0", + "symfony/dependency-injection": "^3.4|^4.0|^5.0", + "symfony/error-handler": "~3.4|~4.4", + "symfony/expression-language": "^3.4|^4.0|^5.0", + "symfony/http-foundation": "^3.4|^4.0|^5.0", + "symfony/service-contracts": "^1.1|^2", + "symfony/stopwatch": "^3.4|^4.0|^5.0" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/event-dispatcher/tree/4.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-07-20T09:59:04+00:00" + }, + { + "name": "symfony/event-dispatcher-contracts", + "version": "1.1.x-dev", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "761c8b8387cfe5f8026594a75fdf0a4e83ba6974" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/761c8b8387cfe5f8026594a75fdf0a4e83ba6974", + "reference": "761c8b8387cfe5f8026594a75fdf0a4e83ba6974", + "shasum": "" + }, + "require": { + "php": ">=7.1.3" + }, + "suggest": { + "psr/event-dispatcher": "", + "symfony/event-dispatcher-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.1-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/1.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-07-20T09:59:04+00:00" + }, + { + "name": "symfony/finder", + "version": "4.4.x-dev", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "66bd787edb5e42ff59d3523f623895af05043e4f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/66bd787edb5e42ff59d3523f623895af05043e4f", + "reference": "66bd787edb5e42ff59d3523f623895af05043e4f", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "symfony/polyfill-php80": "^1.16" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/tree/4.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-07-29T07:35:46+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v1.1.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "191afdcb5804db960d26d8566b7e9a2843cab3a0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/191afdcb5804db960d26d8566b7e9a2843cab3a0", + "reference": "191afdcb5804db960d26d8566b7e9a2843cab3a0", + "shasum": "" + }, + "require": { + "php": "^7.1.3" + }, + "suggest": { + "psr/container": "", + "symfony/service-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/service-contracts/tree/v1.1.2" + }, + "time": "2019-05-28T07:50:59+00:00" + }, + { + "name": "symfony/yaml", + "version": "4.4.x-dev", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "aeccc4dc52a9e634f1d1eebeb21eacfdcff1053d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/aeccc4dc52a9e634f1d1eebeb21eacfdcff1053d", + "reference": "aeccc4dc52a9e634f1d1eebeb21eacfdcff1053d", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "symfony/polyfill-ctype": "~1.8" + }, + "conflict": { + "symfony/console": "<3.4" + }, + "require-dev": { + "symfony/console": "^3.4|^4.0|^5.0" + }, + "suggest": { + "symfony/console": "For validating YAML files using the lint command" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Loads and dumps YAML files", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/yaml/tree/4.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-08-02T15:47:23+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + } + ], + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "support": { + "issues": "https://github.com/theseer/tokenizer/issues", + "source": "https://github.com/theseer/tokenizer/tree/1.2.1" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2021-07-28T10:34:58+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.11.0", + "source": { + "type": "git", + "url": "https://github.com/webmozarts/assert.git", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "php": "^7.2 || ^8.0" + }, + "conflict": { + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<4.6.1 || 4.6.2" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.13" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "support": { + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/1.11.0" + }, + "time": "2022-06-03T18:03:27+00:00" + }, + { + "name": "yiisoft/yii2-debug", + "version": "2.1.22", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/yii2-debug.git", + "reference": "c0fa388c56b64edfb92987fdcc37d7a0243170d7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/yii2-debug/zipball/c0fa388c56b64edfb92987fdcc37d7a0243170d7", + "reference": "c0fa388c56b64edfb92987fdcc37d7a0243170d7", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": ">=5.4", + "yiisoft/yii2": "~2.0.13" + }, + "require-dev": { + "cweagans/composer-patches": "^1.7", + "phpunit/phpunit": "4.8.34", + "yiisoft/yii2-coding-standards": "~2.0", + "yiisoft/yii2-swiftmailer": "*" + }, + "type": "yii2-extension", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + }, + "composer-exit-on-patch-failure": true, + "patches": { + "phpunit/phpunit-mock-objects": { + "Fix PHP 7 and 8 compatibility": "https://yiisoft.github.io/phpunit-patches/phpunit_mock_objects.patch" + }, + "phpunit/phpunit": { + "Fix PHP 7 compatibility": "https://yiisoft.github.io/phpunit-patches/phpunit_php7.patch", + "Fix PHP 8 compatibility": "https://yiisoft.github.io/phpunit-patches/phpunit_php8.patch", + "Fix PHP 8.1 compatibility": "https://yiisoft.github.io/phpunit-patches/phpunit_php81.patch" + } + } + }, + "autoload": { + "psr-4": { + "yii\\debug\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Qiang Xue", + "email": "qiang.xue@gmail.com" + }, + { + "name": "Simon Karlen", + "email": "simi.albi@outlook.com" + } + ], + "description": "The debugger extension for the Yii framework", + "keywords": [ + "debug", + "debugger", + "yii2" + ], + "support": { + "forum": "http://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/yii2-debug/issues", + "source": "https://github.com/yiisoft/yii2-debug", + "wiki": "http://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "open_collective" + }, + { + "url": "https://tidelift.com/funding/github/packagist/yiisoft/yii2-debug", + "type": "tidelift" + } + ], + "time": "2022-11-18T17:29:27+00:00" + }, + { + "name": "yiisoft/yii2-faker", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/yii2-faker.git", + "reference": "98e4e4ca1aa38282af598dd2e7f658c7090d22e5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/yii2-faker/zipball/98e4e4ca1aa38282af598dd2e7f658c7090d22e5", + "reference": "98e4e4ca1aa38282af598dd2e7f658c7090d22e5", + "shasum": "" + }, + "require": { + "fakerphp/faker": "~1.9|~1.10", + "yiisoft/yii2": "~2.0.0" + }, + "require-dev": { + "cweagans/composer-patches": "^1.7", + "phpunit/phpunit": "4.8.34" + }, + "default-branch": true, + "type": "yii2-extension", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + }, + "composer-exit-on-patch-failure": true, + "patches": { + "phpunit/phpunit-mock-objects": { + "Fix PHP 7 and 8 compatibility": "https://yiisoft.github.io/phpunit-patches/phpunit_mock_objects.patch" + }, + "phpunit/phpunit": { + "Fix PHP 7 compatibility": "https://yiisoft.github.io/phpunit-patches/phpunit_php7.patch", + "Fix PHP 8 compatibility": "https://yiisoft.github.io/phpunit-patches/phpunit_php8.patch" + } + } + }, + "autoload": { + "psr-4": { + "yii\\faker\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Mark Jebri", + "email": "mark.github@yandex.ru" + } + ], + "description": "Fixture generator. The Faker integration for the Yii framework.", + "keywords": [ + "Fixture", + "faker", + "yii2" + ], + "support": { + "forum": "http://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/yii2-faker/issues", + "source": "https://github.com/yiisoft/yii2-faker", + "wiki": "http://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "open_collective" + }, + { + "url": "https://tidelift.com/funding/github/packagist/yiisoft/yii2-faker", + "type": "tidelift" + } + ], + "time": "2021-10-20T07:26:36+00:00" + }, + { + "name": "yiisoft/yii2-gii", + "version": "2.1.4", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/yii2-gii.git", + "reference": "d879cb186361fbc6f71a2d994d580b5a071a5642" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/yii2-gii/zipball/d879cb186361fbc6f71a2d994d580b5a071a5642", + "reference": "d879cb186361fbc6f71a2d994d580b5a071a5642", + "shasum": "" + }, + "require": { + "phpspec/php-diff": "^1.1.0", + "yiisoft/yii2": "~2.0.14" + }, + "require-dev": { + "phpunit/phpunit": "<7", + "yiisoft/yii2-coding-standards": "~2.0" + }, + "type": "yii2-extension", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "yii\\gii\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Qiang Xue", + "email": "qiang.xue@gmail.com" + } + ], + "description": "The Gii extension for the Yii framework", + "keywords": [ + "code generator", + "gii", + "yii2" + ], + "support": { + "forum": "http://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/yii2-gii/issues", + "source": "https://github.com/yiisoft/yii2-gii", + "wiki": "http://www.yiiframework.com/wiki/" + }, + "time": "2020-01-17T13:33:30+00:00" + } + ], + "aliases": [], + "minimum-stability": "dev", + "stability-flags": { + "guzzlehttp/guzzle": 20, + "bitwasp/bech32": 20, + "tkijewski/php-lnurl": 20, + "zhuravljov/yii2-queue-monitor": 20, + "supervisorphp/configuration": 20, + "creocoder/yii2-flysystem": 20, + "rekurzia/yii2-papertrail-log-target": 20, + "vxm/yii2-mfa": 20, + "lnpay/php-lndconnect": 20, + "flow/jsonpath": 20, + "yiisoft/yii2-mongodb": 20, + "hoaaah/yii2-startbootstrap-sb-admin-2-asset": 20 + }, + "prefer-stable": false, + "prefer-lowest": false, + "platform": { + "php": ">=7.3.0", + "ext-json": "*", + "ext-intl": "*", + "ext-curl": "*" + }, + "platform-dev": [], + "plugin-api-version": "2.1.0" +} diff --git a/config/.gitignore b/config/.gitignore new file mode 100644 index 00000000..194c5a64 --- /dev/null +++ b/config/.gitignore @@ -0,0 +1,4 @@ +console-local.php +main-local.php +params-local.php +web-local.php \ No newline at end of file diff --git a/config/__autocomplete.php b/config/__autocomplete.php new file mode 100644 index 00000000..f8e9b444 --- /dev/null +++ b/config/__autocomplete.php @@ -0,0 +1,33 @@ + 'basic-console', + 'basePath' => dirname(__DIR__).'/src/', + 'bootstrap' => ['log'], + 'controllerNamespace' => 'lnpay\\commands', + 'aliases' => [ + '@bower' => '@vendor/bower-asset', + '@npm' => '@vendor/npm-asset', + '@tests' => '@app/tests', + '@lnpay/commands' => '@app/commands', + ], + 'controllerMap'=>[ + 'migrate' => [ + 'class' => \yii\console\controllers\MigrateController::class, + 'migrationNamespaces' => [ + 'zhuravljov\yii\queue\monitor\migrations', + ], + ], + 'monitor' => [ + 'class' => \zhuravljov\yii\queue\monitor\console\GcController::class, + ], + ], + 'components' => [ + 'authManager' => [ + 'class' => 'yii\rbac\DbManager', + ], + 'urlManager' => [ + 'class'=>'lnpay\components\LNPayUrlManager', + 'enablePrettyUrl' => true, + 'enableStrictParsing' => false, + 'showScriptName' => false, + 'baseUrl'=>getenv('BASE_URL') + ], + ], +]; + + +return $config; \ No newline at end of file diff --git a/config/main.php b/config/main.php new file mode 100644 index 00000000..aac7bac0 --- /dev/null +++ b/config/main.php @@ -0,0 +1,73 @@ +'LNPAY', + 'bootstrap' => [ + 'queue', // The component registers its own console + ], + 'aliases'=> [ + '@root'=> dirname(__DIR__), + '@app'=> dirname(__DIR__).'/src/', + '@lnpay'=> dirname(__DIR__).'/src/', + '@app/node'=> dirname(__DIR__).'/src/node/', + '@app/wallet'=> dirname(__DIR__).'/src/wallet/', + '@app/org'=> dirname(__DIR__).'/src/org/', + '@vendor'=> dirname(__DIR__).'/vendor', + ], + 'basePath' => dirname(__DIR__).'/src/', + 'controllerNamespace' => 'lnpay\\controllers', + 'runtimePath' => dirname(__FILE__) . '/../runtime', + 'components' => [ + 'db' => [ + 'class' => 'yii\db\Connection', + 'dsn' => 'mysql:host='.getenv('DB_HOST').';dbname='.getenv('DB_DB'), + 'username' => getenv('DB_USER'), + 'password' => getenv('DB_PASS'), + 'charset' => 'utf8mb4', + ], + 'mongodb' => [ + 'class' => '\yii\mongodb\Connection', + 'dsn' => 'mongodb://'.getenv('MONGO_USER').':'.getenv('MONGO_PASS').'@'.getenv('MONGO_HOST').'/'.getenv('MONGO_DB'), + 'options'=>[ + 'ssl'=>true, + 'authSource'=>'admin' + ] + ], + 'cache' => [ + 'class' => \yii\caching\DbCache::class, + ], + 'mutex' => [ + 'class' => 'yii\mutex\MysqlMutex', + 'autoRelease'=>false + ], + 'queue' => [ + 'class' => \yii\queue\db\Queue::class, + //'as log' => \yii\queue\LogBehavior::class, + 'as jobMonitor' => \zhuravljov\yii\queue\monitor\JobMonitor::class, + 'as workerMonitor' => \zhuravljov\yii\queue\monitor\WorkerMonitor::class, + 'db' => 'db', // DB connection component or its config + 'tableName' => '{{%queue}}', // Table name + 'channel' => 'lnpay-cloud', // Queue channel key + 'mutex' => \yii\mutex\MysqlMutex::class, // Mutex used to sync queries + ], + 'mailer' => [ + 'class' => 'yii\swiftmailer\Mailer', + 'viewPath' => '@app/mail', + 'transport' => [ + 'class' => 'Swift_SmtpTransport', + 'host' => getenv('DEFAULT_EMAIL_HOST'), + 'username' => getenv('DEFAULT_EMAIL_USERNAME'), + 'password' => getenv('DEFAULT_EMAIL_PASSWORD'), + 'port' => getenv('DEFAULT_EMAIL_PORT'), + 'encryption' => 'tls', + ], + // send all mails to a file by default. You have to set + // 'useFileTransport' to false and configure a transport + // for the mailer to send real emails. + 'useFileTransport' => (in_array(getenv('YII_ENV'),['dev','test'])?true:false), + ], + ], + 'params'=>$params +]; diff --git a/config/params.php b/config/params.php new file mode 100644 index 00000000..0a576f65 --- /dev/null +++ b/config/params.php @@ -0,0 +1,8 @@ + 'admin@example.com', + 'senderEmail' => 'noreply@example.com', + 'senderName' => 'Example.com mailer', + 'lnpay_params' => ['lnpay_email','lnpay_userId','lnpay_productId','lnpay_param1'] +]; diff --git a/config/test.php b/config/test.php new file mode 100644 index 00000000..8f47d886 --- /dev/null +++ b/config/test.php @@ -0,0 +1,176 @@ + 'basic', + 'basePath' => dirname(__DIR__).'/src/', + 'bootstrap' => [ + 'log', + 'monitor', + 'node', + 'wallet' + ], + 'aliases'=> [ + '@root'=> dirname(__DIR__), + '@app'=> dirname(__DIR__).'/src/', + '@app/node'=> dirname(__DIR__).'/src/node/', + '@app/org'=> dirname(__DIR__).'/src/org/', + '@vendor'=> dirname(__DIR__).'/vendor', + '@bower' => '@vendor/bower-asset', + '@npm' => '@vendor/npm-asset', + ], + 'controllerNamespace' => 'lnpay\\controllers', + 'runtimePath' => dirname(__FILE__) . '/../runtime', + 'defaultRoute'=>'home', + 'modules'=>[ + 'monitor' => [ + 'class' => \zhuravljov\yii\queue\monitor\Module::class, + 'canPushAgain'=>true, + 'canWorkerStop'=>true, + 'canExecStop'=>true + ], + 'node' => [ + 'class' => lnpay\node\Module::class + ], + 'wallet' => [ + 'class' => lnpay\wallet\Module::class + ], + ], + 'controllerMap'=>[ + 'migrate' => [ + 'class' => \yii\console\controllers\MigrateController::class, + 'migrationNamespaces' => [ + 'zhuravljov\yii\queue\monitor\migrations', + ], + ], + ], + 'components' => [ + 'assetManager' => [ + 'bundles' => [ + 'yii\web\JqueryAsset' => [ + //'jsOptions' => [ 'position' => \yii\web\View::POS_HEAD ], + ], + ], + 'appendTimestamp' => true + ], + 'queue' => [ + 'class' => \yii\queue\sync\Queue::class, + 'handle'=>true, + //'as log' => \yii\queue\LogBehavior::class, + 'as jobMonitor' => \zhuravljov\yii\queue\monitor\JobMonitor::class, + 'as workerMonitor' => \zhuravljov\yii\queue\monitor\WorkerMonitor::class + ], + 'authManager' => [ + 'class' => 'yii\rbac\DbManager', + ], + 'session' => [ + 'class' => 'yii\web\DbSession', + ], + 'cache' => [ + 'class' => 'yii\caching\FileCache', + ], + 'mutex' => [ + 'class' => 'yii\mutex\MysqlMutex', + 'autoRelease'=>false + ], + 'user' => [ + 'identityClass' => 'lnpay\models\User', + 'enableAutoLogin' => true, + 'loginUrl'=>['/home/login'], + ], + 'errorHandler' => [ + 'errorAction' => 'home/error', + ], + 'urlManager' => [ + 'class'=>'lnpay\components\LNPayUrlManager', + 'enablePrettyUrl' => true, + 'enableStrictParsing' => false, + 'showScriptName' => true, + 'rules' => [ + ['class' => 'yii\rest\UrlRule', 'controller' => 'v1/user'], + ['class' => 'yii\rest\UrlRule', 'controller' => 'v1/action-name'], + ['class' => 'yii\rest\UrlRule', 'controller' => 'v1/status-type'], + + 'POST v1/webhook/subscription/' => 'v1/webhook/subscribe', + 'DELETE v1/webhook/subscription/' => 'v1/webhook/unsubscribe', + + //WALLETS NEW NEW + 'GET,HEAD,OPTIONS v1/wallets' => 'v1/wallet/view-all', + 'GET,HEAD,OPTIONS v1/wallet/' => 'v1/wallet/view', + 'GET,OPTIONS v1/wallet//lnurl/withdraw-static' => 'v1/wallet/lnurl-withdraw-static', + 'GET,OPTIONS v1/wallet//lnurl/withdraw' => 'v1/wallet/lnurl-withdraw', + 'GET,OPTIONS v1/wallet//lnurl-process' => 'v1/wallet/lnurl-process', + 'POST,OPTIONS v1/wallet' => 'v1/wallet/create', + 'POST,OPTIONS v1/wallet//withdraw' => 'v1/wallet/withdraw', + 'POST,OPTIONS v1/wallet//keysend' => 'v1/wallet/keysend', + 'POST,OPTIONS v1/wallet//invoice' => 'v1/wallet/invoice', + 'POST,OPTIONS v1/wallet//transfer' => 'v1/wallet/transfer', + 'GET,OPTIONS v1/wallet//transactions' => 'v1/wallet/transactions', + 'GET,OPTIONS v1/lntx/' => 'v1/lntx/view', + + //WALLET-TRANSACTIONS + 'GET,OPTIONS v1/wallet-transactions' => 'v1/wallet-transaction/view-all', + + //JOBS + 'GET v1/job/' => 'v1/job/view', + + '/qr' => 'distro-router/qr', + 'distro-router/lnurl-withdraw' => 'distro-router/lnurl-withdraw', + + + 'developers/dashboard' => 'dashboard/developers', + 'developers/webhook' => 'webhook', + 'developers/api-log' => 'api-log', + 'developers/events' => 'dashboard/events', + 'developers/domain' => 'domain', + ], + ], + 'request' => [ + // !!! insert a secret key in the following (if it is empty) - this is required by cookie validation + 'cookieValidationKey' => 'lhz6GXi4DgVEa4MTjoJpUYvZScpznBu1', + 'parsers' => [ + 'application/json' => 'yii\web\JsonParser', + ] + ], + 'db'=>require(__DIR__ . '/test_db.php'), + 'log' => [ + 'targets' => [ + [ + 'class' => 'yii\log\DbTarget', + 'levels' => ['info','trace','error','warning'], + 'logVars' => [], + 'logTable'=>'log', + 'except' => [ + 'yii\db\*', + 'yii\web\Session::*', + 'yii\base\*', + 'yii\web\*' + ] + ], + [ + 'class' => 'lnpay\components\ApiLogTarget', + ], + ], + ], + 'mailer' => [ + 'class' => 'yii\swiftmailer\Mailer', + 'viewPath' => '@app/mail', + 'transport' => [ + 'class' => 'Swift_SmtpTransport', + 'host' => getenv('DEFAULT_EMAIL_HOST'), + 'username' => getenv('DEFAULT_EMAIL_USERNAME'), + 'password' => getenv('DEFAULT_EMAIL_PASSWORD'), + 'port' => getenv('DEFAULT_EMAIL_PORT'), + 'encryption' => 'tls', + ], + // send all mails to a file by default. You have to set + // 'useFileTransport' to false and configure a transport + // for the mailer to send real emails. + 'useFileTransport' => (in_array(getenv('YII_ENV'),['dev','test'])?true:false), + ], + ], + 'params' => require(__DIR__ . '/params.php') +]; + + + +return $config; diff --git a/config/test_db.php b/config/test_db.php new file mode 100644 index 00000000..3f456b0a --- /dev/null +++ b/config/test_db.php @@ -0,0 +1,10 @@ + 'basic', + 'bootstrap' => [ + 'log', + 'monitor', + 'node', + 'wallet', + 'org' + ], + 'aliases' => [ + '@bower' => '@vendor/bower-asset', + '@npm' => '@vendor/npm-asset', + ], + 'defaultRoute'=>'home', + 'modules'=>[ + 'monitor' => [ + 'class' => \zhuravljov\yii\queue\monitor\Module::class, + 'canPushAgain'=>true, + 'canWorkerStop'=>true, + 'canExecStop'=>true + ], + 'node' => [ + 'class' => lnpay\node\Module::class + ], + 'wallet' => [ + 'class' => lnpay\wallet\Module::class + ], + 'org' => [ + 'class' => lnpay\org\Module::class + ], + ], + 'layoutPath' => '@app/views/layouts/sb-admin', + 'layout' => 'main.php', + 'components' => [ + 'assetManager' => [ + 'bundles' => [ + 'yii\web\JqueryAsset' => [ + //'jsOptions' => [ 'position' => \yii\web\View::POS_HEAD ], + ], + ], + 'appendTimestamp' => true + ], + 'authManager' => [ + 'class' => 'yii\rbac\DbManager', + ], + 'session' => [ + 'class' => 'yii\web\DbSession', + ], + 'user' => [ + 'identityClass' => 'lnpay\models\User', + 'enableAutoLogin' => true, + 'loginUrl'=>['/home/login'], + 'as mfa' => [ + 'class' => 'vxm\mfa\Behavior', + 'verifyUrl' => '/home/mfa-verify', // verify action, see bellow for setup it + 'enable'=>false + ] + ], + 'errorHandler' => [ + 'errorAction' => 'home/error', + ], + 'log' => [ + 'targets' => [ + [ + 'class' => 'lnpay\components\ApiLogTarget', + ], + ], + ], + 'urlManager' => [ + 'class'=>'lnpay\components\LNPayUrlManager', + 'enablePrettyUrl' => true, + 'enableStrictParsing' => false, + 'showScriptName' => false, + 'rules' => [ + ['class' => 'yii\rest\UrlRule', 'controller' => 'v1/user'], + ['class' => 'yii\rest\UrlRule', 'controller' => 'v1/action-name'], + ['class' => 'yii\rest\UrlRule', 'controller' => 'v1/status-type'], + + 'POST v1/webhook/subscription/' => 'v1/webhook/subscribe', + 'DELETE v1/webhook/subscription/' => 'v1/webhook/unsubscribe', + + 'GET,OPTIONS v1/lntx/' => 'v1/lntx/view', + + //JOBS + 'GET v1/job/' => 'v1/job/view', + + '/qr' => 'distro-router/qr', + 'distro-router/lnurl-withdraw' => 'distro-router/lnurl-withdraw', + + + 'developers/dashboard' => 'dashboard/developers', + 'developers/webhook' => 'webhook', + 'developers/api-log' => 'api-log', + 'developers/events' => 'dashboard/events', + 'developers/domain' => 'domain', + ], + ], + 'request' => [ + 'class'=>'lnpay\components\LNPayRequestComponent', + // !!! insert a secret key in the following (if it is empty) - this is required by cookie validation + 'cookieValidationKey' => getenv('YII_COOKIE_VALIDATION_KEY'), + 'parsers' => [ + 'application/json' => 'yii\web\JsonParser', + ] + ], + 'i18n' => [ + 'translations' => [ + '*' => [ + 'class' => 'yii\i18n\PhpMessageSource', + 'basePath' => '@app/messages', // if advanced application, set @frontend/messages + 'sourceLanguage' => 'en', + 'fileMap' => [ + //'main' => 'main.php', + ], + ], + ], + ], + ], +]; + + +return $config; diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 00000000..9c8c1412 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,48 @@ +version: '3.5' +services: + php: + container_name: lnpay-php + image: bootstrapbandit/lnpay:7.3-apache-grpc-0.1 + volumes: + - ./docker/supervisor/:/etc/supervisor/ + - ~/.composer-docker/cache:/root/.composer/cache:delegated + - ./:/app:delegated + ports: + - 8111:80 + - 9001:9001 + networks: + lnpay-lms_public_net: + ipv4_address: 192.168.69.11 + db: + container_name: lnpay-db + image: mysql:5.7 + command: --default-authentication-plugin=mysql_native_password + restart: always + environment: + MYSQL_ROOT_PASSWORD: example + MYSQL_DATABASE: lnpay_db + ports: + - 8222:3306 + networks: + lnpay-lms_public_net: + ipv4_address: 192.168.69.22 + chrome: + container_name: lnpay-chrome + image: selenium/standalone-chrome + restart: always + ports: + - 4444:4444 + depends_on: + - php + networks: + lnpay-lms_public_net: + ipv4_address: 192.168.69.33 + +networks: + lnpay-lms_public_net: + name: lnpay-lms_public_net + driver: bridge + ipam: + driver: default + config: + - subnet: 192.168.69.0/24 \ No newline at end of file diff --git a/docker.sh b/docker.sh new file mode 100755 index 00000000..6386ba8e --- /dev/null +++ b/docker.sh @@ -0,0 +1,64 @@ +#!/usr/bin/env bash + +if [ $1 == "build" ] +then + docker-compose up -d + + docker exec lnpay-php composer install + + docker exec lnpay-php init --env=Development --overwrite=y + + # CRON + docker exec lnpay-php crontab /app/docker/cron/lnpay.cron + # docker exec lnpay-php "cron -f" + + # Restart after enable for apache + docker restart lnpay-php + + sleep 3 + + docker exec lnpay-php php yii migrate --interactive=0 --migrationPath=@yii/rbac/migrations + docker exec lnpay-php php yii migrate --interactive=0 + # docker exec lnpay-php supervisord + +fi + +if [ $1 == "start" ] +then + docker-compose up -d + docker exec lnpay-php pkill -f supervisord + docker exec lnpay-php supervisord +fi + +if [ $1 == "stop" ] +then + set -e + docker-compose stop +fi + +if [ $1 == "destroy" ] +then + set -e + docker-compose down --volumes + rm -rf docker/supervisor/conf.d/lnod_* + + +fi + +# THIS IS EXPERIMENTAL +if [ $1 == "polarup" ] +then + cd tests/polar; + set -e + docker-compose up -d + echo "Waiting 30s for bitcoind and LND to boot..." + sleep 30 +fi + +# THIS IS EXPERIMENTAL +if [ $1 == "polardown" ] +then + cd tests/polar; + set -e + docker-compose down --volumes +fi \ No newline at end of file diff --git a/docker/cron/lnpay.cron b/docker/cron/lnpay.cron new file mode 100644 index 00000000..d32adab3 --- /dev/null +++ b/docker/cron/lnpay.cron @@ -0,0 +1,4 @@ +* * * * * /usr/local/bin/php /app/yii cron/minute >> /app/runtime/cron/cron.log 2>&1 +0 * * * * /usr/local/bin/php /app/yii cron/hourly >> /app/runtime/cron/cron.log 2>&1 +0 0 * * * /usr/local/bin/php /app/yii cron/daily >> /app/runtime/cron/cron.log 2>&1 +# This extra line makes it a valid cron \ No newline at end of file diff --git a/docker/lnd/lnd.conf b/docker/lnd/lnd.conf new file mode 100644 index 00000000..c7808ea3 --- /dev/null +++ b/docker/lnd/lnd.conf @@ -0,0 +1,84 @@ +[Application Options] +; set external IP if not using NAT +externalip=xxxxx +; set node alias (seen in explorers) +alias=node.alias +debuglevel=info + +rpclisten=0.0.0.0:10009 +listen=0.0.0.0:9735 +restlisten=0.0.0.0:10013 +tlsextraip=xxxx +tlsextradomain=node-ln.lnpay.co +tlsextradomain=ec2-xxxxx.compute-1.amazonaws.com + +maxpendingchannels=2 +accept-keysend=true +allow-circular-route=true +minchansize=5000000 + + +# Delete and recreate RPC TLS certificate when details change or cert expires +tlsautorefresh=1 +# Do not include IPs in the RPC TLS certificate +tlsdisableautofill=1 + + +; If true, we'll attempt to garbage collect canceled invoices upon start. +gc-canceled-invoices-on-startup=true + +; If true, we'll delete newly canceled invoices on the fly. +gc-canceled-invoices-on-the-fly=true + +[Bitcoin] +bitcoin.active=1 +bitcoin.mainnet=1 +bitcoin.node=bitcoind + +; Fees +bitcoin.basefee=1000 +bitcoin.feerate=800 + + + +[Bitcoind] +;bitcoind.rpchost=127.0.0.1 +bitcoind.rpcuser=btc +bitcoind.rpcpass=btc +bitcoind.zmqpubrawblock=tcp://127.0.0.1:28332 +bitcoind.zmqpubrawtx=tcp://127.0.0.1:28333 + + +[protocol] + +; If set, then lnd will create and accept requests for channels larger than 0.16 +; BTC + +protocol.wumbo-channels=true + +[bolt] + +; If true, prevents the database from syncing its freelist to disk. +db.bolt.nofreelistsync=1 + +; Whether the databases used within lnd should automatically be compacted on +; every startup (and if the database has the configured minimum age). This is +; disabled by default because it requires additional disk space to be available +; during the compaction that is freed afterwards. In general compaction leads to +; smaller database files. +### db.bolt.auto-compact=true + +[db] +db.prune-revocation=true + +[healthcheck] + +; The number of times we should attempt to query our chain backend before +; gracefully shutting down. Set this value to 0 to disable this health check. +healthcheck.chainbackend.attempts=100 + +[tor] + +tor.active=true +tor.v3=true +tor.skip-proxy-for-clearnet-targets=true diff --git a/docker/supervisor/conf.d/yii-queue-worker.conf b/docker/supervisor/conf.d/yii-queue-worker.conf new file mode 100644 index 00000000..bca9ecde --- /dev/null +++ b/docker/supervisor/conf.d/yii-queue-worker.conf @@ -0,0 +1,10 @@ +[program:yii-queue-worker] +process_name=%(program_name)s_%(process_num)02d +command = /usr/local/bin/php /app/yii queue/listen +autostart= 1 +autorestart= 1 +numprocs= 1 +stderr_logfile = /app/runtime/supervisor/default_worker.err.log +stdout_logfile = /app/runtime/supervisor/default_worker.out.log +stdout_logfile_maxbytes = 100000 +stdout_logfile_backups=0 \ No newline at end of file diff --git a/docker/supervisor/supervisord.conf b/docker/supervisor/supervisord.conf new file mode 100644 index 00000000..118fa4e4 --- /dev/null +++ b/docker/supervisor/supervisord.conf @@ -0,0 +1,32 @@ +; supervisor config file + +[unix_http_server] +file=/var/run/supervisor.sock ; (the path to the socket file) +chmod=0700 ; sockef file mode (default 0700) + +[supervisord] +nodaemon=true +logfile=/var/log/supervisor/supervisord.log ; (main log file;default $CWD/supervisord.log) +pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid) +childlogdir=/var/log/supervisor ; ('AUTO' child log dir, default $TEMP) + +; the below section must remain in the config file for RPC +; (supervisorctl/web interface) to work, additional interfaces may be +; added by defining them in separate rpcinterface: sections +[rpcinterface:supervisor] +supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface + +[supervisorctl] +serverurl=unix:///var/run/supervisor.sock ; use a unix:// URL for a unix socket + +[inet_http_server] +port = 192.168.69.11:9001 + +; The [include] section can just contain the "files" setting. This +; setting can list multiple files (separated by whitespace or +; newlines). It can also contain wildcards. The filenames are +; interpreted as relative to this file. Included files *cannot* +; include files themselves. + +[include] +files = /etc/supervisor/conf.d/*.conf \ No newline at end of file diff --git a/docker/tor/torrc_example b/docker/tor/torrc_example new file mode 100644 index 00000000..1e458ab2 --- /dev/null +++ b/docker/tor/torrc_example @@ -0,0 +1,8 @@ +RunAsDaemon 1 +ControlPort 9051 +CookieAuthentication 1 +CookieAuthFileGroupReadable 1 + +# sudo chown ubuntu:ubuntu /run/tor/control.authcookie + +# /etc/tor/torrc \ No newline at end of file diff --git a/environments/dev/config/console-local.php b/environments/dev/config/console-local.php new file mode 100644 index 00000000..65bc6ee9 --- /dev/null +++ b/environments/dev/config/console-local.php @@ -0,0 +1,6 @@ + [ + 'log' => [ + 'traceLevel' => YII_DEBUG ? 3 : 0, + 'targets' => [ + [ + 'class' => 'yii\log\DbTarget', + 'levels' => ['error','warning','info'], + 'logTable'=>'log', + 'except' => [ + 'yii\web\HttpException:404', + 'yii\rbac\DbManager:*', + 'yii\db\*', + 'yii\web\Session::*', + 'yii\filters\RateLimiter::*', + 'yii\web\User::login', + 'yii\web\User::loginByCookie' + ], + 'maskVars'=>[ + '_SERVER.DEFAULT_EMAIL_USERNAME', + '_SERVER.DEFAULT_EMAIL_PASSWORD', + '_SERVER.AMPLITUDE_API_KEY', + '_SERVER.DB_USER', + '_SERVER.DB_PASS', + '_SERVER.DB_HOST', + '_SERVER.DB_DB', + ] + ], + [ + 'class' => Rekurzia\Log\PapertrailTarget::class, + 'enabled'=>(bool) (getenv('PAPERTRAIL_HOST') && getenv('PAPERTRAIL_HOST')), + 'host' => getenv('PAPERTRAIL_HOST'), + 'port' => getenv('PAPERTRAIL_PORT'), + 'additionalPrefix' => function() { + return getenv('INSTANCE_ID'); + }, + 'levels' => ['error','warning','info'], + 'except' => [ + 'yii\web\HttpException:404', + 'yii\rbac\DbManager:*', + 'yii\db\*', + 'yii\web\Session::*', + 'yii\filters\RateLimiter::*', + 'yii\web\User::login', + 'yii\web\User::loginByCookie' + ], + 'maskVars'=>[ + '_SERVER.DEFAULT_EMAIL_USERNAME', + '_SERVER.DEFAULT_EMAIL_PASSWORD', + '_SERVER.AMPLITUDE_API_KEY', + '_SERVER.DB_USER', + '_SERVER.DB_PASS', + '_SERVER.DB_HOST', + '_SERVER.DB_DB', + ] + ], + ] + ] + ] +]; + +return $config; \ No newline at end of file diff --git a/environments/dev/config/web-local.php b/environments/dev/config/web-local.php new file mode 100755 index 00000000..29a409f3 --- /dev/null +++ b/environments/dev/config/web-local.php @@ -0,0 +1,39 @@ + [ + 'log' => [ + 'targets' => [ + [ + 'class' => 'yii\log\DbTarget', + 'levels' => ['info','trace','error','warning'], + 'logVars' => [], + 'logTable'=>'log', + 'except' => [ + 'yii\db\*', + 'yii\web\*', + 'yii\base\*', + 'yii\debug\*' + ] + ], + ], + ], + ], +]; + +// configuration adjustments for 'dev' environment +$config['bootstrap'][] = 'debug'; +$config['modules']['debug'] = [ + 'class' => 'yii\debug\Module', + // uncomment the following to add your IP if you are not connecting from localhost. + 'allowedIPs' => ['127.0.0.1', '::1','192.168.69.1'], +]; + +$config['bootstrap'][] = 'gii'; +$config['modules']['gii'] = [ + 'class' => 'yii\gii\Module', + // uncomment the following to add your IP if you are not connecting from localhost. + 'allowedIPs' => ['127.0.0.1', '::1','192.168.69.1'], +]; + +return $config; \ No newline at end of file diff --git a/environments/index.php b/environments/index.php new file mode 100755 index 00000000..bd5473d0 --- /dev/null +++ b/environments/index.php @@ -0,0 +1,59 @@ + [ + * 'path' => 'directory storing the local files', + * 'setWritable' => [ + * // list of directories that should be set writable + * ], + * 'setExecutable' => [ + * // list of directories that should be set executable + * ], + * 'setCookieValidationKey' => [ + * // list of config files that need to be inserted with automatically generated cookie validation keys + * ], + * 'createSymlink' => [ + * // list of symlinks to be created. Keys are symlinks, and values are the targets. + * ], + * ], + * ]; + * ``` + */ +return [ + 'Development' => [ + 'path' => 'dev', + 'setWritable' => [ + 'runtime', + 'runtime/node_tls', + 'web/assets', + 'web/upload', + ], + 'setExecutable' => [ + 'yii', + ], + 'setCookieValidationKey' => [ + 'config/web-local.php', + ], + ], + 'Production' => [ + 'path' => 'prod', + 'setWritable' => [ + 'runtime', + 'runtime/node_tls', + 'web/assets', + 'web/upload', + ], + 'setExecutable' => [ + 'yii', + ], + 'setCookieValidationKey' => [ + 'config/web-local.php', + ], + ], +]; \ No newline at end of file diff --git a/environments/prod/config/console-local.php b/environments/prod/config/console-local.php new file mode 100644 index 00000000..65bc6ee9 --- /dev/null +++ b/environments/prod/config/console-local.php @@ -0,0 +1,6 @@ + [ + 'log' => [ + 'traceLevel' => 0, + 'targets' => [ + [ + 'class' => 'yii\log\DbTarget', + 'levels' => ['error','warning','info'], + 'logTable'=>'log', + 'except' => [ + 'yii\web\HttpException:404', + 'yii\rbac\DbManager:*', + 'yii\db\*', + 'yii\web\Session::*', + 'yii\filters\RateLimiter::*', + 'yii\web\User::login', + 'yii\web\User::loginByCookie' + ], + 'maskVars'=>[ + '_SERVER.DEFAULT_EMAIL_USERNAME', + '_SERVER.DEFAULT_EMAIL_PASSWORD', + '_SERVER.AMPLITUDE_API_KEY', + '_SERVER.DB_USER', + '_SERVER.DB_PASS', + '_SERVER.DB_HOST', + '_SERVER.DB_DB', + ] + ], + ], + ], + 'cache' => [ + 'class' => \yii\redis\Cache::class, + 'redis' => [ + 'hostname' => getenv('REDIS_HOST'), + 'port' => 6379, + 'database' => getenv('REDIS_CACHE_DB'), + ] + ], + 'mutex' => [ + 'class' => 'yii\redis\Mutex', + 'autoRelease'=>false, + 'expire'=>3600, + 'redis' => [ + 'hostname' => getenv('REDIS_HOST'), + 'port' => 6379, + 'database' => getenv('REDIS_MUTEX_DB'), + ] + ] + ] +]; diff --git a/environments/prod/config/web-local.php b/environments/prod/config/web-local.php new file mode 100755 index 00000000..a245beb2 --- /dev/null +++ b/environments/prod/config/web-local.php @@ -0,0 +1,44 @@ + [ + 'log' => [ + 'traceLevel' => YII_DEBUG ? 3 : 0, + 'targets' => [ + [ + 'class' => Rekurzia\Log\PapertrailTarget::class, + 'enabled'=>(bool) (getenv('PAPERTRAIL_HOST') && getenv('PAPERTRAIL_PORT')), + 'host' => getenv('PAPERTRAIL_HOST'), + 'port' => getenv('PAPERTRAIL_PORT'), + 'additionalPrefix' => function() { + return getenv('INSTANCE_ID'); + }, + 'levels' => ['error','warning'], + 'except' => [ + 'yii\web\HttpException:404', + 'yii\rbac\DbManager:*', + 'yii\db\*', + 'yii\web\Session::*', + 'yii\filters\RateLimiter::*', + 'yii\web\User::login', + 'yii\web\User::loginByCookie' + ], + 'maskVars'=>[ + '_SERVER.DEFAULT_EMAIL_USERNAME', + '_SERVER.DEFAULT_EMAIL_PASSWORD', + '_SERVER.AMPLITUDE_API_KEY', + '_SERVER.DB_USER', + '_SERVER.DB_PASS', + '_SERVER.DB_HOST', + '_SERVER.DB_DB', + ] + ], + ] + ] + ] + ]; + +return $config; diff --git a/environments/prod_init.sh b/environments/prod_init.sh new file mode 100644 index 00000000..d3ad02c7 --- /dev/null +++ b/environments/prod_init.sh @@ -0,0 +1,22 @@ +#!/usr/bin/env bash + +# Change BITNAMI HTDOCS dir to /web + +rm -rf htdocs/index.html + +git clone https://github.com/lnpay/lnpay htdocs + +php init --env=Development --overwrite=y + +# Change mysql password .env + +composer install + +php yii migrate --interactive=0 --migrationPath=@yii/rbac/migrations +php yii migrate --interactive=0 + + +sudo apt-get update +sudo apt-get -y install libmcrypt-dev + +sudo pecl install grpc \ No newline at end of file diff --git a/init b/init new file mode 100755 index 00000000..07789938 --- /dev/null +++ b/init @@ -0,0 +1,221 @@ +#!/usr/bin/env php + + * + * @link http://www.yiiframework.com/ + * @copyright Copyright (c) 2008 Yii Software LLC + * @license http://www.yiiframework.com/license/ + */ + +$params = getParams(); +$root = str_replace('\\', '/', __DIR__); +$envs = require("$root/environments/index.php"); +$envNames = array_keys($envs); + +echo "Yii Application Initialization Tool v1.0\n\n"; + +$envName = null; +if (empty($params['env']) || $params['env'] === '1') { + echo "Which environment do you want the application to be initialized in?\n\n"; + foreach ($envNames as $i => $name) { + echo " [$i] $name\n"; + } + echo "\n Your choice [0-" . (count($envs) - 1) . ', or "q" to quit] '; + $answer = trim(fgets(STDIN)); + + if (!ctype_digit($answer) || !in_array($answer, range(0, count($envs) - 1))) { + echo "\n Quit initialization.\n"; + exit(0); + } + + if (isset($envNames[$answer])) { + $envName = $envNames[$answer]; + } +} else { + $envName = $params['env']; +} + +if (!in_array($envName, $envNames)) { + $envsList = implode(', ', $envNames); + echo "\n $envName is not a valid environment. Try one of the following: $envsList. \n"; + exit(2); +} + +$env = $envs[$envName]; + +if (empty($params['env'])) { + echo "\n Initialize the application under '{$envNames[$answer]}' environment? [yes|no] "; + $answer = trim(fgets(STDIN)); + if (strncasecmp($answer, 'y', 1)) { + echo "\n Quit initialization.\n"; + exit(0); + } +} + +echo "\n Start initialization ...\n\n"; +$files = getFileList("$root/environments/{$env['path']}"); +$all = false; +foreach ($files as $file) { + if (!copyFile($root, "environments/{$env['path']}/$file", $file, $all, $params)) { + break; + } +} + +//Copy .env.example to .env for convenience on dev init...If .env not exist! +if ($envName=='Development' && !file_exists("$root/.env")) { + copyFile($root,'.env.example','.env',$all,$params); + + //set keys + $env = file_get_contents("$root/.env"); + + //cookie validation + $bytes = random_bytes(32); + $key = strtr(substr(base64_encode($bytes), 0, 32), '+/=', '_-.'); + $env = str_replace('yii-cookie-validation-key',$key,$env); + + //general encryption + $bytes = random_bytes(32); + $key = strtr(substr(base64_encode($bytes), 0, 32), '+/=', '_-.'); + $env = str_replace('general-encryption-key',$key,$env); + + file_put_contents("$root/.env",$env); +} + +$callbacks = ['setCookieValidationKey', 'setWritable', 'setExecutable']; +foreach ($callbacks as $callback) { + if (!empty($env[$callback])) { + $callback($root, $env[$callback]); + } +} + +echo "\n ... initialization completed.\n\n"; + +function getFileList($root, $basePath = '') +{ + $files = []; + $handle = opendir($root); + while (($path = readdir($handle)) !== false) { + if ($path === '.svn' || $path === '.' || $path === '..') { + continue; + } + $fullPath = "$root/$path"; + $relativePath = $basePath === '' ? $path : "$basePath/$path"; + if (is_dir($fullPath)) { + $files = array_merge($files, getFileList($fullPath, $relativePath)); + } else { + $files[] = $relativePath; + } + } + closedir($handle); + return $files; +} + +function copyFile($root, $source, $target, &$all, $params) +{ + if (!is_file($root . '/' . $source)) { + echo " skip $target ($source not exist)\n"; + return true; + } + if (is_file($root . '/' . $target)) { + if (file_get_contents($root . '/' . $source) === file_get_contents($root . '/' . $target)) { + echo " unchanged $target\n"; + return true; + } + if ($all) { + echo " overwrite $target\n"; + } else { + echo " exist $target\n"; + echo " ...overwrite? [Yes|No|All|Quit] "; + + + $answer = !empty($params['overwrite']) ? $params['overwrite'] : trim(fgets(STDIN)); + if (!strncasecmp($answer, 'q', 1)) { + return false; + } else { + if (!strncasecmp($answer, 'y', 1)) { + echo " overwrite $target\n"; + } else { + if (!strncasecmp($answer, 'a', 1)) { + echo " overwrite $target\n"; + $all = true; + } else { + echo " skip $target\n"; + return true; + } + } + } + } + file_put_contents($root . '/' . $target, file_get_contents($root . '/' . $source)); + return true; + } + echo " generate $target\n"; + @mkdir(dirname($root . '/' . $target), 0777, true); + file_put_contents($root . '/' . $target, file_get_contents($root . '/' . $source)); + return true; +} + +function getParams() +{ + $rawParams = []; + if (isset($_SERVER['argv'])) { + $rawParams = $_SERVER['argv']; + array_shift($rawParams); + } + + $params = []; + foreach ($rawParams as $param) { + if (preg_match('/^--(\w+)(=(.*))?$/', $param, $matches)) { + $name = $matches[1]; + $params[$name] = isset($matches[3]) ? $matches[3] : true; + } else { + $params[] = $param; + } + } + return $params; +} + +function setWritable($root, $paths) +{ + foreach ($paths as $writable) { + echo " chmod 0777 $writable\n"; + @chmod("$root/$writable", 0777); + } +} + +function setExecutable($root, $paths) +{ + foreach ($paths as $executable) { + echo " chmod 0755 $executable\n"; + @chmod("$root/$executable", 0755); + } +} + +function setCookieValidationKey($root, $paths) +{ + foreach ($paths as $file) { + echo " generate cookie validation key in $file\n"; + $file = $root . '/' . $file; + $length = 32; + $bytes = random_bytes($length); + $key = strtr(substr(base64_encode($bytes), 0, $length), '+/=', '_-.'); + $content = preg_replace('/(("|\')cookieValidationKey("|\')\s*=>\s*)(""|\'\')/', "\\1'$key'", file_get_contents($file)); + file_put_contents($file, $content); + } +} + +function createSymlink($links) +{ + foreach ($links as $link => $target) { + echo " symlink $target as $link\n"; + if (!is_link($link)) { + symlink($target, $link); + } + } +} diff --git a/init.bat b/init.bat new file mode 100755 index 00000000..e50c242c --- /dev/null +++ b/init.bat @@ -0,0 +1,20 @@ +@echo off + +rem ------------------------------------------------------------- +rem Yii command line init script for Windows. +rem +rem @author Qiang Xue +rem @link http://www.yiiframework.com/ +rem @copyright Copyright (c) 2008 Yii Software LLC +rem @license http://www.yiiframework.com/license/ +rem ------------------------------------------------------------- + +@setlocal + +set YII_PATH=%~dp0 + +if "%PHP_COMMAND%" == "" set PHP_COMMAND=php.exe + +"%PHP_COMMAND%" "%YII_PATH%init" %* + +@endlocal diff --git a/polar/LNPay-0.13.0.polar.zip b/polar/LNPay-0.13.0.polar.zip new file mode 100644 index 0000000000000000000000000000000000000000..906ed1c69128f26270322a079f0239b8ae4a8f1a GIT binary patch literal 1022168 zcmb5VWmH^Uvo1;qPJ+7z5ALqPodkD+OXD;&P6z~oJB<_E>ELc5xHRr=jl1jR{l2sJ z-FJ_B&NzFGwO03!SvF_YQ&n@0^;zjH0v;S3917ePQ-;Pg)94Szw{UQ1m~e17aAa^6 zPUZkhS5|W;2WKZYOExbDdo4{=xVI78gQh4ugQo7D=x}ckc3%np^*Txtbz0=W3b}bi z!+68B7ZkrM4?k5RGhQMSK8mQ2=|F{35?;GmyBok>!ah_Tj}Zp`(2sTQc|+me3Tq9O z#aGYYr3ZGWGb4_)ul<@}4kp^Z`QU0li-M28ED>&}H&MvKXTXY9b*7us#3G$_@A%DV z$=j8YhZTWG9I+whs(`}q84^a4d7FeiQwGLQ^(UDtOX+8 z?%vn!>e`;92-;JvcGlCHGQ{+A_D)^z?XOxzQwfQi?34|fAU^iXDBJ-SHR$-{$=@pfWn;8SJ-+dU-8pN$x4Mk0nEHKfEFi5}fCHXu+X~Nh5rI%2lKxj!VnV{rCbTxZj*@!kjVh1}_XuO!!-;X5e*f~tXid2A2 zGP|Rt?!52XMf_u>6n<;JaO_D|F1%-XYfH&Be&oX0#g^4Z2r_hUH|7;6}s>T1Y)W5nX4Oy2MmG z_%y9mJ#5JPW^+|llJ*S`_m?bPo-?*ZGo{hTHTo zFYEsHX*fJ^=fgPEP+qT#;hSHaH40fp*Z@+I6e*GHefUf3!`m4(^CN)m0f9Zl2g}>N zw&;&qpo8y9l|QbofhXI0_umMw_my36+N5kUB*eYUL+^JCqjBW*m;LE=u_S-AlbHkZ zQ~o!e$P)$Fm|(2eyW;IWS-(yk)y*L%}dS@MqX+ua{q3Ji_1Y z^Py>8FGH%4P7-~;rhE7KekIjgKSmyB?pR!ZW~Z?imYk376m+2GWNS{w%U+EV(xYYD z-d~131aCk6wIwJp+l5%!R1r9Smx3+l^d7=g=PL41#XekOsLwPz`!3Rtl2p+F{Mw z&?%DxAj{_NPIA!~Z?_Fz1{Y~l&n|v85X&7BEK1R-u1p=}Tf(*&VDamz9Zr0;ClXxe z<~iZV+tKO?%IaIOK=l}nLLJnxo(htr8zyEMU7UgrY{l^MEND&$@w#+T1Fhm!A=f3m zqd=k|#2%mkFgznGz)a=fNI2=eFTR0C8Jf6tp}(oPi+UN~AYt|}m5uc7=T01RBB78# zDalPk_9a}bnL0P4qJIH3>y~Q=tM}i9(>664o2+!1qb3d7C0WtICET_{4}3ha$6JVq z{%)O35UleTZv0FHtEp9+WoI97-uC9m|Df&Q@zvlaQ*-kju{r!(5KBni9oFCG3QLZ) z%8k#%3om<9@#(=u(^Z~5PW#EIA2k{s%3W@va z(>yl&qV^;%r%JF(dXnLAg%thKaI^jmJXBKYF}|N-qF+I8hGceQHaWxw^Um*cEF|!d z3Y@V+*j(Az7VFnT(h?Vt-Z(^Iivh!ZbRt{0s9CeN3gCPaY&1#pBi~tF_cC5tU4Kk0 zcZ#lQXVR~E77=d5oO${BG;8H|Au$8qCVUxgHKF^8u>*PEfpK$kDa!tE0t`@m?%RBX zgwH&l_@BNYzjWw5JH-T#E|j7DQTk$sf5%%CuSb;JDJ*ZS4b$1VH?+C?Sjh^UVf-F= z(UbhG1^-J!8kK9701aM}p{&Z#?iDL>^3hdHnT1V#Scvz^2b$WdcX*EcnsuIwHeShP zxp6kL*yuLdWt&`fQ>4BWbR=G5P2p5q=2T92vfnAGLXiW&cp% z9fvQH4P0w(1+6jWo%}L`0sfZKc=imO6Qrf;?{Hv6un_u$pwy2ER5yj$EGzIDF-dEx zeUr&QiYB>|`h*{ylZ45iKH&tbx?akd!obV-4i;`oN-vk|p0AYa7XC#+HE_2{+b&E} z^R~6-+j1fkw_d1d*lFcp%(uq%BjN`aJR*w>>wyy8v2GtE6{6fX7?P8L7nIvkf zFf;rmA4tpZBj#$f$RWD3UPX2Z+*z}_LR39^2$=4E>_khk)I*}r6D=>|*2(hsL{2YA zqBP*T$lcBx(V^eRy$+OxP_%WlPCvY@cz!Ql(Y9^e!H?fQU>r~?272c*ZF!Nl{H$qo zc+298b=x~sg8Ep#Y4F+AdsdhbLJ_Q^QM4H@YmH+{rKp1%u+NdZaR?RFCsM|M_Eto< z$}dAtJ!fWpYuz8TDe*|72Yj!#e5?TnWd)$PveIUTngW}{Oi19((+RbCo?6bN+ONJT zGw9YjBPsH+V|R-N{nlRiN<0suWm9_B0gGap8eOraz&q1y;%HO!j$zc#SUB*>qzhCW z*zayJJg91o_C`@;Nug>Nw^9+#3otrS^sBFv|)={fV| zvjq#&xBBd?zpX@f{ol^F6}^n4F@u%LsKS&|IwyBkt-Zk)uJ!xGB19?)mTild zjAvWn4w&w5JKL4sM{tIwQk;BYIL^f9A`#!w zV0ukS22VH!pP;F=g=XNGt)n(u;~YE=78n|w_&JVoyQGUsd@;~9D4-MWVgdrEqW|&IlU+`t!eDD6hXBPWJ8&mTv6-`%&2cWt5pM(A>$^(c-@h5B+aU zN&f$ao0+~=zm681|Ah|h`u|mi`u|AhYH1C$bOZj2{@+FRf5?S@rTgb%czyoEnEzDs zKjr=hJ)8Y&9sU;X|1BH-QNvQ0l>g%^Io<2S`hUg7)Y06=$<>X`!W8&W7jVEDf{@Vr zo5TV3%<#QuMRu~@kK6nXuS2QKK>Q%RI-+)}%;Ud^{73WuxkxipM|)d0;Qv(QzgK?u zzbz8u|CN_aXp()#4t+U9xqWZ1Uk)tc$~NPgq( zBX~Nu*yQbbg1+W*e!W@MaN&CMau>N}k*6f>-(FuRl;pPYm_)hLELoN*7w$_plxlCB zN%;KRMeob+r_jJUj}u47%<|8?MB3#f+(rAFl@?ysc{aCC7)Ifixq&go4=A(8@!2fg zn2xQP&q-kD&G3zFu{s{$4uo(^4cEPwlQ3uc{t)QRSc+*3AX_(X8VBTNnLPpCPA zIk|OiQR~^KCV+Nvd0KVGgA95?E#`U{!t!l|7yCO8HP_Pn`qp%vw%DiV^0Ij`Ql0(a zHT#DH1(SuXn#lN~0WXx7^_R;F9k`e_|B|hvME$gEF13Z=a`S=&eLCLh>L2%yg95^L z1I|gDlXQ{DHN5O-Kd+1V+~Tq|2JL>)wsf;g*Jtf-u((g(^@_v!w^Imm!W9M}eH6S) zVsd_{QJv2hel}KD%pg#_0ia}Wb|7KZKGeKS3P4or>hvRZ!i8G_nyS*$;B*4W*upG_ z*jTg54co;}M#y=ixJ+RiP z{-8(Gv~TiWCiGM$n=eA&n0)Lv4giqq`!Y$k(iCLC1BH(lFg2`-p+Z5Y>r_K3rXNC3 z0}DCSR)ihuO~+mSfbhk`GI~Phg~Luy4&?d1S2=G~AEgjU$FnYC=n6LT^aA`q2E-R9!nR9Ft(v!+Z!Xi#=Io_&|1 zTee=QJKW~p&x|T3s_-STNxrR`!9+uDjW2jsC9Cz}P#S5t5iy zY4JxFB3<8WcXivrtm2_h^PCIi$(xsoe*}Px88x#SvIFlp6ng} ztOzG_6qP9V9bur88Rmt@6@YrH@kfFGt-Bd+?dVhyhZn-NB1cXIF(AYBr&Ayu#NW@{60CXG#&P`+ zwC6u>ILS#VDL6M;;%`il`(YJDyNzBG&y@t5j)Uw>TT&#wBiE%v($Hmr2C(*Lb-C8_ zcqOaChCg*r?QcL9-_n%ECnm3=%E*qQYi=n5LMcn1!14Obimb3800 zUkStDXnO>W+%sr2H1`B$r`3F>0krbrT-TE~nC)##XmFAPUx|}#qZM? z0q&*`v+8}9()!1!@_N>?4^8*Q$ze(>jUx*~Og~@L?Yzpnm!0d7qgHhnpmho?DPGa6 z=rewHv(JCRwd3JV-F{Qs@ixLJky7sbJh%14>XN~*tXbkNe*BTvAxknq<6_%r;=8kc zFj1YtHX_$3FT3*Im$BVt-DGV&oKF4t<{OmM7 z;Py5eP{mK9q5^UeTl;`3eeyF1Trvu^kFVWGB5Xi0Fqa01Gwq$V7m*8QNphCYc*5uF z)?a&75lj_-v4sqfzr$4tQ)_Oq&{BU^sW5Ep?6a&s=|Km5T7Dj)(Qfe>O(nWGGV|^b zV_FU#=(+Ap=q^K>H*Rr^HG$2M5uXKb&fh3Di)B~#t*D*rLvay)8ewU~K|Wx=apO&v zs54HUif*;`V5M3H*@Tu53l;VNDwqoIkKf(SFO{*7LBc_>AI4Z_q1qxDC#nR zczhnjaPfIJD{j&X#~g;zuM+J?nAZx+@f4cBno1%E3`ct?nh1CszN7?bLM!kBkL*gp zmN&s|km?;mjW+O_NQuRe*`Iy>ra(ZTWR$!A3+k(dZ>jJFNyAW18`_9lZ*BJ*H)5Ix zCPQH8T72T;7{tT7Ym7&+tV~*%c}vx_{M(4xpET4^dU7HSD7QNtIS6#3nRA(l{p>+J zE-4=*9tAp8sp08-wtwXMYF`=|=W2TlKv>-e(vy&iVtfxVN}RbUC(OUD<<;a8Db{@y z_`MJY(elh4yI2@MFPk)AXQ=Ac*K}kL;B4Pz(N&;^pFqmdcpsQEDH^ zEW?eheep&CYMraKf7-#y5aw8ap<8YdO9MF`cg2O(}GRw4SJuP#Xoa zlaiI{&e|n20U9kR6Gl$gn8RnYoLI7WOYS^bq@(VvhT^aheo`XO#Qyx&%VoX8PUQzk zoZ4cy8k4SG78@QmY#4B!RjBBK5_)6E76&ZYe*q;OcAnSSwGj2L3d^*ah(q1F`L|Ot zF+*2df3SX9Yha)Fc^e)ao)ILCAc=R~&&!|+X=<-$Qwel&US+uM+v;K8+k5x< zGh(V@MP+}-bf*c9p6gMehf~S<4Rk&Yd*j;OXJ*L_`(~IP1o*DHT*BldPv5q1uTN#{I8y_ z+nbnKe4lV5M&a3Tum!O08;|Wa=uL8fMb6i3+C4c^)lA^?TBLNgTA3AZr9Mt(t|S1N zc>qX7>axkc8B>UOFlsont8DmBaer zuiBU_jlgH&Ku|L5l_0N?A8?%2)#S6#-ujqF-)<-a%}5)5MC50SF`n1V?&&pa+sln| zXeaT>O_8vV?yqa{*N64hb4*{d8Gj3vMsS>|wkDr(FRWR`%a_m_^^FD4RHy3aaF9%{&(k==P}pztCM;4o^OnCu=|fkM~u&& zfMKQ;j-Rx@Ustd$g8y3eWBjZ>IIu_;XayepB<7oL(a_iU>n-XB^yuC0pPk8NUIq%= z0Nn=od!iLtjK7kHp*T;D$_cqG?vQwI-CiM7Rth^bDviX79e0o2-d%;}2a%@}(G8d} zv*NQB><_|lvV;Yb27a#&pD7EAP%t`XDBpOT$FO|xr`@8#ezVhBDzI=Ldoh~!)`xF< z^2Td)gkngS&@M6Iv%J$TUxWYoNN=SzpD^EhW2jl%Wa~sOkG^+Qi>B(u0j@Q^53xH4 z=hf3u?-ZoJ-ds$F$RQCGunHJ6*`$#qW;l8RmFw1tbk5=z9MY@vk}|Z1F*WI7r8WlQ zHP5DArG5RM6K$If0^L$mziGLT{&D>dcgFicf*PKzx03ldQ~g4qrbi+?d)^O#_QF|a zUf{@9t7Ojnz}Ks%nI4~c-tJK5qt($tU9{0P(@m`X!)^v%@5)g1Y~`Rgoq+v=JT<%` zX7H8?6tYTpW%|qzF@4Ob(Gc0nhywrj2A=A5=_)yrY`-RyUNm~Cw}xv!hd#E-b&Q-ckC;nV+BdKv z*qpR1{x%=|2>Tm&g8ipKT)u5)FXnzKz|P04Zz0BCtYPZ{75*&xZFdTYBbPVKvZP^Vr4ON`FE2^bZgO)G*?V`km}h1>ZsQsPX(vdBuCrr{ScSh z<8kSOKv;muW%F0jFcjbBhRC+Q+}}01ARUIMk=ANteGp!rsz82^-cr0S>|#QoNYA#_ z2R~sRp{{pcHcyHflycNwLiqbbNxN&|{zZh66v7*`4(>c^LMrSx-Keut?|*o|iz;%g zKJ`c6Z%$xU8+Yh}*_krL0c$|#5(fM#pTJ>IM@yQdb=FzXZ-I=dNoVg&Ee-Ee8F3Jv z8t$iWw=7t6*l$#XLXChpE5OR2pwyO>Tp&Ji#8sl>S-@drTdSoFl;)T*oEzSF(ZMlz zG7{Z(e4NhNrFMm~H9nw%dTrSCzPS4b!kY~_NlqMW`D`)jI0e2X9_tC}+$tWM7(Myz zYbO8^tHuF%e1bp(C-30*VgtS1%AfUE0_&Hzrf*dWq7)r|;LH4Jed}|TP>}tajUj>W zUlY5FUj0pyN9*6j;rW3LfWA?kJB{ylZa29}ct(U763NwDkkz53E~o1kes=|~fa1+m z#bn+ooy+OlsCM6WICsLjba@xp#+xGL+=()SYXkB^Zg(TzNn#~QHB1mDCf$FUkW@0nr!>Z(fk#7(5)87j?o(-w+`1goe*bYF5v0x?F-WfF zow#=KINH5XSRX0@IMt-;v^E}K|Km@wRM>$>rpfxB3gJaePdxTeX?uvFz%(@Z>{)VZ z@pWi#BP=>?eSxYnh%Ln8?FKXMUeBRWsU^2^ZpqZm`?`boFx$cHSBQeb>)~LZX6x_g zoLhD37-p=e&&w3%+YTZJ9r&z-uE$D{OGvSsi(_8PrZwz?W+1rdi@bjT#kG zK388yg5Do)3~k*@s}b_q?0J8HD~gb7on*)&iJ7uW(WZd)p`EZl;pew~2XiMmrO~$~ zRj3S(m5Y^ZV#Ci~A`8dGZL@))dGpEVg6s(07ulIS&N06S=k#1urOG*8@N2ZIvYy_A zo((3|n7m@k4Ll+acJb24?5#Icwmt?*O`jIw6T@qA?BXXvZcdbigGEKWWac~QvBTn& zSnuYnXS>HaZPB~C?MkhLsRrWHam>K2^E6d?^#q6FSL{4tSzU?WbE#EoI2Ss|SM1o# z8&~B-hD7czeRVNMJ^1z0uyiTNiSm6lrW>oYj@>Zm$I=q#V!P3))Z7A&{u_lVr`I6% z>5|34#xiC|rk-Bx_(biQwXyMTIb@m~O>N>f#<1neo6jr#*P`s=?x&~BA5fY{5eD!+ zUQbo?^`0-~xmO3&x5syQhS5OrH8HeFgh?X|4{t@4hiBbG9ykOWu`=~1l=^bhFERkZ z%J(71Wu%|d1va$p*GvR7)G1HHPJ*qOkh9m+6$8!R>NJ55JqxLJeLz;@2j5j_slSTO zZ8nG$-%Tm6?d82;_QAvSFB$cl%p{*o%pbRunQhCryjq$&uJ!@lu(kN^+3Eh`nT5Ch z#L?qB86y3(NJ@qTVKtUWl}1qXytqY+iqAl-K&1Sb;CJHsdt?6Gqdg}Kz+0rRZddOz zlH7XA5{6gk;I~Kk{#+??HRRfDfbnu!D>KcL4(xxvw}GfBFD>EV6`-DFZN0J3PFK>Xb-S)$))?$d59DWK`V{aLEPwV<8S;p(F}$@-t-etVIssN^N4I6-lZ zHt%iCz~8ltU(S0=!(NM_c4M)=nODfn#x0HiDRI{wL0T;f{0O5r(Ty5{STQjPKUFS1 z2}2gODtjj;X9Y0qpC^c^A^Dz+eq3<|Dh7hWnig6so86c(B)zr3@}vSf6s&ASJ6h@w zUZ%JP1)C{`NgA27y4A3U1nAp|h zt(Fr8FFyHk4pkgr$ieEL$b-Gze+A&*zg({77s!42Hl!>Thv7RsZ`ImYiobaDJggM{ zBrEy(D^b55^saU!8Tm<5x_u>$-C3)oh=61Un7!N#{OLcjhV+UoBxA1)+APuZtmaT6 z1wHF(WxWOe@|~Yh&zp_+6+gg#7A)9|n-w2+FPp@&8D#G;C!$6jv|Mn*MzPhF`Z5l20F9-pd&pp}6^;YeNonJ>l1rzb2)#vr(53R2I^D1fttfERi zOk$b!CH=En$5rIDj%M!>+0w0aJ|q97Pf(iiceH;k%U98B<)wcW1h-{!J@1_b&p>Gy zRTwf(?i-wiC<&ux{nCGZ-LElFJJxy$YMz62(P zz2Lkei%r5$371bs`;$QpWw_y#$?wl6boN)5rYS`Fk5q*ft~;g%rK=Djn3ZYeoWR&iih-rE+tCJMef-aFK?5iw?r|fl$?qIt z<%``86pK%%e@;u3AmYXO1p6dH23nSYWAEL|&T>b&i>SDw{emO(g4`B?^wNB7bmlXQ zrf96!fWbeA`}yscRu{#dt)g63NNzETUmq^E8BRK4eAG-^Y}HbyEkR?^TJc>=E+KO3 z+@Hk_O4(ROO#yWcC5OF8!H4!6Z#8G0>tsAYh2}yMCy_Orp|)+t<&sMd-&5WKgu@L@bEfiPGr zi5LU*Ht|Ov6Rnr_84$|uZS?guAG}dnR}Y-XTUi#V>JgdHW>tdLlP_ieT2^3aQsDgH z$}sfBaT4Dzt`?ej*FZ4L(U%#cPZe-scGHY|7h2pteS5w8Posbw`RYxtZIK(KoyqfN zp&4HXQCwJkoZU_K*jJ%@Ax#u-ukY$ka*JiYd*%?=I-|w0`rh^NKrN&1t!)fr({ONT z>7}+d`fGQ6g4jz-Jx0I8vAvJ2x5bf@z(Qzq*<02Ab7>~aF{#K|mEgwS`Ky+~SDq&@ zRX`U4zW3k+h=e@w$=a^gsNO9#i?EbH%vSO>2P4(T{gf~#bNFDee888beexZ>_2fr@ zfc$Kcg}0c#%a7~xgHayA8P?I75LOd1iYPfU@hZ-qlH(r+r%lR3<`ukNi!}_jEU&Es z1pRqK;?GM_-x!wa*IzK*xmK-`-tLxO;-nFFwPPYd zmVa9S;slw90WP%b;?$=l1x(EMJHBU3o8QpWQ&MLAg`dqF&KbL`+w*FQ_QdWKhaK!L zVb4@~M~^CLH&@phJlKl3Sx;q2e>yb99Pnecw_iK<)mM9!{{%>X+m@t(o|{+ru5TVR zAoBuGA~zmJ!MQq&aYxqU!j65_e2VvrdyXyjUl!Ox$VuD&V_fwv>cepj` zi&&n)2e^EERSYYq`P{WMZ118IAzYmRi3WS|B{mG-4(d_AzRNDdh=)St8vgXP3j_@ zg|=l0!+Ve)J}&PUWi!jR{RElU%8KkZ!VUEW`_21qh^>d2WxMdPHi6BM954HW?v?NB z4$#^dL!P8t#cM$fIbHVxtUP|}y@|4(fZIO1AAwR&QV*Vs2!)378@3a-oXQbkiPPLi z1ikVLY`#YJ(W-0Y6D9|@J<;v$6Re<7433Ov7bzRxzZBon+r1tdTK!p*G?E2Og-reM z(9t4r{X2Up1|$?qJ~J-9k1C4xObNP z-Wj6XEw4ROPEB=wUB{|3gwMxn9WX7T#kxt@ZfYBq5Y8p%dUW$p4ynP6XeEu#KEr_c z6fX%m&<$(Y9;cm+II@zys%CtumaQs}_0`Fe#|spDH<1Nzcf1e^`Cc2XQ3LF`QADd@ zH7MTn{3PqHs~H^NboFUZLT$YQ;3#e9T9M=I>pq{z?NKV}J7$=6IJ_}hT15R)6vIG^ zvNW@*=q`6nPOese5~0q`R=C*QK8eT6XN_|%bj=1BC&YacVQ5lW^kqBYpPM&Noukrzg5I<_CGPBXV26uXCt+%?b`iUY^hhKxaP zw!A2hu}@Z(v%)lauhoHTlbcJc;t0J(6OG8qP36CO`?l9wzIwgxSTq9m_PZPl(+ocz zXzQpctzycCOmJL)XeVo<|Es4~Q90GLWUoN4gJ{{vId`2B?FvE)4@G%&(n+EKwX4|~ zJjUxDfp~IJZ_bi`$%4iVY_Zj%%5>z6b+Te2VS3tBY64Sdf!}Bz-^;BbYPAzVZ6d)) z%>x!ca8;@FYjk7@2KBsHNdI^)Uj6E;&W|;n^O8fS5lgLo_H2g=gUlY=ZvD1NPj`RC zDFYt-gctlh47s={+NOftAG-px4Z!G?8!?RNN%&6X=>DE#z4QA=t%&mkZ%%v-z<$D9 zVo}>wnEnNRxKw0pFIR0OSAXZ9LLH-g*PNfUzHPwHcg0)X(D9olDd9CQI#$6UnUPx0 zcCq!r$^E;Z&#vN{yQ@)8QWNT*uK8Z%Bz#YckD5s}>_xzoQC{b17|6hpdb;;D*t=n>M#{UauVZ}g#L!VWip2; z1RNLI81T?=Xi?q-6t+CTf!vPHU5>qLp+hHWgY6g0QJ2Vc(bN}$Xo~FD_6Q1LZb_nU z*sywWt^jM_T}|ha>b?XGYoU*x$>c4nJ$JFAZ1e3WwziXlg6UZUF5B;+Hli^aME;*W zo5C}|u4>hI8Y{t?>>{%nW9N1o2cygn>gr@Kjog@22h3=;n(D#r zzB=shtFqtA4=)l7$bl_*S)gCI2e~wy^n7I0|U?M^#;N%pdm(x4SVV zSfSY4+osCm;;JkBe#fAD1?xr2h23{ZdmT@8WK(T$- z+?X*_`O}%)1a`;Uoo7t+%cnRXX{8Yh5W~3Y5WeAdD{1tT!bk;ryuv1;Q|-WC9w!cQ zZPmvm9B>D4QqKVvYRN9=bmM0iuhiP>vF}|0xm!G~%g96s%-)1^QGlI=b}Gs4uO4^y zs`irTEI(akwb7@?{hGfTF5m1`N*90sl>Ff(0Vvo#QjPIIVFBQc71e2SBAlKB|>IhqsN@LoH`(lF^HBsdr{>&3JpNqyhR8^3OJB9|L(@`c__%199qyNRVGM3C z>&K(0-w9PA<3Jfy8)oe(WmwzsG)Os<3jA1Fc=lidq1jxI@EsE>_BT+C+vx(led$hn z*LC2unqklsoUWB;c0Pv6h-ReVfM#6nWis>GG$bVo%1co>;nLD}@ViA2Q0N*QcgAGS zTa)#yfhV$2)R?VQAAu;wQdcjUHSE|k@d3}BDv$H3>3V3z4GeN*fEBQOG)v3r*t^_X zl8RY~GPDeID0sNR_aYZ4zFzYOp7~`i)kh}u;@V!TZrG2a6R;0KwNZF4NC2 zi{&;up%%{+Ii@Qz!2W&WU8n^M;XFdwJ_@`zbCAFrb{uTay*3g4?oNY;OMoh1aQ}47 zN6Bf3g(%8-NPs zv7B`Sp;bY8t?;t$Y29l7nddv=AM0dodQYu`aR&nMr~oHH){vo@V^8&EpDkZ9ep{Pp zQBcQ;0rO?EDEA%b%Ua$LBcC04#Ul7MlwJ>d`jIozl=nykZ*LlS+C^dsG$#3CJ#_ub zCl-P8myYe)4ipWgdAZO=Cpb~&7t=R? z;Ms4T4Lb#wmFuD9J@b?cGzqJFqv7c4x9#~IpSLsoS0pTkZHtUHe}+9ToyCF3h87&v zc3b#Is+Cm@1qgV_cstrMj=^+nE>*Cb&`x%Akv1zo*tI%uHI5xrL=hDcP?MrEzA1OHAZ$aKra`wPv%T>m~%A+VJpXt?22C{We2He@o|!h|(a-4}O6R8mUB!8mIf@ zQ8s2_r!y6tp*U81$b1aL?E$8`z_z90pWo%qB2PGV!FMmBi^b4(l<*T9$N3G)ToJ_9hk5VL9iD}6H8L@oQ+ zS3piB+$KihUo6t%`0)aLnQeR49%Sg0re2ew<0S=Jb*+JD4R0XA%S(UAb*)J8cC2sn z8gAj1RWiT6=UUV)+q3G=h!B2JysRHXs`nG;yWP=5XE!h^SoY=qqVggwe_~F!L1#bcc1|iEHCaVi5)DQ&iY+C$FXe05YXaE|5g@S+r|1`5^s>kI#V3CUq`{n z3(M(qdt7YnRrl6&PJ>RlH;Ky@@ZpMvM)I7&qdXZhQ2ga1)bvokl*F zI8DTvWJK(4_qkYhp~gHqWScm};+f$f0QDkVDUb=njk@PRZ0QEPKOng2c*P?wQIo=f zzb4Q!=stfY<%j4{Lg=eKf#L#-41dnL`eaZ3C^$XOJ~{htfS8lRulis~l)>a=U#cny zEc4(v0EdW~=Y3sJP?8$`$vw(}#dRZEZh_wd^w&t#OWM83&}yR*U66g-J#fMtO^@YB zkGH@=39_VP$=zNNU;W8+!_~|A2>ODHYIGNe5Mr#~IUPn-NyYWHx4xJ>% zT=qD++gehk2|;^GG({pga_-3u%8$Nv#@*f(q4Mw%bsV6svD+?mb% zC~mXb0r`V^;H?w1=9HuuX9Yw%j$u!sWEAyP^y!?@<~Ii z^-z+&oTJsyDM>Xsj0K;cofeV)^ToE&{A~mMvWepkUuw_A_!XYwupMzDDEPKO6Qe!r z#gd!fzA2Yy3gu3)WDG;h{>_nt8{5w zC}|1!XTde`>{)j9Xg(%-PsB<@LanRDU4uy_hOt|J@KLM5y)qSa<;yh~*POi5669wV z*rLD1B*<Bb_0m?^dr@T*YDc99r09t|`)mpOCn`$~}&ZV0e4q#wS=St*)=@c;7{} z8V%DaCYYkHz23(rNuP5yk;GQGhIzkW>OY(eiNbePdh)-W+%1oqCMcW5Fj3}>%P_8Y zzI)rPhbarI5j~8V0u?56WzT3WJf6dw?DszT>7c3d8V$>f-?GgHY@(k4wy+W4%{tok zB(Y_f5P}jp?{3=ruPQ(CPxWi%=(=tB^>zJd1L=`fk~2e^)$J&R0Ca2KGNVHUc2~_C zov8PMiSj!{ zIgZz7Q_aIzFgrlvi*KHevu4J37dhFXipQo%g|Z~Wfxg5AmVCfKL3eb(n6c7_5AA3e z@n~Ib5(oHdD~R?>gLmPpR>J8YBaD=WY!5tbqo;Ut>PGw zd@Vd1bYeRRN;ZD#z2D(G;DUd1X5N((koGOsPl%DQcyoPU=l2C~zi z-)ngUTS#3WB_9hUF(##5m)j&6?kWiT)lE{rqiM~a^VPFGMo*7ExaL`YD4@Yg@KgF| zhJw%$Y$BYgWY}zLLlBin^bKTm)E>q4wyIUcM*x>0(4C*wXN9FCxkz%DD?6iOjHQ-{b;CpG~{}E zzP(CUhB(mI>mI{P8{>XX!OtuXz==-wC7ELtEsc^%%0nXAoh8u#c zVGoNsi}v7^<$bGJDPlc3QQ-4akEsbw4edo}$z-+x3c_FGhK^wBvut{-yQ6Rwt}MEB z=o9c>ZEG~(nUAGlU%5rCBlgICp(j+WQl%Hu=yL7w*XWmUdh=DUpLIrsdP5&i3Pnz7Cxd;l;Mb4&Axu1F=0}m zpHhiWjk}E}fCt9kge{fchU5-E2;Vt@>$$S>hd_I|qs}K9%#XY4;y$j9pH~luNZ!aE z5z92wP4<2Ctgq7r`X^=b3IDx$KF4g6JBSEH^B!id)=3XwH2X4&6`<1IlL&S#@lD*& zjhQ+~NiwNUrL=bBG7!37@z3=5368HQpUcruX-%X{@L11g9IS(C2xnSzHYQ@nDXxRE zr%Mgh9DPlm4FUOk+X0xL3+ZgP*_?Wh3-<`y@rC?`p7ZwvLJP*6Pra*eqJ!l8k~zoK zLW>~#(qtLzRbN+pwIS?FvM=LB3u(WL&#g@KgG;U39yYgtCh8nCC!>Qv1I?{ z*qRV!2?Ik5%$#QRXEOaMPQNmJx)^QzGdb?QkaeXDAHg6`hyUF*O^baJp?K?(7d?mv z-_ccww-BqVJVte-G_=0o9Ava$>rR8j?NQ?$|uD4P`-E|qpN<6zP$E%r6| z(P3e=xU>dSM@gg5iV|`;5RbkHc>Ne!t1%e%0us+N0UZq+ zpd)%aQPrCx0yZHcnEvhJz%^g}abYIcK}qu03_(tnsfkj2f~2>19p+e2D{OG88`Pz@ zfz?wYB6^Zl^Jmh;O{Nu-mW1Ide1}u1lS6xnMZP85^;!P)X1l`s$(+- zjxKBM)C8+lOV#nD?QDEGu^G^s8>Fo6G7xzHwSK<4T@2XXj%ni=NQv|FPXh<?;1Hpm?hoHgT-3AG60fM``Cb&y*cX#*TKFjmgR{i(u?uWN(tC}jHyQpdUo_l`h zHr>Nvo>wSVP*RIRFlW>N<8srxc3dUha5#k7@30_FA**d0=`mX*v}4zQcj+3kmR${M z0V6)Yz;<;g=26DsJ@+P@qd9^5!o{dn4Od%*;E zlC#)%?LMDIzi$9j@U9Jz_u_jMXjYCf#cP*2{jia_#a|Z0X zrtP+hFR8qeX2U@HM$Cb4(ok1&HY5yQ`&bi#G}Df5Bw?rDzII&&maZ`g-E0tfyFazo zDBVAtM3-54HRn2A>UAY?SS6eYshu|v8^fmcHY=hl$V_?Z!lG)3KwV{lLulpgPYJoo zYhlm=uUma3q0-h!toE2)B~Uz?m5h+R62n+N`z}X#qP}I?$Xi&O9uTsnF0)cWdt2I& z=|zno*Zcbsfq=W6m>A23mv&uaoB|S^o@~WI@gr{+HFYYx6Gse%X5j%Rf9V+8UyqtCH!O)y#c2mlaOma@J;?(yo zkfx~;83CNRQeVV9XDW5r+#V`gu}@cHqv#fYrQFQUenBU49*%X4t;Oo{t&~1tIChAR zcyJ+2!AXB7r{F~~UB8}-vR@=?@`>`#s@SKl=f{`f<*MM4e>H1tn`s}G6F9|hJnB3< zio3KjiAJAXn|}<+F;0|ICfVbq8+pY!wl15jn;yTii$P&`{Nj_O?bJ6lfqa5`J^jr- zh@W&rMICl+BW_dTiR>xmTDJ6=xQ;2SbzW(LOq=vQZllk8HJ8nYJ5w&#p#EpCM~VfS zX>TGNrh!!sx0owMB|02L-zjV!RFk*G&1(OcrJa33y;{c;|FAS=jr?VFIq|CJ$--*z zT*(#&BSTkXcdxa@Gw@Pg=9RiWcBCk6EtaD_8|_`aF!-z&bhDfkK{N17(8Vdyr})X0 zeGZ(Dd@D&*P1$N~H5j{-gp%oU?YfXES+b6cFO!pAzh*M{iK;doLx#cg<@4Fdxa^k> zo&zj`1n-}9r(+eh5&U=cVQqX;WMsbTiEr1wNh-@vhI8`B0^ZvD2A{yoFZg99KLec( zLdbkwt5{GBKjEKe(PfZhxY{VxzGwD)9J9aj$V&CWU@kb(eqd~o_8mp^_q&g_f6k(I zzk1TBi(^+?H!oh~FS=Y!95+=9wH54b5MEz-Ia9mp*{Q!BNq4>`>8~*DMy_nMWic|S z*KUtkiDQ|0*zv8@@|lBPFH)$ah#1?phK9n!qspOR{Y%LIm7e1|OEb6Z1Og766PJI^V3+;JZ zBe5O(tC<@*OV7wpQz!zf?m?$ba|#iCYkY>PiZ3QM+xWqrr7^gI&uQHEu61x79ND~0 zOs!_!rPkgWbBXfUPc4=A_euIqHqv9VHB{WHoUWrc8iEN@PbhIcP4tGr?ZVCwPRlKP zkz~_kE4SzM%d_I*EG6QHPd(o<1{R7|tXzp}_&U@zbj|xGF@L8swGFxw;g&lj_(!tH@5cq;51{41>E`3MJd9j}5cDhe`u=`tC z@iAZO+InN!8)e0fif#1!Mye3Pry00N8Lv{$m7_s{CM zmx~(yOPcWmJFdAgb0ton0<8N@_tuiFxN_OmEhI>BwHIcdeTq0C!HXZg) zrj2u~c4Dh8Mz$39rOd6-(>MCQ-92C$!r4Wt|6LY&r=D^?%_^)9p>ND*Y9QVBH@nZ? z&+QydlI3#}{~CJq3@I+nb8a5y2xVK2U48`z4xR6|u1znh1_rICYrlzaTKd6S0XPk> zBUG5J#t@CQ4E3tgrhIU$rPkLA;mrgy<3EmT!jBYZh#p1YlyTwZdTw2ETT9lJxVJZN z*uXucLsV!=zh!vs9g~8|>Cbo8RfUDSA^i3+Zc>nsXFKpWvu8YIca8i^oLru==KDdI zdQXtM;YQ2K%jZm4^U{n!(&mgy{pHD}mzx=u;UN;MHq37oO)6-X-fXHyHiI53J@R_p zdBIFq=}iJ_F7B_HK407x(9XPP1a!{4&*IkhG&hIKQrJ&AXiLiRu{m#j%*?)Y8L4RG zer(W?I#StppbsMJQj0$6+p;x2C782mwd60^D^eVjZK`;^oHp@LfoI3r$uT-?LdYxP ztQVLO)VoW5^c{EN*js0Ig1A(;+53o1P1!JUZchFxM8e6MXFdJX{O>RTTai`Eq0g=2 z>DMy?aatM*5jFgay4`mpE~{PS)$$n@EPE^U2C!a#Q}z9PA2svS7$)IU(#g|*&nw1- zC!rzbVhIZcMNLC}EX0BZJG+xkMN&GDlbDm6ZH>f%6KlIz$LKxvTeLbvw0NAC&XV?A z-jt`)rmCKthBDz3zDZHCd#(4qSUa)EU88KjG001;T8q5}oWF256GSVuDn_Y;EzpSwon zuU%Q%AXsD7`5&yAOi*@jx0!L9LqEMt|CRN35m^0}8;HSbLw7WrMJe5s$Ae#0gx_g> z$k7AxNye%i(#@Rz?w6ve5_8k`#27o0YGfu`a!gFG52M)O(8?bVwC-}1Zq8H=sYi|e z{XOIv4k?Q4b%j5UlFeM8={U8APnjSb$KxN?FK3lj`^hSOXL{Vikh?mbqVZ=ql50WJ zt6?*>b$y(a(wC9;83nrGbp6DwBj@q^pp#HfiV;dkmSqOrNARnaz=dptfVo}sT;gAE zMC_TChH>gH%d&I$L}(PMk3l+@$92~dtMy#a-@Mm2D{an@_!-`ca1bp`{8=hmCXRi@ zPjkWYWQYLNzxdAF4zlD8#&r#s=vb>6HRH1@mG(??5v@T8GSsHbKOAUGKM*V#2ntaY z1Z)Cv0FnT}08|2?A_B_+uq*=C1pnLDMxBs;bmIRSb%8(+9o%98FbL=$coKmnitPyi?Z6aWeU1%LuT0iXa-04M+y015yF zfC4}Ppa4(+C;$`y3IGLw0zd(v08juZ02BZU00n>oKmnitPyi?Z6aWeU1%LuT0iXa- z04M+y015yFfC4}Ppa4(+C;$`y3IGLw0zkq4k^+$Hf$0DA0vdqSVPXF-{ZgRU5YTW5 z=sE=`02BZU00n>oKmnitPyi?Z6aWeU1%LuT0iXa-04M+y015yFfC4}Ppa4(+C;$`y z3IGLw0zd(v08juZ02BZU00n>oKmnitPyi?Z6aWeU1%LuT0iXa-04M+y015yFfC4}P zpa4(+C;$`y3IGLw0zd(v08juZ02BZU00sX?LA5vn^ncBOL|?0-egZ9+fNn@YBQih% zpa4(+C;$`y3IGLw0zd(v08juZ02BZU00n>oKmnitPyi?Z6aWeU1%LuT0iXa-04M+y z015yFfC4}Ppa4(+C;$`y3IGLw0zd(v08juZ02BZU00n>oKmnitPyi?Z6aWeU1%LuT z0iXa-04M+y015yFfC4}Ppa4(+DEMDjkWI{w`Cl&}%pE(SfuNsIFz~4FSPeS;fDIrB zKqdeR00n>oKmnitPyi?Z6aWeU1%LuT0iXa-04M+y015yFfC4}Ppa4(+C;$`y3IGLw z0zd(v08juZ02BZU00n>oKmnitPyi?Z6aWeU1%LuT0iXa-04M+y015yFfC4}Ppa4(+ zC;$`y3jTkj!2d?{t1JvG@_+w64We^^Rr#Nd|N9He+jmzxYZn_6Cl*5sXCpfcTVoc( z??zT8w#IBMjwWW#CQi;QhSqjQR!%H$KQnP>`R`!3Z!bdx9ooaHfLCH_Z{GIIp+F$M z|Mv%D{qKW|+1l99Xd+V1P-Vyo=hs%WV4WUq*MrNoZ&c5#xCWL8dl4t9H1v3qx!5QvOP#B)z#TO|aOby_80F?CdjfS?lgrtF6$@ z^$Vm!&mYMcxk{8U)bI!4$U^Z@XXnJT<6;RdYggxBT+cv2b#zz;TshiD=s9!4#Pq(- z!N0>FyCyr~=vR$&8n9zU_02)6s~C%%d@y zIQuIho*-j()rd62`p5HyV3|%@RO1;K+V-xfjlW0RV-2JD;1_}S+LEJPF!RC<`aiM! zZ(_y+XG^W#V)*;*^Z#osdH*Mt8^(j*jZH+MBFQo%%&kdaU|^C*;juUVXCwn^dPm*a zy}uGuRN}tnC&hnDOpTAr-&ak2+fUj56`z%L44=pzhX-u|Z8aVl#%i!(EVe)am1Maz zUqAC%L>!e;6!8bd_CTG^r33B%F@hvVSQYyGfJr585a|9b$^O5NfREYQ&MYY1MKy8w z?w0OQf$s23687-tFI&v~7TllSqRj|y|oO_lbY3ANqi!_RFlxEl8W`9b^t!y_;6^jIq8L~_$YaD)%^S`?f-`JcElK;L- zwBIfBg!jAD{CTLt*v_OP-Z#8Oiaj?^V(cJ+JvS$ZZ9UqR_~5R&@c13L*Z7mnr744d z1dY=!t+rw3A@}QU!v}$i(mwO$Puyd?g>X;E0s-$llAiM`Cb)hSwZ~6}QX3ik+E~uW zl43OiN#j2q5EUU=?LT_{FeDMWlg^)}7e+>_z(PBiZ6ob*zc-p1pg%0)Wd=#(NZCXA z;2);6SI>m}P=sNH|E98rs`2i+FYig4t>8T@Loegvm!_AV#xa}v+}we`4P&Lm$M)`J zgYJ2jPEE6xMVjerorV?n;KyXhbO;eTYbP4}M!bRy2=p$BsB~puC-x&_kMx)j-E%GR z(5~cEvcIXo)S(x>n>p>@B-ew8cKV;RG?2KWJ$e0*Yl0*VNxnPld&F`_0_TRwSa`pI zoZkxwtSaZ3MZ@c(IwLBT7v5qgI_vY7s-mlZZuj<#GQfO}pw9Qu?=)D@;X$hjjgE9W z9j~<9!3$Zil!r@bJrCyndu`qRpuuuZu@y#?nb4=sZSH;MkuZur+ zE9y8Tw7+p8gAPFor-Hs|$D&Rn4P*+V1a9TnjJEg4KQ)pE>}BxsM2N`#$UM@K3_>Ad z>W?lTOioPvNYW~j+-X^hh^9CDJ73sPXGeN?nTB9>hC;9s+nN#^)hDqplOxF~k&{7B zm7j4Yf72GB;gXQ^XK3jsyQbo-dPwCpm<{wke9RDohs?lVg^~jP+fJxc4Q#b22bX_> z5U;&WT<8_Mmz+~^#-Z>RXzC$^3m zqguO~#z#I^3_RiXOje8q43B9M5>!(tZjdx~6es+nXFpbuSBH3h)%^$UoU8#u_E#Y> zgLj3m?H}Fu7W=F*fHKRdvTo+d3EncOeT6jFRt((E*MbrzkB?% zdpbMou_O5T8`)L3tm9*3|F@la^&|Ak{tfS|UIW^CuIc4~8s!cJ5l&2K1rX~=x;p}| zXx09ge_OEuQen;Yhyp23QMk8^5#^FR1m5WjndchYa*wDJBpz-H=A0H4t^}?f&9SjI zN+kw^u>!pZxaXtIBA%hBP^tr3C*bzZJU#9boddlZJu+(s8{dK{x+q$E=?D%F=H8<# zC5(eB& z*p_2~=PR!$-hmU;i_&~PgDB}3>*CA+OXdiINu*a~8U~*1a`!J1v^%T?!9tf9KF`YI zD1SncDRAQ^$j3GtvL+-$e9!~6en`kIFw4Z)ct;b^vYj^YXNi7m|A->5*Q1csS9qLi z`0L|9P^gco>+iFDrOfM&t{(D?)GtlP=c?k|zxPv!_Wza<;`R6m<4u6e2`NynsnG9U zFO1qRelmY?^|_vj9AkC*bnRf8sh%ie_~3yY5*y$hcwbRn)s}eje93~Hj$vXwa6|Wk z4)<=H4VQNO4FBY19;|e#+X6MoFb=W7LlD8Aj-QgV_Tlj8;(MvQRBs>Inu-0a%ZpGn^9-hiH) zk{?O3EKF858&I1iXnJteL^kH^WBN^g#La*BcThi%`H?MiLGB#%P>|*5DHW~u+n#oj z$#a*`Ea_CwP|vFr*Z#;o(xF3rMhORb#4P)k95^M@4~aODd<&{p#tzlN=S%(CUzrp3 zJ6;eqX_=$(Gj>LmPJdSeqex$<9#gzPWZ2x`SWsV}np?oCHpitt%#da<>)tZSl3U5o z1;f`k@pa`XqTfmV+hw*D?NQ@&sBnIuND*y%S&LwBFak8<Yq~xlqaPD3{s|RafeMSpXrxv;BZJCD)}(iXu)hX~CJ4g5PgLdeIS5?^N@ zHNFi$nL+v4=Jm2o)m6HS-@hN|qcYeFwPeKCBbp%59X5XaJmNhmov+`1;+hI*aiK&R zHa_;-qOaxt5nHM?yA;iOf6!4I83THRZkqS-LN>#3DEm{YZ?4ht^~U7;`s|%aIiVXN z*Y$qu7hDMr{$H{ZwjLE@Lxpnw{IOXS^*hnjA4w?Al6-P4n2P|JLd^&Kycqa+ zmz6dylJY&=PWRse$)n#T>0(G%5Y9n7^o!x5c{PZA{!U2K*ifU|OXT0SB>BJAWaJuf zZHPa_A)V!MKwg$5g6x*2rwZ5%O!$n$Iy&Z@N`Ev>ebp#3LU#z8?o zy2yOWaac>U>|S0^;1hXrjR<6?fZe6TMQ0Zm=JB(r2*eV11`)?srF7-Hed-b#wT*JE z0mbH@q;uJZ7o1*Cu7Aal_covPH|8WG5p%;I=eD$UVnX4Fg0J%P@DD#S9HkBC)2a6m zTyF-$T+8^q=2=Zz8a$H*iCgkSD)-D+(WDcpj|`No5}u~~y-oXjIQTLNDbdad%$Waj zmSJwxllwJcoWeRR<5|TzVtH7dgXMQvZ#gMX-gRsguMR(y4|O)ATW}5bz|9&VX2XrP zaALUuee&+sd<9XUo7~bOwAxc+Aa#YXba;vIy8Zj99N1Em-JN2fe3K={R!w)sC8YA9 z{X}4kzKGxwqcRKh_?1ZbAh{Ur+D2sJNKlgoiz^30TVS27tIzpNE$ho0QFA-hIcoKw z#IAsAb}Tgb*ReElI}svB%5;2m5lg}%!?y9>QS%xv6DJ2>)c7HYp(y(~H}D??ti8V= zcUcnQdt(2GuM`hVyZVV$jq68)3!(qm+pKJpR>Q{091mhEfI&Lw?!e*fbH@79Ye6Yjx=cOvi7`7RlJ_e&uX2U};S*Ut56w zlf5P?>?l(*LKxn`qvTLu-(We(8AxTS?|y)it}fsrDY)E$g1)Z0-hTl;)>XC$8^rL? zo_$QT&L7j+HBHr?BRYZ=3%kiiAlIk$FD+HWik< ztlB|zmed%u!96ERif~XADiI9h(Wz@amW1CYV=fM=ZjYNO^g_$Poro!6b zuFFuJol6ImF)o+9LrPW#iUSx~B5I?;TvKImNeWwAdzt#(v_58KdG~!Q6PFhjAvi7D za|_Gz(q1LKsWBlKno4Kk6t&-lJ-~r^31Od{kU`YxqWt}bG0GYJBG%lM!qyojzYXhj ziE4W%!o*12l~Np zs2AauA6}vm{Gavyhmk zU3E*_FWA;RdU&=RF|hY9O^$fN_e!FSB?#H)MTAXd+dS`{ro*N3Tow-}^}}DP6g(QT zrDk657?GKC{9uy&VWPg(D2tL-nklxk@Cp*`8t7(_ zR(Adfvx$$J4Td{#OX))ay?Eu=A*5kfJvbH!1gWqnf3aI7Nb*uHt>t@kr@nkJgMP$W z%QI|y_r%=1S$yP;mB(O8^@xwNUpBbg!sZWiWh7IKhxi_po3$DJa|}&>k~H`N#Qlw zh{G%`#o@0j$N#uH1?o-GR83ruM|X%iroQbq=BIhQbWOZ0CKs-x3chR|7;QIb6s5C4 zT3`fxq@L!2&xteCM}-!N8VhPYbzC~2+3bkfEKSj$7Ec6VVBUd5TfV1LO@ug&i2kT= zIeB39@-g<2O*{IMcal}-y^HwisY~0LMF&>sN(r6}CfjMl6WpjA@4ll%#5a7N{ddg! zEl4=r8aM(u`Sl4sUZPn92jB~ZLbyl!5b7W!_9xjS88nRQgdr*C^XcUGOZ67;=_m|S z&!@U+p0z>zFrVuEhG5a>V8zy8E7Q{W=JFBIEaJY&r|h4I;2RRnG}yK^L0>=ky-KYc zQ)Ocy2>$+|T~mB+#8Af2Q1Lnvxw4s47&q-~3pTo*Il_azqWwb3=iB&zdi~ztH^f0u z)HE1HQ^7B!{M3(RKECuhk6w;vx-(dH^%P~^vm@&f*7Cqa$eCRPU{!mPYtNz zo{_%OvB`z#o15Djt(!E-4K3m!yc`aVRo&H(;o90-d!-|CCT@5p96`(|_Shp)MRZ6Q}YFB!B zXt;#1%N$<{epTNpyO7OIpYl9trbaqS2dkM*XU)d^SUBb;C7x?bU$rP9c+4vMhY?&L zEj-Wrc#eO4NG_Rkfp1oCd#R8n(lfi`K3E>RcWd`mtLSVkJ$FG!X(b zN9?=7F7~7w8zp})f0iUa9<+_KdX5t2u8}wHBkVADqcai0K$8u60KE+0B{*J)<8tWC zD@0#ag@&ganwT`v-j5SgR~|N{?=+mG*%2z2# zrsZwzjPv-R)V*n9JWCkeGF~7i`mcQz zdAhPKRAN_kwq-OUU=_s<2z{2m1u;z!z&#FQmAHyR;$k8UPruLb6(ooyx12q;pq>r{ zedy8fR9CJgHT0GD6ydO-!T1I~Rq0_OVcN;pcyMb}s_d@kWM-4{DV|j-Lwh?zrmvmm zjndf%m3P=q)=a;P|H3Lf$X&0(&cZ=&T1`R4?(L94IcLMt{u~Ix_QRAlJRSMsnBgP% z65S%7U(jK}Q1qqmN5^fp#AgB7mN3KI8?VI{ZQXnuxli627^F_a!`SQl7Z&I-312Qx zO!WAl&beE2pxPd%gMZzHM`_#GUEBwrsnuYIr9OTyeARw;=<&@OBuW5H`)eque$##+ zMFW+#U1}?4xOTnxUKU>?F#D%*l&6|GA^`Aug3Ug#;n9r%O=s(zP9k9NJ87^TUM!6a6-D!i(W zdfaZ=+G9T+I!E!x+_ujPJ)UN^kEr;=XUR_55ml-Izd*i|h&pO1<@B|6I2iOv!YHO| zXfS=8b_TMjKI%bLZqepjw#oz&sSon24-E4ZMvHR=Kr+5hp0p?;Yj19>M9!u-XWS6| z5@rXzO7W67{yuIG2Bo>@9xdcclnohGw_G^oJc%u2zjMO7>JT|rFwrwI6`h`F>r?Jb&wD!H^0-`2<1 z>`D5Nf4B@>(LCRGqTnWyK##{sQ{{fbA6UblLsz?c6SL-{|HgHFIzh`J!ij6P6&uv| z;8?c{a)IzkDtyX^ToQY(MHiypDI4J+FKI^M!Zno4-{zgLpSGQ~t&Q>|z&^%_f?;T0 zu-__NVKZMz|HrXA#-h=>pWG1343J_jg49e{WQ5Ft(024H_b=fo2#I!m?4haf8k zi!|&B-{haX(4T}jX^3cj@*(i{kUZo*f^G*eqXTQw^J}a0+F(bN~U(w)^+;{Uf@p!CzEgNSjbtIe*R6 z6?>kKKc3oO3DVd32KnjaUBGOkr<#}b70qQ^b%Nh#cPPen!CW_KJ*a$ESBLu%FwT1P zij6oiCfg=!1fIC`ex!V$E?QPgE0$-v8p6Qx%?#nSRCD-Mxjy@9{ovhZBR6YKS z5CL|Ia7!PN%jrT^|3OW!w8w#paP!eZ7oJ(*dxsycUXOj6O7mT*dOO>c0tEhLN4%sn z-SL+Db(~{o&o6ca)=f<(Qn;MA2X+QZrl8SU=j*EWt;K@pwsJ5@%jged7IW?8u{=3xsm&*cwO(z z@}R@M5ksS=F%evkk0+$|rHm|;!!}IV62iY;UWlZ(m(D!TJpHW;6^jies|L|SzYNg! z$)SPBp6?0OVzx7Td#mrRW^_IqS5KBbiDOLTqT$~;m!dE>tvt2AKKI5?3Fdk3RxiEm zoaSM8$gf=^J6dYg*Sl+nmMgq22ma}(#2Hvs>Jb!5uU$yWr>d}IeyrVj4f$IU=8#`g z97OVt3)1?KO0pStzZ4W1 zgP&F8GbeuL$T1~3MUZSgESKAiB@Ao`4MWzC(a>2Ti*5wa7tBtdLOFd9h~W1xs8W{R zd!xchU&mIW@o{>c-Qen``h-uZjlQH>n3uN6%FnJRL$T)H;fg95iQ6VtGwc!oDb>hWYX8CW{>!w zYN@j0rTiUFh&KsXnL`G&NDRtGhN5&d_5i&d@S#_;Sveu=Ni0*CdE0K@`9e~K$)oT= zs3+BdozEN_LJDGsJ%8=heR%~PQ*bXDl`S~8GcjA-(kLo-(?m?Gddg`Qi-Y_KVSkP! z$ism)e$uGpP}!1PMTU$#IHFpNWjGDH>u6ajJosc&b?A9zV>@^Ghs>{s;}FWKM_Xm` z=x){c4ArTdMQGJ4IX>{5-}^(1-+{h{fRsIItKLSu6B|qq6?yM;nP-_u)FPgvPp6kT zR*j7f_6U(DHV^0Oc7I%V@w;2@s2^gA&__1ZCFgr`X*cI*u(thtfS!tEBB&H;KH*Rd z5Bqa0=@j+t1a~u}O7G;#PvUTE`rcF8<|LHgdzd7)%Z=e|KHR~GSf4`s1-_!6ajYG8 zu-Fi?p{_L>erUOV{CAs2Grhi}%)sTGo|8psCkn!Vb(DqzeQ*p{8g{ZES~XLY4O=_x zFjn?n)IK#eWE84xf4mJ}NnxLc11Us=Yv=YSN00QVg(5Qb2O#?99Df*WE>|%ughmba zZxBV~{OHG+lU@b_p*Qj9FFw{yGxU7=T{D;Qb|vGqALTuVn%74DXN7&FsZ!u=j;SJN zQ~ydhy?k9LHM^(msnW?TGYNEP_Anw$;(cZ2!sbLG|Og$42>6t-P`jm+6T+ShgvsG$W8w1g>|smTll@)IXvC;wdLu6aO8u}1cZ zRleQ!UTAeN$L&V|j7XWQsw^W3oL@N%g~PqSYTz`-NcdO*ir#nq}i-Bk56| zYv2H8rwucdpD^rK>LfGx4}Ri>s&2xQDfhb8SkGOGnt@^2UcSwagpin`Fu|6g)m8m~c>-y=| zw=d04{yYoHX;Lr^u{2nh(o}^8=M}orP`3Z#plq?29 z<3V&@KWs-L(6-;$~=FV&yNmb4FqLc;=w|{6`+4zVu}5nU5ra*7> zscl$nFRl({X_SgB(VttF*5+b)Z4`n4KJLAv~Zr;d&p={BO6rPGo+F z9zA3fN$EEoe~z|mdrZ1vnbfaTx_|dJ$)aTHG;wk44dEz0(H6NSx<`aqH$^ph!fYM( zQ0cxjeCGI?;-HMapoy2S4UfyP&&r35PGE_MmSfM>%+`OXv94OEEjcpGL}kB@hBVwx zHxmd{;Cchye1c;Z+g+R!7*bQ~eoL0NN+YLn)QUm*iK9E?dxg`=wysWHat6Kkl=*(C z_}4}L#UY?S>k`fQ1lnFG{oWrY5mPknRa|64lrhq5NB*4TWt-@R@Q>q`8WOU5-Rs?- z?`M&AgDe-}yov%QxNm=+pltNPfXd1I_Je~a;NW<7zWP>p87>{wgH;6{Evnj3&%LDS z@AI>rG`@wh+9c>EV8HpILfue?y(XF0(lpRlSE07P;^xPN$hW`iARmzraub#o34#Y% zllj?Biz#k^bS4hs5nfyK)5pd)UTTRU^8(%%btgMDa6C>iHCDHF0@U=lpecX!3L?#n zEq%n~E1x1lwD&RsoZc~Pj}>3AzwFy>%bS1tSRDk?OBKn5e*>fW-n;dr;VD-FMySbd zqE3>YW9mDvuO+KNsL&Dq3ManA(>cq`9o(&to;`txfQQ+r{>b3HDmP1~IF@crR=F`` ztQ(IAd&3XmT6O2QFP*b2=2?)+*3xI4_hWUAYWwq}q;3N3kPivc);XTn)}8bBPP{lh z&_@W^#)zS(&t}40!ZD44_tvX~D$mrC^kF|>WbJhqf2yQR#l45MM{(S!+okZ>0HvFG zTNQQls6{!@>Sr)l%8`E?md~6_YNM)~xtzBerdrmN;PXp|J1oPZJ3(UT?mx6$FF$}; z{2L?<$Gbkh5HG1NO^`r*4~1|-=EpM^qw`-{h6=}M3JQC^s59vjl{D{K75J2+p3J+FC|HwGL5c&ga+MWidNZR zy?-nFmFgvbyhY-PXZRS0+Y`C94Qb#Boh$1Z{_Jh&isq#L+GF1=)L&3$i! zsZkCc0e#OhI(^g6ESCnx93w)1W8Z;RfFWijPA4w=4V7uw=bRB8&n&rNK_BoJG(}>_NNcAY2YYD;xo6!}l5nl!@7y zbZqif1C_@P{RVyNBm=f2eO$iq-5|Qko&IyH$){B#-j>zKB4E|sV&GUI?fqnFQEol8LcX$k{=1rZ_-qh8_4a5sF?|Nywb6~Z=huC_e{luX68e`JX^GwI&tcBXl6lPv;4m-aaw3+#C z5$-v%g}>+D(-_fuhkMo`5j^@%Ott47%&$<~^&h8~9Xj`RQ~@ns@L1XYWMtS#mf5?A zV_XP?MeDELWk4=)k99Uhck8K#V2lad5&z`7-%)KGp#>|R zs7tDP@3`XNv~b8rXGMr$?rc^Ci^C>ke&XLXGUxO2+Hsg=c!xz(z>_8Pul0oUX(Aw) zjZfCJ@3S*Vmy_{4jUMOdFMKVHlB@+@8lJ(}$%e@?>)-nX=Q+qKF_HdrW5i3C`v9@F zQYZ+8++9=!r2@fzA}`?6j^n#Dqu+~Z0Y^$vP{Ciao)u&}O3cx9i3!tctR=C?gzRV0 zUsow`ETqYHUvF#v1@=Wsl^%0*UpD>DkW}wuNy~Q1^_r05EhrDLjY7|A@M%$e)@`nn zOU*XJ7@n-J^Ff}ckey$3XrY|(i_K$8s|GhK-nHzo5X@H*`ipU0s|yo-YkP;jB~m!t z79vp)YvBjmsoY!^we7d2E`O=KYftZIeNTM#QH_eEdn?Bpl5QErU<`Hbj1e26f}p#k z^+HCPe{cPydwsFpR+#!zn=6ZFxvbLYsUPgtiKyUvOl+RjH!1tBifcV+0WS-VNzNgYLHLpsH|1g!wxK{op19mk4xpirj&uE8Cmr^JGfg z@J~CtmIq5q@NY#T^$sdacE|VEVG$`E?)8R5m&q?lW$Gi8O4*yXW)C=^mZs zjOC$}9r{u4cL`_*d`?2i1<;i|kQ_$QF^MM1*DL8!mf*#Bm6sad1x_J5HPwd{8VXp- zddS*o-M$~ApB_4y<)2JZjiTee`DTbEw%ixPUcTsSoP8sm8jc0$qwW!+^g}+;yPW-k zEepYUF0N5lAUD7gmQL3`q#Z_fmsYcJvLs*9r~|jFe_53nZ8Id^!2v>`~B_B zg7Q5^x6Mo4@8jLAZWj59}NIFf@05K zw3E5wH>*5^Bm zdx2mZUp^e7=Sm%;7EAQCcZiw2be0Coh{p~ya`aYz^`TlsC(jPDywo1228)u-JrNP4 zS#B1OL>*8zq@5r6aA&d`-BnU=qdF6LvBN`)#Rx`pe8*GNjYqADg)v^uS)OAf>df{` zn)X-2zqek*F#~Av@kdMogp=LcN&E4>HE5sNH5ic63Egw?XrHU!??WP2azA2JumpiG zRJ56Bg|(mBn8?o~!BS;$rGgb_H!X=h_Z9pY@U*b^6RM0k#UW=bE`l0@c#Q14Z90K< zk5}`$tIW6B$N{`BWMO3L_tkUtU9G!vCrTr%1wH11a(@=1dk$RHDP*8towc{jp%20|5b5}a zu;3fE&^NUR{E&F1y+WfmJ)%JGcxU-~oKJ6C`;=QGzV2DLnC&!R?&RUaR$eBJg$GLs zrK9d2!Z}gBlI?MQ zo4wI2%m80hCYdhGubsxg%pE7MJ8X4{gXQt$p>ja9P?WpSCn1Yg%fwB_QZda%c=Y)s zK3V0t^p^m=(J+JjT;PwuLtOQi$uO-L^t}Y;7qKIX5Jl#Dxq-*+K&;X4<26tjQ7e%X z^h%DCW|8$@;=1)FdqBgM4_*s-RQS7tx>HAw7FhkEWq{P4i% zFGKf>!|-{9tZ>{z3O@BcLdW?XnpS_pF`?j8k+ZaT0vb5G?O%)&1Ne`HhA&xMJzl># z+=zvI!EkdGSLq>MRShlb<@Wl*%!puLhVmKIMlI>QC^QQLi^D8<^BDGnLz|-{RXG*I zdba{Ih5IywWsf2FZwPrHbks%lBfV8S;q9`T=>toZaMq_)&J$mKkQdJ&CwiNBSt=%kZd50rrP2lq*czVJJq#5YQRNjA%v*qVTsgwUwdI z<2{Xy+ofI(u>uJZSjR_?qX;zSDl*Qc7!(p?1DQ9fYk!76igdi(CGB=Z{tC}In>yB- z- zRqB!h3s`QuGj2k;5>>f*eCyk{v?6T(yO(;?vVf&3D4(T!ZM(Lemb0PX**N)i2x)L3 zNGYd zPBce*^cVbIh0~kkbdiCb*yRIb7`VZ8CjYkeE&zel}VEG9haXG$M?pO_cX>f zbPv|#5(lFa32I%qkZbXakd~ZdE(IpW6*{`qz5>S=Heu&xgCZT*i>h|7DsPoEB zlf{qHjDlasUjFRx*UovZY^9MeX4^qRS0yPz+GHm|v&m#g8$(3Wy=28~e7F_Y&~X1w zZBe_XZcR>j((I)FqNso|SE-&EO6{D4BJ+9^=la4gqHfdFE_ZK8n*@I4lh#R;`Gz2k z+Om8R-pdf;m2yHv$`-5dA0X>I^>|Angu+nzD4GcZ_zm`uUl+WeKfMfiXa0JaN~PLQ zI_}ars|wJ!7^9$V$U>h;Al7CbGmPr0%+l`V^bX{V=qD6m>cgy=K>d9Lxgy zF_q>c(*7Q-tvhbvr|vF7;*utbkuLMPMX;)#p%|>(glclNFZ`1D_vo##osUL% z?f0Dv(^+5m`hRmCg3krkVod5Ewz1wZ>{tIR`Mk)*9T4&}gUw*1#~dYzU+8142r_D9 zLzAwsh;anD=p0336B?H2`l4v7qpcwntbL2@pKd!DTn69P3^TLtT>ZKvxQ8G5yK5)j zYdS@@ThtJ1uF?;0)4&*nn2kY9CTuATBT|Uev)D&+%FC_J=Usg$Ri+?e!8`cQQ`c0D zcH<$e?bCc<9}Wg5*&Jm&$Kb~xzT5%Ex~N#BgFpslT5hhw6W^qsENjp@$6&? z#1hsX3d+L5Dq))*MyBsqJ==&N8NMAJy(l9d zzWsl(_f}DHHC@*zfgr&N!686!4<57$E&&qU-3cy@cL)~T-QC@_3GVLh?oI>UKhJl@ zIO9G4&H3MRbuOMByL$A#S>08&XRlRNYtA*5h1Tqtq0}xnsO{M7wCY$-6dydW`e{W8 z3r9pT1E;=4G0RT4GyRtSC|Nl=6{cmq0~;~n*SMkFnEmnFald2cNmosEoKgu>MM4zc zw5gB$)2|G#Piu!fe&c5--RVw(k|Xp|*Q`ENe;A*)RC+3ldz$>~EAzw8jZRuzgMk%j zc!;mg`8y^2!6=o{LJ^{un-rm~pRw1iDm;dZAG&e+k7 zGTiP3{KVbST5yXxmH-|)=1Ih1H0c{bxXVslev6cbX+xVJ^e0uw%uC9Fp3*kECSY&xT*^xPkr3PGA0dynMUI6R_Jj?A zrGozq1-g7Dd;7t?o~mUs-eHWV4kuQBZHL{%mujWYAulz&liWp^BI_VAX03YPV~j3) za)mOjn#29?hSz;A=?;qDbLmM_wz~ws9dWFb?b)B=6AwnQKEd?6sCAz?WrG9PP%Jua zkT2M-wliSJ|4*jfm)WX5tXG!ZKQ(1v>1zKi1yW2^Nl8LM<=W-u+Sv&MbCMhGjT7sC zP~n1JiIJ~X;o$#ydwp@fw*Qi4`Atzw4&gsc{=*N{?Mdl&el_L)+Jygmlk#5`WF#e& zRapLqbjhpSq*dWok!h#A(Fn_l$Kye#>wM%QKA2e-9D3 zn(@efyFWkq#Eto+-AiOWNWNaTx@X)k?jvc2^m${%(ByZO+334yWfKFFtsN7CJtIR? z^Nod(f#mK1RCQ$2H~-O}xL3AdksQkmGxKXlUgv@Pzv+*osq6prfz`y&`E+qNRdtvA zV3RW6)8adSAf_dCUOr;rneA8XHP0sll$aFurcjEn)M=^YR?YhQbR^ORBO>E0QBf( z>VGZcsZQTiF1J0EjDS17R!V;D9Gay3$xG`x)RiuCmz1a`-{`*14v4>I&$m@i8p`&z z%g%K*lD+*Z?K0C&KcVsT$nj|{(=yXpY^D18X=X8DM`jZRjMz1J8PRWXtJ)5YjRidH zyv%fDnxsEMCL4A_GkYS4sLZ9Ge(EE2m8oZ>4>%YcG-kStb-=JRDNt zh@}w~MM93^(T3(s4WSMV*Y}S;87>>=0s3if99wg%B5r%D`+RHqC&^dK65zFpJKZ6A zZQAlyVP;sger$%-l=*T|Efd0K#vpfJ06NRU!*NJzA@wm|;b`B-TG&C--bR?25Neoh zGL!kENK=K%Hd(c8+`&^v--?*A!rB_(&?vlUQJwZ|!sV)#t{wm)W5CALsJl4kp2g40 zOt4gmF(*qUdvsS%DDeKMZ{^H-nsn>Eo>@wY^7Kvj@wS`z!n&jB zsnbBxFLhP!fr5Tktnd7ZVkAR8u!*gVSrP#%i=Bu0DEjAhRA>oP9XiS%?OzN~d)w&F99qGzi_xfJF!^7X~A7pYX@P zcimB%;b;m2wKlhG@t7{KJF&K6hT#l0{1^Z>j|D`zVAG*>F0;yOeKM&zM-8M~b3Tgd zj+XymZG3QO?DC|G>E8@yfDR_4M6R`i-0sCSMtj$TY{n)kM3=GHY0ovE9k!lA+wPR9^P_>cg$?9#+NZYNs-NiuX5rY&}^TruF3@Q)cQ2dTmW_Tx`50t3lk; zJCpX?`jkjv{rth?pxSFepDX!Vk*4j@RmiIp*epoNF2B-w z%omLzrAhE+p>o8=6AKzxGN@N zfj{8)3^~|bg>Cbqbu2iQyKTxS^Rj?jnI-c{y9;h#CLRv;v+3Y*&FADl-*=7=7ydkk z=q@_pfV?vgjJpmHYE~cfAL3jrkpziXDY2oD9q$pY(~p9h0#5RIQdA)sr^<95Wv!a} z;Kf?M*XTvA+V^92!gsrdZ!FC*M9_(IEvnDPjpoUV-csejIx<5BD zS(#>=N%v!aAU+DQ!|mT?!&VL&mRJiV7*>F-VoA-e+onj;hB<;=#T>6mn6yN!|!f5@-`y zBXtQ?7_GmM%#dJE7_-$iRE+!icTlVUn--&Wa_5wkPtvUUDAdj~0mdS^7G(!aTZ%gv zP^Uxn(G+xT4&0X-CGnxd7GA05yAj_WQ%u--e|As+h&U~BzS4KwFpHZZDxwMSq1yrEin`K}m= z?a}2%ckCQHn}Qeil)GiS@wvA6Qhc!~g_jOX|6tpphtLwAw^R^jHC?;5Ba>@vqJu|# zs)wWYSyZuUA5zzmHwn$NyXn)B?vZ?3bM?fvj2{m(%T>|IZ4cRR5>rJ0gUgY~m+HII zVm6?SR|5ZHyG5=jFvx}_!)Ix@l!WU1>3O_T%yXrf97P@DdHYB3qay8I>g;o0Z0+K* zqCk@UP+7^K5!Wf8e6YD{EEL}G??$$t6EkeTG9}<1U(Pvq{=B=U;N+ebxU>;&JvKX% z?0AzR()6&~8TkV?*bY#fPmH~D73OQSYOrX}Wwnm0z8zc_CP}h;c^1*&ay~!VM8M^a zyfj^|E-#d17NE49pLo|Ff`Q4DV%D><&XkVn&jb+CHM)tW$MTpf{_d_h+su8Z_h7S^ zn$EyT0J%HBVxcqtMvMX~Ca6^3uR`6of)Qmeq%<$)R>H28u4D9lIzHFkPH@0kFs#b1G&i-pC)T(P3by9iS2y4AM|~moo6>+dO7mgu#?7SB4fOg*JOJoBWPkJMXuwggbK&K*YzmvR6E8@Vjc-C}w6Pp_Hn zlFwVpMkh;k4U8s|qW->2H>15o_c8iziuh<}`dS@aU4c}9T zkJS^VMka!mDjyS#38_`|UV7jH%gvw|!laNjHcMGtN!rLol=-%q;P7g*r#7 z^-nRAgKE1s^+8t3ED!EIiR6srmLHx!dwdxu2kWFMn;L~3h-zm{92Wh<<^m*Y|FrQ^(8f2@WB22RY&iX$vfs% zuaVq{cOH==cQT21iJ73xXQi03TP*bP+S?%c-D$Q}UeBjEktWd51i2j90nX#i!&N!1 zosJTvdF^O=f7_9Ync4`J6l-r<3k~)hMyN8oULgU4c3Wx(gU2X@k7RE^aJMsd&E4l{ ze*YNX>CE3Qk40d0(Wj-?f0|)Fvy8oCs%irvo-^TedLuEA@BR26;iCEY8sA_bYM3=g zi(@eZh|>x>VWu1EquR*~eZs@3Qrq@kmVs!}J(M-o%uYpHl6V4lT~|AdVNi z?zuFgxjehF-O4>?lE;q277@Z)rvL==+PrYc=INP-ot6qoikBmFIMd6?$7ad761cml zziB|B(@^Qvo+nVEuA8#qu)AUEDID%(v3Q_=mnjqHsSxUw3up_*M=2$MZYll7$FiDz zA{0_ze>G5d`m)+LbyZ{~vyc$Vb6iwDSY6V;YUJ_@80D3EegTHadVr4|T8 zIlnyH70wApml@o5_Vl){t37N!341dEg*|?%CPck|oXVrWsXFZqrjx6yXlk2(>Gr+o z8(06NSb3@FE1S(7QKmpJ#eG=9Q=icbz8ZgA>Ay#Z6q}WbG&QN#xEC9d+cXzl&v9PX zx)8S1O5XEZLMk*ePHhf7nC9Y^Nl@;0p=D~pR)6gXdPb{({bO$dKW*%JMH_X5=AoJ` z6UnLU{r>9~6=N^nbsx^9T$j0Xlxy+p^?twoFb!+M(2?$5|TEJyJ=bsRb?H- zuKfZDB8VhhJh3v^^0mxl6<)LMZ85V9eU7X637f*Y1`raqnn(1VuBBH%_3f=g)OZN1MYHTnllKqeII25Vhwo=U^d0)9>HE`=dnvzRE+Fy%E$a zlRkzqdfeI+aC=hOeDgkXYZKI^O(;&j`+okjke3#EcG?40obg=DRb6h=T|3btr{Wr4 zTITKo&(I24ksZe79oG5?uGJegn+*mzFD7od?`V2@VyrG#oHxB+HA0Ly`gY>Cc!ja@ zc(xL^-b(7d=+pb)Y(qYy;8HxgC+b~T5974C5+PJ^+pI$;$lzH3`*^HEf?DZxQcnyn zQ}o9}7dr-WOq?=DJV;Q0fot^FpVh|5d7m{N<|YT#88IRCw+A@GOJ)KO{MypJMB}(` zyB>R`0`L~EJxkgF{mF@UF6GSuu{$l?)INUlF2nd(!Jf{*Y*4of%=ZSyNbfV0C0=VZ zH+tXyM^zVQX)m;t>zd1<)*N%x7xQK`5z7-d-?EEI2o{pjuvhM*xix<{Zv>j0(!U+| zaMyud+*2s)i?b>1KF-O3Slt+OGe%i;|!LS}i1dZK%vR0>UrVNqduhEDFV#eg;HWt7p9E2$+7) z5db#K{$%&I$Z<37AQ#Ayntbcc3FIexoOxg>Ppun?X1H4*)z!jlbH9z0Uq`3sa&+oz z)5hQVmd>GX(3>($d?%P}v7_J5c^eVO0qxBlEYxWRY|R#j-kM9w{@}8)cnI%pvJmQ^ zZ?U!QMQ)8Xx8`o&3_xEef2iIY%TR<8r3knd6qy>o{&tInr-{0(n(3;~^ zKJN@6)YQ0^qXc>Ov5Y52m5`cTur-mBQUmNGCaiz{lf_9qC2nm2y6lYUbwESBnogxE z#o)HDaVkra=Ec$6h;HReUCDS&5qoV$m}9NWwuz>ZLWlm9`w^dINS((L_f`te<~WDn z+TPE(Y{zpLBO) z($A)5IU(ewy{7Wq^Q7q1(Ck>Sa)kL#PmNi1x2K*KoW9~rGqu*3t?%lC=L5jGd&wVA zSJ(^ju9#d(Eo6j32iuZ!_ipIx4DLquUY7^j8U^=YIoLUe_2s&$8k<<)2TNgm0Ko@i z`Lv&&xZnsUlhZkbdN53I`!d1XPN-QOmYIX>aj!!}%)T4+e2A@qT!`58Yp485rEQ{p}#STz(7hBOjaU z`0(-c7)jgh@eT$-7;MX{ywwwav(xb1S-=YO>dQrpdE!#pf$HVWG5%x;#(;Z)b8)Eh z_zsNkc~mJxuhfrmbfCR`;z$UKEpH(je0KO?8W?%RX$Gq49k1b$Z({pgebs@O-oR4q z1a?V8+s<*ebFjKE&Q-7Vjw#&wCE*~;HT-yY4C;mjdtGM^B;W~!*1ILTST2DZT!y{9 zAt!gY5o75>K+ty7#`@Z~@9t+2jPdtdr$nd6w>XnX`;yM6D@p=^2zEA>tHq= zfypdL3zJ=>zwJlhmPy=)d!Sm9o3KQ&;3J(sSX996!ZH@<#7N?H=5!=qN$^S(d{^ILw^bG zCdqgpkyAsy#w&4QXld4CMltc>5O7?4@b7#Cfc!BTsFAh(Z0rNTqIW%hLGIi`F1&31@vW(RYt$$ZUJ zWMo5<IJ3UG3QjyL(ZF2IY zLl?KC4e=TrKhy|-{r$3yzSpCCGkmpOSuuC3crJapY~u6fVuDgKeE&m#3ybDDnH%3h zP(m(o0pTL7vs!DFcV9Z`z&Kjf5Z7-0hy)5Ty$+;PU4nkG&_CG+Kc`skl%(F?o9e2X z@A{1q*o}37FUQrxVd)wt`saTTjNW3T2o-3&da3jhRRA^z+vAo~wzW_4LZwyqlRicX zCxycV#F|D4iG~=s;gJ6c)bZlwKCRmP{_J#xQgNU*WS>XvILY~PJNf>7TN7!iSoQ;k zD>^FcdlumD6GI!(xo|=dt^I`-NWayulT!HC1;KK4o6^GouGAw5%8)zGN4RwHt)MTPDuttD6)Y5?V%>_FYK5 z@x52dL+b4?CS8~--Sd3#w?#(s@C<(Qe&2CD8$oA}?kI67PfTeL@bI(;XITQ4tF#A# z>Ow%CPrP4^*%Uv*#9oJrVUNa!#CvEX^?E#9bBac$?ptvo0K@&M#Jl|jV5bm$?qxsT zhS-RV82%b{&i)+*BH@*`-08*Tw<2Ux_D-JgQJtgN-aijK1I(F2rpt`&n`4|xsWbH3 zT%U}wq-;?@vxLT`P^E3aF934{Cok8s!`N0VrOKsbQ^&haV_pCh8`^Qcxqa#) zRw*7H-yn5k$~KhArj>gfDC0D(^YUn)X^54&D)-`Pa5$J)I!+q5X?%(6$pl)oSJW6* z(l=w6c{sa@_(6B?<6e3j(c)|0TOhrk^ zpviWyegQi(LAZKuj1AWW9{CK%21vcGA1IDeO?C^p0rO^k&AfbU`JneI4vK41ezEE- z3*DgTIpK(QDsv!n>GABVprU{(As?M zUATGidZF!Xv&CIbVng1ywQ?i>HHXUC;;F}@kaXXwtLaq|q+Ov0nN!{FW1pYNrnBnY zbTh5IyvHNC4vb*ihRu~zk)#7zjh9qQTd9?gg(sW00V%T)>TY^HJKEPOrIX;LKop>C zARv;wxoN|87k|>o2FfATJ&Bq(vhL*NY&W6sW|4{|!pSmaMTk9{ZVHz1|EKCn zc#8X%`1MxUyrjv1U>&)!fU+6K_)q15BzNg#&d~2>L>y{n)s33us5l&PCLfgtzV*ol ze&7(8zkAAXN(V&jUtdQ8?rvMw&Yv``SC94Xwax-PN3h_2lRkq1@GAg+4*2Zso;FFJ ziXW3nil<8ABA6~R2DZmYo^%oeh@C;nR)aRB`Ol5(Z$uG%znh7 z8w^BkG|aL!ol@|b-HrJF^h#L{+{ieQ(|dahB2|I0A%mRs$e5DQ_w|5nR>M~1y?Unh z0ziLmc2(r_{)hTu!4udXoUbUsxHizfNaya$x!~TFbU1CRc?=qeu42-@+`qe7rt18i zLC*&;Mdmc`OPHOdnxSnuz_HTwvrbQI&VWtAJ6}-&2aV%)^`XS9%#1>>8RJcLy7cR$ zjc2IUYQl4fyMZOZpl2uZ>UQoo6IuNeF?@vL=mb+LWdlyvG0KOO(66(~KOqeKFT-t4 z>yZuZR+Vor9bcCDPUeU$Pr_x9e&JlhN0>)ekrUD%t?FG%mP}6)`>(NJI zw%3GRnJSp5A6U=8=sQ}MD2!Y<^fx&(G2TqW<;;#!7HV*YKtp@Jwa}2{*8x-0y0t=0J~U8sk~w+G zye+`-7F|4irk47(Lqg#A7#-X}ws7^S1=-X*iRP>N-ru8WD5kF{Z_?--n7EeKs?BwO z4&KKibpUd`ScAbv*8L^-KG+i={07A-3|Ddg+Q}vc_4xabtsjXn$sH}*(Y)Ux*|;qS zW&<)v-#)eNx~Z*`;_(mPVmsPo>0(ykl*gW0%)_CyVs5A3_h(0Cl;GglTyL&y?N_D1 zZ_kH4mdD|10bQ)8i`5d}__GB3Ep~3amB!wyR(Z6PJwP>ZDyn*(J*&;hL`cJJ@vbli)9v!0bygSKrfv`ZwRU z@32-UKwGwamvY6p7{!SF@d}ofq>u1BHiY~kL#m-8FThp>j0{!Jcb5uP+R~$}e>TiI z?Cu}4dMxlL5DYEA%QB=kCfP0Lzjb-eF+;TaQ~Azr=(P${;=OBD9iV;hC`LF&vchxP z>jab!>DZA$m??t0RvC-3SPf@)IH;cS>L)TiwD9;N8k)-iZ)}O?a2M-k*>xpL&}8%! z5>%wVP1V}aeL(pD!M(Z|A1!GNZ|K=&(?@&^{+#(44{3w!_PXC{_IkNo6(J8H4D_3> zP4J}Q6z7wV?aF*s%6BeKe{)#=$}a}1Mj3-q>9-;ahDnBvnEKNkOvI>{uFI54Oc4bx zdP+~NXMD%j;!YpjZRUx|Db73pz;Nt`avMUh(PePZCEX6b5DLEJR&1uT>Cr&{?gfti z{v@K+HR0@$>B1-Ou3tFIZ%)OTKlD)9)8gn)E-gTWyvADs(?yF~`|P|;Gb|kH;3%ow zVAvY)%r=a^GyL1`^abS$T?2D(SN9g2|LL!H&-};yPX5y_Ri8Ss<@$iuCAwUyfHaXo zptq6}6&6b%;(+Jpt;O!NzmI<7b-JP>%A+Z=agQNa;P1t8R%;!0jk8_$Rj5%JpPjX7 zmyX)SY7H9?MMn3e@$L zA$4O&zpBpdA6~fn9lice{(ko7u&@MsGHVLv|u`;=%%;A-3Hr64hwe7SgGQZq(b&nDb zU55UbVJ$cgLP^2o-d|=6aVFmrUbHraRd2386JIXXxT~l^#eVCP>7fzBb)9wo0cl0x zO)s}{JQz%c=1MtT`D-u5n|3g6&Nn1<$sRU@0A5Gh{V0r&YAN0OkUa30+|sb(v@MEW zds4-RM)t;`{!%s~DY>U1PBM{&cZ4q6i(d~(#eZFkr0q&x_9q`-jSC5QrRvi@aG;yv zhl-{C!r^piDUUTDz@fg2QN`Im`^wLohtFQFV)Y6RL)@cU!<>U#r;fM;5^Mbn$<@Aa zN(ok{&*e;%#Ow@P8<=S{HZ6XGYTgy zOKRg&aVXA1!y}&P-QRdK9-qfXy4{WP!9xltaM<7nm%bf*`I&Q8VQX&roM-QbC2;## zUe)J^d{au+djgO1XPimgEg+*C%4sS_&>gcD0Gc6|HL-{=rF~7nfYJCa9u4CBkt2zC zt!(y&4@b#p!S0Fu*^!Kb+px?!E2VT$549l`@Od#xnuJiNm8eEz={2Q%>1vLy_$!3x zEnPzjf%netj~J%eu3V#isw5_Br^$G&MXePIChy(Azp6~J!5C5`Z&Aq@a|5%cb!2k& zJ=WLHoT+w5&!ZKR@?mL@wllE}XN&+i!}X1=FUG47p1YKfM<(X0Fp@4^n5vtK4d2O= z<5>6t!<^k(hF#C~8zp4gh|kgbNsrpbV41xE`TP~XE|W#fkLw;HR6gt5>5G!BBJi&m zFx*pYeKT-b)HvssU%wK!I^%UJQ{o<-gDB;JRVx;TY*k85fnm^tg{i%(I_&l;OAnstpu$6IZcCHQU z4`piLg9lo=38n>#cg_}$s4f741m~X~gfniEL<}NwmsU#KDCMZCdKfB6Eqh`Q-#!1c z5SMn!u~naJ6XXkOD4h>GRwya5r&Mc)4r{s8Y_qGK@7#_DoAUnm}ZmeJSrWyu1!i z%@UyplJ3x%QmWnVg?LDfXML?^GGQh36$RTcK*dtD@^0sX!q@qZzuH?w4&T@F>VLbG znAg^AT?wJUlPMXUWRbA^tlwa#S{o(gH(}vNp zTckESCpYQtc6%N9NkLH^K%hPro02i#`N<^52Ms=tFYHTz=z967;_=#9>fSZd@{jqq zmEP~?o2du^!?Di}LPdvcB9P7r=m{I{an1>`A71K{&kx0fuy+}REiaUq6Ay0Ijtgnx zC=|Pf7FIdN=w#fZTU+q78Zh0r&t4h>Lm6#ihv&8I9544=W(?E(Ik4{PV0dHEx?}{&%B7TPmc1>(8$VF9g@y zy=mXi6LebcTIuW)_Et9uL&CfYVx!i^{j(y8L>45HC<|+<2GCq?EW4W_* zJ;uBB-yu!5O%%qqB^#NFU0rEx(A+Q5`Y+^lDLCS_w*~~J%Qks0YA18iPdG(N%3%wEs1T=$-(fkNprg z$r=9QM(_bC35RCtu>B#+Hyurfl3sw~rzd6|QM3QHf@cuPIw4=jgTVGF_;I9F+#0EHXG%pE0Mzr80rwb;YWNDfc( zj@&rAugSb0X-&^NDfe)He-p74wX=7B z>h^F9I!YjBz~?(l*U;$8tqHMI(|z$TrRmS#Lt>FPozp9v=0X2VsO}#s!rHZnkgJIp z6Z(PJ49*fA_gC!g%NQL&=z(PVWABeUglx+6Fh7vCbfVzCmJt87FaTLvhLBk9S9sDx zl_dDD*ZZ{`FRuHnxf_Ekr2Tn{IRa`@Q7#V~%nrZ6h-N(S+SMBtxA@EX?Tmb1rDAa?c}DM9C2Vfp2!B;IHxaesR74Y>3d|}b6B@-% z#B7bOE&xJBvM*=H4RHh6tnb+bJ3W&id#MkM;EG>Ao!S3}u9r8)81up@y_FP%W{cQ? z{?wG3b@-ipKn8aJ5^bAt{XXRn#7)tBe1nQEg4#JDyS^LVs_*+mpn+FD&}c^1WmZXA zJ?lo3w{m52Bh1l&ByCIBvX4YW@0H-qt5l~G<{anIYkyenr>jklfh;3y37(rJgfj$n zGpiyPnkYk4_3j9=*-ETc37AY^&;juvl$Emv-!=YsO{VbFbYWi(XIS*j2EkY-L_@>v{R4llTl!JnAnU>~v79@rS#2 zRh}CN6hHCDJbb}1E`H~H(DbpdXqQD!zx8P3c2GWOQSzV;DL;159PAx(EkL&U9Y8s~ z@jrwcvlw$sFatGo4j=Jo9ZP!Zh%{}?ypJ~$)s#~qXE{(}Pe?-m=B`RyS6}-yC0rNJ z#s%!S4B@+lc`#UYYL5~_Oib|8UkP03X(XGW7He3k4u$d0)jEA~1f9PI(?=B(Zi<`l ze{&VHc5+cjPkdvBQavYN56f6!*(U76}j=FOBk$#vPMSXRA@vlls5^qP#hKttQB3lAk+K-Pr^w{ zB>gSU`av}3L0fSTSxLKm{25?^`Vl@E<7qg>+p6?jnj8D(7tyr-rBt$ZWate4lG%{w z?=OeD5gPsVqrnj5r^_Z`Z$JR{A1n4~E}XLp0WYqdjqfh;9X!h{hl6TGzib5$--@Jk z9biESsef7n1vEzVSB9Ba4R95hv*p`j>~B7PPn>jUa6v%P4n>28iL%oUN6iM*5a+nX z8!p6(IM#bT+3xhe+1!dqRMO=`Hr0niGkf@wQ6MK8c$*g@#ppeDdy9lTD&{JXy~kb% z))_?kK&-kAtA6f}hT2!Ub(VlFAE9{ZTQwH$t$oFJD*8X-#eSLiU4mZXwN&kLE>%|t z1k^29*mhjgaY^qd&qFOD-)G``4aFi-{1hJ95W?on#`^7rNRO$1Of_sQ3Fb6?h|ZH1 zI7LPtVri&zdV}K0?=p7KD>wmm}Jubq1qdq zM7s>&-4#sLLXr`r@#dxG%tHi}WdvM-@|Nwtw~ByM;n&B)M26;zGuHY$dKpfc$CYRx zm6LWap~wO&VcSd@55)#Wa`eJ?22QUBtr7R=*5*JeLGD9Pgh}vg!C(Xw0XRSMp_^4x zzK)Wk2f3Z8gYdL#%Bf}BVd=w-Ocrv0(;xZ`g?Hoz7kM!*?k>f`F%8%ILA2#7`+Ba; zW2$;LOaRNjkzP5+beKu(RCw(`-P=WJtXn@_YBevvKZpqS|Vn_cq)V# zmXFaORyx^L?GomZLpC{YQg**~Chn6T;V5sg_v$=7`Xe`k!-t|Uc* zNpbQ49cowpxihRBs`y}eQtd0;Q-=6VB_zl#KBQRmz*6)YJ5glLy_7B;@xn^xfE1={ zh>d{U4{ph`7urfu%$CWz@dP3Zog5UpMiWE9XAa++tOuh;!N4G?9 zR<+YZ4og~@ZuZm-{UH^%S~R4*X(qJD(H@LLf;z7%Lfa!^cL!twPTAQm<-``NmbhJp z4B=SDzOve$$2|Jsx`cZNE1AEOE1(HF?+ncpfw9T6ve*W714OdrR6>}ABl01J#S`?vT(#m3auuIfa4X3ox{Xdi!&Xq)J6)Kd| zCQ1DLi*Q(OUn)j9A^XhSm+|}_Rq1DFRg0<>(Q5=7kl2^RJj0D3Q>(*o=B)#C9!9SJ z@ERk{n_zxx>3uA^H5x8@E-&F6eISUU;w>)8dPI}|UBvCx`J09Hk1>CjZtPdw=(>gm zqX8_Ic}FU1cRN@!2+P+RR6$H0SGI11J=oCv1@HdaQJr2pm;;vWOERGJY$h~-9Cg#w z#_eD6$s+T(u7#kP835%4v_3lSQosj5yM?_iV;f}=$JLLNUi?Cr5kJ;?-ueOrwyK}~ zK46qWUf1-9iH%U3(@$U6shWgsC9)=s6~2n=*X5Q80FnA{QfAl`Ot}!1$KG~CDvr`< zzD1SS>VGHO+im18?C2&m#&f~z?&TG4glywgJUbL!z{3D9vLL!5{j6V)0Uxkd_JbRq z1UeTXPOGUMk_zuewBJUC)}h&-~rc57$RiaR@K>oHoBE_`&8c#Ds8SA zXQPv`v_h@5iXlTIDmO7_d0tr{aoUD0n2OsT?yss!2mG-GC^vEOnM9?#Pju5=X-iTQ zGs^cDN1WB6uXzvL_Ohjgzacb-s4hCMj-6N{)m%-dB!)wT=CSnEJ4;e5j?%@y>gMt7?5#|9vek_J#lHtJqf-xPZ^Z(FUyqe{8XjFh0%LtHELOeB6f(`Ks@>^IR_q zsy48{PmVaY)AJk!qq&qKc_ltRaTY~4 zB@wW`uOk3h3RQiwEvhA&M#8?MME`h^p(S{}u#Px>p!e`_$vaj6C$}xf)cpoocW-+q zP{Rk#FxSBTyrPiY)E|VJeD+S92YYhhYL=XzHHJ-c`Du!v7qp0u%)Af=gF>qDz%y%W zu1RX-481^47_-ts;l3bzK!r5TF`>=8=6l%Tj$r8~-9y^sl#^;H#<;@GvW2e{+gTs6 zpOd{LaWCx4h%>JC>jjO|k2KG&)U@|XcjZ_@ ztORD=U)=B+y~J-@@}rwlL#*=bHQ3unb&lQVqb#ipVw+a220zMqv?C6^9oBmlyDO%qAppGR zgQ_k^k4MEt{M=^T9RRQkpMU;SZDMrQR%smBN@UsX-OCwr(23xLxi8BOEaagsnXyYf znMi5EhH-Fw&aluQGsl&M$KJcCA0f(*(lqXu7)grQ3`IQ!>`fy5ou-Q(2trIGBOgB? zW88lqjez0=`F;@A$ggzv#&Gg|i*j-1+75ZaSrX^x{zBz0b6i zF{eV`Ro1yvb4yMH@L3jZ3;=gZP`QhJPDcVtr+e2u9_qd74*WLwOfXUqT~l?(Z* z6ldc=uM{A8Hc11uFjTU*<@UQH9Ey`irVo;^bYRI?`sW0S>x~>a29xk&QdGhgf~G6M zVz)pzU;R8Jijl*wJLt~|=F7Mi4uA@Q=67q0!Al$Z}5_n^CQ~-t0yscpx!*`P&mcr(YH!?d4*Xn_f)4 z=ofZ)LUyu3wEM89o8i1Yx8vZxfct37M1YeWL9;5|eEU+X+D9o8(-p^DTSAHegM^RE z=?x}pUlUS{p4`(-9t(xA`lk|#vD3^Z_Whf`!H4}cpUuY5 z7T;!~Ub?K-k*k`x40*LWQY*es@OlY6 zsqJaQPC&Ae8 zS9gt|o`SijYoe803Vm#eW8}CV4_r}$k#Z##P{mws+j5T)s$N)dIWGV^SJ-{&Cdjk)$qozy@jv{>5&S==`GX=8^wqCN z?^mzw|I-mX`)AglCPv2C`#Z)1in2^B3JT0J;o}PBCMG6u2$+xa{EHw2?-`;mcxi<0 zl)q!>(w*1cTIY3Ls<+n~<-7u$B^@`m^0-1tqHDX|ZP#Yuis6qV-D?DUHW4_faM6$v zNTlOpeSLjXH=Urf97r?;bt7ppGoRYiW@={A;;4lRr(W+z1PjxipLKYv;(ml-uh8H1 z-kzYReY5BN?BAVVaGsd{qYRw(1D#qF&L3ubpvK?=#`q6OwSOey{!`eF>%UDz_-|$H z*#Fxv_}@kC{+T!8;sgcItD%;*l6IPDk(2<2^13g4)zsX= z0`)P`(QnYd2oWYzmPPhI=-?3%CV$~0N@~_{TO|6@@Y#W%{i_012FeRbk?C3 zrG|qd%)r>d)Of?ddks ze$s9oxziWT1Mvn)bU`=fGKdt`+)Dj~HRNi5;q|6prz)_PGzeul_>_~*O4b+~3i`oN z3Jw`Hykr7e%{1FXAw7e9BD~nYVFLqy=xkwEZ2w%M>@;=`clg(tDC-6tl+T#n?KVR% zu0b7(evY&q2VqWQmb$f*JSMN1TvUR^0MPz(%e1W1?(KH3s8&g?<(IMg3#?fzBXvp# zaibt{Rh!K>4v{+*d?)09+->OLciC&y^&u_6Roz-+3u z=!M|=J>-~{<$sa&4ZxW+VVH3?ww;YPwrxB6#T(n%*tTsu+1R#i+qUof@2>8y>Z+!C zdb)eMXZoFaUe5H*74bI5-AXFfn@M*?^R-fEX9^x1B!QGt>-OS_NwckDr_Y+2?ab}| z)2)5GhizQ4?GqAk)XvWBD>BrOXFS!>z0=Q2+Ywu=I-7EqO!qHFOspC z#zf!|%22Aj_mj7W)d78=;OBsM^X9d1sFfS)U2y;}dvkZ%2X)A>^2YYHfHlz~y(nkj zb+Iie@8^PN%jdEWaLXF2=r;sdxu~76#Jr0*zT?H)Pf_@6C=q%mhs17LW;eG>^M~-> zJ+uULX2>oG5Pd!0mT`tENF!~16;l&&TyOnZdHrE)HiV6&SK-D^hpvS=XCcIT^2f&t zIgbfdVe(6ebsaV7eN#R;w>bJFSU-EvJb#L>{GgWCiYViAH*{dyz=I*&!<=jW4S`I^ zXVp9ENdaMPIds+qo#5b`f7I~jFK2>>W^fv@SD`MUe`FR zZ!}^&@zZsl{xw=RLqw0t0^|KnTghjLf(jCDq8HkO97Kr9s+jpPhtL4N&2jKK0g+*G zeA>3>=QGc%t%C2D(~@h37Zsu>Bs@{G@}Og#V0OH_=o$FNy$8gf_r+eFn`(BqpEsWz zW;HgzDJ5(lM#g6^oJxPa?f(1yU0$`iBHZ!0)$lMf#E%9+`z|4Oi%b^>Ee5-MD#6m zL4$0_c(s*>_ewikr+Fy-(0h4A$FT#mim0&kVAs9UjUl7t$jyiC zEfLuZc^GN%7|G%Nt6x;=S}mU2(Yv$6292`--|y(W24~#*0eYtW<{nAzKJ;MPVLA8x z^J}(<{XyvQjl7d$uDcoe-=;O*196PRt**_CPygT>&dDs&CVqD~X@qc_=iRhNUUj4J zMbBOn|6>S|_scmF-a{4dSU{KZS4(Hgws)tH5BjCs ziTFFX`wC%FzuVKqcNAh>d&vae*YJDEJ~V(N61H}I6!!8dNpyX9zkOe&HenKFgii~F zqGEtqr=d?U{o9*|gQ=!%emBX1LYtBc|zT z7MO$uiW#h&BiU*Oi%A_QC)-}Ke{gYoMEqAGFEb-otgfDI;Su)8{U>F753~2v$KU5C zA%2k9dp&{AZl9p~P#ePQoamENlxU{O_)xQ&GI53Wl7dP_572`B0xE076fq>Qg<^rl zayXxl2J11TTjt zOI$&EmoN0#$5;FlT2OLWi7LdkM1+ zrTzSR#Bq+pEYu}k4@zTex#vg#)DBc*rIVBWQp#^qym=%)?IXs2v{`7o^l>-%W4?N8 z+lY7a0FJZXV>`QT_*03b{)a$-k-wddOKHn@ z=@(z!)gdgfl|F=P75-4@XSUG$A!lU}z_ zzRf}2XF}RdH^EbsD9oQ>M`qwTFTig^lRCm z-UFZx_IxlXWa=BslpXE5$Vi!5+s$)XxHOn9=2|gSf5?SO_HoFiYIJ54vBwjw$W-u? z>=JJ~@5#`MYHO9DS%S<3#8Lf-0JoAVrkSQfl|Hgz$er$m4bWtY}D6&J8)bL z%)37bhl0KJFx{@0Und@zss!5T$EJi5wC%rte4S{XbQAuX9m#2m!7Eya4V|Uk;`ch= z+M7~q8=QW->Vw$4-k$gIJ@=6zZh*wny!VvZ@dk3+g4EdN)ULq?$}x7bRXg`*o(I>J zZfJ>vhfuIXEibQtjN{JJr|9b$t{lSW;iKDs&}c9RaL1;2Mc*fDrD)wrCL6?rgU7#4 z1lrV3=)$Hfz8b9gi6f`1e0~i1b98R<@v~7#aCM3Jtbl65M=syh6y2;*3VIn?@^7YB zHo!?YpqpD>lgW$?bWizJf|A>s`=cQ)@wKg9&E#}_Jz;Km!hP$xM?mGu4Z9hC3P*~X zxBpO;s^6q84&OXh*sF(8!L?Lxhh5TI#4l7WW^5Cqz#{Du8PoYD^v54YIw9s~n+}cm zjXDZP5>8u_rq4=|Hc}TKmp?JbO#;ZGkQyVS8)wCUBxj{lR??_Ljl|fYjjjz{sg!il z8#lZsg0*XC0k?CZA%DajlmS(lB>eQMf6YM%ENXdW>Avz_5mPDoXoAZ@X{<8_XSi%e zH2KK(MnVx#OlOY)N4#O{756=k#tb0?-u+rs?$8$u(hTf^5!-$6^C z!j&YVr|RheO_@%<5s%x~OK%q>!D4qPuQh*YY9+^&CZVJH(5Ay4J%?uK^>syK%Rd0^ zu@^+I_sy6ea|(&zZG7C3?O9e7E0+1?W1lvCNDQZ6f4dXLXjs83ZVB8uyFy$y1Cv0@ zZ)cG!tZD_Ch~y2j|EPM}94H0-7PubhZxVHQzJL0+EmW82Fhw%dE+OFgeBFOg2g-IiXuBr zJU32WJ{s_Olr<@iffq}UgVmb>q-`IT4ad(4A^~2u#jkmrfUk!0D8T@kwXe3-3L|=g zuScaDz4re2&|2>z+cNL*;z;>f_*7W>cwS_p#A5^=M8w}pqh^x7HETW%OW-Qo#7?1Kk}AdD z-2Me?e1FQBDd2+%oeihtS+^iv)sld)~@tRg!T)#3jvIJ{O z^Bfz1K-;ObvpB-Cc#VI!y88SN+?~;V4I`wpR64Xky9a7g*CYPO1O4wEdeu5H{q~;d z;L-T!{xL_ab_iG4;p*-*UsI|N=0eM$@r7SADW}uQ0HjK(XK*WjB^Eot8rtE*j42Ors$X#8Q zz9TNS!o*lE&QhGl;eihOT!)&Xf_ia!COmkdh3NLN051N=VeQZO1bAkZ8y9wyD*9b&;uo6ao)wksHblTk z3LBh99Sx~G15p%+$I>ZWFv7)G>WWL(*AdE}cwmgv3i>9TMDC1((%gdpL1}NZ3>vAx zpJXJkRBNWXb=`FI$#(YT_f0sGVq%z_1uaoeTr3eT0@h$zs*qOTSgd1YsV5rvEEy)8 z1pd$gb4OGY4FU$V6AfRU%72Q_&9(j%@8ekhmuUPczGU(MCSglotQaP1gtfrLTcCt- zzI|x{I7+O#`#HKvcK4sdzKMStIt7d>-S$dFpk$dGp{@3NzYr|qfXghSc^v5{Hurd&W#ECq$;22 zA5#FIvZp4kBGf1*CFz>RLNJvY#wswCZ*@oJTrd@Z;@srw$Ant2`wN$nb02Q*#AdFz zUmE(^N^YI76ZK-?BhA7xO~BkTyjhNxUztXxvR|3c>Y`$>y1p(yUp?5pL);AP#CVBD zbJ!$d(yeO{u$dlGjZr&5u&V34=R9Qx3Njk_P4IroK__6 zBGpN=y+;9V0rD%Lb@qiT*=aT0=Tl)?W_nz-HfQKQhvh-bLYFVMLFzh9{g6dEV*zp< zbKvbfU2`@~MUDGWNkfg=yh7T1YQnjwWG#s*T;7M#81ulTv<7N63c6%5scF0RpEsZe z)!SX3#HD`c!F2a<3URtkc1`bnm5ZrgPt_gO2S7q~JI7{-2Vnz=u3wt^g>l}c%Cvm? zBh#YwjdrUmahz5t3uglJ6r2uwPAi0c9I5kuuI)$w(h@|nyr~ipoacq&yD|; zppEy5@)>{!dzARgIVJq^N~T!o(4}-zV`2EA28=vr@=1sl^-R%m zgPnjo-{Bj=*!S8QExli4*)7QQ&A7mSMyvw0ZLA!-z08YxUXN*P3qsKL@Yg?msvEII zn$I=5R8WaxZjb5ULh(+$**$%Pjm)qG!5uv(q@C4G$; z9WZog4-D_p${wSqJ0Vl?^S!owQ`cR2EwhQeyg zRsEM;`Sz9-$i!N%!1cCIJKu(UVN1n-w022j2#>4GwIa>Wi;q|pe2%B#U&W!VIqqN;o zgOFc<{q5=F0ns1}tO@ih!@>|f?|aQ_<5J*KQ#u#?;!Ckt8mcG`hw7V3Kt#br(kB@s ze`fo*;G>fJsbb4{MnY%9XVI^$d_DiHwN$Gz!hU|pNkop}t=^MiY?{0F?7d`9;PALR zbkpQM>*FEk?*3V@Psm$YZe25;!dtNYkC^Boq6lY})zW zBD7OFs(F~U=$~^gTA&q_xc6M*;?MZ+WINa)?Ii-Me5oXsp zI3_OjnEW3hmg)X!hYczzG<~nDg2b4n5dRo7woJ?8<8v3 z^7E``sm4ERxwQL=i*U^nbfATOjI@^DuA&=GpCDd0-OVQwwd?FTN-%UPyR|>|>j^F2 zVvZ2a-D4hUd;)d#O4weEMR;BcY@_b0Z4dhTA@VtqodbSCt$ef}0hR>}AFtOpHLRzF zULZf_o~xU!Ra{$ya+-M_SO5L1{$j5x*R{NWD|PuZLij*67PHrBAPRBAjlT8Q2b$wK z!6v3?XlF!+{O{y#1&3s#)*5>bN2quispRI(We&WO)TD%#$Pk=KG&gScy)7-IVExrW z>E9sP)kQdJViW=AfIv1+k5bz+mFccLbmUFS+h9>zIbP-1LzR<7{YNQS$wZcR^w>}> z9^SLg%q0Zu$oPN{z@rlD`c}z&*&5?ds;2F$Es^g&h{F7RxG3zbyR7Yo`O(DOoW~Q0 zYG1JfZic1cEEsvict`0uS>-;avhebFZRNP(Fe86Snz7X5umRPXNDR(h<(o`nDN;LO z5|7%rqu{J8v+Te;>lG=xf%fREgHW5jP-c!#ECQZ=nN4w_G){Ro-u0yH>^&K2BEL*0 zs~(ice?r!K`(NH#-r`=wdCQ=Kre^U<{i0Aw+w;6cy$f4OcOCD4-xH3A$6|KiovQE% z2MVsRLbr3FZzFN-T^aCNpmR0;ygG4?Y?hu@Z0!ih+_L;0wVuk#zgzz-A^1IgazqIG zwJX5kQ7F#&`yuA)!Nr0E=28+1PGUVe(JA|u&Ks&5;>%?zIx)NPXOS1rTm*IEnM~)U zWLO!&>2FwuwYWJd9$S!#$1Isl`MJuM4xvDa1}$J9c~q!G>>GSy^n2c??t?+SR3T%?z1>MH+0}D9xc1 zfeOH}Pg*lhI+>S2R7g5IsUsAIA+(T*gl(U#gzOm1)FN}TMQ}|q8veuikgLHyqsNu6 zlAHO$M^8=QQVU)G_E|{7xW3_w+t`Wf=i3H7zwJNru$(v8Y91mOg_W3#RQ8@i?Oc(UIH4A_jkq_Qy%>+;;rK3 zsJWP%l6|rU%l)LZ+=%2l(qh#~__yW>>7qQ7%Dr|B7;ifgNefcuF-pGa)f-sE^ArZCdNdPR&^B zSfwyHX<_-yBz_XKkxjCc&tZ?ZAX6X1qeaeZ>uc8YRykxFiK#6YO1nyn#UF{r^U8^3 zFNGQLmY8Rfff#n0G&|ouPr7Jf)jx2yk-5L~xHy%@o-?QSoi&0c0h_Z77N&DLf8?N$hZ>ke1D{*^gRbE(q+N58 z{~pY&i(HQKV-RDubU*O{BEsjz)N&TyCgsz~m$59S@Vt6|m7X#3 zGJz;EOA6Xt^=_~b@N1zMhnuO)EweKRO?UUMzqX03d%jRl4{@GJ3`{@Urhl$9 zAVSUhF!uucdw3ntrBdZRliJq?u zXBjJM2z>&>E;Q}s%-flJ&m?i>l%68M!Z$_>?4@(HkLVusm2QQchD3kRWU1ZR4nISmAN1r5lAoMnUW)28QbwJgEJ)sHO#JMj}*7|Q;bW``jTtD}bl z+fX1x!4hAr&Krx|?V!od5q_5c(crZN7N9N7D(aw9{=n8pT$nM>5xT{o`fC$j`Y2dv z1@Mr~;3t#{3563nE%uNt8Y^0O!{`;Bndjo*!p^JCg^QOcA?1SDDlO(`cpC3(nM-`Y zYg9ce<#^*w4ad;o6v4zs012q13?@7>;Fyl^f3Ubdd~!M21%oAZ!%zXl{XTLQwx?!J zGf;NO*4I=^U2Y@;pbRtbGNk|jMKBW(QA`ZjQKwGmft9Eo9IKbdz3+qDrb0sQa;7IH9FIMo&QPGZe3TXz~O|1=4B}?b00S*GM<_>44 zE}{A(9{46jMtD~Ehh{be=I@UHQ?2je&bBW*AZyAdJ^{O|Op2A)Hz_H((E%kfMC0KGNdblT`CKTJC8s zZ23KU02vAQL)USy#dq{v9v_R*tut&NjH0F_kjhBgSGQF|N_zL@G20>m+L~0t1I{bA1ths`J zYSHz9?jt-H!umNzb8x%G2U^vQ0b}s`~=Kfxu4NNz}uwREjeCD>ZOJL1Yk#V+>9PRP9X*y zjU^xTyw!VLmK$Dj6S_8h8=jQLWo6! z@{VW~@5LM*5NvVoFB`6^(G+uPPc_LfG;cX~yD0-Yo{XdZ0I!T6QKr{WVA|A;zCfKQ5IW^R9hnjYF5WPOB1`);M4H7K1gJytrKo z@!;z{jtNH5^h+EfeLZcl@1&q@uf%e}7%-B(hO&CslK1nDs%GV>wCHEup<9#&_p#>* zmfMl%2@yiE9H;zqAQzGQ=vT-T7g4~rJFr+U!`at%D#ZH#@l9zZkBD zod&A{cvDCIO3G6tfsdPIBK8w4Gx83M=XD?HlO05=DWb&>)R9yu4-jgyVYFAS31tdd=MM#|h* zt4PMq$xRWZtKlKWlFnKa<&JlFT)9JTXtNS}Hk~f@zJYVMI<^3DbzU5z$+;~pzY{+QqT-#XvJ5o)9%T7e0>gLhMxr*Cpdav#; zE<)S8($5>%5<{D)*H`aKQpj-gk~{qq=bbeXp9;Rx+u$W|_;+zEMoWU{R}Cb~3H!um zTSh6+XouX2oV(^?XOSrJO#X0v)N&Cm6A`>|IHs9~>KLg;%tbIV(i)xa&5#A|kGy+2 zd5np;_aj>q_YLBDHQ7$aW7cI|jiiO38GcVz3cd`AB?8mqJsq3PMau?jeO#p=bT-1j)JR&oL zw+8=KzVk=s62{nq3oj-lHm3!9hl~FHP3Qc9Wh74~uKv2`B#))@Ebr4#f@D^X=}?x@ zgcb_&pOEzSgKkOtT$@F@xD8xB_vT#Fi6(i|K0b4SX? z{*0NbK`lq4s+m>qyCA0EA$_?)B}h{$oOtU4Orx?yXZV>VO+;tRy!E#Cay?|-EdH|m zEjhU$ZmIQh;+%6*i>xbVm~_Qx`-MefT^eN6spcePkgU}whoR|UIsaxB1xMUeaa=k4 zXmlzL`Rwi`nR89iB-6cjj+BgNWY9{}3sa6zjF4|(AgVg#D1NwssacNAyP{imr3ud^ z;u&Ke%jQ0z`vcwff3jFi%S*C_=iEJ5721{)3vMA+r5qaW{8-W|R5+XS8D}-hdQN2_ zyN<*=`AJNJk$2GTHRVtuJ!%!Woh@m=*cG~#XE*k%Z|0v&`GP0W&XN`nTGT!ptTk^R z?w3v7@7>}%*{^kTj*e=SNA}akJj6(dIF53huGEuDU)09jcoj;Q9GMc9OY-71Mq7=t zgEawT32t`{%xb5+V4e)nR| zg$VAxRbFa6m26p|QW%d0=HojJ>cdxHNs`yS>g(D?2IcX&@}PKIURgL& zYDNZ0n7WDGypEilz6wqDE9^HWR`SXFl}g$WUm?RJi=7Dn)M#1~mRStE!O zLc3{?#gktmu4m5^uHta`tz*=auj0u0qsku(J&Xbs$jrddH>=T=WlPXsM!<5!=hiYk zyhyXV#Uc5ddP-_-2QzG}{JO#7j{wva)L`u8o!*c@T6JySzCYCqH=^Q^PsnW$*?xGl z3*BGDJ1>&q9RdrAAFt5Z$I?6?$tDvnlH53?Gd*6TaE&MBewtrKrI&SRpx-GiZJe)^ zYET~+Y_yttG;VG3jAdm=&V=8w0{7x`W6-vVqR-sGHIA{q5+VZKAA;^%Dv{h3ai^kx^op>WNYlZ9ReLkyvxX;~wzm|P=mXd6^rSr4I7sFvQ_m)e0%BZ6S{Jbh` z7AjPB7tkkj>SR;|MSfGNvdk*oXQZUqs!;j#5xUJY99>TTn%{6*xbwp8S65FcM*f1x zu5x>mBl$?7I90Q-QTg#*#9@(rqzf34yM4#nqEdnI0h6+{U8qQOR6+LX)2%uxRb*Ef zTUJdkj_nQP(*$J8-o9%HE>mDn!8 zA3OiEEzYbtl1g(RpkTC>b7Ka!iTz(>WI%jK-FrrRvXFbi2~cF{QYxNXhrw&CQ%ozj zrBnpcl6aORJFK?4SxHch*+TVZZcSU|v3$=c)*B^*IgV0t!Tn-hb+Y|wsrc;Cjk%b6 z1Iw6bAmFqDes?yFq~kGA`g)P~+oD_=Y2sALVyqPH!(1E`j}55T%DcLi%X0TBET&(u zNBVJ=rE|Z* zYZqJ~ekzSww0p!zPV7TqLpxa|GWB5i$l^H{kiJg62*GJ{yVO6PmqZTBIP z<^Aa@a!c^$RfJgq^a%?~Q2%OJ*SHHEK>5!XUAi{Df8~Pkkpi9S@>`P38*|-5X=8k( z!$5LI?{*d)26XO1sz;@yxOtm1JsudM;=OTw9al;NAo1rPn`V^9X_6-VyZ2SWankZx z(ouwM=p?f9{ro-pF}tMU6tKGAbG)Drls9^Ltm;@ZdGJ|NJ2ww^53UiEsjE&BHoCrN ztQ3>&7kG&{eiUd*KThvIeSY1Bw!lDwykR1m*uuC!vaN1`Xhn&OJkb$lFIH6Q1}J1Y4unCO zC!I9YJoZ;Jj$crt7WK2A-Zoq5X&5z8&c3Wgue`)Ng)B3f_N+dy&AigtXS_Wx;SghlcV~iS+g> zLCyEk`5&i3`qaV&yk7G9_db~3ueVx5ybjV}-LKc*m(6qTg?UguLKyUaJONDzsoPs< zK6ChIEmn${hnrA}Y~6gf7P-wQtlb2z-gCMW<15W0%-x?3$Q{n!9`7U;NJP)i>vt^i z!zS;PnV*EJlFZHgH74|XW-N^T$(B#J&$Nzn>sJ<8a=lkx)01ddQJB0CAamF_`i|0 zCsp_Ix+RnMU%&2;0hBcfR9AtL3cADDDo&^(&K$PLBuZnN00Rl91X0$%Lo!$LqYm+Rf zfKhv8to)wLBkcLaJ7N7u0N{WcjdUnr1w_Jyq(5P4s=paTX&I$mld?O<^ps6ZT%HLYg$=c1d>>}I*G$S=igYHH?1;}H77RNHcu)Sfyiy+f2-Da*irQoX{ppxQY% zLi0kyGuG;=X>E-yWw5@_W;;K?<>EjygMuz(;rymY2yk_rHG-#sR zu8%h8{fD^^4~Rrr;?XBV;5j%ejxagBHXA!%*IUFJJcCKR$qpJ}I*uP_2yZxy z|E%xb0)8i!mauvb<&&}Zn*uFmyY+YYmr(hD$$dfnjU!F~> zAbdA~Uy<7vE<6DC(va!8Xir}{S9C{?*IY067h0(3%wE%Mg%H!p8=Tx^Q#hp<)-Lgv z$PE%S&!*H0x|6<*8=L?$sDb75V=bGY>5(ifenZR`D`Nhbcf)(vm6SWz4Pw+Og(Zi?Os!P2*fKCkX#ba_1^59rb*~PhCV6D3mOQL;o*`av!!XunK967 z+M``a&mqsmm)tPmBf48Z_~MHNq|`~#v&)Yt)@dqC=TR;+R%+4oBm9Jpa;|+TB|~9G z`Cm#q+GLOwOw#~Oa_VHY-XrFd>;-$u#laSHZ`IdotAaGpyQ+yp@%=IMbP2olg3W5X7{$CeB`QTcMsko9U{YYT6l{&mFwUbG`KIZz&YQONJkLV0 zx;ymdLuorKlv}xjx2IG{%`xvD_P#zW6+y_$+O-o4y+(cV?!V8da)a;Nwrhcl_yG$6{b18+=*GVwc?o#CqoN0(_GRj4qX63NnZisVkbNr9& zFzC+uL>yZb4AWh1!i{I*oiy=@!i>0-3{yNRppOxReB{SNJ@YbG7@}gzhO`fZWz3Hp zj*g6E?&vG_a#C$&LeQNiY8%ug!Nhdnl1`sInBrNlkK)jGxFKv3^T&P<+!){$EhLsTUq`^U##5aYAulMF?Ev=cIFlQ#mq;@xgm(9ouS$)W zK35N{9TZY|j)75?W988=QiS7SYaH?7ibubWl%B6CQ(q%L6zk#+$}MHy1wq`}w2g`C zLWR_^!3SX%nO!s-ru%84vkHRsPFzTwk`F|j^; zb>mi3YU!|_3gue;31u)`EU{%c9%x7Sr;3~HTlw~V_~>aEFYtamXOzfO)TaDVbat&Q>aZc>q+Shb@$_q@%JOg5+$YV z{N3ozc%y28Kh0p0lF}{gpppCAftuBtmQIOT`OB5N8TRjFvfhf)9wzS=EMW|Z+_>5a ze9&o^OBw`Hd^5g3hxwvXaWN@gJVM@7ig-0dtqsvue!Z+5>Z}ag4vkYVMrB&M4CG8! zSy`As(a2+3dP9Y42s{^|5NJmRmuXu1>0wDbY*zbo1`8XB+p{c!atx|lP+IzpSF!Bm zptdy&TPuS~f>QiEJTsf2Rx!o?m#m!4)WXHeGWi=K3tPLBUX`3`k}o+Ho;r6}-k8M- zv426A2?>9G2Im-l*z&&t3}&`JX;NwF5pJa_R^0OGa{tiCyMSFEz_YMnmE^wyt4j!g z)dFT?Ux@WL>87INu*1s5_{U)Th2iEpbKxp+%9*>&1+tg`r6e*LJ6&e!xj;$kxwcR= zfQhR^F@@*%BV5*>MIa7jm$kmUPXModORppn(O7hR(cm^Sy$t4max(3qg%}LXy7sEG zisC(HKQhqVWRwU>f;(&2LDs_po#%C3lN8o{*_Oy0d+%5?#Bo{he-sxFi($ame9wJ( zC9Nm86}EvfYTs!20vs+PC=))HhUL-7Q3WHmoH>S6BswP}ANhrrUHkuVu=zM=zLFi5 zagkl#W?G}gKfN~q-XT*=Ozr@Pm7V%2Q{N-Ww#$sg+Y1ex9#ivUjwY&LIB>INy8`Sn z6v!7^oj`+!hv;3FN~UV1oE}Vm$JTAACv8xE8MUw~dZ%I~3wkFge(v4+)bP|q<4jd& zG4g54%+b_8>2cf@kY$X9#ya|_DbCpjq<~~hwrYTGv2&KANM1c=*6Iyl+F$Gj&^;!2 z?U9J(V5xV8cQmx~2TMj-dDCE|~uyIB?V488$`^q!$14&GN++>iy2 zC9UW3O1G!KisqSy9kc3z^F>hRn??X!{jRXn=>slgC8jYGSVX5W`@wY|Dm6UX#{Da~ z3uIkRbX@QMLN=A7JX9I`gp5euM~0V22BC9KG49inkR?fFQks*`u}ZmWrU+Bi$?k;@ zhwUUTIA=Oc8TA=u-8yl*W7ha*r(HZbK3Ls817_-V=U2}&ebSh@6H&Zuuzbdi9%yG` z)D;7m5C*R|6~v~2yhNLdU6{!ajv9MPl^3jS?u-Fy(XL;bguZg?N)d}am27(W6||yf zdX6^Z8K6NaUc0FZ#_f0MZ2$(nMU^?G`Z`+81yq&cP(aK< zcNEP%Ift~$3LKl!mZ54~b*=`;%)eQTS;?TXy5^FR$#3MwUz zN969ep%82aO?>|-EMuC=LV={xjIl6Es|9H?>Mb0{Nj+ssvvS?VP3XPEeYZDHzsI{jnbN7bwL(mrrOdCPzyx&*5d_sEXZ~aQphNLfq zSU3s!uy~RV3z)6E^VwTyr?6Ybc#nLQ_Jad`M^#ZNugEcqDXnQxdV803nT)uV4@;PJ zx=ld0n}vY&kEi;H{}8WA{p1xFAucxTB}clWSW2YJ9;VM2=$NTH4c=qZx8wN8~Cu$(P*CJ`G zeaspm1Mf^CB^)k_dfy9XGMVAwVbB}z*)&fB-W%{rK@)SX>7OEKa)c0#DnVK#kaH<| z&6yL`b{@XK2M!jE5T&y9BU?x zbev~m@yxjq{KIe{;-eV?5#Kf(i1^CwK*UE|!!*5kL0!`?(R23+8I_)7 zi7%UoFHcOOGR!mx7o)qAy$KI3EH08Aqg4>q8H=PKm*bptqmvYe8E4jYVCKq0==y#; z%>8#ZVke+rruE@<6v*y+U85o%!kj;Sxp&XbmWRO3K2WC2-$ose*%s?hEZfWQd*tdn zI54fcU3r9_dSO`g_nQNm`4A4{4h)&we3O1u?5ENM$7H7$i~)MR?9G{4D2(V4x|t9H zGDSB9Gjv4Ijf|49Fw>?gBw53)6{1*hDFUsL1`){(z@+7@8a}60cedA59Af-2w{O}? zA;@vFkXhRUA3oREFwlhBH+dDb;S@5DSPD0|y@yFsw2e&@zkhbWQmY>!xA%uikRe&y z`YIkoQThIqX3lII zaM;1k(x3$m&9!CH2k}eXWb4xx?9-TK>nabJFgj?Z)78YZO;U?HdVuZ#*{( z7(tZ`PCUVL03*~4ciycAsf#d6s%J#O$K0VahQ7093#5W0s04K`jm^Olr1Rr{9{p5m zOPU|nkkdhY&lQLuteCfmZGOEqWDd^$XHS1-6s+w6bv_sLA%FS)r=);r{)!|3n*%dz zy%PV?1F5=qJEFEw#<5eGgL{%%&u%6UQsvc+BN!m!(S-ac8M@Z50hMcHCZNnJbgbN-IEL~P`(5M7d7{=fbKY1HZi);U&$;+ftb?jIhz+b#P8m&A-5(#oElv0@d z3ISrG<9zBkjQ>AWDJwKeY`n7&ir5C`>lI6t({Qii(F}$*4H{(@mC~jC-25@@Ysa&| z*cT5#J60dK!KbL>Ky~M#B{^cv(mq;!VcB)=8RQbc?a%pe(LDlX3 zL3K?kV2Ir&5E2O z^znl`G&>7aLqutYf|4))Uorye18WSW#_i7^679gp`L^JL*J581S$9GtO2j3TbsK$t zUm{`@$KXB!)WP5p`udr8>!N4s)bLjMr2U)G7rD#c$sXf_>>?9y3=hDL8|Arz@z z6?&{pi1luZK~@&TKj2n_Xo$Tb;G(3hYqWe0JjI9vm`@Ck1Gv47+-L&tEn-@YNzMsF zhGKTKf&;)!e&HRF~g$?q}*R?*%@~Fe2yM z5O(i_AA}DcFKv4gg2`om(?DES3faICFi1RL4S?c@SO=42dV-F1a0Dsa*TeF`hlstC zagKLG+?PUJ2T{fpI=~cGgb*cGH@2te>Ja|;!GDV0Xg?T(sf&QmVpzSR`YBq@W&@E#{T6Q^GQr z71g}0OinFft)LtRo>#No1FcTrhH-pb01Ul~ChGO@$pRvD9J_bJ!;3-`QSVSNr9$lXIp#a`qFlC3XFEJ4l?Gf=jQhF9%GH+4%?5(7IiE539+n*vy zq8ILp!!fi9ka&E>t`r?x?idimF(aIUwXEKv)u;kz8m*y3QEkH&N3Tt(^6kNRLm_oP zF$BPPw*fu}kwlLV(dRL$vwj3aE`u@f7pI0|j{6e4{>g5oQADQ#X?qd_Xaf0#wA59~ z!4>(1YGG1oQiuq-`^w>oOa7*;bfuNK);eh^_VFbhG|~V#_5T6SKrp|ga-6#Zq7BTN zHvmFE4bLx%AN7p95WKcr=rpzT73oBo4alS%GiT;iw;E`Eihizf=G{@uOB4JN&W_5%2*$g($Oj?l<3~_xc2;)cj32e{H^+|#^()jBVeIzsmBo)p2dZB7uUpL3Hhx5~ zFM!13oHMEdNW>aIBK`mp!IlWpK!PqJNHl`MCrTEe98g!~x#VaRK_WP!tvC@lNwKQU zbuDp?5E7XfLR!p54Mq3NG~X7dXqFG3Urf&^hO`tU_r{RAb8D_aTKqwiHh35yXr2*{ zIjzb%&a0efB4ag;p@AJPb6l2rTopue$x6w28fTSAu&B!{7FCs3B}wyqdJu`M5=1hY z@8?0J#ouQMBK7*tUWBxmr!OL;LmAP6wfI{m2ay83SMaGbQ;`IiD^|}cEQl0Hk^+uQ zQvD%Q&n-$)Jr<1UNby^ zgR`hIsr0~wKop44%eeOET~Dq8KT&hgBv*k8DFHR69r^cas(uM1NwLr9YxqeDlg<}o zpW1b!uQ+S3OuG0B@6}4Opf_sX_pL;dI(o(k{I$0{#7>AV`tQz1G^ z9S|cd;o9TiyqfFJg^c@=a*NU%`c($$4KM-iEHdpH&(~4nPH)gnZgIp^X`Cy)A$A3? zdwPd?H8@K3@WxSkgDz}!)^!@#vpBDY=!(8JuZE~PQ&V1zZ!RQH7^Vpp2@`1%ip8PsLFGL-uHXokF+r2^>5t5L+CvKiXEnl#Fxo*ojcpr0yN zgKFK(Im@d_yUo)={d27c;G!hc(l<=Igyj*i3VIfuH`O5NY`eA98 zc{Pi<+NEL;UtUd|@jPKFuZCLlY9>sEB*c1%+%T!N4zV| zh9%-Cc4f+4XEY=T(eXQo_mEn zz9PGJ8|};mk5bm1cLugu-*rMuH0XJ^X4I>6nTzAr_Z;%Zpmhm{TgGXdO?a27bqS0$ zHl?2GE0TCDK6lR?ef#$I+LWF-R4ew@Hlu0?^BmhOtw~<+GO4pnu$PxPw8px^Xy1@|C3p*YUL^U(F4MZc!8( zb~q(}mT^cTTeklKoX4f za+LOpOx#LI^>#d)XEHVpm6p4~5mOkT^NRE+Ky8MO@sqSQKh5~b3mAubP?H|WMI#_! zj&aBsO=Ob9B`Zo&XEM*~RAyO%86#;{lSCE-3z=Y^bIDl6GK}jof!Q5NmS%<7IDECX znKJROX`AV`mN?2V7$;`I(?UKExFZoD&33N@$|7C&xfbUEa7UxwJBxKe+@wQsVVk9Z zSe_Xub8WMw0yx(;YspttNP)H)>x!T>aObRJbJ}KuzOug};BGNjJKK!;Y_klfELIb_ z2w!BIv01iR-W`M1HuIovCkRY~CtXDlsZQf4e;qDbqM zvI@&wq=h6!UJ6->qTop`szhYj^yu(&Svs#!Hjal6^NF4qQyn(Bxcf z!%i_dM>&ZX%>tHQ_m*Y>zqlB+nuc+P22Hpx-FGwK>VVb6VDhbE>cYY%G)TwTAdSR% zke#OPj2JbG^h6O2L+U@xfgxj&$he4cSz?lsEUojD#WX3iGG$nD&RA7qnF*fDv?67l z5RNG)wIn$$V_}I=``pRJ$o%kZe~~kyOLGo)x~Nt-Y9wm$tSAaGGvwFQ#XB zA1^lEr`X!V#J?-#Wxja2#C5LdkQygdhsjL^t35t>ogUFkt*X-lq{iGN>K`&Na*%gCP~Z~t|%#G zQC2xk;J*|V#gve`&TwT$&#%XWkX?Y%X-b1@QI&cQ5DPdS^P&0c=nTEe#ZkvSUe(5= zmL7E+O*iZ39d#06bsWZhjN7B`u>$lijM6refm!cy_gjT0?(Yjxemp`vt9OuEAlc)z zSk3ySr)#EJ-(%=tj_LX{w;n#j&=ojy%2@G1-*6brDYf7Vo&_R&3;lvH^u=85%=*M@ z)@Lbi>#fp7W_>cttnagzW}5YRuaXFK)P7xA8;iMkY1Uh8vgv01VtR&V{bE01idjE| z*_vmRO#yHl|UI=r06D#3TbX@{# zrVNbpgrNr70nqy*ZPy3rrwv~BS<^|8(Kx|b#fqH8WrnjnOY5v=Fi(TxRC2*`u&9f) zNDI!2GD)&h5-tRei^P)o^=b{y9s+E|*&||LXt~9??<@f>pxd{cWYmoXFKv-(i*GsM zKpF;T^ojZqC??UA4jXUL1&(|zgLA0>&NMi?^c|I)$s_C)gx=sJsvE$WojA9Ki$tt5 z`&*;kBO$*agL5%gJA*Uz8Jr}^bE@-%GpoUwPZ*q$&N4XrJmJ>h^gul$9GRTjJP_zL z5l0H7a)dO#B#^wAjh7Z@YQ|osTbzsO8Csl+P1q?G=P%6S>(cSGL<4H*vcmjVq%t8P zc>)8H>x5rD3Q%9h<14buM7CU!o-Y`(rw2$?p74z1398O;mnW?MWPwb-lb^od|LwoU z{Z;`@Qfx&QSpkWaZE@>SzU{m zl{hIaVH;-((PB@?o~C@E;N>-Iamt2!&^)8Eh|8=ZSh5(CBrZ$A zvVzrseAJ|jWmTnhQsS&+k|dZUBFP9NSu9H_)3l6(fRAu7w{)Le$MN?Zo`7&m$cHKg zl~^J`PF1~_cUM%^#tAE~9+qJfjIO$pPr)rdj6(&tSj$XNa3M0M?hxaIkL(T&wS-nJ zi#H`iQ-*wtvJ}XQ_hASz`Y^9ZjN=YjoDy?+hgeLep>#CQsLm=`q;*{ph9w||bsd)p zOA3qPlxu&ln zEKUu(m}_Z8R>;;WJ(XH~4qxg^rg}c2 z8~CTa@~|a(QXc0p^(D8?9n<{*V1ke+=yccA)AT^E za+&Vht+24ZYH3c-taMizM|nGPL3M`W-bV3o)=zyC25G9^-Ln-~4Tm3i(!G8``L2uE z+U2`uzI<28)0{$u$Suhi<-2CH@?HA|)2-U_D40>cE6sF4@!xSoAqQVerb|bC$$Zzv zY`pY5EaunreAmVF49%y-Hp~?BX_!#iB{hDM+xH)u4a%UiXjp}lBXY5Lk0$XO-&-!&ZWWa*<9EpsqJxk1OEg~ZO+_n-!-90!?lU0oJp$=vn$Q0ssxu|*t)4omZl5*|xj~R#t*nte{yg zS;a*vYF0~0B$r8zuFI4jhia z9zSo!#)-gP9zvyPKmbZ;9VUw9jei?xr0KC^NL$H2Gai|G-UQ$|_g;(7Guu z`?z1_!c9>F-%h;{pgPe-hrU)#-Q5<7vd2wP#Gh=#e(Y{%U8T(biHqJ z>!G>4l=l6gBgSKQVZ!Rv^1l3aj@`}gkVfV%$L=mwP^j}#a-WyNC~3VEiWhk)xy4Hv zNYKUDU8+$LI0o$@cXdO_O=EXYUCAjd5l6X8C*^nO8eU31aqRA5HeOo1xuGiWf)pRf zyO^G#m$KNT_j)P7u|Y}xQZJ=f$cvnWew7Q`9!E(xkEWGqk2p@aB6VR~!~q#{+xD*d zxt`u3G)YuVwW(u5dquiD1_OI8ZF}91x&ONmI+ZR=yr*|4cr?lZtF_x^9-Bzp zmIK?2NB#6)X!l7XXRETFwhP-V?I2{`dt$zAwom|P*=B@AxSMkUosqcepgP?+>n!}m z##y(C(-wM-5VFlUTgukfIHTBWoaK~}6d+_umKbLg&oa(BIl@|_z`=6K(aB9vX3GYV zB!bp#pp+;qktoIPTH=cuXG__5VVoIzLxve=OX(RJXN#@9S7w}b_uB;gqSxz#JF*kU zi4yI!lLE<&ebf>H!<1CK!q+i`; zHdX=KImTI9aUyDwFkY3SrnoBeSXODl<1%HERU#G{uX0%@WnN2`zvI1vI1#p&emPA>LS*adE+&ycw73e;^ zKNuYbn!$CM0_bJ}&d6yvMQfXR{Kj99ZMK-Jooz;Zwi%Ce&Zx4@=px&U%(BhYQ0kLH z$vrF_+h# z`0!mUvE)L^I8KtHObbb6n$ukJlB89R<4jgrN<~#rj&Te>BrJt4Z7E9K#8$@?%IZp#Qr?bE|hcu^o*9CtC^k=Z1{q+_(0iUp}n;{h?ftv zZox>H?2y~Dh1+*|^q&now9Q^>Z%EG<4B4~T{0+z`2sVFhfuC!bzZ$$Wwzyav+__K$ z#FAR%%&*`{Q57*^jM7rzIL|SIREn&qi#QWpu$0$~i9F5oTFP1$8Ig>ZSwd>cOJ>nM zAq-HiS!!w==eL>z4Ea}UJHs@Hv#Sp9Vb?_!vbD+~$*p0Q*8J3>i3n;AVs{i}v)%9X zl(W`EPGEk88v~iCVqh$s$-|zeVmzlaNH{<|23aUH%35m{Lk6Wa`1&>5TML9@B6jLYZad(TKPO zZw}PT`lQ79w%HJB_3Whf;|$eXO9gPIZKm?B0pJ4ribwt;xHH?V$Lp8bX1Gs3`1RRl zi@Dm_X543+C7fk(qLNVJMYb8AVVjYtmj!*hsCc)-$r;;bBvR8lK@?%8+Uv5-7PIlv zHnaHB(|b%Tre|oIEjIRkeYRPz*so=qDToH5k&XiA_Fc2CND@)VC^V!ROp8XkZ8K$M z;UL?LMLJ_yryA%#&9TjRDJ0F3EW>3{rgbVvSo-W$jXbn}GH1kjV6jP=1|cY;25>EQv@?BeG1u(rYat(?GGN#|1bWhLdN>jQ zRQi(17Dp6@*URFJt|`~c@IdQ3ck#EZl}rY(Ix}{FylTY46*yX&d3tHpSVTYk3|SPm zNB$?Bp`na4&!}RhfZ7rwrDPnlIIEH(la(Jn z0M#F|6-oe&P3Ze_SUmyv)Uo7#Uw%Yt5N^CwxeV`+#fp5&9TKuV>M)Rb$|`_k9^S8X z04#>sP=B^}>{4Eb+_7JJKQx;yI?r*tE>2&%yj?AYE7#bKAyb=Yl#4W}E5bR(w5~}- zt2#+3;V~gJmQ2)1l4f~Pv6_~Y$3@AjI;|4SxR9*oc(qGWspr^YYIrsy;LxpemxXAT zc*8Pm9H;HOhZghhwcSJN1lsC+ug7zrSG4#*k8ZT3YV+DRnm$}Xs(KpjIHz+t#UWSxneC8T6E6(!~($x>EQ$!l84k|i=NvOLZ> zrfDHrS@Dvxif2_`~kp?N+lV5OJ88nqx=j^*_}G~~8c znlrH&i5`-!eo(bYS%?YwDz(wZVNh3c%$@%9V*N4Oj+w*}pSiI35*V5bi?7;in+rmOjT8E6{PFEzT{vywEK8_)tawbCkHIk_t*VsY*r(=9r{O zCctA%(<~;mqH$HSGD!sGA}Kjl!#)ctGoA%ZzX%V+WtdrZ(!%$EJ+$~+R=tPT#1O70 z@K72uzpf!vB{5qVM3>Sn4_NnD< z{j8_7xvfVQ_xFV;Kk5?XZaPd`KRdTZV`(DltQrl%qi#%&nrp%%sDpHi(0P$YSAE=m zyQl1{XWqZdojiy}R;Urhy+pqy_}}mbQS?!MKE6SeQ&fCzY^>~;X=OlGLlHo?|Br7G zI80y^jmP~!Cx2D#-hPy)5>#2ckNf*=`5DP$vwaYaJff$^N_}7P8DX@q5k}f_ZJv*B z&~dvfCAt^Krv2OYC(S{WA7%9hQf(ji`+M{t9?^08Pl@mw^dO#5BM$FngD|QO`v+7$ z9S(BWnB~3Sq*5Og*z5g9pOC*Jj0nR0|NW1734L*&@^9p^xm_%!UCl}Ct2s$A<`CSsJ(7p)fQ@Bkb&%LLuhGDrgj5@#4^c`OQ+aLfb|GENIw z5R#-gw}k|kxdoa9V{5)^;~Dz(ycn6% zNoO}fi6v13%3Rl-!IVx1=Hy&cdZ_@;GNqHK>zl8J&;<6}=iTN_v!w0TD{m*^{QAnB z7jv~UJrl3#8FM|7{FbJROwVM7=}FYAlk=O*a|}**m@=C-D354+7c!8hM2*;R9mOkI zo+pFMVY)2l;-zh9iL9JR@!5up=^5IFi;c}Gw&C#Zf8C}ThwJ8qQY{@Bi1lC*xFMl$ zhubupUPqR$340BAS;0YI^qLL*! zPiUE@1QI-ORwWXXgr!+s=A?VOy&OYqv}IR<#N6+90ZrRg7;W?dr|+?r+{@im!dgD!!dJ4s&vhE6o; zLIIp>nzh3>TGPzmJN*pgYK)o#N6+FS(Nr@lf@n?$*;~^#>gT%Aaq|eeO!5BYVY^23{ z3j4`B$UUY7Pyz<09k_)SNPupoFvD>L?|?)Jm;|$pwBfT+>FaDNQ6QHtrwcV36q({pJ=xdv< z?Od?g4son|rh%^2({=F#chaM4TTPe}2#~v4v#Nw5N7qLE)x#he(Opz$>sr0)z#(Q) zZ^zGei2HD3>lJ!#EvrMkRO8NahzW~m>(#2^LtM4kbV0-*1^s~FKH|01Bkt#EwF~`v zJmSS{?L6Yl>k-Fko)P5{=ZiezY?eoycY&)m`WfmGlcXOL&7eVLqPji1MDa^TD;Bfy z(k1pL)%Z+>#qCr);t?4l- z?cgF+nM83nY~^aEhe}n(Q3_*RET)H6N^?yQh5XJoJ%)U~bn|8efijhm(*=Pt)!E$Q z_IfKhXDyHd7nLZo3|E=R%L-DE1Q8Xh7|*zrEF)Y(rjbmN9Md!< ztjI(`%DiN0nF_N9J9KuMXM{0}^E@Rr%Sc@(W%~b-_a;4ZBU!fa{`(bNW&&A!HV*=7 z^?+VAdQ~eWdSPQ`pfV*v;n}6?U;p8nksd+18;wSzhlYo4bRg6zinQV0bIzR*L(Y4| zh1bG+iHH}$hsYg9k|WOG1p=p@5MrHTO&v)3m~81*uf&_mt!_C}*~k>!-D6b1%K6&G z;aWa1QT|dzP0NGQ{X19~*UTyxMj6_LPXW?%j51AGU&BxEvm7AJMp^CPp0|;CHsWkK z$92+VW^$1Jv;`i|I3)#6nWmKdibf1h5|5&Sg!5AtquAD!2S+(&uMIrPDd$Kjfdp1I z!sxuMy;yKcHLDxFoD$YO#r%IbPT9S!GpE!wPN|VlI&n&hikuSfn8l_KamthzJ*!k` z)Rmj`5(`Ld>)n9GIFGEPdA2gB9a~57EjeZPHZD13VWjH*Fl+bwtT|;jN!`OKH)9Ij z*sL5=Xz}a`BFI9?dyVRM2dmfH(k;#J*_Jg>&S$mzTUw$5XSnz^cRPWjp98}4Q&uRB z&pF={imUqF340XN+#o*+;+qV{CT&vdV<>JO>2^Cma6)mw=r>{o>+N|(t?676vEAVaKp_#&SWhRi0t1k#SDy z5N*Mje+%^Q{>hsYET@xKakKCY_?B|)J{{$s(8yDg@cnqw#2~9ZQ!@O$*!^_! zDs`Uu{a5j%X@1}Xme_wL;}dK>iv4>J;34cUu7Sk~`h(cFb%7Vq{~Con?*;vVQv(IMy$Ga?gv1A~G_h%RlNqZd;$L4Wmv{DFju z5mzqKTO$ANU0fjlQn%#&$iMr2))2FsO6-A{ThXN6jM2pclR^e-3kAsHUO`-Mc~DYR zNkLJqK;8zG@VqCjG1>_bx@EmG_bRMc_TsnMjI#!{FU)n`TIKgypn9Bf?5u*|u{T!- zk1&WClt~33Ya7*96qo$I>s%c&f#@QtuV}OD6LUrI?*@$1^x)yAwjq&vgly6|Vn*-? zHT{K<*=AIUY9b`%6h=ULWCVu!j5rd)2$q;}>y2bC{arrYH+VUW-1*dUqkjBT=#%FBQzLl>#- z3su1}6;rY+c$MFFeJRm&1&Wuliqv5ZZV1nu_A>`N+6j-CceIo6^j^(Fgh!8aojrlV zJT@kix_Ovh=g-Z0O&{UG<6KNM6Q0T``;IEgx_5OZJb0V%2#6yhl=@6j(nWai0m4Ia zdh6`vkHk9Y$S2rB;V6pK!f%T+y(Q!6-o^zWr-eCX`x#I7`>YvHH-*~6c-Fw^1Sp-I z#VrD!jq*M>yH@)zUj`nyh+YzGB@$RO)3io^SLVphC687p zu+aOj>97+9tXPgLdfjQLKs#^4A^0m^y2e7-gpIuN`spbB@z?Y3(3>tb)_Wz>SGS

YXFR8*`#;9gcK0;|1{3QqAFMerYJ?Z_Gb9AHk>k-Z97f#~0)$6Kz z7nkU_kVw*ietT`j8vS;|={@LoGt;LVZk98Bz8>nX7{qGkP;V4uz0KX}JA1Y{`|p(o zKIhcVc%vK3LzyaQ;23gk3wR@&BIp3Ng}U$K4V*pWw}a)`n6iqe%$EFHK>=U0xomy9 zE5urIw>E*lFrEv>vDQp5iv_X4P^P&Oh;zoIRg5dGrD04t#k_GkM2V@^ItHS@W^PU8 zM&CL6=o-kL&we-7zV^jP?XT|V*7TiyI-&VhZhjBerq>z;3~ki$j;!*;I2I!s<}9U7 ztlfJ64`FRJLa({hG73Z)HbV9FwqbfLHP4lMeNr=eshI!auy*&Z&RCmPv9^*-(1f*F z7uKf7u=acn4(8TiltakBLQnJzwkvk+Ev4q}ZCrxw!mQN&V7vQ$)+nr-P3%Eo4*WydtfxAC#+?}jv+mRHJZV?nme$f2s^SMF&g{M_(icaV&JA^Ew9X)PrW zp0TAG;;H{H{DcqNL^751zx*$)gXUyJ(2D*MC?1cHGT)lWg82yP3Uek47NbT*O}^!D zrNofZ$c6Kc#Wt?zQd6QB(MClEQ>2wdj(LV)a)b^Jw0jw-B-#nbypBBJAf!UkBZI^J zuNU+3Wsr(H;RA9MOKq8_QduL7 zLsSJ5q~uZaBiM_N7<%p69A9jh3m26T4blQs=p_jxKCxRyoD*P!4#YL>G5RbC8gq#7^++l zF?!4m#|CkQ17{R#ZKNX3Vq>i!inFL=RK!HvWcttehL#0Q20#?7>SK(4QBAg-@T5d7HTuW!1 z$5IjWxS>YL2$j^YZ^UdrvUp(AI(F~ciPrJ)#Nmv)SGCo>7jSK>yA9?ZTis$P^MxwF z?6qZ>jDGK;v>5%$E;rcfmQ_jcOBdkwhQaR63t1ZMLY~TcTP|M)h5{9cGl3kT!V)SB zk%TEQ;hJzF1PdY}ECY#}$w;E2++$*}P$Wd!B=xkcWP(a1;!@e%UGB5;jD`d9_1#Ch zjN+K&vTLz6-ADHsI>&wFyLS*=cVEC8gWYTF_89E*&hXkaWP8%RDlHbf-8vNZy0R*} z4t&eYq}wM8M!)hh4Q8h0mEbP0Qs@xUsQ&Y#@k8F^`1#|XgMWJdCzRo(%3vtNL(l(x zKZU09LAzErCs_3+sO6`ui$msO^|R8-pv4lTm?LOp{x#Cdc9oId6r+l%oyeRZzw0TB zVpO#%q^u;(Wps0=7*%v;ave&L$MU5E1|+AmG=yMxhWxq@O(j(lZWN$^rw_jk?sxO_ z;rU`NA(geRy1G>AHPRw}ALG5dw{^~tXSED@Of*qBL!NhK$g^V^@^b^YDMP-pg*Vlx z1m*D*kRcC8QKT_@TSxItGvs@3=aP98Fla-DeDC|Lfmk<&*#pG3s9o;|?ONamr0AdH zq+3u+;(WYtgzk9z+zK{zhMm0qj`GZ{Byuw1)Yb)l!lO2m$SXb4DmbYD_~kEOr=!!< z{PA8odM=5pRfM%{Oh&kcjaeVPYgd_f0~vL08h`z>J)LI6mF&UWR}E&)5edlDs||kEL;@($+QR<#ojn;fu#h{oXOpw9kn{Z1 z8iRtQmqeqkY~hVafZ52Wt_&fBB1>uLHGOIV2)l-yGJBw!5rDcJ}|(sW^E_5k8SzB1hz%t z`_92scRfFhAAKztR3j;Jk z(ANiUzXtSk>^K8@QW;GHOIL{c%^{1u0uAHQs4H7|1L)-l!|ve;4BEhdV-pxUz0;IAa^1`O-fBOd?><#)Jm2jN_u%=p zXm|NCc!R8RERvv5WE!g|ymnS#L8&D|2;r&H(OK!Bd5olrONW&}h$0kSTmJhR{k$=R z&v>^W0zM`daSni}AlY5AVhb@yTuv9FXZe#>Nla-#8TjBle-^@FTRs?`u|+O$Y7YrX zOdQ6l7Rbe9=&A}B{7dU#Bp!94%jcv|R=!|;lwSdPI>LmFRv@2|`?WPzo-JJf@-2Ir zco&Os7fMnccrqLk8KHzRQ8R8dBTRXwg~gaKikV~5AmJF&-g-=hW)a)_*7}TF zu^Hj&wvFWoSIZ9O+gJ$m)q-8!er4^bx}#@D995=z-QUs@T{`1*f#Erxx7u<>@+~i% zk!)*wS!`uN8bpx%J}VEB@>pJZkR9=%Z4Z({MbINX<(1q|jF~)0WinBI-&+roMl{`# zr+`D@kykuOe(FtxOHE7+Pfw{N?c}E{B3$qfCnC_vhkLE|AwG=JD5nfm3N(bJ#@X9g z;uRqlOCEci5T`EVa2$U)LfpNrGl`N_Ld>KlDn+QZW>78R6>Q#-)5(7!tmp5qH1O8fbJ=>^(qZ4dYK>q#KfV_a`m)tPqT9!3~KL zmnJG_-_na4T3!dBE74f167QTA z4ylM$2q9RCxhFb$FR38XMrs}>6SRDPvS9~%@9(-cEiaR7PN}@VkDhKyC*5bhES;3R z(j5NSH}kiqn{>PCHJs@dFZRHhwe`t(q5E4-)J+<^^c|Ooa}4@LCaC3{!85jG0y@eR z)P|pBp&3H-Xw=o{D*Q`pcgBkD4CpydK7O0t!c%W#f;snYmI-!=4GWndO_YU|?34+5 zt@bgQfTWs407n$K85^4tVORO9$7Ov33NhZ);GJ!fE6X21| z^P~>O%^?wXO2c6A2$9B)Z(ZrPlnJ`GaY;D~ux`Ih(EUDZzuK)k?D4A`oWA?tUoLP# zhiSol8Gsg|w-w&j;GWk!>jdeftkBIi}sY8P0~Z?fR^_?kFBO_Z#G zn3iQp?28qyX#zvTOXkm7AiyI{k!$$5jfQaQyRv2EDvQ@}(DD+laTOU^PM00mV>%~X zRS_`O$9E|c z+94VtGZ$zOPwB(=wZk5wgh$$Sp&z4sopIP(4jZ^NQtE?Md6{OLx?+{|+Dxm1RZdX2 zmsR%Kz+<+bK#qUIIF`#Z|U z?%vj!Rq7h6qy$gFXNJ01r9Qwa$;(+d8hoasn(`nRM1Mr$sat^SEm>vvHZDm|VOZRL zR@wbNYgXA!Q}?jSO$EIh4wV)3HT3-o%#9oj^6mncHEq9}vae4|x4^#VwCu!+m2BuW z@Xi;pdqr9z1b5&ny-H{^T-~8(gYW&ng;4kF>eO;MTpwIzc>;2Ye^$!S)|c?gHB(d5 z+&km?XTJ<+`0JB5m*58YiUOV&#Z@ zN2IZPTPM=UP?a=t$$1JzGTcKN89G23ac;`hld&vDI%yCbthN|wMZb7U(%8L?3-?@_ zw6UKwcE8V>26VH~Jv3mA8&4o_B>*r>dHVpsnps@F49-VJh=@uFfxR5XM= z9h&;rD{F6)km$8p&)V}t>n>bPo>?EdD>1oFU}(&#p2@vKd+z;?NZYx=YPyd6^8X zAM!Hz9YXKZF+Nh!IR9<92Gy{9k!ies$|9tG8}2GXu$O0ST}hOOF+jKrgA3iflEuQJ zmw)T_O5za}(%kcvgmD=6<=)p%y@}w=D6k5~Uq595##00AS9yWOIC_3U=Hqv!X!Ksq zEigX6{EGmT49UAerACG+Ef7@mEiC@>jF$k;%tLBe{N?Y0$JiL6Q48R_TElN?h(>;` ztfT(p>C-#Vk_Q`}FMsde)ftQ9Di+s-VhL%1j1;jrt@p=d_#PI2*}+*t{Pgkp^6B$O z7oMNr4S2lvN}WW)BAv=ldO3*+rM?^RluYw08aW&%F_z=SOCw_z)M#rn>MM3s($# z4Yf}3Zg7#1iM8z_E4L?q^;)lb5%KS%)|!hv9kotL=Tn9kNtyjOs5S57W^AvU7u}2P z<$rfGu}qpM0<%I{5(VZ$XhOLN1Q9B@rkiX28T+qG{4gwoxQ7M_1@s$cM=5DOL$bSwB&G~Od{WZTt zTEp)H`FHQ?jQmLr`7Qn&IccuVBpy^Txc zf74Adf6)sGsX6uT_gOpjZYr_Isjs2s3CMqot#uXzth%4xq}$~^Yr%0z^}L-RoFDWs z4#Qvc{M@AxGRC)@eaj~$XvzxbxkiR?&bLnuD?zwBA2rZ1MT(24pCnYccoRF z{iO9R>JBSlJf>WNml_=SwLsBY4o4E!N#Ss;(K!^e5D{6hDk{Z=#oA~dkagTy?HQ5Y z3WFKeHhAnK#omy}2@>81g;bz>XZoGJA)D+G2S)@7fk_h-ys9M3Dr%T921TlvQWzud zwFo|Vp^+7lL}a-a3|U6kiDCKW&knier+y1;rR98OdwSE*Y5o}aoJGI`=T0_2d$J|0 ziHnu%Ux`G$yvH_mf~vvPDuIIFbG{M8xjEn+BM7|$x8j&DUvMXb2|_#o*JkQeOx=9_ zlts{lO}Y9r?5{kbNS%7`*dgj9#(8o&gTu5{^)fHOE9yk&c9Xr-={gZ(qMttwb?V;L znL5!bb>f=QoWR7os1rRzol<@w#11FwRN2Ctpotpit|WY#DOM4V-;z0X@8Xg<75w3T z=G6T@Yv$BV#r80#O<}wnHkF0(8V~JG-de9_w>rCLHCr%7#;^s9vBt3ZtadL-i^6;c zL|HS66L@*c5+@GHZ}RN3*F59l!0QsQ?AQAghDH zil4||z1GpulrVpr&Yr%I6CJ;L`Vw~HHrGRZ{el}DNPjr~+P$kYe`Qtvs%-b(|xI8!ggI*R8wwmIStY8<)u9Ce1v%!us;>#=O6OL7jVkjL&WbOtZ)fcCs z#W&diky@rR(%J2LA>7@yJA_J zAvoy2`p8I(LNo`cM{J>VtR#X$DXjXW{tQLfm~xS<;)q}m!Zltf5%arWbhx_-YaRb= z5@EOC6`(nk)d;xB8s^dwpn|X!BeqPkSGlPXaMnh-_N>W}6FoDy^|ANCjAPmJe1T5k zFnh0Or!|}uh~Gr401zq+J!BlCkA1A+Hi)C!)>@bIb)rtgZZ7bPq>(w03+NuV z!XqRw6qEB|%kP&Hpi)Q(-fQ-w47dpDdv>Swu_WM^fvsvx)Y>HKzrME?P|sJEc%l$7 zxZr?GvJwieA~e8CagA(_4_fc~m0JbpB4YTD@ z#MmT7tc~LTX+c%uIpJkk#$&3{OlG5q(1>OTama*mCrQCx8pDNN4rZF1)$aY`O}&0u zKpsu(wta4E4r%>?MHnY#D+RaJ0wQ~=tOTi3ZGF$xWvH%8kjy^=T}!*>sm^tOVhR3A z4J%tG$<4_P0h(MkXA3>gE*s~B$e->Z=iNk1liDME{)&;8>~3-ud`unH=6Uw+qvUrk zLzWJy9xOOpQHTUpb#=cJW_D_i-pYgXcJTx)DGthP;dvZ6YlW}{$*LOxUR7@q^S6Je zJMW0wy)!Q*6=q4A;)&PlcH!(iT$?OjJwb?>-Vy~`O_|J)SBG~3sKjM9&5@$SUjP_D zAUH`vWm*{y{uAKZoX;xkAyF(SS`Elf{qopTFEsFD4cjNvh`|r|Vb>ch>rK-OvB*tE zU8x=qZD_B zeRcIIge8Vh%Z@;zT0lq$unjcflYrb@BJYSX)=n#r1m8+_ zxzg&$c>BLsHUb=%t+zAC7@7cvA7S10A9OBNd$S6K{m}sD?Go=i#0j(tRyYx#>XH~` z^P>usgyB@DVY-7Eb`r75ET}7=%#dSW7%_T;ru=;9Lr<|;T4EOC)2LUp_8SjjCQ%5T zP(&*Fik!JjjwLtO4c8#x88}ZJ8=#18WOU^`C zr#HXCz3A3!4sf2K6uDya!_{5SBs4*En`pecX$k3fP+LDLpg|Ky+Z3CWg{9cEKAU$& zjA)Zc%s8vYPT;ut#|Q9A&}m7R)Mi&h3VLiO5gZ8Uq{0DO{^V%oq{PefZun*+Y^;UV zSZha_+FJG70ykm8!GU0!aEr8W-UDp*=Xu-G1O1?u%s}20tM23T;Th zqo60*7{b;IGUTx>stxM#xAWHipfuk+kb=iQvTm=w3y zP_lX?prcQLf26X}mWg=A!E8ggU_18w5kw{CrUg=0l`H9cl|`Bi&`@@bg4!5`q7h^D z^PLc5fs4+2A}Q-sQ@i8HPOhJ8>0of)s2DjC9)#=YGrq&ZCQU)ckI<=`$laBPb*S? z{PQq@1r`G>-~fS7RoLo@`oD101z;+-&NLS{$FI-5&lCgrRph%?Jal?kkm}ojrIe07 zar!{5Wo5iN^4*8iV#3-uE#SbR1-w#2mWU|{t3(HMOIRNjZ9%i1!N+jt$|sVJ_8L<{G5e%X}#%{-|l#s zf2F3a4CiT)e%Xq!?G?rm3V^#~U%Si&>sJW^Gs=zeuY7LZl0!D>7t>*c=hUF?ANNkg zz)D$StZB(sf1~q|tytkWmsp|WmRwkTy$s?!E7lWKOoMif>XCV(;r}D(6FrTOb1quN z#?#yq(+s3D=1S(CoCG;8f!hkl<%qd={hrQ4rw=wBM=BH}S(LJJ zWrD`Yd!Kd$hxJV;;`UE^{DKH25o`oJo0E`*A#IGzfd!k(J0VMtu<+dI3o>VN+sZ;+ zfaqX*eBycKlzO|DxFwW4>@}LoMBQRsL@bxlU(f5G9~uE+anO?hPz3^bSRHY|o)4`& z+fk|vVNK*VOm*#N4XL0T1+I<_triSpdi`j zL7n0$h;;)ztynh_&)$6=zpE5MPE?4Ou(w@VuZpuslNS|wv?Y{e@y?EIE?A!_`U5W; zG2u=0B_^l#KB9WHlg4~9I#-Iw9l-@mep~M;3k_lE)EhhOW%1io3J`pixX$H7S0cIO zm1{uo*35p=qUV;KS%@BRc`%oTxhBEH-9d>`!0Oo~p);Gt2vHd`RB%B3923_}Mw*Fy zp06)2ZVX`^>_%Kb1^*^Il^8C0EWyaA4;$4DJ>Kex`F1h!XN!`4;E6j_WNpI+vF!D{ zk2U^gNX%Pt3jLJM#d?EzZ=1XY<|v%T{m@d9ky#s<877O_2J?V=|Bb9zo+TQFF3bPi zs!xdU=s(r8t$aTbh(R5Kai>58xLP2BBBjRIG5%QwD6MH63ft|CzCZfXa5cIkOyG& zy?BP(pe{R$7ZGuZ1s30eKpbNg%vp^M)MMAsNsKt*Aj6Qw6FD;Jt1{vxDvyiUciV$3 zw`Cs!reG3cc~@X!e4I{r>(s9}c9Ef|nN;N_8bGqYU|k{z4;x5F?M09HuA`n0Q}i6+ zcnY~!?4lUe0;Wwh^+z!m;AT;|ByMcEhM3i^i{F8I9DoT|eVB=!YsAxYx2frMk4pkb z9pMG5aYH6#n#KxuazS$UF^@%fJ@nl{C5$IufVnG2H={87$R^GMzCCkrQqVZf%^BRKUB>M$R|$7|<@xbf)mo8HuxyNJc?t&Kyca=kYg z)aldWrde#U{0__j7g&TTxJD&nCrHrs=rY%xK_@=jEHErdJTe|^a&;j(p39cq88La# zHfE_Q`n?5-!J-m6@R{Hff!#4KXo!|l4C;$iw&mj{-X)hIAM?D0PkLMB+B!m3t9CVQ z3M#!yfW1a0MCL?6+2(iV0`%-^B924tabSfh6GImf`(;zdtAWmjBuin%gz+!1hFO7J zBc1!KnlW^2@-8fJ2d5t>3zF6Z0QQCp9k4m$!M>zex&KhKzT>|yL7r_o;%7T*^R4`07egp2H3Uvq<^$(KHl$p@&cH$d2l#RH~oaQ#H)t1rm z$A8BM649 zUg|Zf#Jo7J3|5 zB|{OGz%kiir?4IAb?@!>fvc5}N{)IWeSFup9-a&A#M#nnK^hZyxyRtG%n((?d{r9NLs>tSpkcN&& z?32La?$zZyaEA1oAwQM!$(`EW94rai?j_x-21+D=5t~&xVrkD>PqbgF(S&{G9w7or zb*@cdt8`BwpXf0t#heLm2>|@z|L@P+slPX91F_WxZO;Gxy!HS(l1fIsc1p{#o~bp* zGb&ro#`1J*rxeft?(|Io&~QxHScSWGH&MsIR~0g?l$q>BA9&8{$cR>PlqCsnKhlvD zXTua`+W%utEL9s{qzol0zAHf*2!WWaQq{G$5dPk=CPComj^B6Rf%%5BJwD$Mq}@;N z9wtqnth`|8fqgFT!htiWjTR(SM#GCzC-nP2wjPD?_fc zuJo%uBX+*~@W>@P6(Vf&aDQ_)^=Ao}PX*FL7d!urG(BNjoDuPOernW$Z`F!I6EC4@ z+@hXtBtWO5w}c$Mq;aJ)aX{CNdn>e#J+!ImhnH67R}jNoBhHz~?@xgt*uD0Th9zIGU_&b|ak1ZT1gmq0D!X6Ha8htzW0>PKwJ1Lo@@v&bZEWr$&yMQ;~I zw>59I)Yks*7CP}B?@*kK2mK23s?Mb1mDY|8LxQ%yKrF$yO7|a+Zff|=6UN+iwXCl8 z#=v283oH;Maw*PM4i+^X(cMLYBQ1p*%~U=9;|_`%p3S0#l5P~5jwz#j33fR6HVS$b z4AIt!cem2kIzGhb^yjQ}_26CKgzHbvf!{NPq@(iZAPd9Y>Ya8wXAkOo7*;Y{^}$6-Q5$Olymi&D!Hb8ThX{g z(Q%Z1{0|{hqv;zkJ9@K;VIwJYQ6pZ(W`o~;t(xOj`t5NSP zZ%|fG^*daOulA(M;g;W@l&ba-J6P8P9PiIX$CcGj`Z%YU@uHMd^P|-~zn@9d1@-a?Ml1Sgj# zi;0KFccqmo2kv~*v2q#bp*X!ViF!v`YSPeh1JtJXPgp~K{(CCAq(?C1FKpg!B$;3+HqZ7st? zE_31}yq1#4fKXB_dJvkM>=HEEUe%p_T%rksy3In~4b%cZihlI|D=YpFT8VHiD&Q9a zh*n>I<^O{1Qs@vUFnSu?oYk&rknfB3C@BqDti7O+21&H!{jxYomx=sdmfm<_Q&fDAjpsn(o0& z5AfH0jD*t?ii8&;&>}6*eJEmxmk+l9_IVIxC3jg$4~D%P%VYt>H?A9S(JP(G^B*Vm z+Akir;Ay4&*S!7ceH}@oef?U(>Rz^%(ayfmyE8SNE}XYffleI^C+&yR=U%or4o0h)p;tInpeulps$;68{EVj=x3$P$0$B4b>+wlDt5Q(q zhUn-e)E+PY@{uiG2MW(br?4YNXldgiUDcl7mU#HDO%zS+7&U9#=(chpO|5SQx9fui)VuEJ{;G1{ogDf z*k8a;9}o`a9WUN~JoXw1^}_jQG7b*=e9`McvJK4=e&cN#JDVl0o+p*CBh*bF@c$_ zfHJn^PVe3e+&`rT%uy^k-54!EZQb02`H)Q8q0^Cp?`P1v5b9cLE>5Aqf?$cK`w z_)+J#=nsMe3*1zxPeascO=#7QzjA1i4k*<4T+yeosIE%^ zbqU{F#{80JnOjB|Sc7r%mzAX!n(UV`cB1wzcdE~H_*}{JOTW9dE{BK9`SFvlDah`3 z8c)NZQq}|;Ia|=t`bdrt@=Em&MR_gz@D7Dc@!|a~Gl;{I9cRCZz|Fi1sR!vq0h)_v zoGj65q0+mnNVGmswuv|Di#zi650C5FscAnxmAURJRBEJh85pWWwV-N72SjS5(;w7* z62$!ISCnN1%WFe?)6|?@YmO; z9nl(%T)W_F8z}Ya&>kO^bn)LH)f#?tJXpz+eekAokLVyV06m-@`Z_LN%ALMPa0)!= zt4eU1`5!6Rzfb6Y{`?Mqtk}oi+?*J7UiFn>tFyFq58QY4>2ralk-*MXZii4kl_r}% z5n#`?6D|p3{+4YMLYA+%topzLtqPEA0GfghP0BZ9#8(6G^eCP7X_0>o9t7YMez_*i$qU|B)+u$p4K4QjvefbnQjb=lgKR2o(|Sb zXumdTTJH}&`>mTSDCinGJ?4tTAP_Nq%QXwgf+&Z%r#m@z11fB*a(csQ&{-w< zHh|XZPF{xn5@PMT1yY)_JKh2FZgVq+UDV>J>0&aPmQ18(*sKK6RXTaWt3GqDY;q%L zP37W-Y+cMZdiE}$Y$4Jll2rIP2W)1R=c;ipt^&>19(_MXkd9}Ye%)MXQ!3IqzC@b2LOB)pRPz?b}B zatXr_cJu_t18uZ<;t8=K9g!2ua6o^2H7kZ85hzJ4$v^@#g5(((Nf4`j(a{8q6fWStHG80VqP%I|FHzYk^R>!yjsFyK2hi~I4bwURIls;>Bi*n z@^lS8FFEeCP02`+h{VXg&=EOl(sUsfm_71@dDX#oa}E!24@>KYO{bM4Zd&vRA9UyC z-AWw+wvB{=Slji0>u%bOfK)^&4Q&EgAC79PzjROf1ufd=t?=GcD#OZb)w6F-ijcML z>N;?GlNHj>S%kdoodLsPEmt$9+BzE|UteCLKv#(kIYkh1+#eCVpTC3WqaDP6(PByf zbtHXUk>JEB>;t%{1g3pvb(D>8ZCxf26!g9+&4$*_e;$i`ZjApjjvM-#tR-sRi?^{_ z^u6mx%WD+>#H6UA-{7eK+cEFFHgN1qxyuv6s{0XQEEU3P2T=(%iYvcXFQCf~MYTdor{ublZ! zdds2r5^~U)xl{RCQNtqHb+=8}w){T+fOuWyu~9WtIv(5(uF zmGh>i5>XzHuuLkcPA?oK%I;)ubTx5!n+(8KatC`s1Y5E1-adQW$oVD6SQ@<{A*)Cv~uo^5W^+zsLoEOEr)B-^MFJHM2tYAt>q~LRJDEH#M7Pfi} z$`*RhfJ@2H_58_}8*jXDlO6~OEHGGTFei8BCOEfhyiW7E$_0?Jl$_X`EBtD+)%NDF z$d_-i(0!fOEO)g?)wicmAn)bw{*WDASwgtq3J@pY03Wtc!XA_8{#$G8HP-SHt%wPj zxZ0L;$o*na8vlPSK_H1U$3eT?(mu5Pp87-f)vvcHEc983?)DdYJ`!!H+2rYPAx=T8 z7cvf|q2MQfk>CDbr0}H#dtc3{Lwzx3r#JI39%`Ty(uZcoXmocpF-naveMm z%Ie%f!UG9=a`+BSgeH#^9G`RGR^f9#!sNZX$aB}s+0T_D<*`PiL*KsK^9o*+VJvD_3Zzt zlQz%%^siTeDsbo8l{#JijcwB`Mdb8P{tck?2kLkY zhXf0uRbMt!bz$oal{u+}3T<(HDvcI-VN?7SM#V0Ii9*f1J1=K;$h%IDpmI)Ps^@lU z7xYR+ejc0|rrrti2+hv3GLc8lLpuV2bS)c|Lr!Kx2khxtME-gU*c`C48tX$fr}ILa zd)}@R4bVSwy9qcc$Z;q^zY96lzx`2!A;d8m#$fi3`rsr_Q` zz|6G>zy07_#UUJiSnO&xm@nT&CP8PypvBn1nsv87Kv6~exQ1;h-+KjOg9op6bB{55 zui9p7$|vq*8zJZtyw=*&j2< zR|4J&99c5x52mObg(Bm`eu98~g9_7PEne)37JaebbVec8j79Nke+)|wlSxBFhyr;< z+6U%Ie`7~7kMPz+Q1-s%5ys?6{3;n&|2liks~EZ$-}t&&*zv=v%E6VGu5NwUEwFje z8mXdJM`+MtJ6BWme%#%Hh+4FQ%;&=2shQu<9O+i_TYQxN5yiBF6!S=>bjcqO9#DvN zw-llr;4rO%+F0`r`|}=xDwq6Y1}xXS{#Sv3biunofH6=U7fR3!Br#EI0!I@^rkZ%0 zg6T&D5x?aePr?U}I;X*};>+NvFexFRwU0*aba#wIef4$jC8Pur%Q%#7V6*&OcM4vJ z^O@4X#5SGZNT!Fe+-a55@Z@6H80e`C>`ScRCT4$xv9M!FERfsGdIc%`9a-&*-`^)Z zN$DH4qNca$F>S=g^Xu+Z5|tpxIi+%Kpx;8Egk!v1SxcT$ypohA-ek;p7lBGc1{Jo} zQ<%Pvf-_3HbRb|SL42HwLfl58GlvuN-dKGt;TOx$y0H)@m?(Dawr4fh zLncpgLlLBjc(jX->L`~e7Zqx##E7amJoJQUt~_=h!4>@dG{GYVzYyUmU9`WiFMp4i0x_vhvcqLYbbD23*$#n^tT4@8AnUGFPRM#I{DSji*;I3_H2bk z_1qZxg3x^4ONcWwC@0*$fsrDlp<_bCSE^j7nxz-Jo`Cl{@^h8ye| zz1P!Nv~GXpq8NeNFI}(c7X(#mOv7F~y1P4oD~8n@-Qe4itoPbBhg?uO6hbHhS z9pXd$L=+9lheOjs|64xD!*a?W@Te@^bMB}QTxPB^c z^$VM#sT!}al@ch)!Dj)&H&tt~A74w%=q(8mcn%_t?Db75bXI#xDQjkRdxJDt0SVL+eFl>%0{>4hrRwpR$_WjXJrBZCh6n;JZV|fap zA&X}i#w-`oHb4rcfmG7W#H>}LJl9YCo6bVTh%O~+!cn3=frpBiU36+Y4uYRT1LWsx zmYig~s`0E3H7~?^MKYB2BS)tFO=t2m<5Kdn8w0n|K{m4|AHMLkXI0J_RQKo`68HQH z3KK|?A5MED53RlHQ@-g6C&~PdGLHywrEQ97v_}HX??duxn4Aee|BTD(&t|u+PsyLU zLS+UOz1TV?0b6vEZST*Gtn)eG`J9&T7@r}qYpek7v(c#N*4pLFm1h%MLzdn2Tl?3! zw%SGAJ{te|z%}&;w@~j9bxzd_{o?FV)C+Lo8*;jf_#E3x}k;w+e0OC$qHy zfkuOrws!)_Lo{PArc7vFy59oHcTuWm58WI{`EBaQmqA*s8P>i;=M0k2P&SnZQ@!X| z8=jIjtW&bgaVU-=B@5e3C1?#g(2+T#i8{2!95b|pj&r$GH7UPkh%>{oxeP2m$Bx~-wU6)-36WS9GJb0U54eZ!V9FHRyuIWa5z&izsu;| zt752=zf@MvayU!A*lsNS;@zeqI?gKS2`-Jrl!&@vb@fEoC=lQ&nrj$VzO&6H`$Q>ODK^7wr)Qzr;|TVHxB)&`G}@XtbADEj` zTr`xD$v0R#Jb{$ULl%!k!fLceV@Vu6n`0{d9l2Y+rC~!Uw}^wn=HJ*KKlz5sQhl4* z6?)w3J0D-U$DZxAZWMYii>6lrE*gt8rTKf7@wl`%e*P)Fqy$CvMXb_#3qa>^6%B*s zN@L#&Aj^m6siXv{*C%4UY>i>((R$tD{^7k&>rK{i*)dhX0{I`s;Xj-&6S|ye(+NK$ zhs>9B9b4O>tUWY6o7ZhZEJBpdE{Q6K6t z0jT&f?+xAVd>#z>s!X=sYqq+bSOVPW6H73yyZ$vj0=IdS6ub4_pH+aNUOgLzQ-Iz?x1MNr7-&CbG9LrjYjjrj>NVfDMk zVu7M|d8Bdb3@(BEd2M8I2@K1{H{fo0!s7O?oS#|VcIs*)GDbYz9} zoHm?zKvlxET5S9b21;!(L+~H{>|mnjvFhCQJm@(!$u>vHbkqbyNxT1Y)GB z1e8te7-p1Q(o*SNHCpTv+Lwq-xw)%~<=VC^+Z)Gj`ZDN+kz`K4L%ee~TlB{RZV0HuLre$)foqWB=o>?3LS6O0U864&`Uz1ITp@p{kgrCs| zaT4SfMG}&tD#Aj>6qBk`0Oy>_WfXs>0BwZ-pi)rYWgMh5TE2g8#3DQ(`*Tqmck{}` zGzh~mJ%B|Z)qMT7fW9s{f2O}yq!Vi`6U~2vWg`2_9VbA(yNdXZ091d&u@)wvyG}cw z8Tu@Ie&5R*BNGDLJyR9elmRY><)#5IgDzHSJsGFtN?qG}H5IyxGEw3hnHky0OvxdP zXrib=82DnYI5AQ?$LJ{!Q!eyuQpt=Wwo{P=m&uYT$c8>aYcJ6@e{J3=yV{;nqg>(N zD*}wX6W33c2{=Hy9q9LDXyc=5M-RF#yH~?#?XOYGZJxyClW6B6E|VAHS*ATQ4rkt8 zo<%kJfR6Do8R-)va{JJI=7~*^E-*mc4lP>_*WFBkUWMxTQ4Kb(7>J>>LB?G(@LP^a z9#24&;*@Q0)D$%P9KjHRj4bLFS)ILF6B^-U99+;YNc5(4h6SW{;y;TsMHt!g?oPL46~Zs6#Ef6Hl^U}UZ#@rQ=}DWnS=D%2kJJc`LXPw8MtQ`L5eP2%xvaJCLfSrVnMMfx(u^rjM>s9nO1 zVhK=eCemFh1nhBPCk&Gr( zUA9SAM+!rEi$`#XS($^2VtE=t!AEyHmHvtMY8}XOlz^D{u z78!wC#M#ad^AuSABipG&*HE&6l?@FBeLgxqYu1OG{P5ul_Q@-kA?fyVHQkeE19Glg zM+uxJrv?-JFOIIv*a%4{72W}TL3g=!ByN-+6A;y;gvze?2Gp3&48HzBgV_?`tT^*8 zU{9o%+soSRMCwN(R_xT6&9d!8;mN#C&YoZ+>1k`&$TAQ z|I~7(b!d%0$$SjxTo^jCd=C+NTdqh|Z*-w9D0n=2;zE}4v;7T}o@rZsyZJRoGQzk| z{xjwx!jiXBPKb#-*oS&Ox#j!8bzK?L>JDhxo6j#Gq3zq#S0xl&a*B{8Wvf@#?Hs;t zLXGpOhE)mq3hCq2`9?_aqD7!&9}vYat~z4y?IX_%MVm>9Pc?A4;ozV(v-h|AU>6(H zIhh0%B&>~*s%$3;IUvR26dFIKVp~9^t?F9wlkix_QfX2^?Qm?g97&N;RKZ$Q71FcO zNfUNjz2>`&I2y$f79C}`$fuJIQ$2Do6!P?XvwVV8;WBpOt^5k%k^W@qc?6O?rPu z%4Jma&y@A(`FGgxO)z)Mj9@wT^?rZ!nzr|P77RN`c>K!pdG?s6CxH7ryX%kr1?TVg z_Hq}ur}$vy;rF(~ly49wIGwgfkHdB_Njy=r38jce^uUIAkikU_z;bEzrA>gRYXfE z)&WO~OhLjH+(JVlG{zy7s2@2d6D1JtAPkL8lkl4se+NCQB3i!N`Ed?v!f~P}eKoqA zFubNHTm=Om53Yw9r0(RjK-s=213&G=evqa^T!Nk55lE!hPPg%d+dcuMZ#l6;M+BtJ zAZSUSp}&KVQ4s+t+@TS34_!yYd|JHU$yw&;VkQgGxP7v`7DB(0-QgC?3AAu3QXkZm`>a}e)iBPyUIcaBx z-7^_5j(XM~vne%l7}n`6F(=95lPwQu_i_pMncC|4==7Mh!?G`6!Fh4e48BcM(uzp{a~qxZ7kb?k zMmeLZa}FdY3KWQ7O`ibxA#TiD1^EvFT&?!|Q81Z9o~&c8m@HUzZ!no|%rB%ERnPc0 z*cj1{krRXYKiaUTGs+=;ypf0sYJZ&Adx|_%fUOi;tfm!SQf9f@FX|3UJVBv@u?R|v zSju`eXz1;cq}y@|bs^Cv9%c<#Z$HHAJVipk&M?sLCzn@Wq2CU#|Bt<@7Q(TWOSp_P zHz<8&y1HA2U1aWEz=mK&9`HbVt5WQzQVWzPcJ08i)%1%}&)Bms1OP1KLJel56kyJ{%3Y zY~@c&p-gY0n#G82v{3jGsR15|d`Km$ZqYE_LXoMl@);c0vBctJOS zck%(NGQ@_6R0?nI1VcSNLVztF1sO<yU7!Jfu(QdZekz7x}#Y1I!aT!%q5Ltd310c=YY}-*{)zA&V?0 z3_(;lJ`67O;TIW>I&sY|TzyXWjrzroCQ`Dm8{`HV#9>^3t=u0CDVECe5-9B(Y)u^) z@opA0>A3cSkiJ_PVI?9G36aQTw8`BrI!NO$j*k<`14@$YMCZ@N2SL@>#mU##n|Gyd zms|5SOG3Ub|67VS9>Oje5)?iY-h3ByRilXWfBhS-%F7jM9wC#Ch*@T8>PhnV?{)Rq z_;+0h;SFor2iO0_Ujir=$uRpgQ5vCM(gy-@>HGGO^iEDoN*gW6mcRe3{tw7TQMD@P z7$$`xqK=$(hHra(NDLS`=Jxv8kU{W(YS<$hW}br9*%o3BT>c^Eq0j>F1^-cO1=^g; z?|1oYdR4xe;n|HC691SGq4`DPyvNv`dIstbTGmP0FR?R)Uzdng`8zt3qo_lEkdj~jhVK{8D%$A zUm{ZfN@1hKF~-?>mLx+fRUZGkC;|qb%`K3kn!<^xR;M^|U{zN@C4!qHiGV7{=14{` zS6BCKIwDsj%s{WLM%OwC0WFiMZWV0Lhs@kmDTrGs^>d9EuR0j_f*c2UTki(3&T1HY z!ksw`LKW3z7<~WvUAXQjY7A&#yDyq+&yp#Sp=5GCe|eA!@SaPw?(2cSv=Av4-InSJaI`^B8W3`@!b>@A=kV z5#jC@8;|)J!66V^qcS4~yccXAJj%Zj>;K4L2fB^0mx1oAc*195prE)fI>Y2fUn;oM zAJnkM^tqKVQ*y?bf6Z&IOD&V(x{Wm*PmHH}f`=*x1)MvvVaaugr8=Qfsp_d*HM7GJ zA96XDMoxA;*^xb{;<((a-+nR7Z20WTh&FN31DOpP4i)aA|z-e#*NonF6D{3`+13}EkAi#x`xNftCQReT4ivmPU*@23L% zX3z7D@n_2^I5YpZ1_}h3X1L`vgTBfTF^L3Q{EbhyReFCiuejIgD{Z<20p8V1~pGFv0(apoAEKmJ% zl9nBhjDFmFHTh8oxM2{~C?|+_)|?ys3#K&w)&T*vb1j+}N$(N>z4r26UxTAF?4WUx_#7~u1B}J>UOr6DjWMP|c`>HsZ=PNyyIMAmx1Hu22crF*=h5i}lxdy!f zete_n`n`YN+bO}k{phbwCk~7E6A=9TcenV^Clege^y|iT)%}AGXVJ3NV4mxJ?HZ1FBTaMY%A9_V!ESX2i{+%6p`6fgiv5sg^OHG_Y<{JDa}mM-M>kW>2J z82I0q^qU{Um>*ync!mJW@c(+40m~fG#|#`6DO78-%+glfkAledhIr zG5ptBrMjw|wj4n*Tq+yV?NQs_R-h~xM&}W?I#f4sM-*BjwM@^S&;04;1Iv{eW zo+5DsS1>|nU3DHZmXZ~ux(DMp`@8W`1TZ9K_L@;_H(p6RGce?9Q}bI1vRwd6OSX#< zFYo*{2^Kw0Ha)s}Ix2GdyJ|Ehx~nDZglyh3Y&i&;22^C?(sbf=B+%g9ntV{z&=?hz z14}qy^#~&m5-k#FG69W{$zcY>D3Z&qes#)#)drnnChenRz_ zCOgwMP}l1q`_TU0ie~}YX^uhpyTl_;j^rUI);Sy4jJM;H#>r`1Bb)@Z8sQ)ZLDr-( z0_!n9^8LRZT{&Z*=5)8?L0E~F+4MG9A*PMmmC3zl=BX6sWw&p9-YeDbH=4yn8b z>QiNCXwdhg#jv4BWt7NBS!a+X+Cv7s3-B?;ye6m?*@QyPEATxh17$d~&}njPUIn&# z?5?_Y$d1*y=Q$-f(jS$CP)MT7AO!J%pR5y*OPYPJ+ZUKB1JQJ`qHI%sh>PUUWdMvI|xm=fULIlQ2CLJ>*3F@;|08zAIP)&4L z25!X|5%e<^x?AF5wv`+#Cxg{p3dr9MnWM=1(zDnB;mZ7I4eo^YM+UWV@x1WEsXDfSPfLb0|3YH*%s?~001B!wDzo0EhuqE+$<%ODCYb&% zz$6%k>wY&+AD%Df5};fCTurh^CYTrT)5kxa+`otLe0loQT*CA4*C%f-!4LM|0~$WY z0Zl`EE?=I18J?d$xG?--o-fm%PXEc}vw_;IU#`=6|1_V5=coS-1Nvq7(|j2&=JRji z0woHcKmIwmzdnBsA1-%t2Fd#&yQ+UYeR>D3c(CF5^7mfvIu`^fQk4lLM^vZ82HGVP zkb+FGIzpd5K3_h4{^-K<^Sj~IthXI90eSyQyiBg|-GF(@*B*YwBZAR3BAv{l^C0hs zGcp^<`{9L~Zv@`Ew{gK@)jh1Uc$F&Z>9rPX)YGjyR8h}-Z>QY2RXt?4OtD`&eg58&kWz26(V zXgrPyA>qOa$N+AEqwz@Rpb~g?Jf>ox5;dNd92UKlyUIqA;^FYKoV%J)5RmjO(_Ohf z4NG_*y7FA-d?!3L;k?TGtxxn)CP+nY==x`SrXFHC$|Q|U*#tCYpWMqP`2X2^_ue>; zGjH_&e2PYZ;81v_cHJ)o6ky|beX!VU62!&^aIiS2t2D4QqvbR$dO!U^Rdo+JJzagP z9*WjF0VI>+G^^{m{hmAeu^P?lBhR4|KuhPfM;uy!n6$z`Z;2EhKo21VSS!g1@lYt` zt!4sAZit00qt6PQ!Of&~fQdt$bQ_`ChKWJV+wy205||kuZXOd4vmT5AprHcnd90V7 z+G~!(kIiwb9Tm~J=7o+*DFd!@RQPG7wg^Sk6Y0zrsXqECT}-&tPhqV}{rdcrVybrO zOg!nQNQ7bBNi9guPk~^1@1ek}{FE-bG$)-o=%;|T7Xa2kCO>7$n1t~k!RP(xK7KkJ zK2)D~&HD;e&7ImGm1%Z|{jpMeTY+k~|8(CRhrP>Leo8SJ&tde?(w9YkO7VI6eoC<; zHpfpHjnfxH>r9+}6&}nul2h(uvA1VS`MHlPvo*>JA~a} z&8Ey*&)YxwL2K8JiaHc2b{W+4RmL+KiO>}Xu+A;tP$ADk*-ajMh99>Rw7ymh(H};L zr&3a)pkWqCLb+s$hd(Sak}+Yilu8QjJu!$8r!6GbYsLwO3pNfcyppKS23L+uxxLUs z#GogRP{xsz$QwwMun2pOuz*xLWHc9)An6Hr2#41O76D_F92^6^kvhLlkZG~v8{8!@ z{fdi1EpMtnACzqqC@~*mcgLTi+;`3;IR4i#d`-%z)E=a#oT+ip4iW=(r^d$?kufVb-#r%f>LQ+6(bO*h^GjCKCQtd zBRm;y7%GQCCU{QCa~ogCXIHUa(!HY?H zEkOww8A`rgfPnRcx|Vxug=PWvreAwPg8Wb@Sr!6Og*dWs25eAe}VN zUiW$B++|vkP9imlpGw)J^i{@X8cil)12i-m5(}|V+DHkxmqKB~H1U9Q>paF-DG!j4 zoLfv0g~BNZIriM=pxz4winO)y+X2NknM6^kzn{dUUxL?_9A91d62$xC$t;x@$`l;rKMRUyfPl7&`iJe|#TYol{?6X)j+gdtvp5ek=QjJn&ctHH@3JHX zv;<$rvc17EOVg3LS$K8HVPf!guzhX%Fbl$jBQg5o&K605U`rK~yLRgrtmnJvf-H zjb6UUP=2==rt{Dya*=_3$7)tVI|wEGonOMxh8HH7B>kp7>w#Ld0gQe_>O9s7fxM z3635bFY?gXDi2Mz*%;Ug`2-(5mcK`+5$3IidWg`K1VfKJtLfPMlK>i?vD&YgisyK0 zX!74853Tq-7d}N{d~#J;S@TeN1hwWsV&kpHl52{Tr4%c`F-AZLL8J}FSQ1DvkWfqP zHJ4m!Mx|P?`};aD^UK#HBw(FE=*j3^p%wtvT^e^Y01<6K9N3n8rM}J0)*-q^a~SCLy&~laVXDd zgY%Peztg*yW^ucveP3U>Uoly`7y+M*5l~5Rns6$LVg!6uj3DmI3|ZWjF#<&Dv{)Rb zm3tEtPMiTR1fDZBdY*_&j}JSsZm(11y_|N@MG|ryMwM5f=!1h#+-La{~<} zP;j9rv&MR)88QqC?+mdy@1hLcZzEfS z%zH|aZNt22O>$sO9G;xX&dy`rVa5aP=#$F`R}ua_?Q3sSWD}A7bhb168`*Dz(S4;1 zxC;NW8n#^uB3$FrZkMiKs}%lrrKDdW{4G=~r^$U{68>_^aY~WNBKRv-z+Y6umKWB- zUm2?wV~Q+r6N{r-#%$bkrpStA^BnzVLUoU`IVQ{QO1Y|!ev9Gs9P~RHq%Ow6>x0zA zalZa-7DtNb+~#l*WAVFOD@dJ!j~UM20)7e+il1CvDiAAablM6WK4WqzgBlbdKZM*`#P<8sG!9jBSbAS-ax0h!wO2r znDrDZ?tze&63Y?9$OFa+#n?OOI5q}rZ{{y4Su=$qH!oo{jZ7iZ9%$no$Cgs)g_8nd z2QUKKAV|1|LOZP`CQ>kl9khgC&#?AZo1x`3zk)HPFV+?2tp~K30!wT2LbYhVpRZ7X zg(I(y!6Y?)SuNW2HMS1*QdbzBe1OtaP^o~da)m|PZ4YW0a-9oZVZN0sEIN~%d}=&l zk|VPCb@cNUQ?<(k$w^mOLP4V|EJ4;4hBJmk$`!8gWA)ftR~Vu+%PN$MhGf#q@`a1Z zcn(-I)@;5nTzsCs_g3ue&+*>+AaVn5C8_mGjNfUdwt{0qp$uSr(1vCnQys?EKP za16XLVI!dQ#%l?k1W-}Q1Vl_2O`XyhGlZn2UQm&#wp`-OBnLb5ps9dav6tOf62)6jQZzLnN4TLnz=}#<3z2mbf7jtZ+k6jao5S?S{a1i6X3F$d0op zSYxdCtSPxdK+?`1JrQ%bH)FmVQp{F;gi-9*%t07S&_T@LsN;CQoA7rj@|a+&1*wH} zfBkYc(r#nDz%V#?%hOf$eU5pO3xcf%zFD~A38Xk=JM;nJvDUdI+!g&Nn8^>0`hLhT z#taagFo+dJQd;IEa)KMCq0-V@1`!6BL2U&A!YizxM?g|75X|(wY)9I@XVN@W!Xjs= z^HgfbJXe@O%r%1&c#Qxy0&>e7mQ(=eAW$Az!JtFZd4Q3CSIZhD8P8DRI#sX}7rnU` zne0R+(?1&AD5hFIxG`}F3lzy>nM0YPfT@^8vCZovieg`V4x;D_V=}zO@3JIJu!KU9 zS!JdtZh~oMNzN9}Sn@(q!SKurjUcSz{)cmfH8Y45RJ9gRAWW(8#45x9;ha%zk#`I@ z$Q`pxA%|J0vIbN@4V;x!8$(SPuy8e1omeCDA`@i2sy@l6*6oh8-IK0k(U!}@x+|L{ z;Nuppl)3X3ZOJ7BR)!#hIwq(+>k^h6CIV5M(NI%Hu~<#@jbgE7T5lAK-{qP{5rTD^ zZx*{uu-uijXEcquRMd!REG~{dH;tLz$L;Q<55by;3MfX2FZ zNZ^#lE|#9Y#x7Qyb2Ro6gBJBl&WGp=W6}l1m$F3lPtbZ6!!Nmyh&Euxe2nSY(yo?s zJ)6ONeS$O(mE;^~2ni%YV-W)H$T;Jm^Fk9SITRQpPl;p_IYtbETtcoSg3=g?uea$g ziE!pcCdj%#gkP?nUBY%r3^SKCs<4acpI6x15ouD-mP$`w&lc;bt@UiwD=6bQ^u@Z> zv!$2vlJ#t0cmXo^F~NA7EB&ad=yIiBoaQ`N`k8XlK6iw;6VpsNWSw{3T4of~hz0g#EZ^SzDuMjigs?I z)u>S{rhncjPF%tQ0hqEwUw=Vfv_rYQt9`L<{h?AVx5N%j(0X%*PcofRa}$SIz<7&g zFxP=!)`~FkLbGl+S5(;bpw4R(~I?{2cJ4DwyAT(HH&T7;qS>h#~H%` zFK7Oev_$K&i><3poY9B(rs{QA;K#KVS_@QKS-7gh0=4^`{uwGQV~a(YT{TwM ze%@ly&Y&)CvFP>)e|iHn2cwkISET!EQ-%_5m_ijLvtbvBR*&G3(dOVevSIe zZZ!`p4&&O$ZHzRCa|C0nd02LTg~6m@NWGf-)5q{qlBtAUUJb7X*KSQ(~<#k~yl z<^bykGY(j{TVgB5i$hIsK+VE%|En-wX2wCscoUd&Ic&dTswok+2USrmTW!$2(u9Fc zPdOXU8>h)_FrK$m8dgD7UdxuVW#|g0arpKaJUBzDVaZ@nrNv0~>um-urfP>&(IisE z5>gp9SV~-kRM9G=8fTJ)?G!7KDg-rcS6HIZm(FTBG3fC*k!mp+&w*4%&&_WJEHW@Pcrb0^-mX^})^Xn6 z4Xj1jgq1;QVfw-J(v5W9euputaokUF*iD6GS{lQE0l=fEfK0jWjuJWk)6vsIp@ zXr~!1w)x_ zm@n2p==Onc)Fltw1*zfhFvfUz23iT{;kXNBU`!}(Id8&%Cw{(!cDr})o7+kVQ8f?8+X__P zx%l^S_wMlNSdrWggdALLr2x#!HBVK26gx_NG8dPT%pvn2)IF_cZ3B`MW->e@n%cvD z?@Uv{s<~79qcY9zus_~bum*7gY4|&zt}X!_u;u|945X{)0ggV?onYg~Ea6||P zAp%SaLb$NZ03)CSOc4f@g-~GYC=46rbIocm))_gi@7qQZAMk>2UZ^ecm48~bV1(Mmj@dc2Gs&POw~?UHx+a?i zXswT*H*ngPyk#uyC0BpTB}WQu2$wpfUDkY_Lps6C3&@wi$yvSwrKQIq-w{mf7PDDn zLBS2Eg$z((`>1ouCtSq|ByF;0;XqZK2Eum<4-peG88@)+y)_RN(u5-7nDD?LkA+8C zNu?}u5J+t(ciLeMrD0kU>N)j<6N52VL?gqOEub6qagZU}LLeEoMnNGJpvEwOe8{T^ zEg^uGV&yI2P)Y=Vwhj}m03niSooS7}P6BYbly0DBqXwdx2Tcg-EUUBRt)kNB>(t?_ z!))(UIM zb#Nzkre?EkrP^negUe$cDpwqX>L@!aRh z>_?dI;TE5#@8K4^%-8U6A-H<8>1YD57@9t70&p>STDfavfy*@&s3{I5^x3#L4>X63 z6O<@j71DQwl7=Y0ktK<&L610C@u$deqJAzsBN+B?vuV*-N^=8iI?^CimKK#^6VpKI zV;(Z>hjoh6q9QG7ZXM$ERmLA439}W)9M4Torody=AqJibhX_)LF{2bxno9&3!4!Dm z0HOdBfT?v#6C|J>EVat|X@>UH z!ByzMmTHSt4y>%ZRJ{zxU+TbigE(3Tc1CtLfhDp1>al}sLXaL2PqeeQ6@)d9VGNiSy`?^Y7n7nbCF41o$b?s@Pcf25 zHI5xX&7n~rDpX^>Nr7X+e;FC-`-ROzMGYlZb1SsAgb09;=2TElpu$>f=>WoB8qEP` zMgk|54Z`50##(7~y%kOo5$E==T_^E10d2R)>@0xCOHhAISmo9jjQU|5d8&|fSSTU@ z1PobWJYvW~fIKFMa1J#!q4rXSIg+6`Qz9ZP_m1T%X(w)S!7aR4C!xcJod%r9%>*qv z7Rvyqd0_d>Lc~m4a)((h^8J1ziLK&NgL5;J(G;T&6|kII?LxU}NNypDg?G?euB_z{ zDk~XNlnG@dcbIaIET>Q?rX1(QW=3l)(Q+{au(En_foHblNWnivxnk}Ksa$ZRm*6b+ zm1Xl#K?*&C9!Sb0r3NB^1XW&IgpC1#55g)>A)L1kDG8;t91`t3H$oVAvJ25C1Ze$YOk|3YDa1Z#D^8iwxaZmnZoFTKqr=&3i z+D%hWUuB9V$6Y$dsIW|P>#Q-J3P8LuSV^fN0}5KBl+h@36f%hrbIM}Mv<*ozWNBu3 z!b@;g27(!n8&=RZj0aL&`X>Ax;v&O+t7VLr8{?20VNQC zBG@Wd!PZ#m5>i_$VXJtYP!jY6i(ihh;&Z09iphA6S~IQQ3s7sRvgo7MVi-IJwT`B? ziUVlRn%bI5Bozm#`vfY^#LOYkHfXsY9ZkGnd?U+KNoNThn2K*g&-yl)2gc1k0k(sY z3DISkCyrvi64*|;p%Va~lfX$)tw*p8@(G+#u+0$U24LhIw}u+(8AcX)Nw^e-5vvpi z-g>|RCd?YDtku{+O@M+Pn_t`NqHeiI$9OZcdBJhWwZwt8sxwxQGjJWMsnTTw)zV6d9vQ!}t>Qb;>%7ClDwv5XJLR>Bm)1`6X>lng0 z3lVpt6uZ&ntHCyFi}~6zvabki7gMzb+W|oT?Cy@c!~QLJKp_3E`fzxM{=d(MyPw|j zno)ru3^8H|UZU3>u1*vy4%Ipn{fQ z0W^h*NF=CES|CGLy6#(Uiqi zzvr4VbAUcsnup4T4X#jf&4}liXsRJFSRtr2p-f>-1+>T!2ffiA62K`XlmZOAaq`-2 zTVw-G8C9;#JZOSTW~KkGqa(LC*%r?jRk6j~lUK1zq%PWsl`|g~R0U4y>S7`8>*`{K zIS0S>l|s@a#qY92S1+M;5N8Q8cwotcqN+xj2Te%M0;U;J`o&co=Sn}*%hIQB7-!2B z5ME)xk(L-}&WHh?DrW%kgdhW`4lPWYL8X*)$^ZzI5Evs#A-{4RDb48WFQR7`P5DLq>(H+?-@tnB9K*(JIuDmj=TQ(vHy7AU@yB?@~B zDlfT@Xy9|hs75qwamMjn!)6pypCHXc#T0WuVrM;24k)CNBvfOI7y*Vk?>wUtIEM%} zMr*}|q@iD)YDEcA{AvM+qyRGh!30?s=)#w-tCuie62{DxjVk?OF32nW?MSucDkArg zj9!{j+r`4zSKGxZZ;slYxae6%v9BOnh+SHxyhLL!p>ou=d|hmD)_sg=?9!r>bB&!T zf?0AKiRUwZLZ7nDL#2tf%p>5T^Z-z3TnMKK?v3=A3aPLF#1UtmgOFp)h_gUhA*nZ1 zUpe+H(K@m&Q2kp7%yrDi5~?Q|$Qb;IS6pyeqvoTSlk(*@Z93e)|E$i!;)_Rm)$`b1_LFEMuzvNb;42q2A9kC(BdDJr-l1=RP z>C!w@QXwS~^44M|n4tn2Lm?+tA`hq$3IIzDBuFwPDDfCmCY;e45vC!ri(vl*QD%wW z5^^Lxkio&%(byBOcqP6|(wKSCQH@(Q@((ka=#FPQ-di@KPMPwtnvdRI+%KUiquT8ocehs` zUcIi4yZ>=-Lxp;E1H+%Ee;P<5lOL<>ueftZclWca;7}p&*av@d?o;+tOUNDXc#!wT z?s)I+RO6b%l6&sYASfN4L4FLKD%G2+Xw1avDQ8`4pj`^_*tIs+Jk&m8ym_b_;J|o( z3jd7eq0@Q))7|a-FI5<-yW1actG3ZD-?cW@JVbu1`s6uvsKpTxE4tQj95mQHRM zC>RIZU|GNKizeKnz%moaCHKL=X~EI5O0= z7BBHl_2+}K?O+>!clcP@-SMZ>K#VZ)861ZuO`k|`6~+tG8AG?$oUXNbjMt7PXYyK% z7l#?FX1pZCy~$=Mt|On@wRWP&w@8AJU`2KAv15R|U zwanPH9mXl0w-u{X`y#AC80|)D5U7_M5z#*5H2gd^us+T#592nbJ{!W7mn(ixQ`Bb+ zKkx4Fg^h?HKUOI?_rvbfZHOjT+8vv6s-C*m;AGbtM+DK-wT7}?Yj}FeF9a~twbo;z zPlsdk>F!|MF|j-Bt;0tpMlUa6j1GJX8YOunmU+&oQTxNe`Hi z2)VG#5=c+I;nW%~Gy2lX*D8@*BtoqEBShQGlXJMzb&XVZ6oc-P#5>gLY<_q{td&Q|PI^>?R^hyCsEziS<_ z$~*V_>i;^Uen~UK0l2OH_1Nq_w!h=%4XoZ&Z{Vx=&wmJieiK~D3Irn@zN`-S&8zA= zwfk^e&HU+Mf@d%4TyEiGH17(5J^+R?1Y=sIBjeo9{jVcqc;WqF|K{D@;r^4e)!QmC z?dz)l_5CsUx9xXlvdFiGj~{o<4|i&RR3=Kr@4kKV)lGy_SYss&aK^k2uHakry83yy zuVauHzOH^g+&Ae9^t#&r`CxwfVfWF62_~<87lI$({_yZ``@udDs{LE84ly(LHz$vBdveaiRo$NsTv_U?GR!GI8e5I_bh zN3etj6V9cx5CV(6G09YQM-`wo~Q+>F1Z;7lWmy$yPx_kQDz5aLi%Ub{- zal#4hC}u<&!61P^IIe^jYUo*@2JOt5fk#OXG?kbbDU=2rdKF$82bN-*guPzpF~jL_0?4G_UrD+XN^VE_Fms~R_xkH5dyA9qa* z@O%!_Ku#RH@&L^tsOOj_@rS$W&V5k73?JpuhkqhB{}NIwKOFueJ>oXRu2#LDgmuB*Z{?ZgdR#HsAGVKJNJT8BDt{ya^k5QO2Y;C^QZ!TeTVNm zI~#F8V?Nz}^9`uu|8J4Ncy1bNTVWVxye0T9X2EiJKM%&QlWDvz0Lg&Z3w_mPK@429KS?ObpgHkp1CB3Z9OVr9<8p7wX0Hr|HOYi+g>guQHG3TN0c z`}kBmV^rb1Y$H5nAm_};L^Y4E-0l44Vr90GNvDWc5P4)6)R;L>mC!&VEC2-x3dM=n z3~{YIfu1{!xUkp)p{O>)x+oCqWo8@OLF}6`Ufei*18NkOuD6Uw!j_^(7U>voMoRsX z@xn6Tc7I>kx%~K4Owy{TSx@a{8*$ww%sTcRn~`}EinDBETq_t-Zl&4ALIzxwZ4@1(bwE;W4Eun8*Mp}916lPoNXlCKBgH1>ARFgn{D*FyJJ(`IdixRRXZs; zSHYaO9mC>diAq=ZVK_LNOUli5_kC}?MZlCo?nS&>aesjOw@ z$o-*gDui`h$oWrL;~;IUCc!X|NZYffQ%fn?OZH{LR*!DsWIDCb8jagwJrom%=r z^KQ6b(ACwne0IBc@0;672$4WAXhAS|M8Fv*_=*UavzVb4h`#Wfyi^$+mSlV!|&?t(pQ<_)M&jOwvu^Atdh=#2o&XnBddYNhAP82 zaLO{P2*FY~C^2W)OW?gnkRdSG)6rI^yhsGx4fyUDZ)_9Kfa`V1c%+@-PQsw)D=;3Y zWu)`P3f2+?jAD6athZ|&xaA0#wUvvd2)L91S0P}QR%wMP@!*E> zx4?Bh0*){o)E$%_n=jr&z%FIg+_6fLVO!}?9(?c>7=^Lzk8BBJhY(^hRZj>JPa#AO zLh>Wk+tD(FNLL_4m_iXxLM#)qbTK7f*1>xYD+{7O%4#xYOhVae$ZmB(`OmxNeW(q8 z5*Dh|-d3Si;nRI{97gt!plqbxu9%QL_=2a-G6fKe4|D+#O99#>K%|%T_NDNQZqg2M zddgWlM2Pa8SEY|x$@Upf1C*CmGGP@^(_k*wTglUTFX0(%L!h8tTHb~|=UB-B@|=Q^ zYuh169d?60!ZVmz;zOs}Ap{rH2}?P_Oj4+k#aL?YtwxRz%AlgmVaFxsj#3E?kOW|* zAi>y(p~km(iK_#YClVC3L!6#+#(1FaHfzs;XYDh_84t&}by(sv*$y%07o5)9XFO1g zP;EWX4lyG@d3x$)fU*_9IRVPkQ_cgF-2$2!0ZKa74pGQ}6Ywk^{?Q_~?GR4_lr20P zgIMh|PVkJi8<09wHRH3x0ZO)DV`g`UV^PNK;TfEYGSW;tL@8BI@Qh5tGe{6&37)Ys zc*ZjDtj9#Xb_gC+z)W~X2ihSZOu9Vavmn&04y{I6XCYXV4e%MA+YeDn$sRr%%GjQr zWeT66(gXGJSux<7gU<$PCIEI8A>_3I)*+}gf{=Pkp>!BoDy7tzS}q_|S||!2LIyJ< zDfb#{x1bwg0Dx?O4+mbUxaMZC;C-kJu54>Qd*wY3=OB{r%*4&o?+_^hgum!Jpd9a4?I(dbK|^q(s(VoFaRkO_q9lgol(>% z!Hpg8F!ByB9w^(f^I|q>%XFS%TUKTj;DvXB%KwZsv>HIy^i)zs(ggd8g zERb@d$QkNg5|r!^TeQ}_9=K8lT!ngh9n?TvT^Vo&spVLrux02I>g{LKSEF9iDd-t# z`R)#X9jLdMswdP-Cs8lr6171|UWR)4I@H_hl&<_{LY5v~u!sk5D+pqqIz}aFLcJ3< z>N!zwF(rGbHv?fFBcxNPxA;JP)LRUr=b+v`0N4O^Ce?mvCcALNYSagoqP}P)pLDlh zMkQGc(Se!;1AG-TiQ3aHH5&v-$V!#XhjSO6n~&rW5NDYi++ z(v`#bER;TlSj?QHafdC2@L4GXuEJ-uPVf@eaXmPRnfdW+e3CSd%4X(}mR1;sqmr@W z;K_p~s4!XkxP4R-t&K_+s+G15^eqHz5}y%B7*A12QHIaNDts1Qw1TLlh*6IS&jLEIm*ko)zQ0uMeJ`a(7!<$`bNaj2$`4$PQ*+GAH7xz5a)nF`xs6Iy;XB^Vh12(?lXPlU$6dm;(O zz*%cG@C-TVlmrrDE*V!;X^l}PYwS&oloovTB!F@f||Lj7W@ zo#41e9|@ku(x;h^X-x z2q7S5N&$eF=3v2^bh>P6J-x*efQ(nTWJ*CCJ2trFY2k_DFf}~X{YI}cYLaHB^Dmtm z_d=gEiu#KgGwpwlaG{QfS_@|GV~fL#7?I+1V$V!xn0|}5=yOK%P;qaq(UgUOVh}3Fm?8{Q=p_+c zV8R@Q9$G`KvfNQeA+*F`W1VEeK{$V{bR1O6789=4ht;}HAo30wZk4;p^$Y9Kn^_<9%;-M8IkAK{m~G;C?{l=tslku z#RS_%#YSr*Gb(mUF&49XUojRdl{t!Wf_oPjj$zGMd@D;d;}WeF9hbrVqYH6*lE;j4 z+U|O{d(w#SP@GNasq9R8X9=BxOkyxJvurqv0gwpE3l5>9mS8{xfYe~Y5ujmmJ#ror z;E7a}1I{>gTsRK^rG#qgmj#a|h%!qtUZ-7g$rVQq9$X$j4YFsw;*!Hexf~ocHdzN% zO8LAI*@DhXE+H{}MyE^}qGBQL8=_(zKF1IZn~&mmSzMJ7%$@ouv;%fvITNiufD*IItZ>-cBZ9WOad;+%}{`~`_MxCDLLx?PEX zqFCfS>MwIkk#H#E`b->Yb1sT1F^2)3`!I=E>sWg8n+dy2@JePj@6~R<+xx?nPPLeM zKF2+&^G?K;l?(-DPAL)90o=&xnJ+DN&$WACDdS6T- zq*J{pCXYwLLw?eiN)80Wpx5sr#!Ex z(j)l>-Ip)PR8d)xm!{RzU9DsFD^pM`R_x8g;l7#nuGT=Q!64cwJKd?zPbS1)=~P2L z-@@06d`Z{wW!TU>>&-G6>ge`%#XUU^ikjLSYY1c(U}+(P)M#v(2HGp-2=~-GYk_f+ zVeUNTTvKHz^2!3EvGxcNQKhxFaeXaT+7bjk(^y-?AvT(iAc) zt(6)R>J8+6px=2Rm7<&u4j2zi__&E+aDVQLzJ&~HymQS8&gf?`nun_RUTY#f654X$39^Ib+VK)sPXRfRplH(M z=_yxdymlZnLSeO2T2DyASiwgYDP_EN(xhyEL%08C9^+*O{>gR}@SG_ir@K5G$jrMP zzcbd5@R2nnr3^SR1*B!hZ&TTF6~*PYVs#kW5(hGe8Ed2t_mLg=*FNJkkU36%c{03X zYzj#G+2MhIOQwKycQ`hXdHZF@cxvEZgehs+aWVS6+OlIlyep-c^-iNo#N?vmj4J7IdVg2Sf~nDbU{{K))9f2q<6yH{+-x@{FKUg_BCC=&rWUIk2$cFAWuQVfmF zYi&>R6vbYStv-zu6A3_!Ob;HLT6KEs%aLNT9a@%|9z5~XK6%bjY#cznY^?~Y`IE8L zsOFim)l(>zJ17xz&O$2)bHXyA5EIB7fFyLO z*wd2jgGMHz_z?z>`^a-ENvW%k^C)5E(to4d|AfY9kK}`YImK*L21(<4RESHW@=82J1dSIEiLkY0fBCQ-X zd;$Yk@eATk>?e#j1C~tq1;Np{0W}VL)W+A@Ot469)NqUk4s3lZf@cAbg`FU6jC>6| zYo7puNda|`=&_hXvH%0{tds#)!ZQ$U>LWaxWQ3>itXrtkE^AvKWbDQ@&)E9*W#Ac^ z5o8>KXT?=Aa#Nh`G?POACiQ3jHnFB=~AgD8{AIoZxGlXMxqivjW*P}AwHCTp$q z_*Rn%ov=APL^0sd!9!F_kj+64ux4?(Xm+vGRP>N4N|k|7dhR@yN>YrF!wzVo3}sG8 z0|8e62}KYCf@1l9G}!-)zKJc51!8{vwnK@QqbGq$v2UjiH^hb z#w6E*-eRhrKrfsEy#jDdX-Zm?GSEv_fL_?{DF$^5dRN3G6GOq8gv~)LZq^%P#^;Pl z789}udNWC^`7z1j1NA{~F^Zl8di$v6WrNO6!F4goNw0nibcQ{%F*Fi3n2v{rX4$j( zG0AyWvQM7km?WxGmb@!`3}0nplB077i#?;v2&pNsNvK5#Q|~2^6ftk0#{^0!yi-;f zCaCaSS!#@hoFM|WF+fvfEMrcAjFe9~w8iOxzHC2BK}z3iNE)yBT?QS8q00XkjkjBr zxSb~Hg3SD}k~LEUuvU|_`IFvLandBCo9Ipf`->WYu7qBzfKDfu2ANAG zdllYhsj}jqu#U$kwU~&JpW*GWZ!B)@F2&p3cEz@iVyYtL3*c?KGRRy^)f3)ElXx2e z$YsLYvIuXtq1N9lpxo?Z3Fse>?o+ zKh=j_T9ebcVxe{WEmFiNApzrtC<%?%7Clj8Ld-wB&{`JALVyd3t z8J>h^7zx>yXtFFkqcheGL$(T@^=beXheLTyqE>=6K@pyz33K?I@T{1SJ$QyoOEilQ z)Q4xqcyA6o`|?Gw{h&?rP(iPaU}4{vHqKc|v4N0L#efsqdLo=>5JGE1;h$$5Qsfw8 zNO(_)_iRxW!jc~SIH_!Kxz<>Ze%c~BcOoCZ%9`MX;~~OK7c#h4d1w~GzgYXj;U95i zYdP)mandD}isLzWrZF!+o+B!S1(e$ENmCKo;)NZPyj zQkH~vCuluAY-)`R4vs~fRyLa-CdyN8e8Y$lDbDHj%=FOUwT-T$&thRflQaY|NR@^N z00X=g7D?eCQCv6-5pZ59DZPZkA*vZOk{C~grHB)|VCCdO-iWfoGC7FrR1!_F{{p2s znrAD%@@?!#y5LNy)|9R;X8OLaF4l8%boB&*XQ`CF3?=C;zK=aroadZnL&~;B|HU$P^q*r5E`thVg_?9rJx!U;*cTk+KMD&bSF4s zfyiG+B`ro5gXOq**#<6tNYvWL`fmp?2_4=->{A(>SM; zW_s+||8OurRWaLCEYN)=S*)q%D9H)ZUQ?`aM$-E#D=E6->s_L^morVqkD9pNS(3BG zGe!_?anQMEh%!;|K2@8Cig8P@G?-E^1(u#dDU^_0LqV++#3+fdlbAS%Lg-dg=qx~5 zVndihS4OnCNW}y>7D&tsL9`;H^+z>!G41jid*Xs;$;=d@EoS<@vMyFnbCh*ohLYqJ zzst2WW5g7LQ{AV-Z41O`iL#DI8r+RIeWY28x8yJpT#}6CSn{BVTVO_vC&X#NMQ`_{ zB`=q5XbCSiIMpuj=FTR=UrxKSODcw(orN1Em3~m7V0wSO8=Y=qHl&rxO4bwNX zKy57MpPXax1^FkJCt3b(E4B2jRW#FN+gu?g9(o}Re7$3IWkK658rx1f>Daby+qP}n zwryvpW1Ahb!;YGx`-1_yid4O2ptq4s!21+d%b4#OwZ zLccbLpv!+4j;q1%*oTy2@ma(2iVq<|we^wlif{18PU-|`GA2$!XNoAM-pJr%j*2&+ zXPWbPF<;#(fq1@^GW-}Q)K*~$$*yCD|y*tr? zMFwm%am91?Ptz2(%8*idp!F7j=Vj`vS(DJS!sWft(=+l@vfWW+xC-vV4tZtw``@<# z2W3e(BUb4T(G{>g;cRT*6BRG_J^?NF8sd$_LL1@V=G)Ow562VHLk%y-MRmQd;|FAf zVbJ<%KriNVuLsRM4FYf`rE7G7w|v)cA3FzHwNHS_U*vRmiBFYa9TtcI`=k7B)%foE zodGtolmF&C;g&%@h(BKCv!s-Rf$7mW|AY4Y0VUH@UGy%f(pN(yRT#wnc?`AM@*Hj4 zc9S4kE2t6Dw|*e3^a)7mueg_vX%IKSouI`|e*X7WHgZdI83{IA0v|zO*}q#>D(1yl z{ob55ee@cTn&9gGmFuQA*P`#T>$nIAduO=0F<(!hyMCYSR0KsdNBJ{)(&x$`SI+iK zsP>EZ(h=OETO2I-Tye0vBOF2_(0P_8x9@$p`#3{`)APFjW*gw#X3|*G&+E>2=@|H( z|G(47K|J~!ziznK-`7lky{~^ISdMvPGx8&(7~iIBZ5#M|J$CV2e~tHwg9M#JMF=W> zv(?o%_wU0>&AxyUzGF>BC-DZibZB9Rs~y+COL71A866Jl3yrf7Aicptwv8G>M4(T-)E5{rY{M zpWIu&1zuQv4|dSVqRsH77X^;qUrfK(*?m3vc8r8zgkX&9ij+dQ>!Qq8L4#YArig^e zl0)D~%GL(B!u4MmFX)LinC00h6#y>?s2bhEd$1Jo=Yz9y^m5XO1%L5;LQ_;+!tP>{(}y5*pcdMYBt#X&z93ECh~q+wkOtjD?Ae}a)v zS!mfnDrP>ey&qeA7oHFI`pTNoSEoU+&TlX6UO)DC8}5LCz(VWj&X6rk@yJmhC;1X3 z-HOhEvBNlEfQTlRz$uFrOU(OT)`1W;M7m8N#QFS`li(x3eVJg|k)^H&;B(bH^Zj-Gs^-p^m8cl#9x_ZNvde-@ zCewtFq#9e{(0`Xb;t_`o-O5dHNup>~C8;7Hnu&n(2d+fkct-Wjt#ZGkR_OYP6-gYkF)FwCnOm&qy z`_?|q+^t-kpESuBuYI`a7W2^4UbQiW)#uxB6tZ|U`#K_!)3*lj4exc>sb-Q8(TH95~TU$&3h1huAAHN0D#!!*=0dEWSl z#|bl=COf=WF+{1|BrxRL4KT@@n8CMs`lu#enquSD1hs)Y__>On&<6>Ff7hy(fHsB+ zS1~Y(J{Z{(a_yKS?D5lkM)FQNSj^`4AuZ4aH++@gxJ3n_xHoq&CFC6_=4$Fa7i!u%OD_{iBdzD3Hw+MbmX?d{T zR7SC{g@LF)bY)3Y4h}}@yDFePhjLoYVi17_9n)nwieOL z_+#Mgwx0fgTf%I14|3otTW6@a2HeYy{TKmMRg__jH?J~e?63ca_cPTdxb(s_vLiyO z7FYUF8s`)OXp*?k?4_XaQAHfo(mFswc7!k$1_?647;6)3CXXW!i5gYoCx+vRMxo9m zfxzDpp_)c1(F;d$rj@M^)=oe%HtQdV59{Fy(~_I~888_ZK)7&@AwnmhL`aM!I?D|M zKn5}35V&|Ecd(%F{sDQYIb_)sk)3}k+&Xj`5`Xp##IEkNn+GayW@1?-(0!LiaYau} zuz%C%l(}=0dDN%4w5f8t(@3gW1=)}(% z5oG=nh-SswXU)p!+70U;=6S~Wdre$TG7j|LAp7;Kw#Bj&W|}l;>FjwYD7;=sdUYK9L!8d;Ai&f$_hWgL2CHTzOUi$IDFCc#K-}JK# zVVy;WZY&?uA~OS5F`6n6pBh1lsFIw=p)Y$@BaMnrQDU`b+ABb%v2aX-edfJ=kG;@? zqAaq!^&|wb4^nJ5gh=W++p99Gtbrep{EgrUEg(c6f(qYxgL2aY_98^z1G@roqCDyS zw^Z=~eMp}$J#7%zL7B03SQB^IS2^{q<+fhyA>x?{;tO}?Ton?Z6-ier-!cw2xXwb! zX*dZLMhT9X7>wt#ZV`@Gp8WuVN|f7D3c2)ZL6bh?U)!Pai>4y?(rBNfp|+rGS9v2{ zDlBb4rm%lDbu~k*6JvE`%zaD*1vsRG!M`G=T`1%$Rjs!ou39Ur0Bx^%sb;`>(sPl_ zSepEAyKHV8x*l1VSs7L%-NKVP3WVSscfbeARD?T>WI{Mk8~?194$=w>o{*aC&#k}8 zH@++&gaN9$1|Blg$vG8U+G8LQRnzPGW<56y?F+BB)4ewhN{wv1DmF$} zgL}m8R62P5z_!Stx7bHCQGEY+czf71zU~+X94gdFbdb4bgun-JkQ|6=sRf$t@VymDx6@Xd$qhU)@n-RdxbW?@L;jo~W zfS1B9gYBV^j7Sj+mrKBKpY;q5xt=krff)VZA%T6AfJI<_h&8;P+|DCcia|z)o8hH@;@Pv zOS^B|UrRuX;b+!8I+nq8O7{eDwkd|)5f*wO;}HM-gd{R71o2qDBYaZUt9K(*CpU|k z`glkXC4D1=1}bWPs~e@1?HQ!u1>J%4NTitJs;Y01dGuH!|2&if6*^(Vm+Ty-yE@`>#h#2Ts{UL46-FBq{93A z56+5aEU%a30vayyz_Z&e7M574gwXUF+nc_UZX=#A0_%k|0OKX~Wru(a*Z6KI1omZN>0YoXmskRK3}AfPyk4SQ*! zaOG)}XYeyw2eUG98GK!~O%(e5lE&2L|M6m5GpmV1+R>3JP2y=Ap0jm_O{YDf&YGP5 z;ouHhS+%luQje+ncvwG4?I;gMVP@kl-0@p?n6`&q>sNz6Lx;{%Z(8OKo{W9$cNjZj z+lRTg?P%Jiup&49PT@^G@Za*r5TiTL_9OPV7%hzk2~euXTU0-y0UHHUD#eNw(WX2N zD8{m?BzHw3ZUit3iHv8L{_E<*Pp-b}R9H2It&%%+%RgbJ^=}3yu_I1llEinNjvmf+ zpQ2B=uaeu{#Z@Z_19UgBk4ysnApk7UxOtuO?l$!+{ULquO^rfaU znI&Yaf9AMYM8hX0_*V)IY0vQ@S|v(Z93Dff@NegvI*ce*8BmiP_#2E71QPI2(TO#>%#j<8X1=MRfi|eCc+iUAU z^#pi)uTWhZk%plzIf16%ueHTbpL!ieB>bvsg?enE11=vER)V&g_DI|D~EhJg1 z9=bg-Mv~EN3yTPhJ+;WH^HI;O8jBHM(iBN-(9*xDs0<6aJNK3^h-B=jxvFLcATpQc zzW?m*VT<*Yy9gMS+g$^U)|e+GTum#b^z3_fW@yA}DAln}!s7%)8z)eKHmJ5}@~EUi zK9wY-!DOP&9j)cxQBkPv&~fkX7!0^*A(F7CHCt>OcN&sX>H{dCZtw zC<2F>ke=H494#||Rnk~e#mkIlvHw!>hJ#qn zlZ;=WeC<}q_w$UDKzf_ir25;q-?O6nP1an9U^OP3#d6sp34R*YHxx^GGntLWvgTbs zbE#HnhNYW-0E%6q}K~DMF+u%ccxQk8?Yl7!ZA0-0Mi*Jed3PqmlZaK56I=6WWAK~rXtvMmoma`Yxf2V$gSqD=OB9zVh`n2^ zJoY~e|Cw={_|{QQqf&}-nJ+?TkY=#_^{SK~kJ}#WpkippOiY#ASIH*oKTuujvJ|Vr zs=6fAumm-y%^Nl0R4Fexk`O(+iZsN7AQ$I~dOZ1RUWv$6Pf%ukWu$c6Io9r! zg?LO7HqPhK9=F_yq57|9)||@4Cm^F5FANwg+M>k3gI3s}488lm{jN!9g{phDh?F>O4^3Mo2b=LN%SgG$?ce-^2z9uQYhUR5bWWP#XNV2tBGbrzCv42p!(B4UA&=sBYB8 zeG7iTco!?`h;+EggA1?WuC;g*k-4A}Mzsb+4~r?_(^zjGGSRvW`BBwINxBXt=VFh{ zujbj@#z-i(5~;>xL;WFzjxJWZ%isEwz@~=T%d@v5$-IULFfKrHX(V z1Kc#g4eYY41pSH4uTHYdv!Lst`3tRSk0AoB2?3ehh*~$|niMwT*gO*2-lBgs-zErx zRe@bKgv!uaSu}`>&#F6C$Grwri~m4vt*5GZu^3k}hf$z*f^&J2=|Jrl1Kf5X7qTm0KLM00`3G*pz(j;Jpsx&wlvD#Oh*R@X)fa4%E4OA zV1hQMcs(oeJav16sq3BZp)?$8IB(T|V|@cL&l$ujVaS@qYtxrzo-NMCnw#b8VS6eS zFIC~^z%oB|VU&Nnc_Ra@2NNj;h#=MT7H8~2bYnCZEj823<{+s1*q{wG`XXfSGlZ{^P8x>81u z*e7+r&bkGAY#p@ST~EH=cL;u1(mvI^b*qjKe?2|#wx+s+JH7co2F?vG_y5e@9)I%W zV@>GtIx|LrBZQa4UQU~ZF2*f9DS@7hpBkTMc9FXMT|=2628=CUFW|x&=>ES@C;a~p)ae9T%^oFXT9uX| z1Cs8Vg$9iep}=HC|F~mhfdP-{76k`EOrmCMo(DGvQXoW~4r%-fZ<+>A8V>*?kxMpJ zBdJYJU&I?^Ptzf}3?5ZuDdsZ<8(6~}$RVofAKT&%4fI$KL5-Ykcstu##$z7sRae;vi*NmFAEadvjFpvA7yDG6QEaI zV@{{aVykGfu++FdSj%vtgJel6F#A;`8Zeb)(Ad3#xPr%Zd`}}xYACQ=WCju0EgE3p zQDz1JAtZU~qa9hKCM6Z2`YO>38_n>4>+gyh><$!!fq{*J*E#F3cihW_nLmrT!-PI7 zhxbH}kUdxO--`lp1*S~v-_bi?Gv`BJhW7*)NgZmBjV%kK7N&Gx@d*#eMC3rOP@3_r zhxm?!obCA|QnVqm!RB?tK>;#KQ(R3!ETJeV%S*9iHDYsyk9+ScqyLxig)8-Ems0H} z+%VGtJ#}n+=j?P$Z^pwP_aoouS2*sT+6YC4O(B-I8u%+Qn3VVBecryhhun?>bNbFR zY?KJ9_*wYKMXp7|Rt!v^Ks0(yGgKlwiLHBj3W zM_o(|UzwtzHeB}3d>d(%$ZaiYFA~PC>NhyYH5+RSS0eMb+55LNIw*=;UnyFT_B(u- zO>-nST~Na_NE|Sn3Y06NQ^RnH=oa);&v79~Ou>W4M2O`9P8eLm`18MgOI_=JHPAm( z!>&Gu3i`_=-f4Ar+wqRscDE|8TkbLplwMu`v&TUmd9u|4N7d;E7nJZQnDmnV@Uict zYB(ua$#{QYC~P?j$?@1csKokPPHDF30!#&}qi^T^Fa=&@Oz)3%uV?%?%v^pYSW2AZ zYCRf@c$rVe&o~LjgG^`b;Jdl|HEiEm);;_r{D*!;@fz3{TLao~unoJqRrAk5JtUbOn3^-j@)??5aFpl9!--BfkTm zc6vEe@F&qf0tLfOgGbHwntNUXU?xDj-rKNaa|;OEupNSE5RlviSi+~&tT2<)YhE9q zQ?5}{ptsN5x@6Bc3P5Rerw}3*ep@}UmM$Q)HU)wf*ejrFcI9O$?RqRtXoO)J$x7od zW-h#)R}Lp9$#SvZH?`^{8K=&O=UEeU&8PULY0J+8ZG;}DCtiUq)*9#b@KZ2F#E9U1 zh~OEhp3ckXoGAEQwjkvYj(tJUxlW)UTWBI?K~eN6WAHjKsMdQ4r~13%I>8o7&@|6Gi(&R_^vrh;W%hvWVp+$T zSVO&%DbqRJ&2LlJ+&ti%2p14X^~5N(~`|^SzLj+WXCKhzdbUeHd&MWbZ9r^P(< ziN#=aPJ3eu59CP2%9 z!Iz0SlP&^qaM3lrGp<7Fahmn}HqjBTT?CX-HM60rmKlL{w3km7EI@5$G3~d@PN=cR zPQlyeSzX!RaA>!2_ahiWozL!XGRPdYFH$GKFXIL4gL{K;CelE0Oih!*Hl&8L7eUZu znAT*JCE0~lJo7Q2c!ctgrIb&}FrLn5UIs=u;e4G7hX-`4?>j3?Zee^FcBZOb`M69+ z!I|f}bnf>eXqD9qYjwLV8;sJ3SIvliK6SvO2xHpZxv!ujg## zO!ZURQweSvB8k&`!tY=NC&9iGj2v6F=9;iAjTy<6nzL{)-J3M)f_h)*#)$j!FB^Y6 z5<~iWbICWA(+%xRB9%KwXNL8zq~H%4=;h+pQ&=JR);d3+t@BEN9Q=4fyiZwaLT>qb zW7fO2Kc@735&NJYVhCU%T3HEjp(|j;(S@H^Iy4UKP7op8VFy8^24OQ3g4>-@Ap&); zB$voP4sqXdTeXg?Uu*`4z_W~lKmwm3w*b4vo{@DZ_7W9n(Bumw7sySR8vEfdk_YwC z$}bd3f35C2+(TwR2~%WVBs>>h=`D>c^@$240D#s>^gH3=_U|^R4ypyggP=cS6^4-r zYXdRQM^6o?ky-aG%+kC4gCPP=|3l5E^x}~KE!95|=JRoHa3@_)e{Je9Ze9wj_!Z0w z4K=4u)XD`?B$WPqZYXG;;)F(ym~CsQNTsRV09`9~7e%Dj9o1idT)dzaraq^LS)?|? z&k>;*5pdr;vSml_{izpKEH*u!z9;>}J7uSd{Y!&bzoOKB*t7kh8DG{W4d^k-(a z0~aE#AHTV`^Git}NVBRc*GGJcoDMcFmizsPrw(H~7yw*Ff0HZ*1x}=bK%SVZz}|7{ zz}`azh!T~A+8Ewx2xvF7(oYm!N8Ymct1^F&X~4Ur#pinkwDrIg17~ct5$Wew10cW+ zh4eQ;3{PRl%3xp7ySgC?-bh(hD5>o z$uX7RO&|zH4ls}!%+TB}Q^vq*F*qU(`9ol#3gG1ko=DEbdGksraQOu>KX<4EV%JnM zjT&|C{Mzju({TS8bWyCw(g^f1MAE~6&Z>{JDgn1u>4nSI)EAGL7I`Sb+rcy258ma? zRSQ#FOeai%1JI=K3zzSWlrX&8qnElyIDDfO8^7ZdNr9Pji?Un17liscpjzPqw-7)l zfF1&icZXXyYzgf6BP74|1tCNODm{e$aRF&sqr8_)s5averbzw)pp7(N1B(aVVl&bX zQ8ao{#U=VDXRn#>A)&gjfza8j1j#e6otvKn=PZFc9I+iAT>@k=%uT~pi2X86D8ZE^ z&NKyf)7XL*kT)TwzKJCxsFAp2I?QF3=LThK-ZZ$3I}OUJ zCtF*8kroste9j~c0bpodY(Xpg9Lc@gwU7dGJd9_H20SoIwLIq16fndEPa!=u11*Ob8hfouN0Y7qx z;CSKxDv4-2q>{`{+W(c8cgu!B{Xds-u#*&+49 zF+g}N2dg%`CRMXjhZx-6RACMvJ*urdhdNf?e9xfdO+IgApEN)3SLWJ5k7c?bJ1bHV z&k>soNVV=g zzB%HB#ZWou<%r=dTU{qtW)6b^10OY4i;A=sEH_*DBfWWZ3>C6Am=I)6Q)d8FeCY@nPCU;PqgtcNRuwTE*!=SRt2~o+?kF=$_aDVZGN?%1roTbm0G6A|b?c%pgcK6g}qaDDd;igag zMfK9`l+stiZvij;^aprkpw&!j;2P0)()k-M`iMCPca7FL#Gdra-Q$)VZLYRF!x*zvB`1xt`Y%&#VUD1#?MHQR8qFZ6cyyq`i4OY!5jRass+dyd11yj67t~z8pl)8Lhmu7{gMn&fFT&>)Me(vEns9uel zElxTfQddwJSUH-x3??0>Vs+O9i;ZIqnge{VfO<7}R;5j~NztZu;mAtx0^$v(SY`Komib%N*WnY*IJyErgUzJ?-Eg~k7yKTfmnF@WJkkei@ z{9Aq(`agL4%H7&3nP_^&6%lz7+opi?>S#kNR*Cvj8smchjC9`;RHHwd*(47yrDFqg zi%4W1L6p~b!8zw#47`gO%Q`q2$WSpg+2rKEal_8a+>k?Wm`_6LxZop5M-02ANzabiab?L9PyRg5w0<4;O-` zk#LTs8+SEwwn@f^DK+vmYfyFgM_+={hN9WkeOfWzO3PtB{JPZsi z`6~5$EACMpQ8nc^lqNDVk6f9BT8W5AsJx1$`T3V;Ku|E5w@k(s+EyQ1v- zYjwI=M&k}*Sg3h{^jAR!bF}^DjFhv8$%2Rz1H?;QUC)a2p*f}I;-Vb*Wzh_|rG@?0 z*b`%cGl;&b;%<(PrQC{M8X{3#TiPB~_KAa8?PKfnGyS|?8Pm(1fVZa^0=%&ySE&cK zreVu4p=Rk|?}A#j6LXC!8jmD4CUGb9&BI5@Q?gvKJ+gbI8t&XJKO@I{VPPjbe-iF@ zS3nl#WLHb-=iN}YAdcxwVr2h1<8$QjN$&B3m#u)4Xw-53Xo{^=oG}zEIZpAi5gl{T zDlsHX=74oLz50|gG3W^fi7|vjU$}YJbsky>*a(~Fya%3$9Pb)8ed}J1${1{g3W#hJ z;jL_)6V`nKsqCx!L8hY{3 zdBI&r!H!2Q@QY_o4)(ql{q%VgZR|c6vo|0|E0O4Em1vpx{`aPjOledudnT9Vfx_6Ou!!&=3=IR=Sw<4hB7cU zS_vMcFjocmU`#O?^i^tmx)K#)hGNJ85O}7urZfT%1$4*;LLo#sJ=g+9#Pv~fIP+_`hF^T5sT)TPjWDPFsN(ZaI#;@i->n?cVr z*pKUZ%fphsHh({gGCBtPHy9%g>#HT_uJ>-sxi?aG$JV;9_ln}4$_jtpB*5kiyb4x?JJi+LODCr0|hs zDuPXV9#vczdF&D1KsGN82wVGDZ%1R>yHW@O^lk=lazD|BQjG0$i>|sF-6G`$wxf(i zNP9ZZbJ%=tb=P`_Dkns{A&M-zMbS{R|I*`z!8r>%$ACz1u3_HaSV+(v%wK^5pTRBr zZ9G&j1Vewh#QFNkn8T10eg|O#kv$5>iiE!e2W}hOJPUe82897v%X3i_n!+LvNYf*V ziLwyrwpx60xNrzcPS#|8CyaZ&yS*t6msO=-R736`M7cywLtygKX8U-5_;FB*+iTs5 zEJvYA*`StU4Mlh%D9@_4VY&WhofqK8jpnu}Fm63%QtpqGDyF%4G7(;DmG~GCGw^%; zVXp{+@zIU$go&1iHv?!ffqS*GQLVmEU}ZW2r7NZ(<}2D48yQ_^Omty4@afNrdWBd~ zVpzqo0WKg1_G`i5TMGR>YQsRrwUI|=QN5S&Pu7yh*LIT&>_Nm7V?7VOo1 zbSK~}Szj|41A-nIfMb^}nCM8GQj>8=m6FpDq5V@@9i1(qtY%xqoJ_s9*c|_-=wmy+ z^j^l&j;b#>;;&A~o0DS_>MfDLk)2mT=UG+DOQ(;DI}rQD2sM`>RmOXO>0MrF1&Z|R zp_wrmr1Nj{XJv!Fo%>BTiK7?7XeJ)NE*|jKYAzRHUzB3RyFSdZBvQNW4|a1?3amvcyB^#k#od$k`cDMMf{*FZ+wOs?4Ye4 z2L={SYe8Avzr}-Pg^1CM)lQecCzZwIbpG7CL`9u24S1(hJ{J}}wgUv(o5)DUhUXhb zJ}v8cC&fmBUt|#$cLPN>e7HFUhp`rL(B5e;v;_hPH;H{xPjr7o^fJOk`+`x3>@SGm zGMh098IqEX39?rwb?7vlBxzZQnuIakV+s%wRk#x~=fgxx+B{r3ptf~L-pGoWe5krA zkE2X&u_d*yZIhwr3T~wx{npzI0*3Z19h{2BveqCN604p!b1&5Q>$! z;mGLc6#81jbdVC>$cvmIVia!diF7kaD+z=D*LI4nCf;=Wn;xhmq>N!Vg;8r`iYJIi z7Pn~Ap%#xRWQLH+iZy9G2|-gDD_yv_mb55fGzP|+SWQ8z%Wd5?&eGD<*$nVkhM1hk zDDE=M2k z@!w$3%!y6#EXX8;s3-N{o8Npt+gJT$WWQo!M&DE2j;!35z&g^wtZIra-2PeS9zM|K*6ss z0B>I*5S1UjUED4?iq}^Dgn?m>I6v{8 zl(@i~#@{>?;KORCIv!pfNHJ0KW7#QQGkzF7D%TroWCII~vzX61;t(3c#%*B|aGihzN!5dRey^7 z#iI_Q5E=f3nmtY?F{zA@^xZ}1s7Dn_2%lhbPSdYrJvRxKC69#?LLNN{W{^quw>AZ` zFFv@PTeO+TRIV`a*ABq%`1=b}gBL6BJ`f4I)Z_*aV}ROBj(y&(8}fq?@Mj)GJXU zq%B+RGhyoqF=UULx2KS2(2C7XM!0l~(~%!SQYG09XO45lg55hybqT|fnciS0V=61q zS1|0kIT_nwx$$>Th60`zo~1V`7D3yH*i!ET#}0?ykI$)JM5g=mVa60`jeZ2F>~qYo z84YBZ`z>ni&YmT>wtDO>!7cPZM&TyCEQx`cai}ZV7gwl4cBTM!BhwRi+JWGc^Sd1q z6zMtF5dp;%(W1M82^fY^-7hs(OEF8{AgXpe<1!v31R`XRySpW218C3V6z+ZWho)rRLZn@f|{N9aSAAmIwEcKhrFXmgouA(O?TEu&D3 z_u+`AOzgv^i?}g1GebBI2f4evX!Q8*-0jI*QLzO(RMra~>nIQ(aDa!-kv0WZm zhV>K>^@Jt?)suTU+poM>9+m}ia|-b?E1t0u`J!I8xK1G^tJ0g9GSMt1A|Md7W*Us0 z-)%mO|Ien~D?cS3a;3Y#GHY{v$lx=4jMK%NM3B>-_=(J7Un!%BD+}+=6Qd{Hj^TW6 z-Jpq*)^Y>19QmvutbC>zg;amPMI>o2EBB74tib5P5l<|}~W+B!c zTF`;}Xr^C8lAu3tG~=l^i~f@h8KiBJT*|TZ#+(GC1i58YABB3dCZn^JOoB@j?4i9% z>+CefDJDJgD~c4NYe_2cZqVX%72K7O!;Jt3bB|-Z%uGV5;AkK5D&MQ8JPw;rzD9WX zYg7?V_1!=~G3>7%roQlhmB(|dc>Tgsu+Z|)xrNwXPVui-3jUod@xAYlPkTsp-{Ys%?dk?>VIr;akxa8R`2wOC0ldfS@H z=~FvEtc_9vGG4}e5R&X_yh>{2+6QS`!BB}Nx#<$d!TW7hDcuL=zD7+Pwol%m{J};e zWV*SjV3+)syh`<)!o|P|`Ft~#d;3q=B~Q&Ntb_7#Pg+rtbahDqE(gI?zV=|H?8@In zy6$6OCI>TW@U4QYr8tcWm0ilNSj5@IrYihY+0A`N1iRMtSbV-~xDK-s0oSsi{ ziFnOU)LHyU8OjA+tOr(Jzl6B-Jdf;3{%1wp-EciNcWAB2yy2zee?SrmZ_%}ZW9;|b zK+uC>taqnMfxr{!g73=DppU96&-w4?4^8Wp!jBke-xlQl4T^NUCn(E*z-l1Ag0Iyn z!>C?)HLh8A6ogm#{z{a-JZZPyA4V=8Lf9%G2g~N`iuyoPnd!erBeY(MrhfdY_XAJO zQ>Wy3SC%XcUeO$NcMqVrHU)oEN&~TE_DAZmUaxiibs0lGL{)b=&b#MPiNAyFUK(z4 zzgjaab#Z#|2@ArZt*8=^2sV6<3`t(q$4Pv?D%g7hLQi(-tuMk0dacFjA;5c7OG1%ot9gUj+Z#wBT!QllJ-~Xsjq82Eyio@Q zVotQL2+f`qi7bJET$&liT>rQaw9a8}9bydj#)VzE7r>j<3NoN#mP~-!l64LulE7~_ z&S0^a%VxHn;(W#PSpCR6of7$Mz&pISbpE#}PydjaWU&rpUZ50qbiW(-*~v*07t3GE zb)=h9iySaS+lTE)VObw?op~jz7rUAjMk{A8e#i~To6}joJllDAe;1Tlg|w^h$^Gc& zPEWUjhW`QqpnHuOHWvy$IQn+nk)h37cnWfs4z>Y~?`x;S`Q836C4K|TdH)9j5J2>K z$(aE4B~gtJu5rKlSVy)bd}oFVLrDCD$@003{2RhB1W`u#j#%?lx!zvk&2a$T>Scwn z+&!30fe=tWoeXRBS&@9#`){u4=G+a>=w4dyKyzdF{M@n>F#F>ISBmC_%u|}%x6by)_rR=XJFuwc?qfr9u z1!>CfbZZ6n?#+t6ZLK+=1#A#->tAywlt{tCWdx*s&Ga{OAY19&TB7TxS2!AO~G8!BC0yh>xz3_7^qwXKV*cNPr`XCnA zMK}RvKWv;zD5@1A9@T{XP%i`pU6TMtdxR~FfPLLMI0!t0gbrtXfJBZhQv~LOiU`kW zxQcnT-4sN@1I69SnGved%@m{=R6x$|Ox)4YW4MxuH0nI<;CEyc6SJ%l@eg4V#3ic@&n|8EB9Iw_HupW03p%GwjdFTZ0@`wO~T z0LSF(%}8KNr+l_4{L^d^cDdVXg?5?NN3!?lBT`g7*5fM8Uz+7jAao*_Q9qdpS7Y_UF&lynN3q*X|dC74z1g_jpUDj4A% z8TDSKAjweLO~Dvs;1xKP+@ z(odpZ=2r=6Bl*_Cc7^n|a{0hs_SRs%gfa{M{NnGSajXG#>Z(^)N{6mhcrv_dC))Si zwFmJmRopspaku@J^Zl0lJQ`*A`ZIT$BOPh+anFUvEjs;pHqX>w9GP47c>kO7@A1t& zlnH*E_`NE@21V@|g~*Hc2qLc0D)pJsn)Lt|hK7|a?}mE>?j(IUlqZQ`92FWef&1YL1sdaa{%iso+$=0{_66puYs`GX5*xpVw0P-j9 zkcWM_{H|F$iPpumyiI7U&Soo(R%kQg%=RY%WUMC!{55V{e<@CbO=J^eDz8_(Rs8=$ z)jt49*0oWaaM@OuZQE9tZQHhOb=kJfF59+kciEHA`_26SOhiUTMkLQZJM!#%-Pc;X zuB)g#^^!}=c-=x4Cct>oD(JG1t&3VqBt?}LYD7suu@Y)UiPj>MOTgE2ExgqSk)up3alY26Qz9`BC(TrkJ-aRie z+jNk32v}c^f&%h9mUuRMgmp2nS>K;Km2py%6=Z@mqnKq%7FJA50mhKNc&+}=WI%J7gw(hq*}rr%mP;N0fg0UJ zKr-ET8>e2Rpn|{nlrttG;8c4YO{mkcwtRt8W{tp?jPm;KemU%{_F?==&C=i1Fv#nE z1~>A{zeF&{Y4)S{q9$p)viYs2x2=)?-8~8v#NwIKKGDRTWB6=E2UW{=cqw?t2#wIX zHmjGBw~5knE?FSwvDFB;zqRrUCj`hb=15b{gqR>girM#45_nMLRf2a4P3$_FCUT2U zDd2X8DD}r*F{?71kBKSVfYL0`AlGejQpkZ#$QVf{w$k69F#Xwa+br&%kLw=j4<0U= zO~0tnCG&5tI7Rk$ZYW;fV1u7UFsR(#>B`~K#Wu~RJshi2Rr4C8I9Cm4comB50YD}b zw_KnRE)QIdbDxxXanc0y04H<0HlrhxCWyWWHKuHFd($diOU83ULV3@Fh7svVgCuLt zavKEMDxEgrE1;485x!KP4eZuE?p|ebDL5eS`X?}iVPTtJ5=d)afJ!5cbWNBpu^-A# zNFP|#OFAb|KGGoMWuY8i+{$*R(jcU*A?^kxI+^q+JdHvGs$s9`{5Po6<2zw6K(-=c zSRp^6(baU06BA{}2oy%yE!hJlZKlU4s4_|jXv$5NH$_-m{8O9upx!5yDOZ(zc61+un|1cWJx8k%#Ns0bEY zKw=4J8VtIGSBzv@+OidGSXFS9Ev0sAQwmWs#d15kC*4PbAA^06noM$VJCd6PCtIz{ zLQ-KtFicRUF%s=5s%_O!m-_}bJKsw`apB^mUJx2Z8e$P#TEJDlD53NwPkIp#Yzg0+ z!P&YlSejT+TrFx4myL!AT6V_az}5r>X<6Wsh-(&RpHp6a4%!%FUFEyPyG>{oQnIfw z0aGQnpS4;ORIyvfRK9T7#z-a86f-C_Y55prDb|9BC zNi2I)HAvKvT;}^#M6$sy*(WIHG}tZ^x|wW}*TSK+!fW)Q6OLKJ#H0i`hM;4BNeSh! zglR{Cl}#8HrYL6`8O6q9z)b&*n;_m)b9w}+mWaL3B#h&$=~odL@x5|8p`=~tbgGrd z?4pava1~vi;Jl7-8u|MU78mQ@3#xMz2Zv8hAk8TvpEAL9~>ct{JUTBe95K$zz#T&qAp6c`@(RVu_ixX_eJBw3W)p zeQ_N^ftOWXUb8Gi)v$^6w27-JI-IpPDvgR-t?ZOMSrwX@Q0xln>}&{rOqbV&ywu(& zi=IdECjLl4`LKl37sCvo0VEcYr|1t_++R4 zIcv#GO>`K4IFPfkKRvNhV8)Ve39e81=L(e5?mZgIGfHc|@-l(51gS za)XHLjWG6LD}gyRgXvB_6FOSvzNSUe4^srE0aWLdo+z*kbJJpPfdhjm(9~hHu)))+ zLo%56F@4W0X+lk9fL-bo(c{LWUn`8h~Z(SvDlz;?jXZli#v%9HYNc#o^uS z+8fJkW2ay*v44tK=YDoVyq#XG&bB)mq7dR1E-ec5&J7X0d-?zUGHRL^*f-To9D4}~ zzK4~KSHl0QE22jB=>pIgHdG4F5am*@kyw>#aM3SSy19_1;lu7>I9AC<2rL6c2EtYW z%`H$)Q4{nQ->H!VX}GUgw=Iw4m+&Zv>AVk8xCXq8!y_dQ zCmvL){YNE)GIO!=h-w+V-dL1XC#pr6B?{l!D;Kxvz6e)pcHaEF5FFoGe%?q>LGn1VJ zl%&U?cb8=t@U=uAMG_swBVmtB-FfO&WONm;wGITmY@G37V}~NmAh!JP8d|(Le4e*B zh~`;dBK#g2uKaF$DM~{dZ%#Oi+1`Khk!PL)sdK0`E`pr|XuH`T4TPyzqX)g-tqd^n zxDqyBTeOfsi8@;0oX7RfA;jxUOVF0c91|~+$hDWa?1_10M0zU3c{uImDl;Z7+51dY$=!rOh8UnqR$`jKyP^jBKejRE*w)4dM*AvD z8+|~7-D;J0(V7nC`GXwZ*jMDUENREwtL7~awP?cC7?(g)P-DcR zv{cvLHIdvQW9mdhYn1TK*2u(Qw%K_g+Q3ak)O@4*D8y>g|F}eDS_<#9wGfc2ps_`U ztfo4^h~tp^kS6_`+6V-4>@wTH=gt^EO>}b|;pPOTKTP04{a`L>1+~v990l}Dw^mti z0=iiR2W=(LpFG94gqsoai6-L7v$;(1O2-_`kw7F+r6NYKg>SO5ph`1{AS5q%SdqyB zoF$?WveLjTL@wt(O%VJKNXjwE+QXlVKm{k?SMW1&Z*Hpj*^GySYw{2e%zc1%_1u09 z!-{mG0@-F9h`rYVVPB9G1LxCmqs;kJfRO*RV?!sHRO3!S6dF#<|Df#m zcedB(g~0ORJ@K_#E1tv$Vo_TwZWhpJKWwtO`^kk23P9D2Cj;mCjUvR@j{99b)Bbr;{xi35NqeyVx))7R&1Sr9EmF#@}w zAD`2rAasg=U1dW^9U~M*7*%1M`(m9!tS1;71%b`kZZX+lux&U+!?4H74@a!5_YUM_ zb_Av=?npzm*5VjJxTVkrQ$fb@h?FQx2$P^-gpqzlp~!H{2&Jo=Q=$pFM5cOu)1Yem zbu?1nE03kE2~;M1FZnd+BOvy&>HoPX>b8`5>EA`f`FQO)ujb)hL(B*F@Ax|W5bsFx zJ@c2^tmnu|#bt)d!aGIk?S3#^-@p9TD(4tD* zB$Uc(DDbk7Ca2XXeM&SL&R1eh1;M{+6kZwOub9g)-(WT}nnm>X2ltEx%GS!p+@K$V zRx@V8%+UDp*Q#tR($6)*VZ9$fzrb-U9K({5RMT1jQpm4`m0#l!I%ne)>%^?~Pc!Wf z3WdNkrZp!^u1}1Yo*HM@rXuQx16B>WjzlvD!sKLyL^x80==8+~==8V~zg7+gr0<6U zU|GW7$s7$^2!FRb9Pmv#>HKH3_@xFqtv(RiJ3BFZR&SN36SHWm2wioFl8A_{b16c8zzQzEJ`EVf$0-HGs40BUvxPu?IJVb)|pO@>q zyGh7-VS2K7-heKhI7PnoUnd~>ORTD^Z`YL6t2;E~YtQ;t58d)jnk$agsb z(364ofWmK2JGM9tXg4E`ci9w*1VNq`7~i;m(U^qw;BQlmGZ8d1o?^~nqjR-L_Q&rr z45kfDXi5+yOxY6D5Y#>%iome^v(}EI3coXp1grC-{r=}gug}U1a$Z>PrneL+_6zNT z1eGNI-Z`7nW-YhHjD=N0F^j1Ln-6C{7=r<-zr0vq|24w*=bfIguyH~!FfAh$F$u;! z;sFbOl-v|bYu*%8cvdNlD6PDU{zQR@w-p_RChevPzl_b^8nb+28EHz}N?yTLr1vnANiZwTrYt3M<#yvT60c%z|2xd2(9Upb zX3;p95=@Ipgi;v6GQ5K%hgd^`f_pTwf5A$U%SD{1COf6I2!&Xpf^>#Mn46Wt*Z*M< zF(3ZNKNxJJqSeB>9z8RH&U4K531 zU#}5BkvBxwAb~}om~VS%j2A1!rY>cp9a#-ppC@%Og*ko^vO6XrmwwK~A^!*7aANi? zH~_OM{cf=yeKi|vs-zze34~jWG!V`4Bw!?)xd`oyQCKkR>!0!cnv9JJ54bnFb0-vO z%H=k<86C0N%ADHeTyw$n`shV4OY5KIQqxFZ+`K^#ud0{EG}Y+ejyX6C^-p9l1QMAS z;Ry{0(P%x{>5&f1B2%@W>+^)kccX)XFl|zmiQDM+uA&(2A>?+g%%s;v3l;PD_{}}6 zO!%rqccnAxXe$uZcrWY?a~Lr*)eT8s(4QGFUd*JnwNrtk%C81WtQiET`;jD^>gt zBd2B%N}VX^=>fZ!-pe=IrFScXq0c6i4fp5FB)lG#(BZf&3PmjzxtmtL;N}y0FXBUw zIetXb-6pW-Np*gvnK9;4M#(9ni#yJKRf!Y^$B#}H%R6*D*N~eHxhJ`rPZ54hTNpT258 zKTA$@*Ks_T8s~7>r!XI5H5X+oKHX<~6Mp9?Nm%5^U&R z2Nz#8vqaDwW=T3;(z zt+_i$w?}A^x>vX)*!{4_oVAGfJ=!}zd%gEz_9%|uW_TBDkFZ?V7}0uafAk?23A;1q zEjNPQJ|rQhR1xrCe^i9TP?z|TkX;xn3t}McVNmD-&^(6g(arTgcI zHr>?aWPfsoS-6AaUv8~Nm8<99voc+^=%-KdT(jLVSgNoS1&@nZUNP8GU8Q6{5&;QE zqmARaL)f=LR)OnTnIK}_kS;2P z-22S*%_h=6R?ygK->R#-$5KDMb^3XOhX*1*NpK#vD$D7m1U>Ra!sbs#ZibR1PLY4i$DyB{A*3k`9P;FT>D zc9wya<~EW(=!rNLAcG5`!Z+j@rB!RnJ!T`^s`i?c}&gXM>T~Op+cRvA~2lO|2>*Lr1GFMg*gHwxod*avE{(oui;iLkn^G>DS4^`)sMRr6VVoMIeD3!bS(x)3;8D!)K_oCFP?1!eYuqiE8vy zwzToOPG)jU(VBgt%*n!Cq7HWMSV?U2*|!7lwg7H3AAsRrJ1_*A4bs7uJ6aHJhlZ|T z-EBy0F|-&|iQ4r>^^fzhdXD~b^5^ui`(H04pNp@&vuL4gb8x!>&=UckzTW;?RlYbu zXOJmT1=#7NvVgKDl`WUSbW0YjSisj+HXPi%X-uXAW{m2(q<(GD9^P@vI(gY}M>mUX zS%?xc@+X}{kOy!E<`einllobEz<6mNFjIJX|t>&7<7$GDc*_8V(5GEqu1TWZ=Yfo`Vce#?1 z+{+nd)kG;0Q>sxy)>IVi^+b7q!$C8CwU`=n%*5-NtpWz+sAAPBR0ffq+0#B@cSory zN55k44*g~}`cELhp_6b4`1>8JO75MKt{40zwIyw`ltoO1+gO=VmK&v{>XAG2)Z*WBusodwDh$( zkz~Rpm5ge;f}Q zy*>=vNFGEk_FZd0jw!Y>{ZS<7y;Um77}v6+y|W&;qJaNp$QRk6#?B)I+Dat2GD)3q zV*8wUwyyMYin^}oav`dUoD$k|3Jg85<$1q`^fEf7mMDM&iNbD)1NbqHD~MN3U86Bu zI8-kmee5f1KUZlUsBs0~S01SqT(|uSK1qLr`$k@OXR7|`qF$-`pFtxDgyGbkv~&%i zTH4Fs^tu;XL-;cS)@O+Rkz`OD)93dqJ^^ro z#Dc4uRnUu>lp$Cx2<`!d;MqfKlJH=r7$6(SFpNof=Ws+|M#q`7SB2*;$2}rG`--y|;4yR&58}T`$r9_3yNN17OF&(RimB_7-CEc$`iAMNi2rMr*C z_Pgsvs50A~8C4x+_R_1xhnd}fbHBxz^XcZeFp)LBQrzSzx{(_NRP?=-vu!8OkDIc= zTD^-W+jH;03!)ufpEv7Ht{?@?C`e_ZzhejEh-3`Q2!+yt?6@T&8*{FqO42{x7?KI? zz!hOM&dDFWZ9CqTk*gWh{r^r#+#f{$NY5r%4a3g%_*O8T{u;jgdBKQ+)Lx^(f4Y{9 zLbor}!ShbhR;v9@PMe)v7SkcpuEkeRxBF742yi~W0KHEeeFn5que9BGsnmZd8F>iZtU)s5uqBpkA zeS1&{>snHPZwD`H=I>yz?c@H;HouQz4|yk-uhPDKmi@&V?)7#BmrwU!tO(Iks|)K` zedpSW(~e9pFwz3fm8B*ZS>ODJyv&dA!BI$WUcZ2zO<17(c`5%!0zuesr;kzh_(T<1 z->oBM3a-kEm+rtIoT=rd(G>dM2Srm3Sxyvu+1mCMDthH*j^jNud6@UI8gkloroG1g*gfH0_#8{bwXFq4WaMV89 zU>`~r?oUtHsJ+X#sE7XNW5|Ft<|SV=WX68K)cd`*zu&KU9zR!TtsBI97m|vpN&tvY zWPN6U5jgSYK50Pf`R@Xy<-4p(Jx!4dAQztMK;@&8|5YBc*d4AuT#}+CTwYV8Kvqmg zC96hW!3J(tK%oW{bU&=`dmHDHHzXyUzh%1 z;HhfT3R4;c0nC;zrbe}|g^|50Ihc;G*}! z+yx@Teu1B=c}Rw6019Sd8C_I#q9LoG5vT_4bj={7QJ_8BLzV;InIu+YKK@H*CJi}` z_n5NZue>JzhVOysy6AdF%p0JGRf^;@HC+M735NEcS#eA8dW1Zt+CWtq=rc};X6FS? z*!h^WYg_7DW{er-%yCJv`O_jGA#d55I*9YbJjy;SiaKo3sKeJUQx5} z(ur0+?5rE#cn3`YP31mg>VSn5?CL(Fe9+tmU;{UJ*76w%eh;n1?BRp4_T5b3B6#}0 zr9X0O77u`!e6Pv2_W^h}|116iCYCSUc@srWQr(03DJ#S-Y~DRJM+YRocdEdH@4@QP zY&{C50(m?df^`7c-bgS*KqyHf@(HFZURpYFP~Z{-wqbcZ5;7f9=Y{4!Kt|6B=;4rm$x zugQD6enp4yNtG0oJ!sMb*NL3v-5p?a_%quWbqAIQUvqnLzwVHieW`^pE4H`4#de4A z#?r{_uST~5oTnH+Y_5SMX#6d+vd_{3llLZdxF@sL*(7NsUL)_ zzr;4b<)ZoRaCu@cPoz#v!{unbH5euXyrglSYfff-d;*}^?P4V-L4+D!6Pjt4t2k~f zzE?B|ud}byL*bC=Y4LOUy6h}U zT;V{>8^qEpm~9*JsH#3<^u2;NCtEGt0n8^whN(im0WuWeCuW6kuVLyX9u;Il|8zlZ zA8R;8*mo@*=v~~a8bGYTvm6>WU3fQOJ{j7x#p!`~k3t!Mu6aKFJ+sW)u#(BSQ2sz8 zzD`W}_W;Qen$`R=>q7AZr^S_kpnH-xYUKzKxc`^?KRXACLBxiJ8GBdM{fjN?`J9fA zrmh?lzXgL*KM$j&#F`voHLI9(1;3?SC?nGXY)Vs&|hx0k|yAp`m=+LnoQd_`{ zM3u1XN|XYb!z$b>q9tN;)+MgBfqhoT8$yl9Ze=0_0kWKi171E1=$_lX^R$kmUoc8%CKEUn9 zyv&ecUW;)Avw&*Bm1C2#LdQYDH*7?_0GpnH3FeRl z3(@IGPb%IkvN25Ab32Pm>dZBnJez!NcwVLGSW4hQ!2an0bm43X#n$~Cb8 zL2x2uAyZ@@H#ml8lJ-OcMGR{x#^^9vK}A_GptyMK#4IH7cCF+kOb@hMg z(gC1z8e5hW8Nu-fazrJuVC_YCtZG*0`FC~e2-A|gyPtQU7K1;#gn^ELEk+O?rV5MF z`6vOk1V80)?v0nm1T(Et4c;NDdd>5tyv~ze;ye3(9m_~Jko!#b_JxJLiyH-fJc_xx zBS}JOK1)bNtw_!p8hD~R0w9{lnrVK-FeH#=<`r}*fea~n2BZR*lDqSGgC9BFJfsmy zxGQM1#_X9rYzUI=(<^;$C7ufsq%y_NCb9B*03}JKaF7V8J(v0y79W3%Z?>xTFK0{Y5gJWO3&F--S3mpcC8i>==oQL!1+*3Juk}#O1l-)jQ@cPBs(pF1S8mFB zRLT7@eR<+d?itGc#8u)3=ErrN=%BGX9L00WY7Su;B-Ct+<@5$#9x7)fjEo4ZDAhZ! zq4P%N28%+;9f<3qiDC_Jj5uY=t~=;TAHF^(ZG^OlEmYCT?P2~c=qTQlZU3Am^fwmA zR=x1zu@a-uxQ5~XH?rURL%o^@_?kU9Z|_zvF6S$B8AAoL*V1IJL{{WS^O@C?+JQg3 z$Od={bm@>PXDlG9$4b#jX8)rlD3sWDc(Pe?xgQrnH+pyS?0VOxC7~T?H3v9kCw_0L z_s|8=hIT=Nk@>FC3c=!CP#Y;h`lY7tQNy5l4R0AGba{`>>g@cf%wHldS*nv%RVXW# zo>XpO-J(R(XIvj&W0YU;JBW^vs_@!>4#FQx{=MPljrGz>P!|N2q#B@Y-vA~hK2p|o z3*h=6sWYB^WGewr=$)`t{6mo`tN*8RZBkwMN?z?1=_Vd0Pn*m&&T~yy&yx|gk-VKT zeQi^!_TKYV9;KsyO5mmxlAkp${2+^7aMT{+OtF*6gxDxO13%4TB@heKCDn7ZmRUIm zcKm!}j2b++QodB*Al!%6%)qtjZv9UhjWNnAr+Y_!2|)1+sUo$o$&+py2>0UFDf>Cd z@)L(fdzaqLBf{Tg(sl<2*m+9`vzs9Hni?M2 zU+w_n!TA5&>2C#5|C!STGH&r6fB1e>wYbQ8jWCtqfFoycD_eZOuTS^XD~l6E6ZU<6cRYE0J__mTuJZ2U z-QM}e;P3TsvGYHs0`wM*6pia-=i?-mVD95&b+ePbxM3ggU~pCW6S&*{=KDC`|Lq}UT>e{{X)u!)86W~&zBFs4Bz}%+_e+%^Vr?` znjU3!-|!=pKpE#uEY?4^-_QH{xIUi&lzNPWV1!_pdrI8-Xcw#^6I7C9%234pNUU>Q zk)OB-WXKI0FNNp%iU}+;L@bOoadn-o2D=y+mmL%jjZ{iQ9 z1`r(j97lQPB#nT4c7X(bf*r4W;Va`X!vexkv`ZuAwuBcgg=$)~Kvy*PkwRsl4PzaK zBu4i#G=DBH&$qXKs`&j|0L9%WA25)C!D6rP^*6!CCL|Ccaw|#LTAX5V0}8g~Z!oZ_ z@g*hERun0scJ-XGe-zfpBPmPqs5{VojD;&o)Hz19^WWT_xA)Dy?_!3{D1^L(53Alqa*@bX3C%NBeoHq%)#*!y> zMcgKSSo4sS-JuA)cco`gncw@&>x|##KE2B-8lqOFGtL5F(aZ5v;e=0N1#9N%^NZeK z@+N!K7;$8gk+7hh>py|=tSMkL3kWmw@OpIctAU7c9&}<6)4Og}rnJ49IX8_PPI&UA zfneoMB>3B>1X>he=yu<7_Y7884a zyKoNn3cr=2(!-4m(vtkts8Jf0Mo{RZyG10tCowu5{nE4WW-o6u2nf*t0ge?rK6!i(g^hHtSM zRiIVyDK|LjZ8u(8x8EPvj8!hT(?pSPntBx!CZu=78;-h4UdNJ4d5ZewH zF8=>WB~GYly#GI`q)DXm%R=4{NB{P3crf!ulAl)>4||SlIOOL4d?gWWYSZUQF#el9 z%A+S1w{ktWRIz`ICJX<^NU_fUpI8Z>Qzk@Co|8Z(dJo*{u(AhA`rTF%h2ZU1BoT`#}iY<_Ac=y{P6sHKmVGElW_-e180PH3J&y{Mt4SLt~3i` zA@y;whHM5w?Lpdx@wA`8IkMbLt4CFuIX5GkcTwu`9Zjb_;j&+KI?)la_Cj2v17AmP zBXUhvqkz#}iOZC02#K*KXKoFs8Z%Y*cf)@EVy*L<>p~_1vm_furbrOH{+6f9!AIK| zK5ZP{sDz_K>h9I`sC-$LxCB}Q?^y$HJJ8#ZvUhLEb?5$@syi&A0q);t7K{78cR+ff zkOT4|K9E}dRuGeVZoYgcQC^Ff3YOVJTab95J(VzsYBH=RHHc7|?o7OUbh3!G4?KS- zfCXgLR0z6V7=(Yin+&1*1hGc&l47hTz(B+qFBrv_@;m{1&gf{#fV-nO>|q+jQ;Mpb zCNt`8c+J|iyeD%wV@>?9#JIW?F2|W$4i0$`x9LOLAln+)CzlJX~rDkrdr7E%YG)+NM5a$El3 z2a^fn+wfb20$&K=S5%$^lDnH9^Em`qPcRmeu)d)VT;RKYw)AP_#~%~NxB$~qTCe@m zfm^GN+(EWP_+GByh@rczrO;gqu~+y_AR&K<>y0~{@l*uoX-&A^w=VK7lUH53am81@ zdj|*dPd_4<)bL$E6+3uqrO`tAxkL1s4TJXk{4<8;PZh89X>jVFeB>MfWWQK03oxyX zvWJShbEdqR7s5MD2@c#nIM%3L7d*-Vel)xqDZYgeTZFloVdox}zgr}MfNah!l6{QO zJ7$Qe_9v1O3MpPQQ1;S5w*@YGCXxtl3+^CfQB10lmXJhk*%*wCRSy?YOS*)DCBju? z6Xolrm43j5JONlbI`^5JSy|VdyBMe?QBo=cD9U1i3nW5p4oMVkVS)LCLIWC%86m{JiV6jQ&+-WgaZ`RWlb){Mb7W{MdiIT@DOD+#J7NV?iifv z9b)Zwf!i2go1WolR(~>qy8?@pQ(!57_`e1)U8^tSKqV{hH82Vuk7@$?2T9;eBX0=K zyj{Ni=8N~^grU2JK1y^e&OX9T_mTNvuT$TUV-~tTLF&U4jn7_4%|wtlqkRt?zw!WP z5wtu~aXBy0243!RatmBMm2e#C!r*l8&3aUQG{iZzWBE{nlZ! z|IyU)4+P6uizpJ)TsqY5LVaQ@qh4&B$RjY4nUv1Rgg-*|EYy##CL_FOG;iTmo$dz# z#lZRfxd0zKn$|Ye9-N>!cL7@y-fE7^0_O>u8yd`xD~b>;7kETGLcxp>Sgg>{exYzU z%6^Cg^Rn?;UgGtmcW26Tq>Qu%2K=Px+lvpim;qrR>WramJFqCx8G*ZnBxAvdOU?l% zPaK}Z2%(@#Sv;!_5>>3zC4DZ2si4`mf6G6)&Y!;$U7}V(^W&m;vf_Nd8W_V(Ds_)A z$5jR+$=d5fhWqEr-j!!Ow=Q&;I+A%uWoRb0a=}i2iea35ViC0T|KK%}o8;**S(xU< z>ZQ@_2 zK-!nhZvVQucgo+ZqKhA}dh6@jze3da0qhS1FF@cxw(&vlvs-AwtC^p2c5;C#Ew<^K)3lCQCf?e=LA(>pjmCH~le zr#rk`!^^?Pq08tK&5*Mu@r^APLxZYnxxY_W2$&3Ir^M?0&PNzgiDrq=A7ygQdT$|C#E(@w}io z;2efW(vE0&=bqvSce`o!2(^AkUdG$S*Vt3?C)iT1i;AA1iqi*E!!~L*2{D>12*v_~ zbrr!F({Uliza`q|#|uKZ#yc3IIjBHw6J2ATPASynU~CUn-J;Nk0O89z6!;WGcD_Qp z(c{iyh?HhpUqs#t%$hV!tc8muTqloX#h)}PUDTXoVb#TNKC;zpVlrSxo9w>*m^a$Ht?6xCjmHjT)|n181AGU|!gT751Iz;q3Zf$;@=DZ1;H|h$Daxk+buF{@4o7-)$K+F;e8T0s*Le&9J}LZ@>!JH7 zsxB&DKHSY;9hWP5Nn@XxrwIGmU`97y%%aEa1xWmX+LV7iIi6Q$6H=d7wtZ|Q^};Ud zg*OUEK|_f@UwTNT+SSc*3#Gf}n->0)b^jBcFy@m{S9kN|iLn2*7qWW8LZsQd*K2vz zq6j;PQ&n}af0sx)qTu|8bL8(oUL~mXURtFy>tXs^p<|O`M%c-WI-Ms$Z5}x~kRa%R zazZ&tppFDNDe-u8xetFbunVXH6`BJ0WCYpd>80&k87g~!h93SEaJoz7A=s2vW#&4M zQyx%WT}#a(j~-J|mFxQ)A#fd0qWVVzdxhN?_lu6ZN2)b7hXyrZ_5NWBhJFjtXiW%S zq3C<`^<&^wtLApswsbtbpvabvXQ|GG?D@j6La~UDyRSKZLGp_^V(m~2!&~IlLb3I- zJq1{wt6`AO>?iVXss?+0*5>+8H}ChQ0CQawY*%w^0k5m?OG_ilZSeeQvLI`4E|6$c z%OqI3b=W7Zpb>)xY+rid=%y5mWvbhAsb~~Ytc4IG;?)lDI2s~ylgm3WCQZDG;U8l> z&xFhLds7Ksu4Q*!GWQ2<3D1#q6@r!ori=*Q(U`|;ql7_G9&jdbVa5R5U^JvKxOx!j ziBPr(CKFPKWM^BAaJps~D@ruh{4+JnJevH(MSvy%t<7T{U5UkJ8_hhS>aeIV5M{7@ zBnqxE6R$#Zl|od}A|stWt?_eMQL!@_7G^@B3E3hKfARc6&Ei(U4TZH{5*f^qI(gpU zn9W0zVVDRb%QYhW(bkN~UDAGov^0QxoKB*&KlARlmxI1WjgY)BhQ3|`NOw$*_VnGv zi0@aCJgv5^GJD=^wnbIXN{H9@ue=lc2}9szw?<&!8+Ydd#`RQA!lt&~S~NpTJH);+6Gzm-bB=oD5Q zndC}?@08y?idC*yF3B~*>Opj~dE-}jDgPJ#nUu=1?s~)aw52VVdxiclQzdjUO|-mD zewkZ!cUB49cGO;JGYNRsT8i=RV!9wrLbbtAfDgYX_n)Cg!C~|e8qHhq`?HDPzMM*p zvXelft#eRND2i$MvBm8a48QJ0kQ1m4(_uCzG&s11$mwrbM@nu3qD3uAW1^;>^{9S9 zpaST-RhvWyn;KP}c5=C0a3w7fPLm0t@nT^KVe)#BJ|{^+kkZR|@Bm=3&@L-oGbs;P|A%2}v5~fn$N5=->P;9qG6@D8<$r_zw8JbowdJF>fQFV@;C>fF|r)wJZ zEHa*JycHb%AL(fn>HjZ1RU`nUr&q~`X`Ztm@9(N1#k`OIJE;JoL_^@EpEK0+K$&bk zZtQSrKmE}09?k4onZ>V($!`~w>dt;CSH|$afP%Z$B{Z{ENyLE%>RJ53Ahkz2{j@H- zvsI7xzx!S=&S%8`5SrHnA};fm8GlCZnOof`y>e;t1r|32s<`A0!{`tY-9PhY!}bww zQBLp&$wiYr)Rfsnv0fhh!*AaF@P#gb`6uIeE@_G4q$|;Ybch2|64hLisj2sW^mmrO zBi(sIasWYlPsWW_*erm9Xu(yM4@BtvHtcTF&f*y(u{ zF>v;j5bINSQ;bG@-`cYsm+*g{uW7>XcYQTwtM@aW;TT6Tds)rp2b;i|il}W&K9oFC zm$OaZ{=#(D@jg`yn2E?`8N;yjSwgfcsV(9hGG?^q4d|>DT>K5}$hBx%7^p0Bv@@`S z!0kzoZdOrS{86JQk_~4}>Pg%#gYu5wUkE4xfIfP3RZL@p2!?Va73w$xQzxZ@WE(pj z&*60|--Kg|mR9~SjM^WAK4FY$EG+^g$^`I+5ZyKKqk9v9Y}ZZTP8M>u$-#b54^i9p zic~XtZtVJF(X!9PMO_*@(MZ(ZJQeSTL$aXR8#LpvK-w^PJcxeDz{dA?G| zwSf1T+gx&hPk5yC@Z#bSpavULjbhHhu!1?x;E*v^#4EL;dcEr*q}uoOB8?zAwpA&^NgWZP4G>*!&)<%bHsk;dZd81Qy?4TX6IJGt?j=T?y=0 zn|-#EVPq2-i=D} z^_nl(z`gE-8_?k)UX+n|Y1OhEuKbe(e=+DwWYkEm4~l6X*GHqbLI@a17_6 z{vqH}AQs>eAQq*b+4#LyJR9`S6Ye0*el8I=&*htv4L%K?7aR~4SviDjL}sdcFTA9a(j3?o=1NwsfTl!D6Jtr$js|B03~dp@V^kXq zVb2_77E=1*Xz$8mz-MP}(b8{Jyq~eMJ|A`pW-%rsEeUF2Qk1r*0vZEiLCYaR$SSy) zL?)?6--1d2+I$aoVG&T8<Z`Mj+-CYJY4Y^0=IO$xv059W~R^VKrI$8LL&dlbieC(P4}Ur8Hrq zJT-;p1QiXTG{AA9Iw+-oTD7e+g1}WkB-G9#)nql*@(qy=f`k_+htuQ1jbf=uiwjNA zKs6>ZStB^=fs!LPuKRGM<>W~I$+?^7O$DdE3%NYy+$e71_nOI5+-qJlYx-X0zCc#w z?wY4qZ4|vjIo-8=A>OjgyIidOWO=LFV?14~>c+B!U01*C4cr$p9scWNV(T}=OYOqA z2sNv9y>iPH>TVvbX62@p`~b4I(qMMg7Aw@Vz`vj`cYiWG64Sol&vA$#7cbfof(0#T z`;{6a-aT%`SESb!E)o3W080Mvjc0u=noC{s|lw zr!sB-X=Q8Jlu}OQE~`r{Ej_^K9p)|{+M&Osr_+p8xcRBKk4*hhz89gLT*b_~a-V^} zlU%wwT>BC(7Kn@c`;OYMtdv6&OXBeyt4jSAwI0S;bySux)1b26L2*F(v zT!!H8?(XjHu6J_IxpnUT+S96~Fx_g+O>G#DotjeJln%R;9Ny4_vj}7LYy8zi`NfG75);sHLt&g`cGF-%^1-<5W zQIsesjuG{G!VDRx7e?aZhVLkn+9Q_Xt0do=sRo+D8dqq4ovHFz&Ny^ z)?$q2AnY=rn;bE=*!hV`kn_g!9c3uLyi5nD(`FaSz0-lYgAfhyhPHWvxG)VH@Sw-- zeg#~F8kg>|h9rboyuieunmuO0l2FpXSpPBpV^dZ}3uA@R3tnCjrc4?|5}1VX6I*gP z?Bx5Q_I%Vd8W|eKI0DrI$GgiCwA!bsgzF}_yQaf$tYi&%9lJq;h%-5777Od{LUGt^ zCgDvAzp6N7|6ez$4@5=XHZ4XIn}Q;uMwJ!=CZQ(h^xJ+^=>182 zpIf@7*fjUWzg#-kvPf@B`5EmJQMk13E+(VJ8S!gVN8-!0?7*fb*}Aj3hAv~Cpd7XS zT$xfm<)47EiqL>GK~0(fYFT)#xg<jAIhQEU3MES^c3dnefch^jF^cjKw27EwFJr2rfDC%16rE5o z6rBeZtYBdhzGLA}YOs>PJ|R5vHT!YmhGcYl0GqDGB{YLe)ryT-zW(5q@eh8j&)c|f zqA<`nT;IJbOcDULz~_cNU(N^HVI+!;Msgr|Ut{Reis2$NQUc_WSNA%F!IZ>>8^w=v zheixkO|=LIap^LY?O!BtuE@d4Sk*mj4MgC2B_)6*2zes~hrRS*+#Q-|Q5mTnUauY=hirVFbr7pRGC_5&A8 z%M$&qgM0NMO@qlMK6tC=7Ex0jGji%tFDCJ;t-}^Sl8bR_jH)B7_LrRN zndC2b=Qc7a{ZU(dDMru-O}2=;8bhm1#~9jr|GGLVe0P0&TH1*I{qfzMRv-j7mNw7% zW=VXAGz53oIola;F}?X$4Xq5z;V{;qV1!S_ejAku`@=5&r;|>ySkOL=R)P|~Cz-mb zY{n!bx^bNPqvOF5RDxYir*ZCUTUZDrd+%Zy^Uh^iUF6jz7GtZhp{HO)CaO(AZu zzR~a~QZG3{8x^kvFXT$R(yML&yQ!La`7X^ynEKovN6>dgZa1ZFH)jGhEpu~va_bo- z;j&#x2P4D!!lnR_WU%n#>xiH&~d?k5zpFIT$zEaCmj~2+WV|v+C?bW z_DYL2Rn*3N@FwbBJ9X{gq31dEs*Q@O!Q|<@+Yam|Ub4FxD7^;#ji_6M#N^{2m4};p z(40K_YNHD2CR4SzO~+5xA5^alg@205;0GMkeb48ptTSc(_#(o6vrBvJUroF{6vO2; zEaCWM8^--UHa~NeML5UCDuf9JfUvd{EtFNdfvp@}$qGM~YbJ8yFWv%iQ|$t3gOa8kho~JRP%P)K(@D-x4_B zG>S00t${qh+j879a}-mUg4^3zM8{%SRm?D0KQ^U0c*6B)7MZ;)?6e;2^#fLZOqD`n zROj9KRe zIHm^jCo!l+rnZjwW%Do&gzzH6N-4#PZLn2FKjv}Ac8yW7lv#Z`-&Rzs(j$6b=W!Bx zRei+ySvg~u%;9{EQQ=l{x$YEW&ajg}Q3&0OdE@j>*_QKgk=ix4;kkA@8z2^+lwpy~ zf#5E0EqNZ-&XrE~H(mlHzB{aNx1}%I(?JQ_c&GCP*q~WDhI#OlIbT`z(`F5Lz4Lix z#einpxS<2Ddc_?k_h#Y?eY#+*aMWGk0ex@V5l^c(tHfLq{lbr)zpXKkWJx~>HhP`f z7@M_Jmhv>BDV&evYZNJyD=}$CvLO@d zNRn8g!b6Oyq0n1sb5Ns1)sCr%E4BmXO1i~LB@zFA6GVe%N>qeQDzJpLG5DTeDu02^ zpyT%qIH~tNzw>plZsu?7QhVkZxX&nFouNpT28E~yLF2Ka@PYOPTxS^COg9e_z7Uz* zj}K*n8~R6es!+;_q19yQ=CcMOt2o}~3deExBAC{Fw~ z9CuLcC@I{~eF19>naM=oe)!Qz74lCN3=Mh%7w0P7$nV-mc%DOoLbzYHMo_N|kG)P< za=MPmKuN?`RZ+2#QL3ZWE>~sFZWuAhBJ3WPuqfAk>)GEs=Su}ubn*4@nAdMn#tQt5 z_a_aFQ>qvg8gtPxFJ6Ow<W*`-n!e&-Ga*318oW<2Z6s7T2MkLUtyQ#FRn1O81AO zQVq!w8L3eKkG+r%1;P|4XC^KWbenG`?r+$IiI{?%_QAcXF}6NEaQ@7HAU6}1Q5j&) z)i*og&W|?>#~D*2YdsT|F`YR76Wc52Z-8JND;ZM~s7z}JQFq&{Z_dEKw+||hEcJHW zH&b;y>7AvvVn_j>!^S~k%(3!PFy>(-a=Mi+HR8cZV>YkexFfZM9bal>p!u!Kner2U z(2dDb#>2}-Ti6o5H?ZXA1q`Gq+Pe{t+>fy2$&m)MM~)uODvFXTIfwl#8^W5KI}*nr zrzSS!l(%{8ugY^@&~pw-YuBA5r$f$xm5y?*p{30X`k(NF+9i?i^0-&){Ki`Z7o!lbmamjGq*;}PEKoX*vcq{ zn$LW)$^Cyv1x}g1q-f*N@|&pY7YpIKGs?+4(&e+NliGo9Oa@-awT-6b>C2eRxNS)N z+fLSWg`yu#S_cQ#XM^>^X61YBnx!yHMMzFUiY5$qjjr6Ysmkja;ilz(z14C8Y+~Ds#q;zvUEn$|{NqE=m5+2Ts4QkqaQFU>} zV%Y$0UbquQRxTF0{JPMDuB~clOqZ3lz)MhRRTs{WBgbmfDQ=(L1Za$z#e)c1u7nXi zSLgPGyM!GtnY3smMXA@h?z?;p0r}gm>8CbGDaK}02x|FIlp)5P?wW>*aNi(1~JHEt?rv1;Dq zH*}gQ10`IwyiBJH1ECIen75z-Cn#>V{Uze!y0mh^%Tovo_&@`nQMEuMM^z{<1=ot4 zMa-j=yJvsz+`zMAr6~Df*)o+%BxU@TS@+A@&Axa2i&kJO!eN9i_0->5@b=FKV<_&b z08>O-R4P>EpcG+;C>de$tZ&a)Kf-C zb<-Usf{U*cYCY>JX_bNsY+a#ncPzK58Jiv8?PKt>QGf%46*!l+u@3ejXQ-CxXJFR? zd@%m;1_Zp!VyCM{-YT=lPoP>}XVNxDm7s){vkg(r%dv-Q_(c1v9_A6~#aAkA?L6Ea z8g{@E++B}Wpxyps?(**6cOTW_S&5QYE&!lLd(QoYY^ZzlL7*)d%2hRwr{afd;KWM< zmNn)PUtu&`211w~v{78?hTM>Lk1(v40%<*D`*&xmSAEK#@(X|HOxllTZAG#57oxlq zaWj(giWlk_Qt}>aI@&`9_xsnK2aNQ77nR{ksA5Pf>#CW}GX^M;lxtsoHSUp~pw?nW zl3pN|g(+bBEltw>R+RsMw$udKUd-KW*hVX)pr892vi-0n#MOGo^}k_!dL<9Ze`HF*`?3 zl_ctpiEk#I^>m9h_L5|x%<5WkFbU!B9(17LD)i1Y7xSycn8R0@kO@SMZSF@p@L7B@ z))dpR!n)^yUx5jiKdJ`ebNTWyi?QUyE-~1TMe&7(IQ@%RR42F6A28sjcDd$LA_5cADU-Ls9N=g}BIOPQ_ixQxLGy>ef2y#cQP}3f=5TQAB zn}L;<@2a@|@^z8lL$&xqFr_K{ZY`@`dR0YdN}oijsO80|-T z4?8mC-xGWkk>hQ>KaKoK6ZYT-+(VD&JP2K7ME0JxSp==~(#WK3#c;KJNE>X5e&h;LGB- z{=yGquYc5=0Lx5L==W1mTqa(cK%p5!FGYy)F+o6pkN4wPakGAKc7mQ2LhE%-?R-|q ze88|%pv?RF{`JA(lWmsOz+Y^MDDyIl+wm;P<@vw` zMq=y4h=;cnRHqaPbk;W(k9A%D=jRuP|y3GbVllMIAOxuFlc+^vfcTKH1qW@VOzM{?FfjI=96tfLp{TZT;+$ zBS0InLUxC&+KKcq}mn>Fb=kUHFAmL5ID9^AE4c5U%tMTrdR&e9g(<4z*_br{S9F zZa-RmYk{Ey9bRa;-0TJFADya$XV<0NQJdrBr09AJ^YN|7M1po7wIbv>vYKc4fak+c0->qG`Ku3J^LsY@(n zGt&CdiNSAf={CqG0v}L{G7yj$00006km>}fVuDM0@s11t{2hV-uz((Qv$t`zHFIV# zwsbMEx3n{5Fg7x=HnTHjVsJ9Ea4~asVK6r{GXPyJZH+)ndQ&5p^EG$X)O*6NYogwS z9!x}wi@>Ppa(#~L_lziFT#Bz@&0_u2OcIvnP1KFeY!W}Lj56?)ly$Xs;K(eDzBPX- zaF8qYuF8?mnQ(r457_j`xx8E_5{jRE^3%_qc-`pCK;5%iSy&pcTQFr7%aD!tzhHX* zWMIBo9-sR4)>h@-yvyAWw(zA@}0ia%->`?sc@6at@KD#4YEydUWSJ|)1&?T zmjjQx_COR8TqC-PSAS}xyL-->MHcaINMmRBYsol&j~qmhKTXO-C!?ySJAK==A+dRx zOs}gZLuA_PE$r|$$;1miJ302(w3P&C^BV?pPx}gvhh4w2y$R!6c{?pWB>deGUKuO7 z>OBn|6}g<(@a2fmX0lhec|R6snksyZE8EEI3ro2CV)|AimGqf!`%K!(9^DjGxW(pxh zh{^e@5b{vEtz>rO$8@G^JoNhtVrS!tEKxm_5Q72RqlugS>?h~brk88u!>4#t($I7D z2Xzz)@B~SBKiGv;wk7eenBNJ1RcDYQV ze8eAHXAM90_dgzX9y`q>e4W^t;`Y)CHwsweGQQ~es<%m!L!RWuqR&L4H3nN>N->p1 zZ5sV_d`~|p(P|%oUML>gZCKbd$K6*fJ5llWxpPak!dQ4LEY!DInvSk5?wdd1cN*i6 zwf$;#zboBkibyr$6-9jsC4|-3^>FT)4(p8QGstjnz6G*wZu+Qrmv$x~+xA z14b^nPhcBRo)kqi;oeItuh32Zu@1ND&)h)eD3Bnpq)a0@86#46J?KZ6 zew8+s2a34&Pm6xeS~pn0ea;q@HL`D_$I960_*yOcZr@ugIz0^2GBte!P+UCLiiy`h zfd&_lMF)12oEMN@^!DnkJ3SvS!i}}B*4=n$4kFkG8En6DT_P)ScQk1v6-!+Zq;Y>g z&yu3&)dig!jD_u4Ek~Za0A8#s+n=?VqVj+(RLMJ!*eRa z`7|BR&Z;r9-OV8$w%S~YiUw*R*Von7C%BCP%W-Gr(1- z%3&SjC^we4yEYdaA6*oXTMs=Xw*!kc?h}sHlr!3%jO9E{jn*e#q33=zX1HmozR#{O zk9nUO=F)WBTvXQqEh1Z-WX7LO@cI@KFU{qyWP#IyEp=_I1-++!H49gcP^t6Jjk+H* zH7dUFY)Mj+kFOmIm0>qLmkj*=ug0J~+)oZjQ~m5{2a&9l?wYMX6WCh!VscMbRM{ij zW_!!sSe8AnI6LL}GDeZasyfs>T;Y$o^;0~O)|KVQCggpe!a5Od-kUtMN1~mMYxe4h z1xQqi2srWIi+|p`nYVc7Cf5iJ4w)1Au4@+oHBng{dS!0v6z-0?7*>X$9>eQaYMU!# z`230ns(a5($>J@^k@z>fn ze+`iJ?j3vmhHs8PCq)n1h-qg3T`o&F&1C%$w)jT}xc6Gl5HebF%|og@+D>1Nh*WyU zPbqAt)xNu+5Z*fa;LK;N&2dVSO1s?B*>{mMBj6D_cr)oe+*e4rKhd_R1KpX;lM4ReAv_r?Q?Md(0+n=>U@JoF1)ezanFCxmGvrH$#*?0 z96N!V8%;t;kP9pbxF(&;Hzi?)XRyY%F5}+4**wpD$Mk9E2etLcdMD+;=20##R zF@gnMGI|aAq;2sGWCKa_zJR<7r(3#4fZU8*@__@(2Dy_>*S9c8^3;HJ@D6jN5wLaY z&cV)w+uaCD!ywj$0uH%}VqLRA0^4y<>xm97j!yg}zN*PTDRXrTJG2XfqZzP;=i%we z#oav_{dJN!FAPKgaDX%&91IeL5oFFdnj-`_4Crw{w}wf)Y#;y}CJp44d1Mn9NJ3F0 zV5|JEM3Eo>?7z@j3jj%!kbodtB2ys-EzCifYLVLglb8c>XLXi9g#udCf()ZY<@hII z1%u+l_ArD2LmUvG1r}tV5`p(mf(-=DS8r1|NEE@Y3P3l9OdsMuiLc<02C;n1P#~iW z)dRLN$#7jwgBwXqRgSC#_(TEnCmOTn?&-|)wp&S6MD^3w4D z(eAo5a&|^xtMjs@4}Wlg9>{jRwENoxv+|dI*Cu@{&ebQ11|Gnwdz zLc{{#gct$>KA>6i9Xtn1d|WUZ5T7(cU-#J{Hz_lBvS2g~0=9HERTu5QJ+;dunGBJ_%wl7djjX;|3_6RDD+jMUjGpr43FXy%NkQ&Bn_MKRG)F9ezuj=8OIEtf+YEYCCJ{8t9l+kt}rJkb(m2t>hTYzp`znh#XU z5Dd(oQozO@IAs?Tq`IA^k-{-84BFCx+&2-*u@4<8Gx9E4H1)5)h9q`@c8P6*7B zbimfCw0iL+`4hJu!k};$5-2E;hP+-NyBBBKIpM({KnePA@Ak9^)6uKZ1%~2~1~M3@ z-GpEEiePs_19d7G6a>9kXCBZ&_7XPyp#c-1aGk(1KHWv}(Sg79gS-PJ{(UQ6W>(DB zYDjV_sUZv~2qM_DE`LI9dZo0%g8c@?>2F)w+(YuGXUIKANCaBJE5x?8HvH_ZL$O$k z|5+EJL1#^2sW_5>kAUR&)nCp6VLobopHv`Ku|QSaUc-bv2pHHy4w)qiqF}h-^K0VP zCwaF5WR}7|N+w`C66vxWQ9VHZ3WRPWbfWoKEHSf?=FtgW)$1j-OJ61H(FK$IXBALB zg$@EP@TWruuEC(Zt^J^KVCdE`jEo5o1Vy+X;daamPB+KN0VfCeGdA(lGY9J&9!y96 zLcbAebr~o$sf#}h#INo<$>bvfDnV#en!3K|2LWgM9cUrXh(T33prTj-#fQ%}xR%(^ z0EC8teYk(@7LN}UJ^(Bn*J(AQ_rNwY23S$N+b5;g!JoSTe z6$A+-y1GCNca4sYPQ&`?gLd%zui9AW0T*P?gvmjgmleR!uVGh=5CST`KS1eai(N$u z%C7%}eMInIW;TF0ciX1^SIe_NwcM`o{}=xM1R8J1|GEiqpuPbB5bgk}@*lta*AHsY z_5Zw^0BSLqd4T#2|E-70@&BlY`Tvq07mxqY_#gWIv&(S|vWsZqTX+&k&m8ER_y3kY z#(!UI^fso(CR?hm#-^r#U^4!;)xw)s%Da1 zY8w?_ls8%pqjs>-pSvXR#2N^%e`@i)4z)*zhjbqKy0&gKo_P9EkfE!3{-!63fTEDU zJHs-ae(vq*uL%i6{5CS&)zvkAcmWlC@Mh75)kkowJCq*1!`)%Je@ z@?UeT550gFl@tIN0mbtFM%ZxC+t^#EExB{f+dqA|I^6a_sgYBz$UQh!_Fj&Z4uCwqbC@uZJo+B+=0>O^qma-T+liY0a7yDm_Q@)KM;f zQ_^jL?nlTEWx3LImKKbL^u>E2 z#c!L>wZrFkJfv?!-Dlr)qDPM$|DZEc?PcN+3To4~*C@D2pRKhugq8Fa1SpLaj^C=K$dHdZ*FRW$dQ`DAa5~^2 zb0tj_?||{f6gIv)yuKJ^f$^|1eH1?}-#Ra3^|(h(wppEEeoXOs>VSW_$eX&5RG}gi zRq0P}MWdAtKadv=+DsHZB1d!;b-1tw8@7>dd&3BII80O8?d>otJcu+(K#r4jUT^w11N zGf#=ZFiLXy=mXC6y8+lnnnnlW+iw^b{QO~Gexk~(LTIEE#G}hBO-$A)dy2|( zI}v@ena?__v0%wGk*v8K2&5I$ToebrBTS5*!o0GKiK6@NJ9R?ilB@yFB`?veG3;(r zp*%5yL^!8lyWQnW-t?9rhKx+ik^%=Gxmw>@VK=QwM0gCcT@{BOluyc*Keh%T$2;U{LR|P!!uLaXK*|`@C%qL(F|hmW zPcrQ15TMB)wY>N~_ZK_wJz?s{&sUM)Q_cs~o8r%V0Jy4E^(w*r`E6RpX>X)~<;t1`;Yp$WzhWtH-wLaGwD!mpRmg=RAE z)ZmBnB_}5=TPe8l8sKDNxg&Rcu>m8894w5T3~NMnORO{t$KmD*-3%N1duQej*&%NR z#mV`v$1d1jx3XF!*@@OK+22TE46gGv%-wa}8h5Xk$wl!87}SZOje3rGBRE(B_Y;E< zL(zpCnUMUN-*#gY0MM`V`wFIHIVS25?I-+%U-~vXv?#j*zp5O$4^)AIi73U&N5E`e z3(5}vK*c>zC)bTco@jL!crPdI{IGqqTI zY5JR#Wl+$y@52H^&Vvx=)ePE&=1|KP7)I9&!F46?>=Ary)_Ovr*5Kq#&L~GC0k5W{ z&l3&z)w`$xI1;ONZy}L^`!xX0xKz+q(Z4^Q?{?end8;tb8Ph*LJt=80r)7?FI)^Y| zaic#_gI)0_NhTh09!d&foayEHh^bkP3VowHt*S+IDn{HeD$w$7*6&UyKHr4!OU60z zQgTcD7eyQyf0BKGL1EbjiN$FGntf{n)1GoF~; zGm%I0EYOI_1mv`nDt_m0uC1+i`FqQ><6PA5ye0UzGSFYNv$y&lw7(JxD$$-7rb02% zEqt$xcVD>N`0C_X%HOS?y6gEm!7a4HnsC5^RL9dBd1C9!8(^&2!d1k{V(2gL`Rqv{ zBSO@wX7&gFaDJD|muwkXVPf`lb*rm2+TmdWb4J(!K}Ij_5laW{R@LJe_fWxKnB9Hq+v{15~op%jdl;a5X25w@dixymIWOGX^(RMWJ85eP#2}{o`mjg`R^leccN|8C%HZ zD}7okfkVqq$x8H)wq`0|v8`&cO})VT(Gp|orYereaE12l?YQ-uLD$@%HRy{XmQ3T&O=$bX%3_#GWwh1o z)Y{JW%azx&mXTbd|A&$GPPQ>VPBXNDzx&r72oHQ2ONuNA&PZ?dR68qY2G(d?ODZbr zSS*g@2m-yfA8C{vArK~DiX4^D-4K-Fg@NqH*vDy$Bln33qWM#!&vdd`7?TL|p|U9s zx!9^v!w!bLC^Irk61!l$frZ*6?q@3HAGAJy3N>BcJS?Y2@2S76nhwJ24Np{md&Yj@ zWW+@z9ol)_e6YLlBo~?P^q`JyslVj&{ zucEwu4*vMQD0qkeE-t{pUA zucQjTIfG`43Ez7uw6SA+qWVo9t&1zHFIdF9RNwCLkhi30*$#BJBb`{Fqi4>p>wZn3 zpFg?WN@j_7jWl&z1!84{Lu?LjkA_^i@&-g{N&^>m+nAbm4(rW%yv@l#|3MxLc_z{@ zN6zk)zS9`V`8yb*2AV{w_Id!4tCQx>f=e0ocRa5p^?+h+EU0RGN&9MM2BD_t#Pz`HOjP`RV|~^(tV0lY8~6^iIq8}JL8eztagI2 za*mGQ0aNXs(H-nWjz@FV4KAmlnVmyBCPV(cljPp;{Z$*ooxCFK++piGqG?R_d=ErP zRH0{6Tgjw->aw~g5~&XBqq*?O#Cc3E<}=#BV~Dn<`ptKwH*SQ=M9;NrKu(YH;E?L> z^l9hmW8{>=QuJ93n*GsPcvBeHwtaze;!ncV41~ye+$l&-XCH25e)AsJiv6=?)q-3( z5Eli8HSPMP9=)l`sVUYDhS9jvcM5zU4g(7byr8zznWYfS4OB*A;d0abko2~MFgw`G zY;ApnRW2TPyA0IRh!P%Ak@F~0eo5E_Mw1o460+L8F_QDjJGdn(&;7=qK~$j3WSrZC z?+Vm&!*Qr|#YN7;N@32hOH&eA^%&?uh;@6YBxP!*DXlKH-ObcU0j4UfFySv92K22T zvttO_(zZLEbPl6<7A7jFu;!m#ZQuNm?#|c_A_QwmW%0^pjNcEkU2*E-m2`SxiU-AJb#-eMPJdKd-e+8XZiDpgZ#j_=9*~b0zDd*~qX;SH)E6l3MQ4>J_r_p509?63Pg>83q%9qUWw;%v65b4 zYAQu=wS$Q^ZH%-|*R5gTKLYB5;jc@UAN~gZbTrte559(AB1hg>KKYZ27iJZ0hPNUF zL;NkOry^J-ToHiyx1qQ|G>Y~jz_R@A=-5Cne|8M$E&=u9xM)ME8cKWD%L7GFk{^0g z#2SP)S%sSOIn}$Z*=1HPlab|k&xi+Zxa?Ie?vdxaB-Pp{t#=%x|2f~2S~_qZbrAe@0FhmMjk7fY&4dE ziY|TqJtMqIaq|7woCp!X_6F<^w4yges40AFwjF{OwJIPh^V~I*6r~+MmWoP#E7h3_ z0pahTTgw9i(Ewp~I5IX8I=C&|3b}p0-nV2yzC2QwmLmp}GcwXzAHC-aLAPzWwMnE+ zE?-C#CyXt)5@a#3x~>(JxeU4(7Qqa^$7U`Gv9%%h3-7==OKCg*UJCJRP)=yJ-DXVm#1;YaI|uQMddO>+M5;Ux=b zC{1&;;IPGn_i3}R@f7v31~XBYI~)j^YOY!Adql~ZS)Xqk3J}hxcKH+Q0y3p%g*mfj zYb#r|N(AexRzh#_ZpmKNzK#zDaQv;k*r_Dv6dN2y%*r7!<(&#Hk8MHU>{`8ki*SZ- zLWlizn3`YxcYC2VQ{@@b1t%ZwuHaZ zH0-eY3<*9UK}``_UuSbk5Y>JmV$*KQbW}g+OOTBXnNKH|g1t?IrKMHlPlqAqWeI7_ zP(;NL{8C|N^057Bv%Dy~&vTGoE$Ih5odayUiMj?3?wx>+L(xM3hnXKxY<*6}fy*OX z*oZD%Vf0!{{|KZ^_CdL_vDU75dwO_2c&~eZvMx)mSq16l2%X4z{=;$GVkM z)y{pc*H<6>mWlm&p&oN7HTD8^vlBmGD@q!mXo1AhP}~fP6BFB#KijeB;$HIpF8Xc` zl$}WSpiaO$YwPx+6z<9@yf8N!3~^g^0Es}=UOs@^q*Ao`#&<)bciAO-(YK`$sPHSE58=iZUtzv#QS%1oK8(4M~i$Swb1jG8~^c!$0@)dK65V* z&|+v?>h@Rf^M{wBNMqEL^vM4FJd!J_T5H`&55wGSF_NdA5FmdXmfPS+P8iIkUps5v z?uGLHrV#y%MTLSQB)oB|ZGGvtwC@42eeCAzJSfw+v+{N8@Td$pD%h%KDlg<4xQ)L0 z?&CziZ@)c8jHPvYDyVwLy!{!|yS9Nu*)RxkYb2xt8De64$?`=wJF$Ip2im`fC){1$ z6OfJFB$kkh>JZyeWgZg&5MDIHxwt?*hTKZ_PdWSiurW~I_KMFkmS)>n{G>pD$`Wou1;xqxNReYA4w>ekCy>hZOqU+8B2NnXx z_akNH1|Dh(-5NKMrARf#V~n6Tms_?X-FrLuu5p|Jt67zi8Ncx)Cq@vk-D`=1=N%3P zH3e@CJJRxV-jFHy{4{gJt+5t0qAv$_n*Yau8_j{dj)f~RI81NYm6>iW6kHz10=4AY z#$719@^zUNFrLqA_2XtQN#}Ms1}_ec^&vfxq8x_UhdGR3zM@kJ;9KohsXmBS0nOE- ztZe}-2TCQbi@eFNi1;pV17psdB28h4V={!fXEWF30WTl5pJ>DEmN>6}DN7zyk2Z=O zS*AZ7=I1V3j=Y2l76p6~OIw+%LQSSB=b^MOoq ze+bM^Fff?f*5kmB;_D$kEPk=aaO<6!$JsGSdPUYuPdhw3B!v8g-9jh8os_h})b`U!Fa`2oZ_|>4!`!Y^D^~rylZP^<`%G?7 zjRf0R`88TgQCfWAwvHcNHR9tk$;)81TBGK;gb5Y`rT6sKIjpvxYIEieOvkM|;@jJN_3-XdF_VG^^6xEQUbXjC*G4hQ$ z|NG$G#O4NgG z+;KuXTEBwB$QUbX-`ViN8Nw{Ac=)#7iknFolJ5$9{gRBj0R7m)f*~8PI`~6hC-Obe8VJNHMogllNzZsEjlyWMb$nIKgFWr4v=wbzF+I-DWr zLeb|S!~LD&r)TDBIY$vBKSdv3b6J;@=@et%wxY=Uvl1C3%7U5EUIEN;Lrm97qqseG z+5uLlS=C=gAJ$(q&$tvU4cug(nm#tW0A09i34oCbQdq^n4L6wNlf`G@@#BYG=gsw} z>7=cU1cxGXxn#$hYj$yFd^>)Zde)O=>>Zr_wv=VZ2dB=MD?<+NZP&_;RqE&_0{;0@ z;+-wl$n0TK?_hcmrDQ0iqr5=|6-Jk&O?dKg9Rb-ng~9%(vvckOa*}7C*=4QilDHe} zr|n+8JIC?)s#zc!5P?St@VlDb$FOn6pPqRaPhRhqqn!S)k!z`Q$j&NZ*^BCavH+f? z`s1=;Z^Mf>MpvfhXadII^Umc$?YL}leYAF|?8-cvX+I{TNn2=};K;fS5twKXs^o_M zE;yVa>jK5>0kTGgY8f0SwIa-@emqL%=;Lu=9OcsXSOQYYih~${=@fq}`{yvXX{McPZ;WY&-m*F{)tOFybJn#lr)J^E&wv`z?e>Fe$NOEpB&(gqSLiuf1|fNqyT+#6845)(W}BQGEx8Xv(9`<&*=g@OM*EvV zTTPTmN-ANbr+iHab%$Ruf%v~rU5sn;DgbQsxE*cR68f#N)EG$7+BiccB%_NoX4=2V zBk=VSl-U0;U=;)~tAj`N*xPFEe(k z-4Q`mk|_bnob|O$5KOjfWr{$@=+UAiRR=FzP-_eNylOX})JZ6AN_3>N?87>%5mivu zJYPVRXi{&Wr)puJH2V<${_+i~^e6GPXZ{~dC`PDNqpi@@9@{#|*~M**#VW)t0(4tl zj@CJXS=*5>40bL4=t6*NLh`jg$KTJj-K*Uem>DgGJAO}!^mh!1)XN2o%V&8kyML0% zyk|c1I~6-ZqSTgdubS`>QUW1&hXk~o;XXdEU_ALEsIQU0gCNh+sO3|1b+bz{Gil9#y z;Mi+zLjwbGL|=jg)an2!Wek zdD9cs>ZAFCE%RW}AceO^IwdrzlZH*T+aQf$n zEnD9=b`FMH%C)pY06SzNP5Z<6f#7MO^MrF7BU)5+S1C}-M+&kuFDz95slq8*7`JZ$h(qa(5dVjl0AH!Q7xpu83 zheXLu6FHwL|KsdSWc}p_l+}%Z4%L)bbWIWFbw3{-9AOJ#%hQqDFb2{u>{HSJO-C$f zd;RaWLR^|MJYDtatP?`d)*OM6HW`Y~(>;>8(yAhLM^l;W8S4E|Ak|tTw-V|_lmX3} zr)Qsh>W->U7F{}YHgc}t3CCVuhxVM9(WHjH*DY$^9@%Y^+8780Yq=LpA>;@ z{%NmYjd)NEgb(gTeAs^jrAyeOJL$b$_utat!!8>^yk7`rgh-p88}+{4m`^6)(v;!X zt9m(R-JF;S1rx3pF0#J-jQvN9rVY%nAlTTTTNAO--OtVjhOPm+yS@Q1Or9i1>}50G zR2TaNx~-&jaLWyS?w-joH&x02C{6DNl&bcp={m7+XUCQL=1`c1@zoB#YxOIuu-TR= zEO{ufK5>gQ)UziDsA?4J_4vJgS+)6J@qARO=6a(?8aY9Cy>lPsZt>E!*i`)fqJZmp zavX-gNul6RDAqy~sgMVr0@q>fd|J(xzqu@7mk(rX!?5S~TYzKV2BlF2ZQMf5foLj9 zfavN4D=$GRZ0OcU@+Dx(odRyI*WN7Z)Eg^RfG=^mXpS=?SYHawl>XIr6M8`Z=UJzy zc%4t|MqzENz|wR3?A~u}@6Uo6!BchQe#gzI5!=uwQ%DpYKB>r|`1-mH%&)M#mwbO6 z5;^|r1n*kuy?VN*25%7B<7Nk;z$udmk>=9G)-fa-^Z3Z(&qtxn~t^ema_;SJ7eU z0SX_>{*irVI#+sTCEI_1Ef&+sqP_*jyV@@Po7cbMilZ)_-A4pS0yv*KE%w}wN2vJv z2~XIm%kmw+0Mm;v`OI?&U@JI(ki>VGe5F(XJsC-|K1%9JfK_z4QDV3@1A$H6Cd=_6 z@yY!=5DG_Bg;2Pk*gP-r-Yr%AW-!EltO2vX5s;MtG=JTEu9~dB0i*0o)PCSlUx(@h zH`69OIv>wi9gQ|H9M-m?3gR<`1yY#&(K*FkKxzluv>;l`#`qtcy=8PH&5|XUf-035 zOU%s7j3wrhRAOdkrV=wVGcz+YGcz-!7)M{f>DjmaW43$a9M6-PC;Xb5yM;%%*>wv= zSt!~M9v$Yp_7tYa+|?!IxvUaTrGeY8vzh$PD_rwC>Y>aKghspu6^esoq^@FM#v)K|}j~CQi$2m0ja`)39BT&Z*dM~9Jd7KgW z(`$m_xDvUSMszMdo8*90mmHbc^!6&Aq>sBV8yb2pm%fm3LABCP1VL%2QF~zpL;;a5 zc*=#;Y1x(b-r6|tBx3#BN#?bF%-=)YUPL=k8Z_|4`xc0kum*BU76ME9k0cjd*flqv|{}xB=U*xCA~x= zQ|qfwJtI2$>aXuLNZ#~ciG}jsQ#IJF>1)Om)Cp6I4 z8njAU4<;%9IVDVenxbNT?z00fgHwX84+<@56he-DgjHUuBF8)aP-0#7?yud9Vi*)w zIvO#(I9cjqs6B&{WYdU|7)Ql+Qz{ExpX81gg{0+CxRZ-;J!`n1UvpAwz*%*lrCIl< ztR!|1(zeri;hxgm*7^7o;{VOrVPB{o{Mv>EK=>+OJ8%C7%&GrmJP9c&D2T}X20GpW z9qeJ@W>^3q_O$;-X!%cm7U&oHKL_hq`S0_y{!@yStdQh?uTu_t0TzbT@0B@aXJu9DZ@2M3Lx zu83Z0audIaT$QcecPdQ*nJ`lDDM9|90sDs=RPHJs{OwCwq_0Br-%{Gr(9*`*+Tx!r zbNUAS5dStb|KPog!63PP;n;my0M&mB&&JTu?msr*y*7BC(HI?cX{hsL5x*XYbab6r z6&!mSv1W~w43y!KevmIFRlN~<27!G4gO05;F7L(+{!2*b|NgNb$X_E6=_QF225g)t zL&=vqqP=@i`;aLAMciQ)p&NIX-)a1BD*VGcYn0Qwf&6MZ#8;vFZ>eB!=-^;#Wo%Dt zW^Zj(cBmjHS9}2aAE^K06#mmOUqJuo`0sHFopmiN3?2T(Df|})@a%tc6aUlpS-uee zzit0NacKYb#ll+O{NGLgzk<^Lk3bFd{$YjvJKjIa*0*clN_2f3@)+ z<2vtvWLDCA`}DqSX zG>k47IBbn053zCd@V4~$>iM>$$76o*y!`sk@#@Iy&S`w*`PCYP?kPM)0S_O9mjqCN z*9Rz|lge8|rVkv@O|8w*3lH!)_KiZh=JTs&wt1~}1!hTurh&6US|BYGSBvY!b(8x3 z`ybnU#DIx~9iSruI+5u1RCH8KRijW+GsovAy!CwH*}tFqU+P{bfnO&Yz2N&m;GavE z<0RS%*n1yuyk~8GR<+M*$9%3m^VyN~9d`X+gnuCh;sYi=zr+*EiAD;`#4g1+$3bjg z5PW5l4~B_uHK@^H^`#SM^Ma3o@#0ctI}W%cEhnM@S(Dr8kHd%OfH#Z1hO{O0#iGEZ zkof~)gmB{n;PlZ55R24_t%vLQDVyHxZvfv48zRaZeoFf7x-r*SEEQ7hM@IC@zLU#| zzX_>)@_dkD13i$x47C>VKZ^xJgZO0ALy8HjiDU=q z1Qes=iO7QwhU25jrd#^ck1d~C47i^#h@HSqYP~>h3BUjSgQWRau$S`I!T^O6apf0x zV3FkIFYfU5Uy~Bp;q^p7LOp({=#gv*vAiEF0=5c2d%c9=M~FLrhH$oK{XyP}phvy& zw}8h@9ftZTqZUw3gv37>$Jgimi#-aTAcIVYP=YvYD2%XF(DK`y_{DYG%qeltlaxQ> zzPfxl@rui!a6~YmmbKlXo>U7*oZBpr91Tx68w6ag8XH7R-QL=WSf7u<2XLEYN&fZA z-JT8EC|VEk8@^Awl4-|k&Ra{Fg}kcVN1Hj2Xb%+<03KauF=TJ&P*3#>Ukm_lV{EBL z&w(~OtYt2`>+Sz$NVAqyi56}iSb6q9iS;Znyi{Sh7F(51?MALi%8hdi4p_0Oti7=n zsszvNsGG^h)jHSD&`&crZiYaB&=hZ=QvOt7?uHfXCIHEM}x^Gu+j2BQ>R zt+gz{9(0jHNSilYyL#R0hkKUsJrX4~6!ePSVU2b}lyG)UusmehKbozz9Em!&;EHF1 z%!K3k{8>vw1sKxf#f^64FzuR&U4IzrJQS@@(N>@;1Xu*sIm*V1R7|Q z?_bGBVwaVNH0WEfeiD-k9C3HF*2Qke2Odes4`vN4jCwo?tZLee-{|?CW)(OvQNEQc zc$FY_4}v$}FSh=AC8E#sVEfKK)2?|nisV1$)IOKjc4+E(+9gP<07lPXn|v`;vfH(6 zuxcT`t#GTXWacA){^-_EfF)uF1xP-Q;8;O;e#?2YDzo64;%8N9hIO5Vt8MAF+(t)s zh?xAUR)VH?Sa0#_nFTe0-?pd5HG2rie+7nc0NyM#(~4HdAn1*}CcfdrR8u7BsX{Of{Fx0dK~w*?t=7ruQGO%V`%!M^?- zH`&i3&<4wn6o)dar}korN6^S!(DYuV09Lb=Z)lsfdKz=Is)_cq5|_M-mYYVwtYl)| zcdfgmZn|SyE9rCFki2WLv>s8?v;6SOqRyQY67_bDOC5@#r&&zP7r;Y!h0Y_pfmvji zf8UDxfJ7mQr-7@KYuRx5C9N_*<4+ItOjPcEkPWs3CDx(>Tff`ZH;o^~Z$XPIcxU`e zjtG^$9*STq@!PEQ85pBg&8&QkwRn_ey|tbp37L5~@ycG7YS;GY4jp!74*E%}q$^6S zl%T;qzK+i{4AYJm+6js3012u(RvJ6{ZxU3nvSHzdft8M1wU#GpkNed3Q|>z_-J_av zn>=4VkVI<`r)G$p>UT%H1!+GE!b-@APLu4BQhh{0^Wg7V_t0GQ)y7!k){^QH z-1DJEBi(c5v^u7wZTaX{*N+2Z?KHgcKetogWy5~U`7*2Sq^ej1=a?I-CQP1k8>}^q zHX52z55P3}3P`SJJC{vQRhdI5o#dFWwk$>x@A$tl(XJ(pqJ(Rhp*c~nc|FKtK16#5 zDm6Nh3^#sF5AGCnJnMnwaelKi6}1;b{GUsOjHWOK0#JYwppWbK@JK6 zkCe1D^g10^9?I5-$0Q$U%rA6+3hol$mP8I|?cp76Z&S2Kk8vd+npJ>Xi{aG;zHi3@Fzf%kQ z0x|lx>Fsm#$MK_s0=O5cDyJ!yE0HQ8A?h@V+z`CzHw2d$&KR3rrX7lyVFW&~GK95Y zir^Q>wi%{jhHCJPHoF=63-4DdT+o{OeL#%{-1#%w*KyOs4)FEy0&8(Xun}-I@u_I* zQ)71*f%U#tQV6Nts2y$J;%#E=2VJ)OW6iXMDPEqpn+-S7L8D-9A0uC>pN`2VKC=>c ze)-zVPxG^6#Hn9Gv;Ptg;4|WTC-jb;x~iwA7VwiJ)zyoUT3s@#+9QoVJiQMqTm8~L zx*wG`@`2RIDDo1{3eXEeK~5-qY-DMDX=c5<`-_;Il9(2smXh$gj^ZO-20WtV4*>l5 zFu=mZ$Obk!qIVsD^Szl@t9(kIMnaFWllf)fPv7t76&UNut^-G_0JQ6$-T_N(Jn~oW zp}cEm2p-AQ))3(RH%H2WSyb)3Ui#5aUJEVwo>V1gsrT~EVCH|BHpL4AVuUPnAxq`! zyoaa^);B~R;D!WU73LmQPt)Atf0^)Nm~&J_=+O`9%rEgCqdJ9ekJUnA-+W1}&+C_A zSTCaC3p_cUNg!DLq^>F-^u28n>X**dNp{tQRYe*$$z{-!50ommbY~B+QM2k>0`>;K z`6fM0oLN zk%pk+^)oT)&U^SwO9|Dww;9y#LmgNnF3%Z?^<0vHXIYeDdFwR4Ax+ag>*1U0ZPMW{ z>@CAznAi&qAoYHTiZ@d{6%N)%j8~z%tSZbH*+!`i5t`>oc{z{XKi@{_N{f5mx4Ru3n2e+77UI+)!naroA<_Cw~ZO4NRFJO;V^L zrAfGk5M0S`8We6^RXr7^M^Lelrd*os+%kLN(CLojo#qWsjXd_7Y32LY(`Av#DV|6g zVqkYs3L*FOp{9;2$$ce3;K&h^p95}>cO4A8;@whC_1x7D2LY#kXumqO@n81Ut=cBK zujgF|u~A$5!z|M9eW(sW1BV{YqHaXit#)O+-2`5RtFeW&Ns2TVj%5@@L4{;j`xZ)~A|lNKi>?i*8Z%N@D8$4x$L4WdnWqie4iSnsSAGCMuKMza2&K9-yje!^P-gc>4;nuhFpqYPi2%D<&IeWhC$VJOTmJ zDR-;tkgO76ExQcceqI$Ny-WBj>1Y*DeFw9{006B10N{hY$p3gVx@E1ksMVO&nYBRz zL(&`7e$O{$=>2KlmB;(?!LzpamE`kkb_E)(dU5_Ig)PMw+ z2(+71m`$Elo`VoOM#?~BKOkD@7^w!ylH`=sf>??)oN%7xH{rTOu;_AdrJ!hz=ZwTL zr!XNQc1}pNkQ_ch7^hpfIRQa>*^gGZEob3tnY2IcaxCm2{bux=S^~fU1L_0tA@9cr zc{yMJWxCDB@boXwlgC{0#Sl?2=2Sn;v=ka9AHt6b4>kqN5Zb)31oLk*bl??Q6)ff) zbp^P11FuK+?1^=mM4{3SJ4PV2ambCHPSd?Og|{8>gZY14BV;!VCY(MJBH%Ltc$~U# zf%>+#nc6-8c#v%ZIhXNl=YW7u3wPB<<<^sc7kWJu7uOFSYn~(ZuZ$u0rbZ^nOJ(om z6Q);fW%0C1D-PVH@(!O~2)@m|q3hr9MeQ*zx5!hEe%H%wsf`1F2eZoz9LQ};h9$eT zvmGz#zj}!kQ)(S0F*mJ-B(3ZVc1e>5{}ylNR@1pk1e3y>l~KO#(1AdZj0&=m00A(i z$ElS0AtsD2eK!-eBG59>keeGT3MDO6J$lbX(qtTLgSVoV(Vi&$w(!_|x-7J)xxGS1@JK+L{t7H%_OYN&ShI_o?rU z62-3i4dVS^U_d+FMm*zL7xu_NKCwtKh0EJ>s@T#uq{C2!hWElxrv5O*^WklG(YI;K znpy_=>XFpRu&i`(m(80ErflY@(wj+h68pY@B%xaLp);Ifb1AypM|@1@-THelPSLgc zh&wmBX5_j)@;u{5vGM{v$ezFCsc9Zn`rHHU-oCp-z5r3bM{=yEHDP37q?bA6Emm|r zEn$d@zq66P?MrHPwc#Hk&ohdtGcD*>pz+`1TSrjsWa@r|l4{weX`G*8DZ5+1-T0ly zY5UlsjQSJx(fgMaYwi?K@RYORfP&3l_MO<$%oeC42d~NXlEOF7T2JR?N5WXos5L^j zFu_-6Bl_Kr*bnTB4r_f|Oz%RhH-WK`+)vH9JP`%VIBv8h*)1P57^{m`lMU*FnsMU~ zw1CNQhK`7<7&fS%x7K`#>jS@+I5S+X9K8;fh$87_n)6|%ELZmTC&J&7(l6t(sYyA< zE-{5&=gku5T@N)Y_BRVSU7S8E>LGpAXQEjDa8rbxor1?0^U57cS14LeL9xGBiLOp4 zjPzg#+7Z4mUy{jVZoNn+{{kxFJv99qko-NA*~G}F?Qmy9Qn$zU7w4n;!wNfS-pKpW zUgMhXmCLhi9-3F0FCV+;u=BEW`Pm zv-dZipvH0>>Y1);>q`_Dl$#|>g4SI~qK7}?S~Rgb-drUg$z|t6jh*Y3+k!6G#q)&g z@YIPLSfB(bJX?q`U5B1KRj~{sOhS}u~=o)VUwTg4nzf$m+Fg5v=N*MEh zK4L8_&BvHBTa-WXqi8@q*~Um0vZ#_U7sq6u-7xo>8=Z%S=RQO!n9<7iFl7oSR=OEO zA-BdA)TN;KL%B_+a6R03ul9UEdY*+Ba8mQyh=TwCNArIVZ^_wl@3RB`km<_Fo4zhL z9u=6_oO(U^8OxR)5YMxslF>7}&HUAEH0;#dX|4+KcsMFgNw&m^#Nq6Kwg7E(c)H53 zlD|l8S;8CuEj7d}LOTVrL1M#YJ29?Yh0{^no3e!?)0VKL%iWmaQ9L-DTh^9(_BGNe zP$}K1PLnxtJ^vQA!*@OdS&SHftg(S#xjS6_Eo*U*U!qz#a5@rc&_Zib@DSewoZog?L{sQ=Fuv}nUAiG@3=a2ank z#Ty6OS)0Bxb9SF=+4y_9kfvaHGQ6Gpx}&*09;)*eC@-KjdmssH8SnjOvO}4K4Eh?W zP2iq&7AFAmsxIAs+^Q`D#$(dvWZqJ(wZbjxXE#?&{FkT~-hs%eO~XD=N~0rJx8vUi zgh3ENG8$uDO9FXPV<9gy`(@1U3lAUohwE#ReHH1vk3>)qLXS6Fn5TO>%+MqMd$KX| z4k|d)=o5dqO`lro3x2>|8oGghQ2vToV%N8JyX;rb3kUo{f=oIX3?;)i#=1$blJy^a zf9bzEzZWlr?;Y5c8G4c@6ms%Tt1a&CPj|HQQpmpW2&!jsHj~S3?^$d0BJ?qTXw1+* zHe5se!~IW3n%Zml7zWn_&eaGjoIuPp_?x9?8M}w3AS@zXUUMSrYv95L6prGr1ft`+gB>GAH=`QT|9iGMfo+4;EtVxd|_CQup?s(OtwdR3MPsm{t%CILo?+MB3Aw!Gya6IMukr7Gva%WO zoXi29k-vD4Q=m2Ci_D6T?609hsE~W1{xl|hpL}zX2v{ic0k_I(BgpzOUuyS)&E|UI zC^*S!NtPL+Fc&5ZMONE;A;x0S>2P7NXt$gOhc8zBjDn0fcwvv->TK@uQm6FCZMI+p z<5JF{-qrT-g;zM{7r&Top~%Dr7R4ST@N--7_b%P2>H|a;h(OpcSV9NoR;4;s(MU4d zbE~pleH!WGA9n@gt8Uf3`%SWg4GhGTw`h+{hw!}bqJ>@Q4M*6BSUQXKTH$;*#r9;EZ;7mL~Mx1&=C6eVuyDl7zgIoXiK^LJKRR{a}UUIy=;##4A+*|y*k z(owHT-mZ7UE#J%AcKdsk@|$0@_=0ZDRQZszZyzH?)7tY1Y2Mc-?&~gZ?gvHjx8~A%YBg1UYj*Iw!qCFS!tl#bhL+~9dYLBETvkAC(PIr}%fWkTz1TuIQT1|7vZ+qpp= zaM4LfM_pDYM(h@DysRBXHaLp>;Rigv??3xZDNX|8q1>{|=azNWD)$R^qQB+Kgc zMr>;O+@6cecj^-9ZmaNIn^71S0qxi^#Vzy<{>6A1o{Tnib!GYTg}fH@tR24Q$u|T} zb@magG6*ino=RXMR*ln|5f&C!_QI$g8HCrAQPW&T$T`&Z{-ADd<>RpWNO@2X97%e~ zcz`p#ay?6Wt-UDQRrc}I23K*1=Ew-zb(&!BcSbwSe;P>NUkN1GCut?__04rc8H(7( zU*WR)J4B|@z_)Cu2MnpJ1b${mXsf97e?AV8o?RAIlSi_G=$*XaUu>PgA|1+tX9O^rQ%>HFwC4Oh{Y^$B75_QJqb`BnWD6O*idrm{3^GmybQ zhfgq)E5U2(!b?;)aUK!BQeAK1)kydE(9F~P1O#W>!-oa3@-h-l1LR-qH*W?BKn|&H z0$){UY7d6&!&FlSxHC-LqM0SNABNCwDG!G=0v(dt@{)d51_gGM?}cbUsk*H>6!}#5x?g z*UrGQr833Z83hP{6!)X&iJ%AmM5;EI_mqG0RlS>WHoukiK+Uyb*4f$N=kA+Hi>G!= z65pD$0GwAy7kVPP0Gp!CMS8f0bwBYL@&I!Y`fFY$lbVujX}Z<=X2oXS38RJ?P1sA+ zp~3PCgTOc+d_Xn=q2DNEc?f~*VlCsdImsR6_|%z~i-@Y7sV#j&U|QTI*u2DEOS+m4 z(Ay+*!WZE4MXEUV#n^s)@jmAHT;%~ww|SX(0_s2T)E>KPzjr^0{``k+qIWXvpTP8U zv0`kh_c&{a*e&Eo+RK9$lJdgYq8LsTfsF!_zSF!)vpM($nD)#c4nN(DU*#!BEn#fM zso~Aqu!}d2+-JcGsB^rIM@V4SZnwQ!O2yn%m{i8B-7MQz4X~irYP9HWFR>+WE~}3M zQ|)eoXi94Y=8wB}PY=Kv=2ooJXM|+zi~S2vSDiJ*QZVd1LA<@@=X!P3st84iwt0lfk_%AV z?SQs-@gud&Qu6yJ&9LfQGNBj}^-~vw8x}i)4S5J#RZ_qZ|3AYwRZ~hi8AX!n5c+e8Xog8;*;C%|c?`4zoD3YAHJqlEW!?BX z3+m>d>K=B;$xxII_4unh`F1ms{J@wv$3rodvX$MNyWx9zchMYXORPMqzoho|O~|<^ z4?yjokjIh7WzB?o7+nVmlPhD5HZtu0EK4e)($Tc(RpigFZI)KurT0&dkkntNp!Bqi zDa%}(MzE~uWsWdP*foXVn7P{@e2b8XXxCm`uV?i_!W9Gt;7-Ia9>-gU%`?K?B$5Zy znjVcU9DkqQ!zSfySs%|xDvhn{IRF;73bv!w=C;H~G)>#ZW#p#v5{|?U4e{>}^5zms zTh4}f>wc0u8E=(u{Yj5~{gvt3IBHemjC8q~c3tl!JEK?;z8bW)QaFgrV~t8o{>;O{ zxmGXTOSyl55Yfg~VOec%ae)4B1NG?V7;;B2y)VOBL-s!>q^s?Y5) zo_6;&bt?PMToDp1w5RbBwDzzcbL|RS(u+)N>jKyt^MLfXlOt3;w*EeKePacm2Y|;!caclbt`*+Rs)n9204yMSaV-C-%^rZrzHv?(NlTcLT-s zVgazlEuqD#cHUY)xUqNeJ>ELx)98==Qp1~dWP_3Ji-)BbU6yuwT6|hV7{8B7x_%;O!mC`CQ(}%$|I2< zVt^qy@htxBCS!|RGfbR^6}6~4JeSHfJW)Di=rVdgf znqNneHglc8$vP=Rf^re@oZF^5VUsHhY8em@Ej*zYRZ@Yz3_K82<(~c{JPF|;Nm=bk zLo&V+7aBWZf3ih);m>XI7TXd{u}E+_(i**dtDt2s9^8uB_CJ{DWEu+Q?64Ye=$~Kf zlf^52ZC>wMB`bqi3CHtT19TynP5*gxKTpyA;Z3kFntGU|xDW~SLfef|{He2P=Bk9SyOXPofaiC;YH#m_L z=kaLso&F*+#J@++1#xJJp5cTNoO-=;KqSEqo&Yv%n#m)6&5T|2N4aZxA(q=xqUBGp zyI5xHs25#FIq$k*Y~%br|GRdJhk62<$@v<^SMFWV_mVN2zd-tSv2Mst_H|9LEAc#8 z6^+|CnUUJ?Ykr>4zP{452Bh!Y{?*oI{|?OavZ%J#02M6bUkZbo9ZV!>Of}$8?Zt4s z;`4u$)JRf-T$i{lIrW>dcl}!W0(|Yme#Y`HQd&2%;(XXRo=e=V)jI5s5c2-32Q4F^ zt6>-xZEmk)oy}fyFs)h@H&0aK!36!*M#KBz7eTB3F;PA3@*9L zs2sx|UZ+-VH_TBg>~#D&t=-Mjv9KuRe$ z67puz0Jn?Fm7w{=qq~!AmwHJ&T$Y_7qG?S`R&gQG3F8qfdQskA!I%*t zyThC!)j2idO%(4$Lrl+V;QahCiJ$)c^HSGLB7*#%rOmi2+16RR>$)W5nl(Mg`mWD} z_SLwNPT}%@-MU}gG~aYK8Xk@>#BEb9*z!WAwow0i|(3XGDUf^!K5;pPw6-B-eNc9fg2>{Qt z=ienNk)euZQu{}k&edm*^-q{D?`%gG+qXjj@DFrX4p-I|w3eS7f$KiOapZuCzmxbj zgf4+-Q9}~EzZRtvr4yx$L>eQCgKXe2BUnkd34RPJ4$YD1ldMTBO0SBgO07yI%dq>o z{nf)i9!lyV>IoxUAWIAj^H zb&%!Ju21&~cH^!I1bVoqcxMUC83L{USmp+|K}dXRFTEpdId)j zZmC6+rnha2!-GDb*V>xRZx9O+yt}2n+U;BX@@VN>7eqa`n;21eBHjj3?EGd+NcptTA1kMYakJWUn zS1h{;pS($M>3(WrKn0qtJ(I2ZF+6(P@m>I;MuKrQ?I~)-WVz=(pF01$TUq%!Hp||s z;rgS6a>TcU?gzh{h~M|H?~F=qoTgs0`VdQ8LIE*LEV6xP7C#yu0)N49iD_a_>dpuP zPN*>FmzjyNXe{d+#ieO+x$QKFsptN@?l&|Zst6To|0Hc5A0;wD0N9D>Q?W+a8D@ag zt#l;88W(7zP5e->0e(HA)pF$%^^0T)*s!i6fS^>GSoGwAz%|<*T01tlN!uE4zc}4% z9YKf8Xn3)~Eos^^EQQTpTLzfQ>CW(XM!6U+tR@nk4>`7u9tl=YItgc$1P6Pze!Yym z(t}WlCHX%(>E34?-}A=fnmj}D$2Z+iX2=?Ye8pPsZO@kc=N(BXT9u(51aSUZ1=Q7p zr~~S)wJppW+C&0v+53QNIxoWfS~2NsXIVJd-$a|vgrsGv%7L#xK=~_7rgi4J8y*25 z>8dl?gN5?RW!`q}_d9*o+Q9HS8V1fF!jnp+gk{R($$?`#ZFmY1z#G+zrq#sJ{c1XcZKPHP6COu8p+{V1%_<^7n~~SNTt&VU z-6G&R4Y>j#B48)OYXjnDYh&#PlUjy{=WS1sS#_H(H6agL#ZUdJErxB_pvQmyF_qw% zRrfGvFT?Gd9D!2a)hFdh&;f#HKb4ywEtLi>8m+b#O>MI|AmIF8=ISQ`7T;`#7<>XY z>@k#eo1a9n9FNJ%Zzz$q)F!K1JVYHcl0p8YwZHkE9=NyF z%4A`zw7hCbm2$j_SNd11;~J@zZtZHlMitE0@Z@h~s^T7Af_LxgKYNrmU}l$%ja&;d zL}{g9Y=y+qckNA?$9c9EbW|~yp2maEeD?(L8ls@NtA%-DDSTBz-Om84#fxjCpsF>- z4L|W#lx`Fi*Sm}M%Z_l<6Vz+im}dYivguGjyG(AW=g!uj<}_JG9Y#y8WulyTs25sn z3PIxyyTqkV$beL{4=AASH$C{_xCjIZlisfdxtdFnaiN6!b$VIf7$=Rci(lijU<~?w zmsIWkw)p72k{Z~^f*eh@u0nk$-lEZ8Nc~I3>4$w<9C^bl4d5)VI^m$?Flzie*xYo` zD=sGuCVe4alNC-fL}jyE`>JX|XOtwa&jK2?AxK8!)_so&-6WEKOTUQLFsqCHhhP*5 zn^O3h)lL zs(xkEgOu4P`BoxFYZi2(pM1OU7V_*2JnV-Hk<1OF3MR~t0G)eOb=C9P{5>%~rINz} z#%fl@jB8BS@}|11%%ZuC`8QQ=9xcr9A!Q3g0k!C&nihkr!`xrGxvIZtIa^~f^7#nJ zn%$oKRWt^3(E(?5UoA_CCP~?q9I$)SJf#*l`u#x@zb?P3vyWfq9Um^8+J$rHd6K|t z0^L~4-6_T*x@bHfcd>`0v+OqI{JUZQ`7(@nv;^7$o(J7tPnWy#YqZ2}GXsUI!(XXn z3x6tgS;@6SJ@1r3KA=Hgwam6?UoJxWCImoz4TE4Idy9BgY?A@|uJJ(n%kiWBIV@ zm|ZLuHuXL5zTO5{8ex_zcH|8{{#LvU$TIu*>Si^6!&KkwSAn7B4#4_j|r+Zl#gVpbm?N*)N2i*!8 zgYvUJwSY`bD;;Y%kiKZAN5P{y*y-d>Lln%3l_*YDV}Py}1g^;Ag4$K6-lc0lwO?j2 z4mC~*V)yO%T2?_G(mkYJ3%b)Iuzb7j5Mm#~?Zw7jet;7X-d?T%w|pb_eYio;(ma@x z!pnG)E};r7l7o_e_whF};sVN*dLEXUK(_P(-H<6jzk(#kbd&O8e?6eCt8Ps*y%)#t zK~yljFzFW`9owH`Vp%HGc5z3IAzOjA<-lLN%buZVO_tiW>WSojZX>s@G*5=v_<6|GSKOL6)RbVFEY#CWIVgP;awIrFKa*5`+B6pe4U?qD?JRQ&18CHMUeQgzlz_J zZKke}H>5P!s?>?y9{F9cYqaGy{N$(weY)l6Ztkas%<(!D{IGGz5@ps9>_QM(AX3%@ zC=YAm$pxCENJcGGmL0D+_I;>41z9!HSGdKyj!p~bc0{UXw5Wyy$8Z(x#h45+UER2R zRZd{*q3DtOUh>)h@6}$I zunDG~UdUsyzcS^zIL9MbpmHY9TWeM>I`%6hK^92#R32)XM`|c3ND>A5gGPuR%Ys6b z$IXXrrE3*&4#DOzauY0au>UOHq0s*)mr^%k?osbG&k@^MsHsd>IlyB z`16oRRpS>ohl$U&bMZQ9qVG$}nJ3itayx7S6Uc4KLg#3auR_mF>-+Gp$!INM@wB2- z-_8vwDY(DSxj`a%P@%oyUUix&ub+BU#4l(O+ywiI#}{T?oKJKJUEe+%6u3Bq1zoJk5a%A&0+07)gKrwdnj7wamtrlfmq1+iBE<0^n=OO=ZwkOZY6{k z6b;@qQ#MixLU_RYKI`mZ7y46Vt_j+%#fXk~_Ktl9LRxRIl--Vj_GTGI_0Tzg`#oI+ zM;iMubBY%QBWehN`Z0^jzE|5A6f$H-2l_q>#XDGCW3PD2wvF-g_24VwLZ_}GgUEn= zk4$-_RV@97Nrt|K#lNY}uaiU7e11)}Fj^zPw<5yuDgK7Gru=U<#^v;uWpArps304b z%4Z79vj(ydY30Ya)2nB{BTm7ereH9@y##D%n6X>FNePw>LLw!}=Z($E{%N{KK|yas z;SD*23XHVm;4X|Z1m3TgwZ03rNXiH*H|6uXvKemkY9v6n*mFQVI} zv=&O!<2DE5(WxUmqzJUAlX0pqbm|^KHejR;M_$@j>Wa&Q{Ovj&m3V(^sCu?;t^KUh zpE&Tmp|bG43`5)A{tWveC^(?8fQv2)si48YnKo|)q;ckSF50-@+DQlA8*4R4!JZwo zii&~(u4VNtHFokKIV>h}wJ+v0OQ;eocGrhS@e#8Nb+qRy`49b6ew4Tg<#RwG?bAeL zCF_~P(>K4E9~&JCUi75aMA!7CMPZ7x$Fud_9~~bIq>Yle&EVXaMlgKGl$wDK(Cu1# zyuTO57WIaG9``>TNqu5~!pCh@|F{)Cy3gj^KxUc>!a3@6X4Fv~GXvU=Wdt~B@a|1_%n z;)`lBp)ziJtVWOg&f!5HU3N`AvYa^)JA$`cqMuRdNo0K2g0<`NtkkCpG!F+P02zKy zHt>S5PI9r`C5KFPzV9P(-%L_WA1NOv##|Cj=z^2EEo=YyEKQ@j-(N~$Y>qVW)2QXQ zH8*Q^!!6!w)$vggRoO9Jtce&ln@V}LxFHFBm=8Y^eO}P_7p6f)L#vqp8xa27^`fP1 zXeb++ds)+mQq^aqNxz|{fJynm)tcdV?deV$kij%^V;2E8E@|UZKK_}*b33h47=TE1 z_PJyHDdhf^^ZqgI49L0voPPYw<^f#ae@1(bhMihO-qI@X(^}kX9n+QeDF@>j-K%~d z*6dA8YF<4OB|R{a|{vO3hhKW zvaV}l7Dpm1mCmnD%LW~o5~=Cg)7-mR4}RM)SB3=wbN1SU`&iG1^Yk~*px9jx=6kWA zpa?cHMZj-$u1|5B4IQKm4)EWma7Q?{V-ecgR<-QhYXI;xX8N|Z8LB_p@Q<9HeO(eo zHVfcKHdo%4-mrQ_GQ*bTcVBgO`_D+pdN%|g!Zmre^2*YyL}<^Z|Hw=|JYDy-{SIa1 zIxMpE{&HE8boam?%_n?iVEZe#!!XefzU=AgQ3dAgU=sljzalU0xfnvniDjMzZlWk2 z=vH9ypx+tdbW>wDnuzA7owd3dp6V|D+RZTg^D}!q@%KCBKL1L;bOfez)R?^kt;h=m zUL1zP5ie6&MkM1t>hl0(Qas`#6?;(tmtO&1y}XL`t@qMoS6X(vv{khZbP-CHveSiF z(d3CH7FDK&RS`u*k&zF4P}aa!G-hZzVmB@2W9STk$UnNH2#a)5$DetCLF7S=-ceilkTh~I2wz|C>u zVH)3e+>8Zk{R;8b1hiC%kjBuNgIqak!dR71k!-Jle@Jgj0pO>+yK zRE74}+SKT%&B=KL0_+CZSnW0JE9;$ysvi?mpSo4n0XLQUU`=!j0a{A#4~zn{r*^N6 zGdo0~*m;*nbCFP5Ysj6}qzvNnPY7#Vvip%_4dN`|Q-0_>7wliWtqT{Ii6q6>Ov0-F z#nM-X#j!Qr;;z9xxCD21cXxLJ1a}SY5D0F;2@u@f-QC^Y2bclwocFu``{~+yb+7K) zRjaCo@(T=$dD}hu|4`n7^jPN(ML)Xt1>uAv-U_Tl<8Q>=MSpwa;MTTh=qZ zG4IiRXrT&^lt7UTW_S*>OO`f#0zzJc>IqXR3X$#dhG|acum_>%^Lmc97-vo@AETAs zM}2ALKShJp!#?Q3!U278YoI$FS?j48m55aR)`^e1X1!chCFiKb+c9HLsQC!0uHf2! zl0KG-ApT=`bm_?k#1WH;SKOtvZAa7S#Hirss>^7+=V;t;5SRx(UJnaifJOX$K2MoP z&7Cm)teGZQ?w_(8@0=Bv+3lK=H)R>U`{E4-c|4dt=|4y0CLgS79?9evT9J|;GO+vx z*8hueua^M=s%1Q|6cp$?a*e+K;&Bg&3i)OLO%gH`oVkIQSLnxsU*>0JjXXHdDB~vl zdLqkkx$_TWsc)64)cJNSvc>uX{p~uC!_d7jVS&N+JLP4P5C5>gvam6m^Tff&c_~R> zM?`fmP~g9~GfCgKzgoaAdcTafthu7)@=5Ni7u04!%?JCB|DrQp6XKhyNd}+xm(QO_ z$Z;v(uD;9f2d1<{&Pb99&@)(H+3h?ZOy2R(obZ|*D1z5MoQVq=wQ=Rrw{!Ma>s4dp z3msSJ`UJX;ylu-X{H8VESy5Zx{#YVd&o3Q!@%R^Gw(IgT{N(1gRoSyuhG8Dr zS1|YDn{~yGYm~J5RO+&FW=hc>;`VNr+6`x<vhV6dko4V3;3`jtZPGnpt5W!Det3nneb><5%B8Dyi0 z=~Xv`5)9V<)B#Pd5Q99P6OP+;#b!?@jl+@8%s7A0n-y@pL&VxL5JyhprG&O%*?Yw4 zjYQL4lkcjOgXUL;{GLH$jfKtqHyG2F`eCRBU#5E&)Y{w2J3OaODm_bTX?vhvLh~GA z)=}v$S%w3S72fZ>?FGaIjN!tcmlS#AZATwwzTg`6vF_;<<%aw!z<4XXTuaWQISHF1wayewu8b=_Q#Q%O4>1L*v)<%wYhV)FRpBIp$}!jM(YDsk{^H+-c_ zmgi;l_Jz{Qng9jf1nHZ3=7{+l;Dqt<*Z?O?t!*%_p?G=k>+A4-BrV~gbJ!Gu2RKLUiy%esRq)J;9Cx2fbuqswhlp$s_dC;h`6LYruU z)MJhZae-j~>U7D~4-t*{ z*Y2(>jrM9DyGbnZF~aQ-Oy?l-h5fpadp3VW2p(J$$bd)){OG*k@*FojL$*p}-~`OzAujp<_mFukr0+HSE0Ga!b&^;V&fYK_R%(ndOg7@iTPzk<&dEC{_0Si3 ztBhko3eb1^P=@_9M@p^n&Y?!|Qs6(gWF zWil#J$Rs_6hSmq(we44zfD^P*@?a@w_gIlb@JLTxkSbdDoqcZk_6v6;$saqzn6qEP z2ZNUbK(qgzWWt^j556gW0(<(EfUc*Fdrz*hR~E-tTnU3`%g9TwG_ln@qV6TaZ#TXf zVq%hCj%=EB_sOh>92%4Zi?)2GBjY4t^v}<>mtbIkmC&^xxD)I0mQ$YDerN*iCmiaA zzUm@N*>BHM#6wAX^o4ECF&8ARNs%!kST6 z!@DJ(eo^@B5>~E6e-LVXh0mQyy?V(Zf1}ddpcED3t)}K``lYpVct`sl)&){tyRLo8 z%qY=1zF5f&#nDbyxqj{Pxv2nTR2jS0k5*CS|XT=EZ@fCEAO(EemXYgv=G&c%e5Zy(XG(kVUd zGN~$JrIB}1ln)BRw0gUQtKPlOddYJB{AL5b<}y0zPmD{rSv+-UzqODcYFpXUzJQJK zeJJw0gr;FheRh<}#1?bX_%K)JcSEw^Z?1dHwd;*rfY;PN9GZI7ZPj}8ue;fgCcyZN zN5(ilj5-SKf`f06!{qi*`!?L(bnhos*UVekNAT@LJ5LLn$z>GaKEv3C$LgY4dDC@q z!y?jJ#1NV&vG$>l1(9*mZhFE9tJx;75%}Izu86#}(i*dDy&cNA883vp0< z*2Iu!)GaEkdZRJJ_>g)kGsFE)Vx!E{x>PQqM;$fXDDo>e>41m&TmfLm`G_lNd?dr4 zrQ*m3JK=mj`|$6^lRu4LA93~1_{eWVKVl*X;#Xo)zXP%zRBliSX=nYGbGf-}=iIh_ zmu%yMFB)08@pJHc`C64HGof;w)2*w2Jh!c?$)rgmd<=5gd6?&2HHH&o6ilj5s0U^% zD4a8FZEwDO~0-YW#+;xRKM&`gL@BAFx%lLMt3MDWLhB)Qv)5vp{(FX-PokSAK0}mSJ-x^V`G#^AvjGS$95m0$Da?RBzqx7r zEaZ!<^EqK5#=z#&d_+G*U1#;)Q4k=4pLrZ%b8aydPTp#&AcMD`YTn@>8c9u$HhWTc z%nFG>D_S=z-6;403Hr8au4fZjY4=SY>6KG1*X^W(t_OT#XV^zw@lV88TtM8^xuTz& z8>}+;?Mw$6T*pF^Tbogw?fHg!L{_(x@?I1|daXLCV`v zH~k5nJ-ei{)lPcNO{%B)mi%kUV|K(8b4)Hc8VCMK_!UKFd==@L7@p*p;dE{aY5eB+ z4RMaQQPa};PDFS9rDxD5hW5>W8koZ$L04N$4Ur#sT6xFX6&3K28m+&&+csKu<`GyD zXN~k+LWeZ81Bxq8_hO8nSK)utZ!q!K%g_6Zs4QJQ-g^%rvLm5_$J!tT;&9YkSiLg# z^xOypBz_#NCS@)^+AIG`vn$L0Ke^W5`MuSL$Of5U;z#V8f(JYRTkIskX*dKR%)fby zu}0+N`E%6|{ZD!NmC+;5Pu9a6w}fPlFEEH-BqdcLA*Ed5aHuHd*h3H~WL4`Wqm#u% zB}MBkVIZkxwITPGb13;K+=hK`@_;AZEq~XCwudfnvOj!10Qy^%I%F)lzC}G@tMfl? zs{>KINn{TnpWD{7$sD8m{Ns(4Lqq3!b5dr4HP*xLB!^cRy#;A|G?s?77iH5Vc zoD+C96=S%I!+OY;8OTkCmYQFlTW^qSnM)g602tPt_!}M-Q`n3LV^USF1dREg=#O^9 z$lQAQ_0mO#1M1Wl$3u`P1KmJBvVjmyaRNKeeu!&r`U*TZP-LKs8po;S#s;Odj_tXndo{9xJ(Y_Y`AI z#9HF17SzO$|JD)l2aBOxf?o}EAVP8#LozQnB_b%sqQ#cn&=RXZt~LSUz8jKU8ms_X znur8#EU8tC7(XvAxT>6ZDkrp4YFnD-N_*ePAdrp$XsZmMrhYl}sq<*g)V8XZmRcj? zSUmA=)pw*c)>DGYS?nZ~ZH>KZH>eu13ycN8R-e{OP7H2-jb4+!{O zvda=sqYKy*+MM8PNyt=|Dsqv^5=Ux4Wq~^HJMWbYW)vdMk48nFCgJdFABp&%71 zNQ&dep~ua1{{x*qKNt!8R_*RGmCSV|c?)mZ+`(<$WU6|7=4!K-m2^|@wx#rJ#dNz% zBb2+on@3!tz98CR*3$3NWcPb@?VxP7cO5UGY2dUiGB-E%_y$Oo6@v~@F8_merU`V; zMr6F5HLrXHRuBJaWsrj`SwyY3M*R#+e{A-MejHJt)x;}BZ6MYaOoqlz6N%`Ql@Hhv z1Ky={PZ7K!ylbY)P>kCsVE&Ixv~bJW)@Q(3#=_#;MW463cV&wd-qn7?u@)@KUr-nt z^A@F8F$&ukVT~p(J|&e!njKFw!b>4v%y6Ep>wXhC=v`j_)9FH$SVV+fB+q@T?;Oup z%exDNPkA!LG}$RwHw>~g{;CJ`pTmXoPZ<(1<}YZ^Fm^lXR>99T0Jg6lNj^=8P26F! zZ-b8l$WDu|S)!SREC08&va~cO-D9Zeh^Cjxvo3#Rt@n>5aAO79Kv}%0+W>}GT)$3t zagR*n#RjMg`KD`X4lOLXSB`$8@v34E^b|wylJOPp#T}>gum4Bo&q)>8?-IoGa={Vp zXIyAZ%&4!26E_p%>o<0_=iRrx+$4s~nXe)z!U3I^h)YuX+9y5_knUqAUW5{b7tYqB zumGV)!#r0vDen|I(;Mj+%GLkT)~7L|(M`jby10wgXN&Ke0>5SrTrGcfsKEd6bY(*T zeEtu>iJoIIzs+ies{4t~pHG7{HQ2hZScVoq|v;V;%O6MG6JrcY6sWB+Kkd&zsg z;jYQ-G7PXz_u_+1{~Gb=-F1K@=3y6P(bMp~{>qX`R5){c6Fd%xG_*?0I`{4$X=Z!# zmugMQuvbK!-%d9@^_aVNB4EK+J|x7;%fq|K%bJMb@XWxs!SEZ%-kF!ZJK;_^2*HoY z9e_v_5d9t;F%du#v8VpS;0RNbDhk(g;dF}-qI&>cb%UqIG=hah%2Yk)l|P(+UcpIw zR`LC=pHwhc2+6JC+Xk(S_Q)X%!=UKi?qlcHYSJ*Ddzj_@pf9Oxg!P zH&T?arT2ixxR@cdg|DJ}aEa5)6b2r@MG41cq`^7Od9o0q$!()Kh?yhRmik|tADVz_11r|&~_3h#>DK>r!C?k z4qNimE`j&jSRmGffT(+4!L6eL_atS`NTV9-1nbtZd6<%)=zO`ThLj`sST}%&=v$_W zFj8@o`Qh?eJG}cdXPp60aSt2SriRWJTP3~Dd)<18qDg{D?6<4-G+SKBKxWUuWRQh= zVpA>eMS}@{L2y>Zw)7%BU5VMN1CUOLY;`QzdR{oIG$v4j*VHFiTk!YFFbS^Pqa-^Cx=x7igcBR;yZQXnc1xC5-V6mXBqaPrcN|& z8edMoh|9M@!iF21pZ}S2WgZh>Jj;JV8=LpB?Rs#~s>~~)Ru1vhq1~I`{dl?z}{O>|mMpH(}*VILIE2hj8cFydzWZ;@;vSlEs^sZ~q+` zAEcEI_wAWhRd}V-SjZAc%GPzw97EROP!KVbA{;0a!!8!Mv^@WQ3Yok@le&1Bd70zN z#Cw_X?B;Knn;3}ej?}|W=yUCK|FW@PSJ~bFl%XrD^TEDAXlMKAr(8Gl#cRy|!hj{M zZ2VEP7PrI?@vkg9v(|OwZ%@_got|&*nZ+srYPZ&nKb5dTKL7KSQcV@@n{do_Xamk-1f0^8L58#9rE0CRsA;e z?GjM0!63fW_ClK6%fQt2lct}bT{)|*_2ENb<8rtJz zJayXDwF;Sam4E)NcVJO9)xyFOy3asse>NcNht@VD>7I}T+v6UsBOrsnOlP$fu1!8{$$y9T%&ZRZPUAVl*qRkRt%)L0wE#^NJx92 zd<=+Sa|j4tF=s!{p%<_BpuzUf+pN!9!cWc&3H+Y#AQp2Siw<)evkdccQ;9lYZDDO( zooy|ynI5Z71}h3u^89YxNxENby^5_4#rVW|mY0!n8j{#jSLVEByO=qg z?de%8cKSiZUPbV86&mw|P3~q+#?|^S1ZQ<1(=SrMYkk%KpH_ z|F}2KHc+oqZ@4p zRbVmyF*~jc#L5@l^22z=JS$u$oVkkEh$gdZBQgENX^$Io?nM-Q|KJysN1G$?;__v= zMangi0+5Vyw4;~t8bRXCNq^z${3^7nBAa8 z`s9WR{4HuKXpFyU#18?Xp_T3DurBtT$TsGC!ca=CQPM?X&ZVcL3(eVc7VZ#~$8}C| z5dSWd$ni)#;2kPV0TDG_r~e`bR$-g&A5f2J2do%-QqhVCbLSqn(wTPiR}huxN{%m z@&;;-ROtF06wsM;Bz+!U))#uP>fqtm(lLQ+8O4Jy@Z>R@Nuplw^z}$`Dc^Y-9*l9d zxydclE(DJTjxU0qzb&gZeSR%7+IGvOy2YJ~+-#)Q^w*<9kwRIPtU(Wp6BCKhQ;UXlRf7&<%!`%dTCl zkqbHZJd^zKxMg7z_my;ouY_OyKCEO+uBJg}>F$*L09#5ck#PF8#&@yz=3UN1ZHa%P zdEpiWK*w`j+{#>)j3qp!2@u&UdYV$~+8$^eCjj-mim;7*+O>QReMoBC=svPUjE@DW zAoe<0ghwb+dF5GQEtqTHjD<#r-8b6LAZ-6=3$Bj+{;CD6*MouxUi|S1KU{XY;~YV{ zm#r!Q(>83nkJ;!M*0;_YfsRE+416^Wa*hGlk>3Rk6%Es(d(hz%XJEVR zb!l@&7yc<9LvswD9b~pzv>=#59B%0uJ`r<_%76G541u%*BaF`18-L32;lwSe#IXIw z_*W(3Qs2-3*+K@iWY-b}v7=E)MeJ?dsGXnx8Tqzf*iYw=#as4?xvuVb9bUR?SYn67 z;H~C9zn>f^i#U~zw4(Cb`9pI7+*}J3$z>2lCMB@dc#Zlf20eaAz}4-hKbw)>6=pvrdj4q5rl(1MWN3Wrdg_+Ax+Md7L;n117kM1X zhNiQiYTY8mp)9Bfx)(VNC2ug$ocYq1O&_$_ERm{onVxCBXDT{mK28d-MK zv;$Q#AOKn|Mf+~uJM$S00kH}P0f7>70<~B~IrAyfdJ%L>10hHYk%tU11DO#i3|1I= zk;f(>$>I*enj`H+9{x1yBl_c;#EF1q8C(`#7Bv#w5|SNx@$*}JZ0JS=v}i@&hbo^f zwk!#DVo~To2uJiksECjP{HN2H3^S2i^aLGI0>)KV4IC-S;2<(-1~F!EMESs_hxwjdrj_Gv&!#@4PozBX#iIdUL4E$jUe177NLJr`yKPExj`-`&lQ_lp`ft8LU+%86L2&4 z>-qczA?J@@r5kCxfGUg9Ea7&14v%7OD)L^3UG~SSrQW4>oT=F@UJ^Pl-e-?FO<%Py zA?KnjTTf^i`!9*CO7V_XIhs0oH)qRLL@TIzfOme3+4rmMMn7aP&v;Qu1Bd2BOR`sR z_AbEMXoG`2DNksO`4^em4kRUh*_0j zH(yGL^QA2vA)H3}izjwIT_gR9CyId});)O;lmO=K7H58G{bqtzf52C>q#=@^E>uR_ z0_yNsB^Q34#j*?(2_I~jcd)r~Ge>^OT<3wQF0ZK_Z=bSUP3NpCU;QO{!J#lx2A4Cd zvcESE*B2uSW&1L7=reWAmJa(ICHWJFRNQ`gx9^wpl>9h2oA>&VM3hegl;_t&f^Ftn ziA1^GXpwZ_V1pC0RP|^B1CI4GQgFs{;CUDl5=1$M2cb>C=u^`3M~g0J=m}D0AbP-; zCw`|OSbCu3(8aY_@n7)%!m*zHp9*!3!(?Scc;t=JdzvFzJK0fDeN((-hS>)L6;!FH zp2wofeq)_9h}}z_K#g7UT%$9@yb97^k5+s^6ox4O&))g$>$=DTZ!-1Xtl+ibL1&$; zR@gy>m(En05y8KOALvSpVpB%Y9V7uLI-I8&YZ_S(*O4fAM_GZ>w*PeTuZFZ_T_VeFK%;+){;s1ti41i#FU;_ml>B$A z@U8bE!Yoq|$c_@W)ZLjCaue64^t4=A9N+}}y`lPelI{f4jbOh+j~>Is`+BzG!&Hp% zpXUuo%m)wk5jwOHw-M2I&r>%_x9X`J*IpE@^oxzE@ypH^eD72@`kUOlVqvXPTKYTs zU>gfylChvG*dtsYoI(vu&4=Xvb=P}46w10b(m7Q8xOKF}*nx-CxHF2Aopk>AJ;;VS z&~tdkOmB#YOmxrmg#&hB8jrSV~;G>S!7!{ z+ia`c;*lV{CA7pd&%g2zk-gO$O!B`upgbF&nW$jwfhng2=(E$jb!%06E0E%y{CHPw z<9zyFUOUg)ZHnXrQK(D@j&2=_Vck_*8dA1oHqjg0mgFi&=xmNHpy!F*uJOL&(;q=6 zW-3pLk4H2g^o1SRN}YH@3!i42F}j_c=ffa2;-Gskn~6^-j9=y^KUmlGWGA$Flf3?fH92O%JCLm(hNtjmaZ(V+_L3J(5w9YpSt z9YQ#WA{Q`wgS>AAgT15BiV3#hg-~=z(&4-iWQZ-Gx1i!-nUF`YW$zMkm;*L_`!>_~L1xF7^&+X3@_nC+}ehtE)sUk>$ zbi<~^)j-CYzUz57{Jg16x@w4xejobaKKa{h1;rn=+dgNT=LPGGp^MELfdAQdWA0hV%1T55yD&r+WW z@>d?D6Guz3!cAbjIM_KhXTk3_A@IkhCI4VHa5~Cd`~ifj%4H0Q(<^E-qKg{=0IR^o zorLFrl^)6iY`o9dF4Hnf-W^AFMyXDHQc@XvHrwb^y?okGGPk3ky^yFSpS2x{e^y(|(#< z!j2I4@!_im1A_ljT=6A5jf1-yg4{CrFnt=hP_<6(GUEjKm#GG&l3b7q_{l3N)* z(uD>5mTRoWyebgs%SKHOb*M=D_}F7-+_F1ICn~+Hnx&wITbX&O}Ja%4`QjK@0x ze@Z)u)RoDxPY`cCBZ&K=E4KA{0e;0fA#~H*yE(=(&S+8f+X6x{#_!i2Gh1qkTKD%f z4gq8X_AtN>4c>23uj~fd)*{bq=x+}v9UDO$TjRa-=qEZT_pQLAnG5s07$oeWa#w`4 z{l$s~iywc?;&!(*`$A|~>GEFYrbVW|Q^BYnruFdvD0d%b3vv<)JlDKf((N~?br?8-7B3@*0^KJazK)q%>;tQ z81KeUL`gj{yx_iT!rOk~QYPr5kA5(*|HocV2>4`HT^5uCeG6YUy3^S;)LBlyo#C_wi{VzF0)M4nnW4rSwxTG6X2jl z2JOw_Th*^{yQ5f}>WY`Lu540&u(C?!#lk=4U1_`T5Hlw<-xf6R_vXyK?N~_*|NeQ* zvnKJ?Qr1hpnAdctX~6$>0v^~P68>2zl9_lqBUaPJXv8s`r1>xN{2XXceBZ)V&1K+J zFm=$n!>LPA`_`29-bWvI?m%4a_=ag=HM@9{jM)x;8x*F*3QCXaNL~{5X%lHF@X>+7`bwe62 zsaTJZ)gfPk*i+Fg{@tL7VDLZtSgNQiQH-N5+PKG@XAwWr6EoL>#m= zUs!kp5^L8!`Z08FN|$%b5835?GZ>d~m>x~pOB8h&Z)8q*9B$nLUvGmB#}PiJI$Mx+ zo@dwB68B6xr`?1}XYNRIF&bc~p?N2hg6MR7jmcD}Y;^vB>w7cbqY9jRcAtyj%HsO) zfd52*xFcg}bfO=Mldk{;r^EECTt%#ZZ_`h+&I_YCx7$87CT_E2SJ)UJWU{`eD9>jr zlk;}kQh$Z87yp4DSdUk&PR|6i@w{U-bM|bwYE48U;^y8U6)13y3Un=k0KprK>W)Du z_#8R%1oy)E66>w!UG3fPt=j2p=q*V0M0qU|1=wQ)iggBITnrred;6m&p6%TU`m;cM z@V)Hp-HG^rLUhwY?C9{mFy^3t`0&DmKJA99h9?L7LtgzZ6RMm(tlK`>W7+`9NjJ=6`QXg9>#z=HddHM4Abn}C?;()|;Q>|Rn;UjAB5!(*nW!u)cL z`J;QYd*vV!!ojC*O{DQO3?g)- zP|Nu_l}*1yojKS}13k8`F`1wu`Lm4I#29UD&~58*zDa6;Z`A&yNF-eCpO^D=J0-8i zVcxcB$9O68Y-U{r znFiF|@*r}L{EQK`n)o!F4Iz|vE0;8;Ck7ppTo`s`au@6mx}1d@gz3XR>h_V!gfGZ7 z+W+3(Yy6X|j5Hgt%*Ot#xace!YjC!+q`ibbd`)=ETw$bp!+S>*3gNITl1I0vT^~_# zItqATIyNj}><*~mgyt|4yQ-_Ef8r= zd!@Ylgs4qZ+=^j<6BG|Yn#k@ zDIaSBfb(X0DYx%1TTtELr3)Gnn;XW&cH}cojhx<#l9#xBz~@pndWd~+&4ny0 z@4=4MkMENLrlN2z(nq;R?h*bZANUWm$*wMW%(8z`ZKo z$9>3Txh+Kn?F#nOO0fa@fGH%xwB9t7Z%Rocr44tPW`n+Ker|K853Ep(1wfyC4Zo^o zA+v6VV`F<_IQ7xX=N>-oq$Uk~9Qw}Ohg;8&>lE>1K+E=T6r_Nxc*dcWN!DESuJ{8; z^|Sc`<`S~noy`tVrO4;3_Mwx%(|XaHn?Tnp)W?SJ3>Js z)fmMsh9IqnJOOqy|Lp-bRfGD#WWU?MddX1@x^HP?k=rZbE-%S_Oa6U-s#~WV9~8Qn zE}izMlxgb1z?rj|@*fn(-g}>gHPH^;?;_W<2(=H0NFabet0j;x$V|-E+3U2WTalA6 zWAugYb-ZU{m}xP~CtO_T`3hlx3t3oaxVuq?_u$jaN$S#xduE4>jT`Guae^_+>`yn> z%pZEv7+n85F&^ldk?;A0)D5ZKML-knw-t`U+n0Rs_%$gE2zLmGT?p1-QQL1XOD{ez z)i1a&{V$9!-@Ju0&NEbINoF_x)Xhpc!+L*VLBGMwgWZ-A#1;I~DQ9S>sHkY+PU;?1 zj?0OB33WXj5JnW?hp7Xb4uco75&wWwL=XxWK&pfm1I-2d5PIR#?=0x7={)H2hnHye zX?2FppEY7O@6VO^`d5@)DOK`j_-52*UT*kjxMdV=@-*lOPHDz0HhtJZGIpeKs1nmP zQvy>LQ#I46-ZxWvR?@hdQ+-=bTV@PCS;0|kY*>!qzXNop8MVTb){}ITK947-ytWdm zfuqd2@PiOekC-ALh|@M!7~WMfQ_$TGd^ZIpOtyu4q@Y$8|APIP9ankOzNN#{w}`_% ztTgk^DNT8;r>_va-WGS8H#d{ulh47J+?kN@S7*>54{e~Z(jvd}uvs>+!o-z{?DtqMYOR~~;Y;_b%0#%d zTk3OZF+?coh0o{K^WN^kX}ON+FNF=3QPg@!>$EdNMXcZ8!w14qN*Z5naUD0sHktd& z^?ALvt+OTPb|M4q;*!m%pmYjF2@&v5k~%ri@9aB*qWzKL^Y8^WNI1e=L@69L&YDm@ z37{({I9zy(ixBYjM_Kz*E|9)IqKu^Z<_-y}R5xn=4c+0cuT6n9_Oab!sirgJp%3rdG&EjmVOkGPq1m>Khxn#8LI>vzm5r0OJ-V5 zKER6=6|l@~mF8SHrYZM!n6QmXYS07qlx^@Y@j++q;FRnqL1R%kn5dVk3*Xl}l5E^NdN&T5@z|abp!b{_baNaHO^y^v))6YF6 zbPQ4V;DQ7g=>Atu24+C~BK^0yzfwQtSnKS>x5#mTLwA*>Fa1qUyM-u#Dyw{NSC(ERFzluf_Xq+^g!j&9LEf%bNXkvoCN z9X>crgV`FuHP#N9l)-#%=FGy4GRB5f1Nnc^20M47>-71T247I8(iSHIo7+W2ZDOS#J&jj zQIDC)vH;8qP8U=+#kUzIum+XCC%8Cw4vp`Q{T65;vh zWq>s;W=H^~@O|q$C+WJIMP|&}K22WXPKYpa`u9_8x5ib7p3BEg^qu`$7RWQJ*fFIl z`JjWcUTci;nKIwh`^6PSsc=`pks&)r-+7$DX3(utpebnnfO5n%e4tke{g=(@P3+NR zGI@?Zv==*d`&L#2E$l;Ha zHCG+inwxHZ>S&dH>gsbQ3*`c(1pdt(RP4+SvxHS#OW&|~melzx)}>$eSn|$jz8kYi z8ak`g%n88JTMIqt+z14Gn_s7p(|Wc5q&!QJyU*FpzWswD$uRW6aPuWQk;tn zX{UQq4TF&BseqPYp5nkBe`T=5jg-YNguilHy&~=o^(8}wFk#rcQ)c#m zmjQ|v)V{93WkDyJA9}VX7 z;BA%)^UHq7)gWwq86cqfGU`jR&Kc&iMW$Ix1&o3t`ZQBiih zucH06o}!%fF!bR}th((Hg48#>2&Mx!PvAQUs0FS{1}i#i$SiGcv`rHo0XBwtO|1a_ z`3Gc<5Yq3XkG5BH#Ne^x&Tqq1FAWUd@)O?|>tD`8Stg$CG^pDx1{oo0J^w_mqYLf! z>^fUQKnQ}fi^woFuo#KYH^9%^jt}^!PxSMTfg2#@@_S@Z1YAEvL=W^!&vLJ4lG|93Qw4+JydE$fqj5y!15ziTD01bETnXfc>G*WP;%# z4hfbr&s66^q9NM09WdEQnyD}u&7@WrL9+Z{LGmp1Q)^@K=K~8S8I%D@(yvWw!M|I| zTl7>+?=Hgb7+!URpsWVim#~rjLTPI#{!ij~DmB+Zn%@%U{yvAAnS!wPu<}DVrEy!D z5`lyMFq#`%=)b#_)9y{PMts_-15304MAvhGFTLAQ4_&2|c3W&iL}mU|q?G@6H@QwI zF60YX(gH%td_LoPmXw>8AGgb;fu@ACQH5g%!p1k`KmV#>J2!ZFUYa9)^VM+VUXcB+ zM>v{yNngF1@#PvZ=cH}V^Wn??=~l7VRqy(j`G|X7O9NEX)jnVYZNFy|_YE=ih=*1* z9-SR%<-;h(7oO(Stx2i{e?-0}jOgjA|5;sAQ{Z#`vW%(oy(BW(XU1ps|3gUP*yddfXfLgfzh_8lvMs%~JD z^plEYe=)-w34hG*g+WXYaW%J_B;|>AfcMBdT-iNYXe=Y5o&uSn(p>r^PS*T{TU4pP z7vCj#hHgdcj%h&W?LW2-c!s8|ugqAXS6MLb5m*U_KYRyI52nyv4FA7GJqSd*3c@3H z7*mauDT8bojOmWxfiawZ&WA!f`^|*QA8z1UGk#v7jjLDTWRIwji_l`%*husP8yQ+6 ze~_(#7F!DY>MB(UpZ!=W-kML&5L>p#wf?pa#n5HIVSdyj!DRNYR3j}|Q|;dc85 z@Exx4s&%kO)Z)Vzj=@7XZ|o-fq%ke$G^DZJ^Pb#ZN!U?N?G)2|)|~(2kgRklG$OC~ zp#L*ayQ>;MexSjhZ^{Z-ysR_dT4OkGwQ;<{GnoQC$q=H_G#c~D!0Ns2IVj^z_629L zz>D)@V#5UoMP*2*)5VWk%bwRw0p%v)IjMk9(m~8+yA_nNv=XDVIpf21)y&j~EH9|cRzdg#Uc3JuV z=_yxOPVtW+E@H!M=#KYwBLwy(bL)CP1*yVo!6Us?DnU=E_$4ZR->D+XU1JD(X`3Na zNmE6!C1(CQThEc#>n{tvp^8$^=IWb!t$`<+{H)`3=ytO3w`$R|X~* zthbw|r!X}NcCqT{Uo8cQ!w9v>#*YL(!u?@zPXR^mk}ko$w1DD#K7WK_XkZ>F3ger@P z8e^wP=D+faL@Ks_DU;Ql5(#6g*+g!qvmW?zUF?=rZDyZPm4km@4oVgR4E_d!u>CUx zjb)Ecb7wNDV5yhZb@I|Bztxl)IQY|bx(S;xW>3;G70@Tv4>ap=kGa_>{*U0d9 zu8xFfrE6(5!7s1tMSa8K?BO+{SJNg_r!nYPWOG|r(B8Z~rl-eNnWZouINR4P!0+H% z=l2nF-C=BQapOOHG!vsh*SfE79Mg;C536>1$bE^`L4~bLUejW;nR+|AO1NN$`7a_( zb|GilUl$qt8~7hh@{%%+$#dtsyI)j;^6sI{DvPXvKy5378pmPG@w4>?>!Mn<9;SV8 z+LShJ^tg$`L}mNPZ|`5Hno8cQ7w6QS z@+jCk4_qoiXhc=ESRHb1bpY;R{zUkd2NM@27%F53* zP466BS@(Po-`KXTNhX}wnAo;8aVEBtiEZ1qZQHhOz4!Tke(!&`PMxZ*-M9BXySvxw z1uliY31gx{P>2`6*W~0+=oV(vJVZ%O$l_6VUpQ+_&-OmS*FBBj(d@?_hwXCS4&YqU z4(m3WPYs%PYku}LdncC?DBLUIh zyR1mcf`FO#@AMBJkMw%}CR)VfQ<5Ws&zJS;jn8+qCCS9>YB_mndI4!&GyeU|m#UA^ z^Ye1;fOU$*LQ5(EfeXQ?pv`Nyqi)8POD;SvXKpjHlqmsSyO` z@lhyHlHZ2f?=Y$sJz1==s$xJ(TSotp5$ca%+Klw_W!ugH34V86zu5)gU2(*)*rSJ zbr>zt2>bW=!^KlrwQ;S|lKygGigF175qvr6NYHl?B$yQyp3!nxQhf$)x534G?m7!= zL%*p8`w}JMuA}(t&TvV#7akK@9_Ugbe~{K6X#jH68S&!aTJ6ppj5qg!(wjFZi4>3{ zRcX;#!!JbW6)vEE{6W}~Xrir=+KK1;CwmUvWD{=g+2Dp$am8i7$5kp0+Z|Y;jix|x zMB!_zXVXlYob)aeY7$k-Jnl#j-Z!-Nha(|KCW1Uh@rieqdY^0Fd8a>$y?k8`pJ0wz zl~UR<^C`Ec1~!bv%BMp{f0>O$ysl0>JY<4`a6@4Ol{ZDi2Fv1a_(k|Mvb@+9D2HuW zcxc*IzT5m!DsGoZ{n_!sXYln`hnV-IINFaH>B#%8;-@8ou5+zikUh|FPM z#xAL{3T<^#Fh_`O3$&%bXpV(K7Hq;AuIf0mKcAMJ=3=-vVsp(pS}+jQVLoDvl6&8jQdUpUd{qz}i||kwV$(-=tQiX9H+Az*SMR%|%*SQ?b64CjD<~ z*ilP#O4boGuenA437QiAMP;k)BoabbuE)V66jc}*jR?{Yivv065ATI0M{N){ly{Y; z2R@5DAFgHGviNbbVvE|j)W?p@NEd4m(`}Ktitbv4H~G8u!=BGePJ)waS(BakhmE5o z=5*>F9BA<1HFo#iX8(3@19>yjhRmGl-Q=j8A)!`ok*mSOnCB-e9^W>+G@(FBeC(ka zAIXvNjFD<& zf18{8VJfXuO&cg@uhny)ZEp|^l?XifYii6t)-EWavB;l0CAM_v`r1*>55x5B7yVo? zzrw*kb}??aQ=pn`p4)Bjq@sP7euqpKqWGRdoGM9t9S~$Rmzn2Ik&L3R>Fss=qL2m_ zS0GXexuQqJM%Ot1QhHSIZ?RF7NuuDAId3%)b*wnUc9i}?@PT^U@mL|91w)NUA`hi! znYQVDq~pvl_tkrXJ!?&i!{0QtTMR6a(s{NsWn&iCs+~(3TXa zyu?);5f!@6Lzw;C{B1jSTP#-gs1d4NGpD$FJ8~QD7`j*Y#e{6)4*;sh-?8Kco;E5; zk?Gr`L+qKwIf`^dDjNQNbkn)@|80Q5QE ze`N`zg3aUhs%;DMW?P#)a+jSIvQKUFg7hEpCMxGkuJ?$2&o!b&!+i9&mKF}*mZeG& zd!rQ(Ma9`88^DgMOC*nfM1w7{FT{WTI6@}8jFBTrI;?jq4z7V_mrT?^5T4mQ;cITv z>at`ASpLC3(~lbpoN?_Pl7>22WpFR0UD&dQd$BhAa{HP=x$h2dt^IN`iU{yW3J^gO zAF3p`%r1|!JsqqUGa%}+%bp`7LvZHTQKFrk(Q7(^xegDwHVBfAKAK;^@yi@Hb%s67 z=J0$MyQJ6iunl9i%Urp8$MAR_`6U8x>`oo`YC|XecLqGUaK%Pcg&uy}OY9XpLL%RP z{r1yM#)k2~|DD*6_R)6EuB|=|e(&1SfYSm^&SP4>3%k!v=w5Vw2c`v6;AR-;-6kVI zd{)mtxbP{3WBsR<^B%*O28OG1=Qq6hsnB{zRY>UVe$-ULFOWZ zB4pl3#_rna8{w==y_~G)%`-Dxd=qHl0au?>tkw4t?k(mKc0g>88jqQu2-3ejydP?X z$;qb?8+V|e7X)PtPE?N2O%ov3Sb_#SjK&F>VACeKo6&?5-3L?N!AdDC^hA9a#2^JG>N$tep1hN9T z$RA|z#&5LuAg3J}RDC%2&F_YdEbDvR@@%`Cu=Wcb*?s7E_k~S-(PF<}S3+Z!BVDT= zUru=Vc8y5L$w0L}r#3&Bxh?f5tauj;A5BX-soZ<{1wqe~rVN8M=Zy}-_U(R?T3J43 zdwaQ#6-Lv${f)OTync9G7xNPZ37zHb;QezI!s^^$4=(WpNEy{VUdBj(7*}6*ISL5` z4qZ76p({!pw`MSgr{>MdivPty)4dviFwj_>4C!9W+DorZCR?0t8%qIsB&jM>-S(TT zV>uW$Y_|+Pj~7MM+BTHFeAG?hU*51{!TsK5??l_r92XhA{N#uu2#tx`xzP5buG)n9 z@8nH$_6k;$=haTso#KlU4Y+xxv8S+oq_bA|qEo4` zc{N{u6$lNV1k?wcLti%nt3SW^3)6V6A7eJypk0H6rG90_#&9Jm3#Jp!XeWpl%!28& z1NoUPM@qL%wr5oQ^hF!Vk>rCiUNab7UoiGPRmg2I1>^Kdxp7&{YHxw)p+D%+v8L@ zJlxXDz{3$ar3&j_8EiKnEs7IB6=A8!BAeLf0lF}<-DioLTBnux(;Z%M(aa!ADm78il?nn{jABP0VqG%My%sk)TF z!}oeQr!I279WF9Q{|FJq#bHuCKc z!W5CqIDO)h6~D$0Z0LH`eto==vmZr8*;kWecvxjE40(?iZp-P;18)D(@Z3JKTOcGR zbA+EBJ}n(i_Xy?>YD&+nyUZq1u55mH1V|vqza1q~e5VJ=08>nk>XCToTAUf}xRn9N zHc|mG1~CP1hpK;*wbpw$e2Gj@{L?r=pGb*+Xk2=ct38T;5dG$;NAZMXC7=l5#Q7`u ziE<|)FZj6v<~s}|jzQeG<2HVmLF9nGx_lr-zam|I{|807@R5hw(MJ+MDFfwvaS4|*FRZNh?N*y`IF`hM$^<2}4$8rM7jGUXpO z^j)1L_TfE&z(!3}sa4PkEvH%1ybBsPkuytR;J%4O)LQUP?tDJp!qpO-o^yE3u$=^r zXJY(VkUgm*JqQ63pA*CaMz?9Mf~#TutYGpq!GVNKg#yQhO5R@0TX(c{5Fa4QeX2 znbZ4T&xcZUYv-$m{BLf%ogb0P#!Jyph2x1gi|0?o8RgxkouA24D?? zLb5cqf$GR@@Gz?zW(%^fsR|?vQ-RdNqns7GJ_0~9GqD3R?we)mu&4#o8`plwcs8@8f&)eB4!}-ak$2oKFwqKW4 z$m5kiIazNFHt6~PDt3Khh^qa5*Wp$un5WvD5y7XA(lghf+@(^5H6!!e$+)AcFY^8K0=@jX%~m$R*> zHfOQA%~O%j4%7cu^)Ss7Wh}u_pcK6vv6QfPKk&O={x#9>2r%DX*(pf%fZciT8#ZK# z`wO^RxHKj#9`Eo)(mWk}oxYg;2WC076{HlbgDO-zq{r1z15=$8;k-1bJYC9Bm37gw zrZtfFRPla#==N_!`S{y2;PqzxS0t3+SA=TO|MMkN7ZY;YnTTMg6#jY0$n>+>fE(|9 zr7v&vcJ6d?oKB0LIt`-=VT*dvg7O{W2Mg_!Ca0d|tb^)9Fp^hfTF~(}E(NL!Z>_8f z=_)o{cIS(3=;_rQ2#In zhu(|HVaoM7P>Qf%)>h-NB0T{CyPY+qcwh7v)<(|buTo6uCrGy;b#Ft&Pn&myVFh96&{-zRB{mU|IuV+DOp@7+c12&HiIlrx*W6*nO93sr=@WqaJhV2 zEjf)ffFzQrSos2&ND1!M-T_CWcI^UbVC0MDBIe4?xuv6dzex2iN%&2*rmOOGV&x|prVQ*Y)z~PwxiLZ~ zjDZ?}%IoI6K6~L0*o&Zg-96Y$!dx_Ap$u3zg%wkfo1DXsw2!IP) zkX}^s(p5CC{zDb9>0KGm2L@ZjZ)rrUN)tg~>RJ1)hoJw_8EyTPf0{E9 z<7C*q;>g4GadU?kX4r^S01n_XC4nd;)$3+t)$*iI5m|wbK@1tro*0*uE-QU>3 z?1<~4RT-bS*aK|rBvcO}J3WmeIEB9n;__em%4a&Lgcb12CJnlG)R_naxewQXFpJf- zO%~xPiBVFGn2dU3dHEP(jXZHk6cpqbYH>{Y*bEkGXi~vY*tmG#1G+dtIY->Oo8PBbZ4b{(%4en8&8bp!s}y+kv=@}tVaFn%G~@+Ck`F1 zL*DM5M*Az0>iW!Zfx`kO2m9Yuc|_xx5~78ZF;wDH?-W_R(ISbc;tb`PSQOF!QmG;_ zBJ0!?o*Z@g(8R92uYX3!{>zD~)Ek32tcD1b*w^HY!?Dq$LyxRTeiIzF|J*nvePg1v z?%10zRHAnqCnO9;FuNnICIh*{Sw~*VWuH(x3H`kp-#o5T)mR*?JRkpMUc=C|Me&|n zK}&V{2C&M)k9(LxELkF&%&B1s@~s%IBx&X38l>oEHUd5tY)e z_bqFeTy3F)1_r&f(~p>aRWg?80-w_0S(yK9RcT0d_Hsm%n+=$2ss&3PxCJPi7arfT z4<5-Kk4_%)%BIS?L5%%%(3qG=ifl4()Kj?F=fM6HLMTLE(%V~C=T-B#xp!B7!F^Kg zCXVOYZxHnl&S$X!L-X?f9g^&9z*5D{^nX4)efW?h``rbJM|qBgW7Lz-Zz;{M;eQLI z<{g+sxBmAnT}ie2C&Q%X*0!yOWPyS;-LYUHmDR?;=Xo(S5?hK!grWUV&GVb$(No$P_qb_Rv zoYs%+)?mm4p-<}Gf_c{KJ9r{&pJe4j-g)Adm7V*G)*%_0_qsdDc0Ye(RP?eM*hf{E zHI>d|sUd|j*0cLV@*N-)`O(2Mx`fcvUCQb8jY^$A3UIdKu4ZnLEuNbv;Syw&7CEfC zPsy8nx24iHQ<()Jhg%5GSF2QnM%!KhQycFT|DAci<7R+Zn1k{F*1PD7*$=xZ9$n`1+43CkT=GB)mg6p&`rmUt*EFX_e!Sa^nlH5eJ-CT`uj_9 zD_Se6!XoxZW-6?slvX>MXNYh`HL0{sS7V397Zmg*-t%4awheuC zVliBjwk7GdVnfj{ zd+2>a#!sJ)>FqSUF6PvI%8^Bn(t9{7{Tg<9GC!zT8Tw8Fq0drek1!bUx!8|8c^5C^ z#0}ZqeO9PLhEvzqCDtzZ7B&Za_)WNW_pcZo6Llpln!Q46GfM-wD!-keU@`|CT-Ny1 zjtE|zaEyK*!pa1ieOa2gXOBm6^Vg4f6pc{`S}Et@RcuV~;+hb2?muE+n^yjyxEf7MkmcMx>= z#cz7c{bx3o<m2NkuOuO~c`=vk5;6!b4`9zt|o^;7-!TGIDu> zAp28|)ffC;k~C$ab0D@*a-y+|y?BTCbj54iPU{+p&h>&cV2>p1%#mrfHvsAn3C7x4r{V1PSIt zE4Ei%$+uO@2f{Q%rW#nN;Fig6ynMKB+wA&3%e`W=|63O3WgO47js{koGI!Q6vuzg2 ztDq6>P??7101DsCvP-zz*KO8kr@CW?*QofgYNi+E>e#=(>~d9*lJ`h;18Ft)i2r?U zzVNVmV3?v#$s@M+ia3I3roS@yOH>X&;_;e!?zdSP_JY@z%fckDn=|P>aNU2r`73v| z?e3>%a-<$1Ll)#M)Ubw4(4(_*epw=A=&;4H9(SwncU^l_I(iix<9{{8fGz)ZwY~L7 zAeVS$b0fw6{=W#BHI$8SY5pKwxpq%5Ja%Z{Zoz!bPd)u{2u)0e;eec7$44)W!Y`B( zg4TIG%rhAU(=C2WB6NW8{pu&Cai6}Tt;z8>bwUIU+~{K>Yya92`=q9pG`8U}B4*Cx zO41-Y@e^M^Xb}bkxW1U>UKU*gS9~p?rW{41zZ_)oHLk6>y;owF@A|H3R*(JIMW_jJ z$K3W#RyWqRtbw(-4x5um_Hc7A>qVx-RGFGAsV>-2VAj<|T&G4q8>)zasl;l0HfUY~ zk9FRpC!#9}aE3q0f1%iIBY5(cG8nlP;ZUAed{bs4xcXp_f(5Sk-*4uav%ci{!ug%Q z8jK;gfa+&&!%oytRzF&^!!AvOo^uI$mcA7353p$lUG40=lKsLLgN9H<>?I(l^y4T~=?WU*MjYo0&KXckbokPuWR_*??q>VPmjiMmJdv zpSWI$`_f@JQxTb|c#V?|&4#m`S1r)ZeKZjj?2@~7Ysd$T06|S6k_8TR3Ux|xEMYs1 zFi>o+!8Tv?p)fVQ&S8TK7!-8rFF6>1FD^9TL;&iQ|DxUJgs-Rf-RDFXaDn3+utD_3 z{k^cUWO;NLX$e+daLWx-AlipD-FBJNkr^SvdA&tJxhrucAy@Byqx%N#^> zlkN1a9bRIYjqxO_MTbEyN9`Ohb<;l5?I~?4|F!z~+2ETm6+5U%A+LV;>{9!bTGzrd z{MtDk_xZ|*YpBgI62-P6tIDmQiZzU<1zkjvnK7jPdgDVJj0}8)dMiH(_QAxn!rl34 z$lYQZFRh%s-WrjzC^q2u36791`j`eAdmHx7g`5uA=$K;$Cj$BhtTaNo65}6#B##@y z>Y0m~Vr!ZQhS_T=a_e*(u>Bz(;kVDq;&WY0bqqIpq($un*$4cCz3{I@^G&`>+z*TM zi#if2xP?1DDZxk`UIT7Vt!mpcwKSsR=e>iR@rDv`Xcs#d&w=tw z^)RcZ<7()jl+3mkJ9-dnBpH$70$Uf=8>zZ_;7(Jl{nq}qF-s@rWh6b?&+DoF66FZ) z`pV{tz-}|J4orw%QM^M1~3JNL0#sEtXVvKGrb10tE`u-moUO|7CQ zF6QLK8obFryK@9r=OZ}DiO;v}#29pUGXLF7tT47?Xik+Tt~{8Fv}7abq}CN1Pqe`Q zU4`ffZSDBx`@5~@4XC0B!y^6A$<|ktg%hnY%qp<4`#syPECW<#aX*)<_4&2?N!Y#^ zg}BQ?dhhWglRSHCrN@=jyP^_gXp#IC6GTJcK&+Q#v6#U-j)hgnN8j!kXOfX*(l#MQ zses>TM@2+tcpsASwI17W@8$ivcc}UbI?`Xi z`qBSq%21)Q4X`m*(BdLfNCq=_njScV{`@okPj%hzdhh63m`30oS-E>_#!cdBa(d07 zO{l#w;eXlIzKOe=yyTCQ@=Ge1jt}i@Rp#cOf64P5YG3CC zgHFi*Jox_~`^MKo6{;iEJCskvzmyc7i z3y;Vg*Q)DK?HAc1?yw}HZ`mOSq_|5g_ahdwr0PAF6_9E$$~m)LV1)J13>Gwm&zq;p z7(qHsz7dV&fEnBAf>2Z?y#;ZJB89_ODn$|G;-p3Pix{sgq4@g<`4k&5VYO0@TCSZ`edAHW>43*F zO+3r03VA(-^kmP5)VrgViN|^gC5PM3Yvx?{6>t6bD+g=mgY?w|n@VcqEzfIX;Y@!f zkzr@{Rq)m{)6bvY$3K5S=Tzlw22W~PbYU}U8@!JV7^Nm|jmLCf@9*}t2~1JEo5)tL z3k@G6T(+0$Z_%LD|3IWzWL#`Pf6UR(tk3^=(xMk;dxV}FeNL&Zz;#_PbuF*VaEq4t zS(K>s+=sP=>Co{&vaCIWZVf7Ga0vr~{-FI?{pNEF0KC8h1h&7~AHRJF5MLhcVE}^B za4{76*h1e(NvzyZ``uq40>62XcU&&L|EVj{tm;&e9Fp3nam7*whD-grQnQ?5`)i|ig+~dN1)`#uV<^RZ8xnG^c@EY=I4Qz&0P=$ zAv%?8AHRIAw4LJfvi;UIsvA9}k+h(5f`Yn5gwEmZxd{mIqfQ0^NrA$S-ZA(Gas9^5 z_!@ZK5bE>=FMF>8p>#2y?N%O-yW3=IrG^d*`hmpgxohBRET)3-N7wdSu*5ksSFpWz zC-dOQ>mNsQgH>dfsMMw#vc8k=E*KQp+*i{o)@Gad0;4{JCCj6i?Umf}&!7p>pP3~; zmtSs=BZ+qwK}36Ix$Z-zoj=nxLy}rx4nJl@E6H>sIlCf{mlsENN#~O3d+>UA0O0Th z`aHnQV$|^bpVqc_wRz;fzgdUjazwUw2D(`~Z<9H+A+yVNL2t}9UBLU|Q#IX6cT{6+o7u;de zK8{LVOPOxPu{zep+xHmY5kSlSKu@uQfV@Cqcik{1++SSPNlw2v@teVFjgN>8`qcPb zAG?|Q(7@!$!$R3g{s#lwbwJ<$FAkiid~d=w5}8BmSWJ*+Pq0Q=re_QRT8lR9sOgOfMya$0$ZH<-6jCA1P1TJfgKYPS8)I3X{HjU zHNs>`rG?4Kzoue`TC6Mk`jlpz;!#Zm&Pb&H(%TDAYoE|ZE|TI+ms@F>4C(eW>bocQ z>*7?Z>tXtvOBRJG?9W<`EG%pN3_N>4Oys84k`Tp@EW8_gQFF6agtM}Q1{TrNowbL7>F)kMhVI)?;^MY;6%@Dz37%Gn*lv6$ z2`gkhScXLC&7Y>A7nj$O{mfzL%D+mw>BNCs)!}&U*Fd&=1d#2RXTEM@?-T%eOk*|> zp-|#QLrlmt?MqT=jq6p74YTyPqkqxSIf!@WK!%K5v9BBGy!s>Wtp;cRmRU$o$LkU)aF5_ux&abWNG{n5t6+5>fYt~xx8 z_CHzJ<~-f5x`oE9wPU}enButzD*e6&Mp4a{R}yz=l`1TG-)0EKlU6Ry9W59I9DX9L zrMhg6K^LY!4Pc0hsB-!P5A2RF!~5TI-5*g6O1u#CIzi#Vi zR6_AwLn%kn&@4bvo%@@#t}$@(%lKd_s|yb0jF&+L_WX)KzJob>UU)HUtaXfF5z#^g z*kHIq!w>O<9!elj-^ZpJ4CBIoMUtF704Cl*<)U3I6PtgJ0`Hh0$+jmDBV*g*a!7Q# zzB{W1Md;i*k3I-JD_r=zJ>C)+6S14D*zNOJJlZj9V~^t8d*Sr$(rrdoCZWCuM*6?J z;Kh(`DxkO9OT27ym*Ox=M?&%8DH~%Z-WS59U~Co0Q&(ur@2!m0s%j}?lr|^n(a&P7hQ%Irp@kHJhTWT z3>kFbBF_V77m%_D+3Af;H%j8Nc2V?btEx-z$RchYo8w+X=Sm$Ze;vj)Z~zJjPIjTh zkf1LGG-zF)c~O%WxZqR>c%Q7m_A!S)bev5?@%H`1O$h+f@L<5#A{7Q;m+@?xe4(Dg zpP3u}St_zfLlKfLvWUj`4l@ZK19tX$pIyP_kO*b-gObQ$bu%B*JpLY$d2#j8O&UiS zuVyd5>b~9R!}goMK}QiHm%9B7i>;_UAL7KXHm+Nn&TZZ+a@C-ZUr~wEhphjY0r-Ay zZ-ZqKnr}4ims0GI zJbGy85?d4%qTQq!?pMxR@s+cz4lJzj0!*!a^PxCc|CnrO$n7Ml1_>9eThLh|+9MR+ z{T_2H_JvHV#rhG+nD*8;3+72O8mOu@^(Cxy8y_vHFxjHWgz875tvHY6RKTyL6QvD~ zxX+}=;qJ>1eGosMp<~0=lYr~arkV02Y4lMmnddHk5kjODFezyUlCpxDMW{?ZEh3M_ zuPY13{twK#Vh=~svCo*qGWG~1$9Jc2Pt|pfx|)Vdv<$3?0(d+ zD9FeM)Ew5*%)H4<)U?+s*233t)EqIoKSv!CVE1zt*wKNm1t#58Q5>m^&cYNB zXyG=#`j!+x!Wy`PAmWLYj42~;KV#V|ClFt056g@H?XPZ-l0edEXWt)P%#i)N7$rJP9j&dqC81>V5X-Qr+_$GletJ!+de6Sq+crU2)W&mVo$L%ZkC;KvRo?6IX zp<|wkO^cj*nSiy(4GznU#)=JJ$g^c!I4Q}@zkx#2BkwEfN`w;MxW|HD5ASY&VX}IH zv2!!%_~tTi0k1bx*fm9AwWiU{{Dp__Rfm`zC$n; z<0QH`w|4vbm7v(2o8Q+r@b1{&v1rIc!B3ObHELp)0SzGOJv`v?+e8%L6ciWZxUJhW zHhMTFXA2x8Z#di9)b|{|I<>J}6DY_E%aeXS2_-b+(3VBC8Q8b-|9b{Yv^!vr=%nQN z^5^7Lw`=QYpF0Cc`|B^&%~)o7?=$K9wFkyzTpj-HG3|7;oJIT8n?*|n1qEuKE9-)D z_Q4Ttx2HoNAIEkoYDz?WXztyqM#s&9chPpSaaS6|3v&6_5^m$qvCWiEj2D0d0)YxwZ?ORS^$7r$SxMP$hRy`1b8S_Q4`_n@1jx8ZQC zmn2#!jJtziGg%~){U2X>A!+=_U>+T(QMfTz*w?T~u=dXYC4n7qheN`IdgY^kO&nG{ z^`UU@6~Y^O8^u+&FU}E5=HyuEjiJq|NpS0rCc*dPpL0(>{YbGy+s((jynZmOU*pdN zTJ_T=n{CN>4rp$jkuiGMqxHS|xnCWd+U{4!t*;hnN^kwF?{eGE-Aw%7_g_!M%^#n# zfzjF5*SCqOWZC0oLH_M|(4NOpj~c z%Q@4zL~rqEvzm~H9ngn7N4EC06gH?lt{iBJL@zS+_>0F!MnlD=ZPCwq!Ik=3G72mG zF`bCh!w#?+J;TWYULUpgdkMR+SZ6E6y4sqZG{)DHqas(7#xM0`s~E0a_RSo|A9fi& zQ;FX@ZKTc*I)q2PZT{330g~g;1g7N#&kEbc*lrq4N#TsW&Ng=R=~{v1xfa% za8E6yVkRcpnA*>=izG|mi?;F;E#Y20!?#jwP>fu?-Ju9?08f&9?cLvI_%MD;-8BbB zQBO?=cibT3X4pef_6qG~9Z=FT>EopS=R zTk>fp_)DGtJN|V{@XLn~06;(nTz~?I5np@-MviA871r(h?GWr}>>Ly(<&W)|?RjEE zVlwPp?PBc8YVwIKkWp^r^rWi%EreGsb1^+^W zOC$V){DT$%ZV*kN&juofDf$`1IRO#=$+Hf#P_g+jxvg)wbF}2ZDcgo&Txjb-p%YjnvhdDAZVE zwt#saZHIS4EL@UPTWV7`S9qF%^;bBJ%8vHqb7*0jkXTyn@tLGiUO7foZGNVj@xGs` zV*FYx6kAcHNz`U&fU2HOe~F{qpTdpGACJW zl9MF_cYqz!c)^-Fccs}CzW7rSsX8)ciFfXo>!I0rq+e)#nr>zM`>!I=SLi+YJEFbM zu88B)4iU#|t8C4Ylc3iylQl}F#23|6`~?~7N6v6ssp(^`XyPQuH-A8~QtztjP7{w?T%dC-f3g3Buq<5ZbKAm+%z7CppnE%#&Kg zcVFq1n2NAE7_8Pl)N*2T2FO1Nz6KS4#xdiYU(DTp|K`48(RvL51jVy@9MxK$`hR!F z-J5itTfF9vHHuhlf_;hwU;5`7r6Jvn@3_BvMm^$M{XcUARe2CkBZ+cZj^7InH=@F$7bf9P!nWJ1Di4zm}|% z9MJ4})1*;q+e#hzR{ly6^T*o%I3>!WdiLRyeIeUA7H*h^Ly)ZeV&-2o427Cz(;Xqa zZ1^}b6p~LG;T3Up8E;an7ewu#=T>m#mXL)#eZB2({TtK$ zITZ2TG&zKZRYutNzK(2g@g1& zfd6aIrn*@_^H9=$`;UBYaWbNlfpeex$KhIA0(7~hVP?LO@Z;|N$NcskF*25g2(HgQ zx%Oy{pbPT_A6!gvor-sATgkrBv~_*mE(_Iyf+mLB3lEajNpm;v=o0hv_Jyh&V*l0s zgZ>nJ`eYk38u3WV*}i$(>SO;Sfxh_o{-o2$YcT@J%2cpqIozS+MFpRs@Yv-R< zB6VnZX)H~F#=EWQm2LEjZE2f$x$+DpD(GRwvy_u`xrro+{yf(iJh`8hZ_<@AN0B4!brRCpi8mBLpDIDjLUb?;0N->&ZvU2q_l3_uSJ5cj>`@p=9Z*t!qddJfsT z3|RvHek}IQfO^+|HzHU7<2Zo;RDwbC!T~0?Ict)ba$os=g@jxo2;6(0cmo_61P}tD z{DC-uXRI6#$eB*S2_L`_3D717*aY+C%((eJ;WxMrNYE!$>HWfaqziNONR|S>sV|pk zlM|e>)Jn7b-8;-dqb&;@$d>9c{0#G@_KxREgm6r!$AA`n@j+P;ht%7P{fG~%WG?dq`)B(z?3AL$Z8=uHmUb{(Nu>56RlCGk~N?fu1Y>q5w-=rJ3 zIGVJ;n(d-GKqI#|rsmw4VsMw4r;=OkMRP3fkDJeMHJd@7=^1g*u?d>_qO0)y?r?7~ zdmKKZJSGx!%S95ZBNe&)iIzGsueF1=I5eZA|{1NZ+jf^9%3NEL@20 zx5LS=&IUoe9EAc|sQqj$#`R;hU6)4_n=E9od9^>yLZG_5LZYIKj_f+T+mYQoJsSso znsQy0(`=pmRmrNvN&_1E5YtxlKwkOBUKY7NhKj`WCs=&`pPSEQW{)$mdBP);)Y-p~ z!~|ix;9Th-VWARbYyDq9JPKe(+$&zW*DXlOT!bF0npx(KDQPg+iN+{dpYiJO3}fV2 zN4$^I#myq>^sHNTl1-uKm#{_f44&z0O2cdaICWi+dT8O%DhQ?MP#?S&C-4C&aIg= zgMrDJThk9!AMe`^bD)YUpL_MM4bmJ|-wjbT-PdOd4= zj#uvOg?Gi_aDeX`(`p5>KU`vW6nDPQCH^U; zW7Ih&Kj?&o&YmC0U&mWDgc*icD6vM6<#7{v{cu2`h!Q4=AQA(2nurdNR$7s;JULTh zEP#QTo@O(pUKRZ4aT{N=DBHBKzb~%f4`q-u8;@F29#L{%0zv%y_-;&-^;)W#T5YuA zeqP|T5gc%y-GI!ov0jlNsM8vZN-MGD^L-ZJNzRLFzjQ#w?lGhP!2!gbcyFYlW#`HL zN^ienGB7S2QU;G3l+U0vMYQ=;Awdumu-!{oMH_IQ4?a1^g$E%w}ur-8O+^zycXQY;R|reLi1UCbB8Pdnb&NHKHHvw9HZQ6gohsPczl z7*`lRSVeTQ(LCBuZLO7I9R)av;8SkE=;d!zx^gLXPLBU#!iAe#80z-w^{f4_D|m4l zc9@Jcq=a$eX!ukO#Tbd^lQx)UqS(Fj40}|3pZo4PcDDKA`9}T(?IQjbF+f0TWen17 zbyvtPeMC1H1)tA9%8f`D7-KE$sRsL? z;PS(Jpu1wp5cxNcP?ug3)yEnnZq@DU4PA7{npswz_4wRJ0O|L_&yYEs{EoIjj>gWnLfscX z01OXF;(kyYf^k)*x&jf-m>>BCov3*AaM1gS_t*%2&n6=v-6S<*{H}dD!lK?kukk7fP7(<_)d1 zWxP9Oau&llqq2m^0Ve%eqhsuoj@806gmCy{&M5}m<{N9IV2G<{YtPDu#cD-IDaHD^ zHXI+U)$9KN0r5|yg0}b)TJeTX)yXVz?g9>q{ziQ+QmPxH7<8r^8Nu^~XnEs!f2`U2 zGq&8ffgiJ<0aBeV(Pi?vNJb%*wmLafIoexZAph$khl#Y_HLy7EXI6(Q*63<=#9L1t zl!QF~d&5!w{|NiW_)44K@7mZJTidp6W81B5+uhpkc5A!c8e6wp+qTV9>pbWF?f?Dr z{`$;JCYdBx@=XF;;K4TD1p+??BT^^eKh(99j|wwUA!InU7`1dho*T;~9OKBi)%0pO z4&MDAe1@T8>7L2M`?@~-IY#g@b(1MT@M#k;L?g#rWw$dAdo2$_B1JM)$F?C#an4_% z>jVH;|Y(wFv%ph5vUpvQ{_P@q?iTE1T2=ry99JFxX9^mc1DivO4 zWTy3+fa^2ZK?dp51iP$^gfjLyy5%xxPRBp&gZ14Uo<6r?*L&BmDUQ5JxqW}tqDUm+ zz=HbBj~^k|yP_`b7g5?uXxu_BdB0pjqQ{`0;?PekUs&(sZ2V}M zV(NG}MZmzeh>?{QJZemMpeM)5DY4ocFm@LM1A)*C?qZlr`7YxEyU|l+y{&vyS#QSE zk)Y2uEsvSF?Mh+uYW$F09%1AhNY2<{wAi+&nXSdX;U(S*Rz2n#nOwBkc^3mg1x&{0d)TdMc(!zP_hbCDBFvF>`F?l?$p(* zHdg+MdzcYD{@oziAI<1!1O{d%hPV?1_5-d?9DXc1cm>N2oBz7gvFo0^N%4uVbPy} z^3frkz#WV=pt6)M;fJwNN(mrU{)&E?M88&^@H(4x`!=_;XMhjW!Mpv{R-A!sbK;d5 zPx%;#dr5y==|8m+sFeI*&#$Syd`{|m?n{RV=-ZQ1_$%`kmG^7?#AdqAq5BV0Xi4Mk z`{*TRj^JEQ|K}GFGWX%@_h$_qE@qmdpxNifK)}>O242p&o)j_U8chi+IU?a#5L*Py z+>cJpTGtT>QiIl&Lv4&>x^4IzsDI7qa3_>`yTN>cn>iep}Navy81#r*&#~ zV^cS#CHMw6Pp%+Zd7;pAyU+U~pQeoKC9~a~vW*^KKb4}}vyd-=DaxY38t5rYQkHy4 z>cRLLNqnUCedcgHI@r+oAAaa~Qoa?+=_lp5b7|**BB{nktQKaNDPi6KI`T5|1A?&T1&&&ADOQ`WiC8hYSui`1Rbx{OK0(V` z@K4!9ZX_>xddykmg&7rD?4^lz6z7dS7zA5uax6r#92XN3=O8I+oYB|K2eq%@hmo$S z{hVH2Ip(T-n}T04Hrp9j{$T>u1252OK<4^X!m=s&|Y4S*uV6i-HYpXg^g7W`^j<-cQABA ztFU5FA^kpY27QD_)Kad;SWPoHkJIo?b{fc zpWER5tp7o?%m`QaIwI~JezY>M-LI5`f)axd(Z;{C!mj0+;8w1}RiYrbh zCR}lr)JxSVGRHIvm^a>d1P^n08;e6mMWF?1F_obrTPC!dXFwKq9Trq{IF?ldC&8A@S7oPfZ}26L z0vW^XmtIS<4#`LUj}VYio&w$Do{GdHR#4S~q(6dBfzq&GKj`4V!asW|fIX;y#@3#m z{;8l~D2POna+w9AIns7=6M!c?n!b#|?z!YiuDZ{SZ@1r5H5sZNug zQ!KcrPAnvlDb;e~j#^^x)8+1xEDA?{YQ0=E0s9-9Zu&(!%5DL;FyzQYL+se}1S&`v z*K%4@$u1>N{RdD60bEU&?UGF6oMWkxFu1WAUbt5Xa+h3u0>&52d#2O=>+S4vv1qTx z84W&m_Vf9*NnfyF$e~eSyv)(O*$3<`-B0avtvYt8qQe32oR+HcwWwKH3ph7qLq;sg zyG9~k76*bWICG$2Av^!LG**-?u=DU~3H)4ql6H;SJcP?f1tEH?9WLO6ReGRJQDJ@W*Ur8QrM6r7}WlLU&EfbUkeJ2Htff*ljZuQ-E>^- z4aedJHP5^fzqY^rH7fqwzk-GHXl#%;NkgB~3BW^bU1bv0*B0z!cck1Jy0?VZ#{3`A zW_X@;%p}#bX6MtMI#t>{p)iO2jKJ{;rp$^upj{0TbSJQoCSP8rT6ezv zkeXdQ@z>LB(Y>Je8x67Qyv@MCY1h~&K`>%b+co+jE^MLd-^<)baCkoGaWg~BOmZZr ztYL@hFG(cKPjE}Hq@=!MB%%jxB}IIYB|D)Y-i^GSEiL+yUiln_hao?u8S2ZCwy7hk?U7F2 z0ytpmQ)X>#_7R!C(hPgY#{(ZJO!R|*B@Yrf^%rXa(L5_fpWBw51$LB{2^cV$E*We5btH6JP z;0?qJJQv!(nbz{mV`1)b8*4j9vvjJGu;WAipQNOlq*?jPb*K7rIR%J)Mxp$A83L6J zLPsiQx)i|NZBcL|NwEna{VfLw)n=8g2pO_}Yd1Z5T5Rr+z3{c2?ZS?)?%>c<&B*Wf zS(KG#MY#%47w^TPim+sYZqYnMJY{mq%ThET(dco+#B@Kd-^_wa)y4+_k@_p9kyx#h z+kWbztMHH7Z4%%+Z_N-_opmn?b=9noZvmcPJ7zj^dp`KGUnjm;p3b>&o$XGz_N7Wz z(?8q^*!tT5+yx~)H?_Xm`}*f|@&}mqf>x~A#JzNMMSkUtyqG3_e27Dy+Czv6(O*!P zQ>Sa;l=eTVirdER*>ZhX-TpZJUS(Cb!qy&f=2`BKjYEid8Ee@AorFg$Ow8DY{ZN2( z-fE}TzLs5VemE~)GtM#n_Z117Pp*Tz!m2ib?6)z?I2=oz8+Ly}IqeAf zIAKL_`|V4kdzpwb*sH}n49r^Q427;VoKzxRS2;kul`r71Fl2^(m8H+7+baD!2}T)J z!X4h26@*fWN_owPcwLdHp=99Z(I|hMD%0^Q3THCcpD_G^ghwxpi48)$pnOHAWuq#b zgVv~Z;Pi#gSJSUm!Dem(-t47WML&iwA;c0{JKg^nF?cQR%a`H&D0jJMd_nD34!|N2 za8kgq-j_m4#_XQw2W^cYjq1dfC5>BvfF^#uo-{sWNLQ%o4jGJdkS-?5z)Ui9mZ1H= zgI)O>1&?TW>8}XpD1(VgoGLR_fK0x3CAgN z=uXQrTKV{r2AxUT@L6)`c%mK5JnCT2pSg1P^WAT(PLfXb8k*)}20r$6H`t%?eEv|J z6HhYXWzwSQW)siu(!V=9tQp-)4)wU(iQ2er-6Xi@*(p^9cw+yW^v)NJJR5^Lt6f-Q z&#Y4=reK+-*SnGD1BbsW}M0IH&p37xs+bRf?O?8xEj05}~DcBgujUqj zL!AP9&ZjMkDl#s(%;(DQmV6L(7r~M~6xkHbkoJyAj@tXt5UUrI9di+C7d{c95YZXS z5uF-?8Dkb+93>GU5z2vJ9WfvlOp^J<8x9Q$eh#Gu0v0p{_09;K1>Fl-1KJ1L1^Qzk zdzb(;!4&Cl>M%v$#gNP(OYcr^x^%6Gr{pgwa23qi*%>TRt9+rRk-&0tu(!`1AbQ5A zMX3Y{T9w}$U%XW~X?W4nSlrVPkzWzAj~B|{GTR>2$4^Z09VTbXY=yA$uuHcQ+pi<` z`jh1lK?BPa(IGg@Zm(VEuPhz5Y-e!o>S%_h+L|j>d2coR?kg^b2z)s_mA@DJKEA+_ zmH+Hw(av!T(B{_f3Yj0v$mXMrpQgJT7|W$}!LBfWAm}eX2piS`g`Z#EprY@qO$nP2 zu>swW8ny#~W)q0+@TC*yGpniU)o^7`!69zXT*{46=XpjWLKQibg~4AA#@e5B-un;S znqWBjpT9w+;<~!@+BrO0068fMbLbq=HXPN{G8xG7fqr}}7Lksc8#EQq%Q?t9Y zjmRQpP55`BpPriad?}5_VJU5v{Chb{W>4ehZ)Re<45tVHM8>KNR9nl4TAPJLEI>tm z%woFgwAK}13^#)aR1W}}?`iCw*-AS=+P$FGU1!qBlu}84NM^`8-Srm(kXmOu<<;oD z>vkGSQ%6=X{as7Y5F>p>CVei3`4ub=Q<8iLr{jInx7nipO>u+em=sNPbn7yFQPyx& zm;nU;IeIzInJDK8(EHVmL&5BJVNlAwlPlrPef!^vRw1drhT+v`@L^!-`R@!{Il5o) z)HNjAYa1zT(luB3>;1aY1R@?ojcOm#1sBV?P~unYdyMyyCp%>Sd>$>fr|QrhthbR+ zv2Chk+m=;b!AKBo?!MfVcDTeO_1p6XG7mk+#aMZGQ<8a>WScBZ1bySu@q;RPgT8`Z4#GkvKeX)t#NCK`EFW=v!9 zKl1Hn0Aw7t%jvnsAM|9~879uk1Vy^tu)x$)iCm4WDn-$a!mh>37L&Tw!n}O_@K?0O zS|m>si}C!2G4wl(z8wD|3ZgstiHk$*5>}J$bEVvM4Jbs3ahsGXP+21=JLNjUdOAYZ zHe~ma$Kylh>)SNUl>VG*)|uOA9Z0g_#NIx2<914+W%h^m+dbi`YpvqRTZ}TmcWd8s zcCT;%RuKb1nt?#UhTnEJTSsig)?*-`6i$nBD{b)CIFFXb^%xUFganHL-2X~z&o=}2 zop}mA>b;+~pW&y7mRWt#^KfeCZ3c&9JEA>&tLSL1$dW^q8zP>Jev?lBeAMbvEVJDj zMQ71Lj*+k2ofx#RnmdjQ42-XS!5WQPchnolZwCf~nUSk?v&RP{+^ z`*j_rx?DUYN12hx)IY&5q0++zmj5CQYNqW)0ww|p{^JV^9Lz@*aNB!?&8Ehb zOoo7u(B!x+$}D0#5V?^viaVM%Qf^h&CnaK^DF$k=Yfsldy z051>(<_kg?zd?%GLVmtY1Fs;R>cnq_pWtghg;5JXv1jme9rHN_5*}N@dg6WXsr%Nb zwtiJ5Q!N-5eI3d>NuZ+yI4w<=_aKPxY#0Z|ggnLe*k0T@k)IGk9Qu9WOcAi-FP)Mx z3(8#DE4I64H)}m@_4o;jG*Z7tE2k*Y60PlnU-9rNt1NTBGH16PF#3Aoa%GRkbjCxC zSlWqeM{Kbe7EoimD{nDrwJimVc;8H2KJm0cDXAD{-!o^QLI5_d=WtG4@?_$+=J)7I znFmnR8z^<2zc471%ie>W#_Zpe`&h9sJG0J>(IBMbybS0knGCZA3bLH zxI&@IRkAmZ5wve@X3SN(TA=xpO?`^|@Xnl#$2_r)m@9`UvJ%Hc^}DvjLHIfrsfyz1 zm#K0zf|nH4vN|P7f;yOLBYOEq`FkATSlb{w%S9VrHlQ`wZ6mDJA@6GFM`VyrcNL(R zeoozoSZ3G7C1>aR-DeoPuf&O~1%3QWzXXAX45higEn1l=wTq9}Zx<6jXW!$6mv&aK z?DtOU9lhYCFc^XO1!+ajHGNl_LksxRZvi^DPR@lHWPcc=wRR@Ysdpy{mktZkMPZzH z+mvUhO+k0_UG-_=hvHSOa>MlmzMSX?{0B3GMyCU)`0lf?7~ndSroS$Vnk;;gmbVY( z+PLSK4L6lS;@a1&E7Xm#z!dO_Go?}1u$l@x$b4L?I%HD&I!abnq+LYw-Slm`W$*?7 zEyo5p;mWU+0Jz}*QhGQWuCvC*;U->la+QbNm~0KSo6RPm$zySgs0gn9BI zc@nSePU;Fk7xIJePSO4ZZeN^(4(U7#7s|sya0ZIcdtvob2i{S4eD^{*h}8~`nuoP0-46O$EKWkLH<); zmq4{j!Ajo>!RmHzk8+kAz|JkpSln~5))Kv3Dn&tGMK8O3C^wZWW_k5-b{|0yms$&b z92f^k;M?AaeE*WFvBzvH=kWjOl^~!u{8^`)3w&RDp*{{2l6n@`H4udgfUCT04txnM z^2id5kWe5?yTaC;gQ2-98*WZb6vl}WaY2J0G6yU8RYPdwYb4%t?&nH&C$2JuS&l{s zxQ*N*J^y{)->7Q<#Y7}W3s$0Wu+C@F`W>DMQ@r~q1*c<1)w+At6s9m>A6>%P8WuWM zVR0SFoapiORU8z|pT>}@yvOO7yn~QXboxoAA$+eJI9ZpzLPMST^26c45ApI6%se6V zv7iOk(l)@B-Yc2NJptHYVcC{)W>X?Uw&AaB(u0*r+QX*O(5u?k5Pk@Se`HIV&IbaL zWy6{3p6~#%*DdzU=r1r@*al`=eWLC)V9~gn9=(N%6#^) zctv?6pb3v|pSkRtC)|XL!!rkqe<-PB8Pdt713m+ID;$2ST+jU-;l$m38U`FlEmR@B z3iyATv{uN{?@#$av^LQZkZpc5{q7oROY@Uit&|^{V3HB6CWk83oX7Vh`cTy?zC$Ww1PDDVh`8%ABt4M@5R^_GtegU}< z=|h9}mOG1s(IFx6Q`5o%e$Dihi7x*kM%B2(-mE5`;b$N9O^z93<7Z5dBBdE$tth>% z)Goh3=Gm{e-0PzWU%?89SmdgpYM4}Bt4ZM#R1Tme6j(l}m4;QWhc?L9Ed%Z#_4fIG z?sI|_JOJ~bfCa$61Qo(}d4a-)hPhR_R`*Sds2ErTjqJT^KD#kXm1R?_c>}6OHano1 zKHJ;$qE=v$OVSHDY-^Q`TXJ;eCng&cFCmmiB;xW~ zy7iK&woq}c__g46C=cjK)dTweo9%b;z1cxa0F9L=(h26ONhrv)BrE1FBwB*eK^j$` zj6IznQ;d@(qum(jLmrin5xt0ObIOGWH~=$%jF6D&{533dVH!^H?nTr5^(XP;7DVOP zZ~rF)QBQa{8ClN=616$Gn9xv;U=k8inTk*~GTLCbC^vW+dD$45h`EAPx9r>JXr>!| zU*2xVPGCRpF`?;o(E9J?<|D_=X+Mh%K<>-wwL$ZVkF3*MhF6Oldd;9H`B-6d)l6=) zsqb{h!d2t-h`#JY3h$bsIL)9!BFs3vhU>>_+b|lvtMPNJ8i9+)ECa=eTSaLyq$^WD zr#>PZWkT$=vaEJ1V~F`fJ+FiCNejGItPEwk#5f_?NDKtb%e6tqXCL3vZ3boey|xg(Z*(C(WVt2Do%Eq2_zSdM1!kRp96XCL?2x}e7cM)`{F z>1OF#=`J@I)OHYFJjCoWg+;Jg5i#5eU#@0WbRZmh-gE(ee{fSnsgZo4VxXpE^F>v_ z*V+BJ{R7~`0cjcPtKB#GvE!(p z=O{RhU34mZ;MC)2ewFlhKk3q>0n(oLn%4t2Kr!<~GQ!Gx=4*TMYwHyn+1!8Rxp45M zDT_^Q8jq-lY+JUD1Dm+aQvsq1Y^Au1;b0GyB3eDj-dm^9W#6Zr#&Kre>rqnQ=HuPH z_ZajcY+hNL-FHgC&abl=@B5L_rU|ahj8_G#P`sy%2(g)%l5t8KS4mYFaSw%j9E<;) z{zsqR`|ug?ZN?5;3B3Y!>$B#L^p(X1Kz{pk=1@O27KRCwFpw)KD~p-mSgvj9_MSR! z)%J>|xxHE*VuMajGEisOqNt`aF+k4ftqOd$>aN?kk=yh%VAoYnb$vB%5?`1g2zoa8 zTglDnX9S{-uMd7*jj~9A7=54#%sZIQO7+K2vZm#4sO>EC1)ddGw<3ce&T(19xE#)P z_NJ^>KPOMJAqy|CMJ)NQ5=|iM=coD-OgrJGs&h`qiTPk36(TI48saSfBt!L#Bg_>Wr0|rrksJLXp?wR3jAKV&T>k zx1Gw(j9CQ%O=s{_|KmPfvC{qiZwW*mq)nWo{YIDUxcueSc75Sgk6)%x zHGb$L48Jzl|5oLM9IY`7uGnbdF6Qn@9kYCmvr*-4+$kJbmz)%}iy@`YSPIag5+ieF zi|BTzjPr^oNp{S0VbL_;?~i9klgYugbg@LW@oS&n>Uw15n3TQjZ;n!)caTS2G8>~~ zBaWkblJ}~C?MB@j3-{HoZ1t7SzE%Sn zWxILy>5gO&T||~V=j%qYQM-<6&IpYuhzVzncu5n3Gl1+tA|&=KaQBD63;-~&^~&k) zU3h>?2Htg0x4-dgt+Vsq9r@Y!Bt@z$S+1cEWk}m!xB$z({P-evY-FdY4DqTFEQ6k8 zF4Yo>4a}4$E?>0Z*tDO1hAmC2^>bOT2qnz86t2apsLK6X#VOGdrOskoIG(THeGNGR zWCr=Cd{ZTl^W;t+?Gd+NLL}lj&UUPCGF2K{VE|(fE>=Q-jV=f4!7({cdfdwSs)22h z>U%Rtq&cCv@~|Rs(LERM8k&bac47lM;;|BWZ#v@D@opZXDJ%)=y~UE?Sw9PY^9=`w==Q2g|EmrQ40S8jW%fE%$08?4L;>`}FGeW2uJDyHf52PT0KB`ZL=D2a;`^OW3 z)*?6liwDlvVO2}`hO(YhBSCWCG^;Q$F`ifVWvR}>$8Gzp7W(JwPB+JJ5=`apWVY80 zYj=R*j8koydTJUBlfDUF)o!`OQbj1aQYYryuG@LpUp1GhDi#s$WfXfFh95?H7DgF; zn}u}Ec2Hua7zL1NbFf+Al0rjJDvFwPD)=gA(Or;fZ3NU$J;uJF-76r*N+A;j8ULQv0MHGIEh*%L|$OrqVX`KhV_A4cd%sq9_BV`AunqALa>(comEW)I z3ZS7%LAo~P+{vB}oghue=(p+R&%+Bj!mj6@Sn_S*|Cyne9Q1v}OMf8G?2nihpul8v zoPL4jSmJ9y{NyJOP*@Vz_lYdoyu1m8@eu4e*QTehpCdxzCbUL_~y& z2=%aH#JO`zqkt0NdAY`AOD*UuZggq@Ue(8lhPYcXqOW&-wYEpdu8qtikZ)%cQkFg; zhS%YtQ0+0wpdY=*HhYKI2A@liYmUk*hGgWm(7y}r|CdK)VX1XJsu`2dy70?#@PW3+ z&57RJ`EzOMNy%|1DQIgHq6F3KutIJXFom+3k9L8XoU}_CmWam9KL}X}-P3<~- zCod6J!G&=V)(9B`rKVp$8MgPSEivMuJJP(-F1K>uWXQZwzd;hAI-G#!uy&ts9z$Xp zmgrSKXB;m0h1}x5m)+-LcdwX2hln&u@7MEr2}nSW9|^5e1hPON&Z;ol({dE;g-)Kb zP%tzey%wv=EA;!t>v#!hIKcSD&U!RO#ucug!qqZCUn(Q!LuxlYE zM2y@Q@zMj@xPI3!qslcC$IuuON&hwMJpAEC-ZTuW+l%+;+Pe$hM_IT7*N`R3O?|g~ zix+90pJ3$h99ftXHrKUEph_%;0Fgm(TOQUA8T_o&W%$r;vvbRmla6vyg!3z4vD-6^ z;@p5x%}_mSx2oCKJ!OxU*y|dluc-uvC?WTna1d=thGQ)coe+Bvvv9@jz5C*tZ36#x zI6(MhCB)wVwAM3`Ur^0?l^D^c-c&%$(lQyt6t#9mbG6&%+Z4(c#se0~m*+@nWCEg@ zC_xqD6qSRw9PXkFt=3BJZ%fcNOu=~lC0jZAs+Gh+aS1j&0wnhdC25$~2#npTi0~Pz zYC?wHzot1PR)TW%ZukafuD;VC{qM5`O>`=ae(`W`kGG2#g|pdprp$4FZtwKq({uxk zo9cFm|F|~r6H*yn*=HH;q7H6+J6rabnx&FtK^ zns+;mFwJ^3lhLN`cX+9G^}R@>D)5AeQOVTA*^-s@ZodfrHs%?|j$x|>y=<6rS^AD7 zc|y!IQIcQeM4H0hV8UR$7GL1p;6SN~zTVd$__LlnV1f%!`REOj_fz`iL&QNiaUS&m z_|-(k2+aGVj`yS2J4j9eM`33g+!8MSlfj8d1UeQP<`cz zHhM;F#vs4q2W_v_im&##w!JoUU5zQLv7!mK@tSe8>6LMlF_g)PaiWQxXf#RV3GGSz ziQWmxy&Q)j@5&p~&Jq0Gr&8L>i)H+gOV8aPbQq9~_$TH_Lb7?#fBM6dsRi zUb!}AXL@2eTVWU6b<&LAXf0h1B`xTq#nceX0LMFydT`~^Kc=~aVQf*S$2=CRVFNL1 zAD$vXUx!GnV_s!7@3<f zqWBD$g_6I|=2mP}ttU6%o|SVWlf}WO1A5tAKGLZRUoM5c5a2!~m0ZboM#X(L8mlkS z+7)Ldi-zg7*J(BL8d^6zG1+yR-HSXo_JyUJKOY4$**~L6!HJ-v#6|cC!KOF6O>^!2 zik`UzuHg)kXLM+^cr@7JKWxbVR?BbOtl8yoWn$c-=Dr69qO}(OIBrB87FcIw`6#ia zSgWw>yOKax)|c{%9Gyfum|pNi*o5uIA=3 z=0~m8i#}K0CfC#1n@{seoXE-(X(-c__( zt6o=w^Yr70onE@O;BiI?TR!+FP1_UNn4-f9yz`M73EayO+ggv$qGQ8s*k~{T#LEP4 z4`d!O9+;do9(cvBL8fU{6Mpw$Od7riy2nX3wcmR+|6Ls_Fj|*L0^U)Ce;O>eyl7Z} ze?KiJnHc^I5Yx#-qfqmQZ$yfG{h@>@L{|C0a_chbxX0z<4<0Wx+QBA7 znw;<*j(!_x$2NHG=q#siW4m>@9ub@7T1k)Fc0jLMxQ|IZbnE9>y5 zQ~&B}Aa!Bpd5hNI9Z-nx*y;Zu*gj568FP;Y?!4q(I08KfzHE3t27c;$q$a%5duGAT zWi9G7=c`8KdzgQ1%BZuf>~6>lT~QsItsd5Jn@~e5#+bp(zfl zWbf;M=?!~QsB634`H$_+@wIL9l{ykqU1QySq?F&q>^8|6-&wy!`EH}DG#9qtZoIV~ z6JKItim`Bk3pj(fP!GXh8YD&gbDqY>DlD0@cl$kco6-0rufDZXmGIoov`9IBJieQ5 zJPEVFys#jd@bG|>tdZLSMgm+J^ap{@l#pW$1 zqe+gMBQG~CO;bekWC9z1h~(pafeS?m{|$sacqcvt_8)yfwtb3B3X?n$mxKR7*@6J? zfo&{z8ViKaGW?4EeR$+e$T!u}cIR8OtDD^HM+gJ2Mo!psAsi|8_vZKcpTu(u??KpY zb3TaNl-#}8FM825LO+$Age%}f{OiZSx(g|-11k<@oN7ko->iRD%uqrn4+n@>gRhB> zau+)=86+--jiQQDxRWIesQ_m6cGZq!WEUqBVPq02nSHRfMe^F%d4Z~|xxAy5e zaxk;{I2wA+<+Q9J`auymc%=wvTE>k~woE8Py0iAL5D4Z@*KMG7HR2%%z>AvP43b$SToe*4$d`~NBDYb6mp_iI*l!$;tvHna}Y;aWaX>m z0Pa!gvWvpLvmuV3Sj29q%o$W!p(Orjc+AnkTXZHgZH4ikVm$0P&8h9Td{0I`7~ie3 zs!!tLAns$7sH*Trd-;5#MFJg}C!&6W0WuYu>sKt&Yclfdn;u`fvZ^aAACIPyNSm79Cpit3;LwDv0-gv-`3M#+!M>Nbnr|Gu5Chb^eHFE?z zF`j^zZ~I<_D#d!)=@OJaN{W#|a_XeCyr1RClO=#d%Gr%HSmSkDUr>BXdFPh-*tJdw zB?bO8?SgJ))`Hit7r%ELi`Z`z_1|8f>k0kdl-WDQ*{xK=m@ecyx$CcQ43AaZL%x$< z-?i46_Fc(;Mob*oW!HH5lm+ak344pA%a7Q*8#oXj5XHs~hP9oRGG)e2B>W_T`oM1r zDrf94?1G*$qg|CkRe#kN&TmODF|^Wr!<-L10mD#^ELL)2ODxpr&RfFP-V*zfPy#sI zOnw@tKZ&9bC2c(@!SMo^DdSOd{!Q}yoA%s7P*C4;=4D*^T6*RzP(s4A$sPlvvGrE; zM4W$zS<}t!NW-x`6T_6oV_SxaTXUC8Pi1*=k(efc`+mML2?~ZGT%FYIPXN2GcRKl$ z2QWsx65?%US_+TJFT0vAJcr`;7%eX!Qfm!g_6ky-S7nY;2QjjU<5&8QlN@+48jkO< zkY%c}$)gUqRNvx?;>3=Wi-lN6JY*^B+FGe>&NKA7kgpUKP;DOPL6@g{3r-mVldbzztM(NK z-c;8K{jKh?!dXW58R$A!=j-iZ6y8{!e}sCi2%4g%+^H3ij!~=`<-$YX4;ypBX|s2` zl7m^YzsTn7xRENTo5QZLti85J29ztMrcRdUA3jb=y9(5}BKGAW_vA8x3XY;Gio3QF zMG}5q>9T1%u}|MM$3-w;o*9bq8Lps^@pgp!A+P7BO6kL+cigJk4-sP)VLzXJ7#R54CUKs~$T=E=`cz#Y1E{ z8y2shMQGgjh$b8O3l=gtyZUjk$I{R19CTz4{qzd8DySR-W|nHDzN&eS@fZu;C2Ci2 z&&b^&^$oqK`QlH*fyacM-u+*n%gf;7cB2m zYlj`n)2~#eXHRF}cTr3LhwJrDIrBK*&@2)QTjomd3UhE?USZblcs1cNu5ZHKe+Hf9 z(4nWrs4)%&F#cmL=4##QtlHL9E5^KM(#VX}pKZQk`3eCXiEk5*(Q*3>4O_Ts0c#kWSrr}W)o-N$(zecB%j@`mvun4YOdiv`o}Qd>wyyu;}H z$5q93Afcw}fBe&Ma4#{khn5C%Mjl_4RrOmYe(ZI0M=?ZJ%cY-0frTL}<}oQ9I)97% z&hQF8y6&^dX|AcnEPg&jkFXkX#eFA0e>%?PP$B>GkNlqm`Ky~m3D1MuG|FwM1hI(P z(bb)2zx9VJB3z~a6u_OSQo&7@L@Unp)P>C%EUV%Uw4VijFeq_UKWoRpYaIYNa5qJ;K9#PGGz?+Vzs+agQdtsRL$_ zODE?V^^ZTkHyzkNvsVi}OfIo;^3mz7$W*nV?#4f?7avA}ReJ5%#oM@x7V6Q?)0I(& z4`n%6W-+u!<-n8b)H*}P&JkhxOE8C22RC0TDyeVZs`8<8_dR^9W@HE_Cv;Y_0MCvKH2^ZXZ~Sr6-}@V)@m>?FQ=lM+<*@_y4N4|GYtOTeU2^Ao|5k z9Q9l4NX92@QvlEk4gXYD()hhd*6}q+PW66XjlVT-9%MTTlUq+a$KM;!3?DE|l}#4% z=Tznv%n^BWu2W-rj!9J{)Tob0frL1{cqZAAWnlBDyIMU~s1_%Vwka}E0ut66E)K}W zQ-7i>w`?4K-t4#udYVT}SU=$yh8G!N6QdKw1Lb&m&MjqXY08Yby&1V+B9dew_`ljK zo4HS^KN4cEe(F0HM>1wO)o)scOOcwvW^ zlhk~fnnkfZkYIJf)Rz)|(ZWG>KPNAeHLtp=|GFKmvRrWdIz9Cxdm)ll+=1#Bo6wyH zNWyw*o4#P~XDp-yWxf{kGNnY*3IFZYlLq}bf*l2*OQ`vf&D8<;56#I;^FlmKnTxO} zi@T%mByYEl{EI{IMu7UYRm5ThraqlY$u~^|tbU zUcu3!`J?hjd+D1{GYqoCp!9LHXjEFlP{CbclqmReXlPDE94NoV0tn>Fzaqwk(h>Xy zL|u7*b?-Q51^zK9tY$Z9A}V=Xd@|;@YMwdbWzZQlZI2V zbGdU`ePjJ*y<~lTT~@uwjNFJgg>$h=9Xb!bJY)=tErB{pFqA079m0%=m3PnG+Xw56 z3Vvd(=@(;#LhAhWg2saDf}aI_HT3V|{vvQoTjYRZ#CRm)bKfQj;N`nvxR2tWO322< zkNo1u2hPp(>-PAGP3b`neMIIKm+AQ0+?r?HX)axj)?QDJj!89yt~t{7#M+O#U<6a2UiOEpX3WWF-$f zch5k(?^r9K(FOj{OVBXPha@XZFSTW3mD1|*nd&T;JzKIfNOJWP6Hu=^mu;FqNgd=B z62f(L`erMT6Uj0e9B`SwioSDcc}^1;h3(0%;kUSekoVA^T-&#gl)$L11j4O@dZxNNF57XkRb841l zIPr+v+mkksy*>^)o9{+?i@>2PN?nn^qsV%TyV>RufjK7L$Ba{bVgF0>8Nlal z`&WtC5Z+Zdw-j(ToFV0gmB>3-oq8WL>j$Xv{^uv&H%__qJ-lBC(W<6)S+&7BZ>k8n zX76nTQ~0*dpfYCg@cw2GZ~i-^yH9T0rqcKF&Cqr@Jzq45B|ASF_37{WuYb;OMVdzy zhy8YtNd4vA%elp8=Rr)v?Rqx-b;qHB%QhuJo}m8pri4S^W_MNfI}PON8TYoDZk#{8 zE@^#@OtJVJsNXwRj2mJR9tQgUy%I&M!^JIUv3_NVCoYPjLM8{o-_{UoN}hjv(H?#8 zfL-igfPvi1czFwj6{;wu$o~UnzE(cSb>|obRc5zo|L$tl-Mvrh+;unbo*BYeIx!Zu z^YgZt73gq@>>bSuzI|)og=(myRkY4Wxoj^OTw*^-;Ui2X2mf$V&E(MI6#hRmMEzC6 zv4J{(FhU^g(Lu}6BcRV3UUP=>07DkHpT{(#BH9~d@fx)op}?UsEs=SZcP~r!=g%UF zuBamp_ElWH3}z_>V>iR|7GU{p_(oI&-gCv(nhv;h@es~4#!D)x@c3&`HUFv6Q_j~% z!OFDAQ0ACM*moCjXDP+chbxjTR^&KK$5y5uUVU#pIMheF&O^;qYit@ZV%VNujA$fI zQYy=KdrSpg9sWkQAbDfVaEwCsztlWYgD}4|O#H4Qw8P(EyTJHe%bX1rMIOGc`q}xH zQDrKhfKUg|PT_L?TVY2i>kSc2kACi!m=dZ3j1-1%lwIF+<7DJuC!={IeXrSVWcAlI zZHZe+%cx}5J?BZK+02=bkvjKK{+SvzxAR!LzcGez$3!vW3^|GPe^F$px^TDmiQxVa zHz4IUyvYvh%ARj*b$b_5$k6?=XApOj-^i#sT@4^kj;%a@!t&4beB40irSwrHb)20c z=ESV56ug|eLU_C4&o^3Bj+k$R7>EDQjRg`W^y97N?NH-v$m}pED9wYlJ&8G_xJCd-OE`fhl{_nZ^oVCgiT%*C@9}TeViTp0O zbM&{)@3xhEMR|y`d2%B=r#;WR!Yq*r9T)hp^|WZR>R*UlSIC-d}3`khkCZmz?eJ?*=N45AKm;ysVB91;vBsIIT>0cZ>W z2I&Ed*ui@7!B~!Amtf+Tz<#^{^E!Yx=a1xk&$}TMbyg<#mQW+Sd|4P0ibq&^q__ z9qL^e!3Qcgdr%sQLS^KXCGg9gMSKaNp{iXIbF_bjaS2u{{%zh+s!qg_s?EN*9*Kyj zSjzQf^kaHDGY|A`1bMlM09EY*3qN{OTkF~u54?(g-UUZJ4YdxtxXaVlp})P&V#?vJgxR9m_3WDWCP zYoxPvee&etS6u~j<5^a9UT<#Bg*dA{jR6rM(Z{D#yN7=jE$SX(qx0i;)%42K;14<1 z!Pj3FL;3M!!^uwD+nkfX`Qi3;o9Q}}^@p8z?4Gp}=Jh&>QMd=IH-2&0FJ#Z^w6HMF z6?oG6*?*Scy1gl8>h03jEw4hU0s7}~D@XQYe`(#~y?+S}6+C0c4Un#L(!$sP;z6B8 z*kq1eXr;*G&z_QQ(mr|S!%BBz%3?4Cr#Edie|u*o`TjxF_-?7$nMUn%8t&;I_IQsprs?KH(gtv z_39?zv_pI8?XPj#TgdeCU^di`-)>gG3s zn$CLP_{%BRUlXIHPxwc_BnO?^B~j%1tYHtv%cdm%!IgEb`R-c>Hq7jI!|#*!bIGEdDE`EwebkkiO&%X21`%c z9H3|rr`{_JJ~jS6eB&d(RJ7pyD4CcUKb?-Z^dd{%3k9nv)HvGlGG|O)lZ__(wGmwf zFVs|c2y7UAaplxr5tHJzNhol#vU+*M)ulE`fL?1lW$o zg_PsJQEaM)Df6c`b5gu?&ac0tspeTu*IaPlQwyUZ`}-sQTGmmCr2l+tg!|ujHVMUE z@RP-h{h{sBgz^dDqgf`aIk!zE-wbC!=#ib?tIfBKclK|U4^}GXTrf-5Z4}EL(IW{U zqvJ@1!BH$skOyQBy}Gl{0E~Nmo=--fwrjv{IxfedVKmcT)r~ZqQR7YgH`MpvNKanD z&16@hq<|N?a2>)DQIO4QUQ%rVCoiAcH+K(Qktwku#SoVP4Q*@-y0mpKSglc$`<3~O zvdSB&q`$fI{s`eHk7>UdQpe4?aEBrGc<8)DA{ch4YZUW>pUqIA@KM&rHC?&=Z{-K0 ztYp^y^dPE$MABek%Z;_ZqrGy!QJb+cXiSG&ukz6U>)Yq6`uQYAND3?#V-JZYCjBMjF6$Br0eP%8%abAEI-p>%v$SL zEFPqyTNFsyYH%|Ms{U;pnyWwu2Lr{%y7)wKB|j z=m?(^yYlx~#SkrP@y-S45ZfAJ!Xx)Hjq9b_etHWV$1GGTi!H?q75B3{6$imLG4~I1 z9mR8!?TFtvJI~4<+*^BN)>n9fo2YQwQJ*agbR9a>yQeUS>W@(tOMICEtX(mhIW+11 zFbbAv)$Y~08IN9gOm!Lyin4nNO3R&#rDBMr2VE=_1iKxznpO3<2`47Y|aY&9E6U)rg`v&@3)HSn;%Ke zp6HmK>y+z_)DX}Yx;(7%Y3>6=uPwf*p4?p0{yk+QpuFKEY5a}2ah8TX*ao8KZuxT> zX#`*By?3LZLLOLuz~H*N%0|%t1%QZz!B}x!=kdkt(6Z?k`h2g`2r1U6w9AYlSl#wE z1cl+p451MrN5J}}w%)I%&+$x+uIY55%3?#}mU{^?jI!BG{D{^?-wvL|6RdJlj}M25 zD(xbR8G5Z}#Jv7)Sm%XbzP84xloIU!CKqt}Q96j_ z;aObeyj>n$D~V(A=&bQ2d>1r}7gz|sYqI%0u3*BfeSViDkfYtnAgqzyuDQ<@;t>7k zzuDnhaJ*P!UIOKq($&k|)q=TF)^n8jG@%YV=#T8$qzM)&4U-v4;oMB%mA+$;T zUb0L|lHg&kxHFhJQJmOhY+Y(dPM$+m#5A?XV~d%2dWZ89q5~~}8C|mS)RznYdnMGT zev3xt`uzdECoS$#`uuZC8uVr_kdfv-amuu+y3m$pBQSO3B-2@^uSac?NyD}Lb{58H7u%oigxVbhG?RN%?DwMWrK|(OK zQAnk&i%Gj5Vm*#0NYWc$OxU}u-|5?+Wkx+V!h6LQJ30GsMSg8*tjX=QIs!;A(XeSNshuoXHq{pVBfZs#3^m8eL z!+)4dy4MLj$xHwikCmcok~qSCpwFv#3PKoGdZV=a#d0yn$i~$pvwO=s-cct$uMyY5ieYTr!=Rhf zK%uMf?V%?K*H96C@cA1bQat(>I3$kIm5V2$D8#AZwae*cth!L{tLyH~dD8>kLj4jOWo@=gWs@B4pTyDhviP5ZXlXvEmPG#nhqzx3V|LCL zU0ww7_#sYFlpM0OJgIODpzS%=I88a-Cj^UH%WPl5eF0ZENhf1}KXtI%{_7(Ue%+dS zJgCltcHj0^T_xG_sJ8~&JCilVLqR>Mic2@1VGErE^f9gF8!x2Sh5&O>!VV{4WZPG) zWOH}f?C`^e3#sMUGt>bL{yg1XKHh?JrjPySgc{_=D&Er&r7!2+315J$n}9PcR<=kO zg>e4zUFj)`@X@wuT>TWV;1jP&;H)G|DMSB8Iy+K0Y>1ThHF$CGr0y)tZV~G`-D7ib zB1N~wmGMTj<(HIxrA6NjUeFiv=j4|x+C)1z3aYH+M}~cvFHncBKU%;&4G&4|J3ajP zq$U&aV$P$9qQ1r06RCIq_LXuG`L4;cZTZyD?$}JGN~{k{M&wW2kW~_Ax-pE%zkpqK zsBqYnhF_tIe`Sc**BKHXD)ruM)&g&qo_*771Am+~*{nv@vI)ZM-dd>=;zxQYRQ#+e zWko7Dp@g6N<+Rm}CNy(@mfx3jx^J2>%?=kYGitv>C7_Yg6p8xKlRXrevO4UTC2wBE zKzo?$Q?P2AGRLEWN%2*E)+smsa6&%kTe8Yz$U!=XOQ)^fIqsz>S!1CV z>H8?;3;2jrkZ3*^8eGHeey3C{Qun97h%@gudUsZw3t}+QOMhxCPOSVT5#?^u(nrJK zy*P-4H;{)11Xv@ezkoq`Cl`!-gdY#N3>;zM9k!vK90%>!2^&-?2=$&E1PgerpE{WJ z1Zg7M8su(!K=o8UGJ`KLKoeJYkC3t?r_LK;j#oIWHUS2I0{*-(yWf@+<83J|YTj>_ zuYVQ{v9LZHdLlsNW+D!sy&;%!>T=j*n2GM+aecV+F`wxi&lab46q`Vylh*o%po ziL85Z7QZYi=609i#y=P4m<d$Vn6`|0!8U2q$hh%P45}hlN0W_Xv z!vzozkjG6Tv^#6N6Z@gEtHfM9W>V=RG|PW5!53^q&2ddW2IyWC<~RuSUsq(2Ry5x2 zE;ST{Uof-l=O0P~#`F#hmTb#g^j*UzG$%g^aneTE&wjqs3z!`-L65OX99~A{<@zr? zVq+Wuk9FQfFSSv7)P{F5N_sANh@&26F~i`|HN#z(QPURj8EuJ#^Oq;G^oAWGkzfO( z0p28)*YDmMA)#oV5Zjg_JMb+0N0BE}KfX?Jmy?fKyQYr=XiN7qXqAk&+l#kE0ihCH z>ty7NUzFVs&*rM%%fBAkW7C{5WE|gkKOf!;ulI4^quryxJ!JLfg^osjv{j#ABAGTr zVKDC2rR~oKwmizFHlBmp*Z{;~{P$0mySDndhE;Qpx)JRg-@q zP^8c?7BN&@2G_f`Q>86&-sQq}y+0@KTfrZi5nG1^(JLjKBzC_ZIr)4F<%yv}^sHWK zef$kIx_!y`ukj`R3>S1R4Ewb<bE5ysL&rX93<%2R;0WCI_`HaV5|N^3!4D9t##i>g2!e?PJp1pbj{eL@>eO z06hL)oZGj7+4?&fVmD!7sB7$=`n_QR;LA!#ypOd~jwLX6z^h2=vu~Xd!cz&zEJfJQ zQ*r2Ek%%7(0#v{6jxvVqXoCxqe&|kTDO^Tky|-Drd6+W~zqv`Rtc~D})(Hb}NBl;@ z>F~F_ldM=Ip;}%IjaY|z(VhS|x68W*GQ5#}msJ@gfUKZyHb9E5B ztoWrUw6B|=69cx6d2O5fljr-sS@37;%d!ges=9*9s@nZdB-BN|(oI4CSD`Gw+|@OcG`Pu!LC$Pl2k$QkH`GH!9x3t?y7znzW3_5 z-UrMTpUB&yUjc-!gWfMki_WKu;LWu3V#epSc^{@>z-(+p_McvePW>%>fyei+JeL*F zxk@U5rq@aX&yk-QKOyh^SEs7tkHJo%0QhS@*~zye42T7^ znt&Uz6SDCgCr9oV=oJWG;_t95eG@&txA%%-qRZ%^h=+!4t0z|{;wM%o$X4~Jk6Xp8 zkk_?^T&Rb6HgG*{g0_AUF|e1qJc zTLh>Y&?9Mu3tVs0k=6H7yY0P9qG741k!klr(fPI15kb5Q+j;!>jujLffAeY_1KcAf zbjKasZENXV8naFf^6*IQPOJWHnga+5;LmQHM6B8^L@h-Ho?1$++xqkpQfC!;6~)Q% zqL<64c|cS;+33^|d6J;{F_q(hRD*$mZ_9lU=TrSSk_vt7K8Ace+q4>|j7jca{~t{g3HO-sxZm!LQBTdZv|#*TbNwv!q2_0y2gGeV@y>OQB*0Wi72~+OH^bJZE5tPF}gSmQK$|OKFw=;6P*Gcel z=3>(pL1e27V7OI=@=#lO@NRm!o4W(|SDS7D_Hg5ms(5;))7ICN=v!P`TPW36GBl== z6X?u|==JE##vfCeDw}AH9RfN;Q_oi(Z+>qqM$@nwU!^?9472vDqZl(E-4bW(<_!XV zQ+MUzsi)f+7y22SWd=3*2vJ0J@k%83X1&r19HoW+riWThZdx@bGfq@Io5WPlLtr!} z1wB%sX|`hxV!nX_0bsk0D%vc&ebTM1Nd7l3>*|>Z)l}z^>tn+prk6--b;d1Kk<#Xbh4EE_xV0fC}i`^r0&8 zuU3C6guFW+RDN*<`8$bI4GxaLk6R~eX6+lqHYkQYV(D1!{#fO11^m{SGFtfDqo9ta z3(Qb^+Hhmiji7n831?)#{(0`n^^>fdrTvII5{v5S=Ei0Mda2=|#84s+b&WyO{@6yy z3$qfWN;eTvmTY@6_v}-*HVa6eyX1K#@~&Jb@lDpG0o|6te##xnwf=u^DJ#u>Z6;d8xo3ncyxyt zgCIjjbxgS3Ow3_n#(eY>FXk+-4Z6(xDvh4xO%)6`1T{MTc5wD9tfVp&=_mXk$#!Ed zGk8JAE|Hc!yZ@?<^3X&?_hjvU3LpKhcX&6O#3R_Glvxz%o^PJPx&6hd&#lFV^t4Q%CmRAjvSU>6TBC5Z==$i$xw_&)z*dkvfgfF|T127yiyj7WFq%l~T#;;%_|4g3 zxaU($?EGTR5`s<+Z`{7YlUSUp0LXifYRdc}$6YXE$L@i^8A(>m>QI{;ixtwD) z@ViX?*!2+#J2q}1M$MOgPvo`Z*EY{Br8Mt97;P12`{3pN&uX>!mlk<*5ICnV9aCGd zUkyW2ZW21_2HP)TlWue)b-mg;jq$R_F$Plml#+7Rdn)BmNLE6j81!}QuDPkC_kchD zZcrmMm6u5=7{=+ker%;4(ps9G4vhSTK6ktKD&&*&V+&n`6%RnuuKw&@OQ3*d zgXK~27q)fJNXdp8$UmY^q0!;x=XYkK^!p)E^KQ{Z%S41&vK^t6(c~j5XFWF`(2{%B z7Nfcfq4Z|CV|NcfAH;pF1=eAm4ks9TUpLnFId10PCbYW5|Sl?Fu--3(g411c>qmOW8#6VPd$77 z6@*)SO`m)8UhcDo0a}$UIYjks~Uz)zq|Gv524-`sOR# z1?xYETrT!u!RyKz8?Fl|;VhEka(}9CPE+Ehq<-REy+@*1iFI`$CI`>nYqyQe_R@+5 z_E6_x0VOlt+CEQPoxGUG54*aGyXP8WPMM){`yNFmIO=}{jd^JxR`9O-F0|B%Ac}inIHHJQU2Zl+TTX-5ynV0!7)OWn^CDBgKN3Um*^Awhp+Q~VEl&o+5(TjmQp>^MDKhN6nb|%*{h3%Tg z>8W44&nOw*-<^zDM1>qs%+{h(d&`#sS&lP56yn6K-ruZCk-h_|#M%so^ zMTNur?BWF()-b~|Aq$f@l>BjCw$txYp2~Q^O>q(M7?NWX-(t=y&(YfEzHp$1ii>u=ku+FWCtN7%d!&@-T2~)X^l$Rx!o1B@Kh(S%t)I@U#d#4 zZ`%FyH1g!rBtK^)fEM!5Ns0Ep*HM=DUpddSxD!n6^TWQx!@UkT%Rm!?oEIjVD!|gt zGuIcwzqbkV#9>uA&TDJi$ETVvHDCr@``BPEKqU`?n|R8kK)gg{Pa-`?zTTJWMrGr3 zR#CXC`vh|fELZ4lSa37cYIxI`iOQm+z@_jln$B94rry$>-n)6;z!F9O2(kI6WZ?P~ z=pA?;|BS#x8YJ{<2N(nP)|KqnH>Q8?Q9q!Gv%D9M-~E+V_WdLcmRrht3l+|P#21kL z@W{Ifr$zl!g?jT2TG{?I0}hj9%xqsEZ^FJ6U`|JcXTx0LeLnZBcqFFM{mSDmkwL{_ zilSkeAywbyW#8ZieN?>H#*f8YWrMli=KJ6KZdG@E5B=;jD^RAGw0c!M#`_ol0n0*z z5@>Z1nA*ZEowJ?$wFB$6&A$1Pi7m|mjiv5d92|h6Yp}ulp1zdcg`$~OFUiF!Ur!9! zN1h}9{I;S@x0izafgwij@9zosc>O#!oAI*zrFL{}c(KU>Q9P$J41_8hD!_+@|2-9pDxBogFAO0Dk8`vGGi%Dj$6a(D2 zN@*?#yPydFp`FB3iy~9c9J70`oAe_J%P$I6sEF-d=nA<1iuIDE_uIGUe!!q3t4e2L zqCk~9(>IX+NNDk-{M2*26MyHd>-0w zj#xMiWno`O(rm2&{z$gkK}aH~=uzr%&HkN)_I*}SO!E3$zS0Wx8a%(SjB_E~Z(3}l z^4huF)pBycPQm_QNOe}5N$$fxj97mq#z+Sh(s!aM zn-0|+RY|39$a+~uRd6lhMMNym`g)Wkhc`E9TkRMAMg~vE_oJakzKEO+$W|vhpxWbm z1H@^mDzvAS^@vmi{`Y znXOLRCdywq%MrP08^jZs=PmPZds@y1uaEH!q~ImBe_OVRRjE&YNGW$(l+kT%pk^;M zu<#Mr_YUP4^7*ACl%*YgY+Non$&#x&(jLjm14b@oEPTb(fne6921+u=%ZIb9NX&n^kyaMo?;TL=@>C?ID`r2reC&<34eq zTfkYbB2TkG7I=}s!Efb9=d*E#iY#+u9*?mIdwu17F+d|^|0(=eMw0!jD4C&#!Q1!o z@!|&p#enVQK@w+Dzg%se^VG8D9epRSem05WhEJ1&L=>$jPmaJk-|fD*flS*guKX_E zJ7Frs%gPWA*ZzdX&>=!pkib3$KgPnLhv6};zZV8?4D_Bh0C{QkX?S3>yhEO@6c_S}mZjqwfA*^Nuevjxq>+=~rAa4!$ti(CBhs zy#_rlU+kAa#=Hgl&UaWSKeaBxzjLO!^FA&~{~n^4^jCIxX0ovU2hZjAB-p~~@otnz zn3;4sWtN-T?9;mwo3?ZBs`JvUoYWgv8;WGJD-c)BZ*4WqgZyEBa@*JZz%F=u>XJUG zR$K4$gwpQwjX(8zTilqcjp2?gv%Lo-5R4u;z3`JrP9SvjrtIhcfO+2>uSJr>`4F#+ zrN>UFc$M9~59653OGY>@cX{gMg8X+~oxJ~lj9!dQV%{x+KlV-E%`&7k4eT$bQd^&J ziM8xf2RRGYyb%8fSDE(*I`LMAU}nFVHc}qiSqBeGNAi-E|A7K>CD_Yz-ItfOVGmO; zv?k|#@f`HLv<{r30d|m@(LeltCWqyTdjie5G#ytuNBJC_Fcz5^E6Mwo&or`(0ovya zbtbs9Mbg&4`?14$Q#Z8-V~dUV{>y_o8*hCo5Blpdor)XI0@K~$RS;C)6rx_g)^X}` zvM*aLP!cn*pC;-){d}|__V&P_6`rc}CZ?iM2#iWA!rB`2TujQo%k?}thL7yVBJfWN z!09;rJB8a7wW%u?(W~$*KcV=4;v$~{Qz0B?LcOPiqn$5-kmK#7!k4xguU^sR&HBrh zD{C2+NGE}UgINB~ZF}@&u+P?*-4v1es@{nKfNC99z$Aymvf4x=;V`~Q zZDSWy|CZPi;^Om7q-?(GWQ zm#WDwF!g@5r@W}`crnfSV|6UCBW|2sm>4Qz;N!5?2dXar3PgHx{(XMo(LDFDXTo0syoI}Z`ju>VYr|zH~r*XcIz6J4t z+p#8^bp9CgYuFo=&}ke$NXmE7@gQ0$n-<@7J76QxpJ)gmA7tL_>FE7dm>I4rz3tj4 z>l*#OOM_uA<#PFO_(N&23$?p-sb}Ld>R1-%S0s}CEpO`j zDf4^{?XG0@C-AfIa5VOV3Hi8;G&5Z-_3wv-T@@ZIX9w2?GLl#NZSwX5HhJOH^g$A? z8ENOD7HbwF=H&0;Zx$X*&kf%i{|b$gb-aH^{O_n}^Jdg5_1cG8qcx|01D=8~xh)mc z=3ce)-srFkZ>ZakCeZH>>Z_T6X2rcj^}0)5mKM=FiyIz*lU$v-`NIO_{)h63L-)bZ z*IynhC&I-BB0M|5$ST{&>JzBZSexR@Vz)!xlU&DqHo;UeO;JEB75=X@bBD1Oy_1Kn z_=Y3Ke})Jq%m2oY`Rx4%1ph810<>RFL6eMrOf*MSTCGnLh*|)*>$1A0ow;yTp&zLz z-+#R$AfS}w-81pQ2$rKUZncjZI|oYqP-B@2uL9r1MEP2&zz*R`s-Q;K$d}8XH1&0B zX}}787z!n$&#TViRo*!RB4(v4QH0@TCEckB*ClPF=wsouI8wu`kthvk?!Ci4<&o|9(Fa=!5{`spqd(|1a z%j3lKDdkSNs2c#!JF|-fQN{dzmooVgdph7NHZGynP|I|ylBzGIS``YK%J=>fluefG z^_up>M1Z*wi^JGohvkzuQ#ZGwIrzG{E4iQkA72k8c8@ z7q>3R(d64g3wcr({#$wt*8RIKD~p31z(c0e;`{xJ+*?3Y8qG8kC`Rfz1Tu7Yv~bXj zBh+kBT#xnI)wN>Jdo;OSqFp+DXL|e;R&nPsGrEiL;ityb1hIa2dh?W2>TB4UUJNVy`3{35dn!Lq%uYjGqmYw2Y%2RLu41qthbyR-K; z%xr8x>MeG{&MirG<5#B zh7eo(i3)k1SqYkG(~AmjEX)^iZr^=Jrv08=Q)%9pnt5czjJe-ChYPkZAeMCLoTxHE z`}XL{G~dH7f@`dKSO}bEDw+dy_)+i=ABI?CSaeFX@#J(nW?;B=sMNq$LP?MuXjJ^{ zq*%uC*R7k1UYjR`1~(6X>;hS`%xu^88}`1pn&TceJ7=O_D~J>I%8C)ESH|a`5ZhGR z&mW}FTJg<3*Rbz>F%^9lr@Y=}^_4EDU+Rn&V;q0s!L?zKwqmp{DC0puD3W}}=`$h0 z-5XRcIt$%R1~+`Izl5tVvd;0XP_}^5>7C0KZc0ENICxxm3^5auW2?BcjPn~U`04{r zEVx;nP3+*0#TzdP1N&6U|iyb|mDGxG7G2UC1TDF=}m4ESSsU26w zE*<~=ZzKpSRQz=t9B~Zz$k>&kOBo&J3Qw zN-kj}r(f7$U2Q`rsf`96y?Q?86zhVB%e{0+fQS<#g~_j3ymkL?D9fyMK|r|RD9u;5 zeR?#NlF(IZe65~ci=g1?BFi5EEe(m}a#NTHD`M{+!w> z-Z3%;8(A`^34>5_yuBfIGQ9JTtcFMGKJ>RgF5h4vhy*iToLQ1_Vq#klys<*mYg@r; z04J`5S@EFQt~GxU{^L0Pid*P}>EmBfj%qjqtvYrR5y`#2Cs=Z{{g~OL&$5y8LoiW) zPi9@M>>w{eJ{|=@5e5c*O!JN#vE@_k=UYD60JV*F3)L)PjkJ=U>*G%x?vmvVOnC~V z)l?D!&_kfbaJ=7B=DfOU10e%Oa#ZmHrzK24gJCyh^gJlFtK4a3;B*+(87b$9r|UOV zN$>bd-H!}XfQYWBwj%aCzg+y&#Mb+LD`=cP$-!|`31odqroa3C7Kr-DXJ8ht_j*J&5`o71-8-6WDiKNt$v%;o;@szekQE` za=eMR; z)M?x_{lg}3qn%uD8o~TOLiwqdVbN?QC?mk(dgV6!l zKb^d9oB}YR!N|bDz^u{0c)`7m&;V!yq!i**vg#4(@jOu?5%GO4y&MqdfdX(kaC#9$ z5hO%0Rpes{QXSeIcsG!2Lg2_^!YV9@B!S$$OtV;tA_b_sFuMfgukBC3Hw{M!g!n!9}jiwlh zCa8%f$n)V}y5Ar3JYR+40&HZEg4EGybxK$5;3HvPmo$~(g@Wv1yDwYNeNWJ0Q0%=wM)Z}>W1 z}!Khl|u0nYdfBKWw6lW0h(uVI(e{L4+SdWcU+w_Pgw&qosACzSB zBrB&7QqtI5iA;25#|T$17Llw4@nv~=c}8s!?3gMl@2RyeHh3W=Bt^6HuKi8d-`rz8=ikp=1&~WSMC=to)xz6WZ7^3V>v1Omey{9OytW?B^B=6{W z{Q;}lxA&xovSpBD@@Ff};EF<4Or@nJnHl1UDiQX;epCa$wHAYM<3She|N2+yo zK@@3ASB{!8Jn)35czx1DXB2yMaM&SH68ZziNonGH+!%k*0!~@YH;qYh?H$?K(Vb{Z z|5A?W_Dv3L=`ReRqwi+}*#1uf$G=L~qMz6^@0T;);bHBp|k#-C-*gN(~jN-#M6I zz^$z7<1}N~t+~)|Fwidsb%-Ffw$e*wx7kTOs27@T+gWjGXD1mdr7tB(99pqG_YZXF zV~2+EM_ieZyohmQv43)Cs())8<7_vuraAQ{%`x3oj9e=54_sP)ofv5FsG+KJtO_@&Xw8a)v0wbhFg8QYqG0{ zM;(@1LP%u)pj{>LPFxU1oO=-RlFFAUO7nwj%`=)y?K8%sdmRo2j`Ujo2AWBnJ4O{o zpLkqapEA2mZTB{iWyye>t&|q&C@RETj(0UuF3PjDZ=gdcL~mCS#W5v4JvhAdX8YQY zM~T(Lm@uRiPF@)N!y z7Vvx51T5SXSI0()h(8b2AA{ILd2n)h#|%q8$HAaq4z@n5_&Lh`TcJN z?;HxalvY#=`GAn#pdHl?okLLwm%84>s3P9(Rmek#Zre%==)>DCr^0yePnCF+J;t80 zj18_PIiUiT>cr$Yau}8iwlqcJmBF4n%3h!Ut3gIYIUd$&q^k!u4h|-U7(zeQuDFTf z5=pKsJa3o%J`P*4EEsx^)L8GjOK81J^c-hv(fSCq;A~3zaj?ZxIt80l6Y> z3-e!6`eEExVehMkLK~=)2=?&~^P{ZWuP?jo#(^07KLHHT`krz5pszWH@ekBTad#cc z`&is|!MDE5Txwz`^`mad*}<(EygJ$!GAGW>)pPI4eZ;I<7DE8r4fp#o@?~u3M}Oo0 z)m_==v*sZ7(yDo<(F|v*x^-|{p=-PWUO$)1P z%HZg$ZxQE}1(W)a_V-WG@!uBKg}&)m^XD-lZ(>?U8)Q((1SUVPBRaGC#(vu4A2{Ek zy2K`<>L++?c6O|H71u<43e+sxJ(ck7W+^5{E;s?b9{WT%hKWgfQz#3qEJ}pA{;4ex zV+pt-3~4kEt12O>{R5$wa)n82gI2l-_5anV zh??BUQd(|t!DaZmlm1rqJH4IP&pVoOrV$J*#s33^$qm>HAitZ(*|g0ms!!~kYUbr6 z%@+Ztb)P@w`Xo+blhi0_&VJFKXbsY{Sf)#`zcHk=QTMe)n1;$=S?6l>Nn z%Go8n-P0cz@RPdaDXiDrC3pY*$qN7Z-V68PVN|ADqlglfDd#U`&AwKoyU!G>EHU2V zS#}rVxxR^Ip7P0s@L!)I5_eb=&7Q-rj`^YG-KHyK!8_dGd5M!KY=oyLKga60J%zYk1mfL*`8-?^U>BC$9 zk&LZB0es(BP`2CE=9^V_Vy1dDnv=)pOtC()B2-gNkH6iWK4}L50EnCO0w{*el-|Wg=}RP17V`ZBbPR~d}ib1 z&~5yo;H6A^TDblo=T*T2S_N4mf8>^D=~~2OZCItkH;GjJVp;h6$JCZ=K9|s+Mesqk zvJl)Sp^;(b4RwAZn<~kK88aJ2!L2zH+)eGqe9OVXhkD+|<9WCw_wDF)m#6W`9esGD z9htJCXvoT)m9X)y(SJ-;;ywg1bQiuN6;I#g+;jbVzdgQ?igrx>-eh%sjp-}9zql;a_kJkfv6lapm-(+`J6->6`+hQwP(W{acWur*KsS2VgzM&d z>oifF4xtMu^$A^d9#BR8h5BJFeHYwRp2oe-px1Z{1n1U1c+t~?B!+}BR$|1P0IG!w z;)SkN0o%e*p&7O*gd1PyGVG$p#PI%CGPfRb(Xfb`zY+^{5r{WWg+nwt3e;AT=YK5Z z`wcs;!5FV0=;f%cVc@IUTROG2RC|nXKU_XN`3=oNf(6m4Gj7-I6xZ$}31aBn-vCrl z75TF#>-Xg4vFB+Ub4p8=#ub4#KP95EQB?B0gttnTDG>jcLl^jVuy?z<8VQS^G5<#3QD7H!Uf3!Ugj z9FZZ@a4Dfy>FA=_H985q(sv6k^Ho&u%m-Xo_!qdTiM&M-r}FEKNloJINP|-kH_Jy1 z#-|7_>4=S_#TMjs&bODjE2;(ABF26hc!%U1-)NeTB>$?S!~yh?bE$gH#b4;W($8OGd=B7#nl@qd8R3I!ewFAO=>l#&;7 zmc2zNzRUa{Vk4u~Zv$!CbfmcoIx+X`c#iX3qysCLG6^ZeNJ6)p7EUctI>^ z@T<2X6nIZ>J0(F6^!4;T2xS-)-uj7h1cfs60ecSyYY9nm1hJ3<0N5lL-1W<}+*E9E z48a9E=!)6=GVE@M%tOf#r0f}dW&m;O08dkBqh93Py9KE3JaafwHzfo}23N9Ymg0ob zC1${*P`pWmwn*)6yBbJ|^1E0qYi?DuD+9L+z!1zMS`@=)P=On_{lIS3_>&Eyxp7Tp zl1OrR2kAYIu7>|d(m94l_B?HPV%v7I;Y1s2lWc5nZ0yDp+jcg#ZQItywr%Up`~Q9K z>&$fZ>C@Hq+*O6k2lS*^GZ%VO`bDlUOZ7#*dk4N=76Cp4`94wN$WV1LW~@isUXO>$ zZLnH4=tZD5|H)J6^|Ogu>$!|+lk^D>@BOs*{q{>$+wajtNp|UNs_8ONRWsIVaPySg zz=|XSWtAYk`2F3}LEgn(?N${e7dzyxp1NRjReKd`jj<5mc{r)EmOnBwGB2o^Ia4;4 zs2R$HD!}m^=cbwTP+mJd%l5B5n;1{if4O&w{I#d-H=Lc#j5+M$+C;#@-c}C6I5;p= zz?3;=$=gCd&Y0@ut1AlRm;5*zK(!67VyuLm?sGE`+f3fEF6I*!x@7SeF9tI4Q_ z27BQEb;(=CXnz3$R#!;OM_7>q;kSsx_U%fx`8pPPL&K1n7vrfpUIGaI#nx>;gqPJf zjzYD^;xCnnc4s)j@nSf(rPVuKetXAx~a~q80(AObhjIPxpjrJG)JUB#^)!OsCcbPt(8fFtr z=Cac!aszFYS2NSrsy=(u2|*x;q`ghu>D-0(dAT;x>{{ypc5%?#|F@-L`_)K=CYVZ|mBKCVUt3Uu-oA$3(*LuE!H2N5jWolsl^KHkon=|Wu zB<3kWMiibY_8W8X`l)H-JIc3K5EFY1oOifpi_q(p#UEd{waDo4W5g_TkANiptUTA= zz}~C7d(hJUUR+$5>%d&u^le(E7+ro*RmUr;>+3mcgVa|+1hm`y+K`oeq$2ncMET|> zs+GZc1uw;_l*38?TXj6vzmcl0snEuZx$7!c5(Jg`>ViZQhRci1d&0S@-Zd(VFw@L| z|7mgYS{F+)ydB_PSY-#$>tl_Xv*QH&XH%Ix1=GvqVO)pN$wdg@x;ZDJI8C9h2bpCn z$M(|p{9dUfEl(9re7lt*9e4McF0Zn1UJNPoIlgb z{>bUp+ZQXe~8ejOH(XyEttjp-z(vIm#@_bDU!xndtU642)^WZOaCag7;jX< zReFBeu|$4q039#y(O-PIH6DosNmyAE4=hWvt_0Iy?Kl>+jIuUz6c)q%(sGZXGuV%l zN_Ud~Hon2te8iMr&tF>b1-2ZH6_x0u#=YYiKL2;HY`dSW0lFwDnw?oc9M@GQ=0Q}u znH&?WDkL)0;(+S2Jc@(kba*VCcUxNTA?{uq2$8=WtlE%@TY-z#fpE~&NQRosd5*@! zz$v)i6B3|a!;+rK0)Ii9Hty$>=h!ZFP;ZXM-77K-{BGweOp0bxF zL-7=P=dm?eP`#)3&FQ_3`1q`()bsTm3kH2cMVn*C-Q0cI&U43GD#vzCIM`Vg*>)3* zE*HNp`HdZyvUU5>>kVE$)l%ZGno(f_m^saQ9t)| zQ7ur&$`I_@r9kmEr!0k*HRx0pXV6RAP}mvhWd60FwA{pU-=bRZPNN6*)SlI@AnE&r zLYFYfd*a$q$$G2Sws!v{*RI8^*Q>v=>J|K}b@I;dE|^E;_kRwG2fYlsUeYXLz53FG zd^s=L!JU;B!w9o-`cXTNXRk2AWyrv+JPL~@`Vvvwgu_SpPofg$yw|>1J$t5goNujE z;I68;J#O}>!0!0-jo>4$GEpsLC9mt@8NBzaiG)sNa;c$!e|&g5U(z>Eo47&YE$QcI zhmq?jYf@*vSt>yaHLWqcwR5RpAIg2XkTxMq=bQF$z2e!z-}0gV6WL4c_pdQARsMj0Ii`y=Vq{WGjDj_EN4u#*+go+W~ zY{a4S0C#ZmsJwu8fSZH>p29v7ge{M4^F7_b?zSFbe5Y*3QRIIp#IaYN`x2Gk2q*l? z48FWpn-TDa>n7dmd^jbuB?e0VrPryS?|8$&NIw8`e2*Au7r(aVN#E40#cM^Im9do@R}hv8X2j^AUy zqw7@byuLi@hi) z2m2sHP50IPqsm zH_vgG*Sl%q4`{;FlGr|_hghK-_d)0?l42LEDmT zi#;VkWF9GYb5Eo1hbvQKzHXQdIYZC}W*n3v4u#Q6uUs9FehWKiQT^-?j7U_>yn0Uk zJ{CE#Ct}s;I$r)`u-@^;RY`4smAglRILg9!EdmK$IOk0Tdj!`}!=y7TDuZ)|{zm{Y z8M*foy}w){KH*PyOPOpW=j0sa6^)!U@Fz*J0)2?0mpq;A_?#AuxZoNOJhnAhvnFpJ za9K9R-9B=!6SBaKi6)oZttWNEs#~eMek}kJi)LK?**){~Zu&@V4}MTS-Oj=~$a8(& zF{FaQ4LJ2uY4mvS#dylQCy&G$aM}7`6^ZwwhifjsSBRf=_*hd!W>_PHjtz(1WJ6J* ze;oY0q|WpP$T^pWEDk;LA6ZFE{xB4Ef^| z*#N-+$^extOd(St#x__#HrtOh3GlPpPcJYl`Z5%y52xp_Td#*;XlzKj*MA#t+iq)m zD^jGDOftqc1Wgo67^27D!T+>-Tc4zwP6IpwMi*k<7ygGpHqy+`8M_&}8CxY)CAS$A z$`nd$N^4$MO_52V16-HJ#0dlVOR9E#tRt91c*FthJ8>Sm39yr%Me?Q)n8rc*6R-C5AR ziqirLz_}OpgVs^lv(^H(pftGrGX>b9T^#dQ2+}19AE7s8`;>~XGY=7| zkLerZa}BiI`u4ks$&-?&(IT%?lltU-dr6+jehUJq zFU@oKx8fw)a;L4~yrS^aPlW&O;>8lx9dyyJbUj{OBF_jhd$j8IOycJq!C3f$XXL87 zEF_Hb3*7wM<2mJiSr}93kT_^hm>jiy*3{1&WlYzT$6rn!_btK>9Gf5*H!MA3h>v{ayrqrVOR5T;;=f-?Q*W9KPw;jBiO9>^CoCtNseRw}sTus^Jx?4`2{FO8 z{zlBd0-?OaW^-kfW-Rz6kh$J(IOHKm)0JK#k2_Me#e=-^C=7mJnSQ?W-~%l4WQ@!s zVq6)HxaYLnD3Gi1v^+rhKbPs=Rq;T#n#rjNFAR71N{{QJAI7~fL9&nnUwmOLvCFRh zV7+_6>ai;1niBCO@)j5IG`*0c<}jzx5#eGlKHmyS^*8>W`{`XZOL{zC{@F#{=-9kP zks6c$b#Vbr30?+8HNlm)2i1U6{j362jUH!nm}WwH$Bc zTa=WqIhPQOX!4be+rlXe`Sy*2LpMqT`v=PY{wBg8=N2s>7fo{VI-wz6rO2P5uU)kh zT0x)?`uC!Y;ixG2%G%yi?sRQ79)WfE`NLDJ@6u7~2JNh`agM%1N@_omlf{$(CVk5Q& z_oT8=;w*ubPV50q4~bcj=^p{&X!FToyJn%AU25%q?W-(COfPZIE)m=&S3>J>9m+=B zeeSw*v%fYb9zX1Btcf%ZlWgqVI4ljDg z#0$d86991{z)3O@Y?F&FNzFccmcedZj9nJ=e=xs117KWVkteaaxCHfKX21==fPTzV za9mt^TU&^}@DixTn12y^$4{MY2fKT?!M}y@Q4$*?_42W8ZKeDA*Fi#(@#^!VBAA2f zS@i@b=o;Dn{zZLrG264GnTol7T&1SrI6`iJdlmlh9DnoHmn+ff$KN5W``1_T9!_;? zCWNe4KT!3Hfl83MUchRL4-y;^8N_eF|GV95{0%;Z{nD_G z2e#RDSbu1cd65IZ6JI(T@70SN|0U9ZZujgaZF+;|x<>$V7%y~(5>){-tlu}-?Tr&I zfgEA~O{r72$ClR7L{CL8Zm-VpZ+2+WwlsEh5-Gspiv#KPY4`jk0zve|e7j&V(@!dR zVqf4;R1mmrK}LgB>YiuhIZwKENahcP01@#=1`0eE8E@R1)$1_L6@~&yxl-9>=nU~D zN73boo7!O~zv9_sC8*LMfNEmb4Yk^Pc`%1PS;P8l;j7XbzfQsF+zID?xx@zk-D-&Xovn(W zk5+J(Khf7eA-Qy+4u4M(auCk3*MB?vN?nn#5&GRWWgY+cN~s9pj9UFQx4vEGt7-BEU=TROjH5s7K_?1I=bF0;?%u8yg+;zLZ6^Lu>!qJ1C#m1L zU^V#Ku@AoRFA!gb-XfgS)_8Hb{OtR6HaiyE$@~{Jc%*0y?Kc=0UlOjM&i0j$h5mxhmlqC`f*< z?#}Vwx2o*#Q*Q*Od4%s>lMH`h;Ms7LmTo(dq%`rL{B7SMYI@~UKqUd0uUfsp? zghi4iuI|{1P4VEwY3Gx)G6KqM(r8i@AG738SDnoSRXcrko0f2QpBuwltBt;C(QMd< z4A#*U;3ZVeb^dk>pY0SF9CONrfpj4LKsIGSyuu5*Jk`?d^va@gTuY03g=XWBLIWx$ zkWGzPdoKaGq*1`dknz&J53ZiENKmtiBIK>16}xI)o0Xvh)|BfKtg+ckER83!nb3$L zTBg9k-B9odmvDcLWY6HJ$*WVn*=v{ow!B5t74vIT%$sD+Um7x$3Nu8FarxRcy?|R@ z-6(MN7Zvr2B0a#4m0zaPx&SYsxNc=Lo+2vab1yDq5eoq}wCJ;aVchDQo87yz1&+e8 zOPWo~`Nq35Ha#JbGA5})U+;%c@Ajqsz~EEMQU3cL-)y*1qyHe4dcT$0*~Q$?aqkR0 z+@f*qIiL|3SX?k7wq?X%d1u&Hmyf8Uh4|1OwXx0^H6%vo-eYnfZ2?pG1$ z+pLJq=L`E8517PgxZm~F;!_~t?4xWaBmRi{)QhGcrb#jm$_L_`*OxOfQUS>kw9(Zi zV)8e0ablyuvE+azyIpW3^Fva6e-;Ww8vcRdOEPXr@Y)~u7p>a>Am}<`j5#faGIgQh z1?}*p?Q^|G=}o2U_iNj4^8z#obrBA;TS z##yI6n^RKAmIBZokM>BGzb*^^$g8RjcpWNUE%yTZY`C$}4H^{>HL@Rq(0oaz@}`$SF0 zcjsTW??jX|?@74xoRs-Ic#^Sb0rZ~-x_2P>UiK#z;Gjxj?3i!D^)DuMf`*J~Pshhp zInCkJ!taDDA-b|&&on%Q{IV2E_(ObTmbm~PukfJu8O)NRg+?2e>R8@NkC{hFXs;%c zvn3B$@pL!LVztv}jfYn&Uj1MTg^zbfEOjipg;fK%{Dc%<0I9PJ&{?rP*fXNvnf-Cb{F_=N=*cgppsgrHIEJXQ$`oEcFVl)=LQ+se0Sr zEO#UemD87E%N3I=*SUfrb3_hH0qm7XzlcVfo7>scj7Y)Zmw-|$OfH1H^6y?g3QG8y zDczTiF-U3AFmnX&3wnl(_lQ-KEBF{mV)Ct$$TfUf5znJFj90xy=;wssUr*z>Ss@fm zTrBH=4Nm3ftBf@}L;Z+XT%U{4Agfzj2R;zKH0a;f42#t2_ap4_qvQtg*k$|-?V@s$ zgv^#U+Y{{_!#BR0#w}m+z%(UwF04~bO7wd_kWU={+hgP1s)1_%=M&2jLfU-*3Ap9l zHW@YmBdWuxmR|j>HTkF?ZpPUKpp`x@1+op4w1Qb*d|4QCO8=_G`>W>pDu{JM)t*Cs zUv;fnG)muRR&E+7)SChElkHLyEpQPN+-J@p;(fLI0(cEp>5`l`cTmuz0LpCmoH?92 z&de!BKE+Alm!=yc)Lozd1LO6`_^bLE7Gd#lD??ZTa(Um@`3L0Qn<<|0c1y*htG(0g zAOq7?-hPTv&%tg0*pCnXUM?mQvFTvo5_y;1wtDGWQmO{g?*LP;vyLScKtb@LeT+OR zu3`g}8EJS@VBB7NlXH(}q)}lte73J&WFm?Rp zu<-08<4YdJ3LsvOzv^>&8WN){J01cpFR+_O2$@B;NBK1rCM9aDn#95f-X4S=gj@Ll zz%UqKi&P#9OF{g~{rxKl=y~@gpI^SCY&?=20Qj^ae4zPvynkldyruJc&oF9j7RbAN zQ>u-XKR6hK-0P9t;GgDQcR3wNpB4X2j709CcpZngP8Ed^=|GdgU~`h$d_E}SK1Q-L z(!mFRjmnYm%kx3mO~PTw8z|_JGg9%=t5#PG(f0l>>=+v8kr^HB-G$N<+Ur8XTBonx z9NyLU;4eifdvwfw1P65x#-L!X5yaSYWS@62ooW*Rd&&QoYwSva*8^kwljBCE5lblV zEt9;4^V<(M-Yd^S8%qC`aX#J0-1(Yk;)gfj*LeXtpDN(POUCP zQ5jrAnKo+UyAe22-5V{Ei1Atu3MwrG9*K`b-Du%7v6-c@@UC1os(+x>ey*2b*>B)-MqeQGPxm zgC^iq&;r*MN6pr1_DrPh~81JybM(D=mtJ)9T?_Iu)b~9lW3pGSjXWB~s(wWiLJzK^6=I>>FsK-y| zw?WgVI~iMjk1Je?s6J>NS&}On4kg?Q%34R-a~SHa=AnauiN#vqiS!;*#l_oAWW}R2 zUhm$iY41Xxx3ouZ#Rs0pr9scLx7nfWHzv{ozo;v20!XfE@0~HyNg4|-D&LPjOz}+V z@TYA4v30Q7jWP~8yTJT!ayztcR~IXq(5_P6=g&$XYt!4x#QOGgM3XR$#+G+ z)Ccq2<2F29SBl#7T>z5j<36dbyx74YXCb3I<0D){ohq=Cy1l!k;g*YhsMP#=?`;2{ zr7Q;6y78@BiuI!Mcnci^+|Yuy5;Uo4x5-%ex`5-wOF*1JO^Bt@SpD%%59K(R4$NR zz9*a}CPWy|-uoO>%Kf*MKjyuAXRuz)BD|QtDsTg`Apt%N006Ep($?eCr@qbS_R}Zn z=I0OO?*G?4IzRh70KqMQ;_k1K9}0Zm5c6S_pcQ=?B<>_sB)KFwuB5IPLJ&e#;jUrd zL-#}XuboI$`iZ=M6-968t`Ojzc^39kn5&S5X4tb>zTrp%amRSg)otn=^ZomFY`+VrM%jq!_Uth&V7FJ@(nJT#;IJt_Mg6)y{HA{ zll&K8Gm%@3tH_OXuQ#PW-gRr~Wy#Y^oxCj3n#_c|q73&;v9IT|3xQ$0XE2sW(rcJg zHgb2{kiC?&*PRdQtba0f5NqmKuGIbe_KlK=^oBerd)`)f? z<5md#FA-X4V>a;WyX@R8@VHJr`MLl)rQXUW^43DupWwUZuXRu5TW#5VFdv_0pNO5UCQI4E&~yYWUhki=j~q_3PRm zP4zF;kQLsM2!YdGL9?I6uUD47Dc-X|mLAb}jZ31p;jMRZ$=gG^6R78Hj_5+m3J3{YRE2XwHCAob&aW`}{*5wmJuYU$XLPO=FeH(=#@E zmFSVTvJF1t$>%>@?GZ%qEm&}0VAd~*Z1%UWm7`k`si`jHOZnhPc3XwU>1)!l0)k#dNVF0^X-b3ohOQOW~wJUbZojl=d3pYFoTA_ z=|_!6UF1!puXIc#@Bgx(`)B7A{M*6bAw~OwZOA%HC(Ot>j64z8tQ=yaEV`X zzopvrW`HhyR-5~*<1*t=a-{&Rj>4yhOF}$_e`+F zMk&sMtaeP5<~zqrw;TrJ|La#fp~rl&YOX2nPE56wkJsUFk-~ihg?q~QtxP+AoV?P1 z$bZpY25q7n(^1lQ^^rQcY7{TrI1o)wmx?E7jOV?0-~Ha6XLB*EDlC2wT-U&c)c(C= z%zVGss6q=ot~Wc0LGbNAy8cQU=J-hZa(}-A057C~Y=9}8cl0O9&_{5~Ckp6;XdI02 zV|AO`Cpb@ieCjjl`O4ycWV?GRc0CsKJk1}*(M#;_DW9=LUQl}=NU_O*Z0thcGYLE$47ISeYw~mOtM&s&c8)#yPq368|Ctk$}mL^bZG*K;TVV$Eo`;Q<_L8| zfkm>_TG~YEEL(;Ayr)gq!QVFtUZN)itJis6^L!WodpK#=qk_(&KNJ(#85~+B+%M_u zz&c-;rmAV>keI0P^r_;)^)VEB6W8i{aXk36+8r0(JL}${{$82#bi@XWRF$e8 z_1kN@dh`{V()BAL-=^J6GRlm8fU&T0HIzuJs2aN^Wpp{V?8%9ll`J$YDF?ssr}10q z+vu?C$8m62pnePvvIt3>Ua>6v!v-*)5Y&=2 z^|t0BKfjcc3rW(&v_#6Snfbc}D0i;{kiChx-fya;Xu)K)PIgU@Qx*>qAvo+DnS@>J zkBK3_D-;l~*c+M47eDmSDHKdHM<~oe!E$qw0%s&a$Nhg$Y9%#!u@}qO7kk}LA>tDP z?N8v~j21X|iy$E)&-Utq_?bsV>q?yzot0qFy;C3StFDawAZLuWmfMSi@3kx&I^Byl zl!=v0XxwmF)?{{aCQRyPM{B`1!i=u$u>*Djlk3`Z`2Vv0{idCujg4c)*xMNV7VR&V zRfiPYS6sFY8uF<8s~GWULH#?Sol@Qr-R(zW+S{pxsS0kIrnho-HZnYYQjV~c1LbD? z*Rp|0myV)-0~lQIQm*E$KiynCGlIH#>Yzcj_k!;-rMtrw***q^nWQ|1u_=x znLw0K(|T~Oot}LQVEq$3>wgWkqq2V3+lyXS9`VWM5yAhbbXlkm7>U6L&HchE!sU0I zmyT4V3@0hWQ4dkVyq0pdw*Mj-Irp#SRhpfiRatO&ngZp`OclDKeQ-dCsJaF5bRVpY z_+5Xr@hJY7w{zh%C*pT4Tk~Biub)^<-EEvxG@KQnqaHope&H=fn@3$caMI?6{TOz# zU@`{7(KN3keVK>V>WhMuzVNKAH;ieAoZOU21`}T(9ZKS@53xJ0+oCW@JHUXqV_VE4>G_tjn12UlVx|H_jdHo!*=06_oruKWBHZ2AEP`V>yyK53Fe;$_L63yYesP{7ZisiTWfT!n3)8dvFvIN}nJ*aQ#RsC9d0T$S5Zz7Vc!BF1=z>VtL+!@hI}{y@!kQv@Cjy0$gg z7B}w8euGuk8*b5>fs+lz8saA)yASw!(Z7na%5_gc-S`tmO2}M@aFDpnXTw=%G+B~e zo)VK>o_dmGu|=~Bts0Y#dGJlin@jx(2*@IYV9;}3!pbx~T;FaoCpD1DT;p}UA6(3G z2&DE|9Tn6T2U(vkj;Gq!KPTVhH--HRI!AcCrVye#&wA||0$OaQA9HWNeKiEBN9~xI zaGK?{#bpg)u0)+GS~Y0JZ;A(}QRW_V>&%$GZ|gDR?Aqa^TDfWDLq`_DM+>r?$k0=k z!hO?r#UPaCkwVU*EfGMp{g+t{;tIxiaLFM+{+jb(lxL{MLf*5TvrTy0V5HxK?LqYJ0T{FQzr*lX~p?MUZC*NL+2&fq7n2tk|29Bx+}nS}WE zvSC#m6{DB+(|P4VQWSIG>Jog%{tz($sZdz!_ty}JW5hM2E(MiE-Pxv1j<|mLdmx~;|nk0(W_Zg(Yx~l=|~;guljuT zy=Y$s0fSZ{pM1F_0kZT~hHH7+ibK z0LcE;vUfQ+BXDzQO^h1_nnvC~vT>-(5N`dyMPNh2#}x)56L?r(wH;|AA(_vTlqV?* z|7ITY(4hJnrNai3`NE3OGS_wCDJygn4aF%noF%>PK3*XG2341EBJ;H9talY}Gxt9l zopm^itJ7b%Fy%3d%@%kVZA;}f9~MDdzHzk{FKUU^(pX|WZEdh;{=5^YONo2kr>z*E z?yRbx&&pnsIgRd-F7Uie-vNrSBA-3u%h(VPzc?tQ%lou%Bz z2k?0vf_~q~B=p!s!Wy-xlWW0FI0?j9-q$kO{-f@yrgp#Lru@7npBNI+Z`j;8O!^Pv zpzrfZiN_?V;jW-Y-txl1i9WX$TD51jD06K!5!+_s(Pu~~e+X|YG*vbZ94qC!XIP)9 zp6flSx}FA6j!w;a^j|GiXNj%5m>>D#xfa!~da7i<6yGeZ@?fr0HAV{>L%HSXL|6jr zyJdeGK3)1sM7O<_C-MC*wMWW)?5Oj&f75|$q|^mG)G0`!yJ@kMYa!X<&V<}aP>8V* z&(1bG^|+^U`y_lM@rByO>{dMdBgIbM2ph#ycR>_&V=iEH#croCg{Ita6UT8uT06g$ z{?#te^o`D$m1e3X09_8n0@AIUL8{AoI#d8|$b$()RA}1imT`;FfB0NPDQ7@v!|I(u zav8>Gzz~BUA)Fpqyf|wZBL|Ia9Ot^+#uQ!h5TYC+ zk5$|t_$NQ=5twJ%mPGDQ7I8uk+Cf4Yq^M+3$3m`RFS1kS_vy}L1yQJAvQP<>-3VID z6|d0;GklPB)C|wT0wMlQw2g4Vz`~sB*pNin7UM11BM2=+moC^81w}ep4*BAOd$SevG zos8lioaq~bNWm-5EZ1EZI6UiGIc~aTToAujY9(mu5Y2Gc)PC z96gONFL9CX8*e%>`j>h4sZR!Vne|&UcYzsvw5x7@cYX-_oXDIGV^7zmq_7KSUoV;v z$`QE19bMBagQM`WSV%VS1-5iZmZ5Iq^-?Wi9^phS!a=bbF&5d_vrQ__}`h**4hrczEf5e3h0a zfwyKuPR>FZe}y^NzU@}*F8LWMiZ=M82Mh%5#|`LN^U>cBWQNH`YGmd}K8?n5heH@Y z<_t;*hdQ|U|EE2}+*fPVbo2S|X&5Ez3-maRi^?$DkS0H(jH47sNJhaOfc1A<4gqf8 zRSg3Se7F&L=`^dt==(OuoD$TXnR(ZffZSv+a5(feqc9o!6O2{N>_kw!1T=S*g+`8> zu;Kb+O*GC8HL4wNA7pa^04t+@zQ31a`Qaxn3QgkD(K>3jR%c=E|BNokJll1NoHcPy zf?aA3Ih_%azHhF3@Wny?yL=Ie5nf(h?LKAK&=b3PDXPQi>7RtW1fFEMnym>6t9iQy z(N)~Ea|wDsBp>(h^ppb~!rtU4RsKU?;GA^#r6PO>Douq4PQ@X(n zbAU^hS5M0dUL4on%d8@$Jgf2OVS8$hvX!TyQ~*>1y%`5?gO5b*T&%&nIGEqG$M7b2 z)XUyAfIK%H_)Mx7@@(9?Jb^k$Y==CDft}=U-$e3m#fZ|!7m9{983Xf`~+)lT|s32QvDl#B=XEW&*kxEJhy?b z_Kb?e*VHzikuA@gglUC!1sr7eGkJ3C_Rx&))bVP2~ zRqtT@jFMW;|InV$#7ES$yIE_=mr6sY@(XPiBe!xt$b3us$Ki1j2E5I>4nTwlKXZ3x za|$z55i`7Bg#zEmU25G9C(jv=s;|nl90HA~w152U@@RK}KLr8}*j#1!bdhSd!OBBPPmdqd zaCmczTU1Zi`K4mH=rK4yk6ic%`nq@0HRM^c*yVahkBZ+D(Ll%Llh-q}YZ|qE+1myx z>i595U-25t(MQnb0_C-en@B`wnON>JZ2xp;K!h8LcQ*61n=Y3$uGS)Z;4EcG6Sf&a zFSEe>65Cs3yt%U>`YWDy=MIr-hY#lt|6ge>(|zP0pIVo?_)0GTat0&vwAG8of5+GHW4< z&@km!&5?#DtQzbmLH>6HB9g@jn6tB7&ynf_StjPR$xvJQQd`dRwBqVEWen^_FulQ1gmYHDJ}RNx+NVx_I2-wB&*T!Kdz>Ro zj|1XVP&*>h2t!gHVcG+yLV&w^*N^xN0!fH-%QOI=+=NJ8%j%dbprIOO<}wJru17GSl>8w|!WAfYCvn zxpTY!8%A-xoY+qlv9lzf!pCOb!$inPXHP--Z5L-QwAQ+KA5?^B-^ASxydq;qzKIwJP;4UIcp$~SG zK{}K(hOs7!^kFHtHSxFmDEMaZMIHabL^vN^2*oSzHo2Z#VnNvc>FxZlTxR`2XI48? zlbQ;urW3&$6PecoOu*l9UZ$wYI)9h64_|=k9&hBs-1k4^{x*B2D<9#UTvkt2Sfj$Z z+<-PaZ2r#9CwK6y&ebZHp5K@^x<-Q*ryh$0U4K5sfLQ(0=NVqPaL`MyvL@1FT0jVn zzdMu5jd-v6ph$hwbJAZjvsWT#?LP-;Z6U1|dur+tmxs7%b^+T?EZf{fm;sK5_v>mu zJI9hGq3X?ewenka_jPDLI42=?U#oVVAotE#R)?PJp4^pZ-E!N`MRB|nQ7_cH2&~k&hH-5S@#H~|rggF}FDE)vq=Gj&bH$#eI9e2}2um`je zhjO*&*LhW!)7^W=L$YVJKi^Fc^RyM1jXfRV!qAHs68KjTo{Qtxa~T;*5twyVD6$NG8mQcc=w|& z<2u=>)}}!ABQRbM*Ojg1$E3DMk!Ly^_27wLbMD3)K3#E5)~W6}m+^ssy(x41#uQMQ zz+Kf=epQ4+NkjB#Q}V~FGY+(iNFmAjuC`0G_EM;Gkk{~V(ao!8>w00V|LQrqdA7yEz781wY`xpe)XPL>pjkkU; zR@2oWyG{dfew?Bdp>CpaiT8YmYRv)-=17dw-!#&eJEO)AuYbEJ$s-^LYk~NwA0KBo z!)mu~Oo_P7L*09O=?Pb9l=Rul%@{&s`siZ4vbv@FZSZ8DLxvHol&i3uOmSdN>m7rw zs^%Mp7wF>U@}nqYjX|4FSmF$f%d58M#~+XE3N zYt3}bvWRFyD8S`rdYkLZr!D*yS;{w38mgtqvrf-U3;KgA&v@6E`LzJ&}jetv#*?%DFjRxIlCn)Ns}vYp$|FrZ9j zI0=lPY0jCbSg#)1^AJS8TGLOZCv0(?zI`2=-!|=XqUN}3rL~s*=lwGEyaRlH?rH-5Fn)D`imrAt^gpj} zTHc)0!hH0SK!zI`<`)Z9Px@_lGd7LtH77<{gZ;TtM{fQnfCgsz?G5E@8>NbVc+z;Q z`Tl9F^~Na3gk4x~B;6sDqn8ZdC?azyV_xo~z3S$tFGiDGmGMOd{U^?0ci%bR=ttR! z&3Qy$^yQrw7s*v19K9I5@mw(F?oW{{rB%|jALffr8dLz6%gj#`0N@G|pl^}&Npg2= zw!Ob|aR69~1Y4>AtA70;iGTtKB6tG<8*mXl=muLIJ|wN|ZoF!g*l_iDHvl(e_zf`j zY(62dsSjjkCtR10MPafZv_g(T1Ks8CpbK?hg&)keoOWJ2>|1<&)4c`*czsOWPTh%v z8~wk#;d^KL$cHoov4v=um02>FTUfxxA8|k6BhgWZt)T=(L693HGo=Uj2U1dYMeJmq z8x{62mJYuw2tK9}bvu>AX&8zUETiT-82-M)Wg!(BbzmegwpqU;k+?ld*v!X&L||v# zH8x;pW|%$O-xw&$`klIXOZ+=^o*8*IRitg1%BzZ925Mv(D=sWSQ9PI!?(2Sx)}?M$S8wBTM|;hxLHFTNBkYOiRIkL=*z@S7Kcq z!0SlpaR2p2g9=m_T85v~Wq4;*^ z(0Q3cgTwwHt*Z0$V%OEPTK8o<)fDM?CruU54rI$gqx9`q)%xe%bEy5=%rw zR-xtgIR<($#Dhg~c}lm-^Pz}8JhI>PIWWO&lYg9$^-`_LPHb_^b$Q&b-N6u8NK~sQ*PTe+KB&JL!Mc%Ta8$4y0u6Ys!mQeZX@0JMZvYEjJOTl9X}! z3uylzO>Y?%N7rAkC~YSpR*@}9VDt@WLG&;;&zd`=WJ{^V3OxmB%av7@iec4c-xosU!anJtd`^`P%Y zhmZywXUqquP9iv#xtMLy(k3g3rpi=##}!mkr}hHl`RvvDqX%1dmW0ezdPI(m-@rN$lSU2zbe9~$pQwN@!3h3fV^o0G6rW6q z6r34A975GY0OUQT&a%&l=ZkqAUCG8t!|g-;n-!kfF@yHlhw6O}VlIcnc@ugD2j^pl zvr34gvl{|nNE(8;<$F3#Kac`y~DJBLwmmnoelW2|b9Pg_DzNaX`@Y5>pK%4_-E5Pr;Tk<^4B>U*NkjY3U0bOhM>lokUl1cd{~rYIPDaF5e3khNIVL za=tR-u3U))mXHjtpO=I5E1@~yIVC74>Zf93Ap!BJ++6>h&m6J~x?Rs&Oj>z1X|1#y zOZCFaSNum>H)ECQF-ok{x7u0cHgr8RSi>q9UUb0QA7o|rAe%flV%vJF*P|u1s9xe~ z?q$h;*&+R|ewV*PWyD~GH>0qeZz(#=5Z3>oxj0-o($%-z&Z_wQ%<=njxgs(3joeE6 zsM|w#)8v?o8rQS~=#Fuw|LN018(!FC*S5flQ&%*jf9emU5XqQ(8=m5?ic7DYHOV(t0FHNjZEemV)V@ zYXL?=EEnmbbmob2MH5fH#dgdml?pZAx;m8?grlbdIHt7M9YOEaSC8y;U@X6u8u6)T zJP?1?zv~%2R{ixYJDT-Bt(bE9V6(zuK@sb&?&<~6Yudj>u&^PuxpFrh7Qs2haUcOB zTKb8RGD$I|Wm!?YY-D}bh0*P?Z@q5B{(Rpf9PnUdCK%jOdXbS6??Mknm28K#w#q)# z8%6k(yw(Y)+th6l#Bb#rIyS~nn{Z&0(!k!wj|urliOrIfU;K=BT4~?}g5O<-K9w?h zg_5ZwvZs8?9&D-eNN9)DtmQ^-}23tzumc#4^DGFT-dLm!|Wt+TQQMHUPwYLPIT0}7kyRVPy@fq zgqh|g{7i~tRy^dqGew60*mmLF(i)FI??d40aZ=k12H8GRi2cQ^Z>6ivMKKn_sI*v; z*>34xip!`RAsp7VP54wo#|G!rHdOZA>&LE*G`!k*l|@A3A)e%1KDia7VH3s*ERgS4 zH|1=JlwLJ3Tx#CldcMv7RQBsT+n0)gAzT)O&_}y|lfV?fr+nJc7v;)Sj`wa3^9#Yi zrl`m4MFWd3>XG*{bwEp_zw4RbxL;zweXB!evpJuf2A9WyNv7){npja+dzQOie9uTi|+!Lo`%v7mm!&-9!#B%tj%J}&&g*^#Ly zgKnY$jLh^ko&O>|S}0T6VsgyWF7p)GYXgg`Z|kePr&29JNdBDoY>!LzQXtW8a12j2 z2obdYS!Dxef2sb?z42*Yr&n9*5G2yVM$}{YHO2;9??+2mqw*$*5z@uyfMFZMyoJ2* zNL_vr+!aL=$PrzwvYYydT33d>Nw;;NombFHI&rx4=Qxt;m)gYodNy%AQa?0kKL$+5 zR18UzJ5Fqb9<++Rzg5dI#P+zb0Ez z2g|Het%&ldtiv30qI~UKka^D&jBRkd>%mk>2)vC;u=DfT`ugCU7lyj_P}JqRTF5at z5@DVXh^L^L*^-=jTI~kPKEUbGN`5PZbUb=c=H%p!sRJzw$q!%K#bWC8$`Frg9 zt4Ut5$A^7WoP`jkaQW8XbKVYu_p+u}SeY8#4gr5~O1xs%RYlYEyU>2(eW$(p7hLiY z&;w3~1MJWM0DKexaX?D(yYdG(^drzK5bS^oc!s#OC;(ePikYu5lbM+@Tj4=bxfCL~ zai$b32?MJ`iL0J(L6BUp`xI{1zw;;`Sr8rb(WL zxyvh5lqwpJrg;7RaZV{)MN(b@#8;a?49PV*$9U%ZJeR>ky-75sBR9PpkzQ)+WaLn( zu4`jvCA~g8iXv+TedW9JE~}8zOS9!>nIeH_bydPlD)0T$u59SM5&J#A>*CD6hoqsi za?rw&q@}?Bk&72i-d$gD|L2dY$Jw8H{szC-dc1tnMcUz;18)553h9J?{Pm@*SAHQw9b$pV_XfFa<)?qa{9yFVY#Vp{-&OYX!D{j3AS~oOfsrd`lcH@Eh~n9hpyFziqk1JaNeBLpPU~s5nE3 z?>5AaQ0zCS?f8PPC=}4SWh)g`eEMd{=eK{}>UL3IJoJ7=dhw7H69+eC)XL?+c`e&> zO~R$;DDvk$Qat5e)z~Fqa@tQsua1^V3(qQ=L{HA;-p2d%cnDX!G&maR`9x2`u z$69kdRZ-kj3~jni#*E+QD6U6e501_?uFT46Mqp4ip)hWu5o5szn?XtB!O)M(ahI-% zmV@RlzHnH(gf9!#P42tqWb(T*T`j`>bcTT+0a-^Gr{*%PNxha2&GuVX4_FwhmIP|W(_nv)k+D+1g+>-5-heAK6RA9fJyS)yvsCxsws zcUY2utv_bF(fcYtjC?c|2h|UHHP#0G^qz1wCykW500GE(29ZrEtW#U0rZFtu;5($P9Ku2(J7XP8^-%Qm`P9Ef9m5};P` z@@h-HNl+RsXl>QmaeuAxmoz>@U!faYV@-49F@40kQZgs76WNKoyA#JVcC~fffQ!i%>#;N$9dZ2nV2KFA-b95AezxO@NK3>3S_D@x^ zdG%tZYLUQ^H(@UMfM2OH!pMVM0bPQn`GAKK2 zEA!uo+pM90KC$_g&p`O%b$q50EFoD@PMWspS~@J|s{@h7+zEc&d1n)srDD7W8}PCl z%6o1R3a5&Tl|Q_!ETbwxii1Do;pz_FkbRiaR@p zGH`>(z@F#;05c*WsEtS-3T|chHL#-&yyH#QiMJvG&X-aRy7&l??eHDjvRoGJCwz68 z3EiM<82I0Nw531p?(d1BaGpUg72 zw{VQYCsaiy&wMGvX4gplgmX98&oh*=ebEXIJmvGs^JV1eQEH9nbM$vGcdMn7*v&6K zTzas;<`!i6bwEBP`3w$2fD4J2#CQ)R7`grut+p>^Z-?_?zJDR>a|%~^!Qp~dl04qX z_DT9!kM(6f_KV@!_RIoP&u{Y5g#$;D{vsJ}1!GcBtAtf+`MJfOA&DX+l!tNW&U`02 zSAmT;o$bbB+BJ@H}gh`Bl^Q`iqQ>mab}{ z;aPden%4H25|3!8`&GzfTeNy?OnZGx9=y*W8HT_+n=4B}gTp0xzMBNw~6`0q?SSY=})A8no@Kx5-p#)WJ>_d-9g8 zjM7>@3#%N!+(u^kt58~2p%H4jF^xl3D%05Dp);q-oTbIP+poLQnI(=*BO8dHqm+;+ zPBL>EfWr69dOZ0qM5Z`Fsl2)R-l)Z4NVwubP;_r_BmfkGF!HS|a#{27oQ&1>_r8*U ze3koGzCoL{ZXJHrO4D9o?7`v_+|{y|nw0xG)+T z?L4NiUyY!6x$4{D?E}{PnwLcFrc`Q380W7ebj^#f{lDwyQdfDj>oNlKR}EdAyGcBd zJafK~hR;LbJ*ZsDd{0rc+Bp(J8d6kbN8UJ}ZR^C<+ppBUiMQv`Z|Ydf`#gE1Slc}M zwG*`tVDnt|9te^(m?0jSDZWapb*E^n$ihVXX2A8vBVV)O5~;lcU~I zziv+|R0p~Ve^+z>nQ;hkuw$VDxZ{3Bli$Rs^=-t$WVk=BOb&wN#g>6DQ84W|&`&gy@ZWs$+QA-CnuxZ6qi2zV z$KqN?gPBgopdsDj7^KA;LS-zaggJUfC&%q%H{>av9Wt$Zd3}=?k5{JcE}$h2lT2At zS*!@To9$^D^?J5yY$Y)@>eC@`JK)2j=UH*OjY1Q}L6{;`uwecTc!>F4vQ<%TwDKP9 zRbtphm3qjMpX7&4`)ScgnLlvi3_8NMJt`$LCD5&bR6W0amW7lq)lo5hsIZYIb_8oa zU=rxPp}0iDSC6)Vo_664M|ajyqxC-X>eaM1CD=7e>jeBCe7HjAkHkc^)UYbhZ^>es ztFJJ9zbsZ3M%Wm(RRmtjeLTbKgDh;<>e~EfyW;8|T%O6EJEZr3dMLikhi2^<#r>u- zZbhvzm*(>rPltR|^9jw}(mg@^uBE#L(tWnOvH^qFOLVR1r zBM;>ip0D?XsNoJ9N&od(?{<8luUVj;(E+jV2-|?SfP!nX*I;@}HCUZDIQ+6qq~Xl- z>3P`Pf+VcYFwP@WLm93~td#y`zdMSw)m1jZ;d&X7d7p$o1p9)RE-qA2bua?&5Wpi0 z23w@0H{vMA@9$a20JUOi*9lDM*Q4|^s)OpyhH4WM?+yWB^dSXg6jBP0^%J(7?b9#& zGb~$f?Ya&S18E!^pef@}UhtQfZ6IdL4Nmcj&9~)u6M#*5}XB2tQ@u)Ln4$ z9auV5-0yxkk~*@=w+cLF->DF11npoo;sOLHK(`JOf%TmNZFg^!(f_PWkI`hLKxLKQ z*3x}52##MCk3LtX{9)Ozp*q0fmt_7p?Qv2PtUF5HXtbvC;>q+-JIprIaARN3J;ozS za>)3B@W;okYh*jFSadsV7&AJ=5u`BxU**j%eec>912^m0MdqHtW)E zHP0ZjH>D5m7k9Y@B~fz$k6ve6Fy52^_I@SmFdXNOf)X)V2?J0W6m#2&>w!BIwsd@k zi^wlH`V-TIa$FA1h43xRb*}$r+?Bb%JIf4omCJ*!&rt+VpycNh7Pp-?Ymm9 zuWP=&sMf@u98&|C1*Y@uE!nQf2r|Bzr*XA{(YLni7rUV0Xi43VY3|UmtBg}_4?)58 z)ijc_XbaXJg~TPvQE!~=>leoyv!!lr!VskHEr+nC@3B}~`Qiy#KFogxNeC!~u3f)a zN-LpZ(P5A!Wym|BzI=qaI!r3qbn=I4vEWg$FYK(lDS*^n)Q@A5{^qZTZh>?#nmxBb zliu_Jzap*>IchP)m3Dd|9rT#vwsx`YnX}U4h$ja*{Udmv+0SU#K=m0HUz!nXV}XuS zV3cepdQwfyRbO;=-uuUGyY2JJuE1)PeMX`h4z#}9gt|(Jl!GihWbMfDFG_4b(XSqk z3q6qEj8@jc{z7i_muW_Tu~xXIDu8`|FbDS!QR@T`)w2lWox$;EKBl3wr`Z_C0FUWg zVS`oF-|eoKafMRv46zfmK{@H*dcI8a3r3HV&O?f8WP56(HDOY%^m_(=-+;|o+9cp| z5ny{O%Rf^6g#KozE0916Te+e`c_lDsnxLIzZ1DHaPI;uP6dAkYmD|$Xacrr>NzaNN zX&%)%wnNC>U2lMOKhxYT0kdN**2Proe3|}_W=jdp(2Rt9avmt&aVGZ(U(mYL{-aoJ zHSwGl{wk3|tr!bOV0 zUlx*25vTzVJu23wWvgb+8c7q8ZksyIs)@-R(ySS-uj+v<!HLE>5sy;*$=ziz4FAFRaW^=rh0x8wN~2hr&G?+7fp96fgg@};~vvs7XTor zNevqSZ~~l=V=m-BU)?lZ8{Dv5zuaVA2kr$o-KotI&-7;b8^3o^bTW5Zd42ZM^-}Pn z_L6Gd!^g)reiy4vBm16?Q3->%1b_vCgPXuwvrMyn?Lo$IVzq{3-w`k?p%9nAFp%~O z1-`|h572#U5H(t{T6FU7FqoAPLD~;jaXdK$AYup)RNrfWF^PCBJo$GpM&^sO2x(a|+DTKI$2@8ZG?bdh}$$zX8>9I|^d_)qN5I3^$ zab|4yK*Min&s%wV&MlC#lt8n!xX-aIzxCxtK@95F8(4M<%zY6-6;}Eni{cU@e)ki} z+pezMuqAkP<7t~Il5el8l%6OA!NKmV4Y7*{K`mk*d1N|2>(?J)o%nq9Hg2$ipz83J zp&WAIe|54_-uw{@x?>6x5JTIwlj<*SQ*=uXc&f(Zli^Ka9*;y-rW`WO(LKi17&#He zn_~(i5R0uc9cX_$Gv5f_Tb7085H64ef9ZBumIo*CtlvZ5H-!6sSQD z4pdB&3>Nz-BAXG#q!`eI)?pySmq%5BGM3?XJD;ICE0_m0A=u}3$o2qWmU_j+%dZaU zT^M%G7KBPj4sGiinoY~xGsUtO*M!MN<3r{(FreV?)3BvbWoD9HTN>m~inc|Ie?!M^Tmr*V=?T}@1wOcIrMi(&{4h<6>YQh+oARC@^N zpquH?sI^9JaI^J{>h;n6{m-)zUo|Ic=X;tYi`2W~_6IdA=IRjphLKf(qn{maYk~sH zjF?N6T3d$Sko({E%Uhs!NtHg7VFoeKR8}5yXM!~xiZb@zB=lYJahL?lskVRaHZv=($T=C^IVid^*38NwF4&; z>OFVM1VME$R?)}VJoZ&BAQJi!M$GAH?#SLpkjl;I!2%x}q$~vR$4f;B513#ma z`PT;*6&HsKcY$BaGd`o+6w9iv5VI)g8CN_g$3Vml(}X$qg(r1OCNC)eyM(vv-^o~u zcH5FOR&MgMWxu|T4vNp11&(-9zGB0dT~H#-iKoY|6L&s06tc_eHTXnd`|r&i!|!hq zkdV)`u~uRAg8@&FL-Dknxjj%|y-aU~qr*I>U)|vRKDWQ)D^J%-k(#TIWp#gOEiR9e zQwk3ugQy`LE|eKLNxv)P@<#>BoGG%87a-)(BwOyT*L*=J;g84d4Y;ZHR@;VAK+2(A!2{e6*Kbrx*13k==?jcqpLe{AUy|Ft3&TKF5G zoR!mN#?{7gC;R+~?e~OSLSei%xOv4_l_*>N8o#H7u7~5}1PaXsrIF~lPVEtf&xq%j z@Xy~tz^+p{o4*eF)+UANqX54Pdl*$lr z_kk3!U|a4}cpGa6ozTU2dEyi`DZs63I8Yu!IFeuj`x>@VMkJ0x6%@%G>*w8fa>5b}-~h zNo>>0QG@kwN&fT1l%8WVi@4Av3o4DsS$E6)fSw!Pbqixl&fNf&`1R#4S zQGnpa9CPfNSNZc)xr}C@S00$1mhxHf9U~h~RLdswUz8*npf}<_!*v?WJPp0^G$UJp zpx{@qB%fvPOF3Q`XF7D#PZG^c&opGtMC2Hio6#0pk5JpPWkWS*b{=qHtqMK}cL)#H7iRs(5a+cU1 z3@2S@#;`DHa1a92AOY$B5d+3x0GO}|Bg1SD(*n$ayJlgr+qn`LqXb~V>eeHmJ zu;=oc*bAO?eA4pqrr47L=(d-n zg?t}A=ny&UvK_G;&^p0f5rqYfx-0La+ z9g}Wa)x}~9@)0l=xTQR_np(D-kOFt5lYHS9me3D`RhH=xlX-_af67w)*Whp0L^#wysa+KlmM@%K{I~r6-&m$clO8Thk*`^=N zMb&gbHl~8PAB?X!ZIkKISjBHzNs-wn^W~*(U)pHYziUpha=kCFkG3F;W2`ss0rKMj zFeP&c%XZ$z;;$n{G<<>$IOlcQbfin&VwM4>vDVsP z)_%g=aY-_sWomdj9gB+&sB33OgSdJ|Wedz5J&=2_MpYz4GUdqGvhU7N*2AMb*2fo=gP>Bn_UhPy= z1+mD3v_z<`&jT9ah_1eV-`93^x9zs4=Sqk>+$+Hpdq%?k=@>RF%yK7&MmkW-(tj5H zX0lF8gM4Tp_N|B_5PZZwSiCP|I8S%BeFq7(Zi$ByY*3<^*4rIX!=^3G+{}SEHwOpPA9!8X z9i^TD-(AKPi56Jy$6bB*>@ffdmJ5rm_24dfFwQ|Cb(I+aipa}la_E0DlB7|$TP=Hc zheye~D0$jxX}NHZkNy$ERhacML^v&AHqd&(M2V&DkM*6U4 ze|n4@5Rvra!Vx1*FMyO9q?dR{P<{a=gmbW`JF$^DAYCPK`$KS$it?1jUpdX8}9XA&{TEypdkaHl-Z;6-*Jb3lE%RDeH z06-6E)&vg#xCEiMgWtuTkBl%z5PkU&{=@Jmo)Ex~WRTDnutf{LuiNjwx|zvji5#f- z5HzTTYCxWv0`)rVL@o9%!F_Z2+Ytt9VTI(ngf*#S*hh5|2jfEMalVf_I*d_+)hbT= zJI9dRdZv0!>HEjY`GfMQ`B7GpmvH;_6-A&X4|>yuUv*KqpHGAm{Q$*khIAsopYXUq3)A8osgE{W(exX~jdwf{D9s1)ZNsy^( zHI#WlMsZc)Z(DojJ>eE&w=goufOq*j@2hCVt%}3?>Q~Xw=k8E6OF7HEmQN4DRvk3H zRKJ{ZT2-|mYBcdY6>b4Nx>=f?&GR0N1VWllFKbD^#7Rb%wSYrcBlzaNX0H#Sofp{7 zS4!ao3iMlcIQ3eriWeY@E#C>Z{+d}*pc1ba+jC-O+40{g%zYU5t&V-&LoW`JN-nZ- z<`@M(Xj1!nbquzDS-!9@PXPgBl$X_}H}8u`g{pJvn<2jc|8TTinCn2`)~}c+4LCW7 z^y1E0#RTi$vCjfe>)X68=I)~q&@;-QsmJMB_=Fj3EF&)tj+U67=cT;4Z{ zfh9($){ycr6-_z9Q@+nvOww$iUOTPc=x^gBmDtKJ@!YiJ){o9{2(m+Nq(?i6^0mS4 zDRv|!)-r&$m2^-edwED>fAXuqU$%`~RRU2%L7K4cJqFtza#y0EH(h3hr9#!O6{Z8l zAvb?Oi{{>pjGg%dS#OTdFb(`E93xi;N%0A@M1L)~KL1K_;$2zhaZJs+e}{0lQX=el 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 z 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 z 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

jQK&Kwz~B`Qh8a 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 z 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 +gRPC Port: `10001`
+Rest Port: `8081`
+Macaroon: Check polar
+TLS Cert: Check polar + +### Bob +IP: `192.169.69.1`
+gRPC Port: `10002`
+Rest Port: `8082`
+Macaroon: Check polar
+TLS Cert: Check polar + +### Carol +IP: `192.169.69.1`
+gRPC Port: `10003`
+Rest Port: `8083`
+Macaroon: Check polar
+TLS Cert: Check polar + + + +## How does this work? +The dev nodes include a modified `Docker lnd startup command` to add the IP `192.168.69.1` to the +ssl cert in order to be accessed via grpc + +``` + lnd + --noseedbackup + --trickledelay=5000 + --alias={{name}} + --externalip=192.168.69.1 + --tlsextradomain={{name}} + --tlsextradomain={{containerName}} + --tlsextraip=192.168.69.1 + --listen=0.0.0.0:9735 + --rpclisten=0.0.0.0:10009 + --restlisten=0.0.0.0:8080 + --bitcoin.active + --bitcoin.regtest + --bitcoin.node=bitcoind + --bitcoind.rpchost={{backendName}} + --bitcoind.rpcuser={{rpcUser}} + --bitcoind.rpcpass={{rpcPass}} + --bitcoind.zmqpubrawblock=tcp://{{backendName}}:28334 + --bitcoind.zmqpubrawtx=tcp://{{backendName}}:28335 +``` \ No newline at end of file diff --git a/polar/add_node2.png b/polar/add_node2.png new file mode 100644 index 0000000000000000000000000000000000000000..d8896aa460a8ec0b3bd60159cffef08c51cdc648 GIT binary patch literal 212006 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
B!&0Vi0Pt70c(B$;ljp~nC} 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 AJ^%m! literal 0 HcmV?d00001 diff --git a/polar/polar1.png b/polar/polar1.png new file mode 100644 index 0000000000000000000000000000000000000000..16974743f76960c8c6d937cca5c30c80cda0e09f GIT binary patch literal 234393 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%0AWtiv)^Vml514 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�C|3ewQPHut|S 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 literal 0 HcmV?d00001 diff --git a/requirements.php b/requirements.php new file mode 100644 index 00000000..6cf322eb --- /dev/null +++ b/requirements.php @@ -0,0 +1,162 @@ +Error\n\n" + . "

The path to yii framework seems to be incorrect.

\n" + . '

You need to install Yii framework via composer or adjust the framework path in file ' . basename(__FILE__) . ".

\n" + . '

Please refer to the README on how to install Yii.

\n"; + + if (!empty($_SERVER['argv'])) { + // do not print HTML when used in console mode + echo strip_tags($message); + } else { + echo $message; + } + exit(1); +} + +require_once($frameworkPath . '/requirements/YiiRequirementChecker.php'); +$requirementsChecker = new YiiRequirementChecker(); + +$gdMemo = $imagickMemo = 'Either GD PHP extension with FreeType support or ImageMagick PHP extension with PNG support is required for image CAPTCHA.'; +$gdOK = $imagickOK = false; + +if (extension_loaded('imagick')) { + $imagick = new Imagick(); + $imagickFormats = $imagick->queryFormats('PNG'); + if (in_array('PNG', $imagickFormats)) { + $imagickOK = true; + } else { + $imagickMemo = 'Imagick extension should be installed with PNG support in order to be used for image CAPTCHA.'; + } +} + +if (extension_loaded('gd')) { + $gdInfo = gd_info(); + if (!empty($gdInfo['FreeType Support'])) { + $gdOK = true; + } else { + $gdMemo = 'GD extension should be installed with FreeType support in order to be used for image CAPTCHA.'; + } +} + +/** + * Adjust requirements according to your application specifics. + */ +$requirements = array( + // Database : + array( + 'name' => 'PDO extension', + 'mandatory' => true, + 'condition' => extension_loaded('pdo'), + 'by' => 'All DB-related classes', + ), + array( + 'name' => 'PDO SQLite extension', + 'mandatory' => false, + 'condition' => extension_loaded('pdo_sqlite'), + 'by' => 'All DB-related classes', + 'memo' => 'Required for SQLite database.', + ), + array( + 'name' => 'PDO MySQL extension', + 'mandatory' => false, + 'condition' => extension_loaded('pdo_mysql'), + 'by' => 'All DB-related classes', + 'memo' => 'Required for MySQL database.', + ), + array( + 'name' => 'PDO PostgreSQL extension', + 'mandatory' => false, + 'condition' => extension_loaded('pdo_pgsql'), + 'by' => 'All DB-related classes', + 'memo' => 'Required for PostgreSQL database.', + ), + // Cache : + array( + 'name' => 'Memcache extension', + 'mandatory' => false, + 'condition' => extension_loaded('memcache') || extension_loaded('memcached'), + 'by' => '
MemCache', + 'memo' => extension_loaded('memcached') ? 'To use memcached set MemCache::useMemcached to true.' : '' + ), + // CAPTCHA: + array( + 'name' => 'GD PHP extension with FreeType support', + 'mandatory' => false, + 'condition' => $gdOK, + 'by' => 'Captcha', + 'memo' => $gdMemo, + ), + array( + 'name' => 'ImageMagick PHP extension with PNG support', + 'mandatory' => false, + 'condition' => $imagickOK, + 'by' => 'Captcha', + 'memo' => $imagickMemo, + ), + // PHP ini : + 'phpExposePhp' => array( + 'name' => 'Expose PHP', + 'mandatory' => false, + 'condition' => $requirementsChecker->checkPhpIniOff("expose_php"), + 'by' => 'Security reasons', + 'memo' => '"expose_php" should be disabled at php.ini', + ), + 'phpAllowUrlInclude' => array( + 'name' => 'PHP allow url include', + 'mandatory' => false, + 'condition' => $requirementsChecker->checkPhpIniOff("allow_url_include"), + 'by' => 'Security reasons', + 'memo' => '"allow_url_include" should be disabled at php.ini', + ), + 'phpSmtp' => array( + 'name' => 'PHP mail SMTP', + 'mandatory' => false, + 'condition' => strlen(ini_get('SMTP')) > 0, + 'by' => 'Email sending', + 'memo' => 'PHP mail SMTP server required', + ), +); + +// OPcache check +if (!version_compare(phpversion(), '5.5', '>=')) { + $requirements[] = array( + 'name' => 'APC extension', + 'mandatory' => false, + 'condition' => extension_loaded('apc'), + 'by' => 'ApcCache', + ); +} + +$result = $requirementsChecker->checkYii()->check($requirements)->getResult(); +$requirementsChecker->render(); +exit($result['summary']['errors'] === 0 ? 0 : 1); diff --git a/runtime/.gitignore b/runtime/.gitignore new file mode 100755 index 00000000..5578ca75 --- /dev/null +++ b/runtime/.gitignore @@ -0,0 +1,5 @@ +* +!.gitignore +!supervisor +!node_tls +!mutex \ No newline at end of file diff --git a/runtime/cron/.gitignore b/runtime/cron/.gitignore new file mode 100755 index 00000000..f59ec20a --- /dev/null +++ b/runtime/cron/.gitignore @@ -0,0 +1 @@ +* \ No newline at end of file diff --git a/runtime/node_tls/.gitignore b/runtime/node_tls/.gitignore new file mode 100755 index 00000000..f59ec20a --- /dev/null +++ b/runtime/node_tls/.gitignore @@ -0,0 +1 @@ +* \ No newline at end of file diff --git a/runtime/supervisor/.gitignore b/runtime/supervisor/.gitignore new file mode 100755 index 00000000..f59ec20a --- /dev/null +++ b/runtime/supervisor/.gitignore @@ -0,0 +1 @@ +* \ No newline at end of file diff --git a/src/LNPay.php b/src/LNPay.php new file mode 100644 index 00000000..87656c87 --- /dev/null +++ b/src/LNPay.php @@ -0,0 +1,11 @@ + \ No newline at end of file diff --git a/src/assets/AppAsset.php b/src/assets/AppAsset.php new file mode 100644 index 00000000..6d65196b --- /dev/null +++ b/src/assets/AppAsset.php @@ -0,0 +1,31 @@ + + * @since 2.0 + */ +class AppAsset extends AssetBundle +{ + public $basePath = '@webroot'; + public $baseUrl = '@web'; + public $css = [ + 'css/site.css', + ]; + public $js = [ + ]; + public $depends = [ + 'yii\web\YiiAsset', + 'yii\bootstrap\BootstrapAsset', + ]; +} diff --git a/src/assets/AppSbAsset.php b/src/assets/AppSbAsset.php new file mode 100644 index 00000000..25a53511 --- /dev/null +++ b/src/assets/AppSbAsset.php @@ -0,0 +1,31 @@ + + * @since 2.0 + */ +class AppSbAsset extends AssetBundle +{ + public $basePath = '@webroot'; + public $baseUrl = '@web'; + public $css = [ + 'css/sba.css', + ]; + public $js = [ + ]; + public $depends = [ + 'yii\web\YiiAsset', + 'yii\bootstrap4\BootstrapAsset', + ]; +} diff --git a/src/assets/JsTzAsset.php b/src/assets/JsTzAsset.php new file mode 100644 index 00000000..5039b72f --- /dev/null +++ b/src/assets/JsTzAsset.php @@ -0,0 +1,21 @@ + \yii\web\View::POS_HEAD]; + public $css = [ + ]; + public $js = [ + 'dist/jstz.min.js' + ]; + public $depends = [ + ]; +} diff --git a/src/assets/PaywallAsset.php b/src/assets/PaywallAsset.php new file mode 100644 index 00000000..1b9eda0e --- /dev/null +++ b/src/assets/PaywallAsset.php @@ -0,0 +1,26 @@ + \yii\web\View::POS_HEAD]; + public $css = [ + 'css/site.css' + ]; + public $js = [ + '/js/functions.js', + ]; + public $depends = [ + 'yii\web\YiiAsset', + 'yii\bootstrap\BootstrapAsset', + 'yii\bootstrap\BootstrapPluginAsset' + ]; +} \ No newline at end of file diff --git a/src/base/ApiController.php b/src/base/ApiController.php new file mode 100644 index 00000000..e5b33168 --- /dev/null +++ b/src/base/ApiController.php @@ -0,0 +1,168 @@ + \yii\filters\Cors::class + ]; + + $behaviors['authenticator'] = [ + 'class' => CompositeAuth::className(), + 'authMethods' => [ + HttpHeaderAuth::class, + QueryParamAuth::class, + HttpBasicAuth::class + ], + 'except'=>['lnurl-process','options','lightning-address'] + ]; + $behaviors['contentNegotiator'] = [ + 'class' => 'yii\filters\ContentNegotiator', + 'formats' => [ + 'application/json' => \yii\web\Response::FORMAT_JSON, + ], + ]; + + $behaviors['rateLimiter']['enableRateLimitHeaders'] = false; + return $behaviors; + } + + public function init() + { + parent::init(); + \LNPay::$app->user->enableSession = false; + set_time_limit(10); + } + + public function checkAdminAccess() + { + if (\LNPay::$app->user->identity->status >= User::STATUS_API_ADMIN) + return true; + else + throw new UnauthorizedHttpException('You do not have permission to do this!'); + } + + public function getUser() + { + return User::findOne(\LNPay::$app->user->id); + } + + public function getIsAsync() + { + $headers = \LNPay::$app->request->getHeaders(); + $async = $headers->get('X-LNPAY-ASYNC',NULL); + if ($async) { + return true; + } else { + return false; + } + + } + + public function beforeAction($event) + { + if (parent::beforeAction($event)) { + + //We can check for perms or other things on the current session key + + $apiKey = @\LNPay::$app->user->identity->sessionApiKey; + + $function = \LNPay::$app->controller->id.'/'.\LNPay::$app->controller->action->id; + + if (UserAccessKeyBehavior::checkKeyAccess(UserAccessKeyBehavior::ROLE_PUBLIC_API_KEY,$apiKey)) { + if (in_array($function,$this->sakOnlyArray)) { + throw new UnauthorizedHttpException('This resource can only be access with secret access key.'); + } + } + + if (UserAccessKeyBehavior::checkKeyAccess(UserAccessKeyBehavior::ROLE_KEY_SUSPENDED,$apiKey)) { + throw new UnauthorizedHttpException('Something went wrong, please reach out.'); + } + return true; + } + + } + + + public function findByKey($access_key) + { + /** + * @var lnpay\wallet\models\Wallet + */ + $modelClass = $this->modelClass; + + $apiKey = @\LNPay::$app->user->identity->sessionApiKey; + + //If SAK is used, all wallet keys are valid + if (UserAccessKeyBehavior::checkKeyAccess(UserAccessKeyBehavior::ROLE_SECRET_API_KEY,$apiKey)) { + $wallet = Wallet::findById($access_key) ?? Wallet::findByKey($access_key) ?? NULL; + if ($wallet) { + if ($wallet->user_id == \LNPay::$app->user->id) { //make sure this is the right user + return $wallet; + } + } + + } + //public access key + else if (UserAccessKeyBehavior::checkKeyAccess(UserAccessKeyBehavior::ROLE_PUBLIC_API_KEY,@\LNPay::$app->user->identity->sessionApiKey)) { + $wallet = Wallet::findByKey($access_key); + if ($wallet) { + if (\LNPay::$app->user->id == $wallet->user_id) { + return $wallet; + } + } + } else { //publicly available with no key needed + if (in_array($this->action->id,['lnurl-process','lightning-address'])) { //if lnurl which grants public access based on key + $wallet = Wallet::findByKey($access_key); + if ($wallet) { + return $wallet; + } + } + } + + if (UserAccessKeyBehavior::checkKeyAccess(UserAccessKeyBehavior::ROLE_PUBLIC_API_KEY,@\LNPay::$app->user->identity->sessionApiKey)) { + throw new UnauthorizedHttpException('Invalid Wallet Access Key. Keys prefixed with waka_, waki_, wakr, waklw are valid when using pak_'); + } + throw new UnauthorizedHttpException('Wallet not found: '.$access_key); + } + + public function checkAccessKey($item,$access_key=NULL) + { + if (!$access_key) //assuming it's a wallet access key if it's in the URL + $access_key = \LNPay::$app->request->getQueryParam('access_key'); + + if (UserAccessKeyBehavior::checkKeyAccess(UserAccessKeyBehavior::ROLE_SECRET_API_KEY,@\LNPay::$app->user->identity->sessionApiKey)) { + return true; + } else if (UserAccessKeyBehavior::checkKeyAccess(UserAccessKeyBehavior::ROLE_KEY_SUSPENDED,$access_key)) { + throw new UnauthorizedHttpException('Key has been suspended'); + } else if (UserAccessKeyBehavior::checkKeyAccess($item,$access_key)) + return true; + else + throw new UnauthorizedHttpException(UserAccessKeyBehavior::getAccessKeyPrefix($access_key).' access key provided does not permission to do this: '.$item); + + } + +} diff --git a/src/base/DashController.php b/src/base/DashController.php new file mode 100644 index 00000000..ed4a7e30 --- /dev/null +++ b/src/base/DashController.php @@ -0,0 +1,46 @@ +user->isGuest) + LNPayComponent::processTz(\LNPay::$app->user->identity); + + return true; + } + + public function behaviors() + { + return ArrayHelper::merge(parent::behaviors(),[ + 'access' => [ + 'class' => AccessControl::className(), + 'rules' => [ + [ + 'allow' => true, + 'roles' => ['@'], + ], + ], + ], + ]); + } + + +} \ No newline at end of file diff --git a/src/behaviors/JsonDataBehavior.php b/src/behaviors/JsonDataBehavior.php new file mode 100644 index 00000000..25309ccb --- /dev/null +++ b/src/behaviors/JsonDataBehavior.php @@ -0,0 +1,235 @@ + JsonDataBehavior::className(), + * 'attribute' => 'json_data' + * ], + * ]; + * } + * ``` + * + * + * USAGE: + * + * $model = Model::findOne($id); + * $model->appendJsonData(['likes_dogs'=>1]); + * + * //$model->json_data -> {"likes_dogs":1} + * + * WARNING ---------------------------------------------------------------- + * + * USING NUMBERS AS KEYS DOES NOT WORK RIGHT! THEY KEY VALUE IS IGNORED + * + * @author Tim Kijewski + */ +class JsonDataBehavior extends Behavior +{ + /** + * @var string the attribute of the JSON data + */ + public $attribute = 'json_data'; + + private $inMemoryJsonArray = []; + + /** + * @var array attributes that don't need a column in db but are stored in json + */ + public $extraAttributes = []; + + + /** + * {@inheritdoc} + */ + public function init() + { + parent::init(); + } + + /** + * @return array + */ + public function events() + { + return [ + ActiveRecord::EVENT_AFTER_FIND => 'afterFind', + ActiveRecord::EVENT_BEFORE_INSERT => 'updateAttributesBeforeSave', + ActiveRecord::EVENT_BEFORE_UPDATE => 'updateAttributesBeforeSave' + ]; + } + + /** + * Pull the extra attributes from the json and assign to model vars + */ + public function afterFind() + { + $this->inMemoryJsonArray = $this->getJsonData(); + foreach ($this->extraAttributes as $ea) { + $this->owner->{$ea} = @$this->inMemoryJsonArray['extraAttributes'][$ea]; + } + } + + public function updateAttributesBeforeSave() + { + if (!empty($this->extraAttributes)) { + $array = []; + foreach ($this->extraAttributes as $ea) { + $array[$ea] = $this->owner->{$ea}; + } + $data = ArrayHelper::merge($this->inMemoryJsonArray,['extraAttributes'=>$array]); + $this->owner->{$this->attribute} = new \yii\db\JsonExpression($data); + } + + } + + + + /** + * Return all of the json data as array if $key is null. Otherwise return key specific value + * @param null $key + * @return mixed|null + */ + public function getJsonData($key=NULL) + { + $data = $this->owner->{$this->attribute}; + + if ($data instanceof \yii\db\JsonExpression) + $data = $data->jsonSerialize(); + else if (!is_array($data) && !empty($data)) + $data = json_decode($data,TRUE); + + if (!$data) + return null; + + if (!$key) + return $data; + + return @$data[$key]; + } + + /** + * Append custom user json data + * @param $array + * @param bool $truncate clear existing json_data + * @return mixed + * @throws \Exception + */ + public function appendJsonData($array,$truncate=FALSE) + { + if (!is_array($array)) + throw new \Exception('Array is required!'); + + $attribute = $this->attribute; + + if ($truncate) + $data = NULL; + else + $data = $this->inMemoryJsonArray; + + //Append to existing json data + if ($data) { + $data = ArrayHelper::merge($data,$array); + } else { // start fresh + $data = $array; + } + + $this->owner->updateAttributes([$attribute=>new \yii\db\JsonExpression($data)]); + + $this->inMemoryJsonArray = $this->getJsonData(); + if ($this->owner->getIsNewRecord()) { + return $this->getJsonData(); + } else { + if ($this->owner->save(false)) { + return $this->inMemoryJsonArray; + } + else + throw new \Exception('Unable to save json data: '.print_r($this->owner->errors,TRUE)); + } + } + + /** + * delete all keys in array. if empty delete all + * @param null $arrayOfKeys + * @return mixed + * @throws \Exception + */ + public function deleteJsonData($arrayOfKeys=null) + { + $data = $this->getJsonData(); + $attribute = $this->attribute; + + if (!$arrayOfKeys) + $data = NULL; + + + if (!empty($arrayOfKeys) && is_array($arrayOfKeys)) { + foreach ($arrayOfKeys as $key) { + self::recursive_unset($data,$key); + } + } + + $data = ($data?$data:null); + $this->owner->updateAttributes([$attribute=>new \yii\db\JsonExpression($data)]); + if ($this->owner->getIsNewRecord()) { + return true; + } else { + if ($this->owner->save()) + return true; + else + throw new \Exception(HelperComponent::getFirstErrorFromFailedValidation($this->owner)); + } + } + + public static function recursive_unset(&$array, $unwanted_key) { + unset($array[$unwanted_key]); + if (!empty($array)) { + foreach ($array as &$value) { + if (is_array($value)) { + self::recursive_unset($value, $unwanted_key); + } + } + } + + } +} diff --git a/src/behaviors/UserAccessKeyBehavior.php b/src/behaviors/UserAccessKeyBehavior.php new file mode 100644 index 00000000..8c808ba7 --- /dev/null +++ b/src/behaviors/UserAccessKeyBehavior.php @@ -0,0 +1,194 @@ + + */ +class UserAccessKeyBehavior extends Behavior +{ + const ROLE_PUBLIC_API_KEY = 'Public API Key'; + const ROLE_SECRET_API_KEY = 'Secret API Key'; + + const ROLE_WALLET_ADMIN = 'Wallet Admin'; + const ROLE_WALLET_INVOICE = 'Wallet Invoice'; + const ROLE_WALLET_READ = 'Wallet Read'; + const ROLE_WALLET_LNURL_WITHDRAW = 'Wallet LNURL Withdraw'; + const ROLE_WALLET_LNURL_PAY = 'Wallet LNURL Pay'; + const ROLE_WALLET_EXTERNAL_WEBSITE_ADMIN = 'Wallet External Website Admin'; + const ROLE_WALLET_EXTERNAL_WEBSITE_VIEW = 'Wallet External Website View'; + + const ROLE_KEY_SUSPENDED = 'Key Suspended'; + + const PERM_WALLET_READ = 'wallet_read'; //read / wallet info + const PERM_WALLET_TX_READ = 'wallet_tx_read'; //read single transaction + const PERM_WALLET_DEPOSIT = 'wallet_deposit'; + const PERM_WALLET_TRANSFER = 'wallet_transfer'; + const PERM_WALLET_WITHDRAW = 'wallet_withdraw'; + const PERM_WALLET_PUBLIC_WITHDRAW = 'wallet_public_withdraw'; + + const PERM_DEFAULT_NODE_WRAPPER_ACCESS = 'default_node_wrapper_access'; + + /** + * @var null The column name of the object that this key is tied to e.g. wallet_id + * Set null if this is key is for just the user with no other object + */ + public $_accessKeyColumnName = NULL; + + /** + * @var array These roles are automatically created when the parent object is first inserted + */ + public $default_roles = []; + + /** + * {@inheritdoc} + */ + public function init() + { + parent::init(); + } + + public function events() + { + $events=[ + BaseActiveRecord::EVENT_AFTER_INSERT=>'afterSaveInsert' + ]; + return $events; + } + + protected function setAccessKeyColumnName($name) + { + $this->_accessKeyColumnName = $name; + } + + public function getAccessKeyColumnName() + { + if ($this->_accessKeyColumnName) + return $this->_accessKeyColumnName; + + if ($this->owner::tableName() == '{{%user}}') + return NULL; + + return $this->owner::tableName().'_id'; + } + + public function getAvailableAccessKeyColumnNames() + { + return ['wallet_id']; + } + + public function getUserId() + { + if ($this->owner::tableName() == '{{%user}}') + return $this->owner->id; + else + return $this->owner->user_id; + } + + /** + * @return array of keys + * If byRole is specified, same structure is returned but with only appropriate roles/keys + * Array + ( + [Wallet Admin] => Array + ( + [0] => wa_gy6aKnNfvPhFm1p8VF3YnjG + ) + + [Wallet Read] => Array + ( + [0] => wr_371d5XMr39qYKtjiM8auXrr + ) + + [Wallet Invoice] => Array + ( + [0] => wi_eQoMQsX6OpWTPy6LjlYDbuxj + ) + ) + */ + public function getUserAccessKeys($byRole=null) + { + $auth = \LNPay::$app->authManager; + + if ($this->accessKeyColumnName) + $uaks = UserAccessKey::find()->where(['user_id'=>$this->userId,$this->accessKeyColumnName=>$this->owner->id]); + else { + //If it is a user key, we need to look where all other columns are null + $uaks = UserAccessKey::find()->where(['user_id'=>$this->userId]); + foreach ($this->availableAccessKeyColumnNames as $column) { + $uaks->andWhere([$column=>NULL]); + } + + } + + + $array = []; + foreach ($uaks->all() as $uak) { + foreach ($auth->getRolesByUser($uak->access_key) as $role) { + $array[$role->name][] = $uak->access_key; + } + } + + if ($byRole) { + if (@$array[$byRole]) { + $arr[$byRole] = $array[$byRole]; + return $arr; + } + else + return [$byRole=>[]]; + } + + return $array; + } + + public function getFirstAccessKeyByRole($role) + { + return @$this->getUserAccessKeys($role)[$role][0]; + } + + /** + * @throws \yii\web\ServerErrorHttpException + * + * Creates access keys in UserAccessKey table + * Also creates roles in auth_assignment table + */ + public function populateApiKeys() + { + foreach ($this->default_roles as $role) { + if ($this->accessKeyColumnName) + $attrs = [$this->accessKeyColumnName=>$this->owner->id]; + else + $attrs = []; + + $wuk = UserAccessKey::createKey($this->userId,$role,$attrs); + } + } + + public static function checkKeyAccess($item,$access_key) + { + return \LNPay::$app->authManager->checkAccess($access_key,$item); + } + + public static function getAccessKeyPrefix($access_key) + { + return @explode('_',$access_key)[0].'_'; + } + + public function afterSaveInsert($event) + { + try { + $this->populateApiKeys(); + } catch (\Throwable $t) { + \LNPay::error($t,__METHOD__); + } + } +} diff --git a/src/commands/CronController.php b/src/commands/CronController.php new file mode 100644 index 00000000..dfa87f16 --- /dev/null +++ b/src/commands/CronController.php @@ -0,0 +1,140 @@ +where(['status_type_id'=>StatusType::LN_NODE_ACTIVE]) as $lnNode) { + foreach ($lnNode->nodeListeners as $nL) { + if (!$nL->isRunning && $nL->isAutorestart) { //if node listener is not running, but should be + $nL->startListenerAndTurnOnAutostart(); + echo $nL->id." Listener not running, attempting to start\n"; + } + } + }*/ + } + + public function actionHourly() + { + try { + $this->compressLargeWallets(); + } catch (\Throwable $t) { + \LNPay::error($t->getMessage(),__METHOD__); + } + } + + public function actionDaily() + { + /*** + * Health checks for nodes. a little finicky + */ + + /* + try { + foreach (LnNode::find()->where(['!=','status_type_id',StatusType::LN_NODE_INACTIVE])->all() as $lnNode) { + $lnNode->healthCheck('REST'); + $lnNode->healthCheck('RPC'); + } + } catch (\Throwable $t) { + \LNPay::error($t->getMessage(),__METHOD__); + } + */ + + + /** + * limit the growth of some tables + */ + + + try { + $this->cleanupIwhr(); + } catch (\Throwable $t) { + \LNPay::error($t->getMessage(),__METHOD__); + } + + try { + $this->cleanupApiLogs(); + } catch (\Throwable $t) { + \LNPay::error($t->getMessage(),__METHOD__); + } + + try { + $this->cleanupActionFeed(); + } catch (\Throwable $t) { + \LNPay::error($t->getMessage(),__METHOD__); + } + + try { + $this->cleanupQueueLogs(); + } catch (\Throwable $t) { + \LNPay::error($t->getMessage(),__METHOD__); + } + + } + + /** + * Delete webhook requests older than 15 days + * + */ + public function cleanupIwhr() + { + \LNPay::info('Cleaning up Webhook logs older than 3 days'); + $cutoffTime = time() - 259200; //3 days + \LNPay::$app->db->createCommand('DELETE FROM integration_webhook_request WHERE created_at < '.$cutoffTime)->execute(); + } + + public function cleanupApiLogs() + { + \LNPay::info('Cleaning up API logs older than 3 days'); + $cutoffTime = time() - 259200; //3 days + \LNPay::$app->db->createCommand('DELETE FROM user_api_log WHERE created_at < '.$cutoffTime)->execute(); + } + + public function cleanupActionFeed() + { + \LNPay::info('Cleaning up Action Feed older than 3 days'); + $cutoffTime = time() - 259200; //5 days + \LNPay::$app->db->createCommand('DELETE FROM action_feed WHERE created_at < '.$cutoffTime)->execute(); + } + + public function cleanupQueueLogs() + { + \LNPay::info('Cleaning up Queue Push history older than 3 days'); + $cutoffTime = time() - 259200; //3 days + \LNPay::$app->db->createCommand('DELETE FROM queue_push WHERE job_class = :class')->bindValue(':class','lnpay\jobs\AnalyticsLogJob')->execute(); + \LNPay::$app->db->createCommand('DELETE FROM queue_push WHERE pushed_at < '.$cutoffTime)->execute(); + + \LNPay::info('Cleaning up Queue Exec history older than 3 days'); + $cutoffTime = time() - 259200; //3 days + \LNPay::$app->db->createCommand('DELETE FROM queue_exec WHERE finished_at < '.$cutoffTime)->execute(); + } + + public function compressLargeWallets() + { + \LNPay::info('Compressing wallets with large amount of transactions'); + $walletsToCompress = [50018,28655,36202]; + + foreach ($walletsToCompress as $wId) { + $wallet = Wallet::findOne($wId); + $wallet->compressTransactions(); + } + } + +} diff --git a/src/commands/HelloController.php b/src/commands/HelloController.php new file mode 100644 index 00000000..475ec9e3 --- /dev/null +++ b/src/commands/HelloController.php @@ -0,0 +1,221 @@ + + * @since 2.0 + */ +class HelloController extends Controller +{ + public function actionVerifyWalletBalance($id) + { + $wallet = Wallet::findOne($id); + echo "Wallet Transaction Calc balance: ".$wallet->calculateBalance(); + echo "\n"; + echo "Wallet Balance in wallet table: ".$wallet->balance; + echo "\n"; + } + public function actionCompressWallet($id) + { + $wallet = Wallet::findOne($id); + print_r($wallet->compressTransactions()); + } + public function actionLp() + { + $w = Wallet::find()->one(); + $p = $w->generateLnurlpay(); + echo VarDumper::export($p); + } + public function actionSsh() + { + $nodeId = 'testernode'; + $clu = LnCluster::find()->one(); + print_r($clu->getNextAvailablePorts()); + $ssh = $clu->getSshConnection(); + + /* ubuntu is the username used by amazon ec2 */ + $parameters = []; + $config_file = $clu->generateConfigFileForSubnode($parameters); + echo $ssh->exec('echo "'.$config_file.'" > '.$clu->clusterDataPath.$nodeId.'/lnd.conf'); + } + + public function actionT() + { + $model = new LnWalletWithdrawForm(); + $model->payment_request = 'lnbcrt20n1p03g7kapp5cjudz84qrc52hzqq7menvgh2m9kk20d5nh0s39gh9dvjtxlx9wrsdqqcqzpgsp5jlddtl0zznlmxlvxgcv58ctn9t7qftlmfvm5ny3hlttj433nfdfs9qy9qsqcm0xprj42v4clallnux5jgrvmena4ntvxjdq96dud5ea7cjfep7yg08asz4vtgcc59h0a4fq89w6llldp6kw0zw8jmvnt7qqacx0kuqp8gnnp3'; + $model->wallet_id = 6; + $model->processWithdrawal([]); + + } + public function actionTransfer($s_w,$d_w,$sat) + { + $t = new WalletTransferForm(); + $t->source_wallet_id = $s_w; + $t->dest_wallet_id = $d_w; + $t->num_satoshis = $sat; + if ($t->validate()) { + $t->executeTransfer(); + } else { + echo HelperComponent::getFirstErrorFromFailedValidation($t); + } + + } + + public function actionSettle($id,$sats,$preimage) + { + $lnTx = LnTx::find()->where(['payment_request'=>$id])->one(); + $lnTx->settled = 1; + $lnTx->num_satoshis = $sats; + $lnTx->payment_preimage = $preimage; + $lnTx->settled_at = time(); + if (!$lnTx->save()) { + echo HelperComponent::getFirstErrorFromFailedValidation($lnTx); + } + } + + + public function actionMac() + { + $raw = 'AgEEbHNhdAJCAACZgChA0/HX4cotoVmUyfutAN7Uhf77QvXJ1teO6LYrOaiYe/FUoXJL5g4vz/1Z5TENdsM+oVzyMm4jF1NSciUkAAITc2VydmljZXM9Ym9zc2NvcmU6MAACFmJvc3Njb3JlX2NhcGFiaWxpdGllcz0AAAYgclmXQYsaZFlLQvKVKgxuYblx0s7Yskkn2w5z0UM5LPw='; + + $r = HelperComponent::base64url_encode(base64_decode($raw)); + //echo $r; + + $m = new LnMacaroonObject($r); + } + + public function actionBalance() + { + $node = LnNode::findOne('lnod_alice'); + $rpcConnector = LndNodeConnector::initConnectorRpc($node,LndNodeConnector::SERVICE_LIGHTNING); + + $r = new \Lnrpc\WalletBalanceRequest(); + $resp = $rpcConnector->WalletBalance($r); + $x = $resp->wait(); + //print_r($x[0]->serializeToJsonString());exit; + echo 'Total balance: '.$x[0]->getTotalBalance(); + echo "\n"; + echo 'Confirm balance: '.$x[0]->getConfirmedBalance(); + echo "\n"; + echo 'Unconfirm balance: '.$x[0]->getUnconfirmedBalance(); + echo "\n"; + } + + public function actionNextaddr() + { + $node = \lnpay\node\models\LnNode::findOne('lnod_zpn99ptme8ss9t'); + echo $node->id;exit; + $rpcConnector = LndNodeConnector::initConnectorRpc($node,LndNodeConnector::SERVICE_LIGHTNING); + + $r = new \Lnrpc\NewAddressRequest(); + $resp = $rpcConnector->NewAddress($r); + $x = $resp->wait(); + print_r($x[0]->serializeToJsonString()); + + } + + public function actionKeysendPlay() + { + $model = new LnWalletKeysendForm(); + $model->dest_pubkey = '03f84bcd167b6989529815c3b6d5826ae3b61f47a920ef1521f1501951db4ab39f'; + $model->num_satoshis = 1; + $model->custom_records = [696969=>'hello']; + $model->wallet_id = 'wal_ZlszkwrH8ZdYGQ'; + $model->passThru = ['tim'=>2]; + $r = $model->processKeysend(); + + echo VarDumper::export($r); + exit; + } + + + public function actionBake() + { + $con = LndNodeConnector::initConnectorRpc(LnNode::findOne('lnod_jQzFay1d')); + + $perms = []; + foreach (LnMacaroonObject::getAllowedPermissionMap() as $entity => $actions) { + foreach ($actions as $a) { + $p = new \Lnrpc\MacaroonPermission(); + $p->setEntity($entity); + $p->setAction($a); + $perms[] = $p; + } + } + + + $sub = new \Lnrpc\BakeMacaroonRequest(); + $sub->setPermissions($perms); + $result = $con->BakeMacaroon($sub)->wait(); + //VarDumper::dump($result); + echo $result[0]->getMacaroon(); + echo "\n"; + } + + public function actionDeletePayments() + { + $node = LnNode::findOne('lnod_2s4yfYA'); + echo $node->getLndConnector()->deleteAllPayments(); + } + + public function actionBitcoinsig($domain,$k1) + { + $bitcoinECDSA = new BitcoinECDSA(); + $walletPrivateKey = 'walletPrivateKey'; + $walletPrivateKeyBasedOnDomain = hash_hmac('sha256',$domain,$walletPrivateKey); + $bitcoinECDSA->setPrivateKey($walletPrivateKeyBasedOnDomain); + echo "priv: ".$bitcoinECDSA->getPrivateKey(); + echo "\n"; + echo "pub : ".$pubKey=$bitcoinECDSA->getPubKey(); + echo "\n"; + echo "sig : ".$sig=$bitcoinECDSA->signHash(bin2hex($k1)); + echo "\n"; + echo 'checksig:'.$bitcoinECDSA->checkDerSignature($pubKey, $sig, bin2hex($k1)); + echo "\n"; + } +} diff --git a/src/commands/PlayController.php b/src/commands/PlayController.php new file mode 100644 index 00000000..bb12cd65 --- /dev/null +++ b/src/commands/PlayController.php @@ -0,0 +1,47 @@ +mongodb->getCollection('lnod_djti8zrfrwk3cx'); + $collection->insert(json_decode('{"eventType": "FORWARD", "timestampNs": "1629599419839150984", "linkFailEvent": {"info": {"incomingAmtMsat": "209121872", "outgoingAmtMsat": "209120663", "incomingTimelock": 697362, "outgoingTimelock": 697322}, "wireFailure": "TEMPORARY_CHANNEL_FAILURE", "failureDetail": "INSUFFICIENT_BALANCE", "failureString": "insufficient bandwidth to route htlc"}, "incomingHtlcId": "24887", "incomingChannelId": "123456789", "outgoingChannelId": "762928028804382735"}',true)); + + /* + $query = new \yii\mongodb\Query(); + $rows = $query->select(['name','bedrooms']) + ->where(['bedrooms'=>3]) + ->from('listingsAndReviews')->limit(10)->all(); + echo VarDumper::export($rows); + */ + } + + public function actionEncrypt() + { + $key = getenv('GENERAL_ENCRYPTION_KEY'); + $iv = 'test-iv'; + $ciphertext = HelperComponent::encryptForDbUse('test-data',$key,$iv); + + echo 'Ciphertext: [', $ciphertext , "]\n"; + echo 'Key: [', $key, "]\n"; + echo 'Cleartext: [', HelperComponent::decryptForDbUse($ciphertext,$key,$iv), "]\n"; + + } + +} diff --git a/src/commands/RpcListenerController.php b/src/commands/RpcListenerController.php new file mode 100644 index 00000000..68df1813 --- /dev/null +++ b/src/commands/RpcListenerController.php @@ -0,0 +1,118 @@ + + * @since 2.0 + */ +class RpcListenerController extends Controller +{ + public static function processLndRpcResponse($response,$nodeObject,$actionName) + { + $rpcData = json_decode($response->serializeToJsonString(),TRUE); + $actionName = ActionName::findOne($actionName); + + $eventData = [ + 'lnod'=> $nodeObject->toArray(), + $actionName->name=>$rpcData + ]; + + $job = \LNPay::$app->queue->priority(100)->push(new ProcessLndResponseJob([ + 'responseArray' => $rpcData, + 'nodeArray' => $nodeObject->toArray(), + 'actionArray'=>$actionName->toArray() + ])); + + //$actionFeedObject = $nodeObject->user->registerAction($actionName->id,$eventData); + } + + public function actionLndSubscribe($node_id,$method) + { + $nodeObject = LnNode::findOne($node_id); + $connector = $nodeObject->getLndConnector(); + try { + switch ($method) { + case NodeListener::LND_RPC_SUBSCRIBE_HTLC_EVENTS: + $actionName = ActionName::LND_RPC_HTLC_EVENT; + $connector->rpcSubscribeHtlcEvents( + function (\Routerrpc\HtlcEvent $response) use ($nodeObject,$actionName) { + static::processLndRpcResponse($response,$nodeObject,$actionName); + } + ); + break; + case NodeListener::LND_RPC_SUBSCRIBE_INVOICES: + $actionName = ActionName::LND_RPC_INVOICE; + $connector->rpcSubscribeInvoices( + function ($response) use ($nodeObject,$actionName) { + static::processLndRpcResponse($response,$nodeObject,$actionName); + } + ); + break; + case NodeListener::LND_RPC_SUBSCRIBE_TRANSACTIONS: + $actionName = ActionName::LND_RPC_TRANSACTION; + $connector->rpcSubscribeTransactions( + function ($response) use ($nodeObject,$actionName) { + static::processLndRpcResponse($response,$nodeObject,$actionName); + } + ); + break; + case NodeListener::LND_RPC_SUBSCRIBE_PEER_EVENTS: + $actionName = ActionName::LND_RPC_PEER_EVENT; + $connector->rpcSubscribePeerEvents( + function ($response) use ($nodeObject,$actionName) { + static::processLndRpcResponse($response,$nodeObject,$actionName); + } + ); + break; + case NodeListener::LND_RPC_SUBSCRIBE_CHANNEL_EVENTS: + $actionName = ActionName::LND_RPC_CHANNEL_EVENT_UPDATE; + $connector->rpcSubscribeChannelEvents( + function ($response) use ($nodeObject,$actionName) { + static::processLndRpcResponse($response,$nodeObject,$actionName); + } + ); + break; + case NodeListener::LND_RPC_SUBSCRIBE_CHANNEL_GRAPH: + $actionName = ActionName::LND_RPC_GRAPH_TOPOLOGY_UPDATE; + $connector->rpcSubscribeChannelGraph( + function ($response) use ($nodeObject,$actionName) { + static::processLndRpcResponse($response,$nodeObject,$actionName); + } + ); + break; + case NodeListener::LND_RPC_SUBSCRIBE_CHANNEL_BACKUPS: + $actionName = ActionName::LND_RPC_CHAN_BACKUP_SNAPSHOT; + $connector->rpcSubscribeChannelBackups( + function ($response) use ($nodeObject,$actionName) { + static::processLndRpcResponse($response,$nodeObject,$actionName); + } + ); + break; + } + + } catch (\Throwable $t) { + echo $t->getMessage(); + \LNPay::error($method.':'.$t, __METHOD__); + } + } + + +} diff --git a/src/components/ActionComponent.php b/src/components/ActionComponent.php new file mode 100644 index 00000000..91029e69 --- /dev/null +++ b/src/components/ActionComponent.php @@ -0,0 +1,325 @@ +action_id) + throw new \Exception('Must have an action ID to use this event'); + $act = ActionName::findOne($event->action_id); + + $action = new ActionFeed; + $action->user_id = $event->userObject->id; + $action->action_name_id = $event->action_id; + $action->actionData = $event->customData; + if (!$action->save()) { + \LNPay::error(HelperComponent::getFirstErrorFromFailedValidation($action),__METHOD__); + throw new \Exception('Could not save action'); + } + + try { + //If this action should trigger webhook + if ($action->actionName->is_webhook) { + static::processIntegrations($action); + } + + } catch (\Throwable $e) { + \LNPay::error('Error process integrations: '.$e.print_r($action->attributes,TRUE),__METHOD__); + } + + //massage data or custom stuff before analytics + $logToAnalytics = true; + $customData = $action->actionData; + switch ($event->action_id) { + case ActionName::LND_RPC_GRAPH_TOPOLOGY_UPDATE: + $logToAnalytics = false; + break; + case ActionName::USER_CREATED: + $customData = []; + break; + default: + + } + + if ($logToAnalytics) { + AnalyticsComponent::log($event->userObject->id,$act->name,$customData); + } + + + return $action; + } catch (\Throwable $t) { + \LNPay::error($t,__METHOD__); + return false; + } + + } + + public static function registerAction($actionNameId,$data=[],$userObject=null) + { + try { + $event = new ActionEvent($data); + if ($userObject) + $event->userObject = $userObject; + + $event->action_id = $actionNameId; + + \LNPay::info($userObject->id.':'.$event->actionNameObject->name.': Registering action',__METHOD__); + $actionFeedObject = self::baseRegisterAction($event); + + $callable = ['\lnpay\components\ActionComponent',$event->actionNameObject->name]; + if (is_callable($callable)) { + \LNPay::info($userObject->id.':'.$event->actionNameObject->name.': Calling post-action function.',__METHOD__); + call_user_func($callable,$event); + } + + + return $actionFeedObject; + } catch (\Throwable $t) { + \LNPay::error($t,__METHOD__); + return false; + } + } + + + + /** + * @param $event + * @return bool + */ + + //wallet actions + public static function wallet_created($event) + { + + } + public static function wallet_send($event) { } + public static function wallet_receive($event) { } + public static function wallet_transfer_in($event) { } + public static function wallet_transfer_out($event) { } + + + public static function pw_reset($event) { + $user = $event->userObject; + $mailer = MailerComponent::initMailer($user->email,'passwordResetToken-html',compact('user')); + $mailer->setSubject('Password Reset'); + $mailer->send(); + } + + public static function user_created($event): void + { + $user = $event->userObject; + $user->createDefaultSettings(); + $user->createDefaultWallets(); + } + + + + //NODE ACTIONS + public static function user_node_add($event) + { + $node = LnNode::findOne(@$event->customData['lnod']['id']); + switch ($node->ln_node_implementation_id) { + case LnNodeImplementation::LND_IMPLEMENTATION_ID: + //Start listeners + $node->spawnLndRpcSubscribers(); + break; + } + + + + + } + + public static function user_node_remove($event) {} + + + + + + + + + + + + + + + + public static function processIntegrations($actionFeedObject) + { + $data = $actionFeedObject->actionData; + $userId = $actionFeedObject->user_id; + $actionName = $actionFeedObject->actionName; + $actionData = $actionFeedObject->actionData; + + $baseWhereClause = ['user_id'=>$userId,'status_type_id'=>StatusType::WEBHOOK_ACTIVE]; + + //legacy hooks + $legacyActionHook = []; + switch ($actionName->type) { + case ActionName::TYPE_WALLET: + $fId = Wallet::findOne(@$data['wallet']['id']); + if ($fId) + $specObjectWhere = ['wallet_id'=>$fId]; + break; + default: + $specObjectWhere = []; + } + if (!empty($specObjectWhere)) + $legacyActionHook = IntegrationWebhook::find()->where($baseWhereClause)->andWhere($specObjectWhere)->all(); + + //If user is subscribed to just this one event + $specificActionWhere = ['IS NOT',"JSON_SEARCH(action_name_id, 'one', '{$actionName->name}')",NULL]; + $specificActionHook = IntegrationWebhook::find()->where($baseWhereClause)->andWhere($specificActionWhere)->all(); + + //If user is subscribed to all events + $catchAllAction = IntegrationWebhook::DEFAULT_ALL; + $catchAllActionWhere = ['IS NOT',"JSON_SEARCH(action_name_id, 'one', '{$catchAllAction}')",NULL]; + $catchAllHooks = IntegrationWebhook::find()->where($baseWhereClause)->andWhere($catchAllActionWhere)->all(); + + //Admin catch all for testing + $adminHookWhere = ['IS NOT',"JSON_SEARCH(action_name_id, 'one', 'admin_all')",NULL]; + $adminHooks = IntegrationWebhook::find()->where($adminHookWhere)->andWhere(['status_type_id'=>StatusType::WEBHOOK_ACTIVE])->all(); + + + //NEW METHOD BASED ON ARRAY OF ACTION_NAME_IDs + $hooks = ArrayHelper::merge($specificActionHook,$legacyActionHook,$catchAllHooks,$adminHooks); + \LNPay::info($actionFeedObject->id.':'.$actionFeedObject->actionName->name.': Sending webhooks count ->'.count($hooks),__METHOD__); + + foreach ($hooks as $IW) { + //Construct payload + $iwhr = IntegrationWebhookRequest::prepareRequest($IW,$actionFeedObject); + + /* + \LNPay::$app->queue->priority(150)->push(new IntegrationWebhookRequestJob([ + 'iwhr_id' => $iwhr->id + ])); + */ + + $job = new IntegrationWebhookRequestJob([ + 'iwhr_id' => $iwhr->id + ]); + $exec = $job->execute(\LNPay::$app->queue); + } + } + + /** + * @param IntegrationWebhookRequest $iwr + */ + public static function webhookRequest(IntegrationWebhookRequest $iwhr) + { + try { + $IW = $iwhr->integrationWebhook; + $actionFeedObject = $iwhr->actionFeed; + + $headers = [ + 'Content-Type' => [$IW->content_type], + 'X-LNPay-Event' => [$actionFeedObject->actionName->name], + 'X-LNPay-HookId' => [$iwhr->external_hash], + 'User-Agent' => ['LNPay-HookBot'] + ]; + + if ($s = $IW->secret) { + $headers['X-LNPay-Signature'] = [hash_hmac('sha256',$iwhr->request_payload,$s)]; + } + + $client = new \GuzzleHttp\Client([ + 'http_errors'=>false, + 'headers' => $headers + ]); + + $response = $client->request($IW->http_method, $IW->endpoint_url, [ + 'body' => $iwhr->request_payload + ]); + + //This is a hack for now to include headers to show to user + $headers = ArrayHelper::merge([$IW->http_method=>[$IW->endpoint_url]],$headers); + $iwhr->request_payload = HelperComponent::parseHeaderArrayToString($headers)."\n".json_encode(json_decode($iwhr->request_payload),JSON_PRETTY_PRINT); + $iwhr->save(); + + return $iwhr->processResponse($response); + + } catch (\Throwable $e) { + \LNPay::error($e->getMessage(),__METHOD__); + $iwhr->response_status_code = -1; + $iwhr->response_body = $e->getMessage(); + $iwhr->save(); + } + } + + /** + * Send initial ping on new webhook create + * @param $IW + */ + public static function webhookPing($IW) + { + //@TODO: Implement this + } + + public static function getAvailableTestActionObjects() + { + $array = [ + ActionName::findOne(ActionName::WALLET_CREATED), + ActionName::findOne(ActionName::WALLET_SEND), + ActionName::findOne(ActionName::WALLET_RECEIVE), + ActionName::findOne(ActionName::WALLET_TRANSFER_IN), + ActionName::findOne(ActionName::WALLET_TRANSFER_OUT), + ]; + return $array; + } + + public static function getTestWebhookActionFeedObject(int $actionId) + { + if (YII_ENV_PROD) { + $array = [ + ActionName::WALLET_CREATED => ActionFeed::findOne(90165), + ActionName::WALLET_SEND => ActionFeed::findOne(90171), + ActionName::WALLET_RECEIVE => ActionFeed::findOne(91534), + ActionName::WALLET_TRANSFER_IN => ActionFeed::findOne(90332), + ActionName::WALLET_TRANSFER_OUT => ActionFeed::findOne(90331), + ]; + } else { + $a = ActionFeed::find()->orderBy('id DESC')->one(); + $array = [ + ActionName::WALLET_CREATED => $a, + ActionName::WALLET_SEND => $a, + ActionName::WALLET_RECEIVE => $a, + ActionName::WALLET_TRANSFER_IN => $a, + ActionName::WALLET_TRANSFER_OUT => $a, + ]; + } + + + if ($actionId) { + return $array[$actionId]; + } else { + return $array; + } + } +} + diff --git a/src/components/AnalyticsComponent.php b/src/components/AnalyticsComponent.php new file mode 100644 index 00000000..63aaf46e --- /dev/null +++ b/src/components/AnalyticsComponent.php @@ -0,0 +1,41 @@ +queue->priority(2048)->push(new AnalyticsLogJob([ + 'userId' => $userId, + 'eventName' => $eventName, + 'params'=>$params + ])); + */ + } + } + + public static function executeLog($userId,$eventName,$params=[]) + { + $excludeUsers = [2476]; + if (in_array($userId,$excludeUsers)) + return true; + + if (getenv('AMPLITUDE_API_KEY')) { + if (!YII_ENV_TEST) { + $amplitude = new \Zumba\Amplitude\Amplitude(); + $amplitude->init(getenv('AMPLITUDE_API_KEY'), $userId); + $amplitude->logEvent($eventName,$params); + } + } + } + +} diff --git a/src/components/ApiLogTarget.php b/src/components/ApiLogTarget.php new file mode 100644 index 00000000..52e067b6 --- /dev/null +++ b/src/components/ApiLogTarget.php @@ -0,0 +1,45 @@ +request->absoluteUrl,'/v1/')!==FALSE) { + if (\LNPay::$app->user->identity) { + + $logMessage = new UserApiLog(); + $logMessage->created_at = time(); + $logMessage->api_key = \LNPay::$app->user->identity->sessionApiKey; + $logMessage->external_hash = 'req_'.HelperComponent::generateRandomString(24); + $logMessage->user_id = \LNPay::$app->user->identity->getId(); + $logMessage->method = \LNPay::$app->request->getMethod(); + $logMessage->sdk = @\LNPay::$app->request->getHeaders()->toArray()['x-lnpay-sdk'][0]; + $logMessage->base_url = \LNPay::$app->request->hostInfo; + $logMessage->ip_address = \LNPay::$app->request->userIP; + $logMessage->request_path = \LNPay::$app->request->url; + $logMessage->status_code = \LNPay::$app->response->statusCode; + + //Don't save GET request body + if (\LNPay::$app->request->getMethod() != 'GET') + $logMessage->response_body = VarDumper::export(ArrayHelper::toArray(\LNPay::$app->response->data)); + + $logMessage->response_headers = VarDumper::export(\LNPay::$app->response->getHeaders()->toArray()); + + $logMessage->request_body = VarDumper::export(\LNPay::$app->request->rawBody); + $logMessage->request_headers = VarDumper::export(\LNPay::$app->request->getHeaders()->toArray()); + $logMessage->save(); + + AnalyticsComponent::log(Yii::$app->user->id,'api_request',$logMessage->amplitudeAttributeValues); + } + } + } +} + +?> \ No newline at end of file diff --git a/src/components/HelperComponent.php b/src/components/HelperComponent.php new file mode 100644 index 00000000..bff4277c --- /dev/null +++ b/src/components/HelperComponent.php @@ -0,0 +1,253 @@ +getErrors(); + foreach ($errors as $attr => $errorArray) { + $errorStr = $errorArray[0]; + } + + return @$errorStr ?? 'No Invalid Attribute'; + } + + + public static function encodeTestInvoice($params=[]) + { + return base64_encode(json_encode($params)); + } + + public static function decodeTestInvoice($str) + { + return @json_decode(@base64_decode($str),TRUE); + } + + public static function generateRandomString($length=32) { + return str_replace(['-','_'],'',\LNPay::$app->security->generateRandomString($length)); + } + + public static function generateDeterministicString($deterministic_identifier,$salt,$length=32) { + return substr(hash('sha256',$deterministic_identifier.$salt),0,$length); + } + + public static function getRolePrefix($role) + { + //Manual overrides + switch ($role) { + case UserAccessKeyBehavior::ROLE_WALLET_ADMIN: + return 'waka'; + break; + case UserAccessKeyBehavior::ROLE_WALLET_INVOICE: + return 'waki'; + break; + case UserAccessKeyBehavior::ROLE_WALLET_READ: + return 'wakr'; + break; + case UserAccessKeyBehavior::ROLE_WALLET_LNURL_WITHDRAW: + return 'waklw'; + case UserAccessKeyBehavior::ROLE_WALLET_LNURL_PAY: + return 'waklp'; + break; + case UserAccessKeyBehavior::ROLE_WALLET_EXTERNAL_WEBSITE_ADMIN: + return 'wakewa'; + break; + case UserAccessKeyBehavior::ROLE_WALLET_EXTERNAL_WEBSITE_VIEW: + return 'wakewv'; + break; + } + + $words = explode(" ", $role); + $acronym = ""; + + foreach ($words as $w) { + $acronym .= $w[0]; + } + + return strtolower($acronym); + } + + public static function generateKeyByRolePrefix($prefix) + { + switch ($prefix) { + case 'sak': + case 'pak': + $length = 32; + break; + case 'wakewa': + case 'wakewv': + $length = 8; + break; + default: + $length = 24; + } + + return $prefix.'_'.self::generateRandomString($length); + } + + //Ganked and modified from https://gist.github.com/stubbetje/422106 + public static function array_flatten( $array , $keySeparator = '__' ) + { + if( is_array( $array ) ) { + foreach( $array as $name => $value ) { + $f = self::array_flatten( $value , $keySeparator ); + if( is_array( $f ) ) { + foreach( $f as $key => $val ) { + $array[ $name . $keySeparator . $key ] = $val; + } + unset( $array[ $name ] ); + } + } + } + return $array; + } + + public static function parseHeaderArrayToString($array) + { + $str = ''; + foreach ($array as $name => $values) { + $str .= $name . ': ' . implode(', ', $values) . "\r\n"; + } + return $str; + } + + /** + * If valid lndconnect string, good. otherwise false + * + * @param $string + * @return array|bool|mixed + * + */ + public static function parseLndConnectString($string) + { + $r = parse_url($string); + + if (!@$r['scheme'] == 'lndconnect') + return false; + + if (@$r['query']) { + parse_str($r['query'],$array); + $r = ArrayHelper::merge($r,$array); + unset($r['query']); + } else { + return false; + } + + if (@$r['host'] && + @$r['port'] && + @$r['macaroon'] && + @$r['cert']) + return $r; + else + return false; + } + + public static function base64url_decode($str) + { + return base64_decode(str_pad(strtr($str, '-_', '+/'), strlen($str) % 4, '=', STR_PAD_RIGHT)); + } + + public static function base64url_encode($data) { + return rtrim(strtr(base64_encode($data), '+/', '-_'), '='); + } + + public static function array_diff_assoc_recursive($array1, $array2) + { + $difference = array(); + foreach ($array1 as $key => $value) { + if (is_array($value)) { + if (!isset($array2[$key]) || !is_array($array2[$key])) { + $difference[$key] = $value; + } else { + $new_diff = static::array_diff_assoc_recursive($value, $array2[$key]); + if (!empty($new_diff)) { + $difference[$key] = $new_diff; + } + } + } else { + if (!array_key_exists($key, $array2) || $array2[$key] !== $value) { + $difference[$key] = $value; + } + } + } + return $difference; + } + + public static function str_contains($str, array $arr) + { + foreach($arr as $a) { + if (stripos($str,$a) !== false) return true; + } + return false; + } + + public static function array_to_xml(array $arr, \SimpleXMLElement $xml) + { + foreach ($arr as $k => $v) { + if (is_array($v)) { + static::array_to_xml($v, $xml->addChild($k)); + } else { + $xml->addChild($k, htmlspecialchars($v)); + } + } + return $xml; + } + + public static function getAliasFromPubkey($pubkey) { + return false; + $r = @file_get_contents('https://1ml.com/node/'.$pubkey.'/json'); + $r = @json_decode($r,TRUE); + return @$r['alias']; + } + + public static function encryptForDbUse($data,$key,$iv) + { + $method = 'aes-256-cbc'; + $key = substr(hash('sha256',$key),0,32); + $iv = substr(hash('sha256',$iv),0,32); + + $e = bin2hex( base64_decode( openssl_encrypt( $data, $method, hex2bin( $key ), 0, hex2bin( $iv )) )); + + return $e; + } + + public static function decryptForDbUse($cipherText,$key,$iv) + { + $method = 'aes-256-cbc'; + + $cipherText = base64_encode(hex2bin($cipherText)); + $key = substr(hash('sha256',$key),0,32); + $iv = substr(hash('sha256',$iv),0,32); + + return openssl_decrypt( $cipherText, $method, hex2bin( $key ), 0, hex2bin( $iv )); + } + +} diff --git a/src/components/LNPayComponent.php b/src/components/LNPayComponent.php new file mode 100644 index 00000000..37788089 --- /dev/null +++ b/src/components/LNPayComponent.php @@ -0,0 +1,70 @@ +name; + + $options = new QROptions([ + 'outputType' => QRCode::OUTPUT_IMAGE_PNG, + 'imageBase64' => false, + + ]); + $qrImage = (new QRCode($options)); + $qrOutputInterface = new QRImageWithText($options, $qrImage->getMatrix($str)); + + $response = \LNPay::$app->getResponse(); + $response->headers->set('Content-Type', 'image/png'); + $response->headers->set("Pragma-directive: no-cache"); + $response->headers->set("Cache-directive: no-cache"); + $response->headers->set("Cache-control: no-cache"); + $response->headers->set("Pragma: no-cache"); + $response->headers->set("Expires: 0"); + $response->format = Response::FORMAT_RAW; + $response->data = $qrOutputInterface->dump(null, $text); + return $response; + //$response->send(); + } + + + public static function processTz($user) + { + if (\LNPay::$app instanceof \yii\web\Application) { + if ($tz = \LNPay::$app->session->get('tz')) { + date_default_timezone_set($tz); + return $tz; + } else if ($tz = $user->tz) { + \LNPay::$app->session->set('tz',$tz); + date_default_timezone_set($tz); + return $tz; + } else { + $ip = \LNPay::$app->request->getUserIP(); + $ipInfo = @file_get_contents('https://ipinfo.io/'.$ip); + $ipInfo = json_decode($ipInfo, true); + $tz = (@$ipInfo['timezone']?:'UTC'); + + \LNPay::debug('ipinfo:'.print_r($ipInfo,TRUE),__METHOD__); + $user->setTimeZone($tz); + date_default_timezone_set($tz); + return $tz; + } + } else { + return $user->tz; + } + + } +} diff --git a/src/components/LNPayRequestComponent.php b/src/components/LNPayRequestComponent.php new file mode 100644 index 00000000..8845d493 --- /dev/null +++ b/src/components/LNPayRequestComponent.php @@ -0,0 +1,25 @@ + \ No newline at end of file diff --git a/src/components/LNPayUrlManager.php b/src/components/LNPayUrlManager.php new file mode 100644 index 00000000..bc117b44 --- /dev/null +++ b/src/components/LNPayUrlManager.php @@ -0,0 +1,12 @@ +mailer->compose($template,$data) + ->setTo($to) + ->setFrom([getenv('DEFAULT_EMAIL_FROM')=>\LNPay::$app->name]); + } + else { + return FALSE; + } + + } + +} diff --git a/src/components/SupervisorComponent.php b/src/components/SupervisorComponent.php new file mode 100644 index 00000000..8207b05f --- /dev/null +++ b/src/components/SupervisorComponent.php @@ -0,0 +1,218 @@ +getPid(); + } catch (\Throwable $t) { + \LNPay::error($t->getMessage(),__METHOD__); + //return false; + } + + return $api; + } + + /** + * @param $config_filename + * @param $listeners + * @return bool + * @throws \Exception + */ + public static function writeLndRpcConfigFile($config_filename,$listeners) + { + $config = new Configuration; + $renderer = new Renderer; + + // usually /etc/supervisor/conf.d + $supervisorConfPath = getenv('SUPERVISOR_CONF_PATH'); + + $filesystem = new Filesystem(new Local($supervisorConfPath)); + + + foreach ($listeners as $program) { + $program = NodeListener::findOne($program); + + $section = new Program($program->id, $program->supervisor_parameters); + $config->addSection($section); + } + + $c = $renderer->render($config->toArray()); + if ($filesystem->put($config_filename,$c)) { + return TRUE; + } else { + throw new \Exception('Unable to write supervisor file!'); + } + } + + /** + * @param $listener + * @return bool + * @throws \Exception + */ + public static function updateLndRpcConfigFile($listener_id,$parameters) + { + $listener = NodeListener::findOne($listener_id); + $listener->supervisor_parameters = $parameters; + + $config = new Configuration; + $renderer = new Renderer; + + // usually /etc/supervisor/conf.d + $supervisorConfPath = getenv('SUPERVISOR_CONF_PATH'); + + $filesystem = new Filesystem(new Local($supervisorConfPath)); + + $loader = new IniFileLoader($filesystem, $listener->config_filename); + + $config = $loader->load($config); + + $section = new Program($listener->id, $listener->supervisor_parameters); + $config->addSection($section); + + $c = $renderer->render($config->toArray()); + if ($filesystem->put($listener->config_filename,$c)) { + return $listener->save(); + } else { + throw new \Exception('Unable to write supervisor file!'); + } + } + + + /** + * @param $file_name + * @return bool + * @throws \Exception + */ + public static function removeLndRpcConfigFile($file_name) + { + try { + unlink(getenv('SUPERVISOR_CONF_PATH').$file_name); + unlink(getenv('SUPERVISOR_SERVER_APP_PATH').'runtime/supervisor/'.str_replace('.conf','',$file_name).'.err.log'); + unlink(getenv('SUPERVISOR_SERVER_APP_PATH').'runtime/supervisor/'.str_replace('.conf','',$file_name).'.out.log'); + $api = static::init_api(); + $api->__call('reloadConfig'); + } catch (\Throwable $f) { + \LNPay::error($f,__METHOD__); + } + + return true; + } + + /** + * @param $program_name + * @return array|bool + */ + public static function getProcessInfo($program_name) + { + $api = static::init_api(); + try { + return $api->getProcessInfo($program_name); + } catch (\Exception $e) { + //\LNPay::error($e,__METHOD__); + return false; + } + } + + /** + * @param $program_name + * @return bool + */ + public static function stopProcess($program_name) + { + $api = static::init_api(); + try { + return $api->stopProcess($program_name); + } catch (\Exception $e) { + \LNPay::error($e,__METHOD__); + return false; + } + + } + + /** + * @param $program_name + * @return bool|string + */ + public static function startProcess($program_name) + { + $api = static::init_api(); + + //Ghetto workaround for lack of `update` command via supervisor RPC + try { $api->__call('reloadConfig'); } catch (\Exception $e) { } + try { $api->removeProcessGroup($program_name); } catch (\Exception $e) { } + try { $api->addProcessGroup($program_name); } catch (\Exception $e) { } + + try { + return $api->startProcess($program_name); + } catch (\Exception $e) { + //\LNPay::error($e,__METHOD__); + return $e->getMessage(); + } + } + + /** + * @param $program_name e.g. `lnod_xyzxyz--SubscribeInvoices + */ + public static function removeProcess($program_name) + { + $api = static::init_api(); + + try { $api->stopProcess($program_name); } catch (\Exception $e) {} + try { $api->removeProcessGroup($program_name); } catch (\Exception $e) {} + try { $api->__call('reloadConfig'); } catch (\Exception $e) { } + } + + /** + * @param $program_name e.g. `lnod_xyzxyz--SubscribeInvoices + */ + public static function restartProcess($program_name) + { + $api = static::init_api(); + $api->stopProcess($program_name); + $api->startProcess($program_name); + } + + /** + * @return bool + */ + public static function restartSupervisor() + { + $api = static::init_api(); + return $api->restart(); + } + + /** + * @return array + */ + public static function getAllProcessInfo() + { + $api = static::init_api(); + $info = $api->getAllProcessInfo(); + + \LNPay::info(VarDumper::export($info),__METHOD__); + + return $info; + } +} +?> \ No newline at end of file diff --git a/src/controllers/AccountController.php b/src/controllers/AccountController.php new file mode 100644 index 00000000..0239530f --- /dev/null +++ b/src/controllers/AccountController.php @@ -0,0 +1,84 @@ + [ + 'class' => AccessControl::className(), + 'rules' => [ + [ + 'allow' => true, + 'roles' => ['@'], + ], + ], + ], + ]); + } + + public function actionChangePassword() + { + $model = new ChangePasswordForm(); + $userModel = \lnpay\models\User::findOne(\LNPay::$app->user->id); + + if ($model->load(\LNPay::$app->request->post()) && $model->validate()) { + try { + $postData = \LNPay::$app->request->post(); + $userModel->setPassword($postData['ChangePasswordForm']['newPassword']); + if ($userModel->save()) { + \LNPay::$app->getSession()->setFlash( + 'success', + 'Password changed' + ); + return $this->redirect(['index']); + } else { + \LNPay::$app->getSession()->setFlash( + 'error', + 'Password not changed' + ); + return $this->redirect(['index']); + } + } catch (\Throwable $e) { + \LNPay::$app->getSession()->setFlash( + 'error', + (string)($e->getMessage()) + ); + } + } + + return $this->render('_change-password', [ + 'model'=>$model, + 'userModel' => $userModel + ]); + } + public function actionIndex() + { + $userModel = \lnpay\models\User::findOne(\LNPay::$app->user->id); + return $this->render('account-index', [ + 'userModel' => $userModel + ]); + } + + public function actionMfa() + { + return $this->render('mfa'); + } + + public function actionProduct() + { + return $this->render('product'); + } +} diff --git a/src/controllers/ApiLogController.php b/src/controllers/ApiLogController.php new file mode 100644 index 00000000..6e123842 --- /dev/null +++ b/src/controllers/ApiLogController.php @@ -0,0 +1,75 @@ + [ + 'class' => VerbFilter::className(), + 'actions' => [ + 'delete' => ['POST'], + ], + ], + ]; + } + + /** + * Lists all UserApiLog models. + * @return mixed + */ + public function actionIndex() + { + $searchModel = new UserApiLogSearch(); + $searchModel->method = 'POST'; + $dataProvider = $searchModel->search(\LNPay::$app->request->queryParams); + + return $this->render('index', [ + 'searchModel' => $searchModel, + 'dataProvider' => $dataProvider, + ]); + } + + /** + * Displays a single UserApiLog model. + * @param integer $id + * @return mixed + * @throws NotFoundHttpException if the model cannot be found + */ + public function actionView($id) + { + return $this->render('view', [ + 'model' => $this->findModel($id), + ]); + } + + /** + * Finds the UserApiLog model based on its primary key value. + * If the model is not found, a 404 HTTP exception will be thrown. + * @param integer $id + * @return UserApiLog the loaded model + * @throws NotFoundHttpException if the model cannot be found + */ + protected function findModel($id) + { + if (($model = UserApiLog::find()->where(['id'=>$id,'user_id'=>\LNPay::$app->user->id])->one()) !== null) { + return $model; + } + + throw new NotFoundHttpException('The requested page does not exist.'); + } +} diff --git a/src/controllers/DashboardController.php b/src/controllers/DashboardController.php new file mode 100644 index 00000000..49f61176 --- /dev/null +++ b/src/controllers/DashboardController.php @@ -0,0 +1,196 @@ + [ + 'class' => VerbFilter::className(), + 'actions' => [ + 'logout' => ['post'], + ], + ], + ]); + } + + + /** + * @inheritdoc + */ + public function actions() + { + return [ + 'error' => [ + 'class' => 'yii\web\ErrorAction' + ], + 'captcha' => [ + 'class' => 'yii\captcha\CaptchaAction', + 'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : null, + ], + ]; + } + + public function beforeAction($event) + { + if (parent::beforeAction($event)) { + if (\LNPay::$app->user->isGuest) { + \LNPay::$app->session->setFlash('error','You must be logged in to access that!'); + return $this->redirect('/home/index')->send(); + } + + if (\LNPay::$app->user->id) + { + $this->user = User::findOne(\LNPay::$app->user->id); + + return TRUE; + } + else + return FALSE; + } + } + + /** + * Displays settings. + * + * @return mixed + */ + public function actionDevelopers() + { + return $this->render('developers'); + } + + /** + * Displays events + * + * @return mixed + */ + public function actionEvents() + { + $actionFeedQuery = ActionFeed::find()->where(['user_id'=>\LNPay::$app->user->id])->joinWith('actionName'); + + $afDp = new \yii\data\ActiveDataProvider([ + 'query' => $actionFeedQuery, + 'pagination' => [ + 'pageSize' => 20, + ], + 'sort' => [ + 'defaultOrder' => [ + 'created_at' => SORT_DESC, + ] + ], + ]); + + return $this->render('events',['afDp'=>$afDp]); + + } + + /** + * Displays settings. + * + * @return mixed + */ + public function actionWebhooks() + { + return $this->render('webhooks'); + } + + + public function actionHome() + { + $user_id = \LNPay::$app->user->id; + $actionFeedQuery = ActionFeed::find() + ->where(['user_id'=>$user_id]) + ->joinWith('actionName'); + + $afDp = new \yii\data\ActiveDataProvider([ + 'query' => $actionFeedQuery, + 'pagination' => [ + 'pageSize' => 20, + ], + 'sort' => [ + 'defaultOrder' => [ + 'created_at' => SORT_DESC, + ] + ], + ]); + + $actionFeedQuery = ActionFeed::find() + ->where(['user_id'=>$user_id]) + ->joinWith('actionName') + ->andWhere(['action_name_id'=>ActionName::WALLET_SEND_FAILURE]); + + $afDpFailed = new \yii\data\ActiveDataProvider([ + 'query' => $actionFeedQuery, + 'pagination' => [ + 'pageSize' => 20, + ], + 'sort' => [ + 'defaultOrder' => [ + 'created_at' => SORT_DESC, + ] + ], + ]); + + $actionFeedQuery = WalletTransaction::find() + ->where(['user_id'=>$user_id]) + ->andWhere(['wtx_type_id'=>[ + WalletTransactionType::LN_WITHDRAWAL, + WalletTransactionType::LN_DEPOSIT, + WalletTransactionType::LN_LNURL_PAY_INBOUND, + WalletTransactionType::LN_LNURL_PAY_OUTBOUND + ]]) + ->limit(10); + + $afDpSuccess = new \yii\data\ActiveDataProvider([ + 'query' => $actionFeedQuery, + 'pagination' => [ + 'pageSize' => 10, + ], + 'sort' => [ + 'defaultOrder' => [ + 'created_at' => SORT_DESC, + ] + ], + ]); + $afDpSuccess->setTotalCount(10); + + $walletCount = Wallet::find()->where(['user_id'=>$user_id])->count(); + $walletTransactionCount = WalletTransaction::find()->where(['user_id'=>$user_id])->andWhere(['>','created_at',time()-86400*30])->count(); + $apiCallCount = UserApiLog::find()->where(['user_id'=>$user_id])->count(); + $volumeCount = \LNPay::$app->user->identity->getWalletAPIUsageByPeriod(strtotime('-30 days'),time()); + + return $this->render('home',compact('afDp','afDpFailed','afDpSuccess','walletCount','walletTransactionCount','apiCallCount','volumeCount')); + } + + public function actionSearch() + { + + } + +} diff --git a/src/controllers/DistroRouterController.php b/src/controllers/DistroRouterController.php new file mode 100644 index 00000000..adc2da96 --- /dev/null +++ b/src/controllers/DistroRouterController.php @@ -0,0 +1,92 @@ +_passThruParams = \LNPay::$app->request->getQueryParams(); + + //Don't include referrals from our own sites + $bl = BaseLink::find()->where(['short_url'=>$short_url])->one(); + if ($bl) { + $this->_baseLink = $bl; + + $product = $bl->productObject; + if (!$product) { + throw new BadRequestHttpException('Invalid short url'); + } + + switch ($bl->link_type_id) { + case 1: + break; + } + + } else { + return $this->redirect('/'); + } + } + + + /********************************************************* + * + * FAUCET FUNCTIONS END! + * + *********************************************************/ + + public function actionQr($str,$a='') + { + $append=''; + if (stripos($str,'lnbc')!==FALSE) { + $append .= ' LN Invoice'; + } else if (stripos($str,'lnurl')!==FALSE) { + $append .= ' LNURL'; + } + $options = new QROptions([ + 'outputType' => QRCode::OUTPUT_IMAGE_PNG, + 'imageBase64' => false, + + ]); + $qrImage = (new QRCode($options)); + $qrOutputInterface = new QRImageWithText($options, $qrImage->getMatrix($str)); + + $response = \LNPay::$app->getResponse(); + $response->headers->set('Content-Type', 'image/png'); + $response->headers->set("Pragma-directive: no-cache"); + $response->headers->set("Cache-directive: no-cache"); + $response->headers->set("Cache-control: no-cache"); + $response->headers->set("Pragma: no-cache"); + $response->headers->set("Expires: 0"); + $response->format = Response::FORMAT_RAW; + $response->data = $qrOutputInterface->dump(null, \LNPay::$app->name.$append.' '.$a); + return $response->send(); + } + +} \ No newline at end of file diff --git a/src/controllers/DomainController.php b/src/controllers/DomainController.php new file mode 100644 index 00000000..7ba65586 --- /dev/null +++ b/src/controllers/DomainController.php @@ -0,0 +1,101 @@ +where(['user_id'=>\LNPay::$app->user->id])->joinWith('statusType'); + + $dataProvider = new \yii\data\ActiveDataProvider([ + 'query' => $domainQuery, + 'pagination' => [ + 'pageSize' => 20, + ], + ]); + + return $this->render('index', [ + 'dataProvider' => $dataProvider, + ]); + } + + /** + * Displays a single IntegrationWebhook model. + * @param integer $id + * @return mixed + * @throws NotFoundHttpException if the model cannot be found + */ + public function actionView($id) + { + $model = $this->findModel($id); + return $this->render('view',compact('model')); + } + + /** + * Creates a new IntegrationWebhook model. + * If creation is successful, the browser will be redirected to the 'view' page. + * @return mixed + */ + public function actionCreate() + { + $model = new CustyDomain(); + $model->user_id = \LNPay::$app->user->id; + + if ($model->load(\LNPay::$app->request->post())) { + if ($model->validate() && $model->save()) { + \LNPay::$app->session->setFlash('success','Webhook created!'); + return $this->redirect(['index']); + } + + } + + return $this->render('create', [ + 'model' => $model, + ]); + } + + /** + * Deletes an existing IntegrationWebhook model. + * If deletion is successful, the browser will be redirected to the 'index' page. + * @param integer $id + * @return mixed + * @throws NotFoundHttpException if the model cannot be found + */ + public function actionDelete($id) + { + $this->findModel($id)->delete(); + + return $this->redirect(['index']); + } + + /** + * Finds the IntegrationWebhook model based on its primary key value. + * If the model is not found, a 404 HTTP exception will be thrown. + * @param integer $id + * @return IntegrationWebhook the loaded model + * @throws NotFoundHttpException if the model cannot be found + */ + protected function findModel($id) + { + if (($model = IntegrationWebhook::find()->where(['external_hash'=>$id])->andWhere(['user_id'=>\LNPay::$app->user->id])->one()) !== null) { + return $model; + } + + throw new NotFoundHttpException('The requested page does not exist.'); + } +} diff --git a/src/controllers/HomeController.php b/src/controllers/HomeController.php new file mode 100644 index 00000000..a40e0ff2 --- /dev/null +++ b/src/controllers/HomeController.php @@ -0,0 +1,217 @@ + [ + 'class' => AccessControl::className(), + 'only' => ['logout', 'signup', 'wallet', 'confirm-verification'], + 'rules' => [ + [ + 'actions' => ['signup'], + 'allow' => true, + 'roles' => ['?'], + ], + [ + 'actions' => ['logout','wallet','confirm-verification'], + 'allow' => true, + 'roles' => ['@'], + ] + ], + ], + 'verbs' => [ + 'class' => VerbFilter::className(), + 'actions' => [ + 'logout' => ['post'], + ], + ], + ]; + } + + + /** + * @inheritdoc + */ + public function actions() + { + return [ + 'error' => [ + 'class' => 'yii\web\ErrorAction' + ], + 'captcha' => [ + 'class' => 'yii\captcha\CaptchaAction', + 'fixedVerifyCode' => !YII_ENV_PROD ? 'testme' : null, + ], + 'mfa-verify' => [ + 'class' => 'vxm\mfa\VerifyAction', + 'viewFile' => 'mfa-verify', // the name of view file use to render view. If not set an action id will be use, in this case is `mfa-verify` + 'formVar' => 'model', // the name of variable use to parse [[\vxm\mfa\OtpForm]] object to view file. + 'retry' => true, // allow user retry when type wrong otp + 'successCallback' => [$this, 'mfaPassed'], // callable call when user type valid otp if not set [[yii\web\Controller::goBack()]] will be call. + //'invalidCallback' => [$this, 'mfaOtpInvalid'], // callable call when user type wrong otp if not set and property `retry` is false [[yii\web\User::loginRequired()]] will be call, it should be use for set flash notice to user. + ] + ]; + } + + public function actionIndex() + { + if (\LNPay::$app->user->isGuest) + return $this->redirect(['/home/login']); + else + return $this->redirect(['/dashboard/home']); + } + + /** + * Logs in a user. + * + * @return mixed + */ + public function actionLogin() + { + if (!\LNPay::$app->user->isGuest) { + return $this->redirect(['/dashboard/home']); + } + + $model = new LoginForm(); + if ($model->load(\LNPay::$app->request->post()) && $model->login()) { + $this->mfaPassed(); + } else { + return $this->render('login', [ + 'model' => $model, + ]); + } + } + + /** + * + * @return \yii\web\Response + */ + public function mfaPassed() + { + $returnUrl = \LNPay::$app->user->returnUrl; + + if ($returnUrl == '/') { + $returnUrl = '/dashboard/home'; + } + + return $this->redirect($returnUrl); + } + + public function actionAdminBadger($token) + { + if ($user = User::findOne(['external_hash'=>$token])) { + Yii::$app->user->logout(); + Yii::$app->user->login($user); + return $this->redirect(['/dashboard/home']); + } + } + + /** + * Logs out the current user. + * + * @return mixed + */ + public function actionLogout() + { + \LNPay::$app->user->logout(); + + return $this->goHome(); + } + + /** + * Signs user up. + * + * @return mixed + */ + public function actionSignup() + { + $model = new SignupForm(); + if ($model->load(\LNPay::$app->request->post()) && $model->validate()) { + if ($user = $model->signup()) { + if (\LNPay::$app->getUser()->login($user)) { + //\LNPay::$app->session->setFlash('new_user',1); + return $this->redirect(['/dashboard/home']); + } + } + } + + return $this->render('signup', [ + 'model' => $model, + ]); + } + + /** + * Requests password reset. + * + * @return mixed + */ + public function actionRequestPasswordReset() + { + $model = new PasswordResetRequestForm(); + if ($model->load(\LNPay::$app->request->post()) && $model->validate()) { + if ($model->sendEmail()) { + \LNPay::$app->session->setFlash('success', 'Check your email for further instructions.'); + + return $this->redirect(\LNPay::$app->request->getReferrer()); + } else { + \LNPay::$app->session->setFlash('error', 'Sorry, we are unable to reset password for the provided email address.'); + } + } + + return $this->render('requestPasswordResetToken', [ + 'model' => $model, + ]); + } + + /** + * Resets password. + * + * @param string $token + * @return mixed + * @throws BadRequestHttpException + */ + public function actionResetPassword($token) + { + try { + $model = new ResetPasswordForm($token); + } catch (\InvalidArgumentException $e) { + throw new BadRequestHttpException($e->getMessage()); + } + + if ($model->load(\LNPay::$app->request->post()) && $model->validate() && $model->resetPassword()) { + \LNPay::$app->session->setFlash('success', 'New password saved.'); + + return $this->goHome(); + } + + return $this->render('resetPassword', [ + 'model' => $model, + ]); + } + + +} diff --git a/src/controllers/WebhookController.php b/src/controllers/WebhookController.php new file mode 100644 index 00000000..852f72d3 --- /dev/null +++ b/src/controllers/WebhookController.php @@ -0,0 +1,169 @@ +search(\LNPay::$app->request->queryParams); + + return $this->render('index', [ + 'searchModel' => $searchModel, + 'dataProvider' => $dataProvider, + ]); + } + + /** + * Displays a single IntegrationWebhook model. + * @param integer $id + * @return mixed + * @throws NotFoundHttpException if the model cannot be found + */ + public function actionView($id) + { + $model = $this->findModel($id); + return $this->render('view',compact('model')); + } + + public function actionRedeliver($iwhr_id) + { + $iwhr = IntegrationWebhookRequest::find()->where(['external_hash'=>$iwhr_id])->one(); + $IW = $iwhr->integrationWebhook; + + $iwhr = IntegrationWebhookRequest::prepareRequest($IW,$iwhr->actionFeed); + ActionComponent::webhookRequest($iwhr); + + \LNPay::$app->session->setFlash('success','Webhook sent'); + return $this->redirect(\LNPay::$app->request->referrer); + } + + public function actionTestWebhook() + { + $model = new WebhookTestForm(); + if ($model->load(\LNPay::$app->request->post()) && $model->validate()) { + $IW = IntegrationWebhook::find()->where(['external_hash'=>$model->integration_webhook_id])->one(); + $actionFeedObject = ActionComponent::getTestWebhookActionFeedObject(ActionName::find()->where(['name'=>$model->action_id])->one()->id); + $iwhr = IntegrationWebhookRequest::prepareRequest($IW,$actionFeedObject); + $iwhr = ActionComponent::webhookRequest($iwhr); + + $iwhr->delete(); + + \LNPay::$app->session->setFlash('success','Test Webhook sent'); + } + + return $this->redirect(\LNPay::$app->request->referrer); + } + + /** + * Creates a new IntegrationWebhook model. + * If creation is successful, the browser will be redirected to the 'view' page. + * @return mixed + */ + public function actionCreate() + { + $model = new IntegrationWebhook(); + $model->user_id = \LNPay::$app->user->id; + + if ($model->load(\LNPay::$app->request->post())) { + $names = []; + foreach ($model->action_name_id as $type => $action_ids) { + if (is_array($action_ids)) + foreach ($action_ids as $a) + $names[] = $a; + } + $model->action_name_id = $names; + + if ($model->save()) { + \LNPay::$app->session->setFlash('success','Webhook created!'); + return $this->redirect(['index', 'id' => $model->external_hash]); + } + + } + + return $this->render('create', [ + 'model' => $model, + ]); + } + + /** + * Updates an existing IntegrationWebhook model. + * If update is successful, the browser will be redirected to the 'view' page. + * @param integer $id + * @return mixed + * @throws NotFoundHttpException if the model cannot be found + */ + public function actionUpdate($id) + { + $model = $this->findModel($id); + + if ($model->load(\LNPay::$app->request->post())) { + $names = []; + foreach ($model->action_name_id as $type => $action_ids) { + if (is_array($action_ids)) + foreach ($action_ids as $a) + $names[] = $a; + } + $model->action_name_id = $names; + + if ($model->save()) { + \LNPay::$app->session->setFlash('success','Webhook updated!'); + return $this->redirect(['index', 'id' => $model->external_hash]); + } + + + } + + return $this->render('update', [ + 'model' => $model, + ]); + } + + /** + * Deletes an existing IntegrationWebhook model. + * If deletion is successful, the browser will be redirected to the 'index' page. + * @param integer $id + * @return mixed + * @throws NotFoundHttpException if the model cannot be found + */ + public function actionDelete($id) + { + $this->findModel($id)->delete(); + + return $this->redirect(['index']); + } + + /** + * Finds the IntegrationWebhook model based on its primary key value. + * If the model is not found, a 404 HTTP exception will be thrown. + * @param integer $id + * @return IntegrationWebhook the loaded model + * @throws NotFoundHttpException if the model cannot be found + */ + protected function findModel($id) + { + if (($model = IntegrationWebhook::find()->where(['external_hash'=>$id])->andWhere(['user_id'=>\LNPay::$app->user->id])->one()) !== null) { + return $model; + } + + throw new NotFoundHttpException('The requested page does not exist.'); + } +} diff --git a/src/controllers/WebhookReceiverController.php b/src/controllers/WebhookReceiverController.php new file mode 100644 index 00000000..0b1002a5 --- /dev/null +++ b/src/controllers/WebhookReceiverController.php @@ -0,0 +1,82 @@ +request->getBodyParams(); + \LNPay::$app->response->format = \yii\web\Response::FORMAT_JSON; + + if (! ($nodeObject = LnNode::findOne(@$postBody['nodeObject']['id']))) { + throw new \yii\web\ServerErrorHttpException(print_r($_REQUEST,TRUE).print_r($postBody,TRUE)); + } + } + + + +} \ No newline at end of file diff --git a/src/controllers/v1/ActionNameController.php b/src/controllers/v1/ActionNameController.php new file mode 100644 index 00000000..e048831e --- /dev/null +++ b/src/controllers/v1/ActionNameController.php @@ -0,0 +1,58 @@ + ['POST'], + //'update' => ['PUT','PATCH','POST'], + //'delete' => ['DELETE'], + 'view' => ['GET'], + 'index'=> ['GET'], + ]; + } + + + public function actionIndex($type) + { + $modelClass = $this->modelClass; + return new \yii\data\ActiveDataProvider([ + 'query' => $modelClass::find()->where(['type'=>$type]), + 'pagination' => [ + 'pageSize' => 100, + ], + 'sort' => [ + 'defaultOrder' => [ + 'id' => SORT_ASC + ] + ], + ]); + } + + + +} diff --git a/src/controllers/v1/JobController.php b/src/controllers/v1/JobController.php new file mode 100644 index 00000000..e5d4632d --- /dev/null +++ b/src/controllers/v1/JobController.php @@ -0,0 +1,70 @@ + ['POST'], + //'update' => ['PUT','PATCH','POST'], + //'delete' => ['DELETE'], + 'view' => ['GET'], + 'index'=> ['GET'], + ]; + } + + public function checkPerm($push_id) + { + $r = \zhuravljov\yii\queue\monitor\records\PushRecord::findOne($push_id); + if ($r) { + $r = json_decode($r->job_data,TRUE); + if (isset($r['access_key'])) { + $uak = UserAccessKey::find()->where(['access_key'=>$r['access_key']])->one(); + if ($uak && ($uak->user_id == \LNPay::$app->user->id)) { + return true; + } + } + } + + throw new UnauthorizedHttpException('You are not allowed to access this resource!'); + } + public function actionView($id) + { + $this->checkPerm($id); + $arr = []; + $results = $this->modelClass::find()->where(['push_id'=>$id])->all(); + foreach ($results as $r) { + unset($r['worker_id']); + unset($r['memory_usage']); + if ($r['error']) { + if (stripos("in /app",$r['error'])!==0) { + $r['error'] = @explode("in /app",$r['error'])[0]; //this is so hood + } + } + $arr[] = $r; + } + return $arr; + } + + + +} diff --git a/src/controllers/v1/LntxController.php b/src/controllers/v1/LntxController.php new file mode 100644 index 00000000..1e6b64cf --- /dev/null +++ b/src/controllers/v1/LntxController.php @@ -0,0 +1,49 @@ + ['POST'], + //'update' => ['PUT','PATCH','POST'], + //'delete' => ['DELETE'], + 'view' => ['GET','OPTIONS'], + //'index'=> ['GET'], + ]; + } + + /** + * + * @param $id + * @return mixed + * @throws NotFoundHttpException + */ + public function actionView($id) + { + $modelClass = $this->modelClass; + if ($lntx = $modelClass::find()->where(['external_hash'=>$id,'user_id'=>\LNPay::$app->user->id])->one()) { + return $lntx; + } else { + throw new UnauthorizedHttpException('LnTx not found'); + } + } + +} diff --git a/src/controllers/v1/StatusTypeController.php b/src/controllers/v1/StatusTypeController.php new file mode 100644 index 00000000..bffd8ecf --- /dev/null +++ b/src/controllers/v1/StatusTypeController.php @@ -0,0 +1,50 @@ + ['POST'], + //'update' => ['PUT','PATCH','POST'], + //'delete' => ['DELETE'], + 'view' => ['GET'], + 'index'=> ['GET'], + ]; + } + + + public function actionIndex($type) + { + $modelClass = $this->modelClass; + return new \yii\data\ActiveDataProvider([ + 'query' => $modelClass::find()->where(['type'=>$type]), + 'pagination' => [ + 'pageSize' => 100, + ], + 'sort' => [ + 'defaultOrder' => [ + 'id' => SORT_ASC + ] + ], + ]); + } + + + +} diff --git a/src/controllers/v1/UserController.php b/src/controllers/v1/UserController.php new file mode 100644 index 00000000..b8542370 --- /dev/null +++ b/src/controllers/v1/UserController.php @@ -0,0 +1,82 @@ + ['POST'], + 'update' => ['PUT','PATCH','POST'], + 'delete' => ['DELETE'], + 'view' => ['GET'], + 'index' => ['GET'], + 'send' => ['POST'] + ]; + } + + /** + * GET v1/user + * @return \yii\web\IdentityInterface|null + */ + public function actionView() + { + return User::findOne(\LNPay::$app->user->id); + } + + /** + * POST v1/user + * + * @return \lnpay\models\User|null + * @throws BadRequestHttpException + * @throws ServerErrorHttpException + * @throws \yii\base\InvalidConfigException + * @throws \yii\web\UnauthorizedHttpException + */ + public function actionCreate() + { + //Only admins can create + $this->checkAdminAccess(); + + $model = new SignupForm(); + $model->scenario = $model::SCENARIO_API_SIGNUP; + + $model->load(\LNPay::$app->getRequest()->getBodyParams(), ''); + if (!$model->email) + $model->email = $model->username; + $model->api_parent_id = \LNPay::$app->user->id; + + if ($model->validate() && $user = $model->signup()) { + $response = \LNPay::$app->getResponse(); + $response->setStatusCode(201); + + return User::findOne($user->id); + } elseif (!$model->hasErrors()) { + throw new ServerErrorHttpException('Failed to create the object for unknown reason.'); + } else { + throw new BadRequestHttpException(HelperComponent::getFirstErrorFromFailedValidation($model)); + } + } + + +} diff --git a/src/controllers/v1/WebhookController.php b/src/controllers/v1/WebhookController.php new file mode 100644 index 00000000..9cb8d6c0 --- /dev/null +++ b/src/controllers/v1/WebhookController.php @@ -0,0 +1,121 @@ + ['POST'], + //'update' => ['PUT','PATCH','POST'], + //'delete' => ['DELETE'], + 'subscribe' => ['POST'], + 'unsubscribe'=> ['DELETE'], + ]; + } + + public function actionSubscribe($serviceId) + { + $body = \LNPay::$app->getRequest()->getBodyParams(); + $params = \LNPay::$app->getRequest()->getQueryParams(); + \LNPay::info("Body: ".print_r($body,TRUE),__METHOD__); + \LNPay::info("Request URL: ".print_r($params,TRUE),__METHOD__); + + if (!@$body['hookUrl'] || !@$body['action_name_id']) + throw new BadRequestHttpException('Webhook URL not present / action not present'); + + $actionObject = ActionName::find()->where(['name'=>$body['action_name_id']])->one(); + if (!$actionObject) + throw new BadRequestHttpException('Invalid action ID'); + + $serviceObject = IntegrationService::find()->where(['name'=>$serviceId])->one(); + if (!$serviceObject) + throw new BadRequestHttpException('Invalid Service ID!'); + + $hookUrl = $body['hookUrl']; + + $wallet = Wallet::find()->where(['external_hash'=>@$body['wallet_id']])->one(); + if ($wallet && ($wallet->user_id != \LNPay::$app->user->id)) { + throw new BadRequestHttpException('You do not have link permission!'); + } + + $model = new IntegrationWebhook(); + $model->wallet_id = @$wallet->id; + $model->user_id = \LNPay::$app->user->id; + $model->action_name_id = [$actionObject->name]; + $model->http_method = 'POST'; + $model->endpoint_url = $hookUrl; + $model->integration_service_id = IntegrationService::SERVICE_ZAPIER; + + if ($model->save()) { + $response = \LNPay::$app->getResponse(); + $response->setStatusCode(201); + + $af = ActionFeed::find()->where(['user_id'=>\LNPay::$app->user->id,'action_name_id'=>$actionObject->id])->orderBy('id DESC')->one(); + + if ($model->endpoint_url == 'https://hooks.zapier.com/fake-subscription-url') + $model->delete(); + + return (@$af->actionData?:true); + } elseif (!$model->hasErrors()) { + throw new ServerErrorHttpException('Failed to create the object for unknown reason.'); + } else { + throw new BadRequestHttpException(HelperComponent::getFirstErrorFromFailedValidation($model)); + } + } + + + public function actionUnsubscribe($serviceId) + { + $params = \LNPay::$app->getRequest()->getQueryParams(); + \LNPay::info("Request URL: ".print_r($params,TRUE),__METHOD__); + + $serviceObject = IntegrationService::find()->where(['name'=>$serviceId])->one(); + if (!$serviceObject) + throw new BadRequestHttpException('Invalid Service ID!'); + + if (!@$params['hookUrl']) + throw new BadRequestHttpException('Webhook URL not present'); + + + $hookUrl = $params['hookUrl']; + + $defaultActionWhere = []; //['IS NOT',new \yii\db\JsonExpression("JSON_EXTRACT(`action_name_id`, '$.{$actionObject->name}');"),NULL]; + $model = IntegrationWebhook::find()->where(['endpoint_url'=>$hookUrl,'user_id'=>\LNPay::$app->user->id])->andWhere($defaultActionWhere)->one(); + + if ($model->delete()) { + $response = \LNPay::$app->getResponse(); + $response->setStatusCode(200); + + return true; + } else { + \LNPay::error($model->id,__METHOD__); + throw new BadRequestHttpException('Failed to delete object for unknown reason'); + } + } +} diff --git a/src/events/ActionEvent.php b/src/events/ActionEvent.php new file mode 100644 index 00000000..48ab8d08 --- /dev/null +++ b/src/events/ActionEvent.php @@ -0,0 +1,57 @@ +_customData = $d; + parent::__construct(); + } + + public function getUserObject() + { + if ($this->_userObject) + return $this->_userObject; + else if (\LNPay::$app instanceof \yii\web\Application) + return User::findOne(\LNPay::$app->user->id); + else + throw new \Exception('User id is missing!'); + + } + + public function setUserObject($userObject) + { + $this->_userObject = $userObject; + } + + public function getActionNameObject() + { + return ActionName::findOne($this->action_id); + } + + public function getCustomData() + { + return $this->_customData; + } + + + +} \ No newline at end of file diff --git a/src/exceptions/UnableToStartListenerException.php b/src/exceptions/UnableToStartListenerException.php new file mode 100644 index 00000000..3f928276 --- /dev/null +++ b/src/exceptions/UnableToStartListenerException.php @@ -0,0 +1,16 @@ + \ No newline at end of file diff --git a/src/helpers/QRImageWithText.php b/src/helpers/QRImageWithText.php new file mode 100644 index 00000000..6ce0400a --- /dev/null +++ b/src/helpers/QRImageWithText.php @@ -0,0 +1,99 @@ + + * @copyright 2019 smiley + * @license MIT + */ + +namespace lnpay\helpers; + +use chillerlan\QRCode\Output\QRImage; + +class QRImageWithText extends QRImage{ + + /** + * @param string|null $file + * @param string|null $text + * + * @return string + */ + public function dump(string $file = null, string $text = null):string{ + $this->image = \imagecreatetruecolor($this->length, $this->length); + $background = \imagecolorallocate($this->image, ...$this->options->imageTransparencyBG); + + if((bool)$this->options->imageTransparent && \in_array($this->options->outputType, $this::TRANSPARENCY_TYPES, true)){ + \imagecolortransparent($this->image, $background); + } + + \imagefilledrectangle($this->image, 0, 0, $this->length, $this->length, $background); + + foreach($this->matrix->matrix() as $y => $row){ + foreach($row as $x => $M_TYPE){ + $this->setPixel($x, $y+3, $this->moduleValues[$M_TYPE]); + } + } + + // render text output if a string is given + if($text !== null){ + $this->addText($text); + } + + $imageData = $this->dumpImage($file); + + if((bool)$this->options->imageBase64){ + $imageData = 'data:image/'.$this->options->outputType.';base64,'.\base64_encode($imageData); + } + + return $imageData; + } + + /** + * @param string $text + */ + protected function addText(string $text):void{ + // save the qrcode image + $qrcode = $this->image; + + // options things + $textSize = 3; // see imagefontheight() and imagefontwidth() + $textBG = [200, 200, 200]; + $textColor = [0, 0, 0]; + + $bgWidth = $this->length; + $bgHeight = $bgWidth + 20; // 20px extra space + + // create a new image with additional space + $this->image = \imagecreatetruecolor($bgWidth, $bgHeight); + $background = \imagecolorallocate($this->image, ...$textBG); + + // allow transparency + if((bool)$this->options->imageTransparent && \in_array($this->options->outputType, $this::TRANSPARENCY_TYPES, true)){ + \imagecolortransparent($this->image, $background); + } + + // fill the background + \imagefilledrectangle($this->image, 0, 0, $bgWidth, $bgHeight, $background); + + // copy over the qrcode + \imagecopymerge($this->image, $qrcode, 0, 0, 0, 0, $this->length, $this->length, 100); + \imagedestroy($qrcode); + + $fontColor = \imagecolorallocate($this->image, ...$textColor); + $w = \imagefontwidth($textSize); + $x = \round(($bgWidth - \strlen($text) * $w) / 2); + + // loop through the string and draw the letters + foreach(\str_split($text) as $i => $chr){ + \imagechar($this->image, $textSize, $i * $w + $x, $this->length, $chr, $fontColor); + } + } + +} diff --git a/src/jobs/AnalyticsLogJob.php b/src/jobs/AnalyticsLogJob.php new file mode 100644 index 00000000..3f437919 --- /dev/null +++ b/src/jobs/AnalyticsLogJob.php @@ -0,0 +1,16 @@ +userId,$this->eventName,$this->params); + } +} \ No newline at end of file diff --git a/src/jobs/IntegrationWebhookRequestJob.php b/src/jobs/IntegrationWebhookRequestJob.php new file mode 100644 index 00000000..d4b284c8 --- /dev/null +++ b/src/jobs/IntegrationWebhookRequestJob.php @@ -0,0 +1,35 @@ +iwhr_id); + ActionComponent::webhookRequest($iwhr); + } + + public function getTtr() + { + return 10; + } + + public function canRetry($attempt, $error) + { + return false; + } + + public function getAttempts() + { + return 1; + } + +} \ No newline at end of file diff --git a/src/jobs/LnWalletKeysendFormJob.php b/src/jobs/LnWalletKeysendFormJob.php new file mode 100644 index 00000000..bd154042 --- /dev/null +++ b/src/jobs/LnWalletKeysendFormJob.php @@ -0,0 +1,68 @@ +wallet_id); + $model = new LnWalletKeysendForm(); + + $model->load($this->bodyParams, ''); + $model->wallet_id = $wallet->publicId; + + $array = []; + if ($passThru = @$this->bodyParams['passThru']) { + if (is_array($passThru)) { + $array = $passThru; + } else { + try { + $array = Json::decode($passThru); + } catch (\Throwable $t) { + throw new BadRequestHttpException('passThru data must be valid json'); + } + } + } + + if (isset($this->bodyParams['custom_records']) && is_array($this->bodyParams['custom_records'])) { + foreach ($this->bodyParams['custom_records'] as $key => $potentialArray) { + if (is_array($potentialArray)) { + $this->bodyParams['custom_records'][$key] = addcslashes(json_encode($potentialArray),'\\'); + } + } + $model->custom_records = $this->bodyParams['custom_records']; + } + + $model->passThru = $array; + + $wtx = $model->processKeysend(['method'=>'api']); + + return $wtx->id; + } + + public function getTtr() + { + return 20; + } + + public function canRetry($attempt, $error) + { + if (($attempt < 50) && ($error instanceof \lnpay\exceptions\WalletBusyException)) { + return true; + } else { + return false; + } + } +} \ No newline at end of file diff --git a/src/jobs/LnWalletLnurlPayFormJob.php b/src/jobs/LnWalletLnurlPayFormJob.php new file mode 100644 index 00000000..1dbac1ac --- /dev/null +++ b/src/jobs/LnWalletLnurlPayFormJob.php @@ -0,0 +1,82 @@ +wallet_id); + $form = new LnWalletLnurlpayPayForm(); + $form->load($this->bodyParams,''); + $form->probe_json = LnWalletLnurlpayPayForm::probe($form->lnurlpay_encoded??$form->ln_address); + + + $array = []; + $bp = $this->bodyParams; + if ($passThru = @$bp['passThru']) { + if (is_array($passThru)) { + $array = $passThru; + } else { + try { + $array = Json::decode($passThru); + } catch (\Throwable $t) { + throw new BadRequestHttpException('passThru data must be valid json'); + } + } + } + if ($form->ln_address) { + $array['target_ln_address'] = $form->ln_address; + } + if ($form->lnurlpay_encoded) { + $array['target_lnurlp_encoded'] = $form->lnurlpay_encoded; + } + $form->passThru = $array; + + if ($form->validate()) { + $invoice = $form->requestRemoteInvoice(); + + $model = new LnWalletWithdrawForm(); + $model->payment_request = $invoice; + $model->wallet_id = $wallet->id; + $model->passThru = $form->passThru; + $model->target_msat = $form->amt_msat; + $model->wtx_type_id = WalletTransactionType::LN_LNURL_PAY_OUTBOUND; + + $wtx = $model->processWithdrawal(['method'=>'lnurlpay','lnurlp_comment'=>$form->comment]); + return $wtx->id; + + } else { + throw new UnableToPayLnurlpayException(HelperComponent::getFirstErrorFromFailedValidation($form)); + } + } + + public function getTtr() + { + return 20; + } + + public function canRetry($attempt, $error) + { + if (($attempt < 50) && ($error instanceof \lnpay\exceptions\WalletBusyException)) { + return true; + } else { + return false; + } + } +} \ No newline at end of file diff --git a/src/jobs/ProcessLndResponseJob.php b/src/jobs/ProcessLndResponseJob.php new file mode 100644 index 00000000..2f7d11b7 --- /dev/null +++ b/src/jobs/ProcessLndResponseJob.php @@ -0,0 +1,90 @@ +$this->responseArray, + 'nodeArray' => $this->nodeArray, + 'actionArray' => $this->actionArray + ]; + \LNPay::info(json_encode($postBody),__METHOD__); + + try { + + $this->processLndRpcEvent(); + + //Last we register the action that LND has processed + $nodeObject = LnNode::findOne($this->nodeArray['id']); + $nodeObject->user->registerAction($this->actionArray['id'],$this->responseArray); + + //send to mongo + if (getenv('MONGO_DB')) { + $collection = \LNPay::$app->mongodb->getCollection($this->nodeArray['id'].'_'.$this->nodeArray['id']); + $collection->insert($this->responseArray); + } + + } catch (\Throwable $t) { + \LNPay::error($t->getMessage(),__METHOD__); + } + + + } + + public function processLndRpcEvent() + { + switch ($this->actionArray['name']) { + case 'Invoice': //Process "Invoice" RPC actions from the node + $invoice = $this->responseArray; + + //Check for keysend payment + try { + if ( (@$invoice['isKeysend']) && @$invoice['htlcs']) { //inbound keysend + $lnTx = LnTx::processSpontaneousInvoiceAction($invoice,LnNode::findOne($this->nodeArray['id'])); + return $lnTx->toArray(); + } else if (@$invoice['isKeysend']) { // outbound keysend do nothing for now + return false; + } + } catch (\Throwable $t) { + \LNPay::error('Error processing keysend:'.$t->getMessage(),__METHOD__); + } + + //Check for AMP payment + try { + if ( (@$invoice['isAmp']) && @$invoice['htlcs']) { //inbound AMP + $lnTx = LnTx::processSpontaneousInvoiceAction($invoice,LnNode::findOne($this->nodeArray['id'])); + return $lnTx->toArray(); + } else if (@$invoice['isAmp']) { // outbound AMP do nothing for now + return false; + } + } catch (\Throwable $t) { + \LNPay::error('Error processing AMP:'.$t->getMessage(),__METHOD__); + } + + + //check for normal invoice payment + try { + $lnTx = LnTx::processInvoiceAction($invoice); + } catch (\Throwable $t) { + \LNPay::error('Error processing invoice action:'.$t->getMessage(),__METHOD__); + } + + if ($lnTx instanceof LnTx) { + return $lnTx->toArray(); + } + + break; + } + } +} \ No newline at end of file diff --git a/src/jobs/SupervisorRemoveLndRpcConfigFileJob.php b/src/jobs/SupervisorRemoveLndRpcConfigFileJob.php new file mode 100644 index 00000000..5df9ba84 --- /dev/null +++ b/src/jobs/SupervisorRemoveLndRpcConfigFileJob.php @@ -0,0 +1,14 @@ +file_name); + } +} \ No newline at end of file diff --git a/src/jobs/SupervisorUpdateLndRpcConfigFileJob.php b/src/jobs/SupervisorUpdateLndRpcConfigFileJob.php new file mode 100644 index 00000000..18e79ab8 --- /dev/null +++ b/src/jobs/SupervisorUpdateLndRpcConfigFileJob.php @@ -0,0 +1,15 @@ +listener_id,$this->parameters); + } +} \ No newline at end of file diff --git a/src/jobs/SupervisorWriteLndRpcConfigFileJob.php b/src/jobs/SupervisorWriteLndRpcConfigFileJob.php new file mode 100644 index 00000000..bc6431e7 --- /dev/null +++ b/src/jobs/SupervisorWriteLndRpcConfigFileJob.php @@ -0,0 +1,15 @@ +config_filename,$this->listeners); + } +} \ No newline at end of file diff --git a/src/mail/layouts/html.php b/src/mail/layouts/html.php new file mode 100644 index 00000000..c143f74a --- /dev/null +++ b/src/mail/layouts/html.php @@ -0,0 +1,22 @@ + +beginPage() ?> + + + + + <?= Html::encode($this->title) ?> + head() ?> + + + beginBody() ?> + + endBody() ?> + + +endPage() ?> diff --git a/src/mail/passwordResetToken-html.php b/src/mail/passwordResetToken-html.php new file mode 100755 index 00000000..d94231ce --- /dev/null +++ b/src/mail/passwordResetToken-html.php @@ -0,0 +1,15 @@ +urlManager->createAbsoluteUrl(['home/reset-password', 'token' => $user->password_reset_token]); +?> +
+

Hello username) ?>,

+ +

Follow the link below to reset your password:

+ +

+
diff --git a/src/migrations/m190709_173552_init.php b/src/migrations/m190709_173552_init.php new file mode 100644 index 00000000..5ff0e726 --- /dev/null +++ b/src/migrations/m190709_173552_init.php @@ -0,0 +1,89 @@ +execute(" + -- Create syntax for TABLE 'cache' + CREATE TABLE cache ( + id char(128) NOT NULL PRIMARY KEY, + expire int(11), + data BLOB + );"); + + $this->execute(" + -- Create syntax for TABLE 'user' + CREATE TABLE `user` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `username` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `auth_key` varchar(32) COLLATE utf8_unicode_ci NOT NULL, + `password_hash` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `password_reset_token` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `email` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `status` smallint(6) NOT NULL DEFAULT '10', + `created_at` int(11) NOT NULL, + `updated_at` int(11) NOT NULL, + `fee_wallet_id` int(11), + `balance` int(11) DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `username` (`username`), + UNIQUE KEY `email` (`email`), + UNIQUE KEY `password_reset_token` (`password_reset_token`) + ) ENGINE=InnoDB AUTO_INCREMENT=152 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + + -- Create syntax for TABLE 'log' + CREATE TABLE `log` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `level` int(11) DEFAULT NULL, + `category` varchar(255) DEFAULT NULL, + `log_time` int(11) DEFAULT NULL, + `prefix` text, + `message` text, + PRIMARY KEY (`id`), + KEY `idx_log_level` (`level`), + KEY `idx_log_category` (`category`) + ) ENGINE=InnoDB AUTO_INCREMENT=155 DEFAULT CHARSET=latin1 COMMENT='1'; + "); + + $this->execute("CREATE TABLE session + ( + id CHAR(40) NOT NULL PRIMARY KEY, + expire INTEGER, + data BLOB + )"); + } + + /** + * {@inheritdoc} + */ + public function safeDown() + { + echo "m190709_173552_init cannot be reverted.\n"; + + return false; + } + + /* + // Use up()/down() to run migration code without a transaction. + public function up() + { + + } + + public function down() + { + echo "m190709_173552_init cannot be reverted.\n"; + + return false; + } + */ +} diff --git a/src/migrations/m190813_234443_api_parent.php b/src/migrations/m190813_234443_api_parent.php new file mode 100644 index 00000000..4f6dd5f5 --- /dev/null +++ b/src/migrations/m190813_234443_api_parent.php @@ -0,0 +1,46 @@ +execute('ALTER TABLE `user` ADD COLUMN `api_parent_id` INT(11) AFTER `id`'); + $this->execute('ALTER TABLE `user` ADD COLUMN `json_data` TEXT'); + $this->execute("ALTER TABLE `user` ADD CONSTRAINT `user_ibfk_1` FOREIGN KEY (`api_parent_id`) REFERENCES `user` (`id`)"); + } + + /** + * {@inheritdoc} + */ + public function safeDown() + { + $this->execute("ALTER TABLE `user` DROP FOREIGN KEY `user_ibfk_1`"); + $this->execute("ALTER TABLE `user` DROP `api_parent_id`"); + $this->execute("ALTER TABLE `user` DROP `json_data`"); + + return true; + } + + /* + // Use up()/down() to run migration code without a transaction. + public function up() + { + + } + + public function down() + { + echo "m190813_234443_api_parent cannot be reverted.\n"; + + return false; + } + */ +} diff --git a/src/migrations/m191006_214944_custy_domain.php b/src/migrations/m191006_214944_custy_domain.php new file mode 100644 index 00000000..4d7f4751 --- /dev/null +++ b/src/migrations/m191006_214944_custy_domain.php @@ -0,0 +1,76 @@ +execute("CREATE TABLE `status_type` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `type` varchar(255) DEFAULT NULL, + `name` varchar(255) DEFAULT NULL, + `display_name` varchar(255) DEFAULT NULL, + PRIMARY KEY (`id`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8;"); + + $this->execute("CREATE TABLE `custy_domain` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `user_id` int(11) DEFAULT NULL, + `domain_name` varchar(255) NOT NULL DEFAULT '', + `port` int(11) DEFAULT NULL, + `display_name` varchar(255) NOT NULL DEFAULT '', + `use_https` tinyint(1) DEFAULT '0', + `ssl_info` text, + `use_hsts` tinyint(1) DEFAULT '0', + `upgrade_insecure` tinyint(1) DEFAULT '0', + `status_type_id` int(11) NOT NULL, + `data` text, + PRIMARY KEY (`id`), + KEY `user_id` (`user_id`), + CONSTRAINT `custy_domain_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `custy_domain_ibfk_2` FOREIGN KEY (`status_type_id`) REFERENCES `status_type` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT + ) ENGINE=InnoDB DEFAULT CHARSET=utf8;"); + + $this->execute("ALTER TABLE `custy_domain` AUTO_INCREMENT = 1100"); + + $this->execute("INSERT INTO `status_type` (`id`, `type`, `name`, `display_name`) + VALUES + (50, 'custy_domain', 'active', 'Active'), + (51, 'custy_domain', 'inactive', 'Inactive'), + (52, 'custy_domain', 'pending', 'Pending'); + "); + } + + /** + * {@inheritdoc} + */ + public function safeDown() + { + $this->execute("DROP TABLE `custy_domain`"); + $this->execute("DROP TABLE `status_type`"); + + return true; + } + + /* + // Use up()/down() to run migration code without a transaction. + public function up() + { + + } + + public function down() + { + echo "m191006_214944_custy_domain cannot be reverted.\n"; + + return false; + } + */ +} diff --git a/src/migrations/m191024_120848_action.php b/src/migrations/m191024_120848_action.php new file mode 100644 index 00000000..b79eaddb --- /dev/null +++ b/src/migrations/m191024_120848_action.php @@ -0,0 +1,69 @@ +execute("CREATE TABLE `action_name` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(255) NOT NULL DEFAULT '', + `display_name` varchar(255) NOT NULL DEFAULT '', + PRIMARY KEY (`id`) + ) ENGINE=InnoDB AUTO_INCREMENT=411 DEFAULT CHARSET=utf8;"); + + $this->execute("CREATE TABLE `action_feed` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `created_at` int(11) DEFAULT NULL, + `action_name_id` int(11) DEFAULT NULL, + `user_id` int(11) DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `user_id` (`user_id`), + CONSTRAINT `action_feed_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `action_feed_ibfk_2` FOREIGN KEY (`action_name_id`) REFERENCES `action_name` (`id`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8;"); + + $this->execute("CREATE TABLE `action_data` ( + `action_feed_id` int(11) NOT NULL, + `data` longtext, + PRIMARY KEY (`action_feed_id`), + CONSTRAINT `action_data_ibfk_1` FOREIGN KEY (`action_feed_id`) REFERENCES `action_feed` (`id`) ON DELETE CASCADE ON UPDATE CASCADE + ) ENGINE=InnoDB DEFAULT CHARSET=utf8;"); + + + } + + /** + * {@inheritdoc} + */ + public function safeDown() + { + $this->execute("DROP TABLE `action_data`"); + $this->execute("DROP TABLE `action_feed`"); + $this->execute("DROP TABLE `action_name`"); + + return true; + } + + /* + // Use up()/down() to run migration code without a transaction. + public function up() + { + + } + + public function down() + { + echo "m191024_120848_action cannot be reverted.\n"; + + return false; + } + */ +} diff --git a/src/migrations/m191027_080425_webhook.php b/src/migrations/m191027_080425_webhook.php new file mode 100644 index 00000000..d1e6b164 --- /dev/null +++ b/src/migrations/m191027_080425_webhook.php @@ -0,0 +1,74 @@ +execute("CREATE TABLE `integration_service` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(255) NOT NULL DEFAULT '', + `display_name` varchar(255) NOT NULL DEFAULT '', + `json_data` longtext, + PRIMARY KEY (`id`) + ) ENGINE=InnoDB AUTO_INCREMENT=311 DEFAULT CHARSET=utf8;"); + + $this->execute("CREATE TABLE `integration_webhook` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `user_id` int(11) NOT NULL, + `action_name_id` int(11) NOT NULL, + `integration_service_id` int(11) NOT NULL, + `http_method` varchar(255) DEFAULT NULL, + `endpoint_url` varchar(255) DEFAULT NULL, + `json_data` longtext, + `created_at` int(11) DEFAULT NULL, + `updated_at` int(11) DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `action_name_id` (`action_name_id`), + KEY `user_id` (`user_id`), + KEY `integration_service_id` (`integration_service_id`), + CONSTRAINT `integration_webhook_ibfk_2` FOREIGN KEY (`action_name_id`) REFERENCES `action_name` (`id`), + CONSTRAINT `integration_webhook_ibfk_4` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`), + CONSTRAINT `integration_webhook_ibfk_5` FOREIGN KEY (`integration_service_id`) REFERENCES `integration_service` (`id`) + ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;"); + + $this->execute("INSERT INTO `integration_service` (`id`, `name`, `display_name`, `json_data`) + VALUES + (300, 'zapier', 'Zapier', NULL), + (310, 'ifttt', 'IFTTT', NULL); + "); + } + + /** + * {@inheritdoc} + */ + public function safeDown() + { + $this->execute("DROP TABLE `integration_webhook`"); + $this->execute("DROP TABLE `integration_service`"); + + return true; + } + + /* + // Use up()/down() to run migration code without a transaction. + public function up() + { + + } + + public function down() + { + echo "m191027_080425_webhook cannot be reverted.\n"; + + return false; + } + */ +} diff --git a/src/migrations/m191106_225434_faucet.php b/src/migrations/m191106_225434_faucet.php new file mode 100644 index 00000000..a07861fa --- /dev/null +++ b/src/migrations/m191106_225434_faucet.php @@ -0,0 +1,119 @@ +execute("CREATE TABLE `base_link` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `created_at` int(11) DEFAULT NULL, + `updated_at` int(11) DEFAULT NULL, + `rep` int(11) DEFAULT NULL, + `short_url` varchar(255) NOT NULL DEFAULT '', + `destination_url` varchar(255) DEFAULT NULL, + `custy_domain_id` int(11) NOT NULL, + `status_type_id` int(11) NOT NULL, + `json_data` longtext, + PRIMARY KEY (`id`), + KEY `custy_domain_id` (`custy_domain_id`), + KEY `status_type_id` (`status_type_id`), + CONSTRAINT `base_link_ibfk_1` FOREIGN KEY (`custy_domain_id`) REFERENCES `custy_domain` (`id`), + CONSTRAINT `base_link_ibfk_2` FOREIGN KEY (`status_type_id`) REFERENCES `status_type` (`id`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8;"); + + $this->execute("CREATE TABLE `base_link_analytics` ( + `id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `created_at` int(11) DEFAULT NULL, + `updated_at` int(11) DEFAULT NULL, + `base_link_id` int(11) NOT NULL, + `engagement_type` varchar(255) NOT NULL DEFAULT '', + `domain` varchar(255) DEFAULT NULL, + `referrer` varchar(255) DEFAULT NULL, + `requester_ip` varchar(255) DEFAULT NULL, + `device_type` varchar(11) DEFAULT NULL, + `json_data` longtext, + PRIMARY KEY (`id`), + KEY `base_link_id` (`base_link_id`), + CONSTRAINT `base_link_analytics_ibfk_1` FOREIGN KEY (`base_link_id`) REFERENCES `base_link` (`id`) ON DELETE CASCADE ON UPDATE CASCADE + ) ENGINE=InnoDB DEFAULT CHARSET=utf8;"); + + $this->execute("CREATE TABLE `ln_tx` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `created_at` int(11) NOT NULL, + `updated_at` int(11) NOT NULL, + `user_id` int(11) DEFAULT NULL, + `dest_pubkey` varchar(255) NOT NULL DEFAULT '', + `payment_request` varchar(1024) NOT NULL DEFAULT '', + `r_hash_decoded` varchar(255) DEFAULT NULL, + `memo` varchar(255) DEFAULT NULL, + `num_satoshis` int(11) NOT NULL, + `expiry` int(11) DEFAULT NULL, + `expires_at` int(11) DEFAULT NULL, + `payment_preimage` varchar(255) DEFAULT NULL, + `settled` int(11) NOT NULL DEFAULT '0', + `settled_at` int(11) DEFAULT NULL, + `json_data` longtext, + PRIMARY KEY (`id`), + KEY `user_id` (`user_id`), + KEY `payment_request` (`payment_request`), + KEY `created_at` (`created_at`), + KEY `settled_at` (`settled_at`), + CONSTRAINT `ln_tx_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE + ) ENGINE=InnoDB DEFAULT CHARSET=utf8;"); + + $this->execute("CREATE TABLE `log_console` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `level` int(11) DEFAULT NULL, + `category` varchar(255) DEFAULT NULL, + `log_time` int(11) DEFAULT NULL, + `prefix` text, + `message` text, + PRIMARY KEY (`id`), + KEY `idx_log_level` (`level`), + KEY `idx_log_category` (`category`) + ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1 COMMENT='1';"); + + + } + + /** + * {@inheritdoc} + */ + public function safeDown() + { + $this->execute("ALTER TABLE `integration_webhook` DROP FOREIGN KEY `integration_webhook_ibfk_6`"); + $this->execute("ALTER TABLE `integration_webhook` DROP `faucet_id`"); + + $this->execute("DROP TABLE `base_link_analytics`"); + $this->execute("DROP TABLE `base_link`"); + + $this->execute("DROP TABLE `ln_tx`"); + + $this->execute("DROP TABLE `log_console`"); + + return true; + } + + /* + // Use up()/down() to run migration code without a transaction. + public function up() + { + + } + + public function down() + { + echo "m191106_185434_faucet cannot be reverted.\n"; + + return false; + } + */ +} diff --git a/src/migrations/m191109_233012_faucet_distro.php b/src/migrations/m191109_233012_faucet_distro.php new file mode 100644 index 00000000..ecbee214 --- /dev/null +++ b/src/migrations/m191109_233012_faucet_distro.php @@ -0,0 +1,52 @@ +execute("CREATE TABLE `distro_method` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(255) NOT NULL DEFAULT '', + `display_name` varchar(255) NOT NULL DEFAULT '', + PRIMARY KEY (`id`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8;"); + + + $this->execute("INSERT INTO `status_type` (`id`, `type`, `name`, `display_name`) + VALUES + (170, 'distro_method', 'active', 'Active'), + (175, 'distro_method', 'inactive', 'Inactive'); + "); + } + + /** + * {@inheritdoc} + */ + public function safeDown() + { + $this->dropTable('distro_method'); + } + + /* + // Use up()/down() to run migration code without a transaction. + public function up() + { + + } + + public function down() + { + echo "m191109_233012_faucet_distro cannot be reverted.\n"; + + return false; + } + */ +} diff --git a/src/migrations/m191120_174352_action_types.php b/src/migrations/m191120_174352_action_types.php new file mode 100644 index 00000000..e148ad5b --- /dev/null +++ b/src/migrations/m191120_174352_action_types.php @@ -0,0 +1,42 @@ +execute('ALTER TABLE `action_name` ADD COLUMN `type` INT DEFAULT NULL AFTER `id`'); + } + + /** + * {@inheritdoc} + */ + public function safeDown() + { + $this->execute("ALTER TABLE `action_name` DROP `type`"); + + return true; + } + + /* + // Use up()/down() to run migration code without a transaction. + public function up() + { + + } + + public function down() + { + echo "m191120_174352_faucet_actions cannot be reverted.\n"; + + return false; + } + */ +} diff --git a/src/migrations/m191124_113412_tz.php b/src/migrations/m191124_113412_tz.php new file mode 100644 index 00000000..7c0bb8c0 --- /dev/null +++ b/src/migrations/m191124_113412_tz.php @@ -0,0 +1,41 @@ +execute('ALTER TABLE `user` ADD COLUMN `tz` VARCHAR(255) DEFAULT NULL AFTER `balance`'); + } + + /** + * {@inheritdoc} + */ + public function safeDown() + { + $this->execute("ALTER TABLE `user` DROP `tz`"); + return true; + } + + /* + // Use up()/down() to run migration code without a transaction. + public function up() + { + + } + + public function down() + { + echo "m191124_113412_tz cannot be reverted.\n"; + + return false; + } + */ +} diff --git a/src/migrations/m191129_223556_action_cleanup.php b/src/migrations/m191129_223556_action_cleanup.php new file mode 100644 index 00000000..7a576d5b --- /dev/null +++ b/src/migrations/m191129_223556_action_cleanup.php @@ -0,0 +1,48 @@ +execute("ALTER TABLE `action_name` CHANGE `type` `type` VARCHAR(255);"); + $this->execute("INSERT INTO `action_name` (`id`, `type`, `name`, `display_name`) + VALUES + (400, 'user', 'user_created', 'User Created'); + "); + $this->execute("UPDATE `action_name` SET `type` = 'user' WHERE id IN (420,430,410)"); + } + + /** + * {@inheritdoc} + */ + public function safeDown() + { + $this->execute("UPDATE `action_name` SET `type` = NULL"); + $this->execute("DELETE FROM `action_name` WHERE id = 400"); + + return true; + } + + /* + // Use up()/down() to run migration code without a transaction. + public function up() + { + + } + + public function down() + { + echo "m191129_223556_action_cleanup cannot be reverted.\n"; + + return false; + } + */ +} diff --git a/src/migrations/m191210_233454_wallet.php b/src/migrations/m191210_233454_wallet.php new file mode 100644 index 00000000..cb02ef9f --- /dev/null +++ b/src/migrations/m191210_233454_wallet.php @@ -0,0 +1,143 @@ +baseWalletPerms(); + $this->execute("CREATE TABLE `wallet` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `created_at` int(11) NOT NULL, + `updated_at` int(11) NOT NULL, + `user_id` int(11) NOT NULL, + `user_label` varchar(255) DEFAULT NULL, + `balance` int(11) NOT NULL DEFAULT '0', + `node_id` int(11) DEFAULT NULL, + `external_hash` varchar(255) NOT NULL DEFAULT '', + `json_data` json DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `user_id` (`user_id`), + CONSTRAINT `wallet_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE + ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;"); + + $this->execute("CREATE TABLE `wallet_transaction` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `created_at` int(11) NOT NULL, + `updated_at` int(11) NOT NULL, + `user_id` int(11) NOT NULL, + `wallet_id` int(11) NOT NULL, + `num_satoshis` int(11) NOT NULL, + `ln_tx_id` int(11) DEFAULT NULL, + `user_label` varchar(255) DEFAULT NULL, + `external_hash` varchar(255) NOT NULL, + `json_data` json DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `user_id` (`user_id`), + KEY `wallet_id` (`wallet_id`), + KEY `ln_tx_id` (`ln_tx_id`), + CONSTRAINT `wallet_transaction_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `wallet_transaction_ibfk_2` FOREIGN KEY (`wallet_id`) REFERENCES `wallet` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `wallet_transaction_ibfk_3` FOREIGN KEY (`ln_tx_id`) REFERENCES `ln_tx` (`id`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8;"); + + $this->execute("CREATE TABLE `user_access_key` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `created_at` int(11) NOT NULL, + `updated_at` int(11) NOT NULL, + `user_id` int(11) NOT NULL, + `wallet_id` int(11) NOT NULL, + `access_key` varchar(255) NOT NULL DEFAULT '', + `json_data` json DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `key` (`access_key`), + KEY `user_id` (`user_id`), + KEY `wallet_id` (`wallet_id`), + CONSTRAINT `wallet_user_key_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `wallet_user_key_ibfk_2` FOREIGN KEY (`wallet_id`) REFERENCES `wallet` (`id`) ON DELETE CASCADE ON UPDATE CASCADE + ) ENGINE=InnoDB DEFAULT CHARSET=utf8;"); + } + + public function baseWalletPerms() + { + $auth = \LNPay::$app->authManager; + + // add "createPost" permission + $read = $auth->createPermission('wallet_read'); + $read->description = 'Wallet Read'; + $auth->add($read); + + // add "createPost" permission + $deposit = $auth->createPermission('wallet_deposit'); + $deposit->description = 'Wallet Deposit'; + $auth->add($deposit); + + // add "createPost" permission + $withdraw = $auth->createPermission('wallet_withdraw'); + $withdraw->description = 'Wallet Withdraw'; + $auth->add($withdraw); + + // add "createPost" permission + $transfer = $auth->createPermission('wallet_transfer'); + $transfer->description = 'Wallet Transfer'; + $auth->add($transfer); + + // add "author" role and give this role the "createPost" permission + $role = $auth->createRole('Wallet Admin'); + $role->description = 'Can read,deposit,transfer,withdraw'; + $auth->add($role); + $auth->addChild($role, $read); + $auth->addChild($role, $deposit); + $auth->addChild($role, $withdraw); + $auth->addChild($role, $transfer); + + // add "author" role and give this role the "createPost" permission + $role = $auth->createRole('Wallet Read'); + $role->description = 'Can read'; + $auth->add($role); + $auth->addChild($role, $read); + + // add "author" role and give this role the "createPost" permission + $role = $auth->createRole('Wallet Invoice'); + $role->description = 'Can read,deposit'; + $auth->add($role); + $auth->addChild($role, $read); + $auth->addChild($role, $deposit); + } + + /** + * {@inheritdoc} + */ + public function safeDown() + { + $auth = \LNPay::$app->authManager; + $auth->removeAll(); + $this->execute("DROP TABLE `wallet_transaction`"); + $this->execute("DROP TABLE `user_access_key`"); + $this->execute("DROP TABLE `wallet`"); + + return true; + } + + /* + // Use up()/down() to run migration code without a transaction. + public function up() + { + + } + + public function down() + { + echo "m191210_233454_wallet cannot be reverted.\n"; + + return false; + } + */ +} diff --git a/src/migrations/m191214_120829_minor_updates.php b/src/migrations/m191214_120829_minor_updates.php new file mode 100644 index 00000000..3c347d74 --- /dev/null +++ b/src/migrations/m191214_120829_minor_updates.php @@ -0,0 +1,44 @@ +execute("ALTER TABLE `ln_tx` ADD COLUMN `external_hash` VARCHAR(255) AFTER `user_id`, ADD INDEX (external_hash)"); + $this->execute("ALTER TABLE `base_link_analytics` ADD COLUMN `user_agent` TEXT AFTER `requester_ip`"); + } + + /** + * {@inheritdoc} + */ + public function safeDown() + { + $this->execute("ALTER TABLE `base_link_analytics` DROP COLUMN `user_agent`"); + $this->execute("ALTER TABLE `ln_tx` DROP COLUMN `external_hash`"); + + return true; + } + + /* + // Use up()/down() to run migration code without a transaction. + public function up() + { + + } + + public function down() + { + echo "m191214_120829_minor_updates cannot be reverted.\n"; + + return false; + } + */ +} diff --git a/src/migrations/m191215_224105_base_wallet_actions.php b/src/migrations/m191215_224105_base_wallet_actions.php new file mode 100644 index 00000000..edf29e1f --- /dev/null +++ b/src/migrations/m191215_224105_base_wallet_actions.php @@ -0,0 +1,92 @@ +execute("CREATE TABLE `wallet_transaction_type` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `layer` varchar(255) DEFAULT NULL, + `name` varchar(255) NOT NULL DEFAULT '', + `display_name` varchar(255) NOT NULL DEFAULT '', + PRIMARY KEY (`id`) + ) ENGINE=InnoDB AUTO_INCREMENT=41 DEFAULT CHARSET=utf8;"); + + $this->execute("INSERT INTO `wallet_transaction_type` (`id`, `layer`, `name`, `display_name`) + VALUES + (10, 'ln', 'ln_deposit', 'LN Deposit'), + (20, 'ln', 'ln_withdrawal', 'LN Withdrawal'), + (30, 'ln', 'ln_transfer_in', 'Transfer In'), + (40, 'ln', 'ln_transfer_out', 'Transfer Out'); + "); + + $this->execute("ALTER TABLE `wallet_transaction` ADD COLUMN `wtx_type_id` INT(11) AFTER `wallet_id`"); + $this->execute("ALTER TABLE `wallet_transaction` ADD CONSTRAINT `wallet_transaction_ibfk_4` FOREIGN KEY (`wtx_type_id`) REFERENCES `wallet_transaction_type` (`id`)"); + + $this->execute("INSERT INTO `status_type` (`id`, `type`, `name`, `display_name`) + VALUES + (200, 'wallet', 'active', 'Active'), + (210, 'wallet', 'inactive', 'Inactive'); + "); + + $this->execute("ALTER TABLE `wallet` ADD COLUMN `status_type_id` INT(11) AFTER `external_hash`"); + $this->execute("ALTER TABLE `wallet` ADD CONSTRAINT `wallet_ibfk_2` FOREIGN KEY (`status_type_id`) REFERENCES `status_type` (`id`)"); + + $this->execute("INSERT INTO `action_name` (`id`, `type`, `name`, `display_name`) + VALUES + (500, 'wallet', 'wallet_created', 'Wallet Created'), + (510, 'wallet', 'wallet_send', 'Wallet Send'), + (520, 'wallet', 'wallet_receive', 'Wallet Receive'), + (530, 'wallet', 'wallet_transfer_in', 'Wallet Transfer IN'), + (540, 'wallet', 'wallet_transfer_out', 'Wallet Transfer OUT'); + "); + $this->execute("ALTER TABLE `wallet` AUTO_INCREMENT = 2500"); + $this->execute("ALTER TABLE `user_access_key` AUTO_INCREMENT = 1000"); + + } + + /** + * {@inheritdoc} + */ + public function safeDown() + { + $this->execute("ALTER TABLE `wallet_transaction` DROP FOREIGN KEY `wallet_transaction_ibfk_4`"); + $this->execute("ALTER TABLE `wallet_transaction` DROP COLUMN `wtx_type_id`"); + $this->execute("DROP TABLE `wallet_transaction_type`"); + + $this->execute("DELETE FROM `wallet` WHERE `user_label` = 'DEFAULT WALLET'"); + $this->execute("DELETE FROM `wallet_transaction` WHERE `user_label` IN('Balance transfer from legacy wallet','Legacy Withdraw')"); + $this->execute("ALTER TABLE `wallet` DROP FOREIGN KEY `wallet_ibfk_2`"); + $this->execute("ALTER TABLE `wallet` DROP COLUMN `status_type_id`"); + $this->execute("DELETE FROM `action_feed` WHERE `action_name_id` IN (500,510,520,530,540)"); + $this->execute("DELETE FROM `action_name` WHERE `id` IN (500,510,520,530,540)"); + + $this->execute("DELETE FROM `status_type` WHERE `id` IN (200,210)"); + + return true; + } + + /* + // Use up()/down() to run migration code without a transaction. + public function up() + { + + } + + public function down() + { + echo "m191215_224105_base_wallet_actions cannot be reverted.\n"; + + return false; + } + */ +} diff --git a/src/migrations/m200111_005210_description_hash.php b/src/migrations/m200111_005210_description_hash.php new file mode 100644 index 00000000..ba02f77e --- /dev/null +++ b/src/migrations/m200111_005210_description_hash.php @@ -0,0 +1,42 @@ +execute("ALTER TABLE `ln_tx` ADD COLUMN `description_hash` VARCHAR(255) AFTER `memo`"); + } + + /** + * {@inheritdoc} + */ + public function safeDown() + { + $this->execute("ALTER TABLE `ln_tx` DROP COLUMN `description_hash`"); + + return true; + } + + /* + // Use up()/down() to run migration code without a transaction. + public function up() + { + + } + + public function down() + { + echo "m200111_005210_description_hash cannot be reverted.\n"; + + return false; + } + */ +} diff --git a/src/migrations/m200112_221805_webhook_mods.php b/src/migrations/m200112_221805_webhook_mods.php new file mode 100644 index 00000000..4e6e9bf6 --- /dev/null +++ b/src/migrations/m200112_221805_webhook_mods.php @@ -0,0 +1,77 @@ +execute("ALTER TABLE `integration_webhook` ADD COLUMN `content_type` VARCHAR(255) AFTER `http_method`"); + $this->execute("ALTER TABLE `integration_webhook` ADD COLUMN `secret` VARCHAR(255) AFTER `integration_service_id`"); + $this->execute("ALTER TABLE `integration_webhook` ADD COLUMN `status_type_id` INT(11) AFTER `endpoint_url`"); + $this->execute("ALTER TABLE `integration_webhook` ADD CONSTRAINT `integration_webhook_ibfk_7` FOREIGN KEY (`status_type_id`) REFERENCES `status_type` (`id`)"); + + $this->execute("INSERT INTO `status_type` (`id`, `type`, `name`, `display_name`) + VALUES + (230, 'webhook', 'active', 'Active'), + (235, 'webhook', 'inactive', 'Inactive'); + "); + + $this->execute("INSERT INTO `integration_service` (`id`, `name`, `display_name`, `json_data`) + VALUES + (500, 'user_service', 'User Service', NULL); + "); + + $this->execute("UPDATE `integration_webhook` SET `status_type_id` = 230"); + + $this->execute("ALTER TABLE `integration_webhook` DROP FOREIGN KEY `integration_webhook_ibfk_2`"); + $this->execute("DROP INDEX `action_name_id` ON `integration_webhook`"); + $this->execute("ALTER TABLE `integration_webhook` MODIFY `action_name_id` JSON"); + + $this->execute("ALTER TABLE `integration_webhook` ADD COLUMN `external_hash` VARCHAR(255) NOT NULL AFTER `id`"); + $this->execute("ALTER TABLE `integration_webhook` ADD INDEX `external_hash` (`external_hash`)"); + + } + + /** + * {@inheritdoc} + */ + public function safeDown() + { + $this->execute("ALTER TABLE `integration_webhook` DROP FOREIGN KEY `integration_webhook_ibfk_7`"); + $this->execute("DELETE FROM `status_type` WHERE `id` IN (230,235)"); + $this->execute("TRUNCATE `integration_webhook`"); + $this->execute("DELETE FROM `integration_service` WHERE `id` IN (500)"); + $this->execute("ALTER TABLE `integration_webhook` DROP COLUMN `content_type`"); + $this->execute("ALTER TABLE `integration_webhook` DROP COLUMN `external_hash`"); + $this->execute("ALTER TABLE `integration_webhook` DROP COLUMN `secret`"); + $this->execute("ALTER TABLE `integration_webhook` DROP COLUMN `status_type_id`"); + $this->execute("ALTER TABLE `integration_webhook` MODIFY `action_name_id` INT(11)"); + + $this->execute("ALTER TABLE `integration_webhook` ADD INDEX `action_name_id` (`action_name_id`)"); + $this->execute("ALTER TABLE `integration_webhook` ADD CONSTRAINT `integration_webhook_ibfk_2` FOREIGN KEY (`action_name_id`) REFERENCES `action_name` (`id`)"); + + return true; + } + + /* + // Use up()/down() to run migration code without a transaction. + public function up() + { + + } + + public function down() + { + echo "m200112_221805_webhook_mods cannot be reverted.\n"; + + return false; + } + */ +} diff --git a/src/migrations/m200120_151707_pw_link_type.php b/src/migrations/m200120_151707_pw_link_type.php new file mode 100644 index 00000000..1089f592 --- /dev/null +++ b/src/migrations/m200120_151707_pw_link_type.php @@ -0,0 +1,45 @@ +execute("INSERT INTO `action_name` (`id`, `type`, `name`, `display_name`) + VALUES + (405, 'user', 'pw_reset', 'Password Reset'); + "); + } + + /** + * {@inheritdoc} + */ + public function safeDown() + { + $this->execute("DELETE FROM `action_name` WHERE id = 405"); + + return true; + } + + /* + // Use up()/down() to run migration code without a transaction. + public function up() + { + + } + + public function down() + { + echo "m200120_151707_pw_link_type cannot be reverted.\n"; + + return false; + } + */ +} diff --git a/src/migrations/m200126_005039_api_logger.php b/src/migrations/m200126_005039_api_logger.php new file mode 100644 index 00000000..431e9784 --- /dev/null +++ b/src/migrations/m200126_005039_api_logger.php @@ -0,0 +1,54 @@ +execute("CREATE TABLE `user_api_log` ( + `id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `user_id` int(11) DEFAULT NULL, + `api_key` varchar(255) DEFAULT NULL, + `request_path` text DEFAULT NULL, + `request_body` longtext, + `request_headers` longtext, + `response_body` longtext, + `response_headers` longtext, + PRIMARY KEY (`id`), + KEY `user_id` (`user_id`), + CONSTRAINT `user_api_log_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE + ) ENGINE=InnoDB AUTO_INCREMENT=26 DEFAULT CHARSET=utf8;"); + } + + /** + * {@inheritdoc} + */ + public function safeDown() + { + $this->execute("DROP TABLE `user_api_log`"); + + return true; + } + + /* + // Use up()/down() to run migration code without a transaction. + public function up() + { + + } + + public function down() + { + echo "m200128_005039_api_logger cannot be reverted.\n"; + + return false; + } + */ +} diff --git a/src/migrations/m200127_105943_keysend.php b/src/migrations/m200127_105943_keysend.php new file mode 100644 index 00000000..09909bf9 --- /dev/null +++ b/src/migrations/m200127_105943_keysend.php @@ -0,0 +1,44 @@ +execute("ALTER TABLE `ln_tx` ADD COLUMN `is_keysend` TINYINT(1) AFTER `settled_at`"); + $this->execute("ALTER TABLE `ln_tx` ADD COLUMN `custom_records` JSON AFTER `is_keysend`"); + } + + /** + * {@inheritdoc} + */ + public function safeDown() + { + $this->execute("ALTER TABLE `ln_tx` DROP COLUMN `is_keysend`"); + $this->execute("ALTER TABLE `ln_tx` DROP COLUMN `custom_records`"); + + return true; + } + + /* + // Use up()/down() to run migration code without a transaction. + public function up() + { + + } + + public function down() + { + echo "m200127_105943_keysend cannot be reverted.\n"; + + return false; + } + */ +} diff --git a/src/migrations/m200127_221736_key_updates.php b/src/migrations/m200127_221736_key_updates.php new file mode 100644 index 00000000..1444f0f6 --- /dev/null +++ b/src/migrations/m200127_221736_key_updates.php @@ -0,0 +1,106 @@ +execute("INSERT INTO `auth_item` (`name`, `type`, `description`, `rule_name`, `data`, `created_at`, `updated_at`) + VALUES + ('wallet_tx_read', 2, 'Wallet Tx Read', NULL, NULL, 1580216401, 1580216401); + "); + + //Remove wallet_read from Wallet Invoice role + $this->execute("DELETE FROM `auth_item_child` WHERE `parent` = 'Wallet Invoice' AND `child` = 'wallet_read'"); + + //Add wallet_tx_read to Wallet Invoice role + $this->execute("INSERT INTO `auth_item_child` (`parent`, `child`) + VALUES + ('Wallet Invoice', 'wallet_tx_read'); + "); + + //Add wallet_tx_read to Wallet Read role + $this->execute("INSERT INTO `auth_item_child` (`parent`, `child`) + VALUES + ('Wallet Read', 'wallet_tx_read'); + "); + + //Add wallet_tx_read to Wallet Admin role + $this->execute("INSERT INTO `auth_item_child` (`parent`, `child`) + VALUES + ('Wallet Admin', 'wallet_tx_read'); + "); + + + $this->execute("ALTER TABLE `user_access_key` ADD COLUMN `status_type_id` INT(11) AFTER `access_key`"); + $this->execute("ALTER TABLE `user_access_key` ADD CONSTRAINT `user_access_key_ibfk_3` FOREIGN KEY (`status_type_id`) REFERENCES `status_type` (`id`)"); + + $this->execute("INSERT INTO `status_type` (`id`, `type`, `name`, `display_name`) + VALUES + (30, 'user_access_key', 'active', 'Active'), + (35, 'user_access_key', 'inactive', 'Inactive'); + "); + + $this->execute("UPDATE `user_access_key` SET `status_type_id` = 30"); + + //Create new roles + $this->execute("INSERT INTO `auth_item` (`name`, `type`, `description`, `rule_name`, `data`, `created_at`, `updated_at`) + VALUES + ('Public API Key', 1, 'Identifies account, basic permission', NULL, NULL, 1580216401, 1580216401), + ('Secret API Key', 1, 'Can perform all actions', NULL, NULL, 1580216401, 1580216401); + "); + + $this->execute("ALTER TABLE `user_access_key` MODIFY `wallet_id` INT(11)"); + + $this->execute("ALTER TABLE `user_api_log` ADD COLUMN `method` VARCHAR(255) AFTER `api_key`"); + + } + + /** + * {@inheritdoc} + */ + public function safeDown() + { + $this->execute("DELETE FROM `auth_item_child` WHERE `child` = 'wallet_tx_read'"); + $this->execute("INSERT INTO `auth_item_child` (`parent`, `child`) + VALUES + ('Wallet Invoice', 'wallet_read'); + "); + $this->execute("DELETE FROM `auth_item` WHERE `name` IN ('wallet_tx_read','Public API Key','Secret API Key')"); + + $this->execute("ALTER TABLE `user_access_key` DROP FOREIGN KEY `user_access_key_ibfk_3`"); + $this->execute("ALTER TABLE `user_access_key` DROP COLUMN `status_type_id`"); + $this->execute("DELETE FROM `status_type` WHERE `id` IN (30,35)"); + $this->execute("DELETE FROM `user_access_key` WHERE `wallet_id` IS NULL"); + $this->execute("ALTER TABLE `user_access_key` MODIFY `wallet_id` INT(11) NOT NULL"); + $this->execute("ALTER TABLE `user_api_log` DROP COLUMN `method`"); + + return true; + } + + /* + // Use up()/down() to run migration code without a transaction. + public function up() + { + + } + + public function down() + { + echo "m200127_221736_key_updates cannot be reverted.\n"; + + return false; + } + */ +} diff --git a/src/migrations/m200208_211205_api_log_changes.php b/src/migrations/m200208_211205_api_log_changes.php new file mode 100644 index 00000000..fbfa8e41 --- /dev/null +++ b/src/migrations/m200208_211205_api_log_changes.php @@ -0,0 +1,56 @@ +execute("ALTER TABLE `user_api_log` ADD COLUMN `status_code` INT(11) AFTER `request_headers`"); + $this->execute("ALTER TABLE `user_api_log` ADD COLUMN `sdk` VARCHAR(255) AFTER `api_key`"); + $this->execute("ALTER TABLE `user_api_log` ADD COLUMN `external_hash` VARCHAR(255) AFTER `user_id`"); + $this->execute("ALTER TABLE `user_api_log` ADD COLUMN `ip_address` VARCHAR(255) AFTER `api_key`"); + $this->execute("ALTER TABLE `user_api_log` ADD COLUMN `base_url` VARCHAR(255) AFTER `method`"); + $this->execute("ALTER TABLE `user_api_log` ADD COLUMN `created_at` INT(11) AFTER `id`"); + $this->execute("ALTER TABLE `action_feed` ADD COLUMN `external_hash` VARCHAR(255) AFTER `created_at`"); + + } + + /** + * {@inheritdoc} + */ + public function safeDown() + { + $this->execute("ALTER TABLE `user_api_log` DROP COLUMN `status_code`"); + $this->execute("ALTER TABLE `user_api_log` DROP COLUMN `sdk`"); + $this->execute("ALTER TABLE `user_api_log` DROP COLUMN `external_hash`"); + $this->execute("ALTER TABLE `user_api_log` DROP COLUMN `ip_address`"); + $this->execute("ALTER TABLE `user_api_log` DROP COLUMN `base_url`"); + $this->execute("ALTER TABLE `user_api_log` DROP COLUMN `created_at`"); + + $this->execute("ALTER TABLE `action_feed` DROP COLUMN `external_hash`"); + + return true; + } + + /* + // Use up()/down() to run migration code without a transaction. + public function up() + { + + } + + public function down() + { + echo "m200208_211205_api_log_changes cannot be reverted.\n"; + + return false; + } + */ +} diff --git a/src/migrations/m200211_113828_usr_hash.php b/src/migrations/m200211_113828_usr_hash.php new file mode 100644 index 00000000..a8895f7e --- /dev/null +++ b/src/migrations/m200211_113828_usr_hash.php @@ -0,0 +1,42 @@ +execute("ALTER TABLE `user` ADD COLUMN `external_hash` VARCHAR(255) AFTER `email`"); + } + + /** + * {@inheritdoc} + */ + public function safeDown() + { + $this->execute("ALTER TABLE `user` DROP COLUMN `external_hash`"); + + return true; + } + + /* + // Use up()/down() to run migration code without a transaction. + public function up() + { + + } + + public function down() + { + echo "m200211_113828_usr_hash cannot be reverted.\n"; + + return false; + } + */ +} diff --git a/src/migrations/m200215_174524_webhook_log.php b/src/migrations/m200215_174524_webhook_log.php new file mode 100644 index 00000000..1da51e67 --- /dev/null +++ b/src/migrations/m200215_174524_webhook_log.php @@ -0,0 +1,61 @@ +execute("CREATE TABLE `integration_webhook_request` ( + `id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `external_hash` varbinary(255) NOT NULL DEFAULT '', + `created_at` int(11) NOT NULL, + `integration_webhook_id` int(11) NOT NULL, + `action_feed_id` int(11) DEFAULT NULL, + `request_payload` longtext NOT NULL, + `response_body` longtext, + `response_status_code` int(11) DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `integration_webhook_id` (`integration_webhook_id`), + KEY `external_hash` (`external_hash`), + KEY `action_feed_id` (`action_feed_id`), + CONSTRAINT `integration_webhook_request_ibfk_1` FOREIGN KEY (`integration_webhook_id`) REFERENCES `integration_webhook` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `integration_webhook_request_ibfk_2` FOREIGN KEY (`action_feed_id`) REFERENCES `action_feed` (`id`) ON DELETE CASCADE ON UPDATE CASCADE + ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;"); + + $this->execute("ALTER TABLE `action_name` ADD COLUMN `is_webhook` BOOL DEFAULT 0 AFTER `display_name`"); + $this->execute("UPDATE `action_name` SET `is_webhook` = 1 WHERE id IN(200,220,320,322,323,330,410,500,510,520,530,540)"); + } + + /** + * {@inheritdoc} + */ + public function safeDown() + { + $this->execute("DROP TABLE `integration_webhook_request`"); + $this->execute("ALTER TABLE `action_name` DROP COLUMN `is_webhook`"); + + return true; + } + + /* + // Use up()/down() to run migration code without a transaction. + public function up() + { + + } + + public function down() + { + echo "m200215_174524_webhook_log cannot be reverted.\n"; + + return false; + } + */ +} diff --git a/src/migrations/m200219_142429_api_version.php b/src/migrations/m200219_142429_api_version.php new file mode 100644 index 00000000..3ffa0214 --- /dev/null +++ b/src/migrations/m200219_142429_api_version.php @@ -0,0 +1,42 @@ +execute("ALTER TABLE `user` ADD COLUMN `api_version` VARCHAR(255) AFTER `api_parent_id`"); + } + + /** + * {@inheritdoc} + */ + public function safeDown() + { + $this->execute("ALTER TABLE `user` DROP COLUMN `api_version`"); + + return true; + } + + /* + // Use up()/down() to run migration code without a transaction. + public function up() + { + + } + + public function down() + { + echo "m200219_142429_api_version cannot be reverted.\n"; + + return false; + } + */ +} diff --git a/src/migrations/m200220_201526_jsonify.php b/src/migrations/m200220_201526_jsonify.php new file mode 100644 index 00000000..afa8330d --- /dev/null +++ b/src/migrations/m200220_201526_jsonify.php @@ -0,0 +1,57 @@ +execute("alter table `action_data` modify `data` json"); + $this->execute("alter table `base_link` modify `json_data` json"); + $this->execute("alter table `base_link_analytics` modify `json_data` json"); + $this->execute("alter table `custy_domain` modify `data` json"); + $this->execute("alter table `integration_service` modify `json_data` json"); + $this->execute("alter table `integration_webhook` modify `json_data` json"); + $this->execute("alter table `ln_tx` modify `json_data` json"); + $this->execute("alter table `user` modify `json_data` json"); + + } + + /** + * {@inheritdoc} + */ + public function safeDown() + { + $this->execute("alter table `action_data` modify `data` longtext"); + $this->execute("alter table `base_link` modify `json_data` longtext"); + $this->execute("alter table `base_link_analytics` modify `json_data` longtext"); + $this->execute("alter table `custy_domain` modify `data` longtext"); + $this->execute("alter table `integration_service` modify `json_data` longtext"); + $this->execute("alter table `integration_webhook` modify `json_data` longtext"); + $this->execute("alter table `ln_tx` modify `json_data` longtext"); + $this->execute("alter table `user` modify `json_data` longtext"); + + return true; + } + + /* + // Use up()/down() to run migration code without a transaction. + public function up() + { + + } + + public function down() + { + echo "m200220_201526_jsonify cannot be reverted.\n"; + + return false; + } + */ +} diff --git a/src/migrations/m200317_165227_key_suspend_role.php b/src/migrations/m200317_165227_key_suspend_role.php new file mode 100644 index 00000000..3455f1e9 --- /dev/null +++ b/src/migrations/m200317_165227_key_suspend_role.php @@ -0,0 +1,45 @@ +execute("INSERT INTO `auth_item` (`name`, `type`, `description`, `rule_name`, `data`, `created_at`, `updated_at`) + VALUES + ('Key Suspended', 1, 'Stops usage of key', NULL, NULL, 1580216401, 1580216401); + "); + } + + /** + * {@inheritdoc} + */ + public function safeDown() + { + $this->execute("DELETE FROM `auth_item` WHERE `name` = 'Key Suspended'"); + + return true; + } + + /* + // Use up()/down() to run migration code without a transaction. + public function up() + { + + } + + public function down() + { + echo "m200317_165227_key_suspend_role cannot be reverted.\n"; + + return false; + } + */ +} diff --git a/src/migrations/m200318_160034_non_custodial.php b/src/migrations/m200318_160034_non_custodial.php new file mode 100644 index 00000000..ff16590c --- /dev/null +++ b/src/migrations/m200318_160034_non_custodial.php @@ -0,0 +1,147 @@ +execute("CREATE TABLE `ln_node_implementation` ( + `name` varchar(64) NOT NULL DEFAULT '', + `display_name` varchar(255) DEFAULT NULL, + `json_data` json DEFAULT NULL, + PRIMARY KEY (`name`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8;"); + + $this->execute("INSERT INTO `ln_node_implementation` (`name`, `display_name`, `json_data`) + VALUES + ('lnd', 'LND', NULL); + "); + + $this->execute("CREATE TABLE `ln_node` ( + `id` varbinary(255) NOT NULL DEFAULT '', + `created_at` int(11) NULL, + `updated_at` int(11) NULL, + `user_id` int(11) NOT NULL, + `alias` varchar(255) DEFAULT NULL, + `network` varchar(255) NOT NULL, + `ln_node_implementation_id` varchar(64) NOT NULL DEFAULT '', + `default_pubkey` varchar(255) DEFAULT NULL, + `wallet_password` varchar(255) DEFAULT NULL, + `uri` varchar(255) DEFAULT NULL, + `host` varchar(255) DEFAULT '', + `rpc_port` int(11) NOT NULL, + `rest_port` int(11) NOT NULL, + `ln_port` int(11) NOT NULL, + `tls_cert` text, + `getinfo` json DEFAULT NULL, + `status_type_id` int(11) DEFAULT NULL, + `rpc_status_id` int(11) DEFAULT NULL, + `rest_status_id` int(11) DEFAULT NULL, + `internal_rpc_port` int(11) DEFAULT NULL, + `internal_rest_port` int(11) DEFAULT NULL, + `internal_ln_port` int(11) DEFAULT NULL, + `json_data` json DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `ln_node_implementation_id` (`ln_node_implementation_id`), + KEY `status_type_id` (`status_type_id`), + KEY `rpc_status_id` (`rpc_status_id`), + KEY `rest_status_id` (`rest_status_id`), + KEY `user_id` (`user_id`), + CONSTRAINT `ln_node_ibfk_1` FOREIGN KEY (`ln_node_implementation_id`) REFERENCES `ln_node_implementation` (`name`), + CONSTRAINT `ln_node_ibfk_2` FOREIGN KEY (`status_type_id`) REFERENCES `status_type` (`id`), + CONSTRAINT `ln_node_ibfk_3` FOREIGN KEY (`rpc_status_id`) REFERENCES `status_type` (`id`), + CONSTRAINT `ln_node_ibfk_4` FOREIGN KEY (`rest_status_id`) REFERENCES `status_type` (`id`), + CONSTRAINT `ln_node_ibfk_5` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8;"); + + $this->execute("ALTER TABLE `ln_node` ADD COLUMN `fee_wallet_id` INT(11)"); + $this->execute("ALTER TABLE `ln_node` ADD CONSTRAINT `ln_node_ibfk_6` FOREIGN KEY (`fee_wallet_id`) REFERENCES `wallet` (`id`)"); + + $this->execute("ALTER TABLE `ln_node` ADD COLUMN `keysend_wallet_id` INT(11)"); + $this->execute("ALTER TABLE `ln_node` ADD CONSTRAINT `ln_node_ibfk_7` FOREIGN KEY (`keysend_wallet_id`) REFERENCES `wallet` (`id`)"); + + + $this->execute("CREATE TABLE `ln_node_profile` ( + `id` varbinary(255) NOT NULL DEFAULT '', + `created_at` int(11) NULL, + `updated_at` int(11) NULL, + `user_id` int(11) NOT NULL, + `ln_node_id` varbinary(255) NOT NULL DEFAULT '', + `is_default` tinyint(1) DEFAULT NULL, + `user_label` varchar(255) NOT NULL DEFAULT '', + `status_type_id` int(11) DEFAULT NULL, + `macaroon_hex` text, + `username` varchar(255) DEFAULT NULL, + `password` varchar(255) DEFAULT NULL, + `access_key` varchar(255) DEFAULT NULL, + `json_data` json DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `ln_node_id` (`ln_node_id`), + KEY `user_id` (`user_id`), + KEY `status_type_id` (`status_type_id`), + CONSTRAINT `ln_node_profile_ibfk_1` FOREIGN KEY (`ln_node_id`) REFERENCES `ln_node` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `ln_node_profile_ibfk_2` FOREIGN KEY (`status_type_id`) REFERENCES `status_type` (`id`), + CONSTRAINT `ln_node_profile_ibfk_3` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8;"); + + $this->execute("INSERT INTO `status_type` (`id`, `type`, `name`, `display_name`) + VALUES + (300, 'ln_node', 'active', 'Active'), + (305, 'ln_node', 'inactive', 'Inactive'), + (309, 'ln_node', 'error', 'Error Connecting'), + (320, 'ln_node_rpc', 'up', 'Up'), + (325, 'ln_node_rpc', 'inactive', 'Inactive'), + (329, 'ln_node_rpc', 'error', 'Error Connecting'), + (330, 'ln_node_rest', 'up', 'Up'), + (335, 'ln_node_rest', 'inactive', 'Inactive'), + (339, 'ln_node_rest', 'error', 'Error Connecting'), + (400, 'ln_node_profile', 'active', 'Active'), + (405, 'ln_node_profile', 'inactive', 'Inactive') + ; + "); + + $this->execute("INSERT INTO `action_name` (`id`, `type`, `name`, `display_name`, `is_webhook`) + VALUES + (605, 'ln_node', 'user_node_add', 'User added LN node', 1), + (610, 'ln_node', 'user_node_remove', 'User removed LN node', 1) + ; + "); + } + + /** + * {@inheritdoc} + */ + public function safeDown() + { + $this->execute("DROP TABLE `ln_node_profile`"); + $this->execute("DROP TABLE `ln_node`"); + $this->execute("DROP TABLE `ln_node_implementation`"); + $this->execute("DELETE FROM `status_type` WHERE `type` IN ('ln_node_rest','ln_node_rpc','ln_node','ln_node_profile')"); + $this->execute("DELETE FROM `action_feed` WHERE `action_name_id` IN (605,610)"); + $this->execute("DELETE FROM `action_name` WHERE `type` IN ('ln_node')"); + + return true; + } + + /* + // Use up()/down() to run migration code without a transaction. + public function up() + { + + } + + public function down() + { + echo "m200311_160034_non_custodial cannot be reverted.\n"; + + return false; + } + */ +} diff --git a/src/migrations/m200327_191800_baselink_user.php b/src/migrations/m200327_191800_baselink_user.php new file mode 100644 index 00000000..ec999033 --- /dev/null +++ b/src/migrations/m200327_191800_baselink_user.php @@ -0,0 +1,45 @@ +execute("ALTER TABLE `base_link` ADD COLUMN `user_id` INT(11) AFTER `id`"); + $this->execute("ALTER TABLE `base_link` ADD CONSTRAINT `user_id_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`)"); + + } + + /** + * {@inheritdoc} + */ + public function safeDown() + { + $this->execute("ALTER TABLE `base_link` DROP FOREIGN KEY `user_id_ibfk_1`"); + $this->execute("ALTER TABLE `base_link` DROP COLUMN `user_id`"); + + return true; + } + + /* + // Use up()/down() to run migration code without a transaction. + public function up() + { + + } + + public function down() + { + echo "m200327_191800_baselink_user cannot be reverted.\n"; + + return false; + } + */ +} diff --git a/src/migrations/m200328_131216_yii2queue.php b/src/migrations/m200328_131216_yii2queue.php new file mode 100644 index 00000000..899265dd --- /dev/null +++ b/src/migrations/m200328_131216_yii2queue.php @@ -0,0 +1,70 @@ +execute("CREATE TABLE `queue` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `channel` varchar(255) NOT NULL, + `job` blob NOT NULL, + `pushed_at` int(11) NOT NULL, + `ttr` int(11) NOT NULL, + `delay` int(11) NOT NULL DEFAULT 0, + `priority` int(11) unsigned NOT NULL DEFAULT 1024, + `reserved_at` int(11) DEFAULT NULL, + `attempt` int(11) DEFAULT NULL, + `done_at` int(11) DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `channel` (`channel`), + KEY `reserved_at` (`reserved_at`), + KEY `priority` (`priority`) + ) ENGINE=InnoDB"); + + $this->execute("CREATE TABLE `log_queue` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `level` int(11) DEFAULT NULL, + `category` varchar(255) DEFAULT NULL, + `log_time` int(11) DEFAULT NULL, + `prefix` text, + `message` text, + PRIMARY KEY (`id`), + KEY `idx_log_level` (`level`), + KEY `idx_log_category` (`category`) + ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1 COMMENT='1';"); + } + + /** + * {@inheritdoc} + */ + public function safeDown() + { + $this->execute("DROP TABLE `queue`"); + $this->execute("DROP TABLE `log_queue`"); + + return true; + } + + /* + // Use up()/down() to run migration code without a transaction. + public function up() + { + + } + + public function down() + { + echo "m200328_131216_yii2queue cannot be reverted.\n"; + + return false; + } + */ +} diff --git a/src/migrations/m200402_155750_rpc_listener.php b/src/migrations/m200402_155750_rpc_listener.php new file mode 100644 index 00000000..e2453750 --- /dev/null +++ b/src/migrations/m200402_155750_rpc_listener.php @@ -0,0 +1,72 @@ +execute("CREATE TABLE `node_listener` ( + `id` varbinary(255) NOT NULL DEFAULT '', + `method` varchar(255) DEFAULT NULL, + `created_at` int(11) DEFAULT NULL, + `updated_at` int(11) DEFAULT NULL, + `ln_node_id` varbinary(255) DEFAULT NULL, + `btc_node_id` int(11) DEFAULT NULL, + `user_id` int(11) NOT NULL, + `config_filename` varchar(255) NOT NULL DEFAULT '', + `status_type_id` int(11) DEFAULT NULL, + `supervisor_parameters` json DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `user_id` (`user_id`), + KEY `status_type_id` (`status_type_id`), + KEY `ln_node_id` (`ln_node_id`), + KEY `config_filename` (`config_filename`), + CONSTRAINT `node_listener_ibfk_2` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `node_listener_ibfk_3` FOREIGN KEY (`status_type_id`) REFERENCES `status_type` (`id`), + CONSTRAINT `node_listener_ibfk_4` FOREIGN KEY (`ln_node_id`) REFERENCES `ln_node` (`id`) ON DELETE CASCADE ON UPDATE CASCADE + ) ENGINE=InnoDB DEFAULT CHARSET=utf8;"); + + $this->execute("INSERT INTO `action_name` (`id`, `type`, `name`, `display_name`, `is_webhook`) + VALUES + (10000, 'lnd_rpc', 'InvoiceSubscription_Invoice', 'LND RPC Invoice', 1), + (10001, 'lnd_rpc', 'PeerEventSubscription_PeerEvent', 'LND RPC PeerEvent', 1), + (10002, 'lnd_rpc', 'ChannelEventSubscription_ChannelEventUpdate', 'LND RPC ChannelEventUpdate', 1), + (10003, 'lnd_rpc', 'ChannelBackupSubscription_ChanBackupSnapshot', 'LND RPC ChanBackupSnapshot', 1), + (10004, 'lnd_rpc', 'GraphTopologySubscription_GraphTopologyUpdate', 'LND RPC GraphTopologyUpdate', 1), + (10005, 'lnd_rpc', 'GetTransactionsRequest_Transaction', 'LND RPC Transaction', 1); + "); + } + + /** + * {@inheritdoc} + */ + public function safeDown() + { + $this->dropTable('node_listener'); + $this->execute("DELETE FROM `action_name` WHERE `type` = 'lnd_rpc'"); + + return true; + } + + /* + // Use up()/down() to run migration code without a transaction. + public function up() + { + + } + + public function down() + { + echo "m200402_155750_rpc_listener cannot be reverted.\n"; + + return false; + } + */ +} diff --git a/src/migrations/m200404_175632_fix_action_id.php b/src/migrations/m200404_175632_fix_action_id.php new file mode 100644 index 00000000..de4a5891 --- /dev/null +++ b/src/migrations/m200404_175632_fix_action_id.php @@ -0,0 +1,51 @@ +execute("ALTER TABLE `action_feed` DROP FOREIGN KEY `action_feed_ibfk_2`"); + $this->execute("ALTER TABLE `action_feed` CHANGE `action_name_id` `action_name_id` VARBINARY(255) NOT NULL"); + + $this->execute("ALTER TABLE `action_name` CHANGE `id` `id` VARBINARY(255) NOT NULL"); + $this->execute("ALTER TABLE `action_feed` ADD CONSTRAINT `action_feed_ibfk_2` FOREIGN KEY (`action_name_id`) REFERENCES `action_name` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT"); + + } + + /** + * {@inheritdoc} + */ + public function safeDown() + { + $this->execute("ALTER TABLE `action_feed` DROP FOREIGN KEY `action_feed_ibfk_2`"); + $this->execute("ALTER TABLE `action_feed` CHANGE `action_name_id` `action_name_id` INT(11) NOT NULL"); + + $this->execute("ALTER TABLE `action_name` CHANGE `id` `id` INT(11) AUTO_INCREMENT NOT NULL"); + $this->execute("ALTER TABLE `action_feed` ADD CONSTRAINT `action_feed_ibfk_2` FOREIGN KEY (`action_name_id`) REFERENCES `action_name` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT"); + + return true; + } + + /* + // Use up()/down() to run migration code without a transaction. + public function up() + { + + } + + public function down() + { + echo "m200404_175632_fix_action_id cannot be reverted.\n"; + + return false; + } + */ +} diff --git a/src/migrations/m200406_132737_lnd_rpc_action_names.php b/src/migrations/m200406_132737_lnd_rpc_action_names.php new file mode 100644 index 00000000..2adbfc7a --- /dev/null +++ b/src/migrations/m200406_132737_lnd_rpc_action_names.php @@ -0,0 +1,52 @@ +update('action_name',['id'=>\lnpay\models\action\ActionName::LND_RPC_INVOICE,'name'=>'Invoice'],['id'=>'10000']); + $this->update('action_name',['id'=>\lnpay\models\action\ActionName::LND_RPC_PEER_EVENT,'name'=>'PeerEvent'],['id'=>'10001']); + $this->update('action_name',['id'=>\lnpay\models\action\ActionName::LND_RPC_CHANNEL_EVENT_UPDATE,'name'=>'ChannelEventUpdate'],['id'=>'10002']); + $this->update('action_name',['id'=>\lnpay\models\action\ActionName::LND_RPC_CHAN_BACKUP_SNAPSHOT,'name'=>'ChanBackupSnapshot'],['id'=>'10003']); + $this->update('action_name',['id'=>\lnpay\models\action\ActionName::LND_RPC_GRAPH_TOPOLOGY_UPDATE,'name'=>'GraphTopologyUpdate'],['id'=>'10004']); + $this->update('action_name',['id'=>\lnpay\models\action\ActionName::LND_RPC_TRANSACTION,'name'=>'Transaction'],['id'=>'10005']); + } + + /** + * {@inheritdoc} + */ + public function safeDown() + { + $this->update('action_name',['id'=>10000,'name'=>'InvoiceSubscription_Invoice'],['id'=>\lnpay\models\action\ActionName::LND_RPC_INVOICE]); + $this->update('action_name',['id'=>10001,'name'=>'PeerEventSubscription_PeerEvent'],['id'=>\lnpay\models\action\ActionName::LND_RPC_PEER_EVENT]); + $this->update('action_name',['id'=>10002,'name'=>'ChannelEventSubscription_ChannelEventUpdate'],['id'=>\lnpay\models\action\ActionName::LND_RPC_CHANNEL_EVENT_UPDATE]); + $this->update('action_name',['id'=>10003,'name'=>'ChannelBackupSubscription_ChanBackupSnapshot'],['id'=>\lnpay\models\action\ActionName::LND_RPC_CHAN_BACKUP_SNAPSHOT]); + $this->update('action_name',['id'=>10004,'name'=>'GraphTopologySubscription_GraphTopologyUpdate'],['id'=>\lnpay\models\action\ActionName::LND_RPC_GRAPH_TOPOLOGY_UPDATE]); + $this->update('action_name',['id'=>10005,'name'=>'GetTransactionsRequest_Transaction'],['id'=>\lnpay\models\action\ActionName::LND_RPC_TRANSACTION]); + + return true; + } + + /* + // Use up()/down() to run migration code without a transaction. + public function up() + { + + } + + public function down() + { + echo "m200406_132737_lnd_rpc_action_names cannot be reverted.\n"; + + return false; + } + */ +} diff --git a/src/migrations/m200407_174604_node_health_actions.php b/src/migrations/m200407_174604_node_health_actions.php new file mode 100644 index 00000000..5fa04e0d --- /dev/null +++ b/src/migrations/m200407_174604_node_health_actions.php @@ -0,0 +1,48 @@ +insert('action_name',[ + 'id'=>'ln_node_connection_error', + 'type'=>'ln_node', + 'name'=>'ln_node_connection_error', + 'display_name'=>'LN Node Connection Error', + 'is_webhook'=>1 + ]); + } + + /** + * {@inheritdoc} + */ + public function safeDown() + { + $this->delete('action_name',['id'=>'ln_node_connection_error']); + + return true; + } + + /* + // Use up()/down() to run migration code without a transaction. + public function up() + { + + } + + public function down() + { + echo "m200407_174604_node_health_actions cannot be reverted.\n"; + + return false; + } + */ +} diff --git a/src/migrations/m200412_143635_base_link_paywall.php b/src/migrations/m200412_143635_base_link_paywall.php new file mode 100644 index 00000000..8e6d0562 --- /dev/null +++ b/src/migrations/m200412_143635_base_link_paywall.php @@ -0,0 +1,57 @@ +alterColumn('queue','job','LONGBLOB'); + + $this->execute("CREATE TABLE `link_type` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(255) DEFAULT NULL, + `display_name` varchar(255) DEFAULT NULL, + `description` text, + `metadata` text, + PRIMARY KEY (`id`) + ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;"); + + $this->addColumn('base_link','link_type_id','INT AFTER status_type_id'); + $this->addForeignKey('base_link_ibfk_3','base_link','link_type_id','link_type','id','RESTRICT','RESTRICT'); + } + + /** + * {@inheritdoc} + */ + public function safeDown() + { + $this->alterColumn('queue','job','BLOB'); + + $this->dropForeignKey('base_link_ibfk_3','base_link'); + $this->dropColumn('base_link','link_type_id'); + + return true; + } + + /* + // Use up()/down() to run migration code without a transaction. + public function up() + { + + } + + public function down() + { + echo "m200412_143635_base_link_paywall cannot be reverted.\n"; + + return false; + } + */ +} diff --git a/src/migrations/m200421_152700_wallet_node.php b/src/migrations/m200421_152700_wallet_node.php new file mode 100644 index 00000000..f54b41b4 --- /dev/null +++ b/src/migrations/m200421_152700_wallet_node.php @@ -0,0 +1,51 @@ +execute('ALTER TABLE `wallet` CHANGE COLUMN `node_id` `ln_node_id` VARBINARY(64)'); + $this->addForeignKey('wallet_ibfk_3','wallet','ln_node_id','ln_node','id','RESTRICT','RESTRICT'); + + $this->addColumn('ln_tx','ln_node_id','VARBINARY(64) AFTER `user_id`'); + $this->addForeignKey('ln_tx_ibfk_2','ln_tx','ln_node_id','ln_node','id','RESTRICT','RESTRICT'); + + } + + /** + * {@inheritdoc} + */ + public function safeDown() + { + $this->dropForeignKey('wallet_ibfk_3','wallet'); + $this->execute('ALTER TABLE `wallet` CHANGE COLUMN `ln_node_id` `node_id` INT(11)'); + + $this->dropForeignKey('ln_tx_ibfk_2','ln_tx'); + $this->dropColumn('ln_tx','ln_node_id'); + + return true; + } + + /* + // Use up()/down() to run migration code without a transaction. + public function up() + { + + } + + public function down() + { + echo "m200421_152700_wallet_node cannot be reverted.\n"; + + return false; + } + */ +} diff --git a/src/migrations/m200714_112957_2fa.php b/src/migrations/m200714_112957_2fa.php new file mode 100644 index 00000000..8c06732a --- /dev/null +++ b/src/migrations/m200714_112957_2fa.php @@ -0,0 +1,44 @@ +addColumn('user','mfa_secret_key','VARCHAR(255) DEFAULT NULL AFTER auth_key'); + $this->addColumn('user','email_verify','BOOL DEFAULT 0 AFTER email'); + } + + /** + * {@inheritdoc} + */ + public function safeDown() + { + $this->dropColumn('user','mfa_secret_key'); + $this->dropColumn('user','email_verify'); + + return true; + } + + /* + // Use up()/down() to run migration code without a transaction. + public function up() + { + + } + + public function down() + { + echo "m200714_112957_2fa cannot be reverted.\n"; + + return false; + } + */ +} diff --git a/src/migrations/m200719_162034_lntx_fees.php b/src/migrations/m200719_162034_lntx_fees.php new file mode 100644 index 00000000..4b726a57 --- /dev/null +++ b/src/migrations/m200719_162034_lntx_fees.php @@ -0,0 +1,42 @@ +addColumn('ln_tx','fee_msat','INT(11) DEFAULT 0 AFTER num_satoshis'); + } + + /** + * {@inheritdoc} + */ + public function safeDown() + { + $this->dropColumn('ln_tx','fee_msat'); + + return true; + } + + /* + // Use up()/down() to run migration code without a transaction. + public function up() + { + + } + + public function down() + { + echo "m200719_162034_lntx_fees cannot be reverted.\n"; + + return false; + } + */ +} diff --git a/src/migrations/m210221_130834_fee_wallet.php b/src/migrations/m210221_130834_fee_wallet.php new file mode 100644 index 00000000..bcb4f1cd --- /dev/null +++ b/src/migrations/m210221_130834_fee_wallet.php @@ -0,0 +1,50 @@ +execute("INSERT INTO `wallet_transaction_type` (`id`, `layer`, `name`, `display_name`) + VALUES + (70, 'ln', 'network_fee', 'LN Routing Fees'), + (75, 'ln', 'service_fee', 'LNPAY Service Fee'), + (79, 'ln', 'fee_balance_payment', 'Fee Balance Payment'); + "); + + $this->execute("ALTER TABLE `wallet` ADD COLUMN `balance_msat` INT(11) AFTER `balance`"); + } + + /** + * {@inheritdoc} + */ + public function safeDown() + { + $this->execute("ALTER TABLE `wallet` DROP COLUMN `balance_msat`"); + $this->execute("DELETE FROM `wallet_transaction_type` WHERE id IN(70,75,79)"); + + return true; + } + + /* + // Use up()/down() to run migration code without a transaction. + public function up() + { + + } + + public function down() + { + echo "m210221_130834_fee_wallet cannot be reverted.\n"; + + return false; + } + */ +} diff --git a/src/migrations/m210223_184645_fee_action.php b/src/migrations/m210223_184645_fee_action.php new file mode 100644 index 00000000..ee595891 --- /dev/null +++ b/src/migrations/m210223_184645_fee_action.php @@ -0,0 +1,45 @@ +execute("INSERT INTO `action_name` (`id`, `type`, `name`, `display_name`, `is_webhook`) + VALUES + ('billing_fee_incurred', 'network_fee', 'network_fee_incurred', 'LN Network Fee Incurred', 1) + "); + } + + /** + * {@inheritdoc} + */ + public function safeDown() + { + $this->execute("DELETE FROM action_name WHERE id IN ('network_fee_incurred','billing_fee_payment');"); + + return true; + } + + /* + // Use up()/down() to run migration code without a transaction. + public function up() + { + + } + + public function down() + { + echo "m210223_184645_fee_action cannot be reverted.\n"; + + return false; + } + */ +} diff --git a/src/migrations/m210402_000953_htlcEvent.php b/src/migrations/m210402_000953_htlcEvent.php new file mode 100644 index 00000000..872edc09 --- /dev/null +++ b/src/migrations/m210402_000953_htlcEvent.php @@ -0,0 +1,44 @@ +execute("INSERT INTO `action_name` (`id`, `type`, `name`, `display_name`, `is_webhook`) + VALUES + ('SubscribeHtlcEventsRequest_HtlcEvent', 'lnd_rpc', 'HtlcEvent', 'LND RPC HtlcEvent', 1); + "); + } + + /** + * {@inheritdoc} + */ + public function safeDown() + { + $this->execute("DELETE FROM action_name WHERE id IN ('SubscribeHtlcEventsRequest_HtlcEvent');"); + return true; + } + + /* + // Use up()/down() to run migration code without a transaction. + public function up() + { + + } + + public function down() + { + echo "m210402_000953_htlcEvent cannot be reverted.\n"; + + return false; + } + */ +} diff --git a/src/migrations/m210414_152818_wallet_type.php b/src/migrations/m210414_152818_wallet_type.php new file mode 100644 index 00000000..bc712882 --- /dev/null +++ b/src/migrations/m210414_152818_wallet_type.php @@ -0,0 +1,66 @@ +execute("CREATE TABLE `wallet_type` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(255) DEFAULT NULL, + `display_name` varchar(255) DEFAULT NULL, + PRIMARY KEY (`id`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8;"); + + $this->execute("ALTER TABLE `wallet` ADD COLUMN `wallet_type_id` INT(11) AFTER `external_hash`"); + $this->execute("ALTER TABLE `wallet` ADD CONSTRAINT `wallet_ibfk_4` FOREIGN KEY (`wallet_type_id`) REFERENCES `wallet_type` (`id`)"); + + $this->batchInsert('wallet_type',['id','name','display_name'],[ + [ + 'id'=>5, + 'name'=>'generic_wallet', + 'display_name'=>'Generic Wallet' + ], + [ + 'id'=>15, + 'name'=>'fee_wallet', + 'display_name'=>'Fee Wallet' + ] + ]); + } + + /** + * {@inheritdoc} + */ + public function safeDown() + { + $this->execute("ALTER TABLE `wallet` DROP FOREIGN KEY `wallet_ibfk_4`"); + $this->execute("ALTER TABLE `wallet` DROP COLUMN `wallet_type_id`"); + + $this->dropTable('wallet_type'); + + return true; + } + + /* + // Use up()/down() to run migration code without a transaction. + public function up() + { + + } + + public function down() + { + echo "m210414_152818_wallet_type cannot be reverted.\n"; + + return false; + } + */ +} diff --git a/src/migrations/m210423_153759_lnurl_withdraw_role.php b/src/migrations/m210423_153759_lnurl_withdraw_role.php new file mode 100644 index 00000000..b38fe27b --- /dev/null +++ b/src/migrations/m210423_153759_lnurl_withdraw_role.php @@ -0,0 +1,60 @@ +authManager; + + // add "createPost" permission + $public_withdraw = $auth->createPermission('wallet_public_withdraw'); + $public_withdraw->description = 'Wallet Public Withdraw'; + $auth->add($public_withdraw); + + $lnurl_withdraw = $auth->createRole('Wallet LNURL Withdraw'); + $lnurl_withdraw->description = 'read,withdraw'; + $auth->add($lnurl_withdraw); + $auth->addChild($lnurl_withdraw, $auth->getPermission('wallet_withdraw')); + $auth->addChild($lnurl_withdraw, $auth->getPermission('wallet_read')); + $auth->addChild($lnurl_withdraw, $public_withdraw); + + foreach (\lnpay\wallet\models\Wallet::find()->each() as $w) { + UserAccessKey::createKey($w->user_id,'Wallet LNURL Withdraw',['wallet_id'=>$w->id]); + } + } + + /** + * {@inheritdoc} + */ + public function safeDown() + { + $this->delete('auth_item',['name'=>'Wallet LNURL Withdraw']); + $this->delete('auth_item',['name'=>'wallet_public_withdraw']); + + return true; + } + + /* + // Use up()/down() to run migration code without a transaction. + public function up() + { + + } + + public function down() + { + echo "m210423_153759_lnurl_withdraw_role cannot be reverted.\n"; + + return false; + } + */ +} diff --git a/src/migrations/m210707_194325_node_onchain.php b/src/migrations/m210707_194325_node_onchain.php new file mode 100644 index 00000000..727ba553 --- /dev/null +++ b/src/migrations/m210707_194325_node_onchain.php @@ -0,0 +1,48 @@ +execute("ALTER TABLE `ln_node` ADD COLUMN `onchain_confirmed_sats` INT(11) DEFAULT 0 AFTER `alias`"); + $this->execute("ALTER TABLE `ln_node` ADD COLUMN `onchain_unconfirmed_sats` INT(11) DEFAULT 0 AFTER `onchain_confirmed_sats`"); + $this->execute("ALTER TABLE `ln_node` ADD COLUMN `onchain_total_sats` INT(11) DEFAULT 0 AFTER `onchain_unconfirmed_sats`"); + $this->execute("ALTER TABLE `ln_node` ADD COLUMN `onchain_nextaddr` VARCHAR(255) AFTER `onchain_total_sats`"); + } + + /** + * {@inheritdoc} + */ + public function safeDown() + { + $this->execute("ALTER TABLE `ln_node` DROP COLUMN `onchain_confirmed_sats`"); + $this->execute("ALTER TABLE `ln_node` DROP COLUMN `onchain_unconfirmed_sats`"); + $this->execute("ALTER TABLE `ln_node` DROP COLUMN `onchain_total_sats`"); + $this->execute("ALTER TABLE `ln_node` DROP COLUMN `onchain_nextaddr`"); + + return true; + } + + /* + // Use up()/down() to run migration code without a transaction. + public function up() + { + + } + + public function down() + { + echo "m210707_194325_node_onchain cannot be reverted.\n"; + + return false; + } + */ +} diff --git a/src/migrations/m211017_134236_loop.php b/src/migrations/m211017_134236_loop.php new file mode 100644 index 00000000..18fdf39f --- /dev/null +++ b/src/migrations/m211017_134236_loop.php @@ -0,0 +1,74 @@ +batchInsert('action_name',['id','type','name','display_name','is_webhook'],[ + [ + 'id'=>550, + 'type'=>'wallet', + 'name'=>'ln_loop_out', + 'display_name'=>'Loop Out', + 'is_webhook'=>0 + ], + [ + 'id'=>555, + 'type'=>'wallet', + 'name'=>'ln_loop_in', + 'display_name'=>'Loop In', + 'is_webhook'=>0 + ] + ]); + + $this->batchInsert('wallet_transaction_type',['id','layer','name','display_name'],[ + [ + 'id'=>50, + 'layer'=>'ln', + 'name'=>'ln_loop_out', + 'display_name'=>'LN Loop Out', + ], + [ + 'id'=>55, + 'layer'=>'ln', + 'name'=>'ln_loop_in', + 'display_name'=>'LN Loop In', + ] + ]); + } + + /** + * {@inheritdoc} + */ + public function safeDown() + { + $this->delete('wallet_transaction_type',['id'=>[50,55]]); + $this->execute("DELETE FROM `action_name` WHERE id = '50'"); + $this->execute("DELETE FROM `action_name` WHERE id = '55'"); + + return true; + } + + /* + // Use up()/down() to run migration code without a transaction. + public function up() + { + + } + + public function down() + { + echo "m211017_134236_loop cannot be reverted.\n"; + + return false; + } + */ +} diff --git a/src/migrations/m211228_154357_amp_lntx_db.php b/src/migrations/m211228_154357_amp_lntx_db.php new file mode 100644 index 00000000..435d4998 --- /dev/null +++ b/src/migrations/m211228_154357_amp_lntx_db.php @@ -0,0 +1,44 @@ +addColumn('ln_tx','is_amp','bool AFTER is_keysend'); + $this->addColumn('ln_tx','payment_addr','varchar(255) AFTER description_hash'); + } + + /** + * {@inheritdoc} + */ + public function safeDown() + { + $this->dropColumn('ln_tx','is_amp'); + $this->dropColumn('ln_tx','payment_addr'); + + return true; + } + + /* + // Use up()/down() to run migration code without a transaction. + public function up() + { + + } + + public function down() + { + echo "m211228_154357_amp_lntx_db cannot be reverted.\n"; + + return false; + } + */ +} diff --git a/src/migrations/m211229_135314_lnurlp.php b/src/migrations/m211229_135314_lnurlp.php new file mode 100644 index 00000000..22bd5838 --- /dev/null +++ b/src/migrations/m211229_135314_lnurlp.php @@ -0,0 +1,208 @@ +execute("CREATE TABLE `wallet_lnurlpay` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `created_at` int(11) NOT NULL, + `updated_at` int(11) NOT NULL, + `user_id` int(11) NOT NULL, + `wallet_id` int(11) NOT NULL, + `user_label` varchar(255) DEFAULT NULL, + `status_type_id` int(11) NOT NULL, + `external_hash` varchar(45) NOT NULL, + `json_data` json DEFAULT NULL, + `lnurl_encoded` text, + `lnurl_decoded` text, + `lnurlp_minSendable_msat` int(11) DEFAULT NULL, + `lnurlp_maxSendable_msat` int(11) DEFAULT NULL, + `lnurlp_short_desc` text, + `lnurlp_successAction` json DEFAULT NULL, + `lnurlp_identifier` varchar(255) DEFAULT NULL, + `lnurlp_commentAllowed` int(11) DEFAULT NULL, + `lnurlp_success_message` text, + `lnurlp_success_url` text, + `lnurlp_image_base64` text, + `lnurlp_metadata` text DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `user_id` (`user_id`), + KEY `wallet_id` (`wallet_id`), + KEY `status_type_id` (`status_type_id`), + CONSTRAINT `wallet_lnurlpay_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `wallet_lnurlpay_ibfk_2` FOREIGN KEY (`wallet_id`) REFERENCES `wallet` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `wallet_lnurlpay_ibfk_3` FOREIGN KEY (`status_type_id`) REFERENCES `status_type` (`id`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8;"); + + //create wallet_lnurlw table, but not all the way + $this->execute("CREATE TABLE `wallet_lnurlw` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `created_at` int(11) NOT NULL, + `updated_at` int(11) NOT NULL, + `user_id` int(11) NOT NULL, + `wallet_id` int(11) NOT NULL, + `status_type_id` int(11) NOT NULL, + `external_hash` varchar(45) NOT NULL, + `json_data` json DEFAULT NULL, + `lnurl_encoded` text, + `lnurl_decoded` text, + `lnurlw_minWithdrawable_msat` BIGINT(20) DEFAULT NULL, + `lnurlw_maxWithdrawable_msat` BIGINT(20) DEFAULT NULL, + `lnurlw_defaultDescription` text, + PRIMARY KEY (`id`), + KEY `user_id` (`user_id`), + KEY `wallet_id` (`wallet_id`), + KEY `status_type_id` (`status_type_id`), + CONSTRAINT `wallet_lnurlw_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `wallet_lnurlw_ibfk_2` FOREIGN KEY (`wallet_id`) REFERENCES `wallet` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `wallet_lnurlw_ibfk_3` FOREIGN KEY (`status_type_id`) REFERENCES `status_type` (`id`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8;"); + + //add wallet_lnurlpay_id, wallet_lnurlw_id column to wallet_transaction table + $this->addColumn('wallet_transaction','wallet_lnurlpay_id','int(11) AFTER external_hash'); + $this->execute("ALTER TABLE `wallet_transaction` ADD CONSTRAINT `wallet_transaction_ibfk_5` FOREIGN KEY (`wallet_lnurlpay_id`) REFERENCES `wallet_lnurlpay` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT"); + $this->addColumn('wallet_transaction','wallet_lnurlw_id','int(11) AFTER wallet_lnurlpay_id'); + $this->execute("ALTER TABLE `wallet_transaction` ADD CONSTRAINT `wallet_transaction_ibfk_6` FOREIGN KEY (`wallet_lnurlw_id`) REFERENCES `wallet_lnurlpay` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT"); + + + //add wallet_lnurl_active / wallet_lnurl_inactive to status_type table + $this->insert('status_type', + [ + 'id'=>450, + 'type'=>'lnurl', + 'name'=>'lnurl_active', + 'display_name'=>'LNURL Active', + ] + ); + + $this->insert('status_type',[ + 'id'=>455, + 'type'=>'lnurl', + 'name'=>'lnurl_inactive', + 'display_name'=>'LNURL Inactive', + ]); + + //create Wallet LNURL Pay auth_item + //add wallet_deposit, wallet_read as invoice children for Wallet LNURL Pay + $auth = \LNPay::$app->authManager; + + $lnurl_pay = $auth->createRole('Wallet LNURL Pay'); + $lnurl_pay->description = 'deposit'; + $auth->add($lnurl_pay); + $auth->addChild($lnurl_pay, $auth->getPermission('wallet_deposit')); + + //add default_wallet to user table + $this->addColumn('user','default_wallet_id','int(11) AFTER password_reset_token'); + $this->execute("ALTER TABLE `user` ADD CONSTRAINT `user_ibfk_2` FOREIGN KEY (`default_wallet_id`) REFERENCES `wallet` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT"); + + + //add default_lnurlpay_id, default_lnurlw_id, to wallet table + $this->addColumn('wallet','default_lnurlpay_id','int(11) AFTER external_hash'); + $this->execute("ALTER TABLE `wallet` ADD CONSTRAINT `wallet_ibfk_5` FOREIGN KEY (`default_lnurlpay_id`) REFERENCES `wallet_lnurlpay` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT"); + $this->addColumn('wallet','default_lnurlw_id','int(11) AFTER external_hash'); + $this->execute("ALTER TABLE `wallet` ADD CONSTRAINT `wallet_ibfk_6` FOREIGN KEY (`default_lnurlw_id`) REFERENCES `wallet_lnurlw` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT"); + + + $this->insert('wallet_transaction_type',[ + 'id'=>60, + 'layer'=>'ln', + 'name'=>'ln_lnurl_pay', + 'display_name'=>'LNURL Pay', + ]); + + $this->insert('wallet_transaction_type',[ + 'id'=>65, + 'layer'=>'ln', + 'name'=>'ln_lnurl_withdraw', + 'display_name'=>'LNURL Withdraw', + ]); + + foreach (\lnpay\wallet\models\Wallet::find()->each() as $w) { + $user = $w->user; + + //Add lnurlpay link + try { + //Add auth key permission + \lnpay\models\UserAccessKey::createKey($w->user_id,'Wallet LNURL Pay',['wallet_id'=>$w->id]); + + $lnurlpModel = $w->generateLnurlpay(['lnurlp_maxSendable_msat'=>$user->getJsonData($user::DATA_MAX_DEPOSIT)*1000]); + $w->default_lnurlpay_id = $lnurlpModel->id; + $w->save(); + } catch ( \Throwable $t) + { + // not much to do at this point + echo $t; + } + + } + } + + /** + * {@inheritdoc} + */ + public function safeDown() + { + //remove foreign constraints + $this->dropForeignKey('wallet_transaction_ibfk_5','wallet_transaction'); + $this->dropForeignKey('wallet_ibfk_6','wallet'); + $this->dropForeignKey('wallet_ibfk_5','wallet'); + $this->dropForeignKey('wallet_transaction_ibfk_6','wallet_transaction'); + $this->dropForeignKey('user_ibfk_2','user'); + + $this->truncateTable('wallet_lnurlpay'); + $this->truncateTable('wallet_lnurlw'); + $this->delete('wallet_transaction',['wtx_type_id'=>[\lnpay\wallet\models\WalletTransactionType::LN_LNURL_PAY]]); + //remove default_lnurlpay_id, default_lnurlw_id, to wallet table + $this->dropColumn('wallet','default_lnurlpay_id'); + $this->dropColumn('wallet','default_lnurlw_id'); + + //remove default_wallet to user table + $this->dropColumn('user','default_wallet_id'); + + //remove Wallet LNURL Pay auth_item + //@TODO: clean up old values in user_access_key table + $this->delete('auth_item',['name'=>'Wallet LNURL Pay']); + + //remove wallet_lnurl_active / wallet_lnurl_inactive to status_type table + $this->delete('status_type',['id'=>[450,455]]); + + $this->delete('wallet_transaction_type',['id'=>[60,65]]); + + //remove wallet_lnurlpay_id, wallet_lnurlw_id column to wallet_transaction table + $this->dropColumn('wallet_transaction','wallet_lnurlpay_id'); + $this->dropColumn('wallet_transaction','wallet_lnurlw_id'); + + //drop wallet_lnurlw table, but not all the way + $this->dropTable('wallet_lnurlw'); + + //drop wallet_lnurlpay table + $this->dropTable('wallet_lnurlpay'); + + return true; + } + + /* + // Use up()/down() to run migration code without a transaction. + public function up() + { + + } + + public function down() + { + echo "m211229_135314_lnurlp cannot be reverted.\n"; + + return false; + } + */ +} diff --git a/src/migrations/m220116_141606_wallet_send_failure.php b/src/migrations/m220116_141606_wallet_send_failure.php new file mode 100644 index 00000000..b22580af --- /dev/null +++ b/src/migrations/m220116_141606_wallet_send_failure.php @@ -0,0 +1,47 @@ +execute("INSERT INTO `action_name` (`id`, `type`, `name`, `display_name`, `is_webhook`) + VALUES + (515, 'wallet', 'wallet_send_failure', 'Wallet Send Failure', 1), + ('ln_node_invoice_payment_failure', 'ln_node', 'ln_node_invoice_payment_failure', 'LN Node Send Failure', 1), + ('ln_node_spontaneous_send_failure', 'ln_node', 'ln_node_spontaneous_send_failure', 'LN Node Keysend Failure', 1); + "); + } + + /** + * {@inheritdoc} + */ + public function safeDown() + { + $this->delete('action_name',['id'=>['ln_node_invoice_payment_failure','ln_node_spontaneous_send_failure','515']]); + + return true; + } + + /* + // Use up()/down() to run migration code without a transaction. + public function up() + { + + } + + public function down() + { + echo "m220116_141606_wallet_send_failure cannot be reverted.\n"; + + return false; + } + */ +} diff --git a/src/migrations/m220124_143632_lnurlpay_inoutbound.php b/src/migrations/m220124_143632_lnurlpay_inoutbound.php new file mode 100644 index 00000000..7a72291f --- /dev/null +++ b/src/migrations/m220124_143632_lnurlpay_inoutbound.php @@ -0,0 +1,57 @@ +insert('wallet_transaction_type',[ + 'id'=>62, + 'layer'=>'ln', + 'name'=>'ln_lnurl_pay_outbound', + 'display_name'=>'LNURL Pay Outbound', + ]); + + $this->update('wallet_transaction_type', + ['name'=>'ln_lnurl_pay_inbound'], + ['id'=>\lnpay\wallet\models\WalletTransactionType::LN_LNURL_PAY_INBOUND] + ); + + } + + /** + * {@inheritdoc} + */ + public function safeDown() + { + $this->delete('wallet_transaction_type',['id'=>62]); + $this->update('wallet_transaction_type', + ['name'=>'ln_lnurl_pay'], + ['id'=>\lnpay\wallet\models\WalletTransactionType::LN_LNURL_PAY_INBOUND] + ); + + return true; + } + + /* + // Use up()/down() to run migration code without a transaction. + public function up() + { + + } + + public function down() + { + echo "m220124_143632_lnurlpay_inoutbound cannot be reverted.\n"; + + return false; + } + */ +} diff --git a/src/migrations/m220130_004513_wallet_change_node.php b/src/migrations/m220130_004513_wallet_change_node.php new file mode 100644 index 00000000..ab09a98b --- /dev/null +++ b/src/migrations/m220130_004513_wallet_change_node.php @@ -0,0 +1,44 @@ +execute("INSERT INTO `action_name` (`id`, `type`, `name`, `display_name`, `is_webhook`) + VALUES + (545, 'wallet', 'wallet_change_node', 'Wallet Change Node', 1)"); + } + + /** + * {@inheritdoc} + */ + public function safeDown() + { + $this->delete('action_name',['id'=>['545']]); + + return true; + } + + /* + // Use up()/down() to run migration code without a transaction. + public function up() + { + + } + + public function down() + { + echo "m220130_004513_wallet_change_node cannot be reverted.\n"; + + return false; + } + */ +} diff --git a/src/migrations/m220203_170922_utf8mb4_encoding.php b/src/migrations/m220203_170922_utf8mb4_encoding.php new file mode 100644 index 00000000..a1c2a8b8 --- /dev/null +++ b/src/migrations/m220203_170922_utf8mb4_encoding.php @@ -0,0 +1,49 @@ +execute("ALTER TABLE ln_tx CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin"); + + $this->execute("ALTER TABLE action_data CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin"); + $this->execute("ALTER TABLE user_api_log CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin"); + $this->execute("ALTER TABLE wallet_transaction CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin"); + } + + /** + * {@inheritdoc} + */ + public function safeDown() + { + $this->execute("ALTER TABLE action_data CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci"); + $this->execute("ALTER TABLE user_api_log CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci"); + $this->execute("ALTER TABLE wallet_transaction CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci"); + + return true; + } + + /* + // Use up()/down() to run migration code without a transaction. + public function up() + { + + } + + public function down() + { + echo "m220203_170922_utf8mb4_encoding cannot be reverted.\n"; + + return false; + } + */ +} diff --git a/src/migrations/m220208_011157_org.php b/src/migrations/m220208_011157_org.php new file mode 100644 index 00000000..85d442be --- /dev/null +++ b/src/migrations/m220208_011157_org.php @@ -0,0 +1,129 @@ +execute("CREATE TABLE `org_user_type` ( + `id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(255) DEFAULT NULL, + `display_name` varchar(255) DEFAULT NULL, + PRIMARY KEY (`id`) + ) ENGINE=InnoDB AUTO_INCREMENT=51 DEFAULT CHARSET=utf8mb4;"); + + $this->execute("INSERT INTO `org_user_type` (`id`, `name`, `display_name`) + VALUES + (20, 'owner', 'Owner'), + (30, 'admin', 'Administrator'), + (40, 'developer', 'Developer'), + (50, 'app_user', 'App-Scoped User'); + "); + + $this->execute("CREATE TABLE `org` ( + `id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `created_at` int(11) DEFAULT NULL, + `updated_at` int(11) DEFAULT NULL, + `name` varchar(255) NOT NULL DEFAULT '', + `display_name` varchar(255) NOT NULL DEFAULT '', + `external_hash` varchar(128) NOT NULL DEFAULT '', + `status_type_id` int(11) NOT NULL, + `json_data` json DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `status_type_id` (`status_type_id`), + CONSTRAINT `org_ibfk_1` FOREIGN KEY (`status_type_id`) REFERENCES `status_type` (`id`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;"); + + $this->addColumn('user','org_id','int(11) unsigned AFTER api_version'); + $this->addColumn('user','org_user_type_id','int(11) unsigned AFTER org_id'); + + $this->addForeignKey('user_ibfk_5','user','org_id','org','id','RESTRICT','RESTRICT'); + $this->addForeignKey('user_ibfk_6','user','org_user_type_id','org_user_type','id','RESTRICT','RESTRICT'); + + $this->addColumn('ln_node','org_id','int(11) unsigned AFTER user_id'); + $this->addForeignKey('ln_node_ibfk_10','ln_node','org_id','org','id','RESTRICT','RESTRICT'); + + $this->insert('status_type',[ + 'id'=>500, + 'type'=>'org', + 'name'=>'org_active', + 'display_name'=>'Org Active', + ]); + + $this->insert('status_type',[ + 'id'=>510, + 'type'=>'org', + 'name'=>'org_inactive', + 'display_name'=>'Org Inactive', + ]); + + $this->addColumn('ln_node','is_custodian','bool AFTER org_id'); + + //create default orgs for users + //populate user with default org + $this->insert('org',[ + 'id'=>2000, + 'created_at'=>time(), + 'updated_at'=>time(), + 'name'=>'lnpay_default_org', + 'display_name'=>'LNPay Organization', + 'external_hash'=>'org_EoqWo3Gs', + 'status_type_id'=>500 + ]); + + \lnpay\models\User::updateAll(['org_id'=>2000,'org_user_type_id'=>40]); + + //on push for prod migrate + //Set lnpay user as default org owner + //set lnpay nodes is_custodian appropriately + //1. Create new orgs per users with LN node + //2. Update user table to reflect org association + //3. Update node table to reflect org association + + } + + /** + * {@inheritdoc} + */ + public function safeDown() + { + $this->delete('org',['id'=>2000]); + $this->dropForeignKey('ln_node_ibfk_10','ln_node'); + $this->dropColumn('ln_node','org_id'); + $this->dropColumn('ln_node','is_custodian'); + $this->dropForeignKey('user_ibfk_5','user'); + $this->dropForeignKey('user_ibfk_6','user'); + $this->dropColumn('user','org_id'); + $this->dropColumn('user','org_user_type_id'); + $this->dropTable('org_user_type'); + $this->dropTable('org'); + + $this->delete('status_type',['type'=>'org']); + + + + return true; + } + + /* + // Use up()/down() to run migration code without a transaction. + public function up() + { + + } + + public function down() + { + echo "m220208_011157_org cannot be reverted.\n"; + + return false; + } + */ +} diff --git a/src/migrations/m220225_185302_lnurlpay_domain.php b/src/migrations/m220225_185302_lnurlpay_domain.php new file mode 100644 index 00000000..568cc26e --- /dev/null +++ b/src/migrations/m220225_185302_lnurlpay_domain.php @@ -0,0 +1,44 @@ +addColumn('wallet_lnurlpay','custy_domain_id','int(11) AFTER lnurlp_short_desc'); + $this->addForeignKey('wallet_lnurlpay_ibfk_5','wallet_lnurlpay','custy_domain_id','custy_domain','id','RESTRICT','RESTRICT'); + } + + /** + * {@inheritdoc} + */ + public function safeDown() + { + $this->dropForeignKey('wallet_lnurlpay_ibfk_5','wallet_lnurlpay'); + $this->dropColumn('wallet_lnurlpay','custy_domain_id'); + + return true; + } + + /* + // Use up()/down() to run migration code without a transaction. + public function up() + { + + } + + public function down() + { + echo "m220225_185302_lnurlpay_domain cannot be reverted.\n"; + + return false; + } + */ +} diff --git a/src/migrations/m220302_141930_cdomain_id.php b/src/migrations/m220302_141930_cdomain_id.php new file mode 100644 index 00000000..e7f6a83d --- /dev/null +++ b/src/migrations/m220302_141930_cdomain_id.php @@ -0,0 +1,42 @@ +addColumn('custy_domain','external_hash','varchar(255) AFTER status_type_id'); + } + + /** + * {@inheritdoc} + */ + public function safeDown() + { + $this->dropColumn('custy_domain','external_hash'); + + return true; + } + + /* + // Use up()/down() to run migration code without a transaction. + public function up() + { + + } + + public function down() + { + echo "m220302_141930_cdomain_id cannot be reverted.\n"; + + return false; + } + */ +} diff --git a/src/migrations/m220426_174013_wallet_external_admin.php b/src/migrations/m220426_174013_wallet_external_admin.php new file mode 100644 index 00000000..a35a7916 --- /dev/null +++ b/src/migrations/m220426_174013_wallet_external_admin.php @@ -0,0 +1,72 @@ +authManager; + + $authRole = $auth->createRole(\lnpay\behaviors\UserAccessKeyBehavior::ROLE_WALLET_EXTERNAL_WEBSITE_ADMIN); + $authRole->description = 'Can perform all actions on public website'; + $auth->add($authRole); + $auth->addChild($authRole, $auth->getPermission('wallet_deposit')); + $auth->addChild($authRole, $auth->getPermission('wallet_withdraw')); + $auth->addChild($authRole, $auth->getPermission('wallet_read')); + $auth->addChild($authRole, $auth->getPermission('wallet_tx_read')); + + $authRole = $auth->createRole(\lnpay\behaviors\UserAccessKeyBehavior::ROLE_WALLET_EXTERNAL_WEBSITE_VIEW); + $authRole->description = 'Can view wallet on public website'; + $auth->add($authRole); + $auth->addChild($authRole, $auth->getPermission('wallet_read')); + $auth->addChild($authRole, $auth->getPermission('wallet_tx_read')); + + foreach (\lnpay\wallet\models\Wallet::find()->each() as $w) { + + try { + //Add new wallet external key + \lnpay\models\UserAccessKey::createKey($w->user_id,\lnpay\behaviors\UserAccessKeyBehavior::ROLE_WALLET_EXTERNAL_WEBSITE_VIEW,['wallet_id'=>$w->id]); + \lnpay\models\UserAccessKey::createKey($w->user_id,\lnpay\behaviors\UserAccessKeyBehavior::ROLE_WALLET_EXTERNAL_WEBSITE_ADMIN,['wallet_id'=>$w->id]); + } catch ( \Throwable $t) + { + // not much to do at this point + echo $t; + } + + } + } + + /** + * {@inheritdoc} + */ + public function safeDown() + { + $this->delete('auth_item',['name'=>\lnpay\behaviors\UserAccessKeyBehavior::ROLE_WALLET_EXTERNAL_WEBSITE_VIEW]); + $this->delete('auth_item',['name'=>\lnpay\behaviors\UserAccessKeyBehavior::ROLE_WALLET_EXTERNAL_WEBSITE_ADMIN]); + + return true; + } + + /* + // Use up()/down() to run migration code without a transaction. + public function up() + { + + } + + public function down() + { + echo "m220426_174013_wallet_external_admin cannot be reverted.\n"; + + return false; + } + */ +} diff --git a/src/migrations/m230109_155754_wtx_rollup.php b/src/migrations/m230109_155754_wtx_rollup.php new file mode 100644 index 00000000..02f05c29 --- /dev/null +++ b/src/migrations/m230109_155754_wtx_rollup.php @@ -0,0 +1,55 @@ +insert('wallet_transaction_type',[ + 'id'=>45, + 'layer'=>'ln', + 'name'=>'balance_roll_up', + 'display_name'=>'Balance Roll Up' + ]); + + //fix this so we can delete wallets. this prevents deletion due to FK + $this->dropForeignKey('wallet_ibfk_5','wallet'); + $this->addForeignKey('wallet_ibfk_5','wallet','default_lnurlpay_id','wallet_lnurlpay','id','SET NULL','SET NULL'); + + $this->dropForeignKey('wallet_ibfk_6','wallet'); + $this->addForeignKey('wallet_ibfk_6','wallet','default_lnurlw_id','wallet_lnurlw','id','SET NULL','SET NULL'); + + } + + /** + * {@inheritdoc} + */ + public function safeDown() + { + $this->delete('wallet_transaction_type',['id'=>45]); + + return true; + } + + /* + // Use up()/down() to run migration code without a transaction. + public function up() + { + + } + + public function down() + { + echo "m230109_155754_wtx_rollup cannot be reverted.\n"; + + return false; + } + */ +} diff --git a/src/models/BaseLink.php b/src/models/BaseLink.php new file mode 100644 index 00000000..393d426d --- /dev/null +++ b/src/models/BaseLink.php @@ -0,0 +1,228 @@ + \yii\behaviors\TimestampBehavior::className(), + 'json'=>JsonDataBehavior::class + ]; + } + + /** + * {@inheritdoc} + */ + public function rules() + { + return [ + ['external_hash','default','value'=>'blnk_'.HelperComponent::generateRandomString(12)], + [['rep', 'custy_domain_id', 'status_type_id','user_id'], 'integer'], + [['custy_domain_id'], 'default', 'value'=>CustyDomain::DEFAULT_DOMAIN_LNPAY], + [['status_type_id'], 'default', 'value'=>StatusType::LINK_ACTIVE], + [['short_url'], 'default', 'value'=>function($model) { return $model->generateWords; }], + ['destination_url','url','defaultScheme' => 'https'], + [['short_url', 'destination_url'], 'string'] + ]; + } + + /** + * {@inheritdoc} + */ + public function attributeLabels() + { + return [ + 'id' => 'ID', + 'created_at' => 'Created At', + 'updated_at' => 'Updated At', + 'rep' => 'Rep', + 'short_url' => 'Short Url', + 'destination_url' => 'Destination Url', + 'custy_domain_id' => 'Custy Domain ID', + 'status_type_id' => 'Status Type ID', + 'json_data' => 'Json Data', + ]; + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getCustyDomain() + { + return $this->hasOne(CustyDomain::className(), ['id' => 'custy_domain_id']); + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getStatusType() + { + return $this->hasOne(StatusType::className(), ['id' => 'status_type_id']); + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getLinkLayout() + { + return $this->hasOne(Layout::className(), ['id' => 'link_layout_id']); + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getBaseLinkAnalytics() + { + return $this->hasMany(BaseLinkAnalytics::className(), ['base_link_id' => 'id']); + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getFaucets() + { + return $this->hasMany(Faucet::className(), ['base_link_id' => 'id']); + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getPywls() + { + return $this->hasMany(Pywl::className(), ['base_link_id' => 'id']); + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getPywl() + { + return $this->hasOne(Pywl::className(), ['base_link_id' => 'id']); + } + + public function generateLink() + { + if ($this->save()) { + return $this; + } else { + throw new \Exception(HelperComponent::getFirstErrorFromFailedValidation($this)); + } + } + + public function getGenerateWords() + { + return substr(md5(mt_rand()),0,6); + } + + public function getUrl($params=[],$distro_method_name=NULL) + { + if ($distro_method_name === NULL) + $distro_method_name = DistroMethod::NAME_WEB; + + $preserveBaseUrl = \LNPay::$app->urlManager->baseUrl; + $base_url = (@$this->custyDomain->fullBaseUrl?:$preserveBaseUrl."/to/"); //if not set in DB + \LNPay::$app->urlManager->setBaseUrl($base_url); + + $url = \LNPay::$app->urlManager->createAbsoluteUrl(["{$this->short_url}/{$distro_method_name}"]+$params); + + \LNPay::$app->urlManager->setBaseUrl($preserveBaseUrl); + + return $url; + } + + public function getRawUrl($params=[]) + { + if (\LNPay::$app instanceof Yii\web\Application){ + $preserveBaseUrl = \LNPay::$app->urlManager->baseUrl; + } + + $base_url = (@$this->custyDomain->fullBaseUrl?:$preserveBaseUrl."/to/"); //if not set in DB + \LNPay::$app->urlManager->setBaseUrl($base_url); + + $url = \LNPay::$app->urlManager->createAbsoluteUrl(["{$this->short_url}"]+$params); + + if (\LNPay::$app instanceof Yii\web\Application) { + \LNPay::$app->urlManager->setBaseUrl($preserveBaseUrl); + } + + return $url; + } + + public function getProductObject() + { + switch ($this->link_type_id) { + case 1: + break; + } + } + + /** + * @inheritdoc + */ + public function beforeSave($insert) + { + if (parent::beforeSave($insert)) { + if ($insert) { + + } + + return true; + } else { + return false; + } + } + + + + /** + * + * + * API STUFF + * + * + */ + + public function fields() + { + $fields = parent::fields(); + $fields['statusType'] = 'statusType'; + $fields['custyDomain'] = 'custyDomain'; + $fields['id'] = $fields['external_hash']; + + unset($fields['external_hash'],$fields['user_id'],$fields['rep'],$fields['json_data'],$fields['updated_iat'],$fields['link_type_id'],$fields['link_layout_id'],$fields['status_type_id'],$fields['custy_domain_id']); + return $fields; + } +} diff --git a/src/models/BaseLinkAnalytics.php b/src/models/BaseLinkAnalytics.php new file mode 100644 index 00000000..2c3442e8 --- /dev/null +++ b/src/models/BaseLinkAnalytics.php @@ -0,0 +1,111 @@ + 255], + [['device_type'], 'string', 'max' => 11], + [['base_link_id'], 'exist', 'skipOnError' => true, 'targetClass' => BaseLink::className(), 'targetAttribute' => ['base_link_id' => 'id']], + ]; + } + + /** + * {@inheritdoc} + */ + public function attributeLabels() + { + return [ + 'id' => 'ID', + 'created_at' => 'Created At', + 'updated_at' => 'Updated At', + 'base_link_id' => 'Base Link ID', + 'engagement_type' => 'Engagement Type', + 'referrer' => 'Referrer', + 'requester_ip' => 'Requester Ip', + 'device_type' => 'Device Type', + 'json_data' => 'Json Data', + ]; + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getBaseLink() + { + return $this->hasOne(BaseLink::className(), ['id' => 'base_link_id']); + } + + public static function createEntry($base_link_id,$engagement_type='click',$data=[]) + { + $baseLink = BaseLink::findOne($base_link_id); + $local_refer = false; + $dObjects = CustyDomain::find()->where(['id'=>[CustyDomain::DEFAULT_DOMAIN_LNPAY,CustyDomain::DEFAULT_DOMAIN_ID]])->all(); + foreach ($dObjects as $cd) + if (stripos(\LNPay::$app->request->getReferrer(),$cd->domain_name)!==FALSE) { + return -1; + } + + $ba = new BaseLinkAnalytics(); + $ba->base_link_id = $baseLink->id; + $ba->engagement_type = $engagement_type; + $ba->referrer = \LNPay::$app->request->getReferrer(); + $ba->requester_ip = \LNPay::$app->request->getUserIp(); + $ba->user_agent = \LNPay::$app->request->getUserAgent(); + $ba->domain = \LNPay::$app->request->getHostInfo(); + $ba->appendJsonData(ArrayHelper::merge(\LNPay::$app->request->getQueryParams(),$data)); + if ($b = $ba->save()) { + return true; + } + } +} diff --git a/src/models/ChangePasswordForm.php b/src/models/ChangePasswordForm.php new file mode 100644 index 00000000..543443f3 --- /dev/null +++ b/src/models/ChangePasswordForm.php @@ -0,0 +1,68 @@ + 6], + ['currentPassword', 'findPasswords'], + ['confirmNewPassword', 'compare', 'compareAttribute'=>'newPassword'], + ]; + } + + /** + * Verifying the current password with your existing password. + * @param $attribute + * @param $params + * @throws \yii\base\Exception + * @return void + */ + public function findPasswords($attribute, $params): void + { + $user = User::findOne(\LNPay::$app->user->id); + if (!$user->validatePassword($this->currentPassword)) { + $this->addError($attribute, 'Current password is incorrect.'); + } + } + + /** + * @return array + */ + public function attributeLabels(): array + { + return [ + 'currentPassword'=>'Current Password', + 'newPassword'=>'New Password', + 'confirmNewPassword'=>'Confirm New Password', + ]; + } +} diff --git a/src/models/CustyDomain.php b/src/models/CustyDomain.php new file mode 100644 index 00000000..4f74dd6c --- /dev/null +++ b/src/models/CustyDomain.php @@ -0,0 +1,172 @@ +StatusType::CUSTYDOMAIN_ACTIVE], + [['use_https'],'default','value'=>1], + [['external_hash'],'default','value'=>'cdom_'.HelperComponent::generateRandomString(8)], + [['display_name','domain_name'], 'required'], + [['domain_name'], 'string', 'max' => 255] + ]; + } + + /** + * {@inheritdoc} + */ + public function attributeLabels() + { + return [ + 'id' => 'ID', + 'user_id' => 'User ID', + 'domain_name' => 'Domain Name', + 'use_https' => 'Use Https', + 'ssl_info' => 'Ssl Info', + 'use_hsts' => 'Use Hsts', + 'upgrade_insecure' => 'Upgrade Insecure', + 'status_type_id' => 'Status Type ID', + 'data' => 'Data', + 'external_hash'=>'ID' + ]; + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getUser() + { + return $this->hasOne(User::className(), ['id' => 'user_id']); + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getStatusType() + { + return $this->hasOne(StatusType::className(), ['id' => 'status_type_id']); + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getLinks() + { + return $this->hasMany(Link::className(), ['custy_domain_id' => 'id']); + } + + public static function defaultDomains() + { + return [self::DEFAULT_DOMAIN_LNPAY,self::DEFAULT_DOMAIN_ID,self::DEFAULT_DOMAIN_2,self::DEFAULT_DOMAIN_3,self::DEFAULT_DOMAIN_4]; + } + + public static function getActiveDomains() + { + return CustyDomain::find()->where(['status_type_id'=>StatusType::CUSTYDOMAIN_ACTIVE]); + } + + public static function findByHash($external_hash) + { + return static::find()->where(['external_hash'=>$external_hash])->one(); + } + + public static function isDefaultDomain($id) + { + if (in_array($id,self::defaultDomains())) + return true; + else + return false; + } + + public function getFullBaseUrl($forLinkCreation=true) + { + $base_url = ''; + if ($this->use_https) + $base_url = 'https://'; + else + $base_url = 'http://'; + + $base_url .= $this->domain_name; + + if ($this->port != 80) + $base_url .= ':'.$this->port; + + if (in_array($this->id,[CustyDomain::DEFAULT_DOMAIN_ID]) && $forLinkCreation) + $base_url .= '/to'; + else if (in_array($this->id,[CustyDomain::DEFAULT_DOMAIN_LNPAY]) && $forLinkCreation) + $base_url .= '/t'; + + $base_url .= '/'; + + return $base_url; + } + + public function getRoutingEntryKey($path='') + { + $base_url = '//'; + $base_url .= $this->domain_name; + + if ($this->port != 80) + $base_url .= ':'.$this->port; + + $base_url .= '/'.$path; + + return $base_url; + } + + + + + + + public function fields() + { + $fields = parent::fields(); + $fields['id'] = $fields['external_hash']; + + unset($fields['external_hash'], $fields['user_id'], $fields['port'],$fields['use_https'],$fields['ssl_info'],$fields['use_hsts'],$fields['upgrade_insecure'],$fields['status_type_id'],$fields['data']); + return $fields; + } +} diff --git a/src/models/DistroMethod.php b/src/models/DistroMethod.php new file mode 100644 index 00000000..e075063e --- /dev/null +++ b/src/models/DistroMethod.php @@ -0,0 +1,88 @@ + 255], + ]; + } + + /** + * {@inheritdoc} + */ + public function attributeLabels() + { + return [ + 'id' => 'ID', + 'name' => 'Name', + 'display_name' => 'Distro Name', + ]; + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getFaucetDistros() + { + return $this->hasMany(FaucetDistro::className(), ['distro_method_id' => 'id']); + } + + public static function getAvailableDistroMethodsQuery() + { + return static::find(); + } + + public static function findByName($distro_name) + { + return static::find()->where(['name'=>$distro_name])->one(); + } +} diff --git a/src/models/LinkType.php b/src/models/LinkType.php new file mode 100644 index 00000000..a6d8565f --- /dev/null +++ b/src/models/LinkType.php @@ -0,0 +1,60 @@ + 255], + ]; + } + + /** + * {@inheritdoc} + */ + public function attributeLabels() + { + return [ + 'id' => 'ID', + 'name' => 'Name', + 'display_name' => 'Display Name', + 'description'=>'Description', + 'metadata' => 'Metadata', + ]; + } + + + public function fields() + { + $fields = parent::fields(); + + unset($fields['id'], $fields['metadata']); + return $fields; + } +} \ No newline at end of file diff --git a/src/models/LnTx.php b/src/models/LnTx.php new file mode 100644 index 00000000..6b89619f --- /dev/null +++ b/src/models/LnTx.php @@ -0,0 +1,476 @@ +86400*5], //5 days + ['fee_msat','default','value'=>0], + [['payment_request'], 'string'], + ['passThru',function ($attribute, $params) { + if(!is_array($this->$attribute)){ + $this->addError($attribute,'Pass thru must be a valid JSON'); + } + }], + [['is_keysend'],'boolean'], + [['dest_pubkey', 'r_hash_decoded', 'payment_preimage'], 'string', 'max' => 255], + [['external_hash'],'default','value'=>'lntx_'.HelperComponent::generateRandomString(24)], + [['custom_records'],'safe'] + ]; + } + + /** + * {@inheritdoc} + */ + public function attributeLabels() + { + return [ + 'id' => 'ID', + 'created_at' => 'Created At', + 'updated_at' => 'Updated At', + 'user_id' => 'User ID', + 'dest_pubkey' => 'Dest Pubkey', + 'payment_request' => 'Payment Request', + 'hash' => 'Hash', + 'memo' => 'Memo', + 'num_satoshis' => 'Num Satoshis', + 'expiry' => 'Expiry', + 'expires_at'=>'Expires at', + 'payment_hash' => 'Payment Hash', + 'payment_preimage' => 'Payment Preimage', + 'settled' => 'Settled', + 'settled_at' => 'Settled At', + 'json_data' => 'Json Data', + ]; + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getFaucetLnTxes() + { + return $this->hasMany(FaucetLnTx::className(), ['ln_tx_id' => 'id']); + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getUser() + { + return $this->hasOne(User::className(), ['id' => 'user_id']); + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getLnNode() + { + return $this->hasOne(LnNode::className(), ['id' => 'ln_node_id']); + } + + + + public function setPassThru($data) + { + if (!is_array($data)) + $this->_passThru = []; + else + $this->_passThru = $data; + } + + public function getPassThru() + { + return $this->_passThru; + } + + public function generateInvoice($checkLimits=false) + { + $this->user_id = ($this->user_id?:\LNPay::$app->user->id); + $user = User::findOne($this->user_id); + + if (\LNPay::$app->user->isGuest || !\LNPay::$app->user->identity->getJsonData(User::DATA_IS_PAID_TIER)) + $this->memo = $this->memo. ' (via LNPAY.co)'; + + $invoiceOptions = [ + 'memo'=>$this->memo, + 'value'=>$this->num_satoshis, + 'expiry'=> (int) $this->expiry, + 'description_hash'=>hex2bin($this->description_hash) + ]; + + $hintNodeId = $user->getJsonData('hint_node_id'); + $hintChanId = $user->getJsonData('hint_chan_id'); + if ($hintNodeId && $hintChanId) { + $hintOptions = []; + $hopHint = new HopHint(); + $hopHint->setNodeId($hintNodeId); + $hopHint->setChanId($hintChanId); + + $routeHint = new RouteHint(); + $routeHint->setHopHints([$hopHint]); + $hintOptions = ['route_hints'=>[$routeHint]]; + + $invoiceOptions = ArrayHelper::merge($invoiceOptions,$hintOptions); + } + + + if ($this->ln_node_id) { + $node = LnNode::findOne($this->ln_node_id); + } else { + $node = $user->getLnNodeQuery()->one(); + } + + if ($checkLimits) { + if ($max = $user->getJsonData(User::DATA_MAX_DEPOSIT)) { + if ($this->num_satoshis > $max) { + throw new \yii\web\BadRequestHttpException('Receiving is limited to: '.$max.' satoshi per invoice'); + } + } else { + if ($this->num_satoshis > User::USER_GLOBAL_MAX_LIMIT_SATS) { + throw new \yii\web\BadRequestHttpException('Receiving is limited to: '.User::USER_GLOBAL_MAX_LIMIT_SATS.' satoshi per invoice'); + } + } + } + + $request = (object) $node->tryCreateInvoice($invoiceOptions); + + $this->ln_node_id = $node->id; + $this->payment_request = $request->payment_request; + $this->r_hash_decoded = bin2hex(base64_decode($request->r_hash)); + $this->dest_pubkey = $node->default_pubkey; + $this->expires_at = time() + $this->expiry; + + if (!$this->save()) + throw new ServerErrorHttpException(HelperComponent::getFirstErrorFromFailedValidation($this)); + return $this; + } + + public function getQrImage() + { + return 'https://chart.googleapis.com/chart?chs=250x250&cht=qr&chl=' . $this->payment_request; + } + + public function getIsInbound() + { + if ($this->lnNode) { + if ($this->lnNode->default_pubkey==$this->dest_pubkey) + return true; + else + return false; + } else { + return false; + } + + } + + public function getActionAttributeData() + { + $attrs = ['num_satoshis','dest_pubkey','memo','settled_at']; + $array = []; + + foreach ($attrs as $a) { + $array['lntx_'.$a] = $this->{$a}; + } + + return $array; + } + + /** + * Settles invoice for first time + * @param $invoice + * @return LnTx|bool + * @throws ServerErrorHttpException + */ + public static function processInvoiceAction($invoice) + { + $lnTx = static::find()->where(['payment_request'=>$invoice['paymentRequest']])->one(); + + if ($lnTx) { + if ($lnTx->settled == 0) { //try and settle + if (@$invoice['settled']) { + $lnTx->settled = 1; + $lnTx->num_satoshis = $invoice['amtPaidSat']; + $lnTx->payment_preimage = bin2hex(base64_decode($invoice['rPreimage'])); + $lnTx->passThru = ArrayHelper::merge($lnTx->passThru,['htlc'=>@$invoice['htlcs'][0]]); + $lnTx->settled_at = time(); + if ($lnTx->save()) { + //we are good + } else { + throw new ServerErrorHttpException(HelperComponent::getFirstErrorFromFailedValidation($lnTx)); + } + } + } + return $lnTx; + } + + return FALSE; + } + + /** + * Settles KEYSEND INVOICE for first time + * @param $invoice + * @return LnTx|bool + * @throws ServerErrorHttpException + */ + public static function processSpontaneousInvoiceAction($invoice,$nodeObject) + { + $custom_records = []; + if (@$invoice['amtPaidSat'] == 0) { + return false; + } + + if (@$invoice['isAmp']) { + $preimage = bin2hex(@$invoice['htlcs'][0]['amp']['preimage']); + $hash = bin2hex(@$invoice['htlcs'][0]['amp']['hash']); + } else if (@$invoice['isKeysend']) { + $preimage = bin2hex(base64_decode($invoice['rPreimage'])); + $hash = bin2hex($invoice['rHash']); + } + + foreach ($invoice['htlcs'] as $htlc) { + if ($htlc['customRecords']) { + foreach ($htlc['customRecords'] as $key => $value) { + if ($key == LndNodeConnector::KEYSEND_TLV_KEY) { + $value = bin2hex($value); + } else { + $value = base64_decode($value); + } + $custom_records[$key]=$value; + } + } + } + + + + $lnTx = new LnTx(); + $lnTx->user_id = NULL; + $w = null; + $tlv_key = null; + $tlv_value = null; + + //check for wallet IDs + foreach (LndNodeConnector::getThirdPartyTlvWalletIdKeys() as $key) { + if (isset($custom_records[$key])) { + $w = Wallet::findById($custom_records[$key]); + $tlv_key = $key; + $tlv_value = $custom_records[$key]; + break; + } + } + + //check for data keys + foreach (LndNodeConnector::getThirdPartyTlvDataKeys() as $key) { + if (isset($custom_records[$key])) { + switch ($key) { + case LndNodeConnector::KEYSEND_PODCAST_KEY_DATA: + case LndNodeConnector::KEYSEND_SPADS_KEY: + $custom_records[$key] = @json_decode($custom_records[$key],TRUE); + break; + } + } + } + + + if (!$w) { + $w = $nodeObject->keysendWallet; + } + $lnTx->user_id = $w->user_id; + $lnTx->ln_node_id = $w->ln_node_id; + $lnTx->num_satoshis = $invoice['amtPaidSat']; + $lnTx->memo = 'keysend/amp: custom record ['.$tlv_key.'] ['.$tlv_value.']'; + $lnTx->dest_pubkey = $w->lnNode->default_pubkey; + $lnTx->payment_request = 'keysend/amp'; + $lnTx->description_hash = @$invoice['descriptionHash']; + $lnTx->r_hash_decoded = $hash; + $lnTx->expiry = null; + $lnTx->settled = (int)$invoice['settled']; + $lnTx->settled_at = $invoice['settleDate']; + $lnTx->expires_at = NULL; + $lnTx->is_keysend = 1; + $lnTx->is_amp = @$invoice['isAmp']; + $lnTx->payment_addr = @$invoice['paymentAddr']; + $lnTx->custom_records = new \yii\db\JsonExpression($custom_records); + $lnTx->appendJsonData(['wallet_id'=>$w->external_hash]); + if (@$invoice['settled']) { + $lnTx->settled = 1; + $lnTx->num_satoshis = $invoice['amtPaidSat']; + $lnTx->payment_preimage = $preimage; + $lnTx->settled_at = time(); + if ($lnTx->save()) { + //If this is tied to a wallet + $wtx = new WalletTransaction(); + $wtx->user_id = $lnTx->user_id; + $wtx->wallet_id = $w->id; + $wtx->num_satoshis = (int) $lnTx->num_satoshis; + $wtx->ln_tx_id = $lnTx->id; + $wtx->user_label = $lnTx->memo; + $wtx->passThru = ArrayHelper::merge($lnTx->passThru,['custom_records'=>$custom_records]); + + if ($wtx->save()) { + //Hooray + + } else { + throw new \Exception(HelperComponent::getFirstErrorFromFailedValidation($wtx)); + } + + return $lnTx; + } else { + throw new ServerErrorHttpException(HelperComponent::getFirstErrorFromFailedValidation($lnTx)); + } + } + + return FALSE; + } + + + + /** + * @inheritdoc + */ + public function beforeSave($insert) + { + if (parent::beforeSave($insert)) { + if ($insert) { + $this->appendJsonData($this->passThru); + } + + return true; + } else { + return false; + } + } + + public function afterSave($insert, $changedAttributes) + { + parent::afterSave($insert, $changedAttributes); + + if (!$insert) { //When receiving funds this usually gets called, because inserts that aren't settled are waiting to be settled + + if ((@$changedAttributes['settled']===0) && ($this->settled === 1)) { + + //If this is tied to a wallet + if ($this->getJsonData('wallet_id')) { + $wtx = new WalletTransaction(); + $wtx->user_id = $this->user_id; + $wtx->wallet_id = Wallet::findByHash($this->getJsonData('wallet_id'))->id; + $wtx->num_satoshis = (int) $this->num_satoshis; + $wtx->ln_tx_id = $this->id; + $wtx->user_label = $this->memo; + $wtx->passThru = $this->passThru; + + if ($lnurlp = $this->getJsonData('wallet_lnurlpay_id')) { + $lnurlpModel = WalletLnurlpay::findByHash($lnurlp); + $wtx->wallet_lnurlpay_id = $lnurlpModel->id; + $wtx->wtx_type_id = WalletTransactionType::LN_LNURL_PAY_INBOUND; + } + + + if ($wtx->save()) { + //yay + } else { + echo HelperComponent::getFirstErrorFromFailedValidation($wtx); + throw new \Exception(HelperComponent::getFirstErrorFromFailedValidation($wtx)); + } + } + } + } + } + + + + + + + + + + + + + + + + /** + * + * + * API STUFF + */ + + public function fields() + { + $fields = parent::fields(); + $fields['id'] = $fields['external_hash']; + $fields['passThru'] = $fields['json_data']; + + // remove fields that contain sensitive information + unset($fields['user_id'],$fields['node_id'],$fields['json_data'],$fields['external_hash'],$fields['updated_at']); + + return $fields; + } +} diff --git a/src/models/LoginForm.php b/src/models/LoginForm.php new file mode 100644 index 00000000..203d7f19 --- /dev/null +++ b/src/models/LoginForm.php @@ -0,0 +1,90 @@ +hasErrors()) { + $user = $this->getUser(); + + if (!$user || !$user->validatePassword($this->password)) { + $this->addError($attribute, 'Incorrect username or password.'); + } + } + } + + /** + * Logs in a user using the provided username and password. + * @return bool whether the user is logged in successfully + */ + public function login() + { + if ($this->validate()) { + return \LNPay::$app->user->login($this->getUser(), $this->rememberMe ? 3600*24*30 : 0); + } + return false; + } + + /** + * Finds user by [[username]] + * + * @return User|null + */ + public function getUser() + { + if ($this->_user === false) { + + $validator = new \yii\validators\EmailValidator(); + + if ($validator->validate($this->username)) { //Valid email + $this->_user = User::findByEmail($this->username); + } else { + $this->_user = User::findByUsername($this->username); + } + + } + + return $this->_user; + } +} diff --git a/src/models/PasswordResetRequestForm.php b/src/models/PasswordResetRequestForm.php new file mode 100755 index 00000000..0dcaa755 --- /dev/null +++ b/src/models/PasswordResetRequestForm.php @@ -0,0 +1,60 @@ + 'lnpay\models\User', + 'filter' => ['status' => User::STATUS_ACTIVE], + 'message' => 'There is no user with this email address.' + ], + ]; + } + + /** + * Sends an email with a link, for resetting the password. + * + * @return bool whether the email was send + */ + public function sendEmail() + { + /* @var $user User */ + $user = User::findOne([ + 'status' => User::STATUS_ACTIVE, + 'email' => $this->email, + ]); + + if (!$user) { + return false; + } + + if (!User::isPasswordResetTokenValid($user->password_reset_token)) { + $user->generatePasswordResetToken(); + if (!$user->save()) { + return false; + } + } + + return $user->registerAction(ActionName::USER_PW_RESET,[['password_reset_token'=>$user->password_reset_token]]); + } +} diff --git a/src/models/ResetPasswordForm.php b/src/models/ResetPasswordForm.php new file mode 100755 index 00000000..ca2dcb10 --- /dev/null +++ b/src/models/ResetPasswordForm.php @@ -0,0 +1,64 @@ +_user = User::findByPasswordResetToken($token); + if (!$this->_user) { + throw new InvalidParamException('Wrong password reset token.'); + } + parent::__construct($config); + } + + /** + * @inheritdoc + */ + public function rules() + { + return [ + ['password', 'required'], + ['password', 'string', 'min' => 6], + ]; + } + + /** + * Resets password. + * + * @return bool if password was reset. + */ + public function resetPassword() + { + $user = $this->_user; + $user->setPassword($this->password); + $user->removePasswordResetToken(); + + return $user->save(false); + } +} diff --git a/src/models/SignupForm.php b/src/models/SignupForm.php new file mode 100644 index 00000000..b07bc685 --- /dev/null +++ b/src/models/SignupForm.php @@ -0,0 +1,96 @@ + 'lnpay\models\User', 'message' => 'This username has already been taken.'], + ['username', 'string', 'min' => 2, 'max' => 255], + + ['email', 'trim'], + ['email', 'required'], + ['email', 'email'], + ['email', 'string', 'max' => 255], + ['email', 'unique', 'targetClass' => 'lnpay\models\User', 'message' => 'This email address has already been taken.'], + + ['password', 'required'], + ['password', 'string', 'min' => 6], + + ['api_parent_id', 'integer'], + [['org_id','org_user_type_id'],'integer'] + ]; + } + + public function scenarios() + { + return [ + self::SCENARIO_API_SIGNUP => ['username', 'password', 'api_parent_id'], + self::SCENARIO_DEFAULT => ['username', 'password', 'email','verifyCode'], + ]; + } + + /** + * Signs user up. + * + * @return User|null the saved model or null if saving fails + */ + public function signup() + { + if (!$this->validate()) { + return null; + } + + if ($this->org_id) { + $org_id = $this->org_id; + //$this->>org_user_type_id should be set by the form! + } else { //create new org + $o = new Org(); + $o->name = explode("@",$this->email)[0]; + $o->display_name = $o->name; + $o->save(); + $org_id = $o->id; + $this->org_user_type_id = OrgUserType::TYPE_OWNER; + } + + $user = new User(); + $user->username = $this->email; + $user->email = $this->email; + $user->setPassword($this->password); + $user->generateAuthKey(); + $user->api_parent_id = $this->api_parent_id; + $user->org_id = $org_id; + $user->org_user_type_id = $this->org_user_type_id; + + if ($this->scenario == self::SCENARIO_API_SIGNUP) + $user->status = $user::STATUS_API_USER_LNTXBOT; + + return $user->save() ? $user : null; + } +} diff --git a/src/models/StatusType.php b/src/models/StatusType.php new file mode 100644 index 00000000..941cc3fa --- /dev/null +++ b/src/models/StatusType.php @@ -0,0 +1,137 @@ + 255], + ]; + } + + /** + * {@inheritdoc} + */ + public function attributeLabels() + { + return [ + 'id' => 'ID', + 'type' => 'Type', + 'name' => 'Name', + 'display_name' => 'Status', + ]; + } + + public static function getAvailableStatuses($type) + { + return static::find()->where(['type'=>$type])->asArray()->all(); + } + + public function fields() + { + $fields = parent::fields(); + unset($fields['id']); + + return $fields; + } +} diff --git a/src/models/User.php b/src/models/User.php new file mode 100644 index 00000000..fdc3fdfd --- /dev/null +++ b/src/models/User.php @@ -0,0 +1,694 @@ +UserAccessKeyBehavior::class, + 'default_roles'=>[UserAccessKeyBehavior::ROLE_PUBLIC_API_KEY,UserAccessKeyBehavior::ROLE_SECRET_API_KEY] + ] + ]; + } + + /** + * @inheritdoc + */ + public function rules() + { + return [ + [['balance','api_parent_id','default_wallet_id','fee_wallet_id'],'integer'], + ['external_hash', 'default', 'value' => 'usr_'.HelperComponent::generateRandomString(14)], + ['status', 'default', 'value' => self::STATUS_ACTIVE], + ['status', 'in', 'range' => [self::STATUS_ACTIVE, self::STATUS_API_ADMIN, self::STATUS_API_USER_LNTXBOT]], + [['username','email','password','api_version'],'safe'] + ]; + } + + /** + * get MFA KEY + * @return mixed + */ + public function getMfaSecretKey() + { + return $this->mfa_secret_key; + } + + /** + * set MFA KEY + * @return mixed + */ + public function createMfaSecretKey() + { + $this->mfa_secret_key = random_bytes(64); + $this->save(); + } + + /** + * Can we contact user? email for now, can be other stuff later + * @return mixed + */ + public function getEmailVerified() + { + return $this->email_verify; + } + + public function getIsActivated() + { + return 1; + //return $this->email_verify==self::EMAIL_ACTIVATED; + } + + /** + * @return mixed + */ + public function confirmVerification() + { + $this->email_verify = 1; + if ($this->save()) { + + } else { + throw new ServerErrorHttpException('Unable to confirm user!'); + } + } + + /** + * @inheritdoc + */ + public static function findIdentity($id) + { + return static::find()->where(['id' => $id])->andWhere(['>=','status',self::STATUS_ACTIVE])->one(); + } + + /** + * @inheritdoc + */ + public static function findIdentityByAccessToken($token, $type = null) + { + $user = static::findOne(@UserAccessKey::find()->where(['access_key'=>$token])->one()->user_id); + if ($user) { + $user->sessionApiKey = $token; + return $user; + } else { + return null; + } + //return static::findOne(['auth_key' => $token]); + } + + /** + * Finds user by username + * + * @param string $username + * @return static|null + */ + public static function findByUsername($username) + { + return static::find()->where(['username' => $username])->andWhere(['>=','status',self::STATUS_ACTIVE])->one(); + } + + /** + * Finds user by email + * + * @param string $username + * @return static|null + */ + public static function findByEmail($username) + { + return static::find()->where(['email' => $username])->andWhere(['>=','status',self::STATUS_ACTIVE])->one(); + } + + /** + * Finds user by password reset token + * + * @param string $token password reset token + * @return static|null + */ + public static function findByPasswordResetToken($token) + { + if (!static::isPasswordResetTokenValid($token)) { + return null; + } + + return static::findOne([ + 'password_reset_token' => $token, + //'status' => self::STATUS_ACTIVE, + ]); + } + + /** + * Finds out if password reset token is valid + * + * @param string $token password reset token + * @return bool + */ + public static function isPasswordResetTokenValid($token) + { + if (empty($token)) { + return false; + } + + $timestamp = (int) substr($token, strrpos($token, '_') + 1); + $expire = 86400; + return $timestamp + $expire >= time(); + } + + /** + * @inheritdoc + */ + public function getId() + { + return $this->getPrimaryKey(); + } + + /** + * This is the actual (deprecated) auth_key field + */ + public function getAuthKey() + { + return $this->auth_key; + } + + /** + * @return string apiKey used in current session (if API session) + */ + public function getSessionApiKey() + { + return $this->_sessionApiKey; + } + + /** + * @param $apiKey + */ + public function setSessionApiKey($apiKey) + { + $this->_sessionApiKey = $apiKey; + } + + /** + * @inheritdoc + */ + public function validateAuthKey($authKey) + { + return $this->getAuthKey() === $authKey; + } + + /** + * Validates password + * + * @param string $password password to validate + * @return bool if password provided is valid for current user + */ + public function validatePassword($password) + { + return \LNPay::$app->security->validatePassword($password, $this->password_hash); + } + + /** + * Generates password hash from password and sets it to the model + * + * @param string $password + */ + public function setPassword($password) + { + $this->password_hash = \LNPay::$app->security->generatePasswordHash($password); + } + + /** + * Generates "remember me" authentication key + */ + public function generateAuthKey() + { + $this->auth_key = \LNPay::$app->security->generateRandomString(); + } + + /** + * Generates new password reset token + */ + public function generatePasswordResetToken() + { + $this->password_reset_token = \LNPay::$app->security->generateRandomString() . '_' . time(); + } + + /** + * Removes password reset token + */ + public function removePasswordResetToken() + { + $this->password_reset_token = null; + } + + public function getRateLimit($request, $action) + { + return [1000, 86400]; // $rateLimit requests per second + } + + public function loadAllowance($request, $action) + { + return [$this->allowance, $this->allowance_updated_at]; + } + + public function saveAllowance($request, $action, $allowance, $timestamp) + { + $this->allowance = $allowance; + $this->allowance_updated_at = $timestamp; + $this->save(); + } + + + + + + + + /** + * @return \yii\db\ActiveQuery + */ + public function getLndInvoices() + { + return $this->hasMany(LndInvoice::className(), ['user_id' => 'id']); + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getWallets() + { + return $this->hasMany(Wallet::className(), ['user_id' => 'id']); + } + + /** + * @return array|ActiveRecord|null + */ + public function getDefaultWallet() + { + return Wallet::find()->where(['user_id'=>$this->id])->orderBy('id DESC')->one(); + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getLinkLayouts() + { + return $this->hasMany(Layout::class, ['user_id' => 'id']); + } + + public function getAvailableLayouts() + { + return Layout::find()->where(['user_id'=>$this->id])->orWhere(['id'=>Layout::defaultLayouts()])->all(); + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getCustyDomains() + { + return $this->hasMany(CustyDomain::class, ['user_id' => 'id']); + } + + public function getAvailableDomains() + { + $defaultDomains = CustyDomain::defaultDomains(); + unset($defaultDomains[0]); //remove lnpay.co/t + return CustyDomain::find()->where(['user_id'=>$this->id,'status_type_id'=>StatusType::CUSTYDOMAIN_ACTIVE])->orWhere(['id'=>$defaultDomains])->all(); + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getLnNodeQuery() + { + $firstQuery = LnNode::find()->where(['user_id'=>$this->id])->orWhere(['org_id'=>$this->org_id,'is_custodian'=>1]); + return $firstQuery; + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getLnNode() + { + return $this->hasOne(LnNode::className(), ['user_id' => 'id']); + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getFeeWallet() + { + return $this->hasOne(Wallet::className(), ['id' => 'fee_wallet_id']); + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getLnNodes() + { + return $this->hasMany(LnNode::className(), ['user_id' => 'id']); + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getOrg() + { + return $this->hasOne(Org::className(), ['id' => 'org_id']); + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getOrgUserType() + { + return $this->hasOne(OrgUserType::className(), ['id' => 'org_user_type_id']); + } + + + + /** + * @param int $sats + * @return bool + */ + public function getEligibleToWithdraw($sats=0) + { + \LNPay::debug("User: {$this->id} Available to withdraw:{$this->satsAvailableForWithdrawal} Amount withdrawing: $sats if 0, checking if balance > 0",__METHOD__); + if ($this->satsAvailableForWithdrawal <= 0) + return false; + else if ($this->satsAvailableForWithdrawal < $sats) + return false; + else + return true; + } + + /** + * Returns new balance + * @param int $sats + * @return int|mixed + * @throws \yii\web\ServerErrorHttpException + */ + public function addToBalance($sats=0) { + \LNPay::info("Adding balance: $sats to user:".$this->id,__METHOD__); + $this->balance += $sats; + if ($this->save()) { + return $this->balance; + } else { + throw new \yii\web\ServerErrorHttpException('Error updating balance'); + } + } + + /** + * @return int|mixed + */ + public function getSatsAvailableForWithdrawal() + { + $sum = $this->balance; + return $sum; + } + + /** + * @return int|mixed + */ + public function getSatsEarned() + { + $paidInvoices = $this->getLndInvoices()->where(['settled'=>1])->all(); + $sum=0; + foreach ($paidInvoices as $pI) { + $sum += $pI->value; + } + return $sum; + } + + public function registerAction($actionNameId,$data=[]) + { + return ActionComponent::registerAction($actionNameId,$data,$this); + } + + + public function setTimeZone($tz) + { + $this->tz = $tz; + \LNPay::$app->session->set('tz',$tz); + return $this->save(); + } + + + + public function createDefaultSettings(): void + { + $this->json_data = [ + $this::DATA_IS_PAID_TIER => 0, + $this::DATA_INBOUND_SERVICE_FEE_RATE => 0, + $this::DATA_OUTBOUND_SERVICE_FEE_RATE => 0, + $this::DATA_FEE_TARGET_WALLET => $this::DATA_FEE_TARGET_WALLET_CONTAINED, + $this::DATA_MAX_DEPOSIT => $this::USER_GLOBAL_MAX_LIMIT_SATS, + $this::DATA_MAX_WITHDRAWAL => $this::USER_GLOBAL_MAX_LIMIT_SATS, + $this::DATA_MAX_NETWORK_FEE_PERCENT => 5 + ]; + if (!$this->save()) { + throw new \Exception('Error creating default settings:'.HelperComponent::getFirstErrorFromFailedValidation($this)); + } + } + + public function createDefaultWallets(): void + { + $wallet = new Wallet(); + $wallet->user_label = 'Billing Wallet'; + $wallet->user_id = $this->id; + $wallet->wallet_type_id = WalletType::FEE_WALLET; + if (!$wallet->save()) { + throw new \Exception('Error creating default wallets:'.HelperComponent::getFirstErrorFromFailedValidation($wallet)); + } + $this->fee_wallet_id = $wallet->id; + + $this->save(); + } + + + public function getServiceFeeRate($wtx_type): float + { + switch ($wtx_type) { + case WalletTransactionType::LN_WITHDRAWAL: + $fee = $this->getJsonData(self::DATA_OUTBOUND_SERVICE_FEE_RATE); + break; + case WalletTransactionType::LN_DEPOSIT: + $fee = $this->getJsonData(self::DATA_INBOUND_SERVICE_FEE_RATE); + break; + case WalletTransactionType::LN_LOOP_OUT: + $fee = $this->getJsonData(self::DATA_OUTBOUND_SERVICE_FEE_RATE); + break; + } + + if ($fee) { + return (float) $fee; + } else { + return 0; + } + } + + public function getFeeTargetWallet() + { + if ($target = $this->getJsonData(self::DATA_FEE_TARGET_WALLET)) { + return $target; + } else { + return self::DATA_FEE_TARGET_WALLET_CONTAINED; + } + } + + /** + * Return total usage count of certain objects: + * - Wallets + * - LN Receive volume + * - LN Send Volume + * - Transfer Volume + * - Webhooks + */ + public function getWalletAPIUsageTotals() + { + + } + + /** + * Return usage by period of certain objects: + * - LN Receive Volume + * - LN Send Volume + * @throws \yii\db\Exception + */ + public function getWalletAPIUsageByPeriod($periodStart,$periodEnd=null) + { + if (!$periodEnd) + $periodEnd = time(); + + $a = []; + $a['ln_inbound_volume'] = 0; + $a['ln_outbound_volume'] = 0; + + $a['ln_inbound_volume'] = ((new \yii\db\Query()) + ->select('SUM(ABS(num_satoshis))') + ->from('wallet_transaction') + ->where(['>','created_at',$periodStart]) + ->andWhere(['<','created_at',$periodEnd]) + ->andWhere(['user_id'=>\LNPay::$app->user->id]) + ->andWhere(['wtx_type_id'=>[WalletTransactionType::LN_DEPOSIT,WalletTransactionType::LN_LNURL_PAY_INBOUND]]) + ->scalar()) ?? 0; + + $a['ln_outbound_volume'] = ((new \yii\db\Query()) + ->select('SUM(ABS(num_satoshis))') + ->from('wallet_transaction') + ->where(['>','created_at',$periodStart]) + ->andWhere(['<','created_at',$periodEnd]) + ->andWhere(['user_id'=>\LNPay::$app->user->id]) + ->andWhere(['wtx_type_id'=>[WalletTransactionType::LN_WITHDRAWAL,WalletTransactionType::LN_LNURL_PAY_OUTBOUND]]) + ->scalar()) ?? 0; + + return $a; + } + + + /** + * + * Email attributes to be sent for logic based email sending + * For example, URLs to dashboard, name, etc. + * + * @return array + * + */ + public function getEmailAttributes() + { + $vars = [ + ]; + return $vars; + } + + public function getApiVersion() + { + if (!$this->api_version) { + $this->api_version = self::CURRENT_API_VERSION; + $this->save(); + } + + if (\LNPay::$app instanceof \yii\web\Application) { + return \LNPay::$app->request->getHeaders()->get('LNPay-Version') ?? $this->api_version; + } else + return $this->api_version; + + } + + public function afterSave($insert, $changedAttributes) + { + if ($insert) { + $this->registerAction(ActionName::USER_CREATED,['email'=>$this->email]); + + } else { + + } + parent::afterSave($insert, $changedAttributes); + } + + + + + + + + + + + /** + * + * + * + * + * API FIELDS + */ + + public function fields() + { + $fields = parent::fields(); + $fields['id'] = $fields['external_hash']; + + // remove fields that contain sensitive information + unset($fields['external_hash'],$fields['balance'], $fields['username'], $fields['mfa_secret_key'], $fields['auth_key'], $fields['password_hash'], $fields['password_reset_token'],$fields['updated_at'], $fields['api_parent_id'], $fields['json_data']); + + + return $fields; + } + +} diff --git a/src/models/UserAccessKey.php b/src/models/UserAccessKey.php new file mode 100644 index 00000000..7e27b780 --- /dev/null +++ b/src/models/UserAccessKey.php @@ -0,0 +1,106 @@ +StatusType::UAK_ACTIVE], + [['json_data'], 'safe'], + [['access_key'], 'string', 'max' => 255], + ]; + } + + /** + * {@inheritdoc} + */ + public function attributeLabels() + { + return [ + 'id' => 'ID', + 'user_id' => 'User ID', + 'wallet_id' => 'Wallet ID', + 'access_key' => 'Api Key', + 'json_data' => 'Json Data', + ]; + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getUser() + { + return $this->hasOne(User::className(), ['id' => 'user_id']); + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getWallet() + { + return $this->hasOne(Wallet::className(), ['id' => 'wallet_id']); + } + + public static function createKey($user_id,$role,$attributes) + { + $auth = \LNPay::$app->authManager; + + $prefix = HelperComponent::getRolePrefix($role); + $apiKey = HelperComponent::generateKeyByRolePrefix($prefix); + + $wuk = new UserAccessKey(); + $wuk->attributes = $attributes; + $wuk->user_id = $user_id;; + $wuk->access_key = $apiKey; + if (!$wuk->save()) + throw new ServerErrorHttpException('Cannot save API keys for wallet!'); + + $auth->assign($auth->getRole($role),$wuk->access_key); + return $wuk; + } +} diff --git a/src/models/action/ActionData.php b/src/models/action/ActionData.php new file mode 100644 index 00000000..c8e688be --- /dev/null +++ b/src/models/action/ActionData.php @@ -0,0 +1,55 @@ + 'Action Feed ID', + 'data' => 'Data', + ]; + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getActionFeed() + { + return $this->hasOne(ActionFeed::className(), ['id' => 'action_feed_id']); + } +} diff --git a/src/models/action/ActionFeed.php b/src/models/action/ActionFeed.php new file mode 100644 index 00000000..67c2d528 --- /dev/null +++ b/src/models/action/ActionFeed.php @@ -0,0 +1,159 @@ +\yii\behaviors\TimestampBehavior::className(), + 'updatedAtAttribute'=>null + ] + ]; + } + + /** + * {@inheritdoc} + */ + public function rules() + { + return [ + [['external_hash'],'default','value'=>'evt_'.HelperComponent::generateRandomString(24)], + [['user_id'], 'integer'], + [['action_name_id', 'user_id'],'required'] + ]; + } + + /** + * {@inheritdoc} + */ + public function attributeLabels() + { + return [ + 'id' => 'ID', + 'created_at' => 'Created At', + 'action_name_id' => 'Action Name ID', + 'user_id' => 'User ID', + 'external_hash'=>'ID' + ]; + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getActionData() + { + $d = $this->hasOne(ActionData::className(), ['action_feed_id' => 'id'])->one()->data; + return $d; + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getActionName() + { + return $this->hasOne(ActionName::className(), ['id' => 'action_name_id']); + } + + public function getActionDataFlat() + { + if (empty($this->actionData)) + return []; + + $array = HelperComponent::array_flatten($this->actionData); + + return $array; + } + + public function setActionData($data) + { + $this->_actionData = json_encode($data); + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getUser() + { + return $this->hasOne(\lnpay\models\User::className(), ['id' => 'user_id']); + } + + public function afterSave($insert, $changedAttributes) + { + if ($insert) { + $ad = new ActionData; + $ad->action_feed_id = $this->id; + $ad->data = json_decode($this->_actionData,TRUE); + if (!$ad->save()) + throw new \Exception('Unable to save action data! -- '.HelperComponent::getFirstErrorFromFailedValidation($this)); + } + + + parent::afterSave($insert, $changedAttributes); + } + + + + + + + + + + + + + + + /** + * + * + * + * API STUFF + * + * + * + */ + + public function fields() + { + $fields = parent::fields(); + $fields['id'] = $fields['external_hash']; + $fields['event'] = 'actionName'; + $fields['data'] = 'actionData'; + + unset($fields['external_hash'],$fields['action_name_id'],$fields['user_id']); + + return $fields; + } +} diff --git a/src/models/action/ActionName.php b/src/models/action/ActionName.php new file mode 100644 index 00000000..43e19a25 --- /dev/null +++ b/src/models/action/ActionName.php @@ -0,0 +1,121 @@ + 255], + ]; + } + + /** + * {@inheritdoc} + */ + public function attributeLabels() + { + return [ + 'id' => 'ID', + 'name' => 'Name', + 'display_name' => 'Action', + ]; + } + + public static function getActiveWebhookQuery() + { + return static::find()->where(['is_webhook'=>1])->orderBy('id DESC'); + } + + /** + * @return array + */ + public static function getActiveWebhookArrayByType() + { + $array = static::getActiveWebhookQuery()->all(); + + $a = []; + foreach ($array as $actionName) { + $a[$actionName->type][] = ['name'=>$actionName->name,'display_name'=>$actionName->display_name]; + } + + return $a; + } + + + /** + * + * + * + * + * API STUFF + */ + + public function fields() + { + $fields = parent::fields(); + unset($fields['is_webhook']); + + return $fields; + } +} diff --git a/src/models/integration/IntegrationService.php b/src/models/integration/IntegrationService.php new file mode 100644 index 00000000..6e2d15b2 --- /dev/null +++ b/src/models/integration/IntegrationService.php @@ -0,0 +1,62 @@ + 255], + ]; + } + + /** + * {@inheritdoc} + */ + public function attributeLabels() + { + return [ + 'id' => 'ID', + 'name' => 'Name', + 'display_name' => 'Service', + 'json_data' => 'Json Data', + ]; + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getIntegrationWebhooks() + { + return $this->hasMany(IntegrationWebhook::className(), ['integration_service_id' => 'id']); + } +} diff --git a/src/models/integration/IntegrationWebhook.php b/src/models/integration/IntegrationWebhook.php new file mode 100644 index 00000000..f52f7b52 --- /dev/null +++ b/src/models/integration/IntegrationWebhook.php @@ -0,0 +1,197 @@ + IntegrationService::USER_WEBHOOK], + ['http_method', 'default', 'value' => 'POST'], + ['content_type', 'default', 'value' => 'application/json'], + ['external_hash', 'default', 'value' => 'iwh_'.HelperComponent::generateRandomString(14)], + ['status_type_id','default','value'=>StatusType::WEBHOOK_ACTIVE], + [['user_id', 'integration_service_id','status_type_id'], 'integer'], + [['content_type','secret'], 'string'], + [['http_method', 'endpoint_url'], 'string', 'max' => 255], + ['endpoint_url','url'] + ]; + } + + /** + * {@inheritdoc} + */ + public function attributeLabels() + { + return [ + 'id' => 'ID', + 'user_id' => 'User ID', + 'action_name_id' => 'Action Name ID', + 'integration_service_id' => 'Integration Service ID', + 'http_method' => 'Http Method', + 'endpoint_url' => 'Endpoint Url', + 'json_data' => 'Json Data', + 'external_hash'=>'Webhook ID', + 'status_type_id' => 'Status Type' + ]; + } + + /** + * @param $attribute + * @param $params + * @return bool + */ + public function checkIsValidActionNameArray($attribute,$params) + { + if (!is_array($this->$attribute)) { + $this->addError($attribute,'Must supply array of event names'); + return false; + } + + $an = ArrayHelper::map(ActionName::find()->asArray()->all(),'name','name'); + + if ($this->$attribute == [self::DEFAULT_ALL]) + return true; + + foreach ($this->$attribute as $action_name) { + if (!in_array($action_name,$an)) + $this->addError($attribute,"Invalid event: ".$action_name); + } + } + + public function getActionNameObjects() + { + $arr = []; + foreach ($this->action_name_id as $id) { + $arr[] = ActionName::find()->where(['name'=>$id])->one(); + } + return $arr; + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getActionName() + { + return $this->hasOne(ActionName::className(), ['id' => 'action_name_id']); + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getStatusType() + { + return $this->hasOne(StatusType::className(), ['id' => 'status_type_id']); + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getUser() + { + return $this->hasOne(User::className(), ['id' => 'user_id']); + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getWebhookRequests() + { + return $this->hasMany(IntegrationWebhookRequest::class, ['integration_webhook_id' => 'id'])->addOrderBy('created_at DESC'); + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getIntegrationService() + { + return $this->hasOne(IntegrationService::className(), ['id' => 'integration_service_id']); + } + + public function afterSave($insert, $changedAttributes) + { + parent::afterSave($insert, $changedAttributes); + + if ($insert) { + ActionComponent::webhookPing($this); + } + } + + + + + + /** + * + * + * + * + * + * API STUFF + */ + + public function fields() + { + $fields = parent::fields(); + + // remove fields that contain sensitive information + unset($fields['user_id']); + + return $fields; + } +} diff --git a/src/models/integration/IntegrationWebhookRequest.php b/src/models/integration/IntegrationWebhookRequest.php new file mode 100644 index 00000000..d86e2c5a --- /dev/null +++ b/src/models/integration/IntegrationWebhookRequest.php @@ -0,0 +1,140 @@ +\yii\behaviors\TimestampBehavior::class, + 'updatedAtAttribute'=>false + ] + ]; + } + + /** + * {@inheritdoc} + */ + public function rules() + { + return [ + [['integration_webhook_id', 'request_payload'], 'required'], + ['external_hash', 'default', 'value'=> 'iwhr_'.HelperComponent::generateRandomString(24)], + [['integration_webhook_id', 'response_status_code','action_feed_id'], 'integer'], + [['request_payload', 'response_body'], 'string'], + [['external_hash'], 'string', 'max' => 255], + ]; + } + + /** + * {@inheritdoc} + */ + public function attributeLabels() + { + return [ + 'id' => 'ID', + 'external_hash' => 'External Hash', + 'created_at' => 'Created At', + 'integration_webhook_id' => 'Integration Webhook ID', + 'request_payload' => 'Request Payload', + 'response_body' => 'Response Body', + 'response_status_code' => 'Response Status Code', + ]; + } + + /** + * Gets query for [[IntegrationWebhook]]. + * + * @return \yii\db\ActiveQuery + */ + public function getIntegrationWebhook() + { + return $this->hasOne(IntegrationWebhook::className(), ['id' => 'integration_webhook_id']); + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getActionFeed() + { + return $this->hasOne(ActionFeed::className(), ['id' => 'action_feed_id']); + } + + /** + * @param ActionFeed $actionFeedObject + * @param array $additionalData + * @return array + */ + public static function preparePayload(ActionFeed $actionFeedObject,$additionalData=[]) + { + $payload = $actionFeedObject->toArray(); + $payload = ArrayHelper::merge($payload,$additionalData); + + return $payload; + } + + /** + * @param IntegrationWebhook $integrationWebhook + * @param ActionFeed $actionFeedObject + * @return IntegrationWebhookRequest + * @throws \Exception + */ + public static function prepareRequest(IntegrationWebhook $integrationWebhook, ActionFeed $actionFeedObject) + { + $log = new static(); + $log->integration_webhook_id = $integrationWebhook->id; + $log->request_payload = json_encode(static::preparePayload($actionFeedObject)); + $log->action_feed_id = $actionFeedObject->id; + if ($log->save()) + return $log; + else + throw new \Exception('Webhook log unable to create: '.$integrationWebhook->id); + + } + + /** + * @param ResponseInterface $guzzleResponse + * @return $this + * @throws \Exception + */ + public function processResponse(ResponseInterface $guzzleResponse) + { + $this->response_body = HelperComponent::parseHeaderArrayToString($guzzleResponse->getHeaders())."\n".$guzzleResponse->getBody()->getContents(); + $this->response_status_code = $guzzleResponse->getStatusCode(); + if ($this->save()) + return $this; + else + throw new \Exception('Webhook log unable to update response: '.$this->id); + } +} diff --git a/src/models/integration/IntegrationWebhookSearch.php b/src/models/integration/IntegrationWebhookSearch.php new file mode 100644 index 00000000..54dcbe1f --- /dev/null +++ b/src/models/integration/IntegrationWebhookSearch.php @@ -0,0 +1,81 @@ +where(['user_id'=>\LNPay::$app->user->id]); + + // add conditions that should always apply here + + $dataProvider = new ActiveDataProvider([ + 'query' => $query, + ]); + + $this->load($params); + + if (!$this->validate()) { + // uncomment the following line if you do not want to return any records when validation fails + $query->where('0=1'); + return $dataProvider; + } + + // grid filtering conditions + $query->andFilterWhere([ + 'id' => $this->id, + 'user_id' => $this->user_id, + 'integration_service_id' => $this->integration_service_id, + 'status_type_id' => $this->status_type_id, + 'created_at' => $this->created_at, + 'updated_at' => $this->updated_at, + ]); + + $query->andFilterWhere(['like', 'external_hash', $this->external_hash]) + ->andFilterWhere(['like', 'action_name_id', $this->action_name_id]) + ->andFilterWhere(['like', 'secret', $this->secret]) + ->andFilterWhere(['like', 'http_method', $this->http_method]) + ->andFilterWhere(['like', 'content_type', $this->content_type]) + ->andFilterWhere(['like', 'endpoint_url', $this->endpoint_url]) + ->andFilterWhere(['like', 'json_data', $this->json_data]); + + return $dataProvider; + } +} diff --git a/src/models/integration/WebhookTestForm.php b/src/models/integration/WebhookTestForm.php new file mode 100644 index 00000000..bef34f50 --- /dev/null +++ b/src/models/integration/WebhookTestForm.php @@ -0,0 +1,31 @@ +'Event']; + } + +} diff --git a/src/models/log/UserApiLog.php b/src/models/log/UserApiLog.php new file mode 100644 index 00000000..423b3235 --- /dev/null +++ b/src/models/log/UserApiLog.php @@ -0,0 +1,93 @@ + 'ID', + 'user_id' => 'User ID', + 'external_hash' => 'External Hash', + 'api_key' => 'Api Key', + 'ip_address' => 'Ip Address', + 'sdk' => 'Sdk', + 'method' => 'Method', + 'base_url' => 'Base Url', + 'request_path' => 'Request Path', + 'request_body' => 'Request Body', + 'request_headers' => 'Request Headers', + 'status_code' => 'Status Code', + 'response_body' => 'Response Body', + 'response_headers' => 'Response Headers', + ]; + } + + /** + * Gets query for [[User]]. + * + * @return \yii\db\ActiveQuery + */ + public function getUser() + { + return $this->hasOne(User::className(), ['id' => 'user_id']); + } + + public function getAmplitudeAttributeValues() + { + $arr = [ + 'api_key', + 'external_hash', + 'ip_address', + 'method', + 'sdk', + 'base_url', + 'status_code', + 'request_path' + ]; + + $array = []; + foreach ($arr as $a) { + $array[$a] = $this->{$a}; + } + + return $array; + + } +} + diff --git a/src/models/log/UserApiLogSearch.php b/src/models/log/UserApiLogSearch.php new file mode 100644 index 00000000..19a175cd --- /dev/null +++ b/src/models/log/UserApiLogSearch.php @@ -0,0 +1,89 @@ +user_id = \LNPay::$app->user->id; + + // add conditions that should always apply here + + $dataProvider = new ActiveDataProvider([ + 'query' => $query, + 'sort' => [ + 'defaultOrder' => [ + 'created_at' => SORT_DESC, + ] + ], + ]); + + $this->load($params); + + if (!$this->validate()) { + // uncomment the following line if you do not want to return any records when validation fails + $query->where('0=1'); + return $dataProvider; + } + + // grid filtering conditions + $query->andFilterWhere([ + 'id' => $this->id, + 'user_id' => $this->user_id, + 'created_at' => $this->created_at, + 'status_code' => $this->status_code, + 'method'=>$this->method + ]); + + $query->andFilterWhere(['like', 'external_hash', $this->external_hash]) + ->andFilterWhere(['like', 'api_key', $this->api_key]) + ->andFilterWhere(['like', 'ip_address', $this->ip_address]) + ->andFilterWhere(['like', 'sdk', $this->sdk]) + ->andFilterWhere(['like', 'base_url', $this->base_url]) + ->andFilterWhere(['like', 'request_path', $this->request_path]) + ->andFilterWhere(['like', 'request_body', $this->request_body]) + ->andFilterWhere(['like', 'request_headers', $this->request_headers]) + ->andFilterWhere(['like', 'response_body', $this->response_body]) + ->andFilterWhere(['like', 'response_headers', $this->response_headers]); + + return $dataProvider; + } +} diff --git a/src/node/Module.php b/src/node/Module.php new file mode 100644 index 00000000..f8718d63 --- /dev/null +++ b/src/node/Module.php @@ -0,0 +1,68 @@ +urlManager->addRules([[ + 'class' => GroupUrlRule::class, + 'prefix' => $this->id, + 'rules' => [ + //Admin dashboard stuff + '/' => '/view', + '//' => '/', + '/' => '/', + '//' => '/', + ], + ]], false); + + //API Rules + $app->urlManager->addRules([ + 'GET,HEAD,OPTIONS v1/node///' => 'node/api/v1//', + 'GET,HEAD,OPTIONS v1/node/' => 'node/api/v1/ln-node/view', + 'GET,HEAD,OPTIONS v1/nodes' => 'node/api/v1/ln-node/view-all' + ], false); + } + + public function behaviors() + { + return [ + 'access' => [ + 'class' => AccessControl::class, + 'rules' => [ + [ + 'allow' => true, + 'controllers' => ['node/*'], + 'roles' => ['@'], + ], + [ + 'allow' => true, + 'controllers' => ['node/api/*'], + 'roles' => ['?','@'], + ], + ], + ], + ]; + } +} \ No newline at end of file diff --git a/src/node/components/LnBaseNodeClass.php b/src/node/components/LnBaseNodeClass.php new file mode 100644 index 00000000..d09869cc --- /dev/null +++ b/src/node/components/LnBaseNodeClass.php @@ -0,0 +1,17 @@ +_macaroonRaw = hex2bin($macaroonHexOrRaw); + } + else + $this->_macaroonRaw = $macaroonHexOrRaw; + + $this->_permissions = $this->decodePermsFromMacaroon($this->_macaroonRaw); + } + } + + public function decodePermsFromMacaroon($macaroonRaw) + { + $array = []; + $lines = explode("\n",$macaroonRaw); + foreach ($lines as $l) { + foreach ($this->validEntities as $vE) { + if (stripos($l,$vE) !== FALSE) { + $array[$vE] = []; + foreach ($this->validActions as $vA) { + if (stripos($l,$vA) !== FALSE) { + $array[$vE][] = $vA; + } + } + } + } + } + return $array; + } + + /** + * Return array of valid entities + * @param null $entity + * @return array|bool + */ + public function getValidEntities($entity=NULL) + { + if ($entity) { + return in_array($entity,$this->_validEntities); + } + + return $this->_validEntities; + } + + /** + * Return array of valid actions + * @param null $action + * @return array|bool + */ + public function getValidActions($action=NULL) + { + if ($action) { + return in_array($action,$this->_validActions); + } + return $this->_validActions; + } + + /** + * Return array of all valid permission combinations + * e.g. [ ['onchain' => ['read','write','generate']], ['offchain' => ['read','write','generate']] .... ] + * @return array + */ + public static function getAllowedPermissionMap() + { + $m = new self(); + $arr = []; + foreach ($m->validEntities as $ve) { + foreach ($m->validActions as $va) { + $arr[$ve][] = $va; + } + } + return $arr; + } + + /** + * @param $macaroonRaw + * @return string + */ + public static function getHexFromRaw($macaroonRaw) + { + return bin2hex($macaroonRaw); + } + + /** + * @return string + */ + public function getHex() + { + return static::getHexFromRaw($this->_macaroonRaw); + } + + /** + * @return string|string[]|null + */ + public function getRaw() + { + return $this->_macaroonRaw; + } + + /** + * @return string + */ + public function getBase64() + { + return base64_encode($this->_macaroonRaw); + } + + /** + * @return string + */ + public function getBase64url() + { + return HelperComponent::base64url_encode($this->_macaroonRaw); + } + + /** + * @param $permArray + */ + public function setPermissions($permArray) + { + $this->_permissions = $permArray; + } + + /** + * Parse macaroon for permissions + * [['Entity'=>['action','action']] + * @return array + */ + public function getPermissions() + { + return $this->_permissions; + } + + /** + * @param $entity + * @param $action + * @return bool + */ + public function hasPerm($entity,$action) + { + $permissions = $this->permissions; + if ($entity = @$permissions[$entity]) { + if (in_array($action,$entity)) + return TRUE; + } + return FALSE; + } + + /** + * @return string + */ + public function generateLncliBakeCommand() + { + $cmd = 'lncli bakemacaroon '; + foreach ($this->_permissions as $entity => $actions) { + foreach ($actions as $action) { + $cmd .= "$entity:$action "; + } + } + + return trim($cmd); + } + + /** + * @param $array + * @param string $newLine + * @return string + */ + public static function permissionArrayToReadableString($array,$newLine=' ') + { + $str = ''; + foreach ($array as $entity => $perms) { + foreach ($perms as $p) { + $str .= $entity.':'.$p. $newLine; + } + } + return $str; + } + + /** + * @return string + */ + public function readableString() + { + return static::permissionArrayToReadableString($this->getPermissions()); + } + + /** + * @return bool + */ + public function getIsValidMacaroon() + { + if (!array_filter($this->getPermissions())) { + return false; + } else { + return TRUE; + } + } + +} \ No newline at end of file diff --git a/src/node/components/LndNodeConnector.php b/src/node/components/LndNodeConnector.php new file mode 100644 index 00000000..f6ab3216 --- /dev/null +++ b/src/node/components/LndNodeConnector.php @@ -0,0 +1,651 @@ +endpoint = 'https://'.$lnNodeObject->host.':'.$lnNodeObject->rest_port.'/v1/'; + $lndConnector->macaroonHex = $lnNodeObject->baseMacaroonObject->hex; + $lndConnector->tlsCert = $lnNodeObject->tls_cert; + $lndConnector->webService = $webService; + $lndConnector->node = $lnNodeObject; + + return $lndConnector; + } + + /** + * @param LnNode $lnNodeObject + * @return \Lnrpc\LightningClient|\Routerrpc\RouterClient + */ + public static function initConnectorRpc(LnNode $lnNodeObject, $service='lightning') + { + $cert = hex2bin($lnNodeObject->tls_cert); + $macaroon = $lnNodeObject->baseMacaroonObject->hex; + $callback = function ($metadata) use ($macaroon) { + return ['macaroon' => [$macaroon]]; + }; + + $credentials = \Grpc\ChannelCredentials::createSsl($cert); + + switch ($service) { + case self::SERVICE_LIGHTNING: + $rpc = new \Lnrpc\LightningClient($lnNodeObject->host.':'.$lnNodeObject->rpc_port,['credentials'=>$credentials,'update_metadata'=>$callback]); + break; + case self::SERVICE_ROUTER: + $rpc = new \Routerrpc\RouterClient($lnNodeObject->host.':'.$lnNodeObject->rpc_port,['credentials'=>$credentials,'update_metadata'=>$callback]); + break; + case self::SERVICE_WALLET_UNLOCKER: + $rpc = new \Lnrpc\WalletUnlockerClient($lnNodeObject->host.':'.$lnNodeObject->rpc_port,['credentials'=>$credentials,'update_metadata'=>$callback]); + break; + case self::SERVICE_WALLET_KIT: + $rpc = new \Walletrpc\WalletKitClient($lnNodeObject->host.':'.$lnNodeObject->rpc_port,['credentials'=>$credentials,'update_metadata'=>$callback]); + break; + + } + + + return $rpc; + } + + + /** + * @param $nodeObjectOrId + * @throws \Exception + */ + public function setNode($nodeObjectOrId) + { + if ($nodeObjectOrId instanceof LnNode) + $this->_nodeObject = $nodeObjectOrId; + else + $this->_nodeObject = LnNode::findOne($nodeObjectOrId); + + if (!$this->_nodeObject) + throw new \Exception('Invalid Node ID provided to connector:'.$nodeObjectOrId); + } + + public function setWebService($webService) + { + $this->_webService = $webService; + } + + public function createInvoice($invoiceOptions) + { + $r = $this->lnd_rpc_request('AddInvoice',$invoiceOptions); + $arr = @json_decode($r,TRUE); + + if (!$arr) + throw new UnableToCreateInvoiceException($r); + + //append the node ID to the array just so we know + $arr['ln_node_id'] = $this->_nodeObject->id; + + //GRPC backwards compatible + $arr['payment_request'] = $arr['paymentRequest']; + $arr['r_hash'] = $arr['rHash']; + + return $arr; + + } + public function checkInvoice($request) {} + + /** + * @param $request + * @return mixed + * @throws \Exception + */ + public function decodeInvoice($request) + { + $r = $this->lnd_rpc_request('DecodePayReq',['pay_req'=>$request]); + $arr = @json_decode($r,TRUE); + + if (!$arr) + throw new UnableToDecodeInvoiceException($r); + + //GRPC backwards compatible + $arr['payment_hash'] = $arr['paymentHash']; unset($arr['paymentHash']); + $arr['num_satoshis'] = $arr['numSatoshis']; unset($arr['numSatoshis']); + $arr['cltv_expiry'] = $arr['cltvExpiry']; unset($arr['cltvExpiry']); + + return $arr; + } + + public function lookupInvoice($payment_hash) + { + $r = $this->lnd_rpc_request('LookupInvoice',['r_hash_str'=>$payment_hash]); + $arr = @json_decode($r,TRUE); + + if (!$arr) + throw new UnableToLookupInvoiceException($r); + + return $arr; + } + + public function queryRoutes($bodyArray) + { + $r = $this->lnd_rpc_request('QueryRoutes',$bodyArray); + $arr = @json_decode($r,TRUE); + + if (!$arr) + throw new UnableToQueryRoutesException($r); + + return $arr; + } + + public function walletBalance($bodyArray=[]) + { + $r = $this->lnd_rpc_request('WalletBalance',$bodyArray); + $arr = @json_decode($r,TRUE); + + if (!$arr) + throw new UnableToGetWalletBalanceException($r); + + return $arr; + } + + public function channelBalance($bodyArray=[]) + { + $r = $this->lnd_rpc_request('ChannelBalance',$bodyArray); + $arr = @json_decode($r,TRUE); + + if (!$arr) + throw new UnableToGetChannelBalanceException($r); + + return $arr; + } + + public function newAddress($bodyArray=[]) + { + $r = $this->lnd_rpc_request('NewAddress',$bodyArray); + $arr = @json_decode($r,TRUE); + + if (!$arr) + throw new UnableToGetWalletBalanceException($r); + + return $arr; + } + + /** + * @param $request + * @return array|mixed|string + * @throws UnableToPayInvoiceException + * @throws UnableToSendKeysendException + */ + public function payInvoice($request,$options=[]) + { + $data = ArrayHelper::merge([ + 'payment_request'=>$request, + 'timeout_seconds'=>10, + 'no_inflight_updates'=>1, + 'allow_self_payment'=>1 + ],$options); + + $arr = $this->lnd_rpc_request('SendPaymentV2',$data); + + if (!is_array($arr)) //the request to lnd is malformed in some way + throw new UnableToPayInvoiceException($arr); + + if (@$arr['status'] != 'SUCCEEDED') { //the payment legit failed for lightning reason + $this->_nodeObject->user->registerAction(ActionName::LN_NODE_INVOICE_PAYMENT_FAILURE,['lnod'=>$this->_nodeObject->toArray(),'request_parameters'=>$data,'failureReason'=>@$arr['failureReason']]); + throw new UnableToPayInvoiceException(@$arr['failureReason']); + } + + $arr['payment_preimage'] = $arr['paymentPreimage']; + $arr['payment_hash'] = $arr['paymentHash']; + + + return $arr; + } + + /** + * @param $dest + * @param $num_satoshis + * @param array $dest_custom_records + * @param array $options + * @return mixed|string + * @throws UnableToSendKeysendException + */ + public function keysend($dest,$num_satoshis,$dest_custom_records=[],$options=[]) + { + $preimage = random_bytes(32); + $data = ArrayHelper::merge([ + 'dest'=>hex2bin($dest), + 'timeout_seconds'=>10, + 'amt'=>$num_satoshis, + 'no_inflight_updates'=>1, + 'allow_self_payment'=>1, + 'payment_hash'=>hex2bin(hash('sha256',$preimage)), + 'dest_custom_records'=> ArrayHelper::merge($dest_custom_records,[ + self::KEYSEND_TLV_KEY => $preimage + ]) + ],$options); + + $arr = $this->lnd_rpc_request('SendPaymentV2',$data); + + if (!is_array($arr)) //the request to LND is malformed somehow + throw new UnableToSendKeysendException($arr); + + if (@$arr['status'] != 'SUCCEEDED') { //legit keysend failure + //need to clean up data a bit for db + $data['dest'] = bin2hex($data['dest']); + $data['payment_hash'] = bin2hex($data['payment_hash']); + unset($data['dest_custom_records'][self::KEYSEND_TLV_KEY]); + + + $this->_nodeObject->user->registerAction(ActionName::LN_NODE_SPONTANEOUS_SEND_FAILURE,['lnod'=>$this->_nodeObject->toArray(),'request_parameters'=>$data,'failureReason'=>@$arr['failureReason']]); + throw new UnableToSendKeysendException(@$arr['failureReason']); + } + + return $arr; + } + + + public function bakeMacaroon($perms) + { + $r = $this->lnd_rpc_request('BakeMacaroon',$perms); + + $arr = @json_decode($r,TRUE); + + if (!array_key_exists('macaroon',$arr)) + throw new UnableToBakeMacaroonException($arr); + + return $arr['macaroon']; + } + + public function deleteAllPayments() + { + $r = $this->lnd_rpc_request('DeleteAllPayments'); + + return true; + } + + public function listChannels() { + $r = $this->lnd_rpc_request('ListChannels'); + $arr = @json_decode($r,TRUE); + + if (!$arr) + throw new UnableToListChannelsException($r); + + return $arr; + } + + public function nodeInfo($data) { + try { + return $this->lnd_rpc_request('NodeInfo',$data); + } catch (\Throwable $t) { + \LNPay::error($t->getMessage(),__METHOD__); + } + } + + public function chanInfo($data) { + try { + return $this->lnd_rpc_request('ChanInfo',$data); + } catch (\Throwable $t) { + \LNPay::error($t->getMessage(),__METHOD__); + } + } + + public function getInfo() { + try { + switch ($this->_webService) { + case 'RPC': + return $this->lnd_rpc_request('GetInfo'); + break; + case 'REST': + return $this->lnd_rest_request('getinfo'); + break; + } + } catch (\Throwable $t) { + \LNPay::error($t->getMessage(),__METHOD__); + } + } + + protected function lnd_rpc_request($method, $bodyArray=[]) + { + \LNPay::info('Attempting RPC:'.$method.' ('.$this->_nodeObject->id.') : '.VarDumper::dumpAsString($bodyArray),__METHOD__); + //\LNPay::info($this->_nodeObject->host.':'.$this->_nodeObject->rpc_port); + try { + switch ($method) { + case 'ChanInfo': + $rpcConnector = static::initConnectorRpc($this->_nodeObject); + $r = new ChanInfoRequest($bodyArray); + $resp = $rpcConnector->GetChanInfo($r)->wait(); + break; + case 'NodeInfo': + $rpcConnector = static::initConnectorRpc($this->_nodeObject); + $r = new NodeInfoRequest($bodyArray); + $resp = $rpcConnector->GetNodeInfo($r)->wait(); + break; + case 'ListChannels': + $rpcConnector = static::initConnectorRpc($this->_nodeObject); + $r = new ListChannelsRequest(); + $resp = $rpcConnector->ListChannels($r)->wait(); + break; + case 'GetInfo': + $rpcConnector = static::initConnectorRpc($this->_nodeObject); + $r = new GetInfoRequest(); + $resp = $rpcConnector->GetInfo($r)->wait(); + break; + case 'AddInvoice': + $rpcConnector = static::initConnectorRpc($this->_nodeObject); + $r = new Invoice($bodyArray); + $resp = $rpcConnector->AddInvoice($r)->wait(); + break; + case 'SendPaymentSync': + $rpcConnector = static::initConnectorRpc($this->_nodeObject); + $r = new SendRequest($bodyArray); + $resp = $rpcConnector->SendPaymentSync($r)->wait(); + break; + case 'DecodePayReq': + $rpcConnector = static::initConnectorRpc($this->_nodeObject); + $r = new PayReqString($bodyArray); + $resp = $rpcConnector->DecodePayReq($r)->wait(); + break; + case 'LookupInvoice': + $rpcConnector = static::initConnectorRpc($this->_nodeObject); + $r = new PaymentHash($bodyArray); + $resp = $rpcConnector->LookupInvoice($r)->wait(); + break; + case 'SendPaymentV2': + $rpcConnector = static::initConnectorRpc($this->_nodeObject,self::SERVICE_ROUTER); + $r = new SendPaymentRequest($bodyArray); + $resp = $rpcConnector->SendPaymentV2($r); + foreach ($resp->responses() as $rp) { + $json = $rp->serializeToJsonString(); + \LNPay::info('('.$method.') Response:'.VarDumper::export($json),__METHOD__); + return json_decode($json,TRUE); + } + //if error + return $resp->getStatus()->details; + break; + case 'BakeMacaroon': + $rpcConnector = static::initConnectorRpc($this->_nodeObject); + $r = new BakeMacaroonRequest(); + $r->setPermissions($bodyArray); + $resp = $rpcConnector->BakeMacaroon($r)->wait(); + break; + case 'GenSeed': + $rpcConnector = static::initConnectorRpc($this->_nodeObject); + $r = new GenSeedRequest(); + $resp = $rpcConnector->GenSeed($r)->wait(); + break; + case 'DeleteAllPayments': + $rpcConnector = static::initConnectorRpc($this->_nodeObject); + $r = new DeleteAllPaymentsRequest(); + $resp = $rpcConnector->DeleteAllPayments($r)->wait(); + break; + case 'QueryRoutes': + $rpcConnector = static::initConnectorRpc($this->_nodeObject); + $r = new QueryRoutesRequest($bodyArray); + $resp = $rpcConnector->QueryRoutes($r)->wait(); + break; + case 'WalletBalance': + $rpcConnector = static::initConnectorRpc($this->_nodeObject, self::SERVICE_LIGHTNING); + $r = new WalletBalanceRequest($bodyArray); + $resp = $rpcConnector->WalletBalance($r)->wait(); + break; + case 'ChannelBalance': + $rpcConnector = static::initConnectorRpc($this->_nodeObject, self::SERVICE_LIGHTNING); + $r = new ChannelBalanceRequest($bodyArray); + $resp = $rpcConnector->ChannelBalance($r)->wait(); + break; + case 'NewAddress': + $rpcConnector = static::initConnectorRpc($this->_nodeObject, self::SERVICE_LIGHTNING); + $r = new NewAddressRequest($bodyArray); + $resp = $rpcConnector->NewAddress($r)->wait(); + break; + } + + + if ($resp[0]) { + $json = @$resp[0]->serializeToJsonString(); + \LNPay::info('('.$method.') Response:'.VarDumper::export($json),__METHOD__); + return $json; + } + else { + $error = $resp[1]->details; + \LNPay::info('('.$method.') Response:'.VarDumper::export($error),__METHOD__); + return $error; + } + + } catch (\Throwable $t) { + return $t->getMessage(); + } + } + + /** + * @param $path + * @param array $bodyArray + * @return string|null + * @throws \GuzzleHttp\Exception\GuzzleException + */ + public function lnd_rest_request($path,$bodyArray = []) + { + \LNPay::info('Attempting REST:'.$path.' ('.$this->_nodeObject->id.'): '.VarDumper::dumpAsString($bodyArray),__METHOD__); + //Saving TLS cert to disk so we can use it. not sure how else to do this + $this->saveTlsCertToDisk(); + + $requestUrl = $this->endpoint . $path; + $headers = ['Grpc-Metadata-macaroon'=>$this->macaroonHex]; + $client = new \GuzzleHttp\Client([ + 'curl'=> [ + CURLOPT_SSL_VERIFYHOST => 0, + CURLOPT_SSL_VERIFYPEER => 0 + ], + 'http_errors'=>true, + 'headers' => $headers, + 'debug'=>false, + 'connect_timeout'=>2 + ]); + $r = null; + if (empty($bodyArray)) { + $response = $client->request('GET', $requestUrl, [ + 'verify'=>$this->tlsCertFilename, + ]); + $r = $response->getBody()->getContents(); + } else { + $response = $client->request('POST', $requestUrl, [ + 'verify'=>$this->tlsCertFilename, + 'json' => $bodyArray + ]); + $r = $response->getBody()->getContents(); + } + + \LNPay::info('REST ('.$path.') Response:'.VarDumper::export($r),__METHOD__); + + //Delete the TLS cert we saved earlier + $this->deleteTlsCertFromDisk(); + + return $r; + } + + protected function saveTlsCertToDisk() + { + file_put_contents($this->getTlsCertFilename(),hex2bin($this->tlsCert)); + } + + protected function deleteTlsCertFromDisk() + { + unlink($this->getTlsCertFilename()); + } + + public function getTlsCertFilename() + { + return \LNPay::getAlias('@root').'/runtime/node_tls/'.substr(md5($this->tlsCert),0,12).'.cert'; + } + + + + + + + + + + + + + + + + + + + + + /************************************************************* + * RPC SECTION + *************************************************************/ + + public function rpcSubscribeInvoices($callback) + { + $rpcConnector = static::initConnectorRpc($this->_nodeObject); + $sub = new \Lnrpc\InvoiceSubscription(); + $result = $rpcConnector->SubscribeInvoices($sub); + + foreach ($result->responses() as $response) { + $callback($response); + } + } + + public function rpcSubscribePeerEvents($callback) + { + $rpcConnector = static::initConnectorRpc($this->_nodeObject); + $sub = new \Lnrpc\PeerEventSubscription(); + $result = $rpcConnector->SubscribePeerEvents($sub); + + foreach ($result->responses() as $response) { + $callback($response); + } + } + + public function rpcSubscribeTransactions($callback) + { + $rpcConnector = static::initConnectorRpc($this->_nodeObject); + $sub = new \Lnrpc\GetTransactionsRequest(); + $result = $rpcConnector->SubscribeTransactions($sub); + + foreach ($result->responses() as $response) { + $callback($response); + } + } + + public function rpcSubscribeChannelEvents($callback) + { + $rpcConnector = static::initConnectorRpc($this->_nodeObject); + $sub = new \Lnrpc\ChannelEventSubscription(); + $result = $rpcConnector->SubscribeChannelEvents($sub); + + foreach ($result->responses() as $response) { + $callback($response); + } + } + + public function rpcSubscribeChannelGraph($callback) + { + $rpcConnector = static::initConnectorRpc($this->_nodeObject); + $sub = new \Lnrpc\GraphTopologySubscription(); + $result = $rpcConnector->SubscribeChannelGraph($sub); + + foreach ($result->responses() as $response) { + $callback($response); + } + } + + public function rpcSubscribeChannelBackups($callback) + { + $rpcConnector = static::initConnectorRpc($this->_nodeObject); + $sub = new \Lnrpc\ChannelBackupSubscription(); + $result = $rpcConnector->SubscribeChannelBackups($sub); + + foreach ($result->responses() as $response) { + $callback($response); + } + } + + public function rpcSubscribeHtlcEvents($callback) + { + $rpcConnector = static::initConnectorRpc($this->_nodeObject,self::SERVICE_ROUTER); + $sub = new \Routerrpc\SubscribeHtlcEventsRequest(); + $result = $rpcConnector->SubscribeHtlcEvents($sub); + + foreach ($result->responses() as $response) { + $callback($response); + } + } + + /************************************************************* + * END RPC SECTION + *************************************************************/ +} \ No newline at end of file diff --git a/src/node/controllers/AuthprofileController.php b/src/node/controllers/AuthprofileController.php new file mode 100644 index 00000000..9d65d356 --- /dev/null +++ b/src/node/controllers/AuthprofileController.php @@ -0,0 +1,135 @@ + [ + 'class' => VerbFilter::className(), + 'actions' => [ + 'delete' => ['POST'], + ], + ], + ]; + } + + /** + * Lists all LnNodeProfile models. + * @return mixed + */ + public function actionIndex() + { + $searchModel = new LnNodeProfileSearch(); + $searchModel->ln_node_id = $this->nodeObject->id; + $searchModel->user_id = \LNPay::$app->user->id; + $dataProvider = $searchModel->search(\LNPay::$app->request->queryParams); + + return $this->render('index', [ + 'searchModel' => $searchModel, + 'dataProvider' => $dataProvider, + ]); + } + + /** + * Displays a single LnNodeProfile model. + * @param resource $id + * @return mixed + * @throws NotFoundHttpException if the model cannot be found + */ + public function actionView($id) + { + return $this->render('view', [ + 'model' => $this->findModel($id), + ]); + } + + /** + * Creates a new LnNodeProfile model. + * If creation is successful, the browser will be redirected to the 'view' page. + * @return mixed + */ + public function actionCreate() + { + $model = new LnNodeProfile(); + $model->ln_node_id = $this->nodeObject->id; + if ($model->load(\LNPay::$app->request->post())) { + if ($prof = $model->bakeMacaroon()) { + return $this->redirect(['view', 'id' => $prof->id]); + } + } + + + return $this->render('create', [ + 'model' => $model, + ]); + } + + /** + * Updates an existing LnNodeProfile model. + * If update is successful, the browser will be redirected to the 'view' page. + * @param resource $id + * @return mixed + * @throws NotFoundHttpException if the model cannot be found + */ + public function actionUpdate($id) + { + $model = $this->findModel($id); + + if ($model->load(\LNPay::$app->request->post()) && $model->save()) { + return $this->redirect(['view', 'id' => $model->id]); + } + + return $this->render('update', [ + 'model' => $model, + ]); + } + + /** + * Deletes an existing LnNodeProfile model. + * If deletion is successful, the browser will be redirected to the 'index' page. + * @param resource $id + * @return mixed + * @throws NotFoundHttpException if the model cannot be found + */ + public function actionDelete($id) + { + \LNPay::$app->session->setFlash('error','Cannot delete macaroons yet!'); + return $this->redirect(\LNPay::$app->request->referrer); + $this->findModel($id)->delete(); + + return $this->redirect(['index']); + } + + /** + * Finds the LnNodeProfile model based on its primary key value. + * If the model is not found, a 404 HTTP exception will be thrown. + * @param resource $id + * @return LnNodeProfile the loaded model + * @throws NotFoundHttpException if the model cannot be found + */ + protected function findModel($id) + { + if (($model = LnNodeProfile::findOne($id)) !== null) { + return $model; + } + + throw new NotFoundHttpException('The requested page does not exist.'); + } +} diff --git a/src/node/controllers/BaseNodeController.php b/src/node/controllers/BaseNodeController.php new file mode 100644 index 00000000..12c167a1 --- /dev/null +++ b/src/node/controllers/BaseNodeController.php @@ -0,0 +1,44 @@ +id,['rpc','authprofile','ln'])) && ($model = LnNode::findOne(\LNPay::$app->request->getQueryParam('id'))) !== null) { + \LNPay::$app->session->set('ln_node_id',$model->id); + $this->nodeObject = $model; + } else if ($node_id = \LNPay::$app->session->get('ln_node_id')) { + $this->nodeObject = LnNode::findOne($node_id); + } + + if (@$this->nodeObject->user_id != \LNPay::$app->user->id) { + \LNPay::$app->session->remove('ln_node_id'); + throw new BadRequestHttpException('Invalid node specified!'); + } + + \LNPay::$app->getView()->params['breadcrumbs'][] = ['label'=>'LN Nodes','url'=>\LNPay::$app->controller->module->homeUrl]; + \LNPay::$app->getView()->params['breadcrumbs'][] = ['label' => $this->nodeObject->alias, 'url' => ['index']]; + $this->module->sidebarView = '@app/node/views/_nav-node.php'; + + return true; + } + + } + +} + ?> \ No newline at end of file diff --git a/src/node/controllers/DashboardController.php b/src/node/controllers/DashboardController.php new file mode 100644 index 00000000..52b4f850 --- /dev/null +++ b/src/node/controllers/DashboardController.php @@ -0,0 +1,202 @@ + [ + 'class' => VerbFilter::className(), + 'actions' => [ + 'delete' => ['POST'], + ], + ], + ]; + } + + /** + * Finds the LnNode model based on its primary key value. + * If the model is not found, a 404 HTTP exception will be thrown. + * @param string $id + * @return LnNode the loaded model + * @throws NotFoundHttpException if the model cannot be found + */ + protected function findModel($id) + { + if (($model = LnNode::findOne($id)) !== null) { + if ($model->user_id == \LNPay::$app->user->id) + return $model; + } + + throw new NotFoundHttpException('The requested page does not exist'); + } + + /** + * Sends user to first node, otherwise to add node + * @param string $id + * @return mixed + * @throws NotFoundHttpException if the model cannot be found + */ + public function actionIndex() + { + $nodes = \LNPay::$app->user->identity->getLnNodeQuery(); + + $nodeDp = new \yii\data\ActiveDataProvider([ + 'query' => $nodes, + 'pagination' => [ + 'pageSize' => 100, + ], + 'sort' => [ + 'defaultOrder' => [ + 'created_at' => SORT_DESC, + ] + ], + ]); + + if ($nodes->exists()) { + return $this->render('index',compact('nodeDp','nodes')); + } else { + return $this->redirect('/node/dashboard/add'); + } + + } + + /** + * Displays a single LnNode model. + * @param string $id + * @return mixed + * @throws NotFoundHttpException if the model cannot be found + */ + public function actionView($id) + { + return $this->render('view', [ + 'node' => $this->findModel($id), + ]); + } + + /** + * Creates a new LnNode model. + * If creation is successful, the browser will be redirected to the 'view' page. + * @return mixed + */ + public function actionAdd() + { + $model = new NodeAddForm(); + $submittedMacaroonObject = null; + + if ($model->load(\LNPay::$app->request->post())) { + if ($model->validate()) { + $submittedMacaroonObject = $model->submittedMacaroonObject; + + if ($model->readyToAdd) { + if ($node = $model->addNode()) { + return $this->redirect(['/node/ln/index','id'=>$node->id]); + } else { + $model = $node; + } + } + } + } + + return $this->render('add', [ + 'model' => $model, + 'submittedMacaroonObject'=>$submittedMacaroonObject, + 'nodeInfo'=>$model->nodeInfo + ]); + } + + /** + * Creates a new LnNode model. + * If creation is successful, the browser will be redirected to the 'view' page. + * @return mixed + */ + public function actionCreate() + { + $model = new NodeCreateForm(); + + if (YII_ENV_PROD && \LNPay::$app->user->identity->getLnNodeQuery()->count() > 2) { + \LNPay::$app->session->setFlash('error','Maxing out at 3 nodes per user for now'); + return $this->redirect(\LNPay::$app->request->referrer); + } + + if ($model->load(\LNPay::$app->request->post())) { + if ($model->validate()) { + if ($node = $model->createNode()) { + \LNPay::$app->session->setFlash('new_node_details',$node); + \LNPay::$app->session->setFlash('success','Node: '.$node['node_id'].' is launching!'); + return $this->redirect(['/node/dashboard/index']); + } else { + $model = $node; + } + } + } + + return $this->render('create', [ + 'model' => $model, + ]); + } + + /** + * Updates an existing LnNode model. + * If update is successful, the browser will be redirected to the 'view' page. + * @param string $id + * @return mixed + * @throws NotFoundHttpException if the model cannot be found + */ + public function actionUpdate($id) + { + $model = $this->findModel($id); + + if ($model->load(\LNPay::$app->request->post()) && $model->save()) { + return $this->redirect(['view', 'id' => $model->id]); + } + + return $this->render('update', [ + 'model' => $model, + ]); + } + + /** + * Deletes an existing LnNode model. + * If deletion is successful, the browser will be redirected to the 'index' page. + * @param string $id + * @return mixed + * @throws NotFoundHttpException if the model cannot be found + */ + public function actionDelete($id) + { + $node = $this->findModel($id); + $node->delete(); + + return $this->redirect(['/node/dashboard']); + } + + public function actionProvisioning() + { + return $this->render('provisioning'); + } + + + + +} diff --git a/src/node/controllers/LnController.php b/src/node/controllers/LnController.php new file mode 100644 index 00000000..50ee63b0 --- /dev/null +++ b/src/node/controllers/LnController.php @@ -0,0 +1,166 @@ + [ + 'class' => VerbFilter::className(), + 'actions' => [ + 'delete' => ['POST'], + ], + ], + ]; + } + + public function beforeAction($event) + { + if (parent::beforeAction($event)) { + + //We can check for perms or other things on the current session key + + return true; + } + + } + + /** + * Displays a single LnNode model. + * @param string $id + * @return mixed + * @throws NotFoundHttpException if the model cannot be found + */ + public function actionIndex() + { + $gi = $this->nodeObject->healthCheck('REST'); + $details = \LNPay::$app->session->getFlash('new_node_details',false); + $node = $this->nodeObject; + + return $this->render('node', [ + 'node' => $node, + 'details'=>$details, + 'gi'=>$gi + ]); + } + + public function actionSettings() + { + $node = $this->nodeObject; + return $this->render('settings', [ + 'node' => $node, + ]); + } + + /** + * Displays a single LnNode model. + * @param string $id + * @return mixed + * @throws NotFoundHttpException if the model cannot be found + */ + public function actionOnchain() + { + $details = \LNPay::$app->session->getFlash('new_node_details',false); + $node = $this->nodeObject; + + $balances = $node->getLndConnector()->walletBalance(); + return $this->render('onchain', [ + 'node' => $node, + 'balances'=>$balances + ]); + } + + public function actionNetworkfees() + { + return $this->render('network_fees',['node'=>$this->nodeObject]); + } + + public function actionTestCall($call='getinfo') + { + switch ($call) { + case 'getinfo': + $gi = $this->nodeObject->healthCheck('REST'); + break; + } + if ($gi) { + \LNPay::$app->session->setFlash('success','GetInfo successfully retrieved!'); + } else { + \LNPay::$app->session->setFlash('error','GetInfo failed! Node is offline or unreachable'); + } + return $this->redirect(\LNPay::$app->request->referrer); + } + + public function actionConnect() + { + $node = $this->nodeObject; + + return $this->render('connect', [ + 'node' => $node, + ]); + } + + /** + * Updates an existing LnNode model. + * If update is successful, the browser will be redirected to the 'view' page. + * @param string $id + * @return mixed + * @throws NotFoundHttpException if the model cannot be found + */ + public function actionUpdate() + { + $model = $this->nodeObject; + + if ($model->load(\LNPay::$app->request->post()) && $model->save()) { + return $this->redirect(['view', 'id' => $model->id]); + } + + return $this->render('update', [ + 'model' => $model, + ]); + } + + /** + * Deletes an existing LnNode model. + * If deletion is successful, the browser will be redirected to the 'index' page. + * @param string $id + * @return mixed + * @throws NotFoundHttpException if the model cannot be found + */ + public function actionDelete($id) + { + $node = LnNode::findOne(['id'=>$id,'user_id'=>Yii::$app->user->id]); + + $node->delete(); + + Yii::$app->session->setFlash('success','Node Removed'); + return $this->redirect(['/dashboard/home']); + } + + + + +} diff --git a/src/node/controllers/RpcController.php b/src/node/controllers/RpcController.php new file mode 100644 index 00000000..411b95cd --- /dev/null +++ b/src/node/controllers/RpcController.php @@ -0,0 +1,94 @@ + [ + 'class' => VerbFilter::className(), + 'actions' => [ + 'delete' => ['POST'], + ], + ], + ]; + } + + /** + * Lists all IntegrationWebhook models. + * @return mixed + */ + public function actionForwarder() + { + $node = \LNPay::$app->user->identity->lnNode; + if (!$node) { + return $this->redirect(['/node/dashboard']); + } + $searchModel = new IntegrationWebhookSearch(); + $dataProvider = $searchModel->search(\LNPay::$app->request->queryParams); + + + return $this->render('rpc-forwarder', [ + 'searchModel' => $searchModel, + 'dataProvider' => $dataProvider, + ]); + } + + /** + * Lists all LnNode models. + * @return mixed + */ + public function actionListeners($action='',$nl_id='') + { + $node = $this->nodeObject; + + if ($action && $nl_id) { + $nodeListener = NodeListener::findOne($nl_id); + switch ($action) { + case 'start': + $nodeListener->startListenerAndTurnOnAutostart(); + break; + case 'stop': + $nodeListener->stopListenerAndTurnOffAutostart(); + break; + } + sleep(1); + return $this->redirect(\LNPay::$app->request->referrer); + } + + $provider = new ActiveDataProvider([ + 'query' => $node->getNodeListeners()->andWhere(['!=','method',NodeListener::LND_RPC_SUBSCRIBE_CHANNEL_GRAPH]), + ]); + + return $this->render('rpc-listeners', [ + 'dataProvider' => $provider, + 'lnNode'=>$node + ]); + } + + public function actionRefreshListeners() + { + $n = $this->nodeObject; + $n->removeLndRpcSubscribers(); + $n->spawnLndRpcSubscribers(); + sleep(5); + return $this->redirect(\LNPay::$app->request->referrer); + + } +} \ No newline at end of file diff --git a/src/node/controllers/api/v1/EventsController.php b/src/node/controllers/api/v1/EventsController.php new file mode 100644 index 00000000..3ff52111 --- /dev/null +++ b/src/node/controllers/api/v1/EventsController.php @@ -0,0 +1,142 @@ + ['POST'], + //'update' => ['PUT','PATCH','POST'], + //'delete' => ['DELETE'], + //'view' => ['GET','OPTIONS'], + //'index'=> ['GET'], + ]; + } + + public function beforeAction($event) + { + if (parent::beforeAction($event)) { + if ($node_id = \LNPay::$app->request->getQueryParam('node_id')) { + $this->nodeObject = LnNode::find()->where(['id'=>$node_id,'user_id'=>\LNPay::$app->user->id])->one(); + + if (!$this->nodeObject) { + throw new UnauthorizedHttpException('Invalid node id: '.$node_id); + } + } else { + throw new UnauthorizedHttpException('Request must contain node_id'); + } + } + + return true; + } + + public function actionHtlc() + { + $model = new HtlcEventQueryForm(); + $model->load(\LNPay::$app->request->getQueryParams(),''); + + if ($model->validate()) { + //execute query + $query = $model->constructQuery(); + return $query->all(); + } else { + throw new BadRequestHttpException(HelperComponent::getFirstErrorFromFailedValidation($model)); + } + } + + public function actionHtlcsummary($period) //minute, hour, day + { + $model = new HtlcEventQueryForm(); + $model->load(\LNPay::$app->request->getQueryParams(),''); + + if (!$model->endAt) + $model->endAt = time()*1000000000; + + $arr = []; + + + if ($model->validate()) { + //execute query + $query = $model->constructQuery(); + $results = $query->all(); + + + + foreach ($results as $r) { + $d = new \DateTime(); + $ts = $r['timestampNs']/1000000000; + $d->setTimestamp($ts); + $d->setTimezone(new \DateTimeZone('America/New_York')); + //echo $d->format('H:i:s').'
'; + if (!@$r['outgoingChannelId']) { + continue; + } + switch ($period) { + case 'second': + $t = strtotime($d->format('Y-m-d H:i:s')); + if (empty($arr[$r['outgoingChannelId'][$t]])) + $arr[$r['outgoingChannelId']][$t] = 0; + $arr[$r['outgoingChannelId']][$t]++; + break; + case 'minute': + $t = strtotime($d->format('Y-m-d H:i:00')); + if (empty($arr[$r['outgoingChannelId']][$t])) + $arr[$r['outgoingChannelId']][$t] = 0; + $arr[$r['outgoingChannelId']][$t]++; + break; + case 'hour': + $t = strtotime($d->format('Y-m-d H:00:00')); + if (empty($arr[$r['outgoingChannelId']][$t])) + $arr[$r['outgoingChannelId']][$t] = 0; + $arr[$r['outgoingChannelId']][$t]++; + break; + } + } + + $jsf=[]; + + foreach ($arr as $channelId => $vars) { + foreach ($vars as $timestamp => $count) { + if (empty($jsf[(string) $timestamp])) { + $jsf[(string) $timestamp] = [$channelId=>$count]; + } + else { + @$jsf[(string) $timestamp][$channelId]+=$count; + } + $jsf[(string) $timestamp]['time'] = $timestamp; + } + } + return array_values($jsf); + + + } else { + throw new BadRequestHttpException(HelperComponent::getFirstErrorFromFailedValidation($model)); + } + } + + + + +} diff --git a/src/node/controllers/api/v1/LnNodeController.php b/src/node/controllers/api/v1/LnNodeController.php new file mode 100644 index 00000000..d4c65368 --- /dev/null +++ b/src/node/controllers/api/v1/LnNodeController.php @@ -0,0 +1,101 @@ + ['POST','OPTIONS'], + 'update' => ['PUT','PATCH','POST','OPTIONS'], + 'delete' => ['DELETE','OPTIONS'], + 'view' => ['GET','OPTIONS'], + 'index'=> ['GET','OPTIONS'], + 'view-all'=>['GET','OPTIONS'] + ]; + } + + public function findByKey($node_id) + { + return LnNode::find()->where(['id'=>$node_id,'user_id'=>\LNPay::$app->user->id])->one(); + } + + public function actionCreate() + { + throw new ServerErrorHttpException('Endpoint not active'); + } + + /** + * + * @param $id + * @return LnNode + * @throws NotFoundHttpException + */ + public function actionView($node_id) + { + return $this->findByKey($node_id); + } + + + public function actionViewAll() + { + $modelClass = $this->modelClass; + return new \yii\data\ActiveDataProvider([ + 'query' => $modelClass::find()->where(['user_id'=>\LNPay::$app->user->id]), + 'pagination' => [ + 'defaultPageSize' => 100, + ], + 'sort' => [ + 'defaultOrder' => [ + 'created_at' => SORT_DESC + ] + ], + ]); + } + + +} diff --git a/src/node/controllers/api/v1/LncliController.php b/src/node/controllers/api/v1/LncliController.php new file mode 100644 index 00000000..a09323b9 --- /dev/null +++ b/src/node/controllers/api/v1/LncliController.php @@ -0,0 +1,63 @@ +nodeObject->getLndConnector()->lookupInvoice($r_hash_str); + } catch (\Throwable $t) { + throw new BadRequestHttpException($t->getMessage()); + } + } + + public function actionGetinfo() + { + try { + return json_decode($this->nodeObject->getLndConnector()->getInfo()); + } catch (\Throwable $t) { + throw new BadRequestHttpException($t->getMessage()); + } + } + + public function actionListchannels($chan_id=null) + { + try { + $array = $this->nodeObject->getLndConnector()->listChannels(); + $arr = []; + foreach ($array['channels'] as $channel) { + $channel['nodeInfo'] = json_decode($this->nodeObject->getLndConnector()->nodeInfo(['pub_key'=>$channel['remotePubkey']]),TRUE); + $arr[] = $channel; + + if ($chan_id) { + if ($chan_id == $channel['chanId']) { + return $channel; + } + } + } + + + + return $arr; + } catch (\Throwable $t) { + throw new BadRequestHttpException($t->getMessage()); + } + } + + public function actionNodeinfo($pub_key='',$include_channels=false) + { + try { + return json_decode($this->nodeObject->getLndConnector()->nodeInfo(compact('pub_key','include_channels'))); + } catch (\Throwable $t) { + throw new BadRequestHttpException($t->getMessage()); + } + } +} diff --git a/src/node/controllers/api/v1/NodeApiController.php b/src/node/controllers/api/v1/NodeApiController.php new file mode 100644 index 00000000..b274f01e --- /dev/null +++ b/src/node/controllers/api/v1/NodeApiController.php @@ -0,0 +1,56 @@ + ['POST'], + //'update' => ['PUT','PATCH','POST'], + //'delete' => ['DELETE'], + //'view' => ['GET','OPTIONS'], + //'index'=> ['GET'], + ]; + } + + public function beforeAction($event) + { + if (parent::beforeAction($event)) { + if ($node_id = \LNPay::$app->request->getQueryParam('node_id')) { + if ($node_id == 'default') + $this->nodeObject = $this->user->getLnNodeQuery()->one(); + else + $this->nodeObject = $this->user->getLnNodeQuery()->andWhere(['id'=>$node_id])->one(); + + if (!$this->nodeObject) { + throw new UnauthorizedHttpException('Invalid node id: '.$node_id); + } + + } else { + throw new UnauthorizedHttpException('Request must contain node_id'); + } + } + + return true; + } +} diff --git a/src/node/controllers/api/v1/PaymentsController.php b/src/node/controllers/api/v1/PaymentsController.php new file mode 100644 index 00000000..b874575c --- /dev/null +++ b/src/node/controllers/api/v1/PaymentsController.php @@ -0,0 +1,36 @@ +nodeObject; + return $node->getLndConnector()->decodeInvoice($payment_request); + } catch (\Throwable $t) { + throw new BadRequestHttpException($t->getMessage()); + } + } + + public function actionQueryroutes($pub_key,$amt) + { + //$this->checkAccessKey(UserAccessKeyBehavior::PERM_DEFAULT_NODE_WRAPPER_ACCESS); + try { + $node = $this->nodeObject; + return $node->getLndConnector()->queryRoutes(compact('pub_key','amt')); + } catch (\Throwable $t) { + throw new BadRequestHttpException($t->getMessage()); + } + } + +} diff --git a/src/node/exceptions/MacaroonNotGeneratedYetException.php b/src/node/exceptions/MacaroonNotGeneratedYetException.php new file mode 100644 index 00000000..c62222e4 --- /dev/null +++ b/src/node/exceptions/MacaroonNotGeneratedYetException.php @@ -0,0 +1,18 @@ + 'lnod_carol', + 'created_at' => 1587488234, + 'updated_at' => 1587488237, + 'user_id' => 147, + 'alias' => 'carol', + 'network' => 'regtest', + 'ln_node_implementation_id' => 'lnd', + 'default_pubkey' => '03f7fd705022ef59521b360a20f598f2027abe7a5cc221c69ffb1d525dab2af4cb', + 'uri' => '03f7fd705022ef59521b360a20f598f2027abe7a5cc221c69ffb1d525dab2af4cb@192.168.69.62:9735', + 'host' => '192.168.69.1', + 'rpc_port' => '10003', + 'rest_port' => '8083', + 'ln_port' => '9735', + 'tls_cert' => '2d2d2d2d2d424547494e2043455254494649434154452d2d2d2d2d0a4d4949434c44434341644b67417749424167495147446d392b646432703172517747524359744a6d787a414b42676771686b6a4f50515144416a41784d5238770a485159445651514b45785a73626d5167595856306232646c626d56795958526c5a43426a5a584a304d51347744415944565151444577566a59584a76624441650a467730794d5441344d444d784e4445774d544261467730794d6a41354d6a67784e4445774d5442614d444578487a416442674e5642416f54466d78755a4342680a645852765a3256755a584a686447566b49474e6c636e5178446a414d42674e5642414d5442574e68636d39734d466b77457759484b6f5a497a6a3043415159490a4b6f5a497a6a304441516344516741454f6348694e506171666b4a4768356b38496a474d504e793368694a6e5a4e486e72467956447732342f433362635a2b4a0a5a766a50554e416c564455376c75374335595961624e7849626174674158367979716554644b4f42797a43427944414f42674e56485138424166384542414d430a41715177457759445652306c42417777436759494b775942425155484177457744775944565230544151482f42415577417745422f7a416442674e56485134450a46675155536330785265333452724665663862454c6f56624c67677342395177635159445652305242476f7761494946593246796232794343577876593246730a6147397a644949465932467962327943446e4276624746794c5734784c574e68636d397367675231626d6c3467677031626d6c346347466a61325630676764690a64575a6a623235756877522f41414142687841414141414141414141414141414141414141414142687753734567414668775441714555424d416f47434371470a534d343942414d43413067414d455543495144735568564943746c677649695958744e747a513159722f66456a77537952736535746f417167627141415149670a4f484c4e6d2f61366b37414835302f696b71416e426969457a4b4243546149762b6654306c2f4774616f303d0a2d2d2d2d2d454e442043455254494649434154452d2d2d2d2d0a', + 'getinfo' => '{"uris": ["025eb9588a5db262ebf195edb1a940428bac534e5b012b8b1d3011fdfa9f8f13db@192.168.69.1:9735"], "alias": "bob", "color": "#3399ff", "chains": [{"chain": "bitcoin", "network": "regtest"}], "testnet": false, "version": "0.9.1-beta commit=v0.9.1-beta", "features": {"0": {"name": "data-loss-protect", "is_known": true, "is_required": true}, "5": {"name": "upfront-shutdown-script", "is_known": true, "is_required": false}, "7": {"name": "gossip-queries", "is_known": true, "is_required": false}, "9": {"name": "tlv-onion", "is_known": true, "is_required": false}, "13": {"name": "static-remote-key", "is_known": true, "is_required": false}, "15": {"name": "payment-addr", "is_known": true, "is_required": false}, "17": {"name": "multi-path-payments", "is_known": true, "is_required": false}}, "num_peers": 1, "block_hash": "6f41cb242f2e93789a219c0272e895ccbd6244088c3bebb3c0b8e3d8b300efeb", "block_height": 5, "identity_pubkey": "02bf94411a0c85a7047ee36414f6da465fe90bcbee0946719781e342db40888858", "synced_to_chain": true, "synced_to_graph": true, "num_active_channels": 0, "num_pending_channels": 0, "best_header_timestamp": "1587515196", "num_inactive_channels": 0}', + 'status_type_id' => 300, + 'rpc_status_id' => 320, + 'rest_status_id' => 330, + 'fee_wallet_id' => 2222, + 'keysend_wallet_id' => 2223 + ], + [ + 'id' => 'lnod_bob', + 'created_at' => 1547488235, + 'updated_at' => 1547488237, + 'user_id' => 147, + 'alias' => 'bob', + 'network' => 'regtest', + 'ln_node_implementation_id' => 'lnd', + 'default_pubkey' => '02035b1b349235217e9ef051d1f03de6c2996d25d2eec9290578d00073f5423f54', + 'uri' => '03d6ff489e59236894f7e8458727058a5a9eeb5ca03eded6a6814852f68f68aa0a@192.168.69.1:9735', + 'host' => '192.168.69.1', + 'rpc_port' => '10002', + 'rest_port' => '8082', + 'ln_port' => '9735', + 'tls_cert' => '2d2d2d2d2d424547494e2043455254494649434154452d2d2d2d2d0a4d494943497a434341636967417749424167495145774a4479334e70543063416a614348396a67487744414b42676771686b6a4f50515144416a41764d5238770a485159445651514b45785a73626d5167595856306232646c626d56795958526c5a43426a5a584a304d517777436759445651514445774e69623249774868634e0a4d6a45774f44417a4d5451784d4441785768634e4d6a49774f5449344d5451784d444178576a41764d523877485159445651514b45785a73626d5167595856300a6232646c626d56795958526c5a43426a5a584a304d517777436759445651514445774e69623249775754415442676371686b6a4f5051494242676771686b6a4f0a50514d4242774e434141516a4a535a2b6a68497668434d64314a776d4b546673596130424f7439314e5354542b656b305a4271326f6b3636737836736a7745670a6d7770434139464e37533061306841307a7931734f564f396877447379464b556f3448464d4948434d41344741315564447745422f77514541774943704441540a42674e56485355454444414b4267677242674546425163444154415042674e5648524d4241663845425441444151482f4d4230474131556444675157424252440a616b4468654e5051486d425a5266455673713079544c39536854427242674e56485245455a44426967674e6962324b4343577876593246736147397a644949440a596d39696767787762327868636931754d53316962324b434248567561586943436e56756158687759574e725a58534342324a315a6d4e76626d3648424838410a41414748454141414141414141414141414141414141414141414748424b775341415348424d436f52514577436759494b6f5a497a6a304541774944535141770a52674968414d6d34505475414e2b754f7a50565a3658616a347a6835637031366e4e4e446a5a56736f454a5447666e49416945412b636839623151397a5070650a674b304a53553337416f4559564c523271726a4b423972627a68592b6d54733d0a2d2d2d2d2d454e442043455254494649434154452d2d2d2d2d0a', + 'getinfo' => '{"uris": ["03d6ff489e59236894f7e8458727058a5a9eeb5ca03eded6a6814852f68f68aa0a@192.168.69.1:9735"], "alias": "bob", "color": "#3399ff", "chains": [{"chain": "bitcoin", "network": "regtest"}], "testnet": false, "version": "0.9.1-beta commit=v0.9.1-beta", "features": {"0": {"name": "data-loss-protect", "is_known": true, "is_required": true}, "5": {"name": "upfront-shutdown-script", "is_known": true, "is_required": false}, "7": {"name": "gossip-queries", "is_known": true, "is_required": false}, "9": {"name": "tlv-onion", "is_known": true, "is_required": false}, "13": {"name": "static-remote-key", "is_known": true, "is_required": false}, "15": {"name": "payment-addr", "is_known": true, "is_required": false}, "17": {"name": "multi-path-payments", "is_known": true, "is_required": false}}, "num_peers": 1, "block_hash": "6f41cb242f2e93789a219c0272e895ccbd6244088c3bebb3c0b8e3d8b300efeb", "block_height": 5, "identity_pubkey": "02bf94411a0c85a7047ee36414f6da465fe90bcbee0946719781e342db40888858", "synced_to_chain": true, "synced_to_graph": true, "num_active_channels": 0, "num_pending_channels": 0, "best_header_timestamp": "1587515196", "num_inactive_channels": 0}', + 'status_type_id' => 300, + 'rpc_status_id' => 320, + 'rest_status_id' => 330, + 'fee_wallet_id' => 2224, + 'keysend_wallet_id' => 2225 + ], + [ + 'id' => 'lnod_alice', + 'created_at' => 1587488237, + 'updated_at' => 1587488237, + 'user_id' => 147, + 'alias' => 'alice', + 'network' => 'regtest', + 'ln_node_implementation_id' => 'lnd', + 'default_pubkey' => '028e74f2598db804d8ae1319a5140679bd1df10811a33cbb82a183035110343760', + 'uri' => '028e74f2598db804d8ae1319a5140679bd1df10811a33cbb82a183035110343760@192.168.69.1:9735', + 'host' => '192.168.69.1', + 'rpc_port' => '10001', + 'rest_port' => '8081', + 'ln_port' => '9735', + 'tls_cert' => '2d2d2d2d2d424547494e2043455254494649434154452d2d2d2d2d0a4d4949434c54434341644f674177494241674952414e322b522b4c43657876395352457570367267626d3477436759494b6f5a497a6a3045417749774d5445660a4d4230474131554543684d576247356b494746316447396e5a57356c636d46305a575167593256796444454f4d4177474131554541784d4659577870593255770a4868634e4d6a45774f44417a4d5451774f5449355768634e4d6a49774f5449344d5451774f544935576a41784d523877485159445651514b45785a73626d51670a595856306232646c626d56795958526c5a43426a5a584a304d51347744415944565151444577566862476c6a5a54425a4d424d4742797147534d3439416745470a43437147534d34394177454841304941424b654430717a5567484c6453734c5176703858642f782b7369533933334749392b5a5234726e4957703064674c336a0a46504556676e6b424e3137723459454b4e4e6a484b62516b4961327479447975617a7952512b6d6a676373776763677744675944565230504151482f424151440a41674b6b4d424d47413155644a51514d4d416f47434373474151554642774d424d41384741315564457745422f7751464d414d4241663877485159445652304f0a424259454648375a50374333383553646e4e6b444a5739726c77577a354d665a4d48454741315564455152714d4769434257467361574e6c67676c7362324e680a62476876633353434257467361574e6c6767357762327868636931754d53316862476c6a5a594945645735706549494b64573570654842685932746c644949480a596e566d59323975626f634566774141415963514141414141414141414141414141414141414141415963457242494141346345774b68464154414b426767710a686b6a4f5051514441674e49414442464169415855686648443871384d6e4d34525a316a696f42324955652b496d49656f7336524d6e5a4144656c59615149680a414c39536e625571733142347535506d5045384b35735a6666474642384d67384d566269446648585647336f0a2d2d2d2d2d454e442043455254494649434154452d2d2d2d2d0a', + 'getinfo' => '{"uris": ["037ab245cff7f54f76e605327d93e18ed641bddd49e3e46dafb13a5a646c25a041@192.168.69.60:9735"], "alias": "alice", "color": "#3399ff", "chains": [{"chain": "bitcoin", "network": "regtest"}], "testnet": false, "version": "0.9.1-beta commit=v0.9.1-beta", "features": {"0": {"name": "data-loss-protect", "is_known": true, "is_required": true}, "5": {"name": "upfront-shutdown-script", "is_known": true, "is_required": false}, "7": {"name": "gossip-queries", "is_known": true, "is_required": false}, "9": {"name": "tlv-onion", "is_known": true, "is_required": false}, "13": {"name": "static-remote-key", "is_known": true, "is_required": false}, "15": {"name": "payment-addr", "is_known": true, "is_required": false}, "17": {"name": "multi-path-payments", "is_known": true, "is_required": false}}, "num_peers": 1, "block_hash": "6d60c95cdc71c604f7b4238826c1c81cb19e18ec5430c77952dd971b09a1e73b", "block_height": 1, "identity_pubkey": "03c6ab34241f636a11f53f6f82ccc0ab0351d23d9a55aa71a1a8add509a816d78b", "synced_to_chain": true, "synced_to_graph": true, "num_active_channels": 0, "num_pending_channels": 0, "best_header_timestamp": "1587514579", "num_inactive_channels": 0}', + 'status_type_id' => 300, + 'rpc_status_id' => 320, + 'rest_status_id' => 330, + 'fee_wallet_id' => 2226, + 'keysend_wallet_id' => 2227 + ] + +]; + + +/** + * TO BE USED LATER MAYBE + */ +/* + return [ + [ + 'id'=>'lnod_carol', + 'created_at'=>1587488237, + 'updated_at'=>1587488237, + 'user_id'=>147, + 'alias'=>'carol', + 'network'=>'regtest', + 'ln_node_implementation_id'=>'lnd', + 'default_pubkey'=>'025eb9588a5db262ebf195edb1a940428bac534e5b012b8b1d3011fdfa9f8f13db', + 'uri'=>'025eb9588a5db262ebf195edb1a940428bac534e5b012b8b1d3011fdfa9f8f13db@192.168.69.62:9735', + 'host'=>'192.168.69.1', + 'rpc_port'=>'10009', + 'rest_port'=>'8080', + 'ln_port'=>'9735', + 'tls_cert'=>'2d2d2d2d2d424547494e2043455254494649434154452d2d2d2d2d0a4d4949434a6a434341637967417749424167495143467053743177504577566f743077436456394e617a414b42676771686b6a4f50515144416a41784d5238770a485159445651514b45785a73626d5167595856306232646c626d56795958526c5a43426a5a584a304d51347744415944565151444577566a59584a76624441650a467730794d5441334d6a59784e5449324d446c61467730794d6a41354d6a41784e5449324d446c614d444578487a416442674e5642416f54466d78755a4342680a645852765a3256755a584a686447566b49474e6c636e5178446a414d42674e5642414d5442574e68636d39734d466b77457759484b6f5a497a6a3043415159490a4b6f5a497a6a30444151634451674145393357386934724e41376c3054334e6e37546a38304178326c514a674c774b6334425a5242736a41314737706c2b4b6b0a3137523668416830323459773870766e626654665a71457547584e306c35592b4a52427a424b4f4278544342776a414f42674e56485138424166384542414d430a41715177457759445652306c42417777436759494b775942425155484177457744775944565230544151482f42415577417745422f7a416442674e56485134450a46675155796c4e642f534c3078453455572b712b6a386e665846624a65313877617759445652305242475177596f4946593246796232794343577876593246730a6147397a644949465932467962327943446e4276624746794c5734304c574e68636d397367675231626d6c3467677031626d6c346347466a61325630676764690a64575a6a623235756877522f41414142687841414141414141414141414141414141414141414142687754417145552b4d416f4743437147534d343942414d430a413067414d455543495143523971516f55434161327932574f6349464e2f4d7679333769484f4a6c494356434752384a66315366416749675975513756574e790a63422f47534156536d75735670467a45416a485a6b6b5159766948332b396e6547444d3d0a2d2d2d2d2d454e442043455254494649434154452d2d2d2d2d0a', + 'getinfo'=>'{"uris": ["025eb9588a5db262ebf195edb1a940428bac534e5b012b8b1d3011fdfa9f8f13db@192.168.69.1:9735"], "alias": "bob", "color": "#3399ff", "chains": [{"chain": "bitcoin", "network": "regtest"}], "testnet": false, "version": "0.9.1-beta commit=v0.9.1-beta", "features": {"0": {"name": "data-loss-protect", "is_known": true, "is_required": true}, "5": {"name": "upfront-shutdown-script", "is_known": true, "is_required": false}, "7": {"name": "gossip-queries", "is_known": true, "is_required": false}, "9": {"name": "tlv-onion", "is_known": true, "is_required": false}, "13": {"name": "static-remote-key", "is_known": true, "is_required": false}, "15": {"name": "payment-addr", "is_known": true, "is_required": false}, "17": {"name": "multi-path-payments", "is_known": true, "is_required": false}}, "num_peers": 1, "block_hash": "6f41cb242f2e93789a219c0272e895ccbd6244088c3bebb3c0b8e3d8b300efeb", "block_height": 5, "identity_pubkey": "02bf94411a0c85a7047ee36414f6da465fe90bcbee0946719781e342db40888858", "synced_to_chain": true, "synced_to_graph": true, "num_active_channels": 0, "num_pending_channels": 0, "best_header_timestamp": "1587515196", "num_inactive_channels": 0}', + 'status_type_id'=>300, + 'rpc_status_id'=>320, + 'rest_status_id'=>330, + 'fee_wallet_id'=>2222, + 'keysend_wallet_id'=>2223 + ], + [ + 'id'=>'lnod_bob', + 'created_at'=>1547488237, + 'updated_at'=>1547488237, + 'user_id'=>147, + 'alias'=>'bob', + 'network'=>'regtest', + 'ln_node_implementation_id'=>'lnd', + 'default_pubkey'=>'02035b1b349235217e9ef051d1f03de6c2996d25d2eec9290578d00073f5423f54', + 'uri'=>'02035b1b349235217e9ef051d1f03de6c2996d25d2eec9290578d00073f5423f54@192.168.69.61:9735', + 'host'=>'192.168.69.61', + 'rpc_port'=>'10009', + 'rest_port'=>'8080', + 'ln_port'=>'9735', + 'tls_cert'=>'2d2d2d2d2d424547494e2043455254494649434154452d2d2d2d2d0a4d4949434844434341634b6741774942416749514d7143662b7a66625170762f5651397776665441706a414b42676771686b6a4f50515144416a41764d5238770a485159445651514b45785a73626d5167595856306232646c626d56795958526c5a43426a5a584a304d517777436759445651514445774e69623249774868634e0a4d6a45774e7a49324d5455794e6a45785768634e4d6a49774f5449774d5455794e6a4578576a41764d523877485159445651514b45785a73626d5167595856300a6232646c626d56795958526c5a43426a5a584a304d517777436759445651514445774e69623249775754415442676371686b6a4f5051494242676771686b6a4f0a50514d4242774e434141524c7530554e5943382f4e6c55524a382b4e6256535371357079314b6370776e3335476c39727537647557743741744b55686d52774b0a656d5542476238483355563531486b59383257336136575a796c71335059544f6f34472f4d4947384d41344741315564447745422f77514541774943704441540a42674e56485355454444414b4267677242674546425163444154415042674e5648524d4241663845425441444151482f4d42304741315564446751574242542f0a616a736e443444437043613539465054774b45365666794c6d7a426c42674e5648524545586a426367674e6962324b4343577876593246736147397a644949440a596d39696767787762327868636931754e43316962324b434248567561586943436e56756158687759574e725a58534342324a315a6d4e76626d3648424838410a41414748454141414141414141414141414141414141414141414748424d436f52543077436759494b6f5a497a6a3045417749445341417752514968414f6a670a50645979736b446c79566444394863593177395777676d38462b50535654774574626e73746d50624169424f62644c505136775037654a6b6d4b666849796c670a433548427763457747524c63727a7257526d73415a773d3d0a2d2d2d2d2d454e442043455254494649434154452d2d2d2d2d0a', + 'getinfo'=>'{"uris": ["02035b1b349235217e9ef051d1f03de6c2996d25d2eec9290578d00073f5423f54@192.168.69.1:9735"], "alias": "bob", "color": "#3399ff", "chains": [{"chain": "bitcoin", "network": "regtest"}], "testnet": false, "version": "0.9.1-beta commit=v0.9.1-beta", "features": {"0": {"name": "data-loss-protect", "is_known": true, "is_required": true}, "5": {"name": "upfront-shutdown-script", "is_known": true, "is_required": false}, "7": {"name": "gossip-queries", "is_known": true, "is_required": false}, "9": {"name": "tlv-onion", "is_known": true, "is_required": false}, "13": {"name": "static-remote-key", "is_known": true, "is_required": false}, "15": {"name": "payment-addr", "is_known": true, "is_required": false}, "17": {"name": "multi-path-payments", "is_known": true, "is_required": false}}, "num_peers": 1, "block_hash": "6f41cb242f2e93789a219c0272e895ccbd6244088c3bebb3c0b8e3d8b300efeb", "block_height": 5, "identity_pubkey": "02bf94411a0c85a7047ee36414f6da465fe90bcbee0946719781e342db40888858", "synced_to_chain": true, "synced_to_graph": true, "num_active_channels": 0, "num_pending_channels": 0, "best_header_timestamp": "1587515196", "num_inactive_channels": 0}', + 'status_type_id'=>300, + 'rpc_status_id'=>320, + 'rest_status_id'=>330, + 'fee_wallet_id'=>2224, + 'keysend_wallet_id'=>2225 + ], + [ + 'id'=>'lnod_alice', + 'created_at'=>1587488237, + 'updated_at'=>1587488237, + 'user_id'=>147, + 'alias'=>'alice', + 'network'=>'regtest', + 'ln_node_implementation_id'=>'lnd', + 'default_pubkey'=>'037ab245cff7f54f76e605327d93e18ed641bddd49e3e46dafb13a5a646c25a041', + 'uri'=>'037ab245cff7f54f76e605327d93e18ed641bddd49e3e46dafb13a5a646c25a041@192.168.69.60:9735', + 'host'=>'192.168.69.60', + 'rpc_port'=>'10009', + 'rest_port'=>'8080', + 'ln_port'=>'9735', + 'tls_cert'=>'2d2d2d2d2d424547494e2043455254494649434154452d2d2d2d2d0a4d4949434a7a434341633267417749424167495241502f614b5555764d4e6b71325330324b4c3937496d6377436759494b6f5a497a6a3045417749774d5445660a4d4230474131554543684d576247356b494746316447396e5a57356c636d46305a575167593256796444454f4d4177474131554541784d4659577870593255770a4868634e4d6a45774e7a49324d5455794d444d335768634e4d6a49774f5449774d5455794d444d33576a41784d523877485159445651514b45785a73626d51670a595856306232646c626d56795958526c5a43426a5a584a304d51347744415944565151444577566862476c6a5a54425a4d424d4742797147534d3439416745470a43437147534d34394177454841304941424b706652774347626f4635726b326470706849777a712b41656d382b365a727155394d6c4f444c4c337063487848740a52393642636359726456727a3756414231596a62526b5430304174414951747069467a544134576a676355776763497744675944565230504151482f424151440a41674b6b4d424d47413155644a51514d4d416f47434373474151554642774d424d41384741315564457745422f7751464d414d4241663877485159445652304f0a42425945464c766e44306a5a2b416e65514477594571773173657535346a6b5a4d477347413155644551526b4d474b434257467361574e6c67676c7362324e680a62476876633353434257467361574e6c6767357762327868636931754e43316862476c6a5a594945645735706549494b64573570654842685932746c644949480a596e566d59323975626f63456677414141596351414141414141414141414141414141414141414141596345774b68465044414b42676771686b6a4f505151440a41674e49414442464169416d6a757339572b355a37766f6e38746554745a2b766279464b4b5736357278514b74676a6f61466f2f4b774968414d2b4d6c6a43500a32474853665a46695249764b5a383477467a70433863436568674751394f67492b3262410a2d2d2d2d2d454e442043455254494649434154452d2d2d2d2d0a', + 'getinfo'=>'{"uris": ["037ab245cff7f54f76e605327d93e18ed641bddd49e3e46dafb13a5a646c25a041@192.168.69.60:9735"], "alias": "alice", "color": "#3399ff", "chains": [{"chain": "bitcoin", "network": "regtest"}], "testnet": false, "version": "0.9.1-beta commit=v0.9.1-beta", "features": {"0": {"name": "data-loss-protect", "is_known": true, "is_required": true}, "5": {"name": "upfront-shutdown-script", "is_known": true, "is_required": false}, "7": {"name": "gossip-queries", "is_known": true, "is_required": false}, "9": {"name": "tlv-onion", "is_known": true, "is_required": false}, "13": {"name": "static-remote-key", "is_known": true, "is_required": false}, "15": {"name": "payment-addr", "is_known": true, "is_required": false}, "17": {"name": "multi-path-payments", "is_known": true, "is_required": false}}, "num_peers": 1, "block_hash": "6d60c95cdc71c604f7b4238826c1c81cb19e18ec5430c77952dd971b09a1e73b", "block_height": 1, "identity_pubkey": "03c6ab34241f636a11f53f6f82ccc0ab0351d23d9a55aa71a1a8add509a816d78b", "synced_to_chain": true, "synced_to_graph": true, "num_active_channels": 0, "num_pending_channels": 0, "best_header_timestamp": "1587514579", "num_inactive_channels": 0}', + 'status_type_id'=>300, + 'rpc_status_id'=>320, + 'rest_status_id'=>330, + 'fee_wallet_id'=>2226, + 'keysend_wallet_id'=>2227 + ] + +]; + */ \ No newline at end of file diff --git a/src/node/fixtures/_data/ln_node_default_wallets.php b/src/node/fixtures/_data/ln_node_default_wallets.php new file mode 100644 index 00000000..5ada304c --- /dev/null +++ b/src/node/fixtures/_data/ln_node_default_wallets.php @@ -0,0 +1,70 @@ +2222, + 'created_at'=>1576066208, + 'updated_at'=>1576066208, + 'user_id'=>147, + 'user_label'=>'alice fee wallet', + 'balance'=>0, + 'ln_node_id'=>'lnod_alice', + 'external_hash'=>'wal_AliceFeeWallet', + 'status_type_id'=>200 + ], + [ + 'id'=>2223, + 'created_at'=>1576066208, + 'updated_at'=>1576066208, + 'user_id'=>147, + 'user_label'=>'alice keysend wallet', + 'balance'=>0, + 'ln_node_id'=>'lnod_alice', + 'external_hash'=>'wal_AliceKeysendWallet', + 'status_type_id'=>200 + ], + [ + 'id'=>2224, + 'created_at'=>1576066208, + 'updated_at'=>1576066208, + 'user_id'=>147, + 'user_label'=>'bob fee wallet', + 'balance'=>0, + 'ln_node_id'=>'lnod_bob', + 'external_hash'=>'wal_BobFeeWallet', + 'status_type_id'=>200 + ], + [ + 'id'=>2225, + 'created_at'=>1576066208, + 'updated_at'=>1576066208, + 'user_id'=>147, + 'user_label'=>'bob keysend wallet', + 'balance'=>0, + 'ln_node_id'=>'lnod_bob', + 'external_hash'=>'wal_BobKeysendWallet', + 'status_type_id'=>200 + ], + [ + 'id'=>2226, + 'created_at'=>1576066208, + 'updated_at'=>1576066208, + 'user_id'=>147, + 'user_label'=>'carol fee wallet', + 'balance'=>0, + 'ln_node_id'=>'lnod_carol', + 'external_hash'=>'wal_CarolFeeWallet', + 'status_type_id'=>200 + ], + [ + 'id'=>2227, + 'created_at'=>1576066208, + 'updated_at'=>1576066208, + 'user_id'=>147, + 'user_label'=>'carol keysend wallet', + 'balance'=>0, + 'ln_node_id'=>'lnod_carol', + 'external_hash'=>'wal_CarolKeysendWallet', + 'status_type_id'=>200 + ], +]; \ No newline at end of file diff --git a/src/node/fixtures/_data/ln_node_implementation.php b/src/node/fixtures/_data/ln_node_implementation.php new file mode 100644 index 00000000..bc9d8e97 --- /dev/null +++ b/src/node/fixtures/_data/ln_node_implementation.php @@ -0,0 +1,9 @@ +'lnd', + 'display_name' =>'LND', + 'json_data' => null + ] +]; diff --git a/src/node/fixtures/_data/ln_node_profile.php b/src/node/fixtures/_data/ln_node_profile.php new file mode 100644 index 00000000..da8ccec8 --- /dev/null +++ b/src/node/fixtures/_data/ln_node_profile.php @@ -0,0 +1,37 @@ +'lnodpr_alice', + 'created_at'=>1587488237, + 'updated_at'=>1587488237, + 'user_id'=>147, + 'ln_node_id'=>'lnod_alice', + 'is_default'=>1, + 'user_label'=>'base_profile', + 'status_type_id'=>400, + 'macaroon_hex'=>'0201036c6e6402f801030a10cb1515ac4454ef2be56491ff123ff0801201301a160a0761646472657373120472656164120577726974651a130a04696e666f120472656164120577726974651a170a08696e766f69636573120472656164120577726974651a210a086d616361726f6f6e120867656e6572617465120472656164120577726974651a160a076d657373616765120472656164120577726974651a170a086f6666636861696e120472656164120577726974651a160a076f6e636861696e120472656164120577726974651a140a057065657273120472656164120577726974651a180a067369676e6572120867656e6572617465120472656164000006206031ce1f73a647d8a867c5e88a754c98ec42e75bf32c9f8386168780f7170f82' + ], + [ + 'id'=>'lnodpr_bob', + 'created_at'=>1587488237, + 'updated_at'=>1587488237, + 'user_id'=>147, + 'ln_node_id'=>'lnod_bob', + 'is_default'=>1, + 'user_label'=>'base_profile', + 'status_type_id'=>400, + 'macaroon_hex'=>'0201036c6e6402f801030a10f1f0b13e3a811e72420a071c958325f41201301a160a0761646472657373120472656164120577726974651a130a04696e666f120472656164120577726974651a170a08696e766f69636573120472656164120577726974651a210a086d616361726f6f6e120867656e6572617465120472656164120577726974651a160a076d657373616765120472656164120577726974651a170a086f6666636861696e120472656164120577726974651a160a076f6e636861696e120472656164120577726974651a140a057065657273120472656164120577726974651a180a067369676e6572120867656e6572617465120472656164000006203a219e4fee5824d0e374b024e48e0c35447878b573a9c5cb2acd8f2c60eba0a6' + ], + [ + 'id'=>'lnodpr_carol', + 'created_at'=>1587488237, + 'updated_at'=>1587488237, + 'user_id'=>6, + 'ln_node_id'=>'lnod_carol', + 'is_default'=>1, + 'user_label'=>'base_profile', + 'status_type_id'=>400, + 'macaroon_hex'=>'0201036c6e6402f801030a10a451b63f1ef4a9865356c665cb2b97d01201301a160a0761646472657373120472656164120577726974651a130a04696e666f120472656164120577726974651a170a08696e766f69636573120472656164120577726974651a210a086d616361726f6f6e120867656e6572617465120472656164120577726974651a160a076d657373616765120472656164120577726974651a170a086f6666636861696e120472656164120577726974651a160a076f6e636861696e120472656164120577726974651a140a057065657273120472656164120577726974651a180a067369676e6572120867656e6572617465120472656164000006201e062b7f9dd616397b16811771a23015900eb7e7aff884ebc646981eef4f8565' + ] +]; \ No newline at end of file diff --git a/src/node/models/LnNode.php b/src/node/models/LnNode.php new file mode 100644 index 00000000..bc7b5245 --- /dev/null +++ b/src/node/models/LnNode.php @@ -0,0 +1,684 @@ +JsonDataBehavior::class + ] + ]; + } + + /** + * {@inheritdoc} + */ + public function rules() + { + return [ + ['id','default','value' => strtolower('lnod_'.HelperComponent::generateRandomString(18))], + [['id'], 'unique'], + ['rpc_port','default','value' => LnNodeImplementation::LND_DEFAULT_GRPC_PORT], + ['rest_port','default','value' => LnNodeImplementation::LND_DEFAULT_REST_PORT], + ['ln_port','default','value' => LnNodeImplementation::LND_DEFAULT_LN_PORT], + ['status_type_id','default','value'=>StatusType::LN_NODE_ACTIVE], + ['rpc_status_id','default','value'=>StatusType::LN_NODE_RPC_UP], + ['rest_status_id','default','value'=>StatusType::LN_NODE_REST_UP], + ['ln_node_implementation_id','default','value' => 'lnd'], + ['is_custodian','default','value' => 0], + [['wallet_password','network'],'string'], + [['org_id','rpc_port', 'rest_port', 'ln_port','internal_rpc_port', 'internal_rest_port', 'internal_ln_port', 'status_type_id', 'rpc_status_id', 'rest_status_id','user_id','onchain_total_sats','onchain_confirmed_sats'], 'integer'], + [['tls_cert','onchain_nextaddr'], 'string'], + [['getinfo', 'json_data'], 'safe'], + [['id', 'alias', 'default_pubkey', 'uri', 'host'], 'string', 'max' => 255], + ]; + } + + /** + * {@inheritdoc} + */ + public function attributeLabels() + { + return [ + 'id' => 'ID', + 'alias' => 'Alias', + 'ln_node_implementation_id' => 'Ln Node Implementation ID', + 'default_pubkey' => 'Default Pubkey', + 'uri' => 'Uri', + 'host' => 'Host', + 'rpc_port' => 'Rpc Port', + 'rest_port' => 'Rest Port', + 'ln_port' => 'Ln Port', + 'tls_cert' => 'Tls Cert', + 'getinfo' => 'Getinfo', + 'status_type_id' => 'Status Type ID', + 'rpc_status' => 'Rpc Status', + 'rest_status' => 'Rest Status', + 'json_data' => 'Json Data', + ]; + } + + /** + * Gets query for [[LnNodeImplementation]]. + * + * @return \yii\db\ActiveQuery + */ + public function getLnNodeImplementation() + { + return $this->hasOne(LnNodeImplementation::className(), ['name' => 'ln_node_implementation_id']); + } + + /** + * Gets query for [[LnNodeProfiles]]. + * + * @return \yii\db\ActiveQuery + */ + public function getLnNodeProfiles() + { + return $this->hasMany(LnNodeProfile::className(), ['ln_node_id' => 'id']); + } + + /** + * Gets query for [[LnNodeProfiles]]. + * + * @return \yii\db\ActiveQuery + */ + public function getNodeListeners() + { + return $this->hasMany(NodeListener::className(), ['ln_node_id' => 'id']); + } + + /** + * Gets query for [[LnNodeProfiles]]. + * + * @return \yii\db\ActiveQuery + */ + public function getBaseLnNodeProfile() + { + return $this->hasOne(LnNodeProfile::className(), ['ln_node_id' => 'id'])->andOnCondition(['is_default'=>1]); + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getUser() + { + return $this->hasOne(User::class, ['id' => 'user_id']); + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getOrg() + { + return $this->hasOne(Org::class, ['id' => 'org_id']); + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getStatusType() + { + return $this->hasOne(StatusType::class, ['id' => 'status_type_id']); + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getFeeWallet() + { + return $this->hasOne(Wallet::class, ['id' => 'fee_wallet_id']); + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getKeysendWallet() + { + return $this->hasOne(Wallet::class, ['id' => 'keysend_wallet_id']); + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getRpcStatusType() + { + return $this->hasOne(StatusType::class, ['id' => 'rpc_status_id']); + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getRestStatusType() + { + return $this->hasOne(StatusType::class, ['id' => 'rest_status_id']); + } + + /** + * @param $macaroonObject + */ + public function setBaseMacaroonObject(LnMacaroonObject $macaroonObject) + { + $this->_macaroonObject = $macaroonObject; + } + + /** + * Gets query for [[LnNodeProfiles]]. + * + * @return \yii\db\ActiveQuery + */ + public function getBaseMacaroonObject() + { + if ($this->isNewRecord) { + return $this->_macaroonObject; + } else { + return $this->baseLnNodeProfile->macaroonObject; + } + } + + /** + * @param $attributes + * @return LnNodeProfile + * @throws \Exception + */ + public function addProfile($attributes) + { + $np = new LnNodeProfile(); + $np->attributes = $attributes; + $np->user_id = $this->user_id; + $np->ln_node_id = $this->id; + $np->macaroon_hex = HelperComponent::encryptForDbUse($np->macaroon_hex,getenv('GENERAL_ENCRYPTION_KEY'),$this->id); + if ($np->save()) { + return $np; + } else { + throw new \Exception(HelperComponent::getFirstErrorFromFailedValidation($np)); + } + } + + /** + * @return \yii\db\ActiveQuery + */ + public static function getCustodialNodeQuery($user_id=null) + { + if ($user_id) { //if user_id is supplied, attempt to find the org's custodial node + $user = User::findOne($user_id); + if ($user) { + $orgNode = static::find()->where(['org_id'=>$user->org_id,'is_custodian'=>1])->orderBy('ln_node.created_at ASC'); + if ($orgNode->exists()) { //if org node exists return, otherwise backwards compatible with base node + return $orgNode; + } + } + + } + //return base node + return static::find()->orderBy('ln_node.created_at ASC'); + } + + + /** + * @param $key + * @return mixed + */ + public function getInfoValueByKey($key) + { + return @$this->getinfo[$key]; + } + + /** + * @param $invoiceOptions + * @return mixed + * @throws \Exception + */ + public function tryCreateInvoice($invoiceOptions) + { + //We can do potential node balancing stuff here if this fails, later on + try { + return $this->getLndConnector('RPC')->createInvoice($invoiceOptions); + } catch (\lnpay\node\exceptions\UnableToCreateInvoiceException $e) { + //Try the next node + throw new \Exception($e->getMessage()); + } + } + + /** + * @param $payment_request + * @return mixed + */ + public static function decodeInvoiceHelper($payment_request) + { + $node = static::getCustodialNodeQuery()->one(); + return $node->getLndConnector()->decodeInvoice($payment_request); + } + + + /** + * @param $decodedInvoiceObject + * @return float|int + */ + public function getFeeRate($decodedInvoiceObject) + { + if (is_array($decodedInvoiceObject)) { + $decodedInvoiceObject = (object) $decodedInvoiceObject; + } + + $num_satoshis = $decodedInvoiceObject->num_satoshis; + + $max_percent = ($this->user->getJsonData(User::DATA_MAX_NETWORK_FEE_PERCENT)?:5); + + return ceil($num_satoshis * ($max_percent/100)); + } + + + /**************************************************** + * RPC STUFF / REST + *****************************************************/ + + /** + * @return LndNodeConnector + * @throws \Exception + */ + public function getLndConnector($webService='RPC') + { + return LndNodeConnector::initConnector($this,$webService); + } + + /** + * @return string + */ + public function getSupervisorConfFilename() + { + return $this->id.'.conf'; + } + + /** + * @throws \Exception + */ + public function spawnLndRpcSubscribers() + { + \LNPay::info($this->id.': Spawning subscribers'); + NodeListener::createLndRpcListenerObjects($this->id); + sleep(5); //Sometimes it takes a second to write to these configs + $this->startLndRpcSubscribers(); + + } + + public function startLndRpcSubscribers() + { + foreach (NodeListener::find()->where(['ln_node_id'=>$this->id])->all() as $nL) { + if ($nL->supervisor_parameters['autostart']) { + SupervisorComponent::startProcess($nL->id); + } + } + } + + /** + * @throws \Exception + */ + public function removeLndRpcSubscribers() + { + foreach ($this->nodeListeners as $nL) { + $nL->delete(); + } + + \LNPay::$app->queue->push(new SupervisorRemoveLndRpcConfigFileJob([ + 'file_name' => $this->supervisorConfFilename + ])); + } + + /**************************************************** + * END RPC STUFF + *****************************************************/ + + + + /**************************************************** + * START HEALTH CHECKS + *****************************************************/ + + /** + * @return bool + */ + public function getIsRpcUp() + { + if ($this->rpc_status_id == StatusType::LN_NODE_RPC_UP) + return true; + else + return false; + } + + /** + * @return bool + */ + public function getIsRestUp() + { + if ($this->rest_status_id == StatusType::LN_NODE_REST_UP) + return true; + else + return false; + } + + /** + * @param $data + * @return bool + */ + public function setRestErrorState($data) + { + if ($this->rest_status_id == StatusType::LN_NODE_REST_UP) { + $this->rest_status_id = StatusType::LN_NODE_REST_ERROR; + $this->appendJsonData(['rest_error_message' => $data['message'], 'rest_last_check' => time()]); + return $this->save(); + } + + return NULL; //no change to state, already set appropriately + } + + /** + * @param array $data + * @return bool + */ + public function setRestUpState($data=[]) + { + if ($this->rest_status_id == StatusType::LN_NODE_REST_ERROR) { + $this->rest_status_id = StatusType::LN_NODE_REST_UP; + $this->deleteJsonData(['rest_error_message']); + return $this->save(); + } + + return NULL; //no change to state, already set appropriately + } + + /** + * @param $data + * @return bool + */ + public function setRpcErrorState($data) + { + if ($this->rpc_status_id == StatusType::LN_NODE_RPC_UP) { + $this->rpc_status_id = StatusType::LN_NODE_RPC_ERROR; + $this->appendJsonData(['rpc_error_message' => $data['message'], 'rpc_last_check' => time()]); + $save = $this->save(); + $this->user->registerAction(ActionName::LN_NODE_CONNECTION_ERROR,['lnod'=>$this->toArray()]); + + return $save; + } + + return NULL; //no change to state, already set appropriately + } + + /** + * @param array $data + * @return bool + */ + public function setRpcUpState($data=[]) + { + if ($this->rpc_status_id == StatusType::LN_NODE_RPC_ERROR) { + $this->rpc_status_id = StatusType::LN_NODE_RPC_UP; + $this->deleteJsonData(['rpc_error_message']); + return $this->save(); + } + + return NULL; //no change to state, already set appropriately + } + + + /** + * @param $webService + * @return mixed + * @throws \Exception + */ + public function healthCheck($webService) + { + $info = $this->getLndConnector($webService)->getInfo(); + $gi = json_decode($info,TRUE); + + switch ($webService) { + case 'REST': + $this->appendJsonData(['rest_last_check'=>time()]); + if ($gi) { //UP! + //Update with most recent info + $this->uri = (@$gi['uris']?$gi['uris'][0]:''); + $this->alias = (@$gi['alias']?:$this->alias); + $this->default_pubkey = (@$gi['identity_pubkey']?:$this->default_pubkey); + $this->getinfo = $gi; + $this->save(); + $this->setRestUpState(); + } else { //DOwn! + $this->setRestErrorState(['message'=>$info]); + } + break; + case 'RPC': + $this->appendJsonData(['rpc_last_check' => time()]); + if ($gi) { //UP! + $this->setRpcUpState(); + } else { //DOwn! + $this->setRpcErrorState(['message'=>$info]); + } + break; + } + + if ($gi) { //update chain stuff + $balances = $this->getLndConnector()->walletBalance(); + $this->onchain_confirmed_sats = @$balances['confirmedBalance'] ?? 0; + $this->onchain_unconfirmed_sats = @$balances['unconfirmedBalance'] ?? 0; + $this->onchain_total_sats = @$balances['totalBalance'] ?? 0; + + if (!$this->onchain_nextaddr) { + $r = $this->getLndConnector()->newAddress(); + $this->onchain_nextaddr = $r['address']; + } + + try { + $gi['balances'] = $this->getLndConnector()->channelBalance(); + $gi['channels'] = $this->getLndConnector()->listChannels()['channels']; + } catch (\Throwable $t) { + \LNPay::error($t->getMessage(),__METHOD__); + } + + + $gi['max_send'] = 0; + $gi['max_receive'] = 0; + if (isset($gi['channels'])) { + foreach ($gi['channels'] as $channel) { + if (isset($channel['active'])) { //channel is active + if ( ($channel['localBalance'] ?? 0) > $gi['max_send']) { + $gi['max_send'] = $channel['localBalance']; + } + if ( ($channel['remoteBalance'] ?? 0) > $gi['max_receive']) { + $gi['max_receive'] = $channel['remoteBalance']; + } + } + } + } + + } + + switch ($this->ln_node_implementation_id) { + case LnNodeImplementation::LND_SUBNODE: + if ($gi) { + $this->status_type_id = StatusType::LN_SUBNODE_RUNNING; + } else { + $this->status_type_id = StatusType::LN_SUBNODE_STOPPED; + } + break; + } + + $this->save(); + return $gi; + } + + + + /**************************************************** + * END HEALTH CHECKS + *****************************************************/ + + + + public function afterSave($insert, $changedAttributes) + { + if ($insert) { + //Add our default fee catch wallet + $wallet = new Wallet(); + $wallet->user_label = '['.$this->id.'] Network Fees'; + $wallet->user_id = $this->user_id; + $wallet->ln_node_id = $this->id; + $wallet->save(); + + $this->fee_wallet_id = $wallet->id; + $this->save(); + + //add our default keysend catch wallet + $wallet = new Wallet(); + $wallet->user_label = '['.$this->id.'] Inbound Keysend'; + $wallet->user_id = $this->user_id; + $wallet->ln_node_id = $this->id; + $wallet->save(); + + $this->keysend_wallet_id = $wallet->id; + $this->save(); + + switch ($this->ln_node_implementation_id) { + default: + $this->user->registerAction(ActionName::LN_NODE_USER_ADD,['lnod'=>$this->toArray()]); + } + + } + + parent::afterSave($insert, $changedAttributes); + } + + public function beforeDelete() + { + if (!parent::beforeDelete()) { + return false; + } + + \LNPay::$app->db->createCommand()->update('ln_node', ['fee_wallet_id' => NULL], ['id'=>$this->id])->execute(); + \LNPay::$app->db->createCommand()->update('ln_node', ['keysend_wallet_id' => NULL], ['id'=>$this->id])->execute(); + + LnTx::updateAll(['ln_node_id'=>NULL],['ln_node_id'=>$this->id]); + + Wallet::updateAll(['ln_node_id'=>NULL],['ln_node_id'=>$this->id]); + + NodeListener::deleteAll(['ln_node_id'=>$this->id]); + + LnNodeProfile::deleteAll(['ln_node_id'=>$this->id]); + + + //This is here instead of ActionComponent::ActionName::LN_NODE_USER_REMOVE + //because we don't want to delete unless success on remove from supervisor + $this->removeLndRpcSubscribers(); + return true; + } + + public function afterDelete() + { + parent::afterDelete(); + $this->user->registerAction(ActionName::LN_NODE_USER_REMOVE,['lnod'=>$this->toArray()]); + } + + + + + + + + + + + + + + /** + * + * + * + * API STUFF + */ + + public function fields() + { + $fields = parent::fields(); + $fields['passThru'] = 'json_data'; + $fields['fee_wallet_id'] = function ($model) { + return $this->feeWallet->external_hash; + }; + $fields['keysend_wallet_id'] = function ($model) { + return $this->keysendWallet->external_hash; + }; + + unset( $fields['tls_cert'], + $fields['getinfo'], + $fields['user_id'], + $fields['json_data'], + $fields['updated_at'], + $fields['status_type_id'], + $fields['rest_status_id'], + $fields['rpc_status_id'], + $fields['internal_rpc_port'], + $fields['internal_rest_port'], + $fields['internal_ln_port'], + $fields['wallet_password'], + $fields['ln_node_implementation_id'] + ); + + + return $fields; + } +} diff --git a/src/node/models/LnNodeImplementation.php b/src/node/models/LnNodeImplementation.php new file mode 100644 index 00000000..1ba806c3 --- /dev/null +++ b/src/node/models/LnNodeImplementation.php @@ -0,0 +1,75 @@ + 64], + [['display_name'], 'string', 'max' => 255], + [['name'], 'unique'], + ]; + } + + /** + * {@inheritdoc} + */ + public function attributeLabels() + { + return [ + 'name' => 'Name', + 'display_name' => 'Display Name', + 'json_data' => 'Json Data', + ]; + } + + /** + * Gets query for [[LnNodes]]. + * + * @return \yii\db\ActiveQuery + */ + public function getLnNodes() + { + return $this->hasMany(LnNode::className(), ['ln_node_implementation_id' => 'name']); + } +} diff --git a/src/node/models/LnNodeProfile.php b/src/node/models/LnNodeProfile.php new file mode 100644 index 00000000..44637b37 --- /dev/null +++ b/src/node/models/LnNodeProfile.php @@ -0,0 +1,181 @@ +JsonDataBehavior::class + ] + ]; + } + + /** + * {@inheritdoc} + */ + public function rules() + { + return [ + ['id','default','value' => 'lnodpr_'.HelperComponent::generateRandomString(8)], + [['is_default', 'status_type_id'], 'integer'], + ['status_type_id','default','value'=>StatusType::LN_NODE_PROFILE_ACTIVE], + [['macaroon_hex','json_data'], 'string'], + ['macaroon_hex','verify_macaroon'], + [['id', 'ln_node_id', 'user_label', 'username', 'password', 'access_key'], 'string', 'max' => 255], + [['id'], 'unique'], + [['submitted_perms'],'safe'] + ]; + } + + /** + * {@inheritdoc} + */ + public function attributeLabels() + { + return [ + 'id' => 'ID', + 'ln_node_id' => 'Ln Node ID', + 'is_default' => 'Is Default', + 'user_label' => 'Label for your reference', + 'status_type_id' => 'Status Type ID', + 'macaroon' => 'Macaroon', + 'username' => 'Username', + 'password' => 'Password', + 'access_key' => 'Access Key', + ]; + } + + /** + * Gets query for [[LnNode]]. + * + * @return \yii\db\ActiveQuery + */ + public function getLnNode() + { + return $this->hasOne(LnNode::className(), ['id' => 'ln_node_id']); + } + + /** + * Gets query for [[StatusType]]. + * + * @return \yii\db\ActiveQuery + */ + public function getStatusType() + { + return $this->hasOne(StatusType::className(), ['id' => 'status_type_id']); + } + + + /** + * @return LnMacaroonObject + */ + public function getMacaroonObject() + { + return new LnMacaroonObject($this->getDecryptedMacaroonHex()); + } + + public function getDecryptedMacaroonHex() + { + //if encrypted + if ($dec = HelperComponent::decryptForDbUse($this->macaroon_hex,getenv('GENERAL_ENCRYPTION_KEY'),$this->ln_node_id)) { + return $dec; + } else { //for backwards compatibility + return $this->macaroon_hex; + } + } + + public function getLndConnectString() + { + return LndConnect::encode($this->lnNode->host.':'.$this->lnNode->rpc_port,hex2bin($this->lnNode->tls_cert),$this->macaroonObject->hex); + } + + /** + * Verify that the macaroon was baked properly + * @param $attribute_name + * @param $params + */ + public function verify_macaroon($attribute_name, $params) + { + $m = new LnMacaroonObject($this->getDecryptedMacaroonHex()); + + if (!$m->isValidMacaroon) { + $this->addError($attribute_name,'Invalid macaroon!'); + } + } + + public static function getMacaroonCheckboxList() + { + $arr = []; + foreach (LnMacaroonObject::getAllowedPermissionMap() as $entity => $actions) { + foreach ($actions as $a) { + $arr[$entity.'_'.$a] = $entity.'_'.$a; + } + } + + return $arr; + } + + + /** + * @return LnNodeProfile|bool + * @throws \Exception + */ + public function bakeMacaroon() + { + $perms = []; + foreach ($this->submitted_perms as $entity_action) { + list($entity,$action) = explode("_",$entity_action); + $p = new \Lnrpc\MacaroonPermission(); + $p->setEntity($entity); + $p->setAction($action); + $perms[] = $p; + } + + $result = $this->lnNode->getLndConnector('RPC')->bakeMacaroon($perms); + + $this->macaroon_hex = $result; + + return $this->lnNode->addProfile($this->attributes); + } +} diff --git a/src/node/models/LnNodeProfileSearch.php b/src/node/models/LnNodeProfileSearch.php new file mode 100644 index 00000000..6332b004 --- /dev/null +++ b/src/node/models/LnNodeProfileSearch.php @@ -0,0 +1,78 @@ + $query, + ]); + + $this->load($params); + + if (!$this->validate()) { + // uncomment the following line if you do not want to return any records when validation fails + // $query->where('0=1'); + return $dataProvider; + } + + // grid filtering conditions + $query->andFilterWhere([ + 'created_at' => $this->created_at, + 'updated_at' => $this->updated_at, + 'user_id' => $this->user_id, + 'is_default' => $this->is_default, + 'status_type_id' => $this->status_type_id, + ]); + + $query->andFilterWhere(['like', 'id', $this->id]) + ->andFilterWhere(['like', 'ln_node_id', $this->ln_node_id]) + ->andFilterWhere(['like', 'user_label', $this->user_label]) + ->andFilterWhere(['like', 'username', $this->username]) + ->andFilterWhere(['like', 'password', $this->password]) + ->andFilterWhere(['like', 'access_key', $this->access_key]) + ->andFilterWhere(['like', 'json_data', $this->json_data]); + + return $dataProvider; + } +} diff --git a/src/node/models/LnNodeSearch.php b/src/node/models/LnNodeSearch.php new file mode 100644 index 00000000..9bf606b1 --- /dev/null +++ b/src/node/models/LnNodeSearch.php @@ -0,0 +1,81 @@ + $query, + ]); + + $this->load($params); + + if (!$this->validate()) { + // uncomment the following line if you do not want to return any records when validation fails + $query->where('0=1'); + return $dataProvider; + } + + // grid filtering conditions + $query->andFilterWhere([ + 'rpc_port' => $this->rpc_port, + 'rest_port' => $this->rest_port, + 'ln_port' => $this->ln_port, + 'status_type_id' => $this->status_type_id, + 'rpc_status_id' => $this->rpc_status_id, + 'rest_status_id' => $this->rest_status_id, + ]); + + $query->andFilterWhere(['like', 'id', $this->id]) + ->andFilterWhere(['like', 'alias', $this->alias]) + ->andFilterWhere(['like', 'ln_node_implementation_id', $this->ln_node_implementation_id]) + ->andFilterWhere(['like', 'default_pubkey', $this->default_pubkey]) + ->andFilterWhere(['like', 'uri', $this->uri]) + ->andFilterWhere(['like', 'host', $this->host]) + ->andFilterWhere(['like', 'tls_cert', $this->tls_cert]) + ->andFilterWhere(['like', 'getinfo', $this->getinfo]) + ->andFilterWhere(['like', 'json_data', $this->json_data]); + + return $dataProvider; + } +} diff --git a/src/node/models/NodeAddForm.php b/src/node/models/NodeAddForm.php new file mode 100644 index 00000000..89631b3c --- /dev/null +++ b/src/node/models/NodeAddForm.php @@ -0,0 +1,356 @@ + ['read'], + 'offchain' => ['read'], + 'address' => ['read','write'], + 'message' => ['read'], + 'peers' => ['read','write'], + 'info' => ['read'], + 'invoices' => ['read','write'], + 'signer' => ['read'] + ]; + + public $readMacaroonPerms = [ + 'onchain' => ['read'], + 'offchain' => ['read'], + 'address' => ['read'], + 'message' => ['read'], + 'peers' => ['read'], + 'info' => ['read'], + 'invoices' => ['read'], + //'signer' => ['read'] + ]; + + public function getExpectedMacaroonObject() + { + $m = new LnMacaroonObject(); + $m->permissions = $this->readMacaroonPerms; + return $m; + } + + /** + * @return LnNode + */ + public function getLndMockNodeObject() + { + $node = new LnNode(); + $node->ln_node_implementation_id = LnNodeImplementation::LND_IMPLEMENTATION_ID; + $node->host = $this->node_host; + $node->rpc_port = $this->node_grpc_port; + $node->rest_port = $this->node_rest_port; + $node->tls_cert = $this->node_tls_cert; + + $mac = new LnMacaroonObject($this->node_macaroon); + $node->baseMacaroonObject = $mac; + + return $node; + } + + /** + * @inheritdoc + */ + public function rules() + { + return [ + [['node_host','node_rest_port','node_grpc_port','node_macaroon'],'required'], + [['node_host','node_macaroon','node_tls_cert'],'string'], + [['node_rest_port','node_grpc_port','readyToAdd'],'integer'], + [['is_custodian'],'boolean'], + [['node_tls_cert'],'verify_tls_cert'], + ['node_macaroon','verify_macaroon'], + ['node_host','test_rest_connect'], + ['node_host','test_rpc_connect'], + ['node_host','verify_chain'], + + //[['lndconnect_readonly'],'string'], + //[['lndconnect_readonly'],'lndconnect_verify'], + //[['lndconnect_readonly'],'verify_read_macaroon'], + //[['lndconnect_readonly'],'test_connect'] + //['invoice_request', 'either','params' => ['other' => 'num_satoshis']], + ]; + } + + /** + * Verify that the TLS cert matches the IP + * @param $attribute_name + * @param $params + */ + public function verify_tls_cert($attribute_name, $params) + { + $ip = $this->node_host; + + $rawCert = trim($this->{$attribute_name}); + + //check for hex + if ($r = @hex2bin($this->{$attribute_name})) { + $rawCert = $r; + } else { + $this->{$attribute_name} = bin2hex($this->{$attribute_name}); + } + + + $r = openssl_x509_parse($rawCert); + if (!$r) { + $this->addError($attribute_name,'Invalid certificate format'); + return false; + } + + $found = true; //set to FALSE to match hostname to cert + array_walk_recursive($r, function($item, $key) use ($ip, &$found) { + if (stripos($item,$ip)!==FALSE) { + $found = true; + } + }); + + if (!$found) { + \LNPay::$app->session->setFlash('invalid_tls',TRUE); + $this->addError($attribute_name,'Node Host/IP is not listed in TLS cert!'); + } + } + + /** + * Verify that the macaroon was baked properly + * @param $attribute_name + * @param $params + */ + public function verify_macaroon($attribute_name, $params) + { + $this->submittedMacaroonObject = new LnMacaroonObject($this->node_macaroon); + + return true; //we are not checking anything other than it is a legit macaroon + /* + $m = $this->submittedMacaroonObject; + + //Check if permissions are correct + $diff = $this->expectedMacaroonObject->permissions == $m->permissions; + + $toAddArray = HelperComponent::array_diff_assoc_recursive($this->expectedMacaroonObject->permissions,$m->permissions); + $toRemoveArray = HelperComponent::array_diff_assoc_recursive($m->permissions,$this->expectedMacaroonObject->permissions); + + $toAdd = LnMacaroonObject::permissionArrayToReadableString($toAddArray,"\n"); + $toRemove = LnMacaroonObject::permissionArrayToReadableString($toRemoveArray,"\n"); + + if (!empty($toAdd)) { + $this->addError($attribute_name,'Macaroon has wrong permissions! Permissions to add: '.$toAdd); + } + + if (!empty($toRemove)) { + if ( (stripos($toRemove,'offchain:write')!==FALSE) || (stripos($toRemove,'onchain:write')!==FALSE)) { + $this->addError($attribute_name,'Macaroon has wrong permissions! Permissions to remove: '.$toRemove); + } + }*/ + } + + /** + * Test if can connect to node via REST + * @param $attribute_name + * @param $params + */ + public function test_rest_connect($attribute_name, $params) + { + $mockNode = $this->getLndMockNodeObject(); + + $lnd = LndNodeConnector::initConnector($mockNode); + $r = $lnd->getInfo(); + $decode = @json_decode($r,TRUE); + if ($decode) { + $this->nodeInfo = $decode; + } else { + $this->addError($attribute_name,'Can\'t connect to node via REST: '.VarDumper::export($r)); + } + } + + /** + * Test if can connect to node via RPC + * @param $attribute_name + * @param $params + */ + public function test_rpc_connect($attribute_name, $params) + { + $mockNode = $this->getLndMockNodeObject(); + + $lnd = LndNodeConnector::initConnector($mockNode,'RPC'); + $r = $lnd->getInfo(); + $decode = @json_decode($r,TRUE); + if ($decode) { + //$this->nodeInfo = $decode; //Already set by REST command + } else { + $this->addError($attribute_name,'Can\'t connect to node via RPC: '.VarDumper::export($r)); + } + } + + public function verify_getinfo($attribute_name, $params) + { + if ($getinfo = $this->nodeInfo) { + $this->infoVerified = true; + } else { + $this->addError($attribute_name,'Invalid getinfo received from node: '.VarDumper::dumpAsString($this->nodeInfo)); + } + } + + /** + public function verify_synced_to_graph($attribute_name, $params) + { + if (!$this->nodeInfo['synced_to_graph']) + $this->addError($attribute_name,'Node must be synced to graph to add!'); + }*/ + + public function verify_uri($attribute_name, $params) + { + foreach ($this->nodeInfo['uris'] as $uri) { + $this->node_uri = $uri; + return; + } + + $this->addError($attribute_name,'Node does not have any available URIs!'); + } + + public function verify_chain($attribute_name, $params) + { + foreach ($this->nodeInfo['chains'] as $chain) { + if ($chain['chain'] == 'bitcoin') { + $this->node_network = $chain['network']; + return; + } + } + + $this->addError($attribute_name,'Node not synced to any bitcoin chain!'); + } + + /** + * Verify if LNDCONNECT is formatted correctly + * @param $attribute_name + * @param $params + * @return bool + */ + public function lndconnect_verify($attribute_name, $params) + { + $r = HelperComponent::parseLndConnectString($this->lndconnect_readonly); + + if (!$r) { + $this->addError($attribute_name,'Invalid lndconnect string! Check format'); + return false; + } + + $this->node_host = $r['host']; + $this->node_rest_port = $r['port']; + $this->node_grpc_port = LnNodeImplementation::LND_DEFAULT_GRPC_PORT; + $this->node_macaroon = HelperComponent::base64url_decode($r['macaroon']); + $this->node_tls_cert = $r['cert']; + + } + + + public function either($attribute_name, $params) + { + $field1 = $this->getAttributeLabel($attribute_name); + $field2 = $this->getAttributeLabel($params['other']); + if (empty($this->$attribute_name) && empty($this->{$params['other']})) { + $this->addError($attribute_name, \LNPay::t('user', "either {$field1} or {$field2} is required.")); + } + } + + public function attributeLabels() + { + return [ + 'invoice_request'=>'Payment Request', + 'readyToAdd'=>'admin.macaroon is encrypted and used to send/receive from this lightning node', + 'is_custodian'=>'Is custodial node for other members of your organization' + ]; + } + + + + + + + + + + + + + public function addNode() + { + switch ($this->node_implementation) { + case LnNodeImplementation::LND_IMPLEMENTATION_ID: + case LnNodeImplementation::LND_SUBNODE: + return $this->addLndNode(); + break; + } + } + + public function addLndNode() + { + $nodeInfo = $this->nodeInfo; + + if ($this->node_id) { + $node = LnNode::findOne($this->node_id); + } else { + $node = new LnNode(); + } + + $node->user_id = $this->user_id?:\LNPay::$app->user->id; + $node->org_id = User::findOne($node->user_id)->org_id; + $node->alias = $nodeInfo['alias']; + $node->ln_node_implementation_id = $this->node_implementation; + $node->default_pubkey = $nodeInfo['identity_pubkey']; + $node->uri = $node->default_pubkey.'@'.$this->node_host.':'.$this->node_ln_port; + $node->host = $this->node_host; + $node->rpc_port = $this->node_grpc_port; + $node->rest_port = $this->node_rest_port; + $node->ln_port = $this->node_ln_port; + $node->tls_cert = $this->node_tls_cert; + $node->getinfo = $nodeInfo; + $node->status_type_id = StatusType::LN_NODE_ACTIVE; + $node->is_custodian = $this->is_custodian; + $node->network = $this->node_network?:'unknown'; + + if ($node->save()) { + $node->addProfile(['macaroon_hex'=>$this->submittedMacaroonObject->hex,'user_label'=>'admin.macaroon','is_default'=>1]); + return $node; + } else { + throw new Exception(HelperComponent::getFirstErrorFromFailedValidation($node)); + } + } +} diff --git a/src/node/models/NodeCreateForm.php b/src/node/models/NodeCreateForm.php new file mode 100644 index 00000000..096aee2a --- /dev/null +++ b/src/node/models/NodeCreateForm.php @@ -0,0 +1,89 @@ +'Network', + 'lnd_version'=>'Version', + 'implementation'=>'Implementation', + 'user_label' => 'Tags / Labels' + ]; + } + + + /** + * @return array + * @throws \GuzzleHttp\Exception\GuzzleException + */ + public function createNode() + { + $cluster = LnCluster::getDefaultCluster(); + $result = $cluster->spawnSubnode(); + + \LNPay::$app->queue->push(new AddLndSubnodeJob([ + 'node_details' => $result + ])); + + //Create new node in db, placeholder for now + $node = new LnNode; + $node->id = $result['node_id']; + $node->user_id = \LNPay::$app->user->id; + $node->user_label = $this->user_label; + $node->rest_port = $result['rest_port']; + $node->rpc_port = $result['rpc_port']; + $node->ln_port = $result['internal_ln_port']; + $node->internal_rpc_port = $result['internal_rpc_port']; + $node->internal_rest_port = $result['internal_rest_port']; + $node->internal_ln_port = $result['internal_ln_port']; + $node->host = $cluster->host; + $node->tls_cert = bin2hex($result['tls_cert']); + $node->wallet_password = $result['wallet_password']; + $node->rest_status_id = StatusType::LN_NODE_REST_INACTIVE; + $node->rpc_status_id = StatusType::LN_NODE_RPC_INACTIVE; + $node->status_type_id = StatusType::LN_SUBNODE_PENDING; + $node->network = $this->network; + $node->ln_node_implementation_id = LnNodeImplementation::LND_SUBNODE; + if (!$node->save()) { + throw new \Exception(HelperComponent::getFirstErrorFromFailedValidation($node)); + } + + unset($result['internal_rpc_port']); + unset($result['internal_rest_port']); + unset($result['internal_ln_port']); + + return $result; + } +} diff --git a/src/node/models/NodeListener.php b/src/node/models/NodeListener.php new file mode 100644 index 00000000..a85cd81c --- /dev/null +++ b/src/node/models/NodeListener.php @@ -0,0 +1,291 @@ + 255], + [['id'], 'unique'], + ]; + } + + /** + * {@inheritdoc} + */ + public function attributeLabels() + { + return [ + 'id' => 'ID', + 'created_at' => 'Created At', + 'updated_at' => 'Updated At', + 'ln_node_id' => 'Ln Node ID', + 'btc_node_id' => 'Btc Node ID', + 'user_id' => 'User ID', + 'config_filename' => 'Config Filename', + 'status_type_id' => 'Status Type ID', + 'supervisor_parameters' => 'Supervisor Parameters', + ]; + } + + /** + * Gets query for [[LnNode]]. + * + * @return \yii\db\ActiveQuery + */ + public function getLnNode() + { + return $this->hasOne(LnNode::className(), ['id' => 'ln_node_id']); + } + + /** + * Gets query for [[User]]. + * + * @return \yii\db\ActiveQuery + */ + public function getUser() + { + return $this->hasOne(User::className(), ['id' => 'user_id']); + } + + /** + * Gets query for [[StatusType]]. + * + * @return \yii\db\ActiveQuery + */ + public function getStatusType() + { + return $this->hasOne(StatusType::className(), ['id' => 'status_type_id']); + } + + /** + * returns Supervisor compatible program config + * @param $nodeObject + * @param $method + * @return array + */ + public static function createLndRpcSupervisorConfig($nodeObject,$method) + { + switch ($method) { + case static::LND_RPC_SUBSCRIBE_CHANNEL_BACKUPS: + case static::LND_RPC_SUBSCRIBE_CHANNEL_GRAPH: + case static::LND_RPC_SUBSCRIBE_PEER_EVENTS: + case static::LND_RPC_SUBSCRIBE_HTLC_EVENTS: + case static::LND_RPC_SUBSCRIBE_TRANSACTIONS: + case static::LND_RPC_SUBSCRIBE_CHANNEL_EVENTS: + $overrides = [ + 'autostart'=>false + ]; + break; + default: + $overrides = []; + } + + return ArrayHelper::merge([ + 'command' => getenv('PHP_BIN_PATH').' '.getenv('SUPERVISOR_SERVER_APP_PATH').'yii rpc-listener/lnd-subscribe '.$nodeObject->id.' '.$method, + 'autostart'=>true, + 'autorestart'=>true, + //'numprocs'=>1, + //'process_name'='%(program_name)s_%(process_num)02d', + 'stderr_logfile'=>getenv('SUPERVISOR_SERVER_APP_PATH').'runtime/supervisor/'.$nodeObject->id.'.err.log', + 'stdout_logfile'=>getenv('SUPERVISOR_SERVER_APP_PATH').'runtime/supervisor/'.$nodeObject->id.'.out.log', + 'stdout_logfile_maxbytes'=>1000000, //1 MB log max + 'stdout_logfile_backups'=>0 + ],$overrides); + } + + /** + * @param $nodeObject + * @param $method + * @return NodeListener + * @throws \Exception + */ + public static function createLndRpcListenerObject($nodeObject,$method) + { + $listener = new static(); + $listener->id = $nodeObject->id.'--'.$method; + $listener->method = $method; + $listener->ln_node_id = $nodeObject->id; + $listener->user_id = $nodeObject->user_id; + $listener->config_filename = $nodeObject->id.'.conf'; + $listener->supervisor_parameters = static::createLndRpcSupervisorConfig($nodeObject,$method); + if ($listener->save()) + return $listener; + else + throw new \Exception(HelperComponent::getFirstErrorFromFailedValidation($listener)); + } + + /** + * @param $node_id + * @return array + * @throws \Exception + */ + public static function createLndRpcListenerObjects($node_id) + { + $node = LnNode::findOne($node_id); + $array = []; + foreach (static::getAvailableSubscribeMethods() as $method) { + $listener = static::createLndRpcListenerObject($node,$method); + $array[] = $listener->id; + } + + \LNPay::$app->queue->push(new SupervisorWriteLndRpcConfigFileJob([ + 'config_filename' => $node->supervisorConfFilename, + 'listeners' => $array + ])); + + return $array; + } + + /** + * @param $array + * @return bool + * @throws \Exception + */ + public function updateSupervisorParameters($array) + { + \LNPay::$app->queue->push(new SupervisorUpdateLndRpcConfigFileJob([ + 'listener_id' => $this->id, + 'parameters' => ArrayHelper::merge($this->supervisor_parameters,$array) + ])); + } + + /** + * @return array|bool + */ + public function getSupervisorProcessInfo() + { + return SupervisorComponent::getProcessInfo($this->id); + } + + public function getIsRunning() + { + $info = $this->getSupervisorProcessInfo(); + if (@$info['statename']=='RUNNING') + return true; + else + return false; + } + + public function getIsAutorestart() + { + $info = json_decode($this->supervisor_parameters); + if (@$info['autorestart']==true) + return true; + else + return false; + } + + /** + * @throws \Exception + */ + public function stopListenerAndTurnOffAutostart() + { + $this->updateSupervisorParameters(['autostart'=>0]); + SupervisorComponent::removeProcess($this->id); + } + + /** + * @throws \Exception + */ + public function startListenerAndTurnOnAutostart() + { + $this->updateSupervisorParameters(['autostart'=>1]); + SupervisorComponent::startProcess($this->id); + } + + + + public function beforeDelete() + { + if (!parent::beforeDelete()) { + return false; + } + + SupervisorComponent::removeProcess($this->id); + return true; + } + + + + + + +} diff --git a/src/node/models/analytics/HtlcEventQueryForm.php b/src/node/models/analytics/HtlcEventQueryForm.php new file mode 100644 index 00000000..45881aa2 --- /dev/null +++ b/src/node/models/analytics/HtlcEventQueryForm.php @@ -0,0 +1,59 @@ +function ($model,$attribute) { return time(); }], + [['eventType'],'string'], + [['linkFailEvent'],'boolean'] + ]; + } + + public function attributeLabels() + { + return [ + + ]; + } + + public function constructQuery() + { + $query = new \yii\mongodb\Query(); + $query + ->andFilterWhere(['eventType'=>$this->eventType]) + ->andFilterWhere(['incomingChannelId'=>$this->incomingChannelId]) + ->andFilterWhere(['outgoingChannelId'=>$this->outgoingChannelId]); + + $query->from($this->node_id.'_SubscribeHtlcEventsRequest_HtlcEvent'); + + return $query; + } +} diff --git a/src/node/views/_nav-node-index.php b/src/node/views/_nav-node-index.php new file mode 100644 index 00000000..4c6426b2 --- /dev/null +++ b/src/node/views/_nav-node-index.php @@ -0,0 +1,14 @@ +render('@app/views/layouts/sidebar/__base_sidebar'); ?> + + + + diff --git a/src/node/views/_nav-node.php b/src/node/views/_nav-node.php new file mode 100644 index 00000000..c5ea8077 --- /dev/null +++ b/src/node/views/_nav-node.php @@ -0,0 +1,37 @@ + +render('@app/views/layouts/sidebar/__base_sidebar'); ?> + +controller->nodeObject; ?> + + + + + diff --git a/src/node/views/authprofile/_form.php b/src/node/views/authprofile/_form.php new file mode 100644 index 00000000..4a6ffe72 --- /dev/null +++ b/src/node/views/authprofile/_form.php @@ -0,0 +1,69 @@ + + +
+ + + + id) { + $opts = ['disabled'=>true]; + } + ?> + + registerJs(' + $("#admin_preset").on("click", function() { + $(":checkbox").prop("checked",true); + return false; + }); + $("#readonly_preset").on("click", function() { + $(":checkbox").prop("checked",false); + $(":checkbox[value=onchain_read]").prop("checked",true); + $(":checkbox[value=offchain_read]").prop("checked",true); + $(":checkbox[value=address_read]").prop("checked",true); + $(":checkbox[value=message_read]").prop("checked",true); + $(":checkbox[value=peers_read]").prop("checked",true); + $(":checkbox[value=info_read]").prop("checked",true); + $(":checkbox[value=invoices]").prop("checked",true); + $(":checkbox[value=signer]").prop("checked",true); + return false; + }); + + $("#invoice_preset").on("click", function() { + $(":checkbox").prop("checked",false); + $(":checkbox[value=invoices_read]").prop("checked",true); + $(":checkbox[value=invoices_write]").prop("checked",true); + $(":checkbox[value=address_read]").prop("checked",true); + $(":checkbox[value=address_write]").prop("checked",true); + $(":checkbox[value=onchain_read]").prop("checked",true); + return false; + }); + + '); ?> + + field($model, 'user_label')->textInput(['maxlength' => true]) ?> +
+

Presets

+ admin   + readonly   + invoice   +
+ + field($model, 'submitted_perms')->checkboxList($model::getMacaroonCheckboxList(), + ['separator' => '
']); ?> + +
+ 'btn btn-success']) ?> +
+ + + +
diff --git a/src/node/views/authprofile/_search.php b/src/node/views/authprofile/_search.php new file mode 100644 index 00000000..e88ab2ff --- /dev/null +++ b/src/node/views/authprofile/_search.php @@ -0,0 +1,51 @@ + + + diff --git a/src/node/views/authprofile/create.php b/src/node/views/authprofile/create.php new file mode 100644 index 00000000..9c7a96aa --- /dev/null +++ b/src/node/views/authprofile/create.php @@ -0,0 +1,20 @@ +title = 'Create Ln Node Profile'; +$this->params['breadcrumbs'][] = ['label' => 'Ln Node Profiles', 'url' => ['index']]; +$this->params['breadcrumbs'][] = $this->title; +?> +
+ +

title) ?>

+ + render('_form', [ + 'model' => $model, + ]) ?> + +
diff --git a/src/node/views/authprofile/index.php b/src/node/views/authprofile/index.php new file mode 100644 index 00000000..bc9a175f --- /dev/null +++ b/src/node/views/authprofile/index.php @@ -0,0 +1,43 @@ +title = 'Macaroon Bakery'; +$this->params['breadcrumbs'][] = $this->title; +?> +
+ +

title) ?>

+ +

+ 'btn btn-success']) ?> +

+ + render('_search', ['model' => $searchModel]); ?> + + $dataProvider, + 'filterModel' => $searchModel, + 'columns' => [ + 'user_label', + 'created_at:datetime', + //'is_default', + + //'status_type_id', + //'macaroon_hex:ntext', + //'username', + //'password', + //'access_key', + //'json_data', + + ['class' => 'yii\grid\ActionColumn'], + ], + ]); ?> + + +
diff --git a/src/node/views/authprofile/update.php b/src/node/views/authprofile/update.php new file mode 100644 index 00000000..e72b71bd --- /dev/null +++ b/src/node/views/authprofile/update.php @@ -0,0 +1,21 @@ +title = 'Update Ln Node Profile: ' . $model->user_label; +$this->params['breadcrumbs'][] = ['label' => 'Ln Node Profiles', 'url' => ['index']]; +$this->params['breadcrumbs'][] = ['label' => $model->id, 'url' => ['view', 'id' => $model->id]]; +$this->params['breadcrumbs'][] = 'Update'; +?> +
+ +

title) ?>

+ + render('_form', [ + 'model' => $model, + ]) ?> + +
diff --git a/src/node/views/authprofile/view.php b/src/node/views/authprofile/view.php new file mode 100644 index 00000000..4edc18f8 --- /dev/null +++ b/src/node/views/authprofile/view.php @@ -0,0 +1,43 @@ +title = $model->user_label; +$this->params['breadcrumbs'][] = ['label' => 'Ln Node Profiles', 'url' => ['index']]; +$this->params['breadcrumbs'][] = $this->title; +\yii\web\YiiAsset::register($this); +?> +
+ +

title) ?>

+ +

+ $model->id], ['class' => 'btn btn-primary']) ?> + $model->id], [ + 'class' => 'btn btn-danger', + 'data' => [ + 'confirm' => 'Are you sure you want to delete this item?', + 'method' => 'post', + ], + ]) ?> +

+ + $model, + 'attributes' => [ + 'id', + 'created_at:datetime', + 'ln_node_id', + 'is_default', + 'user_label' + ], + ]) ?> +
',$model->getMacaroonObject()->readableString());?>
+
',$model->getMacaroonObject()->hex);?>
+ + +
diff --git a/src/node/views/dashboard/_form-create.php b/src/node/views/dashboard/_form-create.php new file mode 100644 index 00000000..96b3012e --- /dev/null +++ b/src/node/views/dashboard/_form-create.php @@ -0,0 +1,26 @@ + + +
+
+ + + field($model, 'user_label')->textInput()->hint('For your reference') ?> + field($model, 'implementation')->dropDownList(['LND'=>'LND']) ?> + field($model, 'network')->dropDownList(['testnet'=>'testnet']) ?> + field($model, 'lnd_version')->dropDownList(['v0.10.99-beta'=>'v0.10.99-beta']) ?> + 'create-node-submit-button','class' => 'btn btn-info']); ?> + + +

+ +
+ +
\ No newline at end of file diff --git a/src/node/views/dashboard/_form-lndconnect.php b/src/node/views/dashboard/_form-lndconnect.php new file mode 100644 index 00000000..7698e7f3 --- /dev/null +++ b/src/node/views/dashboard/_form-lndconnect.php @@ -0,0 +1,70 @@ + + +
+
+ + + +
$ lndconnect -j --readonly
+ OR +
$ echo 'lndconnect://23.23.23.23:10013?cert='"`grep -v 'CERTIFICATE' ~/.lnd/tls.cert | tr -d '=' | tr '/+' '_-'`"'&macaroon='"`base64 ~/.lnd/data/chain/bitcoin/mainnet/readonly.macaroon | tr -d '=' | tr '/+' '_-'`" | tr -d '\n'
+ field($model, 'lndconnect_readonly')->textarea(['maxlength' => true,'placeholder'=>'e.g. lndconnect://'])->label('Copy lndconnect string here') ?> + + +
+ 'btn btn-success']) ?> +
+ + + +

+ + "; + \yii\helpers\VarDumper::dump($readonlyMacaroonObject->permissions); + echo ""; + } + + if ($nodeInfo) { + echo "Node Info:
";
+            \yii\helpers\VarDumper::dump((array)$nodeInfo);
+            echo "
"; + } + + ?> + +
+ +
+

+ Details +

+

+

    +
  • + READONLY macaroon to start +
  • +
  • + Both RPC and REST access is required. +
  • +
  • + You will only be able to receive money via a wallet or paywall +
  • +
  • + Since the money is in your node, the wallets really serve as a record keeping layer +
  • +
+

+ +
+ +
diff --git a/src/node/views/dashboard/_form.php b/src/node/views/dashboard/_form.php new file mode 100644 index 00000000..00ae01e6 --- /dev/null +++ b/src/node/views/dashboard/_form.php @@ -0,0 +1,99 @@ +permissions = $model->defaultMacaroonPerms; + +?> + +
+
+ + + +

Network

+ field($model, 'node_host')->textInput(['maxlength' => true,'placeholder'=>'e.g. 125.125.125.125'])->label('Node IP / HOST'); ?> + field($model, 'node_grpc_port')->textInput(['maxlength' => true,'placeholder'=>'e.g. 10009'])->label('GRPC Port'); ?> + field($model, 'node_rest_port')->textInput(['maxlength' => true,'placeholder'=>'e.g. 8080'])->label('REST Port'); ?> + + field($model, 'node_macaroon')->textarea(['maxlength' => true,'placeholder'=>'e.g. 0201036c6e6402a80....'])->label('Baked Macaroon HEX'); ?> + +

TLS

+ Please see: https://docs.zaphq.io/docs-desktop-lnd-configure
+ field($model, 'node_tls_cert') + ->textarea(['maxlength' => true,'placeholder'=>'e.g. -----BEGIN CERTIFICATE-----']) + ->label('TLS Cert raw or HEX') + ->hint('The HOST above MUST match your externalip OR tlsextraip in lnd.conf!!'); ?> + session->getFlash('invalid_tls')) { ?> +

+ We are practicing good node hygiene here. You probably need to add the following to lnd.conf: +

+ tlsextraip=node_host;?> +

+ Delete tls.cert and tls.key and restart LND +

+ +
+
+ field($model, 'is_custodian')->checkbox()->hint('Give other members access to this node?'); ?> +
+
+
+
+ readyToAdd = false; + echo $form->field($model, 'readyToAdd')->checkbox(); ?> +
+ 'add-node-submit-button','class' => 'btn btn-info']); ?> +
+ + + +

+ +
+ +
+ + + "; + if ($n = $nodeInfo) { + echo json_encode($n,JSON_PRETTY_PRINT); + } + else + echo $nodeInfo; + echo ""; + } + /* + if ($submittedMacaroonObject) { + echo "Macaroon Permissions:
";
+            \yii\helpers\VarDumper::dump($submittedMacaroonObject->permissions);
+            echo "
"; + }*/ + ?> +
+ +
+ +registerJs(" + $('#nodeaddform-readytoadd').change(function() { + if(this.checked) { + $('#add-node-submit-button').text('Add Node!'); + $('#add-node-submit-button').attr('class','btn btn-success'); + } else { + $('#add-node-submit-button').text('Check Connection'); + $('#add-node-submit-button').attr('class','btn btn-info'); + } + + }); +"); ?> \ No newline at end of file diff --git a/src/node/views/dashboard/_node-accordion-pane.php b/src/node/views/dashboard/_node-accordion-pane.php new file mode 100644 index 00000000..608fd96f --- /dev/null +++ b/src/node/views/dashboard/_node-accordion-pane.php @@ -0,0 +1,9 @@ +

Macaroon Hex

+
+
macaroonObject->hex;?>
+
+ +

Permissions

+
+
macaroonObject->permissions);?>
+
\ No newline at end of file diff --git a/src/node/views/dashboard/_search.php b/src/node/views/dashboard/_search.php new file mode 100644 index 00000000..f39cb686 --- /dev/null +++ b/src/node/views/dashboard/_search.php @@ -0,0 +1,55 @@ + + + diff --git a/src/node/views/dashboard/add.php b/src/node/views/dashboard/add.php new file mode 100644 index 00000000..51751ceb --- /dev/null +++ b/src/node/views/dashboard/add.php @@ -0,0 +1,21 @@ +title = 'Add Your Node to get started!'; +$this->params['breadcrumbs'][] = $this->title; +?> +
+ +

title) ?>

+ + render('_form', [ + 'model' => $model, + 'submittedMacaroonObject'=>$submittedMacaroonObject, + 'nodeInfo'=>$nodeInfo + ]) ?> + +
diff --git a/src/node/views/dashboard/create.php b/src/node/views/dashboard/create.php new file mode 100644 index 00000000..bd688f9f --- /dev/null +++ b/src/node/views/dashboard/create.php @@ -0,0 +1,26 @@ +title = 'Launch a Hosted Node!'; +$this->params['breadcrumbs'][] = $this->title; +?> +
+ +

title) ?>

+

This is extremely ALPHA!

+

+

+

+ render('_form-create', [ + 'model' => $model, + ]) ?> + +
diff --git a/src/node/views/dashboard/index.php b/src/node/views/dashboard/index.php new file mode 100644 index 00000000..d3b75fb4 --- /dev/null +++ b/src/node/views/dashboard/index.php @@ -0,0 +1,60 @@ +title = 'LN Nodes'; +$this->params['breadcrumbs'][] = $this->title; + + + +if ($details = \LNPay::$app->session->getFlash('new_node_details')) { + \LNPay::$app->session->set('new_node_details_1',$details); + \yii\bootstrap\Modal::begin([ + 'id'=>'cred-modal', + 'header' => '

'.$details['node_id'].' Credentials

', + 'clientOptions' => ['backdrop' => 'static','tabindex'=>'-1'] + ]); + + echo 'You will NOT be able to access these again!'; + echo '
'; + echo Html::a('Download Credentials ',['/node/dashboard/dl-cred'],['onClick'=>'$("#cred-modal").modal("hide");']); + + \yii\bootstrap\Modal::end(); + $this->registerJs('$("#cred-modal").modal("show");'); +} + +?> + +count() > 0) { ?> +
+

Available Nodes

+ +
+ all() as $node) { ?> +
+
+

getInfoValueByKey('alias');?>

+
+

+ user_id == \LNPay::$app->user->id) { ?> + getInfoValueByKey('version');?> + +

+

network;?>

+
+

+ user_id == \LNPay::$app->user->id) { ?> + ',['/node/ln/index','id'=>$node->id],['class'=>'btn btn-primary']);?> + + org->display_name;?> + +

+
+
+
+ +
+ + +
\ No newline at end of file diff --git a/src/node/views/dashboard/provisioning.php b/src/node/views/dashboard/provisioning.php new file mode 100644 index 00000000..c60cff12 --- /dev/null +++ b/src/node/views/dashboard/provisioning.php @@ -0,0 +1,21 @@ +
+
+
+

Provisioning....

+

Hang tight while we create this node.

+
+

In the meantime, you can view the docs.

+

+ LNPay API Docs +

+ +
+
+
+ +
+
+ +
+ +
\ No newline at end of file diff --git a/src/node/views/dashboard/update.php b/src/node/views/dashboard/update.php new file mode 100644 index 00000000..6a9a2bea --- /dev/null +++ b/src/node/views/dashboard/update.php @@ -0,0 +1,21 @@ +title = 'Update Ln Node: ' . $model->id; +$this->params['breadcrumbs'][] = ['label' => 'Ln Nodes', 'url' => ['index']]; +$this->params['breadcrumbs'][] = ['label' => $model->id, 'url' => ['view', 'id' => $model->id]]; +$this->params['breadcrumbs'][] = 'Update'; +?> +
+ +

title) ?>

+ + render('_form', [ + 'model' => $model, + ]) ?> + +
diff --git a/src/node/views/ln/_connect-base64.php b/src/node/views/ln/_connect-base64.php new file mode 100644 index 00000000..32cba32d --- /dev/null +++ b/src/node/views/ln/_connect-base64.php @@ -0,0 +1,10 @@ +

TLS Cert

+
tls_cert));?>
+ + +

Macaroons

+lnNodeProfiles as $lnp) { + echo $lnp->user_label; + echo "
"; + echo '
'.$lnp->macaroonObject->base64."
"; +} ?> diff --git a/src/node/views/ln/_connect-files.php b/src/node/views/ln/_connect-files.php new file mode 100644 index 00000000..e69de29b diff --git a/src/node/views/ln/_connect-hex.php b/src/node/views/ln/_connect-hex.php new file mode 100644 index 00000000..5237d90f --- /dev/null +++ b/src/node/views/ln/_connect-hex.php @@ -0,0 +1,10 @@ +

TLS Cert

+
tls_cert;?>
+ + +

Macaroons

+lnNodeProfiles as $lnp) { + echo $lnp->user_label; + echo "
"; + echo '
'.$lnp->macaroonObject->hex."
"; +} ?> diff --git a/src/node/views/ln/_connect-lndconnect.php b/src/node/views/ln/_connect-lndconnect.php new file mode 100644 index 00000000..e93ac158 --- /dev/null +++ b/src/node/views/ln/_connect-lndconnect.php @@ -0,0 +1,12 @@ +

LNDConnect by macaroon

+lnNodeProfiles as $lnp) { + echo $lnp->user_label; + echo "
"; + echo '
'.$lnp->lndConnectString."
"; + + if (strlen($lnp->lndConnectString)<2953) + echo 'QR Code'; + + echo "
"; + echo "
"; +} ?> diff --git a/src/node/views/ln/_node-details.php b/src/node/views/ln/_node-details.php new file mode 100644 index 00000000..6c813203 --- /dev/null +++ b/src/node/views/ln/_node-details.php @@ -0,0 +1,63 @@ + +
+
+ $node, + 'attributes' => [ + 'alias', + 'default_pubkey', + 'network', + [ + 'label' => 'Implementation', + 'value' => $node->lnNodeImplementation->display_name + ], + [ + 'label' => 'Version', + 'value' => $node->getInfoValueByKey('version'), + ], + [ + 'label' => 'Synced to chain', + 'value' => $node->getInfoValueByKey('synced_to_chain'), + ], + [ + 'label' => 'Synced to graph', + 'value' => $node->getInfoValueByKey('synced_to_graph'), + ], + [ + 'label' => 'Block Height', + 'value' => $node->getInfoValueByKey('block_height'), + ], + [ + 'label' => 'Num Peers', + 'value' => $node->getInfoValueByKey('num_peers'), + ], + [ + 'label' => 'Num Active Channels', + 'value' => $node->getInfoValueByKey('num_active_channels'), + ], + [ + 'label' => 'Num Pending Channels', + 'value' => $node->getInfoValueByKey('num_pending_channels'), + ], + 'created_at:datetime', + 'updated_at:datetime', + ], + ]); + ?> + + +
diff --git a/src/node/views/ln/connect.php b/src/node/views/ln/connect.php new file mode 100644 index 00000000..1d5d6aff --- /dev/null +++ b/src/node/views/ln/connect.php @@ -0,0 +1,56 @@ +title = 'Connect'; +$this->params['breadcrumbs'][] = $this->title; +?> + +

Connect to your node

+ $node, + 'attributes' => [ + 'uri', + [ + 'label' => 'gRPC Host', + 'value' => $node->host.':'.$node->rpc_port + ], + [ + 'label' => 'REST Host', + 'value' => 'https://'.$node->host.':'.$node->rest_port, + ], + ], +]); + + +echo \yii\bootstrap\Tabs::widget([ + 'items' => [ + [ + 'label' => 'Hex', + 'content' => $this->render('_connect-hex',compact('node')), + 'active' => true + ], + [ + 'label' => 'Base64', + 'content' => $this->render('_connect-base64',compact('node')), + 'headerOptions' => [], + ], + [ + 'label' => 'LNDConnect', + 'content' =>$this->render('_connect-lndconnect',compact('node')) + ], + ], +]); + +?> diff --git a/src/node/views/ln/network_fees.php b/src/node/views/ln/network_fees.php new file mode 100644 index 00000000..db056085 --- /dev/null +++ b/src/node/views/ln/network_fees.php @@ -0,0 +1,44 @@ +title = 'Lightning Network Fees'; +$feeTargetWallet = \LNPay::$app->user->identity->getJsonData(\lnpay\models\User::DATA_FEE_TARGET_WALLET); +$feeWallet = $node->feeWallet; +?> + +

Lightning Network Fees

+

+ + +

+ +
+

+ See below for fee settings. +

+

+ + Current INBOUND (deposits) fee rate: user->identity->getServiceFeeRate(\lnpay\wallet\models\WalletTransactionType::LN_DEPOSIT)*100;?>% +
+ Current OUTBOUND (withdrawals) fee rate: user->identity->getServiceFeeRate(\lnpay\wallet\models\WalletTransactionType::LN_WITHDRAWAL)*100;?>% +
+ Current TRANSFER (transfers) fee rate: 0% +
+ + Lightning Network routing fees: wallet +
+ Max routing fee allowed: user->identity->getJsonData(\lnpay\models\User::DATA_MAX_NETWORK_FEE_PERCENT)?:5);?>% +

+ +
+

+ ',['/wallet/view','id'=>$feeWallet->external_hash],['class'=>'btn btn-primary']); ?> +

+
+
diff --git a/src/node/views/ln/node.php b/src/node/views/ln/node.php new file mode 100644 index 00000000..0d0d9898 --- /dev/null +++ b/src/node/views/ln/node.php @@ -0,0 +1,95 @@ +title = 'LN Node Dashboard'; +$this->params['breadcrumbs'][] = 'Dashboard'; + +$activeChannels = $node->getInfoValueByKey('num_active_channels'); +$onchain_active = $node->onchain_total_sats > 0; +$nodeReady = $activeChannels && $onchain_active && $gi; +?> + +
+
+
+
+
+ +
+
Max Send
+

Sats

+
+
+
+
+
+
+
+ +
+
Max Receive
+

Sats

+
+
+
+
+
+
+
+ +
+
On-Chain Balance
+

onchain_total_sats) ?? 0;?> Sats

+
+
+
+
+
+
+
+ +
+
Lightning Balance
+

Sats

+
+
+
+
+ [ + [ + 'label' => 'Info', + 'content' => $this->render('_node-details', compact('node')), + 'active' => true + ], + /*[ + 'label' => 'Macaroons', + 'content' => 'Anim pariatur cliche...', + 'headerOptions' => [], + 'options' => ['id' => 'myveryownID'], + ], + [ + 'label' => 'RPC Listeners', + 'content' => $this->render('../rpc/rpc-listeners',compact('dataProvider')) + ],*/ + ], + ]); + + echo Html::a('Refresh Getinfo (REST)', ['/node/ln/test-call'], ['class' => 'btn btn-primary']); + +?> + + + diff --git a/src/node/views/ln/onchain.php b/src/node/views/ln/onchain.php new file mode 100644 index 00000000..daa0cf29 --- /dev/null +++ b/src/node/views/ln/onchain.php @@ -0,0 +1,35 @@ +title = 'On-chain'; +$this->params['breadcrumbs'][] = 'Info'; +?> + + +
+

+ +

    +
  • Total On-chain Balance: onchain_total_sats/100000000;?> BTC
  • +
  • Unconfirmed On-chain Balance: onchain_unconfirmed_sats;?> BTC
  • +
  • Confirmed On-chain Balance: onchain_confirmed_sats/100000000;?> BTC
  • +
+

+ +

Deposit onchain:

+ +
onchain_nextaddr;?>
+ +
+'btn btn-primary']); ?> + diff --git a/src/node/views/ln/settings.php b/src/node/views/ln/settings.php new file mode 100644 index 00000000..5ca91b5d --- /dev/null +++ b/src/node/views/ln/settings.php @@ -0,0 +1,27 @@ +title = $node->id; +$this->params['breadcrumbs'][] = $this->title; +?> + +
+ +

title) ?>

+ +

+

Delete Node

+ $node->id], [ + 'class' => 'btn btn-danger', + 'data' => [ + 'confirm' => 'Are you sure you want to delete this node? Cannot be undone!', + 'method' => 'post', + ], + ]) ?> +

+
diff --git a/src/node/views/rpc/_rpc-listeners-item.php b/src/node/views/rpc/_rpc-listeners-item.php new file mode 100644 index 00000000..26c0771b --- /dev/null +++ b/src/node/views/rpc/_rpc-listeners-item.php @@ -0,0 +1,48 @@ + +
+
+
+

+

+ supervisorProcessInfo; + if ($info['statename']=='RUNNING') { ?> + + + + +
+ +
+
+ 'stop','nl_id'=>$model->id],['class'=>'btn btn-danger']); + break; + case 'STOPPED': + case 'EXITED': + case 'FATAL': + case null: + //START + echo \yii\helpers\Html::a('Start Listener',['/node/rpc/control-listener','action'=>'start','nl_id'=>$model->id],['class'=>'btn btn-success']); + break; + case 'STOPPING': + case 'STARTING': + case 'BACKOFF': + //CHILL + break; + } + ?> +
+
+
+ + \ No newline at end of file diff --git a/src/node/views/rpc/rpc-forwarder.php b/src/node/views/rpc/rpc-forwarder.php new file mode 100644 index 00000000..27fcb34d --- /dev/null +++ b/src/node/views/rpc/rpc-forwarder.php @@ -0,0 +1,47 @@ +title = 'RPC Event Forwarder'; +$this->params['breadcrumbs'][] = $this->title; + + + +?> + + 'Please see '.Html::a('Webhooks: Getting Started','https://docs.lnpay.co/webhooks/getting-started',['target'=>'_blank']).' for more info', + 'options' => [ + 'class' => 'alert-info', + ], +]); + +?> +
+ +

+ ', ['/webhook/create'], ['class' => 'btn btn-success']) ?> +

+ +

+ ', ['/developers/webhook'], ['class' => 'btn btn-info']) ?> +

+ +

RPC Events can be configured to be forwarded to an HTTP endpoint via webhooks.

See the reference below for the object data that is passed through

+ +

LND GRPC API Reference

+ + render('_search', ['model' => $searchModel]); ?> + + + +
diff --git a/src/node/views/rpc/rpc-listeners.php b/src/node/views/rpc/rpc-listeners.php new file mode 100644 index 00000000..2f6b291c --- /dev/null +++ b/src/node/views/rpc/rpc-listeners.php @@ -0,0 +1,85 @@ +title = 'RPC Listeners'; +$this->params['breadcrumbs'][] = $this->title; + + +?> +

RPC Listeners

+

+ Starting a RPC Listener initiates the server -> client stream of data from the node. These events can be forwarded + to an HTTP endpoint. The point of this is to save you the hassle of maintaining your own RPC listeners. +

+
+ + $dataProvider, + //'filterModel' => $searchModel, + 'columns' => [ + [ + 'header'=>'Status', + 'format'=>'raw', + 'value'=>function($model) { + $info = $model->supervisorProcessInfo; + if ($info['statename']=='RUNNING') + return ''; + else + return ''; + } + ], + 'method', + 'updated_at:datetime', + [ + 'header'=>'Node', + 'value'=>'lnNode.alias' + ], + //'is_default', + + //'status_type_id', + //'macaroon_hex:ntext', + //'username', + //'password', + //'access_key', + //'json_data', + + [ + 'header'=>'Action', + 'format'=>'raw', + 'value'=>function($model) { + $info = $model->supervisorProcessInfo; + switch ($info['statename']) { + case 'RUNNING': + //STOP + return \yii\helpers\Html::a('Stop Listener',['/node/rpc/listeners','action'=>'stop','nl_id'=>$model->id],['class'=>'btn btn-danger']); + break; + case 'STOPPED': + case 'EXITED': + case 'FATAL': + case null: + //START + return \yii\helpers\Html::a('Start Listener',['/node/rpc/listeners','action'=>'start','nl_id'=>$model->id],['class'=>'btn btn-success']); + break; + case 'STOPPING': + case 'STARTING': + case 'BACKOFF': + //CHILL + break; + } + } + ] + ], + ]); ?> + + Destroy and Create listeners +
+ diff --git a/src/org/Module.php b/src/org/Module.php new file mode 100644 index 00000000..939fcd07 --- /dev/null +++ b/src/org/Module.php @@ -0,0 +1,54 @@ +urlManager->addRules([[ + 'class' => GroupUrlRule::class, + 'prefix' => $this->id, + 'rules' => [ + //Admin dashboard stuff + '/' => '/view', + '/' => '/', + ], + ]], false); + } + + public function behaviors() + { + return [ + 'access' => [ + 'class' => AccessControl::class, + 'rules' => [ + [ + 'allow' => true, + 'controllers' => ['org/*'], + 'roles' => ['@'], + ], + ], + ], + ]; + } +} \ No newline at end of file diff --git a/src/org/controllers/BaseOrgController.php b/src/org/controllers/BaseOrgController.php new file mode 100644 index 00000000..fd1b423d --- /dev/null +++ b/src/org/controllers/BaseOrgController.php @@ -0,0 +1,31 @@ +user->identity; + $this->orgObject = $user->org; + + \LNPay::$app->getView()->params['breadcrumbs'][] = ['label' => $this->orgObject->display_name, 'url' => ['view']]; + + return true; + } + + } +} diff --git a/src/org/controllers/HomeController.php b/src/org/controllers/HomeController.php new file mode 100644 index 00000000..28d10947 --- /dev/null +++ b/src/org/controllers/HomeController.php @@ -0,0 +1,43 @@ +render('index', [ + 'org' => $this->orgObject, + ]); + } + + public function actionMembers() + { + if (\LNPay::$app->user->identity->org_user_type_id != OrgUserType::TYPE_OWNER) { + \LNPay::$app->session->setFlash('error','Must be org owner!'); + return $this->redirect('view'); + } + + + $dataProvider = new ActiveDataProvider([ + 'query' => $this->orgObject->getUsers() + ]); + + return $this->render('members', [ + 'org' => $this->orgObject, + 'dataProvider'=>$dataProvider + ]); + } +} diff --git a/src/org/models/Org.php b/src/org/models/Org.php new file mode 100644 index 00000000..8f347e04 --- /dev/null +++ b/src/org/models/Org.php @@ -0,0 +1,110 @@ +'org_'.HelperComponent::generateRandomString(8)], + [['status_type_id'],'default','value'=>StatusType::ORG_ACTIVE], + [['json_data'], 'safe'], + [['name', 'display_name'], 'string', 'max' => 255], + [['external_hash'], 'string', 'max' => 128], + ]; + } + + /** + * {@inheritdoc} + */ + public function attributeLabels() + { + return [ + 'id' => 'ID', + 'created_at' => 'Created At', + 'updated_at' => 'Updated At', + 'name' => 'Name', + 'display_name' => 'Display Name', + 'external_hash' => 'External Hash', + 'status_type_id' => 'Status Type ID', + 'json_data' => 'Json Data', + ]; + } + + /** + * Gets query for [[LnNodes]]. + * + * @return \yii\db\ActiveQuery + */ + public function getLnNodes() + { + return $this->hasMany(LnNode::className(), ['org_id' => 'id']); + } + + /** + * Gets query for [[StatusType]]. + * + * @return \yii\db\ActiveQuery + */ + public function getStatusType() + { + return $this->hasOne(StatusType::className(), ['id' => 'status_type_id']); + } + + /** + * Gets query for [[Users]]. + * + * @return \yii\db\ActiveQuery + */ + public function getUsers() + { + return $this->hasMany(User::className(), ['org_id' => 'id']); + } +} diff --git a/src/org/models/OrgUserType.php b/src/org/models/OrgUserType.php new file mode 100644 index 00000000..6d86423f --- /dev/null +++ b/src/org/models/OrgUserType.php @@ -0,0 +1,63 @@ + 255], + ]; + } + + /** + * {@inheritdoc} + */ + public function attributeLabels() + { + return [ + 'id' => 'ID', + 'name' => 'Name', + 'display_name' => 'Display Name', + ]; + } + + /** + * Gets query for [[Users]]. + * + * @return \yii\db\ActiveQuery + */ + public function getUsers() + { + return $this->hasMany(User::className(), ['org_user_type_id' => 'id']); + } +} diff --git a/src/org/views/_nav-org.php b/src/org/views/_nav-org.php new file mode 100644 index 00000000..00630b72 --- /dev/null +++ b/src/org/views/_nav-org.php @@ -0,0 +1,16 @@ +render('@app/views/layouts/sidebar/__base_sidebar'); ?> + + + + diff --git a/src/org/views/home/index.php b/src/org/views/home/index.php new file mode 100644 index 00000000..509d6cba --- /dev/null +++ b/src/org/views/home/index.php @@ -0,0 +1,31 @@ +title = $org->display_name; + +?> +

Organization Details

+ $org, + 'attributes' => [ + [ + 'label'=>'ID', + 'value'=>function($model) { return $model->external_hash; } + ], + 'display_name', + 'created_at:datetime', + [ + 'label'=>'Status', + 'value'=>function($model) { return $model->statusType->display_name; } + ], + ] + ]); +?> + + + \ No newline at end of file diff --git a/src/org/views/home/members.php b/src/org/views/home/members.php new file mode 100644 index 00000000..e6ef943e --- /dev/null +++ b/src/org/views/home/members.php @@ -0,0 +1,22 @@ +title = $org->display_name; + +?> +

Member Details

+ $dataProvider, + 'columns' => [ + 'email', + 'created_at:datetime', + 'orgUserType.display_name' + ], +]); ?> + + + \ No newline at end of file diff --git a/src/views/account/_change-password.php b/src/views/account/_change-password.php new file mode 100644 index 00000000..877f3543 --- /dev/null +++ b/src/views/account/_change-password.php @@ -0,0 +1,46 @@ +title = 'Change Password'; + $this->beginContent('@app/views/layouts/sidebar/_nav-account.php'); +?> + 'changepassword-form', + 'options' => ['class' => 'form-horizontal'], + 'fieldConfig' => [ + 'template' => "{label}\n
+ {input}
\n
+ {error}
", + 'labelOptions' => ['class' => 'col-lg-3 control-label'], + ], +]); ?> +field($model, 'currentPassword', [ + 'inputOptions' => [ + 'placeholder' => 'Current Password', + 'class' => 'form-control' + ] +])->passwordInput() ?> + +field($model, 'newPassword', [ + 'inputOptions' => [ + 'placeholder' => 'New Password', + 'class' => 'form-control' + ] +])->passwordInput() ?> + +field($model, 'confirmNewPassword', [ + 'inputOptions' => [ + 'placeholder' => 'Confirm New Password', + 'class' => 'form-control' + ] +])->passwordInput() ?> + +
+
+ 'btn btn-primary btn-block' + ]) ?> +
+
+ + +endContent(); ?> diff --git a/src/views/account/account-index.php b/src/views/account/account-index.php new file mode 100644 index 00000000..c58d11b1 --- /dev/null +++ b/src/views/account/account-index.php @@ -0,0 +1,42 @@ +title = 'Account Details'; +$this->beginContent('@app/views/layouts/sidebar/_nav-account.php'); +?> +user->identity->external_hash; +if (!\LNPay::$app->user->identity->isActivated) { ?> +
+

Account Pending Activation

+

+ Request Verification +

+
+ + + + $userModel, + 'attributes' => [ + [ + 'label'=>'ID', + 'value'=>function($model) { return $model->external_hash; } + ], + 'created_at:datetime', + 'tz', + 'email', + [ + 'label'=>'Activated', + 'value'=>function($model) { return $model->isActivated?:'Pending Activation'; } + ], + ] + ]); +?> + +endContent(); +?> \ No newline at end of file diff --git a/src/views/account/mfa.php b/src/views/account/mfa.php new file mode 100644 index 00000000..5c2ad713 --- /dev/null +++ b/src/views/account/mfa.php @@ -0,0 +1,31 @@ +title = 'Multi-factor Authentication'; +$this->beginContent('@app/views/layouts/sidebar/_nav-settings.php'); + +?> + +

MFA

+ +
+ user->identity->mfaSecretKey) { + + echo QrCodeWidget::widget([ + 'label' => \LNPay::$app->user->identity->email, + 'issuer' => \LNPay::$app->name + ]); + } else { + echo \yii\helpers\Html::a('Turn on MFA'); + } + + ?> +
+ + + +endContent(); + +?> \ No newline at end of file diff --git a/src/views/account/product.php b/src/views/account/product.php new file mode 100644 index 00000000..a7d08d7e --- /dev/null +++ b/src/views/account/product.php @@ -0,0 +1,41 @@ +title = 'Your Products'; +$this->beginContent('@app/views/layouts/sidebar/_nav-account.php'); +$user = \LNPay::$app->user->identity; +$usage = $user->getWalletAPIUsageByPeriod(strtotime('-30 days'),time()); + +?> + +

Products

+ +
+
+

Usage

+ + + + + + + + + + + + + +
LimitsUsage (past 30 days)
+ Invoice Limit: getJsonData(User::DATA_MAX_DEPOSIT)?:'unlimited').' sat';?>
+ Send Limit: getJsonData(User::DATA_MAX_WITHDRAWAL)?:'unlimited').' sat';?> +
Sats Received
Sats Sent
+
+
+ + + + +endContent(); + +?> \ No newline at end of file diff --git a/src/views/api-log/_search.php b/src/views/api-log/_search.php new file mode 100644 index 00000000..781e966d --- /dev/null +++ b/src/views/api-log/_search.php @@ -0,0 +1,58 @@ + + + diff --git a/src/views/api-log/index.php b/src/views/api-log/index.php new file mode 100644 index 00000000..dae2d807 --- /dev/null +++ b/src/views/api-log/index.php @@ -0,0 +1,56 @@ +title = 'API Logs'; +$this->params['breadcrumbs'][] = $this->title; +?> + +
+ +

title) ?> (3 days)

+ + + render('_search', ['model' => $searchModel]); ?> + + $dataProvider, + 'filterModel' => $searchModel, + 'pager' => [ + 'class' => 'yii\bootstrap4\LinkPager' + ], + 'columns' => [ + [ + 'class' => 'yii\grid\ActionColumn', + 'header' => 'Actions', + 'template' => '{view}', + ], + 'created_at:datetime', + 'status_code', + 'method', + 'request_path', + //'external_hash', + //'api_key', + //'ip_address', + //'sdk', + //'method', + //'base_url:url', + //'request_path', + //'request_body:ntext', + //'request_headers:ntext', + //'status_code', + //'response_body:ntext', + //'response_headers:ntext', + + + ], + ]); ?> + + + +
diff --git a/src/views/api-log/view.php b/src/views/api-log/view.php new file mode 100644 index 00000000..8b9f8d4d --- /dev/null +++ b/src/views/api-log/view.php @@ -0,0 +1,44 @@ +title = $model->external_hash; +$this->params['breadcrumbs'][] = ['label' => 'User Api Logs', 'url' => ['index']]; +$this->params['breadcrumbs'][] = $this->title; +\yii\web\YiiAsset::register($this); +?> + +
+ +

title) ?>

+ + $model, + 'attributes' => [ + 'external_hash', + 'created_at:datetime', + 'ip_address', + 'sdk', + 'method', + 'base_url', + 'request_path', + [ + 'attribute'=>'request_body', + 'value'=>function($model) { return "
{$model->request_body}
"; }, + 'format'=>'raw' + ], + //'request_headers:ntext', + 'status_code', + [ + 'attribute'=>'response_body', + 'value'=>function($model) { return "
{$model->response_body}
"; }, + 'format'=>'raw' + ], + ], + ]) ?> + +
diff --git a/src/views/dashboard/_faucet-grid.php b/src/views/dashboard/_faucet-grid.php new file mode 100644 index 00000000..1bce3781 --- /dev/null +++ b/src/views/dashboard/_faucet-grid.php @@ -0,0 +1,86 @@ + $userDp, + 'summary' => '', + //'tableOptions' => ['class' => ''], + //'headerRowOptions' => ['class' => 'table-header'], + 'columns' => [ + 'created_at:datetime', + [ + 'header'=>'Label', + 'contentOptions' => ['class'=>'','style'=>'width:125px'], + 'attribute'=>'user_label' + ], + [ + 'header'=>'Start Balance', + 'contentOptions' => ['class' => ''], + 'value'=>function ($model) { + return + "" . $model->start_balance . " sats"; + }, + 'format' => 'raw' + ], + [ + 'header'=>'Total Withdrawn', + 'contentOptions' => ['class' => ''], + 'value'=>function ($model) { + return + "" . $model->total_withdrawn . " sats"; + }, + 'format' => 'raw' + ], + [ + 'header'=>'Remaining Balance', + 'contentOptions' => ['class' => ''], + 'value'=>function ($model) { + return + "" . $model->remaining_balance . " sats"; + }, + 'format' => 'raw' + ], + [ + 'header'=>'Status', + 'contentOptions' => ['class' => ''], + 'value'=>function ($model) { + if($model->status_type_id === \lnpay\models\StatusType::FAUCET_ACTIVE) { + return "{$model->statusType->display_name}"; + } else { + return "{$model->statusType->display_name}"; + } + }, + 'format' => 'raw' + ], + /* + [ + 'header'=>'Usage', + 'headerOptions' => ['style' => 'text-align: right;', 'class' => 'visible-sm visible-md visible-lg'], + 'contentOptions' => ['class' => 'number usage-data'], + 'value'=>function ($model) { + + return "" . 1 . " clicks
" . + "" . 2 . " conversions
" . + "" . 3 . " PTR
" + ; + }, + 'format'=>'raw' + ],*/ + [ + 'class' => 'yii\grid\ActionColumn', + 'header' => 'Actions', + 'template' => '{view}', + //'headerOptions' => ['class' => 'visible-sm visible-md visible-lg'], + 'contentOptions' => ['style' => 'text-align: center;', 'class' => ''], + 'buttons' => [ + 'view' => function ($url, $model) { + return Html::a('Details ', ['/faucet-gen/view','id'=>$model->id], [ + 'title' => \LNPay::t('app', 'lead-update'), + ]); + } + ] + ] + ], +]); ?> \ No newline at end of file diff --git a/src/views/dashboard/_invoices-breakdown.php b/src/views/dashboard/_invoices-breakdown.php new file mode 100644 index 00000000..42b09562 --- /dev/null +++ b/src/views/dashboard/_invoices-breakdown.php @@ -0,0 +1,45 @@ + $userInvoiceQuery, + 'filterModel'=>$searchModel, + 'summary' => '', + 'tableOptions' => ['class' => 'table'], + 'headerRowOptions' => ['class' => 'table-header'], + 'columns' => [ + 'id', + [ + 'header'=>'Time', + 'attribute'=>function ($model) { + return date(' g:i:s A T',$model->created_at) . '
' . + date('M j, Y',$model->created_at); + }, + 'format'=>'raw' + ], + [ + 'header'=>'Amount', + 'value'=>function ($model) { + return + "" . $model->num_satoshis . " sats
"; + }, + 'format'=>'raw' + ], + [ + 'header'=>'Settled', + 'attribute'=>'settled', + 'value'=>function($model) { + if($model->settled === 0) { + return "Unpaid"; + } else { + return "Paid"; + } + }, + 'filter' => [1 => 'Paid', 0 => 'Unpaid'], + 'format'=>'raw' + ], + 'memo', + 'settled_at:date' + ], +]); ?> \ No newline at end of file diff --git a/src/views/dashboard/_layouts.php b/src/views/dashboard/_layouts.php new file mode 100644 index 00000000..ea640680 --- /dev/null +++ b/src/views/dashboard/_layouts.php @@ -0,0 +1,48 @@ +title = 'Custom CSS Layouts'; +?> +

Add custom CSS Layouts to your paywalls!

+ $layoutDp, + 'summary' => '', + 'tableOptions' => ['class' => 'table paywalls-table'], + 'headerRowOptions' => ['class' => 'table-header'], + 'columns' => [ + [ + 'header'=>'ID', + 'attribute'=>'external_hash' + ], + [ + 'header'=>'Label', + 'attribute'=>'label' + ], + [ + 'header'=>'CSS', + 'attribute'=>'css' + ], + [ + 'class' => 'yii\grid\ActionColumn', + 'header' => 'Actions', + 'template' => '{update}{delete}', + 'buttons' => [ + 'update' => function ($url, $model) { + return Html::a(' ', ['/user-layout/update','id'=>$model->id], [ + 'title' => \LNPay::t('app', 'lead-update'), + ]); + }, + 'delete' => function ($url, $model) { + return Html::a(' ', ['/user-layout/delete','id'=>$model->id], [ + 'data-confirm' => \LNPay::t('yii', 'Are you sure you want to delete this layout?'), + 'data-method' => 'post', + 'title'=>\LNPay::t('app', 'lead-delete'), + ]); + } + + ] + ] + + ], +]); ?> \ No newline at end of file diff --git a/src/views/dashboard/_link-breakdown.php b/src/views/dashboard/_link-breakdown.php new file mode 100644 index 00000000..3f7a5e40 --- /dev/null +++ b/src/views/dashboard/_link-breakdown.php @@ -0,0 +1,59 @@ + $breakdownQuery, + 'filterModel'=>$breakdownSearch, + 'summary' => '', + 'tableOptions' => ['class' => 'table'], + 'headerRowOptions' => ['class' => 'table-header'], + 'columns' => [ + 'id', + [ + 'header'=>'Time', + 'attribute'=>function ($model) { + return date(' g:i:s A T',$model->updated_at) . '
' . + date('M j, Y',$model->updated_at); + }, + 'format'=>'raw' + ], + 'memo', + [ + 'header'=>'paid', + 'attribute'=>'settled', + 'value'=>function($model) { + if($model->settled === 0) { + return "Unpaid"; + } else { + return "Paid"; + } + }, + 'format'=>'raw', + 'filter'=>[0=>'Unpaid',1=>'Paid'] + ], + [ + 'header'=>'Referrer', + 'value'=>function ($model) { + return HtmlPurifier::process($model->referrer); + } + ], + [ + 'header'=>'Custom data', + 'format'=>'raw', + 'value'=>function ($model) { + $data = $model->getJsonData(); + $str = ''; + if (!empty($data)) { + + foreach ($data as $key => $value) { + $str .= $key."=".$value."
"; + $str = HtmlPurifier::process($str); + } + } + return $str; + } + ], + ], +]); ?> \ No newline at end of file diff --git a/src/views/dashboard/_link-totals.php b/src/views/dashboard/_link-totals.php new file mode 100644 index 00000000..948d7817 --- /dev/null +++ b/src/views/dashboard/_link-totals.php @@ -0,0 +1,75 @@ + $userDp, + 'summary' => '', + 'tableOptions' => ['class' => 'table paywalls-table'], + 'headerRowOptions' => ['class' => 'table-header'], + 'columns' => [ + [ + 'header'=>'Memo', + 'contentOptions' => ['class'=>'memo-data','style'=>'width:125px'], + 'value'=>function ($model) { + return + "" . HtmlPurifier::process($model->memo?:"(no memo)") . "
" . + Html::a($model->getUrl(),$model->getUrl(),['target'=>'_blank', "class"=>"view-paywall-link", "style"=>"font-size: 12px;"]) . " -> " . Html::a(HtmlPurifier::process($model->destination_url),$model->destination_url,['target'=>'_blank', "style"=>"font-size: 12px;"]); + }, + 'format'=>'raw' + ], + [ + 'header'=>'', + 'contentOptions' => ['class' => 'number success-data'], + 'value'=>function ($model) { + return + "" . $model->totalSettledSats . " sats earned"; + }, + 'format' => 'raw' + ], + [ + 'header'=>'', + 'contentOptions' => ['class' => 'layout-data'], + 'value'=>function ($model) { + return + "" . (HtmlPurifier::process(@$model->linkType->display_name)?:'Default') . ""; + }, + 'format' => 'raw' + ], + [ + 'header'=>'Usage', + 'headerOptions' => ['style' => 'text-align: right;', 'class' => 'visible-sm visible-md visible-lg'], + 'contentOptions' => ['class' => 'number usage-data'], + 'value'=>function ($model) { + + return "" . $model->overallPaywallStats['clicks'] . " clicks
" . + "" . $model->overallPaywallStats['conversions'] . " conversions
" . + "" . $model->overallPaywallStats['ptr'] . " PTR
" + ; + }, + 'format'=>'raw' + ], + [ + 'class' => 'yii\grid\ActionColumn', + 'header' => 'Actions', + 'template' => '{view}', + 'headerOptions' => ['class' => 'visible-sm visible-md visible-lg'], + 'contentOptions' => ['style' => 'text-align: center;', 'class' => 'action-data'], + 'buttons' => [ + 'view' => function ($url, $model) { + switch ($model->link_type_id) { + case \lnpay\models\link\Type::TYPE_POS: + $t = '/link/view-pos'; + break; + default: + $t = '/link/view'; + } + return Html::a('Details ', [$t,'id'=>$model->id], [ + 'title' => \LNPay::t('app', 'lead-update'), + ]); + } + ] + ] + ], +]); ?> \ No newline at end of file diff --git a/src/views/dashboard/_withdraw.php b/src/views/dashboard/_withdraw.php new file mode 100644 index 00000000..bbf9d4dc --- /dev/null +++ b/src/views/dashboard/_withdraw.php @@ -0,0 +1,27 @@ + + user->identity->eligibleToWithdraw) { ?> + 'horizontal', + 'enableAjaxValidation'=>true, + 'options'=>[ + 'id'=>'withdrawForm', + 'class'=>'ajaxFormLoader' + ], + 'validationUrl'=>'/dashboard/validate-withdrawal' + ]); ?> + errorSummary($model); ?> + + field($wModel, 'invoice_request')->textArea(['placeholder'=>'lnbc10u1pwcxqfkpp5e9nu85e6fypp89ql0hnz7yj784jatyytugewmpwe9yqhla7zvg3sdqdfdshjsn92djk2cqzpgjuk3ljzzrqhwsfr36h0nnyzy3gx3sna3fdnj9pkcqakjnkly0cdhk0lagf763mtegeld78qdpwf7t52mvgxl3f8neuty8y0pvvvffjcp96x09n', 'rows'=>4]); ?> + 'styled-button-success','style'=>'white-space:unset;']) ?> + + + + + \ No newline at end of file diff --git a/src/views/dashboard/_withdrawals-breakdown.php b/src/views/dashboard/_withdrawals-breakdown.php new file mode 100644 index 00000000..da2fe7b2 --- /dev/null +++ b/src/views/dashboard/_withdrawals-breakdown.php @@ -0,0 +1,40 @@ + $transactionQuery, + 'summary' => '', + 'tableOptions' => ['class' => 'table'], + 'headerRowOptions' => ['class' => 'table-header'], + 'columns' => [ + [ + 'header'=>'Time', + 'attribute'=>function ($model) { + return date(' g:i:s A T',$model->created_at) . '
' . + date('M j, Y',$model->created_at); + }, + 'format'=>'raw' + ], + [ + 'header'=>'Amount', + 'value'=>function ($model) { + return + "" . $model->num_satoshis . " sats
"; + }, + 'format'=>'raw' + ], + [ + 'header'=>'Settled', + 'attribute'=>'settled', + 'value'=>function($model) { + if($model->settled === 0) { + return "Unsettled"; + } else { + return "Settled"; + } + }, + 'format'=>'raw' + ] + ], +]); ?> \ No newline at end of file diff --git a/src/views/dashboard/advanced-wallets.php b/src/views/dashboard/advanced-wallets.php new file mode 100644 index 00000000..7c673f08 --- /dev/null +++ b/src/views/dashboard/advanced-wallets.php @@ -0,0 +1,59 @@ +title = 'My Wallets'; +$this->params['breadcrumbs'][] = $this->title; + +?> +
+ + +render('_search', ['model' => $searchModel]); ?> + + $dataProvider, + 'filterModel' => $searchModel, + 'columns' => [ + //'id', + 'created_at:datetime', + 'user_label', + 'balance', + [ + 'attribute'=>'walletType.display_name', + 'header'=>'Wallet Type', + 'filter' => Html::activeDropDownList($searchModel, 'wallet_type_id', \yii\helpers\ArrayHelper::map([null=>'All']+\lnpay\wallet\models\WalletType::getAvailableWalletTypes(),'id','display_name')) + ], + + //'lnNode.alias', + //'external_hash', + //'json_data', + + [ + 'class' => 'yii\grid\ActionColumn', + 'header' => 'Actions', + 'template' => '{view}', + //'headerOptions' => ['class' => 'visible-sm visible-md visible-lg'], + 'contentOptions' => ['style' => 'text-align: center;', 'class' => ''], + 'buttons' => [ + 'view' => function ($url, $model) { + return Html::a('Details ', ['/wallet/view','id'=>$model->publicId], [ + 'title' => \LNPay::t('app', 'lead-update'), + 'data-pjax'=>0 + ]); + } + ] + ] + ], +]); ?> + + \ No newline at end of file diff --git a/src/views/dashboard/developers.php b/src/views/dashboard/developers.php new file mode 100644 index 00000000..d7b50e17 --- /dev/null +++ b/src/views/dashboard/developers.php @@ -0,0 +1,15 @@ +title = 'Developers'; +$this->params['breadcrumbs'][] = $this->title; +?> + +
+
+

Public API Key (to be used client side)

+
user->identity->getFirstAccessKeyByRole(\lnpay\behaviors\UserAccessKeyBehavior::ROLE_PUBLIC_API_KEY);?>
+

Secret API Key (to be used server side only!)

+
user->identity->getFirstAccessKeyByRole(\lnpay\behaviors\UserAccessKeyBehavior::ROLE_SECRET_API_KEY);?>
+
+
diff --git a/src/views/dashboard/events.php b/src/views/dashboard/events.php new file mode 100644 index 00000000..5093c3d4 --- /dev/null +++ b/src/views/dashboard/events.php @@ -0,0 +1,38 @@ +title = 'Events'; +$this->params['breadcrumbs'][] = $this->title; + + + +?> +beginContent('@app/views/layouts/sidebar/_nav-developers.php');?> + +
+ +

title) ?>

+ + + $afDp, + 'columns' => [ + 'created_at:datetime', + 'external_hash', + 'actionName.display_name' + + + ], + ]); ?> + +
+endContent();?> \ No newline at end of file diff --git a/src/views/dashboard/faucets.php b/src/views/dashboard/faucets.php new file mode 100644 index 00000000..04c413ba --- /dev/null +++ b/src/views/dashboard/faucets.php @@ -0,0 +1,22 @@ +beginContent('@app/views/layouts/sidebar/_nav-faucets.php');?> +title = 'My Faucets'; + $this->params['breadcrumbs'][] = $this->title; + ?> +
+

My Faucets

+
+
+
+
+
+
+ render('_faucet-grid',compact('userDp')); + ?> +
+
+
+
+
+endContent();?> \ No newline at end of file diff --git a/src/views/dashboard/home.php b/src/views/dashboard/home.php new file mode 100644 index 00000000..4a483abb --- /dev/null +++ b/src/views/dashboard/home.php @@ -0,0 +1,219 @@ +title = 'Home'; +?> + 'Please see '.Html::a('Webhooks: Getting Started','https://docs.lnpay.co/webhooks/getting-started',['target'=>'_blank']).' for more info', + 'options' => [ + 'class' => 'alert-danger', + ], +]);*/ +?> +
+
+ + +
+ + + +

Last 30 days activity

+ +
+
+
+
+
+ +
+
Total Wallets
+

+
+
+
+
+
+
+
+ +
+
Transactions (30 days)
+

+
+
+
+
+
+
+
+ +
+
Inbound Volume (30 days)
+

Sats

+
+
+
+
+
+
+
+ +
+
Outbound Volume (30 days)
+

Sats

+
+
+
+
+ + + +
+
+
+

Successful Transactions

+
+ $afDpSuccess, + 'columns' => [ + 'created_at:datetime', + [ + 'header'=>'Type', + 'value'=>'walletTransactionType.display_name', + ], + + 'num_satoshis', + ] + ]); ?> +
+
+
+

Failed Payments

+
+ $afDpFailed, + 'columns' => [ + 'created_at:datetime', + 'external_hash', + 'actionName.display_name', + //'actionDataFlat' + ] + ]); ?> +
+
+
+
+
+
+
+ +
+

Lightning Node

+

Launch a Lightning Node to harness the full power of LNPay

+ Launch Node +
+
+
+
+

Flexbox

+

Flexbox is now the default, and Bootstrap 4 supports SASS out of the box.

+ Outline +
+
+
+
+

Recent Activity (3 days)

+
+ $afDp, + 'columns' => [ + 'created_at:datetime', + 'external_hash', + 'actionName.display_name', + //'actionDataFlat' + ] + ]); ?> +
+ +
+
+ + + +
+

Account Limits

+
+
+
+
+
+

It's really good news that the new Bootstrap 4 now has support for CSS 3 flexbox.

+
Makes flexible layouts Faster
+
+
+
+
+
+
+

The Bootstrap 3.x element that was called "Panel" before, is now called a "Card".

+
All of this makes more Sense
+
+
+
+
+
+
+

There are also some interesting new text classes for uppercase and capitalize.

+
These handy utilities make it Easy
+
+
+
+
+
+
+

If you want to use cool icons in Bootstrap 4, you'll have to find your own such as Font Awesome or Ionicons.

+
The Glyphicons are not Included
+
+
+
+
+
+ + + +
+ + +
+ +
+ + + + + \ No newline at end of file diff --git a/src/views/dashboard/home_old.php b/src/views/dashboard/home_old.php new file mode 100644 index 00000000..c61df9f5 --- /dev/null +++ b/src/views/dashboard/home_old.php @@ -0,0 +1,71 @@ +title = 'Home'; +?> +

Services

+
+
+
+
+ +

Wallets

+

Create, manage, send, receive from fully functional wallets to segment your funds across services.

+

Go to Wallets

+
+
+
+
+
+
+ +

Lightning Node

+

Manage the Lightning Node powering your wallets.

+

Go to Lightning Node

+
+
+
+
+

Developers

+
+
+
+
+ +

Developer Dashboard

+

API keys and general integration info

+

Go to Developer Dash

+
+
+
+
+
+
+ +

Webhooks

+

Create webhooks to your server for important events - paywall paid, faucet pull, wallet receive, etc.

+

Go to Webhooks

+
+
+
+
+
+
+ +

API Logs

+

View and debug logs for development purposes

+

Get Started

+
+
+
+
+
+
+

API Documentation

+

Check out the API documentation on how to use wallets for your service or as a tool.

+

Got to API Docs

+
+
+
+ +
diff --git a/src/views/dashboard/layouts.php b/src/views/dashboard/layouts.php new file mode 100644 index 00000000..25691fce --- /dev/null +++ b/src/views/dashboard/layouts.php @@ -0,0 +1,18 @@ +beginContent('@app/views/layouts/sidebar/_nav-paywalls.php');?> +
+

My Layouts

+ +
+ +
+
+
+
+ render('_layouts',compact('layoutDp')); + ?> +
+
+
+
+endContent();?> \ No newline at end of file diff --git a/src/views/dashboard/paywalls.php b/src/views/dashboard/paywalls.php new file mode 100644 index 00000000..ffcba48b --- /dev/null +++ b/src/views/dashboard/paywalls.php @@ -0,0 +1,28 @@ +beginContent('@app/views/layouts/sidebar/_nav-paywalls.php');?> +title = 'My Paywalls'; + $this->params['breadcrumbs'][] = $this->title; +?> +
+

My Paywalls

+ +
+
+
+ user->isGuest) {?> + +
+ 'btn btn-info btn-lg']);?> +
+ +
+
+ render('_link-totals',compact('userDp')); + ?> +
+
+ +
+
+endContent();?> \ No newline at end of file diff --git a/src/views/distro-router/details/_api.php b/src/views/distro-router/details/_api.php new file mode 100644 index 00000000..ca69ef1e --- /dev/null +++ b/src/views/distro-router/details/_api.php @@ -0,0 +1 @@ +Coming Soon \ No newline at end of file diff --git a/src/views/distro-router/details/_email.php b/src/views/distro-router/details/_email.php new file mode 100644 index 00000000..5f86ba85 --- /dev/null +++ b/src/views/distro-router/details/_email.php @@ -0,0 +1,3 @@ +You can embed this PNG image in emails for shipping sats to inboxes: +

+
<img src="baseLink->getUrl([],\lnpay\models\DistroMethod::NAME_EMAIL);?>.png">
\ No newline at end of file diff --git a/src/views/distro-router/details/_image.php b/src/views/distro-router/details/_image.php new file mode 100644 index 00000000..cdbd4041 --- /dev/null +++ b/src/views/distro-router/details/_image.php @@ -0,0 +1,4 @@ +You can embed this PNG image in a variety of places in HTML with this code: +

+
<img src="baseLink->getUrl([],\lnpay\models\DistroMethod::NAME_IMAGE);?>.png" />
+ \ No newline at end of file diff --git a/src/views/distro-router/details/_ln_uri.php b/src/views/distro-router/details/_ln_uri.php new file mode 100644 index 00000000..de691696 --- /dev/null +++ b/src/views/distro-router/details/_ln_uri.php @@ -0,0 +1,2 @@ +This will redirect to
lightning:lnurl...
+baseLink->getUrl([],\lnpay\models\DistroMethod::NAME_LN_URI),$model->baseLink->getUrl([],\lnpay\models\DistroMethod::NAME_LN_URI));?> \ No newline at end of file diff --git a/src/views/distro-router/details/_print.php b/src/views/distro-router/details/_print.php new file mode 100644 index 00000000..3bc84941 --- /dev/null +++ b/src/views/distro-router/details/_print.php @@ -0,0 +1,5 @@ +Printer friendly version: + +

+
baseLink->getUrl([],\lnpay\models\DistroMethod::NAME_PRINT);?>
+baseLink->getUrl([],\lnpay\models\DistroMethod::NAME_PRINT);?> \ No newline at end of file diff --git a/src/views/distro-router/details/_raw_lnurl.php b/src/views/distro-router/details/_raw_lnurl.php new file mode 100644 index 00000000..98c37a1e --- /dev/null +++ b/src/views/distro-router/details/_raw_lnurl.php @@ -0,0 +1,8 @@ + +addHose(\lnpay\models\DistroMethod::findOne(\lnpay\models\DistroMethod::RAW_LNURL)); +?> +HOSE TAG: faucet_tag;?> + + +
baseLink->getUrl([],\lnpay\models\DistroMethod::NAME_RAW_LNURL));?>
\ No newline at end of file diff --git a/src/views/distro-router/details/_web.php b/src/views/distro-router/details/_web.php new file mode 100644 index 00000000..035e990f --- /dev/null +++ b/src/views/distro-router/details/_web.php @@ -0,0 +1,4 @@ +The default implementation is hosted on the name;?> website which can be accessed here: +

+
baseLink->getUrl();?>
+baseLink->getUrl();?> \ No newline at end of file diff --git a/src/views/domain/_form.php b/src/views/domain/_form.php new file mode 100644 index 00000000..0a18849a --- /dev/null +++ b/src/views/domain/_form.php @@ -0,0 +1,42 @@ + +

Add Domain

+ ['class' => 'form-horizontal'], + 'fieldConfig' => [ + 'template' => "{label}\n
+ {input}
\n
+ {error}
{hint}", + 'labelOptions' => ['class' => 'col-lg-3 control-label'], + ], +]); ?> +field($model, 'domain_name', [ + 'inputOptions' => [ + 'placeholder'=>'e.g. mydomain.com', + 'class' => 'form-control', + ] +])->textInput()->hint('This is Lightning Address domain name') ?> + +field($model, 'display_name', [ + 'inputOptions' => [ + 'class' => 'form-control', + 'placeholder'=>'e.g. My LN Address domain' + ] +])->textInput() ?> + +
+
+ 'btn btn-primary btn-block' + ]) ?> +
+
+ + diff --git a/src/views/domain/create.php b/src/views/domain/create.php new file mode 100644 index 00000000..3fdac1de --- /dev/null +++ b/src/views/domain/create.php @@ -0,0 +1,19 @@ +title = 'Create Domain'; +$this->params['breadcrumbs'][] = ['label' => 'Domain', 'url' => ['index']]; +$this->params['breadcrumbs'][] = $this->title; +?> + +
+ + render('_form', [ + 'model' => $model, + ]) ?> + +
diff --git a/src/views/domain/index.php b/src/views/domain/index.php new file mode 100644 index 00000000..ad464a72 --- /dev/null +++ b/src/views/domain/index.php @@ -0,0 +1,34 @@ +title = 'Domains'; +$this->params['breadcrumbs'][] = $this->title; + +?> +
+

Domains

+
+ + +
+ + + $dataProvider, + 'columns' => [ + 'external_hash', + 'domain_name', + 'display_name', + 'statusType.display_name', + + ], + ]); ?> +
+ + + diff --git a/src/views/home/_login-form.php b/src/views/home/_login-form.php new file mode 100644 index 00000000..5925ee07 --- /dev/null +++ b/src/views/home/_login-form.php @@ -0,0 +1,31 @@ + + + + + diff --git a/src/views/home/_signup-form.php b/src/views/home/_signup-form.php new file mode 100644 index 00000000..81587afa --- /dev/null +++ b/src/views/home/_signup-form.php @@ -0,0 +1,30 @@ + + + + + \ No newline at end of file diff --git a/src/views/home/error.php b/src/views/home/error.php new file mode 100644 index 00000000..0ba25746 --- /dev/null +++ b/src/views/home/error.php @@ -0,0 +1,27 @@ +title = $name; +?> +
+ +

title) ?>

+ +
+ +
+ +

+ The above error occurred while the Web server was processing your request. +

+

+ Please contact us if you think this is a server error. Thank you. +

+ +
diff --git a/src/views/home/index.php b/src/views/home/index.php new file mode 100644 index 00000000..1a97a284 --- /dev/null +++ b/src/views/home/index.php @@ -0,0 +1,37 @@ +title = \LNPay::$app->name; + +?> + +
+
+
+
+ Sample image +
+
+
+ user->isGuest) { ?> + render('signup',['model'=>new SignupForm()]);?> + + You are logged in! + + + +
+
+
+
+
\ No newline at end of file diff --git a/src/views/home/login.php b/src/views/home/login.php new file mode 100644 index 00000000..860a97a6 --- /dev/null +++ b/src/views/home/login.php @@ -0,0 +1,29 @@ +title = \LNPay::$app->name; + +?> +
+
+
+
+ Sample image +
+
+

Login

+ render('_login-form',['model'=>$model]);?> +
+
+
+
\ No newline at end of file diff --git a/src/views/home/mfa-verify.php b/src/views/home/mfa-verify.php new file mode 100644 index 00000000..c3e29779 --- /dev/null +++ b/src/views/home/mfa-verify.php @@ -0,0 +1,20 @@ +field($model, 'otp'); + +echo Html::submitButton('Verify'); + +ActiveForm::end(); + +?> \ No newline at end of file diff --git a/src/views/home/requestPasswordResetToken.php b/src/views/home/requestPasswordResetToken.php new file mode 100644 index 00000000..5d0afa91 --- /dev/null +++ b/src/views/home/requestPasswordResetToken.php @@ -0,0 +1,31 @@ +title = 'Request password reset'; +$this->params['breadcrumbs'][] = $this->title; +?> +
+

title) ?>

+ +

Please fill out your email. A link to reset password will be sent there.

+ +
+
+ 'request-password-reset-form']); ?> + + field($model, 'email')->textInput(['autofocus' => true]) ?> + +
+ 'btn btn-primary']) ?> +
+ + +
+
+
diff --git a/src/views/home/resetPassword.php b/src/views/home/resetPassword.php new file mode 100644 index 00000000..f13e7fe3 --- /dev/null +++ b/src/views/home/resetPassword.php @@ -0,0 +1,31 @@ +title = 'Reset password'; +$this->params['breadcrumbs'][] = $this->title; +?> +
+

title) ?>

+ +

Please choose your new password:

+ +
+
+ 'reset-password-form']); ?> + + field($model, 'password')->passwordInput(['autofocus' => true]) ?> + +
+ 'btn btn-primary']) ?> +
+ + +
+
+
diff --git a/src/views/home/signup.php b/src/views/home/signup.php new file mode 100644 index 00000000..ece7b63f --- /dev/null +++ b/src/views/home/signup.php @@ -0,0 +1,31 @@ +title = \LNPay::$app->name; + +?> + +
+
+
+
+ Sample image +
+
+

Create an Account

+ render('_signup-form',['model'=>$model]);?> +
+
+
+
\ No newline at end of file diff --git a/src/views/layouts/_footer.php b/src/views/layouts/_footer.php new file mode 100644 index 00000000..26488aca --- /dev/null +++ b/src/views/layouts/_footer.php @@ -0,0 +1,20 @@ +
+
+ +
+
\ No newline at end of file diff --git a/src/views/layouts/_header.php b/src/views/layouts/_header.php new file mode 100644 index 00000000..e9ca3f81 --- /dev/null +++ b/src/views/layouts/_header.php @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/views/layouts/main.php b/src/views/layouts/main.php new file mode 100644 index 00000000..c360a5fa --- /dev/null +++ b/src/views/layouts/main.php @@ -0,0 +1,167 @@ +user->identity; + +?> +beginPage() ?> + + + + + + + + <?= Html::encode($this->title) ?> + render('_header');?> + + head() ?> + + +beginBody() ?> + +controller; + $default_controller = \LNPay::$app->defaultRoute; + $externalActions = ['paywalls','index','feed']; + $isHome = (($controller->id === $default_controller) && (in_array($controller->action->id,$externalActions))) ? true : false; + + $navclass = !$isHome ? 'navbar navbar-default' : '' +?> + +
+ 'âš¡'.\LNPay::$app->name, + 'brandUrl' => (\LNPay::$app->user->isGuest?\LNPay::$app->homeUrl:'/dashboard/home'), + 'options' => [ + 'class' => '' . $navclass, + ], + ]); + $menuItemsLeft = [ + /*[ + 'label' => ' Legacy LAPPs', + 'url' => 'https://legacy.lnpay.co/', + 'linkOptions'=>['target'=>'_blank'], + 'encode'=>false, + ],*/ + [ + 'label' => ' Wallets', + 'url' => (\LNPay::$app->user->isGuest?'#':['/wallet/wallet/dashboard']), + 'active'=>stripos(\LNPay::$app->request->pathInfo,'wallet')!==FALSE, + 'encode'=>false, + ], + [ + 'label' => ' LN Nodes', + 'url' => (\LNPay::$app->user->isGuest?'#':['/node/dashboard/index']), + 'active'=>\lnpay\components\HelperComponent::str_contains(\LNPay::$app->request->pathInfo,['node/']), + 'encode'=>false, + ], + [ + 'label' => ' Developers', + 'url' => (\LNPay::$app->user->isGuest?'#':['/developers/dashboard']), + 'active'=>\lnpay\components\HelperComponent::str_contains(\LNPay::$app->request->pathInfo,['developers','webhook']), + 'encode'=>false, + ], + ]; + if (\LNPay::$app->user->isGuest) { + $menuItemsRight[] = ['label' => 'Login', 'url' => ['/home/login']]; + $menuItemsRight[] = ['label' => 'Get Started', 'class' => 'btn-outline-success', 'url' => ['/home/signup']]; + } else { + $menuItemsRight = [ + + ['label' => \LNPay::$app->user->identity->email, 'url' => '/account/index'], + '', + ]; + } + + echo Nav::widget([ + 'options' => ['class' => 'navbar-nav navbar-left'], + 'items' => $menuItemsLeft, + ]); + echo Nav::widget([ + 'options' => ['class' => 'navbar-nav navbar-right'], + 'items' => $menuItemsRight, + ]); + NavBar::end(); + ?> + + +
+
+
+ + + +
+ + [ + 'label'=>'Home', + 'url'=>'/dashboard/home' + ], + 'links' => isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : [], + + ]) ?> + + controller->module->id,"basic") === false && \LNPay::$app->controller->module->sidebarView) + $this->beginContent(\LNPay::$app->controller->module->sidebarView); + ?> + + controller->module->id,"basic") === false && \LNPay::$app->controller->module->sidebarView) + $this->endContent(); ?> +
+
+
+ + +render('_footer');?> + +endBody() ?> + +registerJs ( $js ); +?> + +endPage() ?> diff --git a/src/views/layouts/public.php b/src/views/layouts/public.php new file mode 100644 index 00000000..dd0a7b34 --- /dev/null +++ b/src/views/layouts/public.php @@ -0,0 +1,90 @@ +user->identity; + +?> +beginPage() ?> + + + + + + + + <?= Html::encode($this->title) ?> + render('_header');?> + + head() ?> + + +beginBody() ?> + +controller; +$default_controller = \LNPay::$app->defaultRoute; +$externalActions = ['paywalls','index','feed']; +$isHome = (($controller->id === $default_controller) && (in_array($controller->action->id,$externalActions))) ? true : false; + +$navclass = !$isHome ? 'navbar navbar-default' : '' +?> + +
+ +
+
+
+ + + +
+ + [ + 'label'=>'Home', + 'url'=>'/dashboard/home' + ], + 'links' => isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : [], + + ]) ?> + + +
+
+ + + +render('_footer');?> + +endBody() ?> + +registerJs ( $js ); +?> + +endPage() ?> diff --git a/src/views/layouts/sb-admin/content.php b/src/views/layouts/sb-admin/content.php new file mode 100644 index 00000000..b07e297f --- /dev/null +++ b/src/views/layouts/sb-admin/content.php @@ -0,0 +1,47 @@ + + + +
+ + +
+ + blocks['content-header'])) { ?> +

blocks['content-header'] ?>

+ isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : [], + ]); + + ?> + + +
+ +
+
+ getSession()->getAllFlashes()) { + foreach (Yii::$app->getSession()->getAllFlashes() as $key => $value) { + echo Alert::widget([ + 'options' => [ + 'class' => 'alert-' . $key, + ], + 'body' => $value, + ]); + } + } ?> +
+
+
+
+ +
+
+
+ \ No newline at end of file diff --git a/src/views/layouts/sb-admin/footer.php b/src/views/layouts/sb-admin/footer.php new file mode 100644 index 00000000..8c995990 --- /dev/null +++ b/src/views/layouts/sb-admin/footer.php @@ -0,0 +1,10 @@ + + +
+
+ +
+
+ \ No newline at end of file diff --git a/src/views/layouts/sb-admin/guest/header-guest.php b/src/views/layouts/sb-admin/guest/header-guest.php new file mode 100644 index 00000000..269f2717 --- /dev/null +++ b/src/views/layouts/sb-admin/guest/header-guest.php @@ -0,0 +1,28 @@ + + + +
+

Advanced Wallets ','https://docs.lnpay.co',[ + 'class'=>'btn btn-primary', + 'target'=>'_blank', + 'title'=>'Use the API for basic functionality using the permissioned keys below.', + 'data-toggle' => 'tooltip', + 'data-placement' => 'right']);?>

+ +
+ \ No newline at end of file diff --git a/src/views/layouts/sb-admin/guest/main-guest.php b/src/views/layouts/sb-admin/guest/main-guest.php new file mode 100644 index 00000000..5d670aa2 --- /dev/null +++ b/src/views/layouts/sb-admin/guest/main-guest.php @@ -0,0 +1,67 @@ +assetManager->getPublishedUrl('@bower/startbootstrap-sb-admin-2'); +?> +beginPage() ?> + + + + + + + + <?= Html::encode($this->title) ?> + head() ?> + + + + + beginBody() ?> + + +
+ + +
+ + +
+ + render( + 'header-guest.php', + ['directoryAsset' => $directoryAsset] + ) ?> + + render( + '../content.php', + ['content' => $content, 'directoryAsset' => $directoryAsset] + ) ?> + +
+ + + + render( + '../footer.php', + ['content' => $content, 'directoryAsset' => $directoryAsset] + ) ?> + +
+ + +
+ + + + endBody() ?> + + +endPage() ?> \ No newline at end of file diff --git a/src/views/layouts/sb-admin/header.php b/src/views/layouts/sb-admin/header.php new file mode 100644 index 00000000..144cb446 --- /dev/null +++ b/src/views/layouts/sb-admin/header.php @@ -0,0 +1,196 @@ + + + +
+ \ No newline at end of file diff --git a/src/views/layouts/sb-admin/main.php b/src/views/layouts/sb-admin/main.php new file mode 100644 index 00000000..b0cc62c5 --- /dev/null +++ b/src/views/layouts/sb-admin/main.php @@ -0,0 +1,72 @@ +assetManager->getPublishedUrl('@bower/startbootstrap-sb-admin-2'); +?> +beginPage() ?> + + + + + + + + <?= Html::encode($this->title) ?> + head() ?> + + + + + beginBody() ?> + + +
+ + render( + 'sidebar.php', + ['directoryAsset' => $directoryAsset] + ) ?> + + +
+ + +
+ + render( + 'header.php', + ['directoryAsset' => $directoryAsset] + ) ?> + + render( + 'content.php', + ['content' => $content, 'directoryAsset' => $directoryAsset] + ) ?> + +
+ + + + render( + 'footer.php', + ['content' => $content, 'directoryAsset' => $directoryAsset] + ) ?> + +
+ + +
+ + + + endBody() ?> + + +endPage() ?> \ No newline at end of file diff --git a/src/views/layouts/sb-admin/sidebar.php b/src/views/layouts/sb-admin/sidebar.php new file mode 100644 index 00000000..0a0f4399 --- /dev/null +++ b/src/views/layouts/sb-admin/sidebar.php @@ -0,0 +1,198 @@ +user->identity->lnNodes) { + $lightningNodeMenu = []; + foreach ($nodes as $node) + $lightningNodeMenu[] = [ + 'label' => $node->alias, + //'url' => ['/node/dashboard/index'], // Array format of Url to, will be not used if have an items + 'icon' => 'fas fa-fw fa-bolt', // optional, default to "fa fa-circle-o + 'visible' => true, + 'items' => [ + [ + 'label' => 'Node Dashboard', + 'url' => ['/node/ln/index/','id'=>$node->id], // Array format of Url to, will be not used if have an items + ], + [ + 'label' => 'On Chain', + 'url' => ['/node/ln/onchain/','id'=>$node->id], // Array format of Url to, will be not used if have an items + ], + [ + 'label' => 'Event Subscriptions', + 'url' => ['/node/rpc/listeners/','id'=>$node->id], // Array format of Url to, will be not used if have an items + ], + [ + 'label' => 'Settings', + 'icon' => 'fas fa-cog', // optional, default to "fa fa-circle-o + 'url' => ['/node/ln/settings/'.$node->id], // Array format of Url to, will be not used if have an items + ], + /*[ + 'label' => 'Invoices (LnTx)', + 'url' => ['/node/ln/index/','id'=>$node->id], // Array format of Url to, will be not used if have an items + ],*/ + ] + ]; +} else { + $lightningNodeMenu = [ + [ + 'label' => 'Lightning Node', + 'url' => ['/node/dashboard/index'], // Array format of Url to, will be not used if have an items + 'icon' => 'fas fa-fw fa-bolt', // optional, default to "fa fa-circle-o + 'visible' => true, + 'items' => [ + [ + 'label' => 'Connect Node', + 'url' => ['/node/dashboard/add'], // Array format of Url to, will be not used if have an items + ] + /*[ + 'label' => 'Invoices (LnTx)', + 'url' => ['/menu21'], // Array format of Url to, will be not used if have an items + ],*/ + ] + ] + ]; +} + + +$items = [ + [ + 'label' => 'Home', + 'url' => ['/dashboard/home'], // Array format of Url to, will be not used if have an items + 'icon' => 'fas fa-home', // optional, default to "fa fa-circle-o + 'visible' => true, // optional, default to true + ], + [ + 'type' => 'divider', // divider or sidebar, if not set then link menu + ], + [ + 'label' => 'Wallets', + 'url' => ['/wallet/wallet/dashboard'], // Array format of Url to, will be not used if have an items + 'icon' => 'fas fa-wallet', // optional, default to "fa fa-circle-o + 'visible' => true, // optional, default to true + // 'options' => [ + // 'liClass' => 'nav-item', + // ] // optional + ], + [ + 'label' => 'Transactions', + 'url' => ['/wallet/wallet-transaction'], // Array format of Url to, will be not used if have an items + 'icon' => 'fas fa-fw fa-exchange-alt', // optional, default to "fa fa-circle-o + 'visible' => true, // optional, default to true + // 'options' => [ + // 'liClass' => 'nav-item', + // ] // optional + ], + [ + 'type' => 'divider', // divider or sidebar, if not set then link menu + // 'label' => '', // if sidebar we will set this, if divider then no + ], + ]; + /*[ + 'label' => 'Lightning Address', + 'url' => ['/menu1'], // Array format of Url to, will be not used if have an items + 'icon' => 'fas fa-fw fa-envelope', // optional, default to "fa fa-circle-o + 'visible' => true, // optional, default to true + // 'options' => [ + // 'liClass' => 'nav-item', + // ] // optional + ], + [ + 'label' => 'LNURL', + 'visible' => true, // optional, default to true + // 'subMenuTitle' => 'Menu 3 Item', // optional only when have submenutitle, if not exist will not have subMenuTitle + 'items' => [ + [ + 'label' => 'LNURL Pay', + 'url' => ['/menu21'], // Array format of Url to, will be not used if have an items + ], + [ + 'label' => 'LNURL Withdraw', + 'url' => ['/menu22'], // Array format of Url to, will be not used if have an items + 'icon' => 'fas fa-fw fa-tachometer-alt', + ], + ] + ], + [ + 'label' => 'Keysend', + 'url' => ['/menu1'], // Array format of Url to, will be not used if have an items + 'icon' => 'fas fa-fw fa-arrow-right', // optional, default to "fa fa-circle-o + 'visible' => true, // optional, default to true + // 'options' => [ + // 'liClass' => 'nav-item', + // ] // optional + ],*/ + + $items = \yii\helpers\ArrayHelper::merge( + $items, + $lightningNodeMenu, + [ + [ + 'type' => 'divider', // divider or sidebar, if not set then link menu + // 'label' => '', // if sidebar we will set this, if divider then no + + ], + [ + 'label' => 'Webhooks', + 'url' => ['/webhook/index'], // Array format of Url to, will be not used if have an items + 'icon' => 'fas fa-fw fa-tachometer-alt', // optional, default to "fa fa-circle-o + 'visible' => true, // optional, default to true + // 'options' => [ + // 'liClass' => 'nav-item', + // ] // optional + ], + [ + 'label' => 'Domains', + 'url' => ['/domain/index'], // Array format of Url to, will be not used if have an items + 'icon' => 'fas fa-fw fa-server', // optional, default to "fa fa-circle-o + 'visible' => true, // optional, default to true + // 'options' => [ + // 'liClass' => 'nav-item', + // ] // optional + ], + [ + 'label' => 'API Logs', + 'url' => ['/api-log/index'], // Array format of Url to, will be not used if have an items + 'icon' => 'fas fa-fw fa-history', // optional, default to "fa fa-circle-o + 'visible' => true, // optional, default to true + // 'options' => [ + // 'liClass' => 'nav-item', + // ] // optional + ], + [ + 'label' => 'API Keys', + 'url' => ['/developers/dashboard'], // Array format of Url to, will be not used if have an items + 'icon' => 'fas fa-fw fa-key', // optional, default to "fa fa-circle-o + 'visible' => true, // optional, default to true + // 'options' => [ + // 'liClass' => 'nav-item', + // ] // optional + ] + ] + ); + + + + + + +echo Menu::widget([ + 'options' => [ + 'ulClass' => "navbar-nav bg-gradient-primary sidebar sidebar-dark accordion", + 'ulId' => "accordionSidebar" + ], // optional + 'brand' => [ + 'url' => ['/'], + 'content' => << + + + + +HTML + ], + 'items' => $items +]); + +$this->registerJs("$('.sidebar a[href^=\"' + location.pathname + '\"').addClass('active');"); +$this->registerJs("$('.sidebar a[href^=\"' + location.pathname + '\"').parent().parent().addClass('show');"); \ No newline at end of file diff --git a/src/views/layouts/sidebar/__base_sidebar.php b/src/views/layouts/sidebar/__base_sidebar.php new file mode 100644 index 00000000..aabea814 --- /dev/null +++ b/src/views/layouts/sidebar/__base_sidebar.php @@ -0,0 +1,17 @@ +registerJs(' +$("#withdraw-loader").hide(); +$(\'#withdrawForm\').on(\'ajaxBeforeSend\', function (event, jqXHR, settings) { + // Activate waiting label + $("#withdraw-loader").show(); +}).on(\'ajaxComplete\', function (event, jqXHR, textStatus) { + // Deactivate waiting label + $("#withdraw-loader").hide(); +}); +'); + +$this->registerJs("$('.sidebar a[href^=\"' + location.pathname + '\"').addClass('active');"); +?> \ No newline at end of file diff --git a/src/views/layouts/sidebar/_nav-account.php b/src/views/layouts/sidebar/_nav-account.php new file mode 100644 index 00000000..7de332cc --- /dev/null +++ b/src/views/layouts/sidebar/_nav-account.php @@ -0,0 +1,42 @@ +render('__base_sidebar'); ?> + + + + +
+ [ + [ + 'label' => 'Account', + 'content'=> $content, + 'url' => $this->context->action->id == 'index' ? NULL : ['account/index'], + 'active' => $this->context->action->id == 'index' + ], + [ + 'label' => 'Change Password', + 'content' => $content, + 'url' => $this->context->action->id == 'change-password' ? NULL : ['/account/change-password'], + 'active'=> $this->context->action->id == 'change-password' + ], + [ + 'label' => 'Products', + 'content' => $content, + 'url' => $this->context->action->id == 'product' ? NULL : ['account/product'], + 'active'=> $this->context->action->id == 'product' + ], + ], +]); +?> + +
+ diff --git a/src/views/layouts/sidebar/_nav-developers.php b/src/views/layouts/sidebar/_nav-developers.php new file mode 100644 index 00000000..6412f391 --- /dev/null +++ b/src/views/layouts/sidebar/_nav-developers.php @@ -0,0 +1,16 @@ +render('__base_sidebar'); ?> + + + + diff --git a/src/views/webhook/_form.php b/src/views/webhook/_form.php new file mode 100644 index 00000000..cd680de6 --- /dev/null +++ b/src/views/webhook/_form.php @@ -0,0 +1,99 @@ + + +
+ + registerJs(' + $(":checkbox[value=default_all]").click(function(){ + $(\'input:checkbox\').not(this).prop(\'checked\', this.checked); + }); + '); + + ?> + + field($model, 'endpoint_url')->textInput(['maxlength' => true]) ?> + + $name) { + if (in_array($type,$hideTypes)) + continue; + + echo '
'; + echo '

'.$type.'

'; + echo $form->field($model, 'action_name_id['.$type.']')->label(false) + ->checkboxList(yii\helpers\ArrayHelper::map($name, 'name', 'display_name')); + echo '
'; + foreach ($name as $arr) { + if ($model->action_name_id && in_array($arr['name'],$model->action_name_id)) { + $this->registerJs('$(":checkbox[value=' . $arr['name'] . ']").prop(\'checked\',\'checked\');'); + } + } + + } + + + + ?> + field($model, 'secret')->passwordInput()->label('Secret')->hint('Header X-LNPay-Signature will be sent using HMAC SHA256 of the payload using this secret') ?> + field($model, 'status_type_id')->dropDownList(\yii\helpers\ArrayHelper::map(\lnpay\models\StatusType::getAvailableStatuses(\lnpay\models\StatusType::TYPE_WEBHOOK),'id','display_name')); ?> + + + + + + field($model, 'status_type_id')->textInput() ?> + +
+ 'btn btn-success']) ?> +
+ + + +
+ +id) { ?> +
+ integration_webhook_id = $model->external_hash; + $events = \yii\helpers\ArrayHelper::map(\lnpay\components\ActionComponent::getAvailableTestActionObjects(),'name','display_name'); + + $form = ActiveForm::begin( + ['action' => 'test-webhook'] + ); + + ?> + field($webhookTestForm, 'action_id')->dropDownList($events); ?> + field($webhookTestForm, 'integration_webhook_id')->hiddenInput()->label(false); ?> + +
+ 'btn btn-success']) ?> +
+ + + +
+ + + \ No newline at end of file diff --git a/src/views/webhook/_requests-pane-request.php b/src/views/webhook/_requests-pane-request.php new file mode 100644 index 00000000..d78b3822 --- /dev/null +++ b/src/views/webhook/_requests-pane-request.php @@ -0,0 +1,6 @@ +
+
request_payload);
+            ?>
+    
+
\ No newline at end of file diff --git a/src/views/webhook/_requests-pane-response.php b/src/views/webhook/_requests-pane-response.php new file mode 100644 index 00000000..0567c932 --- /dev/null +++ b/src/views/webhook/_requests-pane-response.php @@ -0,0 +1,3 @@ +
+
response_body)));?>
+
\ No newline at end of file diff --git a/src/views/webhook/_requests-pane.php b/src/views/webhook/_requests-pane.php new file mode 100644 index 00000000..61fc6461 --- /dev/null +++ b/src/views/webhook/_requests-pane.php @@ -0,0 +1,29 @@ +response_status_code >= 200 && $iwhr->response_status_code <= 299) + $responseBadge = ''.$iwhr->response_status_code.''; +else + $responseBadge = ''.$iwhr->response_status_code.''; + + +echo \yii\bootstrap4\Tabs::widget([ + 'items' => [ + [ + 'label' => 'Request', + 'content' => $this->render('_requests-pane-request',compact('iwhr')), + 'active' => true + ], + [ + 'label' => 'Response '.$responseBadge, + 'encode'=>false, + 'content' => $this->render('_requests-pane-response',compact('iwhr')), + ], + [ + 'label' => 'Redeliver', + 'url' => ['redeliver','iwhr_id'=>$iwhr->external_hash], + 'linkOptions'=>['data-confirm'=>'Resending request to: '.$iwhr->integrationWebhook->endpoint_url,'style'=>'background-color:green;color:white'] + ], + ], +]); + +?> \ No newline at end of file diff --git a/src/views/webhook/_requests.php b/src/views/webhook/_requests.php new file mode 100644 index 00000000..0f936782 --- /dev/null +++ b/src/views/webhook/_requests.php @@ -0,0 +1,21 @@ +getWebhookRequests()->orderBy('created_at DESC')->limit(20)->all() as $iwhr) { + if ($iwhr->response_status_code >= 200 && $iwhr->response_status_code <= 299) + $responseBadge = ''.$iwhr->response_status_code.''; + else + $responseBadge = ''.$iwhr->response_status_code.''; + + $items[] = [ + 'label' => date('Y-m-d H:i:s T', $iwhr->created_at).' - '.$iwhr->integrationWebhook->http_method.' '.$iwhr->integrationWebhook->endpoint_url.' '.$responseBadge, + 'content' => $this->render('_requests-pane',compact('iwhr')), + 'encode'=>false + ]; +} + +echo \yii\bootstrap4\Accordion::widget([ + 'items' => $items +]); + diff --git a/src/views/webhook/_search.php b/src/views/webhook/_search.php new file mode 100644 index 00000000..d77ff0c7 --- /dev/null +++ b/src/views/webhook/_search.php @@ -0,0 +1,53 @@ + + + diff --git a/src/views/webhook/create.php b/src/views/webhook/create.php new file mode 100644 index 00000000..4c5bd8dd --- /dev/null +++ b/src/views/webhook/create.php @@ -0,0 +1,21 @@ +title = 'Create Webhook'; +$this->params['breadcrumbs'][] = ['label' => 'Integration Webhooks', 'url' => ['index']]; +$this->params['breadcrumbs'][] = $this->title; +?> + +
+ +

title) ?>

+ + render('_form', [ + 'model' => $model, + ]) ?> + +
diff --git a/src/views/webhook/index.php b/src/views/webhook/index.php new file mode 100644 index 00000000..ab569ba0 --- /dev/null +++ b/src/views/webhook/index.php @@ -0,0 +1,82 @@ +title = 'Webhooks'; +$this->params['breadcrumbs'][] = $this->title; + + + +?> + + + 'Please see '.Html::a('Webhooks: Getting Started','https://docs.lnpay.co/webhooks/getting-started',['target'=>'_blank']).' for more info', + 'options' => [ + 'class' => 'alert-info', + ], +]); + +?> +
+ +

title) ?>

+ +

+ 'btn btn-primary']) ?> +

+ + render('_search', ['model' => $searchModel]); ?> + + $dataProvider, + 'filterModel' => $searchModel, + 'columns' => [ + [ + 'class' => 'yii\grid\ActionColumn', + 'template' => '{view}{update}{delete}', + 'buttons' => [ + 'view' => function ($url, $model, $key) { + return Html::a('', ['view','id'=>$model->external_hash], ['title' => 'Edit']); + }, + 'update' => function ($url, $model, $key) { + return Html::a('', ['update','id'=>$model->external_hash], ['title' => 'Edit']); + }, + 'delete' => function ($url, $model, $key) { + return Html::a('', ['delete','id'=>$model->external_hash], [ + 'title' => 'Delete', + 'data-confirm' => \LNPay::t('yii', 'Are you sure you want to delete this item?'), + 'data-method' => 'post' + ]); + }, + ], + ], + [ + 'format'=>'raw', + 'attribute' => 'action_name_id', + 'value'=>function($model) { return implode('
',$model->action_name_id); }, + 'header'=>'Actions' + ], + //'integration_service_id', + //'secret', + //'http_method', + //'content_type', + 'endpoint_url', + 'statusType.display_name', + //'external_hash', + //'json_data:ntext', + //'created_at', + //'updated_at', + + + ], + ]); ?> + + +
diff --git a/src/views/webhook/update.php b/src/views/webhook/update.php new file mode 100644 index 00000000..ae8f029f --- /dev/null +++ b/src/views/webhook/update.php @@ -0,0 +1,21 @@ +title = 'Update Integration Webhook: ' . $model->external_hash; +$this->params['breadcrumbs'][] = ['label' => 'Integration Webhooks', 'url' => ['index']]; +$this->params['breadcrumbs'][] = ['label' => $model->external_hash, 'url' => ['view', 'id' => $model->external_hash]]; +$this->params['breadcrumbs'][] = 'Update'; +?> + +
+ + render('_form', [ + 'model' => $model, + ]) ?> + +
+ diff --git a/src/views/webhook/view.php b/src/views/webhook/view.php new file mode 100644 index 00000000..df0ae616 --- /dev/null +++ b/src/views/webhook/view.php @@ -0,0 +1,25 @@ +title = 'Webhooks - '.$model->external_hash; +$this->params['breadcrumbs'][] = ['label' => 'Webhooks', 'url' => ['index']]; +$this->params['breadcrumbs'][] = $this->title; + +?> + +
+ + getWebhookRequests()->orderBy('created_at DESC')->exists()) { + echo $this->render('_requests', compact('model')); + } + else + echo 'No webhooks processed yet!'; + ?> + +
diff --git a/src/wallet/Module.php b/src/wallet/Module.php new file mode 100644 index 00000000..b7eff569 --- /dev/null +++ b/src/wallet/Module.php @@ -0,0 +1,101 @@ +urlManager->addRules([[ + 'class' => GroupUrlRule::class, + 'prefix' => $this->id, + 'rules' => [ + //Admin dashboard stuff + '/' => '/view', + '//' => '/', + '/' => '/' + ], + ]], false); + + //API Rules + $app->urlManager->addRules([ + //WALLETS NEW NEW + 'GET,HEAD,OPTIONS v1/wallets' => 'wallet/api/v1/wallet/view-all', + 'GET,HEAD,OPTIONS v1/wallet/' => 'wallet/api/v1/wallet/view', + 'GET,OPTIONS v1/wallet//lnurl/withdraw-static' => 'wallet/api/v1/wallet/lnurl-withdraw-static', + 'GET,OPTIONS v1/wallet//lnurl/withdraw' => 'wallet/api/v1/wallet/lnurl-withdraw', + 'GET,OPTIONS v1/wallet//lnurl-process' => 'wallet/api/v1/wallet/lnurl-process', + 'POST,OPTIONS v1/wallet' => 'wallet/api/v1/wallet/create', + 'POST,OPTIONS v1/wallet//withdraw' => 'wallet/api/v1/wallet/withdraw', + 'POST,OPTIONS v1/wallet//keysend' => 'wallet/api/v1/wallet/keysend', + 'POST,OPTIONS v1/wallet//invoice' => 'wallet/api/v1/wallet/invoice', + 'POST,OPTIONS v1/wallet//transfer' => 'wallet/api/v1/wallet/transfer', + 'GET,OPTIONS v1/wallet//transactions' => 'wallet/api/v1/wallet/transactions', + + + //WALLET-TRANSACTIONS + 'GET,OPTIONS v1/wallet-transactions' => 'wallet/api/v1/wallet-transaction/view-all', + + //WALLET LNURL + 'GET,OPTIONS v1/wallet//lnurlp/' => 'wallet/api/v1/lnurlpay/lnurl-process', + 'GET,OPTIONS v1/lnurlp/probe/' => 'wallet/api/v1/lnurlpay/probe', + 'GET,OPTIONS .well-known/lnurlp/' => 'wallet/api/v1/lnurlpay/lightning-address', + 'GET,OPTIONS .well-known//lnurlp/' => 'wallet/api/v1/lnurlpay/lightning-address', + 'POST,OPTIONS v1/wallet//lnurlp/pay' => 'wallet/api/v1/lnurlpay/pay', + 'POST,OPTIONS v1/wallet//lnurlp' => 'wallet/api/v1/lnurlpay/create', + 'GET,OPTIONS v1/lnurlp/' => 'wallet/api/v1/lnurlpay/view', + 'POST,PUT,PATCH,OPTIONS v1/lnurlp/' => 'wallet/api/v1/lnurlpay/update', + + //WALLET PUBLIC + 'GET,HEAD,OPTIONS public/wallet/' => 'wallet/pub/index/view', + + + + ], false); + } + + public function behaviors() + { + return [ + 'access' => [ + 'class' => AccessControl::class, + 'rules' => [ + [ + 'allow' => true, + 'controllers' => ['wallet/*'], + 'roles' => ['@'], + ], + [ + 'allow' => true, + 'controllers' => ['wallet/api/*'], + 'roles' => ['?','@'], + ], + [ + 'allow' => true, + 'controllers' => ['wallet/pub/*'], + 'roles' => ['?'], + ], + ], + ], + ]; + } +} \ No newline at end of file diff --git a/src/wallet/controllers/WalletController.php b/src/wallet/controllers/WalletController.php new file mode 100644 index 00000000..dae63d73 --- /dev/null +++ b/src/wallet/controllers/WalletController.php @@ -0,0 +1,273 @@ + [ + 'class' => VerbFilter::className(), + 'actions' => [ + 'logout' => ['post'], + ], + ], + ]); + } + + /** + * Lists all Wallet models. + * @return mixed + */ + public function actionDashboard() + { + $searchModel = new WalletSearch(); + $searchModel->user_id = $this->user->id; + $dataProvider = $searchModel->search(\LNPay::$app->request->queryParams); + + return $this->render('dashboard',compact('searchModel','dataProvider')); + } + + /** + * Displays a single Wallet model. + * @param integer $id + * @return mixed + * @throws NotFoundHttpException if the model cannot be found + */ + public function actionView($id) + { + $wModel = new LnWalletWithdrawForm(); + $dModel = new LnWalletDepositForm(); + $tModel = new WalletTransferForm(); + + //Handle Withdrawal + if (\LNPay::$app->request->isPost) { + if ($wModel->load(\LNPay::$app->request->post())) { + if (\LNPay::$app->session->getFlash('bt')) { + \LNPay::$app->session->setFlash('success', 'Withdrawal Sent!'); + return $this->redirect(\LNPay::$app->request->referrer); + } + } + } + + //Handle transfer + if ($tModel->load(\LNPay::$app->request->post())) { + try { + $w = Wallet::findById($tModel->source_wallet_id); + if (\LNPay::$app->user->id != $w->user_id) { + throw new \Exception('Invalid source wallet'); + } + } catch (\Throwable $t) { + \LNPay::$app->session->setFlash('error',$t->getMessage()); + return $this->redirect(\LNPay::$app->request->referrer); + } + + if ($tModel->validate()) { + $tModel->executeTransfer(); + \LNPay::$app->session->setFlash('success',"Transfer successful!"); + return $this->redirect(\LNPay::$app->request->referrer); + } else { + \LNPay::$app->session->setFlash('error',HelperComponent::getFirstErrorFromFailedValidation($tModel)); + return $this->redirect(\LNPay::$app->request->referrer); + } + } + + + + + $walletObject = $this->findModel($id); + //$walletObject->updateBalance(); + + $availableWalletsForTransferQuery = Wallet::find()->where(['!=','external_hash',$id])->andWhere(['user_id'=>\LNPay::$app->user->id])->orderBy('balance DESC'); + + return $this->render('view', [ + 'wallet' => $walletObject, + 'wModel' => $wModel, + 'dModel' => $dModel, + 'tModel' => $tModel, + 'availableWalletsForTransferQuery' => $availableWalletsForTransferQuery, + ]); + } + + public function actionAccessKeys($id) + { + $walletObject = $this->findModel($id); + return $this->render('views/_access-keys',['wallet'=>$walletObject]); + } + + public function actionLnurlPay($id) + { + $walletObject = $this->findModel($id); + return $this->render('views/_lnurl-pay',['wallet'=>$walletObject]); + } + + public function actionLoop($id) + { + $walletObject = $this->findModel($id); + $lnLoopOutForm = new LnLoopOutForm(); + + $lnLoopOutForm->wallet_id = $walletObject->external_hash; + if ($lnLoopOutForm->load(\LNPay::$app->request->post()) && $lnLoopOutForm->validate()) { + $lnLoopOutForm->attemptLoopOut(); + return $this->redirect(\LNPay::$app->request->referrer); + } + return $this->render('views/_loop',['wallet'=>$walletObject,'lnLoopOutForm'=>$lnLoopOutForm]); + } + + public function actionKeysend($id) + { + $walletObject = $this->findModel($id); + $searchModel = new WalletTransactionSearch(); + $searchModel->user_id = \LNPay::$app->user->id; + $searchModel->wallet_id = $walletObject->id; + $dataProvider = $searchModel->search(\LNPay::$app->request->queryParams); + $query = $dataProvider->query; + $query->innerJoinWith('lnTx'); + $query->andFilterWhere(['ln_tx.is_keysend'=>1]); + return $this->render('views/_keysend',['wallet'=>$walletObject,'wtxDataProvider'=>$dataProvider,'wtxSearchModel'=>$searchModel]); + } + + public function actionTransactions($id) + { + $walletObject = $this->findModel($id); + + $searchModel = new WalletTransactionSearch(); + $searchModel->user_id = \LNPay::$app->user->id; + $searchModel->wallet_id = $walletObject->id; + $dataProvider = $searchModel->search(\LNPay::$app->request->queryParams); + return $this->render('views/_wtx-breakdown',['wtxSearchModel'=>$searchModel,'wtxDataProvider'=>$dataProvider,'wallet'=>$walletObject]); + } + + public function actionLnNode($id) + { + $walletNodeChangeForm = new WalletNodeChangeForm(); + if ($walletNodeChangeForm->load(\LNPay::$app->request->post())) { + if ($walletNodeChangeForm->validate()) { + $result = $walletNodeChangeForm->switchWalletTargetNode(); + if ($result) { + return $this->redirect(\LNPay::$app->request->referrer); + } + } + } + + $walletObject = $this->findModel($id); + return $this->render('views/_ln-node',['wallet'=>$walletObject,'walletNodeChangeForm'=>$walletNodeChangeForm]); + } + + public function actionValidateWithdrawal($id) + { + $wModel = new LnWalletWithdrawForm(); + $wModel->wallet_id = $this->findModel($id)->id; + + if (\LNPay::$app->request->isAjax && $wModel->load(\LNPay::$app->request->post())) { + \LNPay::$app->response->format = \yii\web\Response::FORMAT_JSON; + + try { + $bt = $wModel->processWithdrawal(); + } catch (\Throwable $e) { //man this is jank now + return [Html::getInputId($wModel, 'payment_request')=>$wModel->getErrors('payment_request')]; + } + + if (empty($result)) { + \LNPay::$app->session->setFlash('bt',true); + return []; + } else { + return $result; + } + } + } + + /** + * Creates a new Wallet model. + * If creation is successful, the browser will be redirected to the 'view' page. + * @return mixed + */ + public function actionCreate() + { + $model = new Wallet(); + + if ($model->load(\LNPay::$app->request->post()) && $model->save()) { + return $this->redirect(['view', 'id' => $model->id]); + } + + return $this->render('create', [ + 'model' => $model, + ]); + } + + /** + * Updates an existing Wallet model. + * If update is successful, the browser will be redirected to the 'view' page. + * @param integer $id + * @return mixed + * @throws NotFoundHttpException if the model cannot be found + */ + public function actionUpdate($id) + { + $model = $this->findModel($id); + + if ($model->load(\LNPay::$app->request->post()) && $model->save()) { + return $this->redirect(['view', 'id' => $model->id]); + } + + return $this->render('update', [ + 'model' => $model, + ]); + } + + /** + * Deletes an existing Wallet model. + * If deletion is successful, the browser will be redirected to the 'index' page. + * @param integer $id + * @return mixed + * @throws NotFoundHttpException if the model cannot be found + */ + public function actionDelete($id) + { + $this->findModel($id)->delete(); + + return $this->redirect(['index']); + } + + /** + * Finds the Wallet model based on its primary key value. + * If the model is not found, a 404 HTTP exception will be thrown. + * @param integer $id + * @return Wallet the loaded model + * @throws NotFoundHttpException if the model cannot be found + */ + protected function findModel($id) + { + if (($model = Wallet::find()->where(['user_id'=>\LNPay::$app->user->id,'id'=>$id])->orWhere(['external_hash'=>$id,'user_id'=>\LNPay::$app->user->id])->one()) !== null) { + return $model; + } + + throw new NotFoundHttpException('The requested page does not exist.'); + } +} diff --git a/src/wallet/controllers/WalletTransactionController.php b/src/wallet/controllers/WalletTransactionController.php new file mode 100644 index 00000000..5a91fffb --- /dev/null +++ b/src/wallet/controllers/WalletTransactionController.php @@ -0,0 +1,129 @@ + [ + 'class' => VerbFilter::className(), + 'actions' => [ + 'delete' => ['POST'], + ], + ], + ]; + } + + /** + * Lists all WalletTransaction models. + * @return mixed + */ + public function actionIndex() + { + $searchModel = new WalletTransactionSearch(); + $searchModel->user_id = \LNPay::$app->user->id; + $dataProvider = $searchModel->search(\LNPay::$app->request->queryParams); + + return $this->render('index', [ + 'searchModel' => $searchModel, + 'dataProvider' => $dataProvider, + ]); + } + + /** + * Displays a single WalletTransaction model. + * @param integer $id + * @return mixed + * @throws NotFoundHttpException if the model cannot be found + */ + public function actionView($id) + { + $model = $this->findModel($id); + + return $this->render('view', [ + 'model' => $model, + ]); + } + + /** + * Creates a new WalletTransaction model. + * If creation is successful, the browser will be redirected to the 'view' page. + * @return mixed + */ + public function actionCreate() + { + $model = new WalletTransaction(); + + if ($model->load(\LNPay::$app->request->post()) && $model->save()) { + return $this->redirect(['view', 'id' => $model->id]); + } + + return $this->render('create', [ + 'model' => $model, + ]); + } + + /** + * Updates an existing WalletTransaction model. + * If update is successful, the browser will be redirected to the 'view' page. + * @param integer $id + * @return mixed + * @throws NotFoundHttpException if the model cannot be found + */ + public function actionUpdate($id) + { + $model = $this->findModel($id); + + if ($model->load(\LNPay::$app->request->post()) && $model->save()) { + return $this->redirect(['view', 'id' => $model->id]); + } + + return $this->render('update', [ + 'model' => $model, + ]); + } + + /** + * Deletes an existing WalletTransaction model. + * If deletion is successful, the browser will be redirected to the 'index' page. + * @param integer $id + * @return mixed + * @throws NotFoundHttpException if the model cannot be found + */ + public function actionDelete($id) + { + $this->findModel($id)->delete(); + + return $this->redirect(['index']); + } + + /** + * Finds the Wallet model based on its primary key value. + * If the model is not found, a 404 HTTP exception will be thrown. + * @param integer $id + * @return WalletTransaction the loaded model + * @throws NotFoundHttpException if the model cannot be found + */ + protected function findModel($id) + { + if (($model = WalletTransaction::find()->where(['user_id'=>\LNPay::$app->user->id,'id'=>$id])->orWhere(['external_hash'=>$id,'user_id'=>\LNPay::$app->user->id])->one()) !== null) { + return $model; + } + + throw new NotFoundHttpException('The requested page does not exist.'); + } +} diff --git a/src/wallet/controllers/api/v1/LnurlpayController.php b/src/wallet/controllers/api/v1/LnurlpayController.php new file mode 100644 index 00000000..28acaa51 --- /dev/null +++ b/src/wallet/controllers/api/v1/LnurlpayController.php @@ -0,0 +1,262 @@ + ['POST','OPTIONS'], + 'update' => ['PUT','PATCH','POST','OPTIONS'], + 'delete' => ['DELETE','OPTIONS'], + 'view' => ['GET','OPTIONS'], + 'index'=> ['GET','OPTIONS'], + 'view-all'=>['GET','OPTIONS'], + 'lightning-address'=> ['GET','OPTIONS'], + 'probe'=>['GET','OPTIONS'] + ]; + } + + public static function findModel($wallet_lnurlpay_id) + { + return WalletLnurlpay::find()->where(['external_hash'=>$wallet_lnurlpay_id,'user_id'=>\LNPay::$app->user->id])->one(); + } + + public function actionView($wallet_lnurlpay_id) + { + if ($l = static::findModel($wallet_lnurlpay_id)) { + return $l; + } else { + throw new InvalidLnurlpayLinkException('Unknown lnurlpay id'); + } + } + + public function actionUpdate($wallet_lnurlpay_id) + { + if ($l = static::findModel($wallet_lnurlpay_id)) { + $l->load(\LNPay::$app->request->post(),''); + if ($l->validate() && $l->save()) { + return static::findModel($wallet_lnurlpay_id); + } else { + throw new UnableToUpdateLnurlpayException(HelperComponent::getFirstErrorFromFailedValidation($l)); + } + } else { + throw new InvalidLnurlpayLinkException('Unknown lnurlpay id'); + } + } + + public function actionCreate($access_key) + { + $wallet = $this->findByKey($access_key); + $this->checkAccessKey(UserAccessKeyBehavior::ROLE_WALLET_ADMIN); + + $l = new WalletLnurlpay(); + $l->load(\LNPay::$app->request->post(),''); + + $l->user_id = \LNPay::$app->user->id; + $l->wallet_id = $wallet->id; + if ($cdi = \LNPay::$app->request->post('custy_domain_id')) { + if ($cd = CustyDomain::findByHash($cdi)) + $l->custy_domain_id = $cd->id; + else + throw new UnableToCreateLnurlpayException('Invalid custy_domain_id'); + } + + if ($l->validate() && $l->save()) { + return $l; + } else { + throw new UnableToCreateLnurlpayException(HelperComponent::getFirstErrorFromFailedValidation($l)); + } + } + + /* + public function actionViewAll() + { + $modelClass = $this->modelClass; + return new \yii\data\ActiveDataProvider([ + 'query' => $modelClass::find()->where(['user_id'=>\LNPay::$app->user->id]), + 'pagination' => [ + 'defaultPageSize' => 100, + ], + 'sort' => [ + 'defaultOrder' => [ + 'created_at' => SORT_DESC + ] + ], + ]); + } + */ + public function actionLightningAddress($username,$custy_domain_id=NULL) + { + $prefix = explode("_",$username); + $lnurlpModel = null; + $cd = null; + + if ($prefix[0] == 'lnurlp') { + $lnurlpModel = WalletLnurlpay::findByHash($username); + } + $referrer = parse_url(\LNPay::$app->request->referrer); + if (@$referrer['host']) { + $host = $referrer['host']; + } else { + $host = parse_url(\LNPay::$app->request->absoluteUrl)['host']; + $subdomain = explode('.',$host)[0]; + $cd = CustyDomain::findByHash($subdomain); + } + + if (!$cd) { + $cd = CustyDomain::find()->where(['domain_name'=>$host])->one(); + } + + if (!$cd) { + if ($custy_domain_id) { + $cd = CustyDomain::findByHash($custy_domain_id); + } + } + + if ($cd && !$lnurlpModel) { + //This is a ln address with a domain that is in our system! + $lnurlpModel = WalletLnurlpay::find() + ->where(['lnurlp_identifier'=>$username,'custy_domain_id'=>$cd->id]) + ->one(); + } + + if (@$lnurlpModel) { + $access_key = $lnurlpModel->wallet->getFirstAccessKeyByRole(UserAccessKeyBehavior::ROLE_WALLET_LNURL_PAY); + return $this->actionLnurlProcess($access_key,$lnurlpModel->external_hash); + } else { + throw new BadRequestHttpException('Invalid username ('.$username.') for domain:'.$host); + } + + + } + + public function actionLnurlProcess($access_key,$wallet_lnurlpay_id,$amount=null,$comment=null) + { + try { + $w = $this->findByKey($access_key); + $lnurlpModel = WalletLnurlpay::findByHash($wallet_lnurlpay_id); + + if ( (!$w || !$lnurlpModel) || ($w->id != $lnurlpModel->wallet_id) || !$lnurlpModel->isActive) { + throw new UnauthorizedHttpException("Wallet or lnurlpay link is not valid or active"); + } + + if ($amount) { //issue the callback with PR + //checks + if ($amount < $lnurlpModel->lnurlp_minSendable_msat || + $amount > $lnurlpModel->lnurlp_maxSendable_msat + ) { + $satMin = $lnurlpModel->lnurlp_minSendable_msat/1000; + $satMax = $lnurlpModel->lnurlp_maxSendable_msat/1000; + $satAmount = $amount/1000; + return ["status"=>"ERROR","reason"=>"{$satAmount} sat is not within {$satMin} - {$satMax} sat"]; + } + + + + + $lnTx = $w->generateLnInvoice( + [ + 'num_satoshis'=>ceil($amount/1000), + 'description_hash' => hash('sha256',utf8_encode($lnurlpModel->lnurlp_metadata)), + 'memo'=>($comment??'LNURL PAY') + ], + \LNPay::$app->request->getQueryParams() + ); + $array = [ + 'pr' => $lnTx->payment_request, + 'routes' => [], + ]; + + //add successAction and other things + + + return $array; + } else { + return [ + 'minSendable' => $lnurlpModel->lnurlp_minSendable_msat, + 'maxSendable' => $lnurlpModel->lnurlp_maxSendable_msat, + 'commentAllowed' => $lnurlpModel->lnurlp_commentAllowed??0, + 'tag' => 'payRequest', + 'metadata' => $lnurlpModel->lnurlp_metadata, + 'callback' => $lnurlpModel->lnurl_decoded + ]; + } + } catch ( \Throwable $t) { + return ["status"=>"ERROR","reason"=>$t->getMessage()]; + } + } + + public function actionPay($access_key) + { + $wallet = $this->findByKey($access_key); + $this->checkAccessKey(UserAccessKeyBehavior::PERM_WALLET_WITHDRAW); + $bodyParams = \LNPay::$app->getRequest()->getBodyParams(); + + if ($this->isAsync) { + $id = \LNPay::$app->queue->push(new LnWalletLnurlPayFormJob([ + 'access_key' => $access_key, + 'wallet_id' => $wallet->id, + 'bodyParams'=>$bodyParams + ])); + return ['success'=>1,'id'=>$id]; + } else { + $job = new LnWalletLnurlPayFormJob([ + 'access_key' => $access_key, + 'wallet_id' => $wallet->id, + 'bodyParams'=>$bodyParams + ]); + $wtx_id = $job->execute(\LNPay::$app->queue); + \LNPay::$app->response->statusCode = 201; + return WalletTransaction::findOne($wtx_id); + } + } + + public function actionProbe($lnurlpayEncodedOrLnAddress) + { + return LnWalletLnurlpayPayForm::probe($lnurlpayEncodedOrLnAddress); + } + + + +} diff --git a/src/wallet/controllers/api/v1/WalletController.php b/src/wallet/controllers/api/v1/WalletController.php new file mode 100644 index 00000000..4258eef7 --- /dev/null +++ b/src/wallet/controllers/api/v1/WalletController.php @@ -0,0 +1,378 @@ + ['POST','OPTIONS'], + 'update' => ['PUT','PATCH','POST','OPTIONS'], + 'delete' => ['DELETE','OPTIONS'], + 'view' => ['GET','OPTIONS'], + 'index'=> ['GET','OPTIONS'], + 'view-all'=>['GET','OPTIONS'] + ]; + } + + public function actionCreate() + { + $model = new Wallet(); + + $model->load(\LNPay::$app->getRequest()->getBodyParams(), ''); + $model->user_id = \LNPay::$app->user->id; + + if ($model->deterministic_identifier) { + $model->external_hash = 'walx_'.HelperComponent::generateDeterministicString( + $model->deterministic_identifier, + $salt = \LNPay::$app->user->identity->org->external_hash, + $length = 14); + } + + if ($model->save()) { + $response = \LNPay::$app->getResponse(); + $response->setStatusCode(201); + + $wallet = Wallet::findOne($model->id); + return ArrayHelper::merge($wallet->toArray(),['access_keys'=>$wallet->userAccessKeys]); + + } elseif (!$model->hasErrors()) { + throw new ServerErrorHttpException('Failed to create the object for unknown reason.'); + } else { + throw new BadRequestHttpException(HelperComponent::getFirstErrorFromFailedValidation($model)); + } + } + + /** + * + * @param $id + * @return mixed + * @throws NotFoundHttpException + */ + public function actionView($access_key) + { + $this->checkAccessKey(UserAccessKeyBehavior::PERM_WALLET_READ); + return $this->findByKey($access_key); + } + + + public function actionViewAll() + { + $modelClass = $this->modelClass; + return new \yii\data\ActiveDataProvider([ + 'query' => $modelClass::find()->where(['user_id'=>\LNPay::$app->user->id]), + 'pagination' => [ + 'defaultPageSize' => 100, + ], + 'sort' => [ + 'defaultOrder' => [ + 'created_at' => SORT_DESC + ] + ], + ]); + } + + public function actionWithdraw($access_key) + { + $wallet = $this->findByKey($access_key); + $model = new LnWalletWithdrawForm(); + $model->load(\LNPay::$app->getRequest()->getBodyParams(), ''); + $model->wallet_id = $wallet->id; + \LNPay::$app->getRequest()->getBodyParam('passThru',[]); + + $array = []; + if ($passThru = \LNPay::$app->request->getBodyParam('passThru')) { + if (is_array($passThru)) { + $array = $passThru; + } else { + try { + $array = Json::decode($passThru); + } catch (\Throwable $t) { + throw new BadRequestHttpException('passThru data must be valid json'); + } + } + } + + $model->passThru = $array; + + $this->checkAccessKey(UserAccessKeyBehavior::PERM_WALLET_WITHDRAW); + + $wtx = $model->processWithdrawal(['method'=>'api']); + \LNPay::$app->response->statusCode = 201; + return WalletTransaction::findOne($wtx->id); + } + + public function actionKeysend($access_key) + { + $wallet = $this->findByKey($access_key); + $bodyParams = \LNPay::$app->getRequest()->getBodyParams(); + $this->checkAccessKey(UserAccessKeyBehavior::PERM_WALLET_WITHDRAW); + + + + if ($this->isAsync) { + $id = \LNPay::$app->queue->push(new LnWalletKeysendFormJob([ + 'access_key' => $access_key, + 'wallet_id' => $wallet->id, + 'bodyParams'=>$bodyParams + ])); + return ['success'=>1,'id'=>$id]; + } else { + $job = new LnWalletKeysendFormJob([ + 'access_key' => $access_key, + 'wallet_id' => $wallet->id, + 'bodyParams'=>$bodyParams + ]); + $wtx_id = $job->execute(\LNPay::$app->queue); + } + + \LNPay::$app->response->statusCode = 201; + return WalletTransaction::findOne($wtx_id); + } + + public function actionLnurlWithdraw($access_key) + { + $wallet = $this->findByKey($access_key); + $this->checkAccessKey(UserAccessKeyBehavior::PERM_WALLET_WITHDRAW); + + $params = [ + 'num_satoshis'=>\LNPay::$app->request->getQueryParam('num_satoshis'), + 'memo'=>\LNPay::$app->request->getQueryParam('memo'), + 'ott'=>HelperComponent::generateRandomString(12), + 'passThru'=>\LNPay::$app->request->getQueryParam('passThru'), + 'public'=>\LNPay::$app->request->getQueryParam('public') + ]; + $array = [ + 'lnurl'=>$wallet->getLnurlWithdrawLinkEncoded($access_key=NULL,$params), + 'ott'=>$params['ott'], + ]; + return $array; + } + + public function actionLnurlWithdrawStatic($access_key) + { + $wallet = $this->findByKey($access_key); + $this->checkAccessKey(UserAccessKeyBehavior::ROLE_WALLET_ADMIN); + + $params = [ + 'num_satoshis'=>\LNPay::$app->request->getQueryParam('num_satoshis'), + 'memo'=>\LNPay::$app->request->getQueryParam('memo'), + 'passThru'=>\LNPay::$app->request->getQueryParam('passThru') + ]; + $array = [ + 'lnurl'=>$wallet->getLnurlWithdrawLinkEncoded($access_key=NULL,$params) + ]; + return $array; + } + + public function actionLnurlProcessPublic($ott,$access_key=null,$pr=null,$num_satoshis=null,$memo=null,$k1=null,$passThru=null) + { + try { + if ($pr) { + $result = LnNode::decodeInvoiceHelper($pr); + $wallet = @Wallet::find()->where(new Expression("JSON_EXTRACT(wallet.json_data, '$.ott.{$ott}') = '{$result['num_satoshis']}'"))->one(); + if (!$wallet) { + throw new UnauthorizedHttpException('Invalid satoshi amount'); + } + } else { + $wallet = @Wallet::find()->where(new Expression("JSON_EXTRACT(wallet.json_data, '$.ott.{$ott}') = '{$num_satoshis}'"))->one(); + if (!$wallet) { + throw new UnauthorizedHttpException('Invalid public LNURL withdraw token'); + } + } + } catch (\Throwable $t) { + return ['status'=>'ERROR','reason'=>$t->getMessage()]; + } + + + return $this->actionLnurlProcess($wallet->getFirstAccessKeyByRole(UserAccessKeyBehavior::ROLE_WALLET_ADMIN),$ott,$pr,$num_satoshis,$memo,$k1,$passThru); + } + + public function actionLnurlProcess($access_key,$ott=null,$pr=null,$num_satoshis=null,$memo=null,$k1=null,$passThru=null) + { + $wallet = $this->findByKey($access_key); + $wallet->updateBalance(); + $this->checkAccessKey(UserAccessKeyBehavior::PERM_WALLET_WITHDRAW); + + if ($pr) { + + //Process payment request + try { + + if ($ott) { + $dbOtt = ($wallet->getJsonData('ott')?:[]); + if (!array_key_exists($ott,$dbOtt)) + throw new UnauthorizedHttpException('LNURL is no longer valid: '.\LNPay::$app->request->absoluteUrl); + } else { + $this->checkAccessKey(UserAccessKeyBehavior::PERM_WALLET_PUBLIC_WITHDRAW); + } + + $model = new LnWalletWithdrawForm(); + $model->payment_request = $pr; + $model->wallet_id = $wallet->id; + + $pt = @json_decode(@base64_decode($passThru),TRUE); + $model->passThru = $pt; + + $model->processWithdrawal(['method'=>'lnurl','k1'=>$k1,'ott'=>$ott]); + \LNPay::$app->response->statusCode = 201; + $wallet->deleteJsonData([$ott]); + return ['status'=>'OK']; + } catch (\Throwable $e) { + \LNPay::$app->response->statusCode = 200; + return ['status'=>'ERROR','reason'=>$e->getMessage()]; + } + + } else { + + if (empty($memo)) { + $memo = \LNPay::$app->name.' Wallet Withdraw'; + } + + $json = []; + $baseUrl = ["/v1/wallet/{$access_key}/lnurl-process"]; + $json['callback'] = \LNPay::$app->urlManager->createAbsoluteUrl($baseUrl+['ott'=>$ott,'passThru'=>$passThru]); + $json['k1'] = 'k1'; + $json['maxWithdrawable'] = ($wallet->getIsEligibleToWithdraw($num_satoshis)?$num_satoshis:$wallet->balance)*1000; + $json['defaultDescription'] = $memo; + $json['minWithdrawable'] = $json['maxWithdrawable']; + $json['tag'] = \tkijewski\lnurl\TAG_WITHDRAW; + + if (!$ott) { //only return balanceCheck if this is NOT a disposable LNURL + $balanceCheck = $wallet->getLnurlWithdrawLinkEncoded($access_key=NULL); + $json['balanceCheck'] = \tkijewski\lnurl\decodeUrl($balanceCheck)['url']; + } + + + return $json; + } + } + + public function actionInvoice($access_key) + { + $wallet = $this->findByKey($access_key); + $this->checkAccessKey(UserAccessKeyBehavior::PERM_WALLET_DEPOSIT); + + $lnTx = new LnTx(); + $allowedParams = [ + 'num_satoshis'=>0, + 'memo' => \LNPay::$app->name.' Invoice', + 'expiry' => 86400, + 'description_hash' => NULL + ]; + + $array = []; + if ($passThru = \LNPay::$app->request->getBodyParam('passThru')) { + if (is_array($passThru)) { + $array = $passThru; + } else { + try { + $array = Json::decode($passThru); + } catch (\Throwable $t) { + throw new BadRequestHttpException('passThru data must be valid json'); + } + } + } + $lnTx->passThru = $array; + $lnTx->appendJsonData(['wallet_id'=>$wallet->external_hash]); + $lnTx->user_id = $wallet->user_id; + $lnTx->ln_node_id = $wallet->ln_node_id; + + foreach ($allowedParams as $param => $default) { + $lnTx->{$param} = (\LNPay::$app->request->getBodyParam($param,$default)); + } + + if ($lnTx->validate()) + $lnTxObject = $lnTx->generateInvoice($checkLimits=true); + else + throw new BadRequestHttpException(HelperComponent::getFirstErrorFromFailedValidation($lnTx)); + + \LNPay::$app->response->statusCode = 201; + return LnTx::findOne($lnTxObject->id); + } + + public function actionTransfer($access_key) + { + $this->checkAccessKey(UserAccessKeyBehavior::PERM_WALLET_TRANSFER); + + $wtf = new WalletTransferForm(); + $wtf->load(\LNPay::$app->request->getBodyParams(),''); + $wtf->source_wallet_id = $this->findByKey($access_key)->external_hash; + + if ($wtf->validate()) { + $result = $wtf->executeTransfer(); + $wtx_in = WalletTransaction::findOne($result['wtx_transfer_in']); + $wtx_out = WalletTransaction::findOne($result['wtx_transfer_out']); + } + else + throw new BadRequestHttpException(HelperComponent::getFirstErrorFromFailedValidation($wtf)); + + \LNPay::$app->response->statusCode = 201; + return ['wtx_transfer_in'=>$wtx_in->toArray(),'wtx_transfer_out'=>$wtx_out->toArray()]; + } + + public function actionTransactions($access_key) + { + $wallet = $this->findByKey($access_key); + $this->checkAccessKey(UserAccessKeyBehavior::PERM_WALLET_READ); + + return new \yii\data\ActiveDataProvider([ + 'query' => WalletTransaction::find()->where(['wallet_id'=>$wallet->id]), + 'pagination' => [ + 'defaultPageSize'=>Yii::$app->request->getQueryParam('page-size')??100, + 'pageSizeLimit'=>[1,500] + ], + 'sort' => [ + 'defaultOrder' => [ + 'created_at' => SORT_DESC + ] + ], + ]); + } + + +} diff --git a/src/wallet/controllers/api/v1/WalletTransactionController.php b/src/wallet/controllers/api/v1/WalletTransactionController.php new file mode 100644 index 00000000..a983508a --- /dev/null +++ b/src/wallet/controllers/api/v1/WalletTransactionController.php @@ -0,0 +1,61 @@ + ['POST'], + //'update' => ['PUT','PATCH','POST'], + //'delete' => ['DELETE'], + 'view' => ['GET'], + 'index'=> ['GET'], + ]; + } + + + public function actionViewAll($wallet_id=NULL) + { + $searchModel = new WalletTransactionSearch(); + $searchModel->user_id = \LNPay::$app->user->id; + + if ($wallet_id) { + $wal = Wallet::findById($wallet_id); + if (!$wal || ($wal->user_id != \LNPay::$app->user->id)) { + throw new UnauthorizedHttpException('Wallet not found'); + } + $searchModel->wallet_id = $wal->id; + } + $dataProvider = $searchModel->search(\LNPay::$app->request->queryParams); + $dataProvider->pagination->defaultPageSize = 20; + + return $dataProvider; + } + + + +} diff --git a/src/wallet/controllers/pub/IndexController.php b/src/wallet/controllers/pub/IndexController.php new file mode 100644 index 00000000..6ba44e69 --- /dev/null +++ b/src/wallet/controllers/pub/IndexController.php @@ -0,0 +1,49 @@ +layout = '@app/views/layouts/public'; + + $wallet = Wallet::findByKey($access_key); + if (!$wallet) { + return $this->render('invalid-wallet'); + } + + $wModel = new LnWalletWithdrawForm(); + $dModel = new LnWalletDepositForm(); + + //Handle Withdrawal + if (\LNPay::$app->request->isPost) { + if ($wModel->load(\LNPay::$app->request->post())) { + if (\LNPay::$app->session->getFlash('bt')) { + \LNPay::$app->session->setFlash('success', 'Withdrawal Sent!'); + //return $this->refresh(); + } + } + } + + return $this->render('index',[ + 'wallet'=>$wallet, + 'wModel' => $wModel, + 'dModel' => $dModel, + ]); + } +} \ No newline at end of file diff --git a/src/wallet/exceptions/InvalidLnurlpayLinkException.php b/src/wallet/exceptions/InvalidLnurlpayLinkException.php new file mode 100644 index 00000000..7e0233d3 --- /dev/null +++ b/src/wallet/exceptions/InvalidLnurlpayLinkException.php @@ -0,0 +1,20 @@ +walletObject->updateBalance(); + + return true; + } + + /** + * @inheritdoc + */ + public function rules() + { + return [ + [['num_satoshis','addr'], 'required'], + [['num_satoshis','channel'], 'integer'], + [['label','wallet_id','addr'],'string'], + [['fast'],'boolean'], + [['wallet_id'],'checkWallet'], + [['num_satoshis'],'checkMaxWithdraw'], + ]; + } + + public function attributeLabels() + { + return [ + 'addr'=>'Destination Address', + 'num_satoshis'=>'Amount (sats)', + 'channel'=>'Outbound Channel' + ]; + } + + public function getWalletObject() + { + return Wallet::findById($this->wallet_id); + } + + public function checkWallet() + { + if (!$this->walletObject) + throw new \yii\web\ServerErrorHttpException('Unknown wallet, cannot continue!'); + } + + /** + * check max withdraw + * + */ + public function checkMaxWithdraw($attribute,$params,$validator) + { + $maxWithdraw = $this->walletObject->availableBalance; + + if ($this->num_satoshis > $maxWithdraw) { + $this->addError($attribute,'Not enough sats in wallet! Max balance: '.$maxWithdraw); + return false; + } + } + + public function attemptLoopOut() + { + //Actually call the loop function + + //Register the transactions + $wtxDebit = new WalletTransaction(); + $wtxDebit->wtx_type_id = WalletTransactionType::LN_LOOP_OUT; + $wtxDebit->user_id = $this->walletObject->user_id; + $wtxDebit->wallet_id = $this->walletObject->id; + $wtxDebit->num_satoshis = $this->num_satoshis * -1; + $wtxDebit->ln_tx_id = null; + $wtxDebit->user_label = $this->label. ' (loop out)'; + $wtxDebit->appendJsonData(['dest_address'=>$this->addr]); + if (!$wtxDebit->save()) { + throw new ServerErrorHttpException(HelperComponent::getFirstErrorFromFailedValidation($wtxDebit)); + } + + //Success! + } +} diff --git a/src/wallet/models/LnWalletDepositForm.php b/src/wallet/models/LnWalletDepositForm.php new file mode 100644 index 00000000..70dd180d --- /dev/null +++ b/src/wallet/models/LnWalletDepositForm.php @@ -0,0 +1,59 @@ + 0, 'operator' => '>='], + [['memo','wallet_id'],'string'], + ['wallet_id','checkWallet'] + ]; + } + + public function attributeLabels() + { + return [ + 'payment_request'=>'Payment Request', + 'wallet_id'=>'Wallet ID' + ]; + } + + public function getWalletObject() + { + return Wallet::findById($this->wallet_id); + } + + public function checkWallet() + { + if (!$this->walletObject) + throw new \yii\web\ServerErrorHttpException('Unknown wallet, cannot continue!'); + + $this->walletObject->updateBalance(); + } +} diff --git a/src/wallet/models/LnWalletKeysendForm.php b/src/wallet/models/LnWalletKeysendForm.php new file mode 100644 index 00000000..ebae6d0c --- /dev/null +++ b/src/wallet/models/LnWalletKeysendForm.php @@ -0,0 +1,209 @@ +66], + [['num_satoshis','fee_limit_msat'], 'compare', 'compareValue' => 0, 'operator' => '>=', 'type' => 'number'], + ['dest_pubkey', 'checkWallet'], + ['dest_pubkey', 'maxWithdraw'], + ['dest_pubkey', 'callKeysend'], + ['custom_records','safe'], + ]; + } + + public function attributeLabels() + { + return ['payment_request'=>'Payment Request','wallet_id'=>'Wallet ID']; + } + + public function getWalletObject() + { + return Wallet::find()->where(['external_hash'=>$this->wallet_id])->one(); + } + + public function checkWallet() + { + if (!$this->walletObject) + throw new \yii\web\ServerErrorHttpException('Unknown wallet, cannot continue!'); + + $this->walletObject->updateBalance(); + } + + /** + * check max withdraw + * + */ + public function maxWithdraw($attribute,$params,$validator) + { + $maxWithdraw = $this->walletObject->balance; + $invoiceNumSatoshis = $this->num_satoshis; + + if ($invoiceNumSatoshis > $maxWithdraw) { + $this->addError($attribute,'Invoice too large :) Max balance: '.$maxWithdraw); + return false; + } + } + + public function getRequestParameters() + { + return ArrayHelper::merge([ + 'dest_pubkey'=>$this->dest_pubkey, + 'amt_msat'=>$this->num_satoshis*1000, + 'custom_records'=>$this->custom_records, + ],$this->payment_options); + } + + /** + * Attempt to pay invoice + * + */ + public function callKeysend($attribute,$params,$validator) + { + try { + if ($this->fee_limit_msat !== NULL) { + $fee_limit_msat = $this->fee_limit_msat; + } else { + $fee_limit_msat = 1000 * $this->walletObject->lnNode->getFeeRate(['num_satoshis'=>$this->num_satoshis,'dest_pubkey'=>$this->dest_pubkey]); + } + $this->payment_options['fee_limit_msat'] = $fee_limit_msat; + + $rpcConnector = $this->walletObject->lnNode->getLndConnector('RPC'); + $result = $rpcConnector->keysend($this->dest_pubkey,$this->num_satoshis,$this->custom_records,$this->payment_options); + } catch (\Throwable $t) { + $this->walletObject->user->registerAction(ActionName::WALLET_SEND_FAILURE,[ + 'spontaneous'=>1, + 'wal'=>$this->walletObject->toArray(), + 'node_request_parameters'=>$this->requestParameters, + 'failureReason'=>$t->getMessage(), + 'passThru'=>$this->passThru] + ); + + $this->addError($attribute,$t->getMessage()); + return false; + } + + \LNPay::info(VarDumper::export($result),__METHOD__); + $this->paidInvoiceObject = (object) $result; + } + + public function processKeysend($data=[]) + { + if (\LNPay::$app->mutex->acquire($this->walletObject->publicId) || ($this->walletObject->balance > ($this->num_satoshis*10) ) ) { + + if ($this->validate(['num_satoshis','fee_limit_msat']) && $this->validate()) { + //Carry on! + } elseif (!$this->hasErrors()) { + throw new ServerErrorHttpException('Failed to keysend for unknown reason'); + } else { + $this->walletObject->releaseMutex(); + throw new BadRequestHttpException(HelperComponent::getFirstErrorFromFailedValidation($this)); + } + + if ($this->paidInvoiceObject) { + + $arrayPaidInvoiceObject = (array) $this->paidInvoiceObject; + $outgoingChanId = @$arrayPaidInvoiceObject['htlcs'][0]['route']['hops'][0]['chanId']; + + foreach ($this->paidInvoiceObject->htlcs as $htlc) { + foreach ($htlc['route']['hops'] as $hop) { + if ($hop['pubKey'] == $this->dest_pubkey) { + $this->lastHop = $hop; + } + } + } + + $customRecords = $this->lastHop['customRecords']; + array_walk($customRecords,function(&$item1, $key){ + $item1 = base64_decode($item1); + if ($key == LndNodeConnector::KEYSEND_TLV_KEY) + $item1 = bin2hex($item1); + }); + + $lnTx = new LnTx(); + $lnTx->user_id = $this->walletObject->user_id; + $lnTx->num_satoshis = $this->paidInvoiceObject->valueSat; + $lnTx->fee_msat = @$this->paidInvoiceObject->feeMsat; + $lnTx->memo = $this->num_satoshis.' keysend to '.$this->dest_pubkey; + $lnTx->payment_request = $this->dest_pubkey.':'.$this->num_satoshis; + $lnTx->r_hash_decoded = $this->paidInvoiceObject->paymentHash; + $lnTx->dest_pubkey = $this->dest_pubkey; + $lnTx->expires_at = NULL; + $lnTx->payment_preimage = $this->paidInvoiceObject->paymentPreimage; + $lnTx->settled = 1; + $lnTx->settled_at = time(); + $lnTx->is_keysend = true; + $lnTx->custom_records = $customRecords; + $lnTx->passThru = $this->passThru; + $lnTx->ln_node_id = $this->walletObject->ln_node_id; + $lnTx->appendJsonData(ArrayHelper::merge($data,['outgoingChanId'=>$outgoingChanId])); + + if ($lnTx->save()) { + //good to go + } else { + throw new \Exception (HelperComponent::getFirstErrorFromFailedValidation($lnTx)); + } + + $wtx = new WalletTransaction(); + $wtx->user_id = $this->walletObject->user_id; + $wtx->wallet_id = $this->walletObject->id; + $wtx->num_satoshis = $this->num_satoshis*-1; + $wtx->ln_tx_id = $lnTx->id; + $wtx->user_label = $lnTx->memo; + $wtx->passThru = $this->passThru; + $wtx->appendJsonData($data); + + if ($wtx->save()) { + $this->walletObject->releaseMutex(); + return $wtx; + } else { + throw new \Exception ('Unable to attach paid withdraw invoice to wallet:'.HelperComponent::getFirstErrorFromFailedValidation($lnTx)); + } + + } else { + throw new \yii\web\ServerErrorHttpException('Issue processing keysend'); + } + } else { + throw new WalletBusyException($this->walletObject->publicId); + } + } +} diff --git a/src/wallet/models/LnWalletLnurlpayPayForm.php b/src/wallet/models/LnWalletLnurlpayPayForm.php new file mode 100644 index 00000000..b001f70c --- /dev/null +++ b/src/wallet/models/LnWalletLnurlpayPayForm.php @@ -0,0 +1,169 @@ + function($model) { return empty($model->ln_address); }], + ['ln_address', 'required', 'when' => function($model) { return empty($model->lnurlpay_encoded); }], + [['amt_msat'], 'compare', 'compareValue' => 0, 'operator' => '>='], + [['lnurlpay_encoded'],'validLnurl'], + [['ln_address'],'email'], + [['amt_msat'],'amountCheck'], + [['comment'],'string'], + [['comment'],'commentCheck'] + ]; + } + + public function attributeLabels() + { + return [ + 'lnurlpay_encoded'=>'Encoded LNURL Pay', + 'amt_msat'=>'Amount millisats' + ]; + } + + public function validLnurl() + { + $decoded = \tkijewski\lnurl\decodeUrl($this->lnurlpay_encoded); + if (isset($decoded['url'])) { + $this->_lnurlpay_decoded = $decoded['url']; + } else { + $this->addError('lnurlpay_encoded','could not decode lnurlpay'); + } + + } + + public function amountCheck() + { + if ($this->amt_msat > $this->probe_json['maxSendable']) { + $this->addError('amt_msat','LNURL cannot accept more than '.$this->probe_json['maxSendable'].' msat'); + } + if ($this->amt_msat < $this->probe_json['minSendable']) { + $this->addError('amt_msat','LNURL cannot accept less than '.$this->probe_json['minSendable'].' msat'); + } + } + + public function commentCheck() + { + $commentAllowed = @$this->probe_json['commentAllowed']; + if ($this->comment && $commentAllowed) { + if (strlen($this->comment) > $commentAllowed) { + $this->addError('comment','Comment length is too long ('.strlen($this->comment).') - endpoint supports ('.$commentAllowed.') characters'); + } + } + } + + public function requestRemoteInvoice() + { + $client = new \GuzzleHttp\Client([ + 'curl'=> [], + 'http_errors'=>true, + 'headers' => ['SERVICE'=>'LNPAY'], + 'debug'=>false + ]); + + $r = null; + $lnurl = $this->probe_json['callback'] . (stripos($this->probe_json['callback'],'?')!==FALSE?'&':'?'); + $url = $lnurl.'amount='.$this->amt_msat; + + if ($this->comment) { + $url .= '&comment='.$this->comment; + } + + $response = $client->request('GET', $url); + $r = $response->getBody()->getContents(); + $r = json_decode($r,TRUE); + + if (isset($r['pr'])) { //clear to pay this invoice + return $r['pr']; + } else if (@$r['error']) { + throw new UnableToPayLnurlpayException('Lnurlpay service:'.$r['reason']); + } + + throw new UnableToPayLnurlpayException('Could not retrieve pr from '.$url); + } + + public static function probe($lnurlpayEncodedOrLnAddress) + { + try { + if (stripos($lnurlpayEncodedOrLnAddress,'@')!==FALSE) { + $url = static::getUrlFromLnAddress($lnurlpayEncodedOrLnAddress); + } else if ($lnurlp = \tkijewski\lnurl\decodeUrl($lnurlpayEncodedOrLnAddress)) { + if (@$lnurlp['url']) { + $url = $lnurlp['url']; + } else { + throw new InvalidLnurlpayLinkException('invalid lnurlpay link'); + } + } else { + throw new \Exception('lnurlpay_encoded or ln_address must be specified'); + } + + $client = new \GuzzleHttp\Client([ + 'curl'=> [], + 'http_errors'=>true, + 'headers' => ['SERVICE'=>'LNPAY-PROBE'], + 'debug'=>false + ]); + + $r = null; + $response = $client->request('GET', $url); + $r = $response->getBody()->getContents(); + + } catch (\Throwable $t) { + throw new InvalidLnurlpayLinkException('Invalid Address / LNURL'); + } + + $json = json_decode($r,TRUE); + if (@$json['metadata']) + $json['metadata'] = json_decode($json['metadata'],TRUE); + + return $json; + } + + public static function getUrlFromLnAddress($lnAddress) + { + $username = explode('@',$lnAddress)[0]; + $domain = explode('@',$lnAddress)[1]; + if (YII_ENV_TEST) + $url = 'http://localhost/index-test.php/.well-known/lnurlp/'.$username; + else + $url = 'https://'.$domain.'/.well-known/lnurlp/'.$username; + + return $url; + } +} diff --git a/src/wallet/models/LnWalletWithdrawForm.php b/src/wallet/models/LnWalletWithdrawForm.php new file mode 100644 index 00000000..f1b061be --- /dev/null +++ b/src/wallet/models/LnWalletWithdrawForm.php @@ -0,0 +1,230 @@ + 0, 'operator' => '>=', 'type' => 'number'], + ['payment_request', 'string'], + ['payment_request', 'checkWallet'], + ['payment_request', 'checkInvoice'], + ['payment_request', 'checkAccountLimit'], + ['payment_request', 'maxWithdraw'], + ['payment_request', 'payInvoice'] + ]; + } + + public function attributeLabels() + { + return ['payment_request'=>'Payment Request','wallet_id'=>'Wallet ID']; + } + + public function getWalletObject() + { + return Wallet::findOne($this->wallet_id); + } + + public function checkWallet() + { + if (!$this->walletObject) + throw new \yii\web\ServerErrorHttpException('Unknown wallet, cannot continue!'); + + $this->walletObject->updateBalance(); + } + + public function checkAccountLimit($attribute,$params) + { + if ($max = $this->walletObject->user->getJsonData(User::DATA_MAX_WITHDRAWAL)) { + if ($this->decodedInvoiceObject->num_satoshis > $max) { + $this->addError($attribute,'Sends are limited to: '.$max.' satoshi per request'); + return false; + } + } else if ($this->num_satoshis > User::USER_GLOBAL_MAX_LIMIT_SATS) { + $this->addError($attribute,'Sends are limited to: '.User::USER_GLOBAL_MAX_LIMIT_SATS.' satoshi per request'); + return false; + } + } + /** + * Check if valid LN Invoice + * + */ + public function checkInvoice($attribute,$params,$validator) + { + try{ + $result = $this->walletObject->lnNode->getLndConnector('RPC')->decodeInvoice($this->payment_request); + } catch (\Throwable $t) { + $this->addError($attribute,$t->getMessage()); + return false; + } + + //transition from REST to RPC keep it as object + $result = (object) $result; + + if (!@$result->num_satoshis) { + $this->addError($attribute,'Cannot process any amount invoices'); + } else { + $this->decodedInvoiceObject = $result; + } + } + + /** + * check max withdraw + * + */ + public function maxWithdraw($attribute,$params,$validator) + { + $maxWithdraw = $this->walletObject->balance; + $invoiceNumSatoshis = $this->decodedInvoiceObject->num_satoshis; + $invoiceNumMsat = $this->decodedInvoiceObject->numMsat; + + if ($invoiceNumSatoshis > $maxWithdraw) { + $this->addError($attribute,'Invoice too large :) Max balance: '.$maxWithdraw); + return false; + } + + if ($this->target_msat) { + if ($this->target_msat != $invoiceNumMsat) { + $this->addError($attribute,"Requested invoice ({$this->target_msat}) and invoice generated ({$invoiceNumMsat}) do not match."); + return false; + } + } + + } + + public function getRequestParameters() + { + return ArrayHelper::merge(['payment_request'=>$this->payment_request,'fee_limit_msat'=>$this->fee_limit_msat],[]); + } + + /** + * Attempt to pay invoice + * + */ + public function payInvoice($attribute,$params,$validator) + { + try { + if ($this->fee_limit_msat !== NULL) { + $this->fee_limit_msat = $this->fee_limit_msat; + } else { + $this->fee_limit_msat = $this->walletObject->lnNode->getFeeRate($this->decodedInvoiceObject) * 1000; + } + + $result = $this->walletObject->payLnInvoice($this->payment_request,['fee_limit_msat'=>$this->fee_limit_msat]); + if (!empty($result->payment_error)) { + throw new UnableToPayInvoiceException($result->payment_error); + } + } catch (\Throwable $t) { + $this->walletObject->user->registerAction(ActionName::WALLET_SEND_FAILURE,[ + 'spontaneous'=>0, + 'wal'=>$this->walletObject->toArray(), + 'node_request_parameters'=>$this->requestParameters, + 'failureReason'=>$t->getMessage(), + 'passThru'=>$this->passThru] + ); + $this->addError($attribute,$t->getMessage()); + return false; + } + + \LNPay::info(VarDumper::export($result),__METHOD__); + $this->paidInvoiceObject = (object) $result; + } + + public function processWithdrawal($data=[]) + { + if (\LNPay::$app->mutex->acquire($this->walletObject->publicId)) { + + if ($this->validate(['fee_limit_msat']) && $this->validate()) { + //Carry on! + } elseif (!$this->hasErrors()) { + throw new ServerErrorHttpException('Failed to withdraw for unknown reason'); + } else { + $this->walletObject->releaseMutex(); + throw new BadRequestHttpException(HelperComponent::getFirstErrorFromFailedValidation($this)); + } + + $arrayPaidInvoiceObject = (array) $this->paidInvoiceObject; + if ($this->decodedInvoiceObject && $this->paidInvoiceObject) { + $lnTx = new LnTx(); + $lnTx->user_id = $this->walletObject->user_id; + $lnTx->num_satoshis = $this->decodedInvoiceObject->num_satoshis; + $lnTx->fee_msat = @$this->paidInvoiceObject->feeMsat; + $lnTx->memo = @$this->decodedInvoiceObject->description; + $lnTx->payment_request = $this->payment_request; + $lnTx->r_hash_decoded = $this->paidInvoiceObject->payment_hash; + $lnTx->dest_pubkey = $this->decodedInvoiceObject->destination; + $lnTx->expires_at = time() + $this->decodedInvoiceObject->expiry; + $lnTx->payment_preimage = $this->paidInvoiceObject->payment_preimage; + $lnTx->settled = 1; + $lnTx->settled_at = time(); + $lnTx->passThru = $this->passThru; + $lnTx->ln_node_id = $this->walletObject->ln_node_id; + $lnTx->appendJsonData(ArrayHelper::merge($data,['outgoingChannelId'=>@$arrayPaidInvoiceObject['htlcs'][0]['route']['hops'][0]['chanId']])); + + if ($lnTx->save()) { + //good to go + } else { + throw new \Exception (HelperComponent::getFirstErrorFromFailedValidation($lnTx)); + } + + $wtx = new WalletTransaction(); + $wtx->user_id = $this->walletObject->user_id; + $wtx->wallet_id = $this->walletObject->id; + $wtx->num_satoshis = $this->decodedInvoiceObject->num_satoshis*-1; + $wtx->ln_tx_id = $lnTx->id; + $wtx->user_label = $lnTx->memo; + $wtx->wtx_type_id = ($this->wtx_type_id?:WalletTransactionType::LN_WITHDRAWAL); + $wtx->passThru = $this->passThru; + $wtx->appendJsonData($data); + + if ($wtx->save()) { + $this->walletObject->releaseMutex(); + return $wtx; + } else { + throw new \Exception ('Unable to attach paid withdraw invoice to wallet:'.$lnTx->id); + } + + } else { + throw new \yii\web\ServerErrorHttpException('Issue processing withdrawal'); + } + } else { + throw new BadRequestHttpException('Wallet busy try again soon'); + } + } +} diff --git a/src/wallet/models/Wallet.php b/src/wallet/models/Wallet.php new file mode 100644 index 00000000..f17636ca --- /dev/null +++ b/src/wallet/models/Wallet.php @@ -0,0 +1,454 @@ +UserAccessKeyBehavior::class, + 'default_roles'=>[ + UserAccessKeyBehavior::ROLE_WALLET_ADMIN, + UserAccessKeyBehavior::ROLE_WALLET_INVOICE, + UserAccessKeyBehavior::ROLE_WALLET_READ, + UserAccessKeyBehavior::ROLE_WALLET_LNURL_WITHDRAW, + UserAccessKeyBehavior::ROLE_WALLET_LNURL_PAY, + UserAccessKeyBehavior::ROLE_WALLET_EXTERNAL_WEBSITE_ADMIN, + UserAccessKeyBehavior::ROLE_WALLET_EXTERNAL_WEBSITE_VIEW, + ] + ] + ]; + } + + /** + * {@inheritdoc} + */ + public function rules() + { + return [ + [['user_label'], 'required'], + [['user_id', 'balance','wallet_type_id','default_lnurlpay_id','default_lnurlw_id'], 'integer'], + [['status_type_id'],'default','value'=>StatusType::WALLET_ACTIVE], + [['wallet_type_id'],'default','value'=>WalletType::GENERIC_WALLET], + ['ln_node_id','default','value'=>@LnNode::getCustodialNodeQuery(\LNPay::$app->user->id)->one()->id], + ['ln_node_id','checkUserNode'], + [['user_id'],'default','value'=>function(){return \LNPay::$app->user->id;}], + [['external_hash'],'default','value'=>function(){ return 'wal_'.HelperComponent::generateRandomString(14); }], + [['external_hash'],'unique'], + [['json_data','deterministic_identifier'], 'safe'], + [['user_label', 'external_hash', 'ln_node_id'], 'string', 'max' => 255] + ]; + } + + /** + * {@inheritdoc} + */ + public function attributeLabels() + { + return [ + 'id' => 'ID', + 'created_at' => 'Created At', + 'updated_at' => 'Updated At', + 'user_id' => 'User ID', + 'user_label' => 'Internal Label', + 'balance' => 'Balance', + 'ln_node_id' => 'LN Node ID', + 'json_data' => 'Json Data', + 'admin_key' => 'Admin Key', + 'invoice_key' => 'Invoice Key', + 'readonly_key' => 'Readonly Key', + 'external_hash' => 'External Identifier', + 'wallet_type_id'=>'Wallet Type', + 'default_lnurlpay_id'=>'Default LNURL PAY', + 'default_lnurlw_id'=>'Default LNURL WITHDRAW' + ]; + } + + public static function findByHash($external_hash) + { + return static::find()->where(['external_hash'=>$external_hash])->one(); + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getUser() + { + return $this->hasOne(User::className(), ['id' => 'user_id']); + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getStatus() + { + return $this->hasOne(StatusType::className(), ['id' => 'status_type_id']); + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getWalletType() + { + return $this->hasOne(WalletType::className(), ['id' => 'wallet_type_id']); + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getLnNode() + { + return $this->hasOne(LnNode::className(), ['id' => 'ln_node_id']); + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getDefaultWalletLnurlpay() + { + return $this->hasOne(WalletLnurlpay::className(), ['id' => 'default_lnurlpay_id']); + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getWalletTransactions() + { + return $this->hasMany(WalletTransaction::className(), ['wallet_id' => 'id']); + } + + public static function findByKey($key) + { + $w = UserAccessKey::find()->where(['access_key'=>$key])->one(); + if ($w) + return static::findOne($w->wallet_id); + else + return null; + } + + public static function findById($id) + { + return static::find()->where(['external_hash'=>$id])->one(); + } + + public function checkUserNode($attribute,$params) + { + //if we are using the user's nodes, make sure they are only adding theirs + $node = LnNode::findOne($this->ln_node_id); + $user_id = (\LNPay::$app instanceof \yii\web\Application?\LNPay::$app->user->id:$this->user_id); + + if (\LNPay::$app instanceof \yii\web\Application && \LNPay::$app->user->isGuest) { //e.g. LNURL-withdraw where there is no authenticated user + //this seems weird, but it is correct + } else { + $user = User::findOne($user_id); + + //if we are using the org custodial node + $userNodes = $user->getLnNodeQuery()->all(); + foreach ($userNodes as $uN) { //if submitted node id matches one we already have + if ($uN->user_id == $node->user_id) + return true; + } + + if ($node->user_id != $user_id) + $this->addError('ln_node_id','Node does not belong to this user!'); + } + + } + + public function getPublicId() + { + return $this->external_hash; + } + + public function calculateBalance() + { + $sum = \LNPay::$app->db->createCommand( + 'SELECT SUM(num_satoshis) + FROM wallet_transaction + WHERE wallet_id = '.$this->id + )->queryScalar(); + + return $sum ?? 0; + } + + public function updateBalance($num_satoshis=NULL) + { + //if amount is specified, debit/credit directly from balance, skipping transaction scan-sum + if ($num_satoshis) { + try { + \Yii::$app->db->transaction(function() use ($num_satoshis) { + \Yii::$app->db + ->createCommand("UPDATE wallet SET balance=balance+{$num_satoshis} WHERE id={$this->id}") + ->execute(); + }); + return true; + } catch (\Throwable $t) { + \LNPay::error($t->getMessage(),__METHOD__); + } + } + + $this->balance = $this->calculateBalance(); + if ($this->save(false)) + return true; + else + throw new \yii\web\ServerErrorHttpException('Unable to update balance!'); + } + + public function getAvailableBalance() + { + return $this->balance; + } + + /* + * Delete all wallet transactions and replace with 1 debit and 1 credit transactions + */ + public function compressTransactions() + { + Yii::info('compressing wallet id: '.$this->id); + $sumQuery = WalletTransaction::find() + ->where(['wallet_id'=>$this->id]); + + $sum = (int)$sumQuery->sum('num_satoshis'); + + WalletTransaction::deleteALl(['wallet_id'=>$this->id]); + + $newDebitRow = new WalletTransaction(); + $newDebitRow->user_id = $this->user_id; + $newDebitRow->wallet_id = $this->id; + $newDebitRow->num_satoshis = $sum; + $newDebitRow->ln_tx_id = NULL; + $newDebitRow->user_label = 'Balance roll up '.date('Y-m-d h:i:s'); + $newDebitRow->wtx_type_id = WalletTransactionType::LN_ROLL_UP; + $newDebitRow->save(); + Yii::info("(Wallet: {$this->id}) compress debit/credit row ID:{$newDebitRow->id}"); + + $this->updateBalance(); + + return ['balance'=>$this->balance,'sum'=>$sum]; + + } + + /** + * @param int $sats + * @return bool + */ + public function getIsEligibleToWithdraw($sats=null) + { + if ($sats == 0 || !$sats) + return false; + if ($this->balance <= 0) + return false; + else if ($this->balance < $sats) + return false; + else + return true; + } + + /** + * @param array $invoiceOptions + * @return LnTx + * @throws ServerErrorHttpException + */ + public function generateLnInvoice($invoiceOptions=[],$passThru=[]) + { + $lnTx = new LnTx(); + $lnTx->num_satoshis = (@$invoiceOptions['num_satoshis']?:0); + $lnTx->description_hash = @$invoiceOptions['description_hash']; + $lnTx->memo = (@$invoiceOptions['memo']?:'Invoice: '.HelperComponent::generateRandomString(8)); + $lnTx->user_id = $this->user_id; + $lnTx->ln_node_id = $this->ln_node_id; + $lnTx->passThru = $passThru; + $lnTx->appendJsonData(['wallet_id'=>$this->external_hash]); + if ($lnTx->validate()) + $lnTxObject = $lnTx->generateInvoice($checkLimits=true); + else + throw new BadRequestHttpException(HelperComponent::getFirstErrorFromFailedValidation($lnTx)); + return $lnTxObject; + } + + /** + * @param array $lnurlp_data + * @return WalletLnurlpay + */ + public function generateLnurlpay($lnurlp_data=[],$metadata=[]) + { + $lnurlpModel = WalletLnurlpay::generateNewModel($lnurlp_data); + + $lnurlpModel->user_id = $this->user_id; + $lnurlpModel->wallet_id = $this->id; + + if ($lnurlpModel->save()) { + return $lnurlpModel; + } else { + throw new UnableToGenerateLnurlpayException(HelperComponent::getFirstErrorFromFailedValidation($lnurlpModel)); + } + } + + public function payLnInvoice($request,$options) + { + return $this->lnNode->getLndConnector()->payInvoice($request,$options); + } + + public function getLnurlWithdrawLinkEncoded($access_key=null,$params=[]) + { + if (!$access_key) + $access_key = $this->getFirstAccessKeyByRole(UserAccessKeyBehavior::ROLE_WALLET_LNURL_WITHDRAW); + + if (isset($params['ott'])) + $this->appendJsonData(['ott'=>[$params['ott']=>$params['ott']]]); + + return \tkijewski\lnurl\encodeUrl(\LNPay::$app->urlManager->createAbsoluteUrl(["/v1/wallet/{$access_key}/lnurl-process",'tag'=>'withdraw','ott'=>@$params['ott'],'num_satoshis'=>@$params['num_satoshis'],'memo'=>@$params['memo'],'passThru'=>@$params['passThru']])); + } + + public function getIsFeeWallet() + { + return LnNode::find()->where(['fee_wallet_id'=>$this->id])->exists(); + } + + public function getIsKeysendWallet() + { + return LnNode::find()->where(['keysend_wallet_id'=>$this->id])->exists(); + } + + public function releaseMutex() + { + \LNPay::$app->mutex->release($this->publicId); + } + + /** + * @inheritdoc + */ + public function beforeSave($insert) + { + if (parent::beforeSave($insert)) { + if ($insert) { + + } + + return true; + } else { + return false; + } + } + + public function afterSave($insert, $changedAttributes) + { + parent::afterSave($insert, $changedAttributes); + + if ($insert) { + //Generate default LNURL links + $lnurlp_data = [ + 'user_label'=>"LNURL-pay ".$this->user_label, + 'lnurlp_short_desc'=>$this->user_label, + ]; + + if ($this->wallet_type_id == WalletType::FEE_WALLET) { + $lnurlp_data['lnurlp_maxSendable_msat'] = 100000000; //100,000 sat + } + + $l = $this->generateLnurlpay($lnurlp_data); + $this->default_lnurlpay_id = $l->id; + $this->save(); + + $this->refresh(); + $this->user->registerAction(ActionName::WALLET_CREATED,['wal'=>$this->toArray()]); + } + } + + + + + + + + + + + + + /** + * + * + * API RESPONSE FIELDS + * + * + */ + + public function fields() + { + $fields = parent::fields(); + $fields['id'] = $fields['external_hash']; + $fields['statusType'] = 'status'; + $fields['walletType'] = 'walletType'; + $fields['default_lnurlpay_id'] = function ($model) { + if ($model->default_lnurlpay_id) + return $model->defaultWalletLnurlpay->external_hash; + else + return null; + }; + //$fields['passThru'] = 'json_data'; + + // remove fields that contain sensitive information + unset($fields['user_id'], + $fields['external_hash'], + $fields['json_data'], + $fields['status_type_id'], + $fields['wallet_type_id'], + $fields['default_lnurlw_id'] + ); + + return $fields; + + } +} diff --git a/src/wallet/models/WalletLnurlpay.php b/src/wallet/models/WalletLnurlpay.php new file mode 100644 index 00000000..e1023010 --- /dev/null +++ b/src/wallet/models/WalletLnurlpay.php @@ -0,0 +1,310 @@ +StatusType::WALLET_LNURL_ACTIVE], + [['lnurlp_short_desc'],'default','value'=>'LNURL PAY (via LNPay.co)'], + ['lnurlp_minSendable_msat', 'compare', 'compareValue' => 1000, 'operator' => '>=', 'type' => 'number'], + [['lnurlp_minSendable_msat'],'default','value'=>1000], + [['lnurlp_maxSendable_msat'],'default','value'=>function ($model) { + + if (\LNPay::$app instanceof \yii\web\Application && !YII_ENV_TEST) { + if (\LNPay::$app->user->identity) { //if user is logged in + return \LNPay::$app->user->identity->getJsonData(User::DATA_MAX_DEPOSIT) * 1000; + } else { //if brand new user + return 100000000; //100,000 this is fee wallet / default wallets + } + + } else { + return 1000; + } + } + ], + [['external_hash'],'default','value'=>function(){ return 'lnurlp_'.HelperComponent::generateRandomString(18); }], + [['id', 'user_id', 'wallet_id', 'status_type_id', 'lnurlp_minSendable_msat', 'lnurlp_maxSendable_msat', 'lnurlp_commentAllowed'], 'integer'], + [['json_data', 'lnurlp_successAction', 'lnurlp_metadata'], 'safe'], + [['custy_domain_id'],'domainOwner'], + [['lnurl_encoded', 'lnurl_decoded', 'lnurlp_short_desc', 'lnurlp_success_message', 'lnurlp_success_url', 'lnurlp_image_base64'], 'string'], + [['external_hash'], 'string', 'max' => 45], + [['lnurlp_identifier','user_label'], 'string', 'max' => 255], + [['lnurlp_identifier'],'match','pattern'=>'/^[a-zA-Z\s]+$/'] + ]; + } + + public function domainOwner($attribute,$params) + { + if (!$this->custy_domain_id) + return; + + if ($d = CustyDomain::findOne($this->custy_domain_id)) { + if ($d->user_id != \LNPay::$app->user->id) { + $this->addError($attribute,'Domain does not belong to this user or org!'); + } + } else { + $this->addError($attribute,'Invalid domain ID specified'); + } + } + + /** + * {@inheritdoc} + */ + public function attributeLabels() + { + return [ + 'id' => 'ID', + 'created_at' => 'Created At', + 'updated_at' => 'Updated At', + 'user_id' => 'User ID', + 'wallet_id' => 'Wallet ID', + 'user_label'=>'User Label', + 'status_type_id' => 'Status Type ID', + 'external_hash' => 'External Hash', + 'json_data' => 'Json Data', + 'lnurl_encoded' => 'Lnurl Encoded', + 'lnurl_decoded' => 'Lnurl Decoded', + 'lnurlp_minSendable_msat' => 'Lnurlp Min Sendable Msat', + 'lnurlp_maxSendable_msat' => 'Lnurlp Max Sendable Msat', + 'lnurlp_short_desc' => 'Lnurlp Short Desc', + 'lnurlp_successAction' => 'Lnurlp Success Action', + 'lnurlp_identifier' => 'Lnurlp Identifier', + 'lnurlp_commentAllowed' => 'Lnurlp Comment Allowed', + 'lnurlp_success_message' => 'Lnurlp Success Message', + 'lnurlp_success_url' => 'Lnurlp Success Url', + 'lnurlp_image_base64' => 'Lnurlp Image Base64', + 'lnurlp_metadata' => 'Lnurlp Metadata', + ]; + } + + /** + * @param $external_hash + * @return WalletLnurlpay + */ + public static function findByHash($external_hash) + { + return static::find()->where(['external_hash'=>$external_hash])->one(); + } + + /** + * Gets query for [[User]]. + * + * @return \yii\db\ActiveQuery + */ + public function getUser() + { + return $this->hasOne(User::className(), ['id' => 'user_id']); + } + + /** + * Gets query for [[Wallet]]. + * + * @return \yii\db\ActiveQuery + */ + public function getWallet() + { + return $this->hasOne(Wallet::className(), ['id' => 'wallet_id']); + } + + /** + * Gets query for [[StatusType]]. + * + * @return \yii\db\ActiveQuery + */ + public function getStatusType() + { + return $this->hasOne(StatusType::className(), ['id' => 'status_type_id']); + } + + /** + * Gets query for [[CustyDomain]]. + * + * @return \yii\db\ActiveQuery + */ + public function getCustyDomain() + { + return $this->hasOne(CustyDomain::className(), ['id' => 'custy_domain_id']); + } + + /** + * Generate new LNURL PAY record + * + * @return WalletLnurlpay + */ + public static function generateNewModel($lnurlp_data=[],$metadata=[]) + { + $model = new WalletLnurlpay(); + $model->load($lnurlp_data,''); + $model->json_data = $metadata; + + return $model; + } + + /** + * Get is this lnurl active + * + * @return boolean + */ + public function getIsActive() + { + return $this->status_type_id == StatusType::WALLET_LNURL_ACTIVE; + } + + /** + * Formulate metadata right + * + * @return boolean + */ + public function formulateMetadata() + { + $array = []; + + //short desc + $short_desc = [ + 'text/plain', + $this->lnurlp_short_desc + ]; + + $array[] = $short_desc; + + return json_encode($array); + } + + /** + * @inheritdoc + */ + public function beforeSave($insert) + { + if (parent::beforeSave($insert)) { + if ($insert) { + //generate LNURLS + + $baseUrl = ["/v1/wallet/{$this->wallet->getFirstAccessKeyByRole(UserAccessKeyBehavior::ROLE_WALLET_LNURL_PAY)}/lnurlp/{$this->external_hash}"]; + $this->lnurl_decoded = \LNPay::$app->urlManager->createAbsoluteUrl($baseUrl); + $this->lnurl_encoded = \tkijewski\lnurl\encodeUrl($this->lnurl_decoded); + + $this->lnurlp_metadata = $this->formulateMetadata(); + } + + return true; + } else { + return false; + } + } + + public function afterSave($insert, $changedAttributes) + { + parent::afterSave($insert, $changedAttributes); + + if ($insert) { + + } + } + + + + + /** + * + * + * API RESPONSE FIELDS + * + * + */ + + public function fields() + { + $fields = parent::fields(); + $fields['id'] = $fields['external_hash']; + $fields['statusType'] = 'statusType'; + $fields['wallet_id'] = function ($model) { + return $model->wallet->external_hash; + }; + $fields['custyDomain'] = 'custyDomain'; + + // remove fields that contain sensitive information + unset($fields['json_data'], + $fields['user_id'], + $fields['status_type_id'], + $fields['custy_domain_id'], + $fields['external_hash'], + $fields['lnurlp_successAction'], + $fields['lnurlp_commentAllowed'], + $fields['lnurlp_success_message'], + $fields['lnurlp_success_url'], + $fields['lnurlp_image_base64'], + $fields['lnurlp_metadata'], + + $fields['user_id'], + ); + + return $fields; + + } +} diff --git a/src/wallet/models/WalletLnurlw.php b/src/wallet/models/WalletLnurlw.php new file mode 100644 index 00000000..3872475c --- /dev/null +++ b/src/wallet/models/WalletLnurlw.php @@ -0,0 +1,115 @@ + 45], + ]; + } + + /** + * {@inheritdoc} + */ + public function attributeLabels() + { + return [ + 'id' => 'ID', + 'created_at' => 'Created At', + 'updated_at' => 'Updated At', + 'user_id' => 'User ID', + 'wallet_id' => 'Wallet ID', + 'status_type_id' => 'Status Type ID', + 'external_hash' => 'External Hash', + 'json_data' => 'Json Data', + 'lnurl_encoded' => 'Lnurl Encoded', + 'lnurl_decoded' => 'Lnurl Decoded', + 'lnurlw_minWithdrawable_msat' => 'Lnurlw Min Withdrawable Msat', + 'lnurlw_maxWithdrawable_msat' => 'Lnurlw Max Withdrawable Msat', + 'lnurlw_defaultDescription' => 'Lnurlw Default Description', + ]; + } + + /** + * Gets query for [[User]]. + * + * @return \yii\db\ActiveQuery + */ + public function getUser() + { + return $this->hasOne(User::className(), ['id' => 'user_id']); + } + + /** + * Gets query for [[Wallet]]. + * + * @return \yii\db\ActiveQuery + */ + public function getWallet() + { + return $this->hasOne(Wallet::className(), ['id' => 'wallet_id']); + } + + /** + * Gets query for [[StatusType]]. + * + * @return \yii\db\ActiveQuery + */ + public function getStatusType() + { + return $this->hasOne(StatusType::className(), ['id' => 'status_type_id']); + } +} diff --git a/src/wallet/models/WalletNodeChangeForm.php b/src/wallet/models/WalletNodeChangeForm.php new file mode 100644 index 00000000..cf3b3a8e --- /dev/null +++ b/src/wallet/models/WalletNodeChangeForm.php @@ -0,0 +1,129 @@ +'Target Node ID', + 'wallet_id'=>'Wallet ID', + 'transfer_balance' => 'Transfer the balance to new node' + ]; + } + + public function getWalletObject() + { + return Wallet::find()->where(['external_hash'=>$this->wallet_id,'user_id'=>\LNPay::$app->user->id])->one(); + } + + public function checkWallet() + { + if (!$this->walletObject) + throw new \yii\web\ServerErrorHttpException('Unknown wallet, cannot continue!'); + + $this->walletObject->updateBalance(); + } + + public function getTargetNodeObject() + { + return LnNode::find()->where(['id'=>$this->target_ln_node_id,'user_id'=>\LNPay::$app->user->id])->one(); + } + + public function checkNode() + { + if (!$this->targetNodeObject) + throw new \yii\web\ServerErrorHttpException('Unknown node, cannot continue!'); + } + + /** + * Transfer the balance to new node + */ + private function _transferBalance() + { + try { + $payment_options = []; + $payment_options['fee_limit_msat'] = 10000; + + $rpcConnector = $this->walletObject->lnNode->getLndConnector('RPC'); + $result = $rpcConnector->keysend($this->targetNodeObject->default_pubkey,$this->walletObject->balance,[],$payment_options); + return $result; + } catch (\Throwable $t) { + + $this->addError('transfer_balance',$t->getMessage()); + return false; + } + } + + public function switchWalletTargetNode() + { + $transferBalanceResult = NULL; + if ($this->transfer_balance) { //attempt to transfer balance + if ($transferBalanceResult = $this->_transferBalance()) { + unset($transferBalanceResult['htlcs']); // unnecessary for now, maybe add back later + //hooray + } else { + return false; + } + } + $walletObject = $this->walletObject; + $walletObject->ln_node_id = $this->target_ln_node_id; + if (!$walletObject->save()) { + $this->addError('target_ln_node_id',HelperComponent::getFirstErrorFromFailedValidation($walletObject)); + return false; + } + + $this->walletObject->user->registerAction(ActionName::WALLET_CHANGE_NODE, + ArrayHelper::merge($this->attributes,[ + 'keysendResultObject'=>$transferBalanceResult + ],[]) + ); + return true; + } + +} diff --git a/src/wallet/models/WalletSearch.php b/src/wallet/models/WalletSearch.php new file mode 100644 index 00000000..8d718752 --- /dev/null +++ b/src/wallet/models/WalletSearch.php @@ -0,0 +1,82 @@ + $query, + 'sort' => [ + 'defaultOrder' => [ + 'created_at' => SORT_DESC, + ] + ], + ]); + + $this->load($params); + + if (!$this->validate()) { + // uncomment the following line if you do not want to return any records when validation fails + $query->where('0=1'); + return $dataProvider; + } + + // grid filtering conditions + $query->andFilterWhere([ + 'id' => $this->id, + 'created_at' => $this->created_at, + 'updated_at' => $this->updated_at, + 'user_id' => $this->user_id, + 'balance' => $this->balance, + 'ln_node_id' => $this->ln_node_id, + 'wallet_type_id' => $this->wallet_type_id + ]); + + $query->andFilterWhere(['like', 'user_label', $this->user_label]) + ->andFilterWhere(['like', 'external_hash', $this->external_hash]) + ->andFilterWhere(['like', 'json_data', $this->json_data]); + + return $dataProvider; + } +} diff --git a/src/wallet/models/WalletTransaction.php b/src/wallet/models/WalletTransaction.php new file mode 100644 index 00000000..8c6fc37a --- /dev/null +++ b/src/wallet/models/WalletTransaction.php @@ -0,0 +1,377 @@ + 0, 'operator' => '!=', 'type' => 'number'], + [['external_hash'],'default','value'=>function($model,$attribute) { return 'wtx_'.HelperComponent::generateRandomString(24); }], + [['user_id', 'wallet_id', 'num_satoshis', 'ln_tx_id','wtx_type_id','wallet_lnurlpay_id','wallet_lnurlw_id'], 'integer'], + [['json_data'], 'safe'], + [['user_label'], 'string', 'max' => 255], + ['passThru',function ($attribute, $params) { + if(!is_array($this->$attribute)){ + $this->addError($attribute,'Pass thru must be a valid JSON'); + } + }], + ]; + } + + /** + * {@inheritdoc} + */ + public function attributeLabels() + { + return [ + 'id' => 'ID', + 'created_at' => 'Created At', + 'updated_at' => 'Updated At', + 'user_id' => 'User ID', + 'wallet_id' => 'Wallet ID', + 'num_satoshis' => 'Num Satoshis', + 'ln_tx_id' => 'Ln Tx ID', + 'user_label' => 'User Label', + 'external_hash' => 'External Hash', + 'json_data' => 'Json Data', + ]; + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getUser() + { + return $this->hasOne(User::className(), ['id' => 'user_id']); + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getWallet() + { + return $this->hasOne(Wallet::className(), ['id' => 'wallet_id']); + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getLnTx() + { + return $this->hasOne(LnTx::className(), ['id' => 'ln_tx_id']); + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getWalletTransactionType() + { + return $this->hasOne(WalletTransactionType::className(), ['id' => 'wtx_type_id']); + } + + public function setPassThru($data) + { + if (!is_array($data)) + $this->_passThru = []; + else + $this->_passThru = $data; + } + + public function getPassThru() + { + return $this->_passThru; + } + + /** + * @return WalletTransaction|null + * @throws \Exception + */ + public function createNetworkFeeTransaction() + { + //Network fee + if ($this->lnTx && $this->lnTx->fee_msat > 0) { + $networkFee = (int) ceil($this->lnTx->fee_msat/1000)*-1; + \LNPay::info('tx: '.$this->id.' - Network fee:'.$networkFee,__METHOD__); + $wtx = new WalletTransaction(); + $wtx->user_id = $this->user_id; + + if ($this->user->feeTargetWallet==User::DATA_FEE_TARGET_WALLET_CONTAINED) { + if ( ($this->wallet->balance + $networkFee) < 0) { //this will result in negative balance to wallet + if ($this->wallet->lnNode->is_custodian) { + $wtx->wallet_id = $this->wallet_id; //this deducts from existing wallet and will make it go negative (not ideal) + } else { + $wtx->wallet_id = $this->user->fee_wallet_id; //send to fee wallet + } + + } else { //send to the wallet as expected + $wtx->wallet_id = $this->wallet_id; + } + } else { + $wtx->wallet_id = $this->user->fee_wallet_id; + } + + $wtx->num_satoshis = $networkFee; + $wtx->ln_tx_id = NULL; + $wtx->user_label = 'Network fee'; + $wtx->passThru = ['source_transaction'=>$this->external_hash,'fee_target_wallet'=>$this->user->feeTargetWallet]; + $wtx->wtx_type_id = WalletTransactionType::LN_NETWORK_FEE; + if ($wtx->save()) { + return $wtx; + } else { + throw new \Exception('Unable to save network fee: '.HelperComponent::getFirstErrorFromFailedValidation($wtx)); + } + } + return null; + } + + public function createServiceFeeTransaction() + { + $rateAsDecimal = $this->user->getServiceFeeRate($this->wtx_type_id); + if ($rateAsDecimal) { + $serviceFee = (int) ceil(abs($this->num_satoshis)*$rateAsDecimal)*-1; + \LNPay::info('tx: '.$this->id.' - Service fee:'.$serviceFee,__METHOD__); + $wtx = new WalletTransaction(); + $wtx->user_id = $this->user_id; + $wtx->wallet_id = ($this->user->feeTargetWallet==User::DATA_FEE_TARGET_WALLET_CONTAINED?$this->wallet_id:$this->user->fee_wallet_id); + $wtx->num_satoshis = $serviceFee; + $wtx->ln_tx_id = NULL; + $wtx->user_label = 'LNPAY service fee ('.$this->walletTransactionType->display_name.')'; + $wtx->passThru = ['source_transaction'=>$this->external_hash,'fee_target_wallet'=>$this->user->feeTargetWallet]; + $wtx->wtx_type_id = WalletTransactionType::LN_SERVICE_FEE; + if ($wtx->save()) { + return $wtx; + } else { + throw new \Exception('Unable to save lnpay fee: '.HelperComponent::getFirstErrorFromFailedValidation($wtx)); + } + } + return null; + } + + public function determineWtxType($returnActionId=false) + { + //what type of transaction is this? + if (!$returnActionId) { + + //if the type is already set, use it. + if ($this->wtx_type_id) { + return $this->wtx_type_id; + } + + //These are defaults, most cases the wtx_type_id will be set externally + if ($this->num_satoshis > 0 && $this->ln_tx_id) + return WalletTransactionType::LN_DEPOSIT; + else if ($this->num_satoshis > 0 && !$this->ln_tx_id) + return WalletTransactionType::LN_TRANSFER_IN; + else if ($this->num_satoshis < 0 && !$this->ln_tx_id) + return WalletTransactionType::LN_TRANSFER_OUT; + else if ($this->num_satoshis < 0) + return WalletTransactionType::LN_WITHDRAWAL; + } + + //which action should we trigger based on the type of transaction? + if ($returnActionId) { + switch ($this->wtx_type_id) { + case WalletTransactionType::LN_WITHDRAWAL: + case WalletTransactionType::LN_LNURL_WITHDRAW: + case WalletTransactionType::LN_LNURL_PAY_OUTBOUND: + $action_id = ActionName::WALLET_SEND; + break; + case WalletTransactionType::LN_DEPOSIT: + case WalletTransactionType::LN_LNURL_PAY_INBOUND: + $action_id = ActionName::WALLET_RECEIVE; + break; + case WalletTransactionType::LN_TRANSFER_IN: + $action_id = ActionName::WALLET_TRANSFER_IN; + break; + case WalletTransactionType::LN_TRANSFER_OUT: + $action_id = ActionName::WALLET_TRANSFER_OUT; + break; + case WalletTransactionType::LN_LOOP_OUT: + $action_id = ActionName::WALLET_LOOP_OUT; + break; + case WalletTransactionType::LN_LOOP_IN: + $action_id = ActionName::WALLET_LOOP_IN; + break; + case WalletTransactionType::LN_NETWORK_FEE: + $action_id = ActionName::NETWORK_FEE_INCURRED; + break; + default: + $action_id = null; + } + return $action_id; + } + } + + + + /** + * @inheritdoc + */ + public function beforeSave($insert) + { + if (parent::beforeSave($insert)) { + if ($insert) { + $this->wtx_type_id = $this->determineWtxType(); + if ($this->lnTx) { + $lntxData = ($this->lnTx->getJsonData()?:[]); + } else { + $lntxData = []; + } + + $this->appendJsonData(ArrayHelper::merge($this->passThru,$lntxData)); + } + + return true; + } else { + return false; + } + } + + public function afterSave($insert, $changedAttributes) + { + parent::afterSave($insert, $changedAttributes); + + if ($insert) { + if ($this->user->getJsonData(User::DATA_STREAMING_QUERY_TRANSACTION_BALANCE_UPDATE)) { + $this->wallet->updateBalance($this->num_satoshis); + } else { + $this->wallet->updateBalance(); + } + + $this->wallet->refresh(); + + if ($action = $this->determineWtxType($returnActionid=TRUE)) { + $this->user->registerAction($action,['wtx'=>$this->toArray()]); + } + + if (in_array($this->wtx_type_id,[WalletTransactionType::LN_WITHDRAWAL,WalletTransactionType::LN_DEPOSIT,WalletTransactionType::LN_LOOP_OUT])) { + $this->createNetworkFeeTransaction(); + $this->createServiceFeeTransaction(); + } + + } + + } + + + + + + + + + + + + + + + + + /** + * + * + * API STUFF + * + * + */ + + public function fields() + { + $fields = parent::fields(); + + $fields['id'] = $fields['external_hash']; + $fields['wal'] = 'wallet'; + + $fields['wtxType'] = 'walletTransactionType'; + $fields['lnTx'] = function ($model) { + + if ($model->lnTx) { + $lntx = $model->lnTx->toArray(); + unset($lntx['passThru']); + return $lntx; + } else { + return null; + } + + }; + + $fields['passThru'] = function($model) { + if ($model->json_data instanceof \yii\db\JsonExpression) + return $model->json_data->getValue(); + else + return $model->json_data; + }; + + // remove fields that contain sensitive information + unset( + $fields['user_id'], + $fields['ln_tx_id'], + $fields['json_data'], + $fields['external_hash'], + $fields['updated_at'], + $fields['wtx_type_id'], + $fields['wallet_id'], + $fields['wallet_lnurlpay_id'], + $fields['wallet_lnurlw_id'] + ); + + return $fields; + } + +} diff --git a/src/wallet/models/WalletTransactionSearch.php b/src/wallet/models/WalletTransactionSearch.php new file mode 100644 index 00000000..43d6a704 --- /dev/null +++ b/src/wallet/models/WalletTransactionSearch.php @@ -0,0 +1,83 @@ +with('walletTransactionType','wallet','lnTx'); + + // add conditions that should always apply here + + $dataProvider = new ActiveDataProvider([ + 'query' => $query, + 'sort' => [ + 'defaultOrder' => [ + 'created_at' => SORT_DESC, + ] + ], + ]); + + $this->load($params); + + if (!$this->validate()) { + // uncomment the following line if you do not want to return any records when validation fails + $query->where('0=1'); + return $dataProvider; + } + + // grid filtering conditions + $query->andFilterWhere([ + 'id' => $this->id, + 'created_at' => $this->created_at, + 'updated_at' => $this->updated_at, + 'wallet_transaction.user_id' => $this->user_id, + 'wallet_id' => $this->wallet_id, + 'num_satoshis' => $this->num_satoshis, + 'ln_tx_id' => $this->ln_tx_id, + 'wtx_type_id' => $this->wtx_type_id, + ]); + + $query->andFilterWhere(['like', 'user_label', $this->user_label]) + ->andFilterWhere(['like', 'external_hash', $this->external_hash]) + ->andFilterWhere(['like', 'json_data', $this->json_data]); + + return $dataProvider; + } +} diff --git a/src/wallet/models/WalletTransactionType.php b/src/wallet/models/WalletTransactionType.php new file mode 100644 index 00000000..342dccf1 --- /dev/null +++ b/src/wallet/models/WalletTransactionType.php @@ -0,0 +1,87 @@ + 255], + ]; + } + + /** + * {@inheritdoc} + */ + public function attributeLabels() + { + return [ + 'id' => 'ID', + 'layer' => 'Layer', + 'name' => 'Name', + 'display_name' => 'Display Name', + ]; + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getWalletTransactions() + { + return $this->hasMany(WalletTransaction::className(), ['wtx_type_id' => 'id']); + } + + public function fields() + { + $fields = parent::fields(); + + unset($fields['id']); + + return $fields; + } +} diff --git a/src/wallet/models/WalletTransferForm.php b/src/wallet/models/WalletTransferForm.php new file mode 100644 index 00000000..37455657 --- /dev/null +++ b/src/wallet/models/WalletTransferForm.php @@ -0,0 +1,181 @@ + 0, 'operator' => '>='], + ['safe','boolean'], + [['memo'],'string'], + [['lnPayParams'],'checkLnPayParams'], + [['passThru'],'checkPassThruParams'], + [['source_wallet_id'],'checkWalletObjects'], + [['source_wallet_id'],'checkDifferentWallets'], + ['source_wallet_id','checkSourceBalance'] + + ]; + } + + public function attributeLabels() + { + return []; + } + + public function checkLnPayParams($attribute,$params,$validator) + { + if ($this->lnPayParams === NULL) + return; + + if (is_string($this->lnPayParams)) { + $json = @json_decode($this->lnPayParams,TRUE); + if (is_array($json)) { + $this->lnPayParams = $json; + return; + } + } else if (is_array($this->lnPayParams)) { + return; + } + $this->addError($attribute,"Invalid lnPayParams json specified"); + } + + public function checkPassThruParams($attribute,$params,$validator) + { + if ($this->passThru === NULL) + return; + + if (is_string($this->passThru)) { + $json = @json_decode($this->passThru,TRUE); + if (is_array($json)) { + $this->passThru = $json; + return; + } + } else if (is_array($this->passThru)) { + return; + } + $this->passThru = []; + $this->addError($attribute,"Invalid passThru json specified"); + } + + + public function checkWalletObjects($attribute,$params,$validator) + { + if ($this->sourceWalletObject = Wallet::findById($this->source_wallet_id)) { + //Will probably need this logic eventually + } else { + $this->addError($attribute,"Invalid source wallet id"); + return false; + } + + if ( ($this->destWalletObject = Wallet::findById($this->dest_wallet_id))) { + //Will probably need this logic eventually + if ($this->sourceWalletObject->ln_node_id != $this->destWalletObject->ln_node_id) { + $this->addError($attribute,"Cannot transfer funds between wallets tied to different nodes"); + return false; + } + + if ($this->sourceWalletObject->user_id != $this->destWalletObject->user_id) { + $this->addError($attribute,"Cannot transfer funds"); + \LNPay::error(VarDumper::export($this->attributes),__METHOD__); + return false; + } + } else { + $this->addError($attribute,"Invalid dest wallet id"); + return false; + } + } + + public function checkDifferentWallets($attribute,$params,$validator) + { + if ($this->sourceWalletObject->id == $this->destWalletObject->id) + $this->addError($attribute,"Source and destination wallets cannot be the same!"); + } + + public function checkSourceBalance($attribute,$params,$validator) + { + $current_balance = $this->sourceWalletObject->balance; + if ($this->num_satoshis > $current_balance) { + $this->addError($attribute,"Insufficient balance in source wallet"); + } + } + + public function executeTransfer() + { + if ($this->safe || + \LNPay::$app->mutex->acquire($this->sourceWalletObject->publicId) || + $this->destWalletObject->user->getJsonData(User::DATA_IGNORE_WALLET_TRANSFER_MUTEX)) { + $json_data = [ + 'source_wallet_id' => $this->sourceWalletObject->external_hash, + 'dest_wallet_id' => $this->destWalletObject->external_hash, + ]; + + $json_data = ArrayHelper::merge($this->passThru,['lnPayParams' => $this->lnPayParams], $json_data); + + //create debit transaction + $wtxDebit = new WalletTransaction(); + $wtxDebit->user_id = $this->sourceWalletObject->user_id; + $wtxDebit->wallet_id = $this->sourceWalletObject->id; + $wtxDebit->num_satoshis = $this->num_satoshis * -1; + $wtxDebit->ln_tx_id = null; + $wtxDebit->user_label = $this->memo; + $wtxDebit->appendJsonData($json_data); + if (!$wtxDebit->save()) { + $this->sourceWalletObject->releaseMutex(); + throw new ServerErrorHttpException(HelperComponent::getFirstErrorFromFailedValidation($wtxDebit)); + } + + //create debit transaction + $wtxCredit = new WalletTransaction(); + $wtxCredit->user_id = $this->destWalletObject->user_id; + $wtxCredit->wallet_id = $this->destWalletObject->id; + $wtxCredit->num_satoshis = (int) $this->num_satoshis; + $wtxCredit->ln_tx_id = null; + $wtxCredit->user_label = $this->memo; + $wtxCredit->appendJsonData($json_data); + if (!$wtxCredit->save()) { + throw new ServerErrorHttpException(HelperComponent::getFirstErrorFromFailedValidation($wtxDebit)); + } + + $this->sourceWalletObject->releaseMutex(); + return ['wtx_transfer_out' => $wtxDebit->id, 'wtx_transfer_in' => $wtxCredit->id]; + } else { + throw new BadRequestHttpException('Wallet busy try again soon...'); + } + } +} diff --git a/src/wallet/models/WalletType.php b/src/wallet/models/WalletType.php new file mode 100644 index 00000000..6e8a82cb --- /dev/null +++ b/src/wallet/models/WalletType.php @@ -0,0 +1,73 @@ + 255], + ]; + } + + /** + * {@inheritdoc} + */ + public function attributeLabels() + { + return [ + 'id' => 'ID', + 'name' => 'Name', + 'display_name' => 'Display Name', + ]; + } + + /** + * Gets query for [[Wallets]]. + * + * @return \yii\db\ActiveQuery + */ + public function getWallets() + { + return $this->hasMany(Wallet::className(), ['wallet_type_id' => 'id']); + } + + public static function getAvailableWalletTypes() + { + return static::find()->asArray()->all(); + } + + public function fields() + { + $fields = parent::fields(); + unset($fields['id']); + + return $fields; + } +} diff --git a/src/wallet/views/layouts/_nav-wallets.php b/src/wallet/views/layouts/_nav-wallets.php new file mode 100644 index 00000000..6ba9d111 --- /dev/null +++ b/src/wallet/views/layouts/_nav-wallets.php @@ -0,0 +1,66 @@ + + +
+ +
+ + + +

user_label;?>

+
+ [ + [ + 'label' => 'Info', + 'content'=> $content, + 'url' => $this->context->action->id == 'view' ? NULL : ['wallet/view','id'=>$wallet->external_hash], + 'active' => $this->context->action->id == 'view' + ], + /*[ + 'label' => 'Send', + 'content'=> $content, + 'url' => $this->context->action->id == 'send' ? NULL : ['wallet/send','id'=>$wallet->external_hash], + 'active' => $this->context->action->id == 'send' + ], + [ + 'label' => 'Receive', + 'content'=> $content, + 'url' => $this->context->action->id == 'receive' ? NULL : ['wallet/receive','id'=>$wallet->external_hash], + 'active' => $this->context->action->id == 'receive' + ], + [ + 'label' => 'Transfer', + 'content'=> $content, + 'url' => $this->context->action->id == 'transfer' ? NULL : ['wallet/transfer','id'=>$wallet->external_hash], + 'active' => $this->context->action->id == 'transfer' + ],*/ + [ + 'label' => 'Access Keys', + 'content' => $content, + 'url' => $this->context->action->id == 'access-keys' ? NULL : ['wallet/access-keys','id'=>$wallet->external_hash], + 'active'=> $this->context->action->id == 'access-keys' + ], + [ + 'label' => 'Transactions', + 'content' => $content, + 'url' => $this->context->action->id == 'transactions' ? NULL : ['wallet/transactions','id'=>$wallet->external_hash], + 'active'=> $this->context->action->id == 'transactions' + ], + ], +]); +?>
+ diff --git a/src/wallet/views/pub/index/index.php b/src/wallet/views/pub/index/index.php new file mode 100644 index 00000000..9256097d --- /dev/null +++ b/src/wallet/views/pub/index/index.php @@ -0,0 +1,118 @@ + +

Send / Receive / Transfer

+
+
+
+

Balance

+

availableBalance;?> sats

+
+ +
+ +
+
+
+ +
+
+
+ +
+ +

Send Details

+ + +
+
+ true, + 'options'=>[ + 'class'=>'ajaxFormLoader' + ], + 'validationUrl'=>'/wallet/wallet/validate-withdrawal?id='.$wallet->publicId + ]); ?> + errorSummary($model); ?> + + field($wModel, 'payment_request')->textArea(['placeholder'=>'e.g. lnbc10u1pwcxqfkpp5e9nu85e6fypp89ql0hnz7yj784jatyytugewmpwe9yqhla7zvg3sdqdfdshjsn92djk2cqzpgjuk3ljzzrqhwsfr36h0nnyzy3gx3sna3fdnj9pkcqakjnkly0cdhk0lagf763mtegeld78qdpwf7t52mvgxl3f8neuty8y0pvvvffjcp96x09n', 'rows'=>4]); ?> + 'styled-button-success','style'=>'white-space:unset;']) ?> + +
+
+ + getLnurlWithdrawLinkEncoded(null,['ott'=>'ui-w']) ?> + + ';?> + +

name;?> supports LNURL - Scan or click with a LNURL compatible wallet.

+ +
+
+
+
+ +

Receive Details

+
+
+ [ + 'class'=>'ajaxFormLoader' + ], + ]); ?> + errorSummary($model); ?> + + field($dModel, 'num_satoshis')->textInput(['placeholder'=>'e.g. 20']); ?> + field($dModel, 'memo')->textInput(['placeholder'=>'e.g. For Deposit']); ?> + + getFirstAccessKeyByRole(\lnpay\behaviors\UserAccessKeyBehavior::ROLE_WALLET_INVOICE); + $userKey = $wallet->user->getFirstAccessKeyByRole(\lnpay\behaviors\UserAccessKeyBehavior::ROLE_PUBLIC_API_KEY); + $this->registerJs(" + function createInvoice() { + $.ajax({ + url: '/v1/wallet/$key/invoice', + headers: { + 'X-Api-Key': '".$userKey."' + }, + type: 'post', + data: {num_satoshis:$('#lnwalletdepositform-num_satoshis').val() , memo:$('#lnwalletdepositform-memo').val()}, + error: function (xhr, ajaxOptions, thrownError) { + alert(JSON.parse(xhr.responseText).message); + }, + success: function (data) { + $('#showInvoice').html('
'+data.payment_request); + var refreshInterval = setInterval(function(data){ + var req = $.ajax({ + type:\"get\", + url:\"/v1/lntx/\"+data.id+\"?access-token=".$userKey."\", + }); + req.done(function(data){ + //console.log(data); + + if (data.settled) { + clearInterval(refreshInterval); + alert('Deposit received!'); + window.location.reload(); + } + }); + },5000,data); + }}); + + } + ",\yii\web\View::POS_END); ?> + + 'styled-button-success','style'=>'white-space:unset;','onClick'=>'createInvoice();return false;']) ?> + +
+
+ +
+
+
\ No newline at end of file diff --git a/src/wallet/views/pub/index/invalid-wallet.php b/src/wallet/views/pub/index/invalid-wallet.php new file mode 100644 index 00000000..df355272 --- /dev/null +++ b/src/wallet/views/pub/index/invalid-wallet.php @@ -0,0 +1 @@ +Invalid Wallet! \ No newline at end of file diff --git a/src/wallet/views/wallet-transaction/_form.php b/src/wallet/views/wallet-transaction/_form.php new file mode 100644 index 00000000..7db84d2a --- /dev/null +++ b/src/wallet/views/wallet-transaction/_form.php @@ -0,0 +1,35 @@ + + +
+ + + + field($model, 'user_id')->textInput() ?> + + field($model, 'wallet_id')->textInput() ?> + + field($model, 'num_satoshis')->textInput() ?> + + field($model, 'ln_tx_id')->textInput() ?> + + field($model, 'user_label')->textInput(['maxlength' => true]) ?> + + field($model, 'external_hash')->textInput(['maxlength' => true]) ?> + + field($model, 'json_data')->textInput() ?> + +
+ 'btn btn-success']) ?> +
+ + + +
diff --git a/src/wallet/views/wallet-transaction/_search.php b/src/wallet/views/wallet-transaction/_search.php new file mode 100644 index 00000000..c81bbd7e --- /dev/null +++ b/src/wallet/views/wallet-transaction/_search.php @@ -0,0 +1,48 @@ + + + diff --git a/src/wallet/views/wallet-transaction/create.php b/src/wallet/views/wallet-transaction/create.php new file mode 100644 index 00000000..acbe5f60 --- /dev/null +++ b/src/wallet/views/wallet-transaction/create.php @@ -0,0 +1,20 @@ +title = 'Create Wallet Transaction'; +$this->params['breadcrumbs'][] = ['label' => 'Wallet Transactions', 'url' => ['index']]; +$this->params['breadcrumbs'][] = $this->title; +?> +
+ +

title) ?>

+ + render('_form', [ + 'model' => $model, + ]) ?> + +
diff --git a/src/wallet/views/wallet-transaction/index.php b/src/wallet/views/wallet-transaction/index.php new file mode 100644 index 00000000..03ee09a3 --- /dev/null +++ b/src/wallet/views/wallet-transaction/index.php @@ -0,0 +1,81 @@ +title = 'Wallet Transactions'; +$this->params['breadcrumbs'][] = $this->title; +?> +
+ + + render('_search', ['model' => $searchModel]); ?> + + + + $dataProvider, + 'filterModel' => $searchModel, + 'pager' => [ + 'class' => 'yii\bootstrap4\LinkPager' + ], + 'columns' => [ + 'created_at:datetime', + [ + 'header'=>'Transaction ID', + 'value'=>function (\lnpay\wallet\models\WalletTransaction $model) { + return Html::a($model->external_hash,['/wallet/wallet-transaction/view','id'=>$model->external_hash]); + }, + 'format'=>'raw' + ], + [ + 'header'=>'Wallet ID', + 'value'=>function (\lnpay\wallet\models\WalletTransaction $model) { + return Html::a($model->wallet->external_hash,['/wallet/wallet/view','id'=>$model->wallet->external_hash]); + }, + 'format'=>'raw' + ], + [ + 'header'=>'LnTx ID', + 'value'=>function (\lnpay\wallet\models\WalletTransaction $model) { + if ($model->ln_tx_id) + return Html::a($model->lnTx->external_hash,['/wallet/wallet-transaction/view','id'=>$model->external_hash]); + else + return NULL; + }, + 'format'=>'raw' + ], + [ + 'header'=>'Type', + 'value'=>'walletTransactionType.display_name', + 'filter' => Html::activeDropDownList($searchModel, + 'wtx_type_id', + \yii\helpers\ArrayHelper::map([null=>'All']+\lnpay\wallet\models\WalletTransactionType::find()->where(['id'=>$allowedFilter])->all(),'id','display_name') + ) + ], + 'num_satoshis', + 'user_label', + + //'json_data', + ], + ]); ?> + + + +
diff --git a/src/wallet/views/wallet-transaction/update.php b/src/wallet/views/wallet-transaction/update.php new file mode 100644 index 00000000..433b03a2 --- /dev/null +++ b/src/wallet/views/wallet-transaction/update.php @@ -0,0 +1,21 @@ +title = 'Update Wallet Transaction: ' . $model->id; +$this->params['breadcrumbs'][] = ['label' => 'Wallet Transactions', 'url' => ['index']]; +$this->params['breadcrumbs'][] = ['label' => $model->id, 'url' => ['view', 'id' => $model->id]]; +$this->params['breadcrumbs'][] = 'Update'; +?> +
+ +

title) ?>

+ + render('_form', [ + 'model' => $model, + ]) ?> + +
diff --git a/src/wallet/views/wallet-transaction/view.php b/src/wallet/views/wallet-transaction/view.php new file mode 100644 index 00000000..cdf596a0 --- /dev/null +++ b/src/wallet/views/wallet-transaction/view.php @@ -0,0 +1,34 @@ +title = $model->external_hash; +$this->params['breadcrumbs'][] = ['label' => 'Wallet Transactions', 'url' => ['index']]; +$this->params['breadcrumbs'][] = $this->title; +\yii\web\YiiAsset::register($this); +?> +
+ +
+
+
+

Wallet Transaction

+
toArray(),JSON_PRETTY_PRINT);?>
+
+
+ ln_tx_id) {?> +
+
+

LnTx Transaction

+
lnTx->toArray(),JSON_PRETTY_PRINT);?>
+
+
+ +
+ + +
diff --git a/src/wallet/views/wallet/_form.php b/src/wallet/views/wallet/_form.php new file mode 100644 index 00000000..0baa380b --- /dev/null +++ b/src/wallet/views/wallet/_form.php @@ -0,0 +1,42 @@ +user->identity; +?> + +
+ + + + field($model, 'user_label')->textInput(['maxlength' => true]) ?> + + id) { + $opts = ['disabled'=>true]; + } + $types = \yii\helpers\ArrayHelper::map(\lnpay\wallet\models\WalletType::getAvailableWalletTypes(),'id','display_name'); + + + $q = $user->getLnNodeQuery()->all(); + echo $form->field($model, 'ln_node_id')->dropDownList(\yii\helpers\ArrayHelper::map($q,'id',function ($node){return $node->alias." ({$node->org->display_name})";}),$opts); + + + + + ?> + + +
+ 'btn btn-success']) ?> +
+ + + +
diff --git a/src/wallet/views/wallet/_search.php b/src/wallet/views/wallet/_search.php new file mode 100644 index 00000000..539088ff --- /dev/null +++ b/src/wallet/views/wallet/_search.php @@ -0,0 +1,46 @@ + + + diff --git a/src/wallet/views/wallet/create.php b/src/wallet/views/wallet/create.php new file mode 100644 index 00000000..e2ce09cc --- /dev/null +++ b/src/wallet/views/wallet/create.php @@ -0,0 +1,20 @@ +title = 'Create Wallet'; +$this->params['breadcrumbs'][] = ['label' => 'Wallets', 'url' => ['index']]; +$this->params['breadcrumbs'][] = $this->title; +?> +
+ +

title) ?>

+ + render('_form', [ + 'model' => $model, + ]) ?> + +
diff --git a/src/wallet/views/wallet/dashboard.php b/src/wallet/views/wallet/dashboard.php new file mode 100644 index 00000000..31caeded --- /dev/null +++ b/src/wallet/views/wallet/dashboard.php @@ -0,0 +1,111 @@ +title = 'Wallets'; +$this->params['breadcrumbs'][] = $this->title; + +?> + +
+
+
+
+
+ +
+
Total Wallets
+

+
+
+
+
+
+
+
+ +
+
Transactions (30 days)
+

+
+
+
+
+
+
+
+ +
+
Inbound Volume (30 days)
+

Sats

+
+
+
+
+
+
+
+ +
+
Outbound Volume (30 days)
+

Sats

+
+
+
+
+ + + + +render('_search', ['model' => $searchModel]); ?> + + $dataProvider, + 'filterModel' => $searchModel, + 'pager' => [ + 'class' => 'yii\bootstrap4\LinkPager' + ], + 'columns' => [ + [ + 'attribute'=>'external_hash', + 'header'=>'ID' + ], + 'created_at:datetime', + 'user_label', + 'balance', + /*[ + 'attribute'=>'walletType.display_name', + 'header'=>'Wallet Type', + 'filter' => Html::activeDropDownList($searchModel, 'wallet_type_id', \yii\helpers\ArrayHelper::map([null=>'All']+\lnpay\wallet\models\WalletType::getAvailableWalletTypes(),'id','display_name')) + ],*/ + + [ + 'attribute'=>'lnNode.alias', + 'header'=>'LN Node', + 'filter' => Html::activeDropDownList($searchModel, 'ln_node_id', \yii\helpers\ArrayHelper::map([null=>'All']+\LNPay::$app->user->identity->lnNodes,'id','alias')) + ], + //'external_hash', + //'json_data', + + [ + 'class' => 'yii\grid\ActionColumn', + 'header' => 'Actions', + 'template' => '{view}', + //'headerOptions' => ['class' => 'visible-sm visible-md visible-lg'], + 'contentOptions' => ['style' => 'text-align: center;', 'class' => ''], + 'buttons' => [ + 'view' => function ($url, $model) { + return Html::a('Details ', ['view','id'=>$model->publicId], [ + 'title' => \LNPay::t('app', 'lead-update'), + 'data-pjax'=>0 + ]); + } + ] + ] + ], +]); ?> + + \ No newline at end of file diff --git a/src/wallet/views/wallet/update.php b/src/wallet/views/wallet/update.php new file mode 100644 index 00000000..d2b38961 --- /dev/null +++ b/src/wallet/views/wallet/update.php @@ -0,0 +1,21 @@ +title = 'Update Wallet: ' . $model->id; +$this->params['breadcrumbs'][] = ['label' => 'Wallets', 'url' => ['index']]; +$this->params['breadcrumbs'][] = ['label' => $model->id, 'url' => ['view', 'id' => $model->id]]; +$this->params['breadcrumbs'][] = 'Update'; +?> +
+ +

title) ?>

+ + render('_form', [ + 'model' => $model, + ]) ?> + +
diff --git a/src/wallet/views/wallet/view.php b/src/wallet/views/wallet/view.php new file mode 100644 index 00000000..438e6117 --- /dev/null +++ b/src/wallet/views/wallet/view.php @@ -0,0 +1,189 @@ +title = "Wallet: ".$wallet->user_label; +$this->params['breadcrumbs'][] = ['label' => 'Wallets', 'url' => ['/wallet/wallet/dashboard']]; +$this->params['breadcrumbs'][] = ['label' => $wallet->user_label, 'url' => ['/wallet/wallet/view','id'=>$wallet->external_hash]]; +$this->params['breadcrumbs'][] = 'View'; +?> + +beginContent('@app/wallet/views/layouts/_nav-wallets.php',compact('wallet')); ?> + +
+
+
+
+

Balance

+

availableBalance;?> sats

+
+ +
+ +
+
+
+ +
+
+
+ +
+
+
+
+ +

Transfer Details

+ + +
+
+ source_wallet_id = $wallet->publicId; + $tForm = ActiveForm::begin([ + 'options'=>[ + 'class'=>'formSpinnerLoader' + ] + ]); ?> + errorSummary($model); ?> + field($tModel, 'source_wallet_id')->hiddenInput()->label(false); ?> + field($tModel, 'num_satoshis')->textInput(['placeholder'=>'e.g. 20'])->hint('Funds available in this wallet: '.$wallet->balance); ?> + field($tModel, 'memo')->textInput(['placeholder'=>'e.g. Stashing funds']); ?> + asArray()->all(),'external_hash',function($row) { return $row['user_label'].' (Balance: '.$row['balance'].')'; }); + echo $tForm->field($tModel, 'dest_wallet_id')->dropDownList($wallets,['prompt'=>'Choose Destination Wallet']); ?> + 'btn btn-success','style'=>'white-space:unset;']) ?> + +
+
+
+
+ +

Send Details

+ + +
+
+ true, + 'options'=>[ + 'class'=>'ajaxFormLoader' + ], + 'validationUrl'=>'/wallet/wallet/validate-withdrawal?id='.$wallet->publicId + ]); ?> + errorSummary($model); ?> + + field($wModel, 'payment_request')->textArea(['placeholder'=>'e.g. lnbc10u1pwcxqfkpp5e9nu85e6fypp89ql0hnz7yj784jatyytugewmpwe9yqhla7zvg3sdqdfdshjsn92djk2cqzpgjuk3ljzzrqhwsfr36h0nnyzy3gx3sna3fdnj9pkcqakjnkly0cdhk0lagf763mtegeld78qdpwf7t52mvgxl3f8neuty8y0pvvvffjcp96x09n', 'rows'=>4]); ?> + 'btn btn-success','style'=>'white-space:unset;']) ?> + +
+
+ + getLnurlWithdrawLinkEncoded(null,['ott'=>'ui-w']) ?> + + ';?> + +

name;?> supports LNURL - Scan or click with a LNURL compatible wallet.

+ +
+
+
+
+ +

Receive Details

+
+
+ [ + 'class'=>'ajaxFormLoader' + ], + ]); ?> + errorSummary($model); ?> + + field($dModel, 'num_satoshis')->textInput(['placeholder'=>'e.g. 20']); ?> + field($dModel, 'memo')->textInput(['placeholder'=>'e.g. For Deposit']); ?> + + getFirstAccessKeyByRole(\lnpay\behaviors\UserAccessKeyBehavior::ROLE_WALLET_INVOICE); + $userKey = \LNPay::$app->user->identity->getFirstAccessKeyByRole(\lnpay\behaviors\UserAccessKeyBehavior::ROLE_PUBLIC_API_KEY); + $this->registerJs(" + function createInvoice() { + $.ajax({ + url: '/v1/wallet/$key/invoice', + headers: { + 'X-Api-Key': '".$userKey."' + }, + type: 'post', + data: {num_satoshis:$('#lnwalletdepositform-num_satoshis').val() , memo:$('#lnwalletdepositform-memo').val()}, + error: function (xhr, ajaxOptions, thrownError) { + alert(JSON.parse(xhr.responseText).message); + }, + success: function (data) { + $('#showInvoice').html('
'+data.payment_request); + var refreshInterval = setInterval(function(data){ + var req = $.ajax({ + type:\"get\", + url:\"/v1/lntx/\"+data.id+\"?access-token=".$userKey."\", + }); + req.done(function(data){ + //console.log(data); + + if (data.settled) { + clearInterval(refreshInterval); + alert('Deposit received!'); + window.location.reload(); + } + }); + },5000,data); + }}); + + } + ",\yii\web\View::POS_END); ?> + + 'btn btn-success','style'=>'white-space:unset;','onClick'=>'createInvoice();return false;']) ?> + +
+
+ +
+
+
+
+
+
+ isFeeWallet) + echo \yii\bootstrap4\Alert::widget([ + 'body' => 'Lightning Network routing fees incurred from using this node. You will see a negative balance.', + 'options' => [ + 'id' => 'id-keysend-yay', + 'class' => 'alert-info', + ] + ]); + else if ($wallet->isKeysendWallet) { + echo \yii\bootstrap4\Alert::widget([ + 'body' => 'Inbound keysend payments to this node that do not have a mapping to a wallet are collected here', + 'options' => [ + 'id' => 'id-keysend-yay', + 'class' => 'alert-info', + ] + ]); + } + ?> + + +

+ +endContent();?> \ No newline at end of file diff --git a/src/wallet/views/wallet/views/_access-keys.php b/src/wallet/views/wallet/views/_access-keys.php new file mode 100644 index 00000000..a232c1ee --- /dev/null +++ b/src/wallet/views/wallet/views/_access-keys.php @@ -0,0 +1,42 @@ +title = "Access Keys: ".$wallet->user_label; +$this->params['breadcrumbs'][] = ['label' => 'Wallets', 'url' => ['/wallet/dashboard']]; +$this->params['breadcrumbs'][] = ['label' => $wallet->user_label, 'url' => ['/wallet/view','id'=>$wallet->external_hash]]; +$this->params['breadcrumbs'][] = 'Access Keys'; +?> + +beginContent('@app/wallet/views/layouts/_nav-wallets.php',compact('wallet')); ?> + +
+ 'Wallet ID', + 'value'=> $wallet->publicId, + 'format'=>'raw' +]; +foreach ($wallet->getUserAccessKeys() as $roleName => $keys) { + $str = ''; + foreach ($keys as $k) { + $str.=$k.'
'; + } + $items[] = [ + 'label' => $roleName, + 'value'=> $str, + 'format'=>'raw' + ]; +} +echo \yii\widgets\DetailView::widget([ + 'model' => $wallet->getUserAccessKeys(), + 'attributes' => $items +]); +?> + +endContent(); ?> diff --git a/src/wallet/views/wallet/views/_keysend.php b/src/wallet/views/wallet/views/_keysend.php new file mode 100644 index 00000000..16c52731 --- /dev/null +++ b/src/wallet/views/wallet/views/_keysend.php @@ -0,0 +1,56 @@ +title = "Keysend: ".$wallet->user_label; +$this->params['breadcrumbs'][] = ['label' => 'Wallets', 'url' => ['/wallet/dashboard']]; +$this->params['breadcrumbs'][] = ['label' => $wallet->user_label, 'url' => ['/wallet/view','id'=>$wallet->external_hash]]; +$this->params['breadcrumbs'][] = 'Keysend'; + +?> + +beginContent('@app/wallet/views/layouts/_nav-wallets.php',compact('wallet')); ?> +

Keysend Logs

+lnNode->default_pubkey.' -a [NUM_SATOSHIS] --keysend --data 696969='.bin2hex($wallet->external_hash); + +switch ($wallet->wallet_type_id) { + case \lnpay\wallet\models\WalletType::GENERIC_WALLET: + echo \yii\bootstrap4\Alert::widget([ + 'body' => 'To KEYSEND to via LND to THIS WALLET run the command below:

'.$cmd, + 'options' => [ + 'id' => 'id-keysend-yay', + 'class' => 'alert-info', + ] + ]); + break; +} +?> + + $wtxDataProvider, + 'summary' => '', + 'tableOptions' => ['class' => 'table'], + 'headerRowOptions' => ['class' => 'table-header'], + 'columns' => [ + [ + 'header'=>'Time', + 'attribute'=>function ($model) { + return date(' g:i:s A T',$model->created_at) . '
' . + date('M j, Y',$model->created_at); + }, + 'format'=>'raw' + ], + 'num_satoshis', + [ + 'header'=>'Data', + 'value'=>function ($model) { + return \yii\helpers\VarDumper::export($model->lnTx->custom_records); + }, + 'format'=>'raw' + ], + + ], +]); +?> + +endContent(); ?> diff --git a/src/wallet/views/wallet/views/_ln-node.php b/src/wallet/views/wallet/views/_ln-node.php new file mode 100644 index 00000000..6779d23b --- /dev/null +++ b/src/wallet/views/wallet/views/_ln-node.php @@ -0,0 +1,54 @@ +title = "LN Node: ".$wallet->user_label; +$this->params['breadcrumbs'][] = ['label' => 'Wallets', 'url' => ['/wallet/dashboard']]; +$this->params['breadcrumbs'][] = ['label' => $wallet->user_label, 'url' => ['/wallet/view','id'=>$wallet->external_hash]]; +$this->params['breadcrumbs'][] = 'Lightning Node'; + +$lnNode = $wallet->lnNode; +$user = \LNPay::$app->user->identity; +?> + +beginContent('@app/wallet/views/layouts/_nav-wallets.php',compact('wallet')); ?> +
+

alias;?> (org->display_name;?>)

+

+

+ user_id == \LNPay::$app->user->id) { ?> +

+ View Node +

+ +

+

Lightning Network transactions for this wallet are handled via this node.

+
+lnNode) { + +?> +
+

Change Node Form

+
+ [], + ]); ?> + errorSummary($walletNodeChangeForm); ?> + + getLnNodeQuery()->all(); + echo $form->field($walletNodeChangeForm, 'target_ln_node_id')->dropDownList(\yii\helpers\ArrayHelper::map($q,'id','alias'),[]); + ?> + field($walletNodeChangeForm, 'wallet_id')->hiddenInput(['value'=>$wallet->external_hash])->label(false); ?> + field($walletNodeChangeForm, 'transfer_balance')->checkbox()->hint('Transfer the sat balance ('.$wallet->balance.' sat) to the new node via keysend'); ?> + 'styled-button-success','style'=>'white-space:unset;']) ?> + +
+
+ + + +endContent(); ?> diff --git a/src/wallet/views/wallet/views/_lnurl-pay.php b/src/wallet/views/wallet/views/_lnurl-pay.php new file mode 100644 index 00000000..235a75e5 --- /dev/null +++ b/src/wallet/views/wallet/views/_lnurl-pay.php @@ -0,0 +1,21 @@ +title = "LNURL Pay: ".$wallet->user_label; +$this->params['breadcrumbs'][] = ['label' => 'Wallets', 'url' => ['/wallet/dashboard']]; +$this->params['breadcrumbs'][] = ['label' => $wallet->user_label, 'url' => ['/wallet/view','id'=>$wallet->external_hash]]; +$this->params['breadcrumbs'][] = 'LNURL Pay'; +?> + +beginContent('@app/wallet/views/layouts/_nav-wallets.php',compact('wallet')); ?> + +
+

Scan to send

+

+ +

+

+

defaultWalletLnurlpay->lnurl_encoded;?>
+ defaultWalletLnurlpay->lnurl_decoded;?> +

+
+ +endContent(); ?> diff --git a/src/wallet/views/wallet/views/_loop.php b/src/wallet/views/wallet/views/_loop.php new file mode 100644 index 00000000..8aa1c25c --- /dev/null +++ b/src/wallet/views/wallet/views/_loop.php @@ -0,0 +1,36 @@ +title = "Access Keys: ".$wallet->user_label; +$this->params['breadcrumbs'][] = ['label' => 'Wallets', 'url' => ['/wallet/dashboard']]; +$this->params['breadcrumbs'][] = ['label' => $wallet->user_label, 'url' => ['/wallet/view','id'=>$wallet->external_hash]]; +$this->params['breadcrumbs'][] = 'Loop In/Out'; +?> + +beginContent('@app/wallet/views/layouts/_nav-wallets.php',compact('wallet')); ?> +

Loop Out

+
+
+
+

Wallet Balance

+

availableBalance;?> sats

+
+ +
+ [ + 'class'=>'ajaxFormLoader' + ], + ]); ?> + errorSummary($model); ?> + + field($lnLoopOutForm, 'num_satoshis')->textInput(['placeholder'=>'e.g. 10000', 'rows'=>4]); ?> + field($lnLoopOutForm, 'addr')->textInput(['placeholder'=>'e.g. bc1...']); ?> + field($lnLoopOutForm, 'channel')->textInput(['placeholder'=>'e.g. 772939485837331841'])->hint('This will be left blank unless instructed otherwise'); ?> + 'styled-button-success','style'=>'white-space:unset;']) ?> + +
+
+
+ +endContent(); ?> diff --git a/src/wallet/views/wallet/views/_wtx-breakdown.php b/src/wallet/views/wallet/views/_wtx-breakdown.php new file mode 100644 index 00000000..679e54d7 --- /dev/null +++ b/src/wallet/views/wallet/views/_wtx-breakdown.php @@ -0,0 +1,45 @@ +title = "Transactions: ".$wallet->user_label; +$this->params['breadcrumbs'][] = ['label' => 'Wallets', 'url' => ['/wallet/dashboard']]; +$this->params['breadcrumbs'][] = ['label' => $wallet->user_label, 'url' => ['/wallet/view','id'=>$wallet->external_hash]]; +$this->params['breadcrumbs'][] = 'Transactions'; +?> +beginContent('@app/wallet/views/layouts/_nav-wallets.php',compact('wallet')); ?> + $wtxDataProvider, + 'filterModel' => $wtxSearchModel, + 'summary' => '', + 'tableOptions' => ['class' => 'table'], + 'headerRowOptions' => ['class' => 'table-header'], + 'pager' => [ + 'class' => 'yii\bootstrap4\LinkPager' + ], + 'columns' => [ + [ + 'header'=>'Time', + 'attribute'=>function ($model) { + return date(' g:i:s A T',$model->created_at) . '
' . + date('M j, Y',$model->created_at); + }, + 'format'=>'raw' + ], + [ + 'header'=>'Transaction Type', + 'attribute'=>function ($model) { + if ($model->wallet->isFeeWallet) + return $model->walletTransactionType->display_name."
Ref: ".$model->getJsonData('source_transaction'); + else + return $model->walletTransactionType->display_name."
".$model->external_hash; + }, + 'format'=>'raw' + ], + 'num_satoshis', + 'user_label' + + ], +]); ?> + +endContent();?> diff --git a/src/widgets/Alert.php b/src/widgets/Alert.php new file mode 100644 index 00000000..c8b2bf71 --- /dev/null +++ b/src/widgets/Alert.php @@ -0,0 +1,75 @@ +session->setFlash('error', 'This is the message'); + * \LNPay::$app->session->setFlash('success', 'This is the message'); + * \LNPay::$app->session->setFlash('info', 'This is the message'); + * ``` + * + * Multiple messages could be set as follows: + * + * ```php + * \LNPay::$app->session->setFlash('error', ['Error 1', 'Error 2']); + * ``` + * + * @author Kartik Visweswaran + * @author Alexander Makarov + */ +class Alert extends \yii\bootstrap4\Widget +{ + /** + * @var array the alert types configuration for the flash messages. + * This array is setup as $key => $value, where: + * - key: the name of the session flash variable + * - value: the bootstrap alert type (i.e. danger, success, info, warning) + */ + public $alertTypes = [ + 'error' => 'alert-danger', + 'danger' => 'alert-danger', + 'success' => 'alert-success', + 'info' => 'alert-info', + 'warning' => 'alert-warning' + ]; + /** + * @var array the options for rendering the close button tag. + * Array will be passed to [[\yii\bootstrap\Alert::closeButton]]. + */ + public $closeButton = []; + + + /** + * {@inheritdoc} + */ + public function run() + { + $session = \LNPay::$app->session; + $flashes = $session->getAllFlashes(); + $appendClass = isset($this->options['class']) ? ' ' . $this->options['class'] : ''; + + foreach ($flashes as $type => $flash) { + if (!isset($this->alertTypes[$type])) { + continue; + } + + foreach ((array) $flash as $i => $message) { + echo \yii\bootstrap4\Alert::widget([ + 'body' => $message, + 'closeButton' => $this->closeButton, + 'options' => array_merge($this->options, [ + 'id' => $this->getId() . '-' . $type . '-' . $i, + 'class' => $this->alertTypes[$type] . $appendClass, + ]), + ]); + } + + $session->removeFlash($type); + } + } +} diff --git a/t b/t new file mode 100755 index 00000000..6c14ed0a --- /dev/null +++ b/t @@ -0,0 +1,2 @@ +#!/usr/bin/env bash +docker exec -it lnpay-php bash \ No newline at end of file diff --git a/test.sh b/test.sh new file mode 100644 index 00000000..1ed4dcae --- /dev/null +++ b/test.sh @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +docker exec lnpay-php vendor/bin/codecept run -vvv \ No newline at end of file diff --git a/tests/.gitignore b/tests/.gitignore new file mode 100644 index 00000000..f5e3d203 --- /dev/null +++ b/tests/.gitignore @@ -0,0 +1 @@ +polar-deprecated/volumes \ No newline at end of file diff --git a/tests/_bootstrap.php b/tests/_bootstrap.php new file mode 100644 index 00000000..c39ca526 --- /dev/null +++ b/tests/_bootstrap.php @@ -0,0 +1,15 @@ +safeLoad(); + +shell_exec("mysql -h".getenv('DB_HOST')." -u".getenv('DB_USER')." -p".getenv('DB_PASS')." -e \"DROP DATABASE IF EXISTS yii2_basic_tests\""); +shell_exec("mysql -h".getenv('DB_HOST')." -u".getenv('DB_USER')." -p".getenv('DB_PASS')." -e \"CREATE DATABASE IF NOT EXISTS yii2_basic_tests;\""); +shell_exec("php tests/bin/yii migrate --migrationPath=@yii/rbac/migrations --interactive=0"); +shell_exec("php tests/bin/yii migrate --migrationPath=@app/migrations --interactive=0"); + diff --git a/tests/_data/.gitkeep b/tests/_data/.gitkeep new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/tests/_data/.gitkeep @@ -0,0 +1 @@ + diff --git a/tests/_data/auth_assignment.php b/tests/_data/auth_assignment.php new file mode 100644 index 00000000..0305cdf4 --- /dev/null +++ b/tests/_data/auth_assignment.php @@ -0,0 +1,161 @@ +'Public API Key', + 'user_id' =>'pak_HgiUO4kskfneieivTI05Fm3YzTza4N', + 'created_at' => time() + ], + [ + 'item_name'=>'Secret API Key', + 'user_id' =>'sak_KkKkKkKkKkneieivTI05Fm3YzTza4N', + 'created_at' => time() + ], + [ + 'item_name'=>'Wallet Admin', + 'user_id' =>'waka_alice', + 'created_at' => time() + ], + [ + 'item_name'=>'Wallet Read', + 'user_id' =>'wakr_alice', + 'created_at' => time() + ], + [ + 'item_name'=>'Wallet LNURL Withdraw', + 'user_id' =>'waklw_alice', + 'created_at' => time() + ], + [ + 'item_name'=>'Wallet Invoice', + 'user_id' =>'waki_alice', + 'created_at' => time() + ], + [ + 'item_name'=>'Wallet Admin', + 'user_id' =>'waka_bob', + 'created_at' => time() + ], + [ + 'item_name'=>'Wallet Read', + 'user_id' =>'wakr_bob', + 'created_at' => time() + ], + [ + 'item_name'=>'Wallet LNURL Withdraw', + 'user_id' =>'waklw_bob', + 'created_at' => time() + ], + [ + 'item_name'=>'Wallet Invoice', + 'user_id' =>'waki_bob', + 'created_at' => time() + ], + [ + 'item_name'=>'Wallet Admin', + 'user_id' =>'waka_carol', + 'created_at' => time() + ], + [ + 'item_name'=>'Wallet Read', + 'user_id' =>'wakr_carol', + 'created_at' => time() + ], + [ + 'item_name'=>'Wallet LNURL Withdraw', + 'user_id' =>'waklw_carol', + 'created_at' => time() + ], + [ + 'item_name'=>'Wallet Invoice', + 'user_id' =>'waki_carol', + 'created_at' => time() + ], + [ + 'item_name'=>'Wallet Admin', + 'user_id' =>'waka_carolTransactions', + 'created_at' => time() + ], + [ + 'item_name'=>'Wallet Read', + 'user_id' =>'wakr_carolTransactions', + 'created_at' => time() + ], + [ + 'item_name'=>'Wallet LNURL Withdraw', + 'user_id' =>'waklw_carolTransactions', + 'created_at' => time() + ], + [ + 'item_name'=>'Wallet Invoice', + 'user_id' =>'waki_carolTransactions', + 'created_at' => time() + ], + [ + 'item_name'=>'Wallet Admin', + 'user_id' =>'waka_carolTransfer1', + 'created_at' => time() + ], + [ + 'item_name'=>'Wallet Admin', + 'user_id' =>'waka_carolTransfer2', + 'created_at' => time() + ], + [ + 'item_name'=>'Wallet Read', + 'user_id' =>'wakr_carolTransfer1', + 'created_at' => time() + ], + [ + 'item_name'=>'Wallet LNURL Withdraw', + 'user_id' =>'waklw_carolTransfer1', + 'created_at' => time() + ], + [ + 'item_name'=>'Wallet Invoice', + 'user_id' =>'waki_carolTransfer1', + 'created_at' => time() + ], + [ + 'item_name'=>'Wallet Admin', + 'user_id' =>'waka_aliceLnurlWithdraw', + 'created_at' => time() + ], + [ + 'item_name'=>'Wallet Read', + 'user_id' =>'wakr_aliceLnurlWithdraw', + 'created_at' => time() + ], + [ + 'item_name'=>'Wallet LNURL Withdraw', + 'user_id' =>'waklw_aliceLnurlWithdraw', + 'created_at' => time() + ], + [ + 'item_name'=>'Wallet Invoice', + 'user_id' =>'waki_aliceLnurlWithdraw', + 'created_at' => time() + ], + [ + 'item_name'=>'Wallet LNURL Pay', + 'user_id' =>'waklp_aliceLnurlPay', + 'created_at' => time() + ], + [ + 'item_name'=>'Wallet Admin', + 'user_id' =>'waka_aliceLnurlPay', + 'created_at' => time() + ], +]; diff --git a/tests/_data/auth_item.php b/tests/_data/auth_item.php new file mode 100644 index 00000000..09ae3ce3 --- /dev/null +++ b/tests/_data/auth_item.php @@ -0,0 +1,121 @@ +'Public API Key', + 'type' =>'1', + 'description' => 'Identifies account, basic permission', + 'rule_name'=>null, + 'data'=>null, + 'created_at'=>time(), + 'updated_at'=>time() + ], + [ + 'name'=>'Secret API Key', + 'type' =>'1', + 'description' => 'Can perform all actions', + 'rule_name'=>null, + 'data'=>null, + 'created_at'=>time(), + 'updated_at'=>time() + ], + [ + 'name'=>'Wallet Admin', + 'type' =>'1', + 'description' => 'Can read,deposit,transfer,withdraw', + 'rule_name'=>null, + 'data'=>null, + 'created_at'=>time(), + 'updated_at'=>time() + ], + [ + 'name'=>'Wallet Invoice', + 'type' =>'1', + 'description' => 'Can read, deposit', + 'rule_name'=>null, + 'data'=>null, + 'created_at'=>time(), + 'updated_at'=>time() + ], + [ + 'name'=>'Wallet LNURL Withdraw', + 'type' =>'1', + 'description' => 'withdraw,txread', + 'rule_name'=>null, + 'data'=>null, + 'created_at'=>time(), + 'updated_at'=>time() + ], + [ + 'name'=>'Wallet LNURL Pay', + 'type' =>'1', + 'description' => 'deposit', + 'rule_name'=>null, + 'data'=>null, + 'created_at'=>time(), + 'updated_at'=>time() + ], + [ + 'name'=>'Wallet Read', + 'type' =>'1', + 'description' => 'Can read', + 'rule_name'=>null, + 'data'=>null, + 'created_at'=>time(), + 'updated_at'=>time() + ], + [ + 'name'=>'wallet_deposit', + 'type' =>'2', + 'description' => 'Wallet Deposit', + 'rule_name'=>null, + 'data'=>null, + 'created_at'=>time(), + 'updated_at'=>time() + ], + [ + 'name'=>'wallet_public_withdraw', + 'type' =>'2', + 'description' => 'Wallet Public Withdraw', + 'rule_name'=>null, + 'data'=>null, + 'created_at'=>time(), + 'updated_at'=>time() + ], + [ + 'name'=>'wallet_read', + 'type' =>'2', + 'description' => 'Wallet Read', + 'rule_name'=>null, + 'data'=>null, + 'created_at'=>time(), + 'updated_at'=>time() + ], + [ + 'name'=>'wallet_transfer', + 'type' =>'2', + 'description' => 'Wallet Transfer', + 'rule_name'=>null, + 'data'=>null, + 'created_at'=>time(), + 'updated_at'=>time() + ], + [ + 'name'=>'wallet_tx_read', + 'type' =>'2', + 'description' => 'Wallet Tx Read', + 'rule_name'=>null, + 'data'=>null, + 'created_at'=>time(), + 'updated_at'=>time() + ], + [ + 'name'=>'wallet_withdraw', + 'type' =>'2', + 'description' => 'Wallet Withdraw', + 'rule_name'=>null, + 'data'=>null, + 'created_at'=>time(), + 'updated_at'=>time() + ], +]; diff --git a/tests/_data/auth_item_child.php b/tests/_data/auth_item_child.php new file mode 100644 index 00000000..af34fe4f --- /dev/null +++ b/tests/_data/auth_item_child.php @@ -0,0 +1,56 @@ +'Wallet Admin', + 'child' =>'wallet_deposit', + ], + [ + 'parent'=>'Wallet Invoice', + 'child' =>'wallet_deposit', + ], + [ + 'parent'=>'Wallet LNURL Withdraw', + 'child' =>'wallet_public_withdraw', + ], + [ + 'parent'=>'Wallet Admin', + 'child' =>'wallet_read', + ], + [ + 'parent'=>'Wallet LNURL Withdraw', + 'child' =>'wallet_read', + ], + [ + 'parent'=>'Wallet Read', + 'child' =>'wallet_read', + ], + [ + 'parent'=>'Wallet Admin', + 'child' =>'wallet_transfer', + ], + [ + 'parent'=>'Wallet Admin', + 'child' =>'wallet_tx_read', + ], + [ + 'parent'=>'Wallet Invoice', + 'child' =>'wallet_tx_read', + ], + [ + 'parent'=>'Wallet Read', + 'child' =>'wallet_tx_read', + ], + [ + 'parent'=>'Wallet Admin', + 'child' =>'wallet_withdraw', + ], + [ + 'parent'=>'Wallet LNURL Withdraw', + 'child' =>'wallet_withdraw', + ], + [ + 'parent'=>'Wallet LNURL Pay', + 'child' =>'wallet_deposit', + ], +]; diff --git a/tests/_data/custy_domain.php b/tests/_data/custy_domain.php new file mode 100644 index 00000000..174227ed --- /dev/null +++ b/tests/_data/custy_domain.php @@ -0,0 +1,34 @@ +5, + 'user_id'=>147, + 'domain_name'=>'lnpay.local', + 'port'=>80, + 'display_name'=>'local_1', + 'use_https'=>null, + 'status_type_id'=>50, + 'ssl_info'=>'', + 'use_hsts'=>'', + 'upgrade_insecure'=>'', + 'external_hash'=>'cdom_123', + 'data'=>'' + ], + [ + 'id'=>6, + 'user_id'=>69, + 'domain_name'=>'lnpay.local', + 'port'=>80, + 'display_name'=>'lnod_carol', + 'external_hash'=>'cdom_444', + 'use_https'=>null, + 'status_type_id'=>50, + 'ssl_info'=>'', + 'use_hsts'=>'', + 'upgrade_insecure'=>'', + 'data'=>'' + ] + ]; diff --git a/tests/_data/ln_tx.php b/tests/_data/ln_tx.php new file mode 100644 index 00000000..07284a2e --- /dev/null +++ b/tests/_data/ln_tx.php @@ -0,0 +1,73 @@ +19, + 'created_at'=>1627497727, + 'updated_at'=>1627497727, + 'user_id'=>147, + 'ln_node_id'=>'lnod_carol', + 'external_hash'=>'lntx_2hm5HITzHmy5lbW0cH7bbvA', + 'dest_pubkey'=>'025eb9588a5db262ebf195edb1a940428bac534e5b012b8b1d3011fdfa9f8f13db', + 'payment_request'=>'lnbcrt10u1pssrf8lpp5afdd56cketj6ak8gh68v53tdkwvdwvp20wu6hpaqfdxv7cp9te9sdpyg3jhqmmnd96zq2rkd9sjqnzw2pq4jtnrdu5scqzpgxqyz5vqsp5a4lsx36ehmjyvdfe2jty0fvfhs2hh7vl5lmnup4xzdmktskp352q9qyyssquxa0whpg26gjq0vyy7vzzezvn04j8qlgw49tmd2epe0fwkre50hzr30gpmcmefc6hwz766a35fgr7vzzpw6ky7xgyzkw0hx2npmtzmsqhh3k8n', + 'r_hash_decoded'=>'ea5ada6b16cae5aed8e8be8eca456db398d7302a7bb9ab87a04b4ccf60255e4b', + 'memo'=>'Deposit (via LNPAY.co)', + 'description_hash'=>null, + 'num_satoshis'=>1000, + 'fee_msat'=>0, + 'expiry'=>86400, + 'expires_at'=>1627584127, + 'payment_preimage'=>null, + 'settled'=>0, + 'settled_at'=>NULL, + 'is_keysend'=>null, + 'custom_records'=>null, + 'json_data'=>'{"wallet_id": "wal_testCarolTransactions"}' + ], + [ //paid invoice for lnod_carol + 'id'=>20, + 'created_at'=>1627497727, + 'updated_at'=>1627497727, + 'user_id'=>147, + 'ln_node_id'=>'lnod_carol', + 'external_hash'=>'lntx_vfyNo0VRuIzkEew6PladBwy', + 'dest_pubkey'=>'025eb9588a5db262ebf195edb1a940428bac534e5b012b8b1d3011fdfa9f8f13db', + 'payment_request'=>'lnbcrt5u1pssrfe2pp5t0p345pvcmx2nfchp029cxnp4ze966y9ggvhlaezfehq98hw6uksdpsg3jhqmmnd96zqen0wgsr2vpsyq58v6tpypxyu5zptyhxxmefcqzpgxqyz5vqsp5lvgjv7cd795ewc3rhu6w6tqh0euhtw43da0mfy0n9y0zscfctd0s9qyyssq5tmqdtrmv6vzeyyqat0440wk9xpna0kwsm5uqatn0qamjwnx57aznc5jz82n9pxnk2q6enhxr08u63u74evdr2kat5xnd7ptex2z7zspsfsh2j', + 'r_hash_decoded'=>'5bc31ad02cc6cca9a7170bd45c1a61a8b25d688542197ff7224e6e029eeed72d', + 'memo'=>'Deposit for 500 (via LNPAY.co)', + 'description_hash'=>null, + 'num_satoshis'=>500, + 'fee_msat'=>0, + 'expiry'=>86400, + 'expires_at'=>1627584127, + 'payment_preimage'=>'50bc13a337b464e7920d60cfa8347d359c5199fd9d5ec76dc6a8bfa7fd0aff34', + 'settled'=>1, + 'settled_at'=>1627498300, + 'is_keysend'=>null, + 'custom_records'=>null, + 'json_data'=>'{"wallet_id": "wal_testCarolTransactions"}' + ], + [ //Test lntx other user + 'id'=>21, + 'created_at'=>1627497727, + 'updated_at'=>1627497727, + 'user_id'=>69, + 'ln_node_id'=>NULL, + 'external_hash'=>'lntx_vfyNo0VRKKKKKKK', + 'dest_pubkey'=>'025eb9588a5db262ebf195edb1a940428bac534e5b012b8b1d3011fdfa9f8f13db', + 'payment_request'=>'lnbcrt5u1pssrfe2pp5t0p345pvcmx2nfch2vpsyq58v6tpypxyu5zptyhxxmefcqzpgxqyz5vqsp5lvgjv7cd795ewc3rhu6w6tqh0euhtw43da0mfy0n9y0zscfctd0s9qyyssq5tmqdtrmv6vzeyyqat0440wk9xpna0kwsm5uqatn0qamjwnx57aznc5jz82n9pxnk2q6enhxr08u63u74evdr2kat5xnd7ptex2z7zspsfsh2j', + 'r_hash_decoded'=>'5bc31ad02cc6cca9a7170bd45c1a61a8b25d688542197ff72lASMDLAMDLAMSD', + 'memo'=>'Deposit for 500 (via LNPAY.co)', + 'description_hash'=>null, + 'num_satoshis'=>500, + 'fee_msat'=>0, + 'expiry'=>86400, + 'expires_at'=>1627584127, + 'payment_preimage'=>'50bc13a337b464e7920d60cfa8347d359caff34', + 'settled'=>1, + 'settled_at'=>1627498300, + 'is_keysend'=>null, + 'custom_records'=>null, + 'json_data'=>null + ] +]; \ No newline at end of file diff --git a/tests/_data/org.php b/tests/_data/org.php new file mode 100644 index 00000000..77643a30 --- /dev/null +++ b/tests/_data/org.php @@ -0,0 +1,13 @@ +10, + 'created_at' =>NULL, + 'updated_at' => NULL, + 'name'=>'tester_org', + 'display_name'=>'Tester Org', + 'external_hash'=>'org_1234567', + 'status_type_id'=>500 + ], +]; diff --git a/tests/_data/user.php b/tests/_data/user.php new file mode 100644 index 00000000..fc84101b --- /dev/null +++ b/tests/_data/user.php @@ -0,0 +1,41 @@ + [ + 'id'=>147, + 'api_parent_id'=> null, + 'org_id'=>10, + 'username' => 'bandit', + 'auth_key' => 'K3nF70it7tzNsHddEiq0BZ0i-OU8S3xV', + 'mfa_secret_key'=>null, + 'password_hash' => '$2y$13$9LZ5X4420SffJCGCtohnHu2Rc.MSF2y7V9imlHq2M0OwqGa6PBRoa', + 'password_reset_token' => NULL, + 'email'=>'strosin.vernice@jerde.com', + 'email_verify'=>0, + 'external_hash'=>'usr_XIXkpKKKSJmDqW', + 'status'=>10, + 'created_at' => time(), + 'updated_at' => time(), + 'balance'=>null, + 'tz'=>'', + 'json_data'=>null + ], + 'user2' => [ + 'id'=>69, + 'api_parent_id'=> null, + 'api_version'=>null, + 'username' => 'jsonTester', + 'auth_key' => 'JsonTesterAuthKey', + 'mfa_secret_key'=>null, + 'password_hash' => '$2y$13$WSyE5hHsG1rWN2jV8LRHzubilrCLI5Ev/iK0r3jRuwQEs2ldRu.a2', + 'password_reset_token' => NULL, + 'email'=>'jsonTest@gmail.com', + 'email_verify'=>0, + 'external_hash'=>'usr_XXXXJSONTESTER', + 'status'=>10, + 'created_at' => time(), + 'updated_at' => time(), + 'balance'=>null, + 'tz'=>'', + 'json_data'=>['lnurl_ott'=>'tester-ott'] + ], +]; \ No newline at end of file diff --git a/tests/_data/user_access_key.php b/tests/_data/user_access_key.php new file mode 100644 index 00000000..c7b70a40 --- /dev/null +++ b/tests/_data/user_access_key.php @@ -0,0 +1,329 @@ + 1, + 'created_at' =>1576066208, + 'updated_at' =>1576066208, + 'user_id' => 147, + 'wallet_id' => 5, + 'access_key' => 'wa_iHuVO8RA8jXcNzqcYKHJQf', + 'json_data' => null + ], + [ + 'id' => 2, + 'created_at' =>1576066208, + 'updated_at' =>1576066208, + 'user_id' => 147, + 'wallet_id' => 5, + 'access_key' => 'wr_dQyuwIyC9mpcx9vBO9dSz', + 'json_data' => null + ], + [ + 'id' => 3, + 'created_at' =>1576066208, + 'updated_at' =>1576066208, + 'user_id' => 147, + 'wallet_id' => 5, + 'access_key' => 'wi_L0dgvlePXDb2PmhBdwWVGRr', + 'json_data' => null + ], + [ + 'id' => 4, + 'created_at' =>1576066208, + 'updated_at' =>1576066208, + 'user_id' => 147, + 'wallet_id' => 6, + 'access_key' => 'wa_wallet6_admin', + 'json_data' => null + ], + [ + 'id' => 5, + 'created_at' =>1576066208, + 'updated_at' =>1576066208, + 'user_id' => 147, + 'wallet_id' => 6, + 'access_key' => 'wr_wallet6_read', + 'json_data' => null + ], + [ + 'id' => 6, + 'created_at' =>1576066208, + 'updated_at' =>1576066208, + 'user_id' => 147, + 'wallet_id' => 6, + 'access_key' => 'wi_wallet6_invoice', + 'json_data' => null + ], + [ + 'id' => 7, + 'created_at' =>1576066208, + 'updated_at' =>1576066208, + 'user_id' => 147, + 'wallet_id' => NULL, + 'access_key' => 'THMbv7j1m-d3spjMUW0IAcSa281MeS1N', + 'json_data' => null + ], + [ + 'id' => 8, + 'created_at' =>1576066208, + 'updated_at' =>1576066208, + 'user_id' => 147, + 'wallet_id' => NULL, + 'access_key' => 'pak_HgiUO4kskfneieivTI05Fm3YzTza4N', + 'json_data' => null + ], + [ + 'id' => 9, + 'created_at' =>1576066208, + 'updated_at' =>1576066208, + 'user_id' => 147, + 'wallet_id' => NULL, + 'access_key' => 'sak_KkKkKkKkKkneieivTI05Fm3YzTza4N', + 'json_data' => null + ], + [ + 'id' => null, + 'created_at' =>1576066208, + 'updated_at' =>1576066208, + 'user_id' => 147, + 'wallet_id' => 5, + 'access_key' => 'waka_carol', + 'json_data' => null + ], + [ + 'id' => null, + 'created_at' =>1576066208, + 'updated_at' =>1576066208, + 'user_id' => 147, + 'wallet_id' => 5, + 'access_key' => 'wakr_carol', + 'json_data' => null + ], + [ + 'id' => null, + 'created_at' =>1576066208, + 'updated_at' =>1576066208, + 'user_id' => 147, + 'wallet_id' => 5, + 'access_key' => 'waki_carol', + 'json_data' => null + ], + [ + 'id' => null, + 'created_at' =>1576066208, + 'updated_at' =>1576066208, + 'user_id' => 147, + 'wallet_id' => 5, + 'access_key' => 'waklw_carol', + 'json_data' => null + ], + [ + 'id' => null, + 'created_at' =>1576066208, + 'updated_at' =>1576066208, + 'user_id' => 147, + 'wallet_id' => 6, + 'access_key' => 'waka_bob', + 'json_data' => null + ], + [ + 'id' => null, + 'created_at' =>1576066208, + 'updated_at' =>1576066208, + 'user_id' => 147, + 'wallet_id' => 6, + 'access_key' => 'wakr_bob', + 'json_data' => null + ], + [ + 'id' => null, + 'created_at' =>1576066208, + 'updated_at' =>1576066208, + 'user_id' => 147, + 'wallet_id' => 6, + 'access_key' => 'waki_bob', + 'json_data' => null + ], + [ + 'id' => null, + 'created_at' =>1576066208, + 'updated_at' =>1576066208, + 'user_id' => 147, + 'wallet_id' => 6, + 'access_key' => 'waklw_bob', + 'json_data' => null + ], + [ + 'id' => null, + 'created_at' =>1576066208, + 'updated_at' =>1576066208, + 'user_id' => 147, + 'wallet_id' => 7, + 'access_key' => 'waka_alice', + 'json_data' => null + ], + [ + 'id' => null, + 'created_at' =>1576066208, + 'updated_at' =>1576066208, + 'user_id' => 147, + 'wallet_id' => 7, + 'access_key' => 'wakr_alice', + 'json_data' => null + ], + [ + 'id' => null, + 'created_at' =>1576066208, + 'updated_at' =>1576066208, + 'user_id' => 147, + 'wallet_id' => 7, + 'access_key' => 'waki_alice', + 'json_data' => null + ], + [ + 'id' => null, + 'created_at' =>1576066208, + 'updated_at' =>1576066208, + 'user_id' => 147, + 'wallet_id' => 7, + 'access_key' => 'waklw_alice', + 'json_data' => null + ], + [ + 'id' => null, + 'created_at' =>1576066208, + 'updated_at' =>1576066208, + 'user_id' => 147, + 'wallet_id' => 8, + 'access_key' => 'waka_carolTransactions', + 'json_data' => null + ], + [ + 'id' => null, + 'created_at' =>1576066208, + 'updated_at' =>1576066208, + 'user_id' => 147, + 'wallet_id' => 8, + 'access_key' => 'wakr_carolTransactions', + 'json_data' => null + ], + [ + 'id' => null, + 'created_at' =>1576066208, + 'updated_at' =>1576066208, + 'user_id' => 147, + 'wallet_id' => 8, + 'access_key' => 'waki_carolTransactions', + 'json_data' => null + ], + [ + 'id' => null, + 'created_at' =>1576066208, + 'updated_at' =>1576066208, + 'user_id' => 147, + 'wallet_id' => 8, + 'access_key' => 'waklw_carolTransactions', + 'json_data' => null + ], + [ + 'id' => null, + 'created_at' =>1576066208, + 'updated_at' =>1576066208, + 'user_id' => 147, + 'wallet_id' => 9, + 'access_key' => 'waka_carolTransfer1', + 'json_data' => null + ], + [ + 'id' => null, + 'created_at' =>1576066208, + 'updated_at' =>1576066208, + 'user_id' => 147, + 'wallet_id' => 9, + 'access_key' => 'wakr_carolTransfer1', + 'json_data' => null + ], + [ + 'id' => null, + 'created_at' =>1576066208, + 'updated_at' =>1576066208, + 'user_id' => 147, + 'wallet_id' => 9, + 'access_key' => 'waki_carolTransfer1', + 'json_data' => null + ], + [ + 'id' => null, + 'created_at' =>1576066208, + 'updated_at' =>1576066208, + 'user_id' => 147, + 'wallet_id' => 9, + 'access_key' => 'waklw_carolTransfer1', + 'json_data' => null + ], + [ + 'id' => null, + 'created_at' =>1576066208, + 'updated_at' =>1576066208, + 'user_id' => 147, + 'wallet_id' => 10, + 'access_key' => 'waka_aliceLnurlWithdraw', + 'json_data' => null + ], + [ + 'id' => null, + 'created_at' =>1576066208, + 'updated_at' =>1576066208, + 'user_id' => 147, + 'wallet_id' => 10, + 'access_key' => 'wakr_aliceLnurlWithdraw', + 'json_data' => null + ], + [ + 'id' => null, + 'created_at' =>1576066208, + 'updated_at' =>1576066208, + 'user_id' => 147, + 'wallet_id' => 10, + 'access_key' => 'waki_aliceLnurlWithdraw', + 'json_data' => null + ], + [ + 'id' => null, + 'created_at' =>1576066208, + 'updated_at' =>1576066208, + 'user_id' => 147, + 'wallet_id' => 10, + 'access_key' => 'waklw_aliceLnurlWithdraw', + 'json_data' => null + ], + [ + 'id' => null, + 'created_at' =>1576066208, + 'updated_at' =>1576066208, + 'user_id' => 147, + 'wallet_id' => 11, + 'access_key' => 'waklp_aliceLnurlPay', + 'json_data' => null + ], + [ + 'id' => null, + 'created_at' =>1576066208, + 'updated_at' =>1576066208, + 'user_id' => 147, + 'wallet_id' => 11, + 'access_key' => 'waka_aliceLnurlPay', + 'json_data' => null + ], + [ + 'id' => null, + 'created_at' =>1576066208, + 'updated_at' =>1576066208, + 'user_id' => 147, + 'wallet_id' => 13, + 'access_key' => 'waka_carolTransfer2', + 'json_data' => null + ], +]; + diff --git a/tests/_data/wallet.php b/tests/_data/wallet.php new file mode 100644 index 00000000..be2c6a6d --- /dev/null +++ b/tests/_data/wallet.php @@ -0,0 +1,114 @@ +5, + 'created_at'=>1576066208, + 'updated_at'=>1576150264, + 'user_id'=>147, + 'user_label'=>'test carol', + 'balance'=>117, + 'ln_node_id'=>'lnod_carol', + 'external_hash'=>'wal_LWAcZwCeDsezSfFe', + 'json_data'=>"{\"ott\": {\"YVI6TiqQuq75MG9fUmxdHuwHtzmC9\": \"YVI6TiqQuq75MG9fUmxdHuwHtzmC9\", \"bBZyx1Ti2FEZm4picXIWj2OJ01n6Ktf\": \"bBZyx1Ti2FEZm4picXIWj2OJ01n6Ktf\"}}", + 'status_type_id'=>200, + ], + [ + 'id'=>6, + 'created_at'=>1576066208, + 'updated_at'=>1576150264, + 'user_id'=>147, + 'user_label'=>'wallet 6 bob', + 'balance'=>100, + 'ln_node_id'=>'lnod_bob', + 'external_hash'=>'LWAcasdfOt6i93WFh', + 'json_data'=>"{\"ott\": {\"YVI6TiqQuq75MG9fUmxdHuwHtzmC9\": \"YVI6TiqQuq75MG9fUmxdHuwHtzmC9\", \"bBZyx1Ti2FEZm4picXIWj2OJ01n6Ktf\": \"bBZyx1Ti2FEZm4picXIWj2OJ01n6Ktf\"}}", + 'status_type_id'=>200, + ], + [ + 'id'=>7, + 'created_at'=>1576066208, + 'updated_at'=>1576150264, + 'user_id'=>147, + 'user_label'=>'wallet 7 alice', + 'balance'=>100, + 'ln_node_id'=>'lnod_alice', + 'external_hash'=>'wal_KkMmfMmsksss', + 'json_data'=>"", + 'status_type_id'=>200, + ], + [ + 'id'=>8, + 'created_at'=>1576066208, + 'updated_at'=>1576150264, + 'user_id'=>147, + 'user_label'=>'test carol transactions', + 'balance'=>117, + 'ln_node_id'=>'lnod_carol', + 'external_hash'=>'wal_testCarolTransactions', + 'json_data'=>"", + 'status_type_id'=>200, + ], + [ + 'id'=>9, + 'created_at'=>1576066208, + 'updated_at'=>1576150264, + 'user_id'=>147, + 'user_label'=>'carol transfer', + 'balance'=>0, + 'ln_node_id'=>'lnod_carol', + 'external_hash'=>'wal_carolTransfer1', + 'json_data'=>"", + 'status_type_id'=>200, + ], + [ + 'id'=>10, + 'created_at'=>1576066208, + 'updated_at'=>1576150264, + 'user_id'=>147, + 'user_label'=>'alice lnurl withdraw', + 'balance'=>0, + 'ln_node_id'=>'lnod_alice', + 'external_hash'=>'wal_aliceLnurlWithdraw', + 'json_data'=>"", + 'status_type_id'=>200, + ], + [ + 'id'=>11, + 'created_at'=>1576066208, + 'updated_at'=>1576150264, + 'user_id'=>147, + 'user_label'=>'alice lnurl pay', + 'balance'=>0, + 'ln_node_id'=>'lnod_alice', + 'external_hash'=>'wal_aliceLnurlPay', + 'json_data'=>"", + 'status_type_id'=>200, + ], + [ + 'id'=>12, + 'created_at'=>1576066208, + 'updated_at'=>1576150264, + 'user_id'=>147, + 'user_label'=>'rollup compress test wallet', + 'balance'=>0, + 'ln_node_id'=>'lnod_alice', + 'external_hash'=>'wal_aliceRollUpCompress', + 'json_data'=>"", + 'status_type_id'=>200, + ], + [ + 'id'=>13, + 'created_at'=>1576066208, + 'updated_at'=>1576150264, + 'user_id'=>147, + 'user_label'=>'carol transfer 2', + 'balance'=>20, + 'ln_node_id'=>'lnod_carol', + 'external_hash'=>'wal_carolTransfer2', + 'json_data'=>"", + 'status_type_id'=>200, + ], +]; diff --git a/tests/_data/wallet_lnurlpay.php b/tests/_data/wallet_lnurlpay.php new file mode 100644 index 00000000..a9712bb9 --- /dev/null +++ b/tests/_data/wallet_lnurlpay.php @@ -0,0 +1,99 @@ +5, + 'created_at'=>1576066208, + 'updated_at'=>1576150264, + 'user_id'=>147, + 'wallet_id'=>11, + 'user_label'=>'base lnurl-pay link', + 'status_type_id' => 450, + 'external_hash'=>'lnurlp_0YM18Nt3po8SUmIOKE', + 'json_data'=>"", + 'lnurl_encoded'=>"LNURL1DP68GUP69UHKCMNSV9UJUMR0VDSKCW3CXYCNZTMKXYHHWCTVD3JHGTMHV94KCUZLFDVYUUJJWANRS3TDD3E4WS2TF9TKU7NXDG6XUTMVDE6HYMRS9AKXUATJD3C97VZEF5CNSNN5XDCX7WZN24K5JN6TG5AUYHWT", + 'lnurl_decoded'=>"http://192.168.69.11/index-test.php/v1/wallet/waklp_aliceLnurlPay/lnurlp/lnurlp_0YM18Nt3po8SUmIOKE", + 'lnurlp_minSendable_msat'=>1000, + 'lnurlp_maxSendable_msat'=>10000000, + 'lnurlp_short_desc'=>'LNURL PAY (via LNPay.co)', + 'lnurlp_successAction'=>NULL, + 'lnurlp_identifier'=>NULL, + 'lnurlp_commentAllowed'=>null, + 'lnurlp_success_message'=>NULL, + 'lnurlp_success_url'=>NULL, + 'lnurlp_image_base64'=>NULL, + 'lnurlp_metadata'=>'[[\"text\\/plain\",\"LNURL PAY (via LNPay.co)\"]]' + ], + [ + 'id'=>7, + 'created_at'=>1576066208, + 'updated_at'=>1576150264, + 'user_id'=>147, + 'wallet_id'=>11, + 'user_label'=>'base lnurl-pay link', + 'status_type_id' => 450, + 'external_hash'=>'lnurlp_commentAllowed', + 'json_data'=>"", + 'lnurl_encoded'=>"lnurl1dp68gup69uhnzwfj9ccnvwpwxcujuvf39a5kuer90qkhgetnwsh8q6rs9amrztmhv9kxcet59amkz6mvwp0kzmrfvdj5cmn4wfk9qcte9akxuatjd3cz7mrww4excuzlvdhk6mt9de6yzmrvdamk2eq44lz39", + 'lnurl_decoded'=>"http://192.168.69.11/index-test.php/v1/wallet/waklp_aliceLnurlPay/lnurlp/lnurlp_commentAllowed", + 'lnurlp_minSendable_msat'=>1000, + 'lnurlp_maxSendable_msat'=>10000000, + 'lnurlp_short_desc'=>'LNURL PAY (via LNPay.co)', + 'lnurlp_successAction'=>NULL, + 'lnurlp_identifier'=>NULL, + 'lnurlp_commentAllowed'=>10, + 'lnurlp_success_message'=>NULL, + 'lnurlp_success_url'=>NULL, + 'lnurlp_image_base64'=>NULL, + 'lnurlp_metadata'=>'[[\"text\\/plain\",\"LNURL PAY (via LNPay.co)\"]]' + ], + [ + 'id'=>6, + 'created_at'=>1576066208, + 'updated_at'=>1576150264, + 'user_id'=>147, + 'wallet_id'=>11, + 'user_label'=>'base lnurl-pay link', + 'status_type_id' => 455, + 'external_hash'=>'lnurlp_thisisinactive', + 'json_data'=>"", + 'lnurl_encoded'=>"LNURL1DP68GUP69UHKCMNSV9UJUMR0VDSKCW3CXYCNZTMKXYHHWCTVD3JHGTMHV94KCUZLFDVYUUJJWANRS3TDD3E4WS2TF9TKU7NXDG6XUTMVDE6HYMRS9AKXUATJD3C97VZEF5CNSNN5XDCX7WZN24K5JN6TG5AUYHWT", + 'lnurl_decoded'=>"http://192.168.69.11/index-test.php/v1/wallet/waklp_KXNrRwf8EmlsWAKIWnzfj4n/lnurlp/lnurlp_0YM18Nt3po8SUmIOKE", + 'lnurlp_minSendable_msat'=>1000, + 'lnurlp_maxSendable_msat'=>10000000, + 'lnurlp_short_desc'=>'LNURL PAY (via LNPay.co)', + 'lnurlp_successAction'=>NULL, + 'lnurlp_identifier'=>NULL, + 'lnurlp_commentAllowed'=>null, + 'lnurlp_success_message'=>NULL, + 'lnurlp_success_url'=>NULL, + 'lnurlp_image_base64'=>NULL, + 'lnurlp_metadata'=>'[[\"text\\/plain\",\"LNURL PAY (via LNPay.co)\"]]' + ], + [ + 'id'=>10, + 'created_at'=>1576066208, + 'updated_at'=>1576150264, + 'user_id'=>147, + 'wallet_id'=>11, + 'user_label'=>'base lnurl-pay link', + 'status_type_id' => 450, + 'external_hash'=>'lnurlp_thisiscustomdomain', + 'json_data'=>"", + 'custy_domain_id'=>5, + 'lnurl_encoded'=>"LNURL1DP68GUP69UHKCMNSV9UJUMR0VDSKCW3CXYCNZTMKXYHHWCTVD3JHGTMHV94KCUZLFDVYUUJJWANRS3TDD3E4WS2TF9TKU7NXDG6XUTMVDE6HYMRS9AKXUATJD3C97VZEF5CNSNN5XDCX7WZN24K5JN6TG5AUYHWT", + 'lnurl_decoded'=>"http://192.168.69.11/index-test.php/v1/wallet/waklp_KXNrRwf8EmlsWAKIWnzfj4n/lnurlp/lnurlp_0YM18Nt3po8SUmIOKE", + 'lnurlp_minSendable_msat'=>69000, + 'lnurlp_maxSendable_msat'=>10000000, + 'lnurlp_short_desc'=>'LNURL PAY (via LNPay.co)', + 'lnurlp_successAction'=>NULL, + 'lnurlp_identifier'=>'testerUser', + 'lnurlp_commentAllowed'=>null, + 'lnurlp_success_message'=>NULL, + 'lnurlp_success_url'=>NULL, + 'lnurlp_image_base64'=>NULL, + 'lnurlp_metadata'=>'[[\"text\\/plain\",\"LNURL PAY (via LNPay.co)\"]]' + ] +]; diff --git a/tests/_data/wallet_transaction.php b/tests/_data/wallet_transaction.php new file mode 100644 index 00000000..bb97eb98 --- /dev/null +++ b/tests/_data/wallet_transaction.php @@ -0,0 +1,149 @@ +4, + 'created_at'=>1627498299, + 'updated_at'=>1627498299, + 'user_id'=>147, + 'wallet_id'=>8, + 'wtx_type_id'=>30, + 'num_satoshis'=>100000, + 'ln_tx_id'=>null, + 'user_label'=>'Transfer in to Carol', + 'external_hash'=>'wtx_TransferIntoCarol', + 'json_data'=>null, + ], + [ //transfer out of carol + 'id'=>5, + 'created_at'=>1627498299, + 'updated_at'=>1627498299, + 'user_id'=>147, + 'wallet_id'=>8, + 'wtx_type_id'=>40, + 'num_satoshis'=>100, + 'ln_tx_id'=>null, + 'user_label'=>'Transfer out of Carol', + 'external_hash'=>'wtx_TransferOutOfCarol', + 'json_data'=>null, + ], + [ //carol receives payment from invoice + 'id'=>6, + 'created_at'=>1627498299, + 'updated_at'=>1627498299, + 'user_id'=>147, + 'wallet_id'=>8, + 'wtx_type_id'=>10, + 'num_satoshis'=>500, + 'ln_tx_id'=>20, + 'user_label'=>'Deposit into carol', + 'external_hash'=>'wtx_S0irddtjKlF0aZCN1FIcGOa7', + 'json_data'=>'{"wallet_id": "wal_testCarolTransactions"}', + ], + [ //transfer in to bob + 'id'=>7, + 'created_at'=>1627498299, + 'updated_at'=>1627498299, + 'user_id'=>147, + 'wallet_id'=>6, + 'wtx_type_id'=>30, + 'num_satoshis'=>1000, + 'ln_tx_id'=>null, + 'user_label'=>'Transfer in to Bob', + 'external_hash'=>'wtx_TransferIntoBob', + 'json_data'=>null, + ], + [ //transfer in to alice + 'id'=>8, + 'created_at'=>1627498299, + 'updated_at'=>1627498299, + 'user_id'=>147, + 'wallet_id'=>10, + 'wtx_type_id'=>30, + 'num_satoshis'=>10000, + 'ln_tx_id'=>null, + 'user_label'=>'Transfer in to Alice lnurl', + 'external_hash'=>'wtx_TransferIntoAliceLnurlWithdraw', + 'json_data'=>null, + ], + [ //debit transaction + 'id'=>9, + 'created_at'=>1627498299, + 'updated_at'=>1627498299, + 'user_id'=>147, + 'wallet_id'=>12, + 'wtx_type_id'=>30, + 'num_satoshis'=>-100, + 'ln_tx_id'=>null, + 'user_label'=>'debit transaction', + 'external_hash'=>'wtx_debitTransaction1', + 'json_data'=>null, + ], + [ //debit transaction + 'id'=>10, + 'created_at'=>1627498299, + 'updated_at'=>1627498299, + 'user_id'=>147, + 'wallet_id'=>12, + 'wtx_type_id'=>30, + 'num_satoshis'=>-100, + 'ln_tx_id'=>null, + 'user_label'=>'debit transaction', + 'external_hash'=>'wtx_debitTransaction2', + 'json_data'=>null, + ], + [ //debit transaction + 'id'=>11, + 'created_at'=>1627498299, + 'updated_at'=>1627498299, + 'user_id'=>147, + 'wallet_id'=>12, + 'wtx_type_id'=>30, + 'num_satoshis'=>-100, + 'ln_tx_id'=>null, + 'user_label'=>'debit transaction', + 'external_hash'=>'wtx_debitTransaction3', + 'json_data'=>null, + ], + [ //credit transaction + 'id'=>12, + 'created_at'=>1627498299, + 'updated_at'=>1627498299, + 'user_id'=>147, + 'wallet_id'=>12, + 'wtx_type_id'=>30, + 'num_satoshis'=>200, + 'ln_tx_id'=>null, + 'user_label'=>'credit transaction', + 'external_hash'=>'wtx_creditTransaction3', + 'json_data'=>null, + ], + [ //credit transaction + 'id'=>13, + 'created_at'=>1627498299, + 'updated_at'=>1627498299, + 'user_id'=>147, + 'wallet_id'=>12, + 'wtx_type_id'=>30, + 'num_satoshis'=>200, + 'ln_tx_id'=>null, + 'user_label'=>'credit transaction', + 'external_hash'=>'wtx_creditTransaction4', + 'json_data'=>null, + ], + [ //transfer in to carol + 'id'=>14, + 'created_at'=>1627498299, + 'updated_at'=>1627498299, + 'user_id'=>147, + 'wallet_id'=>13, + 'wtx_type_id'=>30, + 'num_satoshis'=>25, + 'ln_tx_id'=>null, + 'user_label'=>'Transfer in to Carol2', + 'external_hash'=>'wtx_TransferIntoCarol2', + 'json_data'=>null, + ], +]; diff --git a/tests/_data/wallet_transaction_type.php b/tests/_data/wallet_transaction_type.php new file mode 100644 index 00000000..f3fc4d3f --- /dev/null +++ b/tests/_data/wallet_transaction_type.php @@ -0,0 +1,49 @@ +10, + 'layer'=>'ln', + 'name'=>'ln_deposit', + 'display_name'=>'LN Deposit' + ], + [ + 'id'=>20, + 'layer'=>'ln', + 'name'=>'ln_withdrawal', + 'display_name'=>'LN Withdrawal' + ], + [ + 'id'=>30, + 'layer'=>'ln', + 'name'=>'ln_transfer_in', + 'display_name'=>'LN Transfer In' + ], + [ + 'id'=>40, + 'layer'=>'ln', + 'name'=>'ln_transfer_out', + 'display_name'=>'LN Transfer Out' + ], + [ + 'id'=>70, + 'layer'=>'ln', + 'name'=>'network_fee', + 'display_name'=>'LN Routing Fees' + ], + [ + 'id'=>75, + 'layer'=>'ln', + 'name'=>'service_fee', + 'display_name'=>'Service Fee' + ], + [ + 'id'=>79, + 'layer'=>'ln', + 'name'=>'fee_balance_payment', + 'display_name'=>'Fee Balance Payment' + ], + + ]; diff --git a/tests/_output/.gitignore b/tests/_output/.gitignore new file mode 100755 index 00000000..c96a04f0 --- /dev/null +++ b/tests/_output/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore \ No newline at end of file diff --git a/tests/_support/AcceptanceTester.php b/tests/_support/AcceptanceTester.php new file mode 100644 index 00000000..4c7dcbb6 --- /dev/null +++ b/tests/_support/AcceptanceTester.php @@ -0,0 +1,26 @@ +amOnPage(Url::toRoute('/home/login')); + $I->see('Log in to âš¡LNPay'); + } + + public function ensureThatSignupPage(AcceptanceTester $I) + { + $I->amOnPage(Url::toRoute('/home/signup')); + $I->see('Create your âš¡LNPay Account'); + } +} diff --git a/tests/acceptance/_bootstrap.php b/tests/acceptance/_bootstrap.php new file mode 100644 index 00000000..b3d9bbc7 --- /dev/null +++ b/tests/acceptance/_bootstrap.php @@ -0,0 +1 @@ + [ + 'class' => UserFixture::class, + ], + 'user_access_keys' => [ + 'class' => \lnpay\fixtures\UserAccessKeyFixture::class, + ] + ]; + } + + public function _before(ApiTester $I) + { + } + + public function _after(ApiTester $I) + { + } + + public function basicAuthFail(\ApiTester $I) + { + $I->amHttpAuthenticated('sak_fail', ''); + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->sendGET('/v1/user/view'); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::UNAUTHORIZED); + $I->seeResponseIsJson(); + $I->seeResponseContains('"name":"Unauthorized"'); + } + + public function basicAuthSuccess(\ApiTester $I) + { + $I->amHttpAuthenticated('sak_KkKkKkKkKkneieivTI05Fm3YzTza4N', ''); + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->sendGET('/v1/user/view'); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::OK); + $I->seeResponseIsJson(); + $I->seeResponseContains('"id":"usr_XIXkpKKKSJmDqW"'); + } + + public function queryParamAuthFail(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->sendGET('/v1/user/view?access-token=sak_fail'); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::UNAUTHORIZED); + $I->seeResponseIsJson(); + $I->seeResponseContains('"name":"Unauthorized"'); + } + + public function queryParamAuthSuccess(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->sendGET('/v1/user/view?access-token=sak_KkKkKkKkKkneieivTI05Fm3YzTza4N'); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::OK); + $I->seeResponseIsJson(); + $I->seeResponseContains('"id":"usr_XIXkpKKKSJmDqW"'); + } + + public function headerAuthFail(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'sak_fail'); + $I->sendGET('/v1/user/view'); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::UNAUTHORIZED); + $I->seeResponseIsJson(); + $I->seeResponseContains('"name":"Unauthorized"'); + } + + public function headerAuthSuccess(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'sak_KkKkKkKkKkneieivTI05Fm3YzTza4N'); + $I->sendGET('/v1/user/view'); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::OK); + $I->seeResponseIsJson(); + $I->seeResponseContains('"id":"usr_XIXkpKKKSJmDqW"'); + } +} diff --git a/tests/api/_bootstrap.php b/tests/api/_bootstrap.php new file mode 100644 index 00000000..b3d9bbc7 --- /dev/null +++ b/tests/api/_bootstrap.php @@ -0,0 +1 @@ + [ + 'class' => UserFixture::class, + ], + 'wallets' => [ + 'class' => \lnpay\fixtures\WalletFixture::class, + ], + 'lntx' => [ + 'class' => \lnpay\fixtures\LnTxFixture::class, + ], + 'user_access_key' => [ + 'class' => \lnpay\fixtures\UserAccessKeyFixture::class, + ] + ]; + } + + public function _before(ApiTester $I) + { + } + + public function _after(ApiTester $I) + { + } + + public function lnTxGetSuccessBySak(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'sak_KkKkKkKkKkneieivTI05Fm3YzTza4N'); + $I->sendGET('/v1/lntx/lntx_vfyNo0VRuIzkEew6PladBwy'); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::OK); + $I->seeResponseIsJson(); + $I->seeResponseContains('"id":"lntx_vfyNo0VRuIzkEew6PladBwy"'); + } + + public function lnTxGetSuccessByPak(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'pak_HgiUO4kskfneieivTI05Fm3YzTza4N'); + $I->sendGET('/v1/lntx/lntx_vfyNo0VRuIzkEew6PladBwy'); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::OK); + $I->seeResponseIsJson(); + $I->seeResponseContains('"id":"lntx_vfyNo0VRuIzkEew6PladBwy"'); + } + + public function lnTxGetFailWrongUser(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'pak_HgiUO4kskfneieivTI05Fm3YzTza4N'); + $I->sendGET('/v1/lntx/lntx_vfyNo0VRKKKKKKK'); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::UNAUTHORIZED); + $I->seeResponseIsJson(); + } + + public function lnTxGetFailInvalid(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'pak_HgiUO4kskfneieivTI05Fm3YzTza4N'); + $I->sendGET('/v1/lntx/lntx_vfyNo0'); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::UNAUTHORIZED); + $I->seeResponseIsJson(); + } + + +} diff --git a/tests/api/lnurlpay/LnurlpayCallbackProcessCest.php b/tests/api/lnurlpay/LnurlpayCallbackProcessCest.php new file mode 100644 index 00000000..ac0d3116 --- /dev/null +++ b/tests/api/lnurlpay/LnurlpayCallbackProcessCest.php @@ -0,0 +1,97 @@ + [ + 'class' => \lnpay\fixtures\UserFixture::class, + ], + 'wallets' => [ + 'class' => \lnpay\fixtures\WalletFixture::class, + ], + 'lntx' => [ + 'class' => \lnpay\fixtures\LnTxFixture::class, + ], + 'user_access_key' => [ + 'class' => \lnpay\fixtures\UserAccessKeyFixture::class, + ], + 'wallet_lnurlpay' => [ + 'class' => \lnpay\fixtures\WalletLnurlpayFixture::class, + ] + ]; + } + + public function _before(ApiTester $I) + { + } + + public function _after(ApiTester $I) + { + } + + //Test basic lnurl-pay processing + public function getLnurlPayPublicProcessFailInvalidLnurlpId(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->sendGET('/v1/wallet/waklp_aliceLnurlPay/lnurlp/lnurlp_thisisinvalid'); + $I->seeResponseIsJson(); + $I->seeResponseContains('"reason":"Wallet or lnurlpay link is not valid or active"'); + } + + //Test basic lnurl-pay processing + public function getLnurlPayPublicProcessFailInactiveLnurlpId(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->sendGET('/v1/wallet/waklp_aliceLnurlPay/lnurlp/lnurlp_thisisinactive'); + $I->seeResponseIsJson(); + $I->seeResponseContains('"reason":"Wallet or lnurlpay link is not valid or active"'); + } + + public function getLnurlPayPublicProcessFailMismatchWalletAndLnurlpayLink(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->sendGET('/v1/wallet/waklw_aliceLnurlWithdraw/lnurlp/lnurlp_0YM18Nt3po8SUmIOKE'); + $I->seeResponseIsJson(); + $I->seeResponseContains('"reason":"Wallet or lnurlpay link is not valid or active"'); + } + + public function getLnurlPayPublicProcessFailWalletNotfound(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->sendGET('/v1/wallet/waklp_aliceLnurlWithdraw/lnurlp/lnurlp_0YM18Nt3po8SUmIOKE'); + $I->seeResponseIsJson(); + $I->seeResponseContains('"reason":"Wallet not found'); + } + + public function getLnurlPayPublicProcessSucceed(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->sendGET('/v1/wallet/waklp_aliceLnurlPay/lnurlp/lnurlp_0YM18Nt3po8SUmIOKE'); + $I->seeResponseIsJson(); + $I->seeResponseContains('"minSendable":1000'); + } + + //test callback where invoice is generated + public function getLnurlPayPublicCallbackFailInvalidSatoshiAmount(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->sendGET('/v1/wallet/waklp_aliceLnurlPay/lnurlp/lnurlp_0YM18Nt3po8SUmIOKE?amount=10'); + $I->seeResponseIsJson(); + $I->seeResponseContains('sat is not within'); + } + /* + public function getLnurlPayPublicCallbackSucceed(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->sendGET('/v1/wallet/waklp_aliceLnurlPay/lnurlp/lnurlp_0YM18Nt3po8SUmIOKE?amount=1000'); + $I->seeResponseIsJson(); + $I->seeResponseContains('"pr":'); + }*/ +} diff --git a/tests/api/lnurlpay/LnurlpayCest.php b/tests/api/lnurlpay/LnurlpayCest.php new file mode 100644 index 00000000..987ae05a --- /dev/null +++ b/tests/api/lnurlpay/LnurlpayCest.php @@ -0,0 +1,214 @@ + [ + 'class' => \lnpay\fixtures\UserFixture::class, + ], + 'wallets' => [ + 'class' => \lnpay\fixtures\WalletFixture::class, + ], + 'custy_domain' => [ + 'class' => \lnpay\fixtures\CustyDomainFixture::class, + ], + 'lntx' => [ + 'class' => \lnpay\fixtures\LnTxFixture::class, + ], + 'user_access_key' => [ + 'class' => \lnpay\fixtures\UserAccessKeyFixture::class, + ], + 'wallet_lnurlpay' => [ + 'class' => \lnpay\fixtures\WalletLnurlpayFixture::class, + ], + 'wallet_transaction' => [ + 'class' => \lnpay\fixtures\WalletTransactionFixture::class, + ] + ]; + } + + public function _before(ApiTester $I) + { + } + + public function _after(ApiTester $I) + { + } + + public function getLnAddressProbeSuccess(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'pak_HgiUO4kskfneieivTI05Fm3YzTza4N'); + $I->sendGET('/v1/lnurlp/probe/lnurlp_0YM18Nt3po8SUmIOKE@localhost'); + $I->seeResponseIsJson(); + $I->seeResponseContains('"metadata"'); + $I->seeResponseContains('"maxSendable"'); + } + + public function getLnAddressProbeFail(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'pak_HgiUO4kskfneieivTI05Fm3YzTza4N'); + $I->sendGET('/v1/lnurlp/probe/lnurlp_0YM18Nt3po8INVALID@localhost'); + $I->seeResponseCodeIs(500); + } + + public function getLnurlpayProbeSuccess(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'pak_HgiUO4kskfneieivTI05Fm3YzTza4N'); + $I->sendGET('/v1/lnurlp/probe/lnurl1dp68gup69uhnzwfj9ccnvwpwxcujuvf39a5kuer90qkhgetnwsh8q6rs9amrztmhv9kxcet59amkz6mvwp0kzmrfvdj5cmn4wfk9qcte9akxuatjd3cz7mrww4excuzlxpv56vfcfe6rxur08pf42m2ffa9525qq4ry'); + $I->seeResponseIsJson(); + $I->seeResponseContains('"metadata"'); + $I->seeResponseContains('"maxSendable"'); + } + + public function getViewLnurlpayId(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'pak_HgiUO4kskfneieivTI05Fm3YzTza4N'); + $I->sendGET('/v1/lnurlp/lnurlp_0YM18Nt3po8SUmIOKE'); + $I->seeResponseIsJson(); + $I->seeResponseContains('"lnurlp_0YM18Nt3po8SUmIOKE"'); + } + + public function getLnurlpayProbeFail(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'pak_HgiUO4kskfneieivTI05Fm3YzTza4N'); + $I->sendGET('/v1/lnurlp/probe/LNUR1DP68GUP69UHNZWFJ9CCNVWPWXCUJUVF39AMRZTMHV9KXCET59AMKZ6MVWP0K54EHWEPHQSNEFF6NZ6JTW4R9S4PN2454Y7JZXCHKCMN4WFK8QTMVDE6HYMRSTAENJ6MD2CMNYDZCW3D8VENCVD54S3SH8JMLX'); + $I->seeResponseIsJson(); + $I->seeResponseContains('Exception'); + + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'pak_HgiUO4kskfneieivTI05Fm3YzTza4N'); + $I->sendGET('/v1/lnurlp/probe/LNURL1DP68GUP69UHKCMNSV9UJUMR0VDSKCW3CXYCNZTMKXYHHWCTVD3JHGTMHV94KCUZLD439Y36XG4952ARFWD557AMSGFXXY6R4VFPY5AP0D3H82UNVWQHKCMN4WFK8QH60FPNYXJ250FZHSJJPGET5G7ZKW4HS4PHG32'); + $I->seeResponseIsJson(); + $I->seeResponseContains('Exception'); + } + + public function payLnurlpayFailWithdrawPermission(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'pak_HgiUO4kskfneieivTI05Fm3YzTza4N'); + $I->sendPOST('/v1/wallet/waklp_aliceLnurlPay/lnurlp/pay',[ + 'amt_msat'=>100000, + 'lnurlpay_encoded'=>'lnurl1dp68gup69uhnzwfj9ccnvwpwxcujuvf39a5kuer90qkhgetnwsh8q6rs9amrztmhv9kxcet59amkz6mvwp0kzmrfvdj5cmn4wfk9qcte9akxuatjd3cz7mrww4excuzlxpv56vfcfe6rxur08pf42m2ffa9525qq4ry' + ]); + $I->seeResponseIsJson(); + $I->seeResponseCodeIs(401); + } + + public function payLnurlpayFailAmountBelowMin(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'pak_HgiUO4kskfneieivTI05Fm3YzTza4N'); + $I->sendPOST('/v1/wallet/waklw_aliceLnurlWithdraw/lnurlp/pay',[ + 'amt_msat'=>100000000, + 'lnurlpay_encoded'=>'lnurl1dp68gup69uhnzwfj9ccnvwpwxcujuvf39a5kuer90qkhgetnwsh8q6rs9amrztmhv9kxcet59amkz6mvwp0kzmrfvdj5cmn4wfk9qcte9akxuatjd3cz7mrww4excuzlxpv56vfcfe6rxur08pf42m2ffa9525qq4ry' + ]); + $I->seeResponseIsJson(); + $I->seeResponseContains('cannot accept more'); + } + + public function payLnurlpayFailAmountAboveMax(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'pak_HgiUO4kskfneieivTI05Fm3YzTza4N'); + $I->sendPOST('/v1/wallet/waklw_aliceLnurlWithdraw/lnurlp/pay',[ + 'amt_msat'=>122, + 'lnurlpay_encoded'=>'lnurl1dp68gup69uhnzwfj9ccnvwpwxcujuvf39a5kuer90qkhgetnwsh8q6rs9amrztmhv9kxcet59amkz6mvwp0kzmrfvdj5cmn4wfk9qcte9akxuatjd3cz7mrww4excuzlxpv56vfcfe6rxur08pf42m2ffa9525qq4ry' + ]); + $I->seeResponseIsJson(); + $I->seeResponseContains('cannot accept less'); + } + + public function payLnurlpayCommentTooLong(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'pak_HgiUO4kskfneieivTI05Fm3YzTza4N'); + $I->sendPOST('/v1/wallet/waklw_aliceLnurlWithdraw/lnurlp/pay',[ + 'amt_msat'=>1202, + 'lnurlpay_encoded'=>'lnurl1dp68gup69uhnzwfj9ccnvwpwxcujuvf39a5kuer90qkhgetnwsh8q6rs9amrztmhv9kxcet59amkz6mvwp0kzmrfvdj5cmn4wfk9qcte9akxuatjd3cz7mrww4excuzlvdhk6mt9de6yzmrvdamk2eq44lz39', + 'comment'=>'commentcommentcomment' + ]); + $I->seeResponseIsJson(); + $I->seeResponseContains('Comment length is too long'); + } + + public function CreateLnurlPaySuccess(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'pak_HgiUO4kskfneieivTI05Fm3YzTza4N'); + $I->sendPOST('/v1/wallet/waka_aliceLnurlPay/lnurlp',[ + 'lnurlp_minSendable_msat'=>1202, + 'lnurlp_maxSendable_msat'=>10000, + 'identifier'=>'username' + ]); + $I->seeResponseIsJson(); + $I->seeResponseContains('wallet_id'); + } + + public function UpdateLnurlpaySuccessDomainName(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'pak_HgiUO4kskfneieivTI05Fm3YzTza4N'); + $I->sendPOST('/v1/wallet/waka_aliceLnurlPay/lnurlp',[ + 'custy_domain_id'=>'cdom_123' + ]); + $I->seeResponseIsJson(); + $I->seeResponseContains('"domain_name":"lnpay.local"'); + } + + public function UpdateLnurlpaySuccessDomainNull(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'pak_HgiUO4kskfneieivTI05Fm3YzTza4N'); + $I->sendPOST('/v1/wallet/waka_aliceLnurlPay/lnurlp',[ + 'custy_domain_id'=>NULL + ]); + $I->seeResponseIsJson(); + $I->seeResponseContains('"custyDomain":null'); + } + + public function UpdateLnurlpayFailDomainName(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'pak_HgiUO4kskfneieivTI05Fm3YzTza4N'); + $I->sendPOST('/v1/wallet/waka_aliceLnurlPay/lnurlp',[ + 'custy_domain_id'=>6 + ]); + $I->seeResponseCodeIs(400); + } + + + public function CreateLnurlPayFail(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'pak_HgiUO4kskfneieivTI05Fm3YzTza4N'); + $I->sendPOST('/v1/wallet/waka_aliceLnurlPay/lnurlp',[ + 'lnurlp_minSendable_msat'=>11, + 'lnurlp_maxSendable_msat'=>10000, + 'identifier'=>'username', + ]); + $I->seeResponseIsJson(); + $I->seeResponseCodeIs(400); + } + + public function LnurlpayCustyDomainNameRedirect(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->sendGET('/.well-known/cdom_123/lnurlp/testerUser'); + $I->seeResponseIsJson(); + $I->seeResponseContains('"minSendable":69000'); + } + + +} diff --git a/tests/api/lnurlwithdraw/DisposableLnurlWithdrawCest.php b/tests/api/lnurlwithdraw/DisposableLnurlWithdrawCest.php new file mode 100644 index 00000000..8583ba6b --- /dev/null +++ b/tests/api/lnurlwithdraw/DisposableLnurlWithdrawCest.php @@ -0,0 +1,105 @@ + [ + 'class' => UserFixture::class, + ], + 'wallets' => [ + 'class' => \lnpay\fixtures\WalletFixture::class, + ], + 'lntx' => [ + 'class' => \lnpay\fixtures\LnTxFixture::class, + ], + 'user_access_key' => [ + 'class' => \lnpay\fixtures\UserAccessKeyFixture::class, + ] + ]; + } + + public function _before(ApiTester $I) + { + } + + public function _after(ApiTester $I) + { + } + + public function getDisposableLnurlWithdrawSuccessSak(\ApiTester $I) + { + $arbData = base64_encode('{"myData":"isEncoded"}'); + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'sak_KkKkKkKkKkneieivTI05Fm3YzTza4N'); + $I->sendGET('/v1/wallet/wal_aliceLnurlWithdraw/lnurl/withdraw?memo=Tester&num_satoshis=69&passThru='.$arbData); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::OK); + $I->seeResponseIsJson(); + $I->seeResponseContains('"lnurl":"LNURL'); + $I->seeResponseContains('"ott":'); + $lnurl = $I->grabDataFromResponseByJsonPath('$.lnurl'); + expect_that($decodedLnurl = tkijewski\lnurl\decodeUrl($lnurl[0])); + codecept_debug($decodedLnurl); + expect($decodedLnurl)->hasKey('url'); + expect($decodedLnurl['url'])->startsWith('http://localhost/index-test.php/v1/wallet/waklw_aliceLnurlWithdraw/lnurl-process?'); + + expect($decodedLnurl)->hasKey('tag'); + expect($decodedLnurl)->contains('withdraw'); + + expect($decodedLnurl)->hasKey('memo'); + expect($decodedLnurl)->contains('Tester'); + + expect($decodedLnurl)->hasKey('passThru'); + expect($decodedLnurl)->contains($arbData); + + expect($decodedLnurl)->hasKey('num_satoshis'); + expect($decodedLnurl)->contains('69'); + } + + public function getDisposableLnurlWithdrawSuccessPak(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'pak_HgiUO4kskfneieivTI05Fm3YzTza4N'); + $I->sendGET('/v1/wallet/waklw_aliceLnurlWithdraw/lnurl/withdraw'); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::OK); + $I->seeResponseIsJson(); + $I->seeResponseContains('"lnurl":"LNURL'); + $I->seeResponseContains('"ott":'); + } + + public function getDisposableLnurlWithdrawFailWakiPak(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'pak_HgiUO4kskfneieivTI05Fm3YzTza4N'); + $I->sendGET('/v1/wallet/waki_aliceLnurlWithdraw/lnurl/withdraw'); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::UNAUTHORIZED); + $I->seeResponseIsJson(); + } + + public function getDisposableLnurlWithdrawFailWakrPak(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'pak_HgiUO4kskfneieivTI05Fm3YzTza4N'); + $I->sendGET('/v1/wallet/wakr_aliceLnurlWithdraw/lnurl/withdraw'); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::UNAUTHORIZED); + $I->seeResponseIsJson(); + } + + public function getDisposableLnurlWithdrawSuccessWakaPak(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'pak_HgiUO4kskfneieivTI05Fm3YzTza4N'); + $I->sendGET('/v1/wallet/waka_aliceLnurlWithdraw/lnurl/withdraw'); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::OK); + $I->seeResponseIsJson(); + $I->seeResponseContains('"lnurl":"LNURL'); + $I->seeResponseContains('"ott":'); + } +} diff --git a/tests/api/lnurlwithdraw/PermanentLnurlWithdrawCest.php b/tests/api/lnurlwithdraw/PermanentLnurlWithdrawCest.php new file mode 100644 index 00000000..fd7fc6d8 --- /dev/null +++ b/tests/api/lnurlwithdraw/PermanentLnurlWithdrawCest.php @@ -0,0 +1,101 @@ + [ + 'class' => UserFixture::class, + ], + 'wallets' => [ + 'class' => \lnpay\fixtures\WalletFixture::class, + ], + 'lntx' => [ + 'class' => \lnpay\fixtures\LnTxFixture::class, + ], + 'user_access_key' => [ + 'class' => \lnpay\fixtures\UserAccessKeyFixture::class, + ] + ]; + } + + public function _before(ApiTester $I) + { + } + + public function _after(ApiTester $I) + { + } + + public function getDisposableLnurlWithdrawSuccessSak(\ApiTester $I) + { + $arbData = base64_encode('{"myData":"isEncoded"}'); + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'sak_KkKkKkKkKkneieivTI05Fm3YzTza4N'); + $I->sendGET('/v1/wallet/wal_aliceLnurlWithdraw/lnurl/withdraw-static?memo=Tester&num_satoshis=69&passThru='.$arbData); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::OK); + $I->seeResponseIsJson(); + $I->seeResponseContains('"lnurl":"LNURL'); + $lnurl = $I->grabDataFromResponseByJsonPath('$.lnurl'); + expect_that($decodedLnurl = tkijewski\lnurl\decodeUrl($lnurl[0])); + codecept_debug($decodedLnurl); + expect($decodedLnurl)->hasKey('url'); + expect($decodedLnurl['url'])->startsWith('http://localhost/index-test.php/v1/wallet/waklw_aliceLnurlWithdraw/lnurl-process?'); + + expect($decodedLnurl)->hasKey('tag'); + expect($decodedLnurl)->contains('withdraw'); + + expect($decodedLnurl)->hasKey('memo'); + expect($decodedLnurl)->contains('Tester'); + + expect($decodedLnurl)->hasKey('passThru'); + expect($decodedLnurl)->contains($arbData); + + expect($decodedLnurl)->hasKey('num_satoshis'); + expect($decodedLnurl)->contains('69'); + } + + public function getDisposableLnurlWithdrawSuccessPak(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'pak_HgiUO4kskfneieivTI05Fm3YzTza4N'); + $I->sendGET('/v1/wallet/waklw_aliceLnurlWithdraw/lnurl/withdraw-static'); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::UNAUTHORIZED); + $I->seeResponseIsJson(); + } + + public function getDisposableLnurlWithdrawFailWakiPak(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'pak_HgiUO4kskfneieivTI05Fm3YzTza4N'); + $I->sendGET('/v1/wallet/waki_aliceLnurlWithdraw/lnurl/withdraw-static'); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::UNAUTHORIZED); + $I->seeResponseIsJson(); + } + + public function getDisposableLnurlWithdrawFailWakrPak(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'pak_HgiUO4kskfneieivTI05Fm3YzTza4N'); + $I->sendGET('/v1/wallet/wakr_aliceLnurlWithdraw/lnurl/withdraw-static'); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::UNAUTHORIZED); + $I->seeResponseIsJson(); + } + + public function getDisposableLnurlWithdrawSuccessWakaPak(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'pak_HgiUO4kskfneieivTI05Fm3YzTza4N'); + $I->sendGET('/v1/wallet/waka_aliceLnurlWithdraw/lnurl/withdraw-static'); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::OK); + $I->seeResponseIsJson(); + $I->seeResponseContains('"lnurl":"LNURL'); + } +} diff --git a/tests/api/node/LnurlWithdrawProcessDisposableCest.php b/tests/api/node/LnurlWithdrawProcessDisposableCest.php new file mode 100644 index 00000000..ac095bf3 --- /dev/null +++ b/tests/api/node/LnurlWithdrawProcessDisposableCest.php @@ -0,0 +1,115 @@ + [ + 'class' => UserFixture::class, + ], + 'wallets' => [ + 'class' => \lnpay\fixtures\WalletFixture::class, + ], + 'wallet_transactions' => [ + 'class' => \lnpay\fixtures\WalletTransactionFixture::class, + ], + 'lntx' => [ + 'class' => \lnpay\fixtures\LnTxFixture::class, + ], + 'user_access_key' => [ + 'class' => \lnpay\fixtures\UserAccessKeyFixture::class, + ] + ]; + } + + public $lnurlDisposable; + + public function _before(ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'sak_KkKkKkKkKkneieivTI05Fm3YzTza4N'); + $I->sendGET('/v1/wallet/wal_aliceLnurlWithdraw/lnurl/withdraw?memo=Tester&num_satoshis=69'); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::OK); + $I->seeResponseIsJson(); + $I->seeResponseContains('"lnurl":"LNURL'); + $I->seeResponseContains('"ott":'); + $lnurlDisposable = $I->grabDataFromResponseByJsonPath('$.lnurl'); + expect_that($decodedLnurl = tkijewski\lnurl\decodeUrl($lnurlDisposable[0])); + expect_that($this->lnurlDisposable = $decodedLnurl['url']); + } + + public function _after(ApiTester $I) + { + + } + + /** + * @param int[] $params + * @return object $object->paymentRequest to get payment request + * @throws \lnpay\node\exceptions\UnableToCreateInvoiceException + */ + public function generateTestInvoice($params=['value'=>2]) + { + expect_that($node = \lnpay\node\models\LnNode::findOne('lnod_bob')); + expect_that($generated_invoice = (object) $node->getLndConnector('RPC')->createInvoice($params)); + expect_that($generated_invoice = $generated_invoice->paymentRequest); + + return $generated_invoice; + } + + public function getLnurlProcessPreFetchSuccess(\ApiTester $I) + { + codecept_debug($this->lnurlDisposable); + $I->sendGET($this->lnurlDisposable); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::OK); + $I->seeResponseIsJson(); + $I->seeResponseContains('"callback":'); + $I->seeResponseContains('"maxWithdrawable":69000'); + } + + public function getLnurlProcessFulfillPrSuccess(\ApiTester $I) + { + codecept_debug($this->lnurlDisposable); + $I->sendGET($this->lnurlDisposable); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::OK); + $I->seeResponseIsJson(); + $I->seeResponseContains('"callback":'); + $I->seeResponseContains('"maxWithdrawable":69000'); + expect_that($lnurl = $I->grabDataFromResponseByJsonPath('$.callback')[0]); + $lnurl = $lnurl . (stripos($lnurl,'?')!==FALSE?'&':'?'); + codecept_debug('callbackUrl:'.$lnurl); + + //Fetch an available invoice + expect($invoice = $this->generateTestInvoice(['value'=>69])); + + //try and get PR paid + $I->sendGET($lnurl.'pr='.$invoice); + $I->seeResponseContains('"OK"'); + + //try again, since this is dispoable, should fail + expect($invoice = $this->generateTestInvoice(['value'=>69])); + $I->sendGET($lnurl.'pr='.$invoice); + $I->seeResponseContains('"ERROR"'); + } + + public function getLnurlProcessFulfillPrFail(\ApiTester $I) + { + codecept_debug($this->lnurlDisposable); + $I->sendGET($this->lnurlDisposable); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::OK); + $I->seeResponseIsJson(); + $I->seeResponseContains('"callback":'); + $I->seeResponseContains('"maxWithdrawable":69000'); + expect_that($lnurl = $I->grabDataFromResponseByJsonPath('$.callback')[0]); + $lnurl = $lnurl . (stripos($lnurl,'?')!==FALSE?'&':'?'); + + //Fetch an available invoice + expect($invoice = $this->generateTestInvoice(['value'=>2422224])); + $I->sendGET($lnurl.'pr='.$invoice); + $I->seeResponseContains('"ERROR"'); + } +} diff --git a/tests/api/node/LnurlWithdrawProcessPublicCest.php b/tests/api/node/LnurlWithdrawProcessPublicCest.php new file mode 100644 index 00000000..e14f839c --- /dev/null +++ b/tests/api/node/LnurlWithdrawProcessPublicCest.php @@ -0,0 +1,63 @@ + [ + 'class' => UserFixture::class, + ], + 'wallets' => [ + 'class' => \lnpay\fixtures\WalletFixture::class, + ], + 'wallet_transactions' => [ + 'class' => \lnpay\fixtures\WalletTransactionFixture::class, + ], + 'lntx' => [ + 'class' => \lnpay\fixtures\LnTxFixture::class, + ], + 'user_access_key' => [ + 'class' => \lnpay\fixtures\UserAccessKeyFixture::class, + ] + ]; + } + + public $lnurlStatic; + + public function _before(ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'sak_KkKkKkKkKkneieivTI05Fm3YzTza4N'); + $I->sendGET('/v1/wallet/wal_aliceLnurlWithdraw/lnurl/withdraw?memo=Tester&num_satoshis=69'); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::OK); + $I->seeResponseIsJson(); + $I->seeResponseContains('"lnurl":"LNURL'); + $I->seeResponseContains('"ott":'); + $lnurlStatic = $I->grabDataFromResponseByJsonPath('$.lnurl'); + expect_that($decodedLnurl = tkijewski\lnurl\decodeUrl($lnurlStatic[0])); + expect_that($this->lnurlStatic = $decodedLnurl['url']); + } + + public function _after(ApiTester $I) + { + + } + + /** + * @param int[] $params + * @return object $object->paymentRequest to get payment request + * @throws \lnpay\node\exceptions\UnableToCreateInvoiceException + */ + public function generateTestInvoice($params=['value'=>2]) + { + expect_that($node = \lnpay\node\models\LnNode::findOne('lnod_bob')); + expect_that($generated_invoice = (object) $node->getLndConnector('RPC')->createInvoice($params)); + expect_that($generated_invoice = $generated_invoice->paymentRequest); + + return $generated_invoice; + } +} diff --git a/tests/api/node/LnurlWithdrawProcessStaticCest.php b/tests/api/node/LnurlWithdrawProcessStaticCest.php new file mode 100644 index 00000000..82c04543 --- /dev/null +++ b/tests/api/node/LnurlWithdrawProcessStaticCest.php @@ -0,0 +1,122 @@ + [ + 'class' => UserFixture::class, + ], + 'wallets' => [ + 'class' => \lnpay\fixtures\WalletFixture::class, + ], + 'wallet_transactions' => [ + 'class' => \lnpay\fixtures\WalletTransactionFixture::class, + ], + 'lntx' => [ + 'class' => \lnpay\fixtures\LnTxFixture::class, + ], + 'user_access_key' => [ + 'class' => \lnpay\fixtures\UserAccessKeyFixture::class, + ] + ]; + } + + public $lnurlStatic; + + public function _before(ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'sak_KkKkKkKkKkneieivTI05Fm3YzTza4N'); + $I->sendGET('/v1/wallet/wal_aliceLnurlWithdraw/lnurl/withdraw-static?memo=Tester&num_satoshis=69'); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::OK); + $I->seeResponseIsJson(); + $I->seeResponseContains('"lnurl":"LNURL'); + $lnurlStatic = $I->grabDataFromResponseByJsonPath('$.lnurl'); + expect_that($decodedLnurl = tkijewski\lnurl\decodeUrl($lnurlStatic[0])); + expect_that($this->lnurlStatic = $decodedLnurl['url']); + } + + public function _after(ApiTester $I) + { + + } + + /** + * @param int[] $params + * @return object $object->paymentRequest to get payment request + * @throws \lnpay\node\exceptions\UnableToCreateInvoiceException + */ + public function generateTestInvoice($params=['value'=>2]) + { + expect_that($node = \lnpay\node\models\LnNode::findOne('lnod_bob')); + expect_that($generated_invoice = (object) $node->getLndConnector('RPC')->createInvoice($params)); + expect_that($generated_invoice = $generated_invoice->paymentRequest); + + return $generated_invoice; + } + + + /** + * + * LNURLs generated from /lnurl/withdraw-static + * + * + * + */ + public function getLnurlProcessPreFetchSuccessStatic(\ApiTester $I) + { + codecept_debug($this->lnurlStatic); + $I->sendGET($this->lnurlStatic); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::OK); + $I->seeResponseIsJson(); + $I->seeResponseContains('"callback":'); + $I->seeResponseContains('"maxWithdrawable":69000'); + } + + public function getLnurlProcessFulfillPrSuccessStatic(\ApiTester $I) + { + codecept_debug($this->lnurlStatic); + $I->sendGET($this->lnurlStatic); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::OK); + $I->seeResponseIsJson(); + $I->seeResponseContains('"callback":'); + $I->seeResponseContains('"maxWithdrawable":69000'); + expect_that($lnurl = $I->grabDataFromResponseByJsonPath('$.callback')[0]); + $lnurl = $lnurl . (stripos($lnurl,'?')!==FALSE?'&':'?'); + codecept_debug('callbackLnurl:'.$lnurl); + + //Fetch an available invoice + expect($invoice = $this->generateTestInvoice(['value'=>69])); + + //try and get PR paid + $I->sendGET($lnurl.'pr='.$invoice); + $I->seeResponseContains('"OK"'); + + //try again, since this is static should succeed + expect($invoice = $this->generateTestInvoice(['value'=>69])); + $I->sendGET($lnurl.'pr='.$invoice); + $I->seeResponseContains('"OK"'); + } + + public function getLnurlProcessFulfillPrFailStatic(\ApiTester $I) + { + codecept_debug($this->lnurlStatic); + $I->sendGET($this->lnurlStatic); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::OK); + $I->seeResponseIsJson(); + $I->seeResponseContains('"callback":'); + $I->seeResponseContains('"maxWithdrawable":69000'); + expect_that($lnurl = $I->grabDataFromResponseByJsonPath('$.callback')[0]); + $lnurl = $lnurl . (stripos($lnurl,'?')!==FALSE?'&':'?'); + + //Fetch an available invoice + expect($invoice = $this->generateTestInvoice(['value'=>2422224])); + $I->sendGET($lnurl.'pr='.$invoice); + $I->seeResponseContains('"ERROR"'); + } +} diff --git a/tests/api/node/LnurlpayNodeCest.php b/tests/api/node/LnurlpayNodeCest.php new file mode 100644 index 00000000..49e33d08 --- /dev/null +++ b/tests/api/node/LnurlpayNodeCest.php @@ -0,0 +1,68 @@ + [ + 'class' => \lnpay\fixtures\UserFixture::class, + ], + 'wallets' => [ + 'class' => \lnpay\fixtures\WalletFixture::class, + ], + 'lntx' => [ + 'class' => \lnpay\fixtures\LnTxFixture::class, + ], + 'user_access_key' => [ + 'class' => \lnpay\fixtures\UserAccessKeyFixture::class, + ], + 'wallet_lnurlpay' => [ + 'class' => \lnpay\fixtures\WalletLnurlpayFixture::class, + ], + 'wallet_transaction' => [ + 'class' => \lnpay\fixtures\WalletTransactionFixture::class, + ] + ]; + } + + public function _before(ApiTester $I) + { + } + + public function _after(ApiTester $I) + { + } + + + public function payLnurlpaySucceedWithdrawPermission(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'pak_HgiUO4kskfneieivTI05Fm3YzTza4N'); + $I->sendPOST('/v1/wallet/waklw_aliceLnurlWithdraw/lnurlp/pay',[ + 'amt_msat'=>1000, + 'lnurlpay_encoded'=>'lnurl1dp68gup69uhnzwfj9ccnvwpwxcujuvf39a5kuer90qkhgetnwsh8q6rs9amrztmhv9kxcet59amkz6mvwp0kzmrfvdj5cmn4wfk9qcte9akxuatjd3cz7mrww4excuzlxpv56vfcfe6rxur08pf42m2ffa9525qq4ry', + 'passThru'=>['dog'=>'cat'] + ]); + $I->seeResponseIsJson(); + $I->seeResponseContains('"ln_lnurl_pay_outbound"'); + $I->seeResponseContains('"dog"'); + } + + public function payLnaddressSucceedWithdrawPermission(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'pak_HgiUO4kskfneieivTI05Fm3YzTza4N'); + $I->sendPOST('/v1/wallet/waklw_aliceLnurlWithdraw/lnurlp/pay',[ + 'amt_msat'=>1000, + 'ln_address'=>'lnurlp_0YM18Nt3po8SUmIOKE@localhost.com', + 'passThru'=>['dog'=>'cat'] + ]); + $I->seeResponseIsJson(); + $I->seeResponseContains('"ln_lnurl_pay_outbound"'); + $I->seeResponseContains('"dog"'); + } +} diff --git a/tests/api/node/NodeDecodeInvoiceCest.php b/tests/api/node/NodeDecodeInvoiceCest.php new file mode 100644 index 00000000..a0af0250 --- /dev/null +++ b/tests/api/node/NodeDecodeInvoiceCest.php @@ -0,0 +1,45 @@ + [ + 'class' => UserFixture::class, + ], + 'wallets' => [ + 'class' => \lnpay\fixtures\WalletFixture::class, + ], + 'user_access_key' => [ + 'class' => \lnpay\fixtures\UserAccessKeyFixture::class, + ], + 'ln_node' => [ + 'class'=>\lnpay\node\fixtures\LnNodeFixture::class + ] + ]; + } + + public function _before(ApiTester $I) + { + } + + public function _after(ApiTester $I) + { + } + + public function LndDecodeInvoice(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'sak_KkKkKkKkKkneieivTI05Fm3YzTza4N'); + $I->sendGET('/v1/node/lnod_bob/payments/decodeinvoice',[ + 'payment_request'=>'lnbcrt690n1pssq8zwpp5z29qr8cny73j70sa3nqk33swa75j50qzmvm3nuuca2tf92jqjqqqdqqcqzpgxqyz5vqsp50l5jnduwkcj7z7wg2vhhf3faglr2ev8un0z5rs7ae2xh8gwdm4zq9qyyssqhl4mgfge847w0efm3cww5qfyxce8sky0uc9ymdeusqg3gekwm25kwd94p6gamty6t8vshmfyv9nxrpdwcf7wc2my240v3urvrak8e5qpqmpc06' + ]); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::OK); + $I->seeResponseIsJson(); + $I->seeResponseContains('"destination":"037ab245cff7f54f76e605327d93e18ed641bddd49e3e46dafb13a5a646c25a041"'); + } +} diff --git a/tests/api/node/NodeListCest.php b/tests/api/node/NodeListCest.php new file mode 100644 index 00000000..0b7bf111 --- /dev/null +++ b/tests/api/node/NodeListCest.php @@ -0,0 +1,54 @@ + [ + 'class' => UserFixture::class, + ], + 'wallets' => [ + 'class' => \lnpay\fixtures\WalletFixture::class, + ], + 'user_access_key' => [ + 'class' => \lnpay\fixtures\UserAccessKeyFixture::class, + ], + 'ln_node' => [ + 'class'=>\lnpay\node\fixtures\LnNodeFixture::class + ] + ]; + } + + public function _before(ApiTester $I) + { + } + + public function _after(ApiTester $I) + { + } + + public function ListOne(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'sak_KkKkKkKkKkneieivTI05Fm3YzTza4N'); + $I->sendGET('/v1/node/lnod_bob'); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::OK); + $I->seeResponseIsJson(); + $I->seeResponseContains('"lnod_bob"'); + } + + public function ListAll(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'sak_KkKkKkKkKkneieivTI05Fm3YzTza4N'); + $I->sendGET('/v1/nodes'); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::OK); + $I->seeResponseIsJson(); + $I->seeResponseContains('"lnod_bob"'); + $I->seeResponseContains('"lnod_alice"'); + } +} diff --git a/tests/api/node/NodeQueryRouteCest.php b/tests/api/node/NodeQueryRouteCest.php new file mode 100644 index 00000000..13d6735d --- /dev/null +++ b/tests/api/node/NodeQueryRouteCest.php @@ -0,0 +1,46 @@ + [ + 'class' => UserFixture::class, + ], + 'wallets' => [ + 'class' => \lnpay\fixtures\WalletFixture::class, + ], + 'user_access_key' => [ + 'class' => \lnpay\fixtures\UserAccessKeyFixture::class, + ], + 'ln_node' => [ + 'class'=>\lnpay\node\fixtures\LnNodeFixture::class + ] + ]; + } + + public function _before(ApiTester $I) + { + } + + public function _after(ApiTester $I) + { + } + + public function LndQueryRoute(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'sak_KkKkKkKkKkneieivTI05Fm3YzTza4N'); + $I->sendGET('/v1/node/lnod_bob/payments/queryroutes',[ + 'pub_key'=>'028e74f2598db804d8ae1319a5140679bd1df10811a33cbb82a183035110343760', + 'amt'=>1 + ]); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::OK); + $I->seeResponseIsJson(); + $I->seeResponseContains('"routes"'); + } +} diff --git a/tests/api/node/WalletGenerateInvoiceCest.php b/tests/api/node/WalletGenerateInvoiceCest.php new file mode 100644 index 00000000..ecf93b79 --- /dev/null +++ b/tests/api/node/WalletGenerateInvoiceCest.php @@ -0,0 +1,124 @@ + [ + 'class' => UserFixture::class, + ], + 'wallets' => [ + 'class' => \lnpay\fixtures\WalletFixture::class, + ], + 'user_access_key' => [ + 'class' => \lnpay\fixtures\UserAccessKeyFixture::class, + ], + 'ln_node' => [ + 'class'=>\lnpay\node\fixtures\LnNodeFixture::class + ] + ]; + } + + public function _before(ApiTester $I) + { + } + + public function _after(ApiTester $I) + { + } + + public function walletGenerateInvoiceSuccess(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'sak_KkKkKkKkKkneieivTI05Fm3YzTza4N'); + $I->sendPOST('/v1/wallet/wal_KkMmfMmsksss/invoice',[ + 'num_satoshis'=>200, + 'memo'=>'walletGenerateInvoiceSuccess', + 'passThru'=>'{"myObject":"tester"}' + ]); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::CREATED); + $I->seeResponseIsJson(); + $I->seeResponseContains('"memo":"walletGenerateInvoiceSuccess (via LNPAY.co)"'); + $I->seeResponseContains('"num_satoshis":200'); + $I->seeResponseContains('"myObject":"tester"'); + $I->seeResponseContains('"lntx_'); + } + + public function walletGenerateInvoiceWakaSuccess(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'pak_HgiUO4kskfneieivTI05Fm3YzTza4N'); + $I->sendPOST('/v1/wallet/waka_carol/invoice',[ + 'num_satoshis'=>200, + 'memo'=>'walletGenerateInvoiceSuccess', + 'passThru'=>'{"myObject":"tester"}', + 'expiry'=>2000 + ]); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::CREATED); + $I->seeResponseIsJson(); + $I->seeResponseContains('"memo":"walletGenerateInvoiceSuccess (via LNPAY.co)"'); + $I->seeResponseContains('"num_satoshis":200'); + $I->seeResponseContains('"expiry":2000'); + $I->seeResponseContains('"myObject":"tester"'); + $I->seeResponseContains('"lntx_'); + } + + public function walletGenerateInvoiceWakiSuccess(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'pak_HgiUO4kskfneieivTI05Fm3YzTza4N'); + $I->sendPOST('/v1/wallet/waki_carol/invoice',[ + 'num_satoshis'=>200, + 'memo'=>'walletGenerateInvoiceSuccess', + 'passThru'=>'{"myObject":"tester"}' + ]); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::CREATED); + $I->seeResponseIsJson(); + $I->seeResponseContains('"memo":"walletGenerateInvoiceSuccess (via LNPAY.co)"'); + $I->seeResponseContains('"num_satoshis":200'); + $I->seeResponseContains('"myObject":"tester"'); + $I->seeResponseContains('"lntx_'); + } + + public function walletGenerateInvoiceAccessKeyFail(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'pak_HgiUO4kskfneieivTI05Fm3YzTza4N'); + $I->sendPOST('/v1/wallet/wal_KkMmfMmsksss/invoice',[ + 'num_satoshis'=>200, + 'memo'=>'walletGenerateInvoiceFail', + 'passThru'=>'{"myObject":"tester"}' + ]); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::UNAUTHORIZED); + $I->seeResponseIsJson(); + } + + public function walletGenerateInvoiceWakrFail(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'pak_HgiUO4kskfneieivTI05Fm3YzTza4N'); + $I->sendPOST('/v1/wallet/wakr_carol/invoice',[ + 'num_satoshis'=>200, + 'memo'=>'walletGenerateInvoiceFail', + 'passThru'=>'{"myObject":"tester"}' + ]); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::UNAUTHORIZED); + $I->seeResponseIsJson(); + } + + public function walletGenerateInvoiceValidationFail(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'sak_KkKkKkKkKkneieivTI05Fm3YzTza4N'); + $I->sendPOST('/v1/wallet/wal_KkMmfMmsksss/invoice',[ + 'num_satoshis'=>-20, + ]); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::INTERNAL_SERVER_ERROR); + $I->seeResponseIsJson(); + $I->seeResponseContains('Unable to create LN Invoice'); + } +} diff --git a/tests/api/node/WalletKeysendCest.php b/tests/api/node/WalletKeysendCest.php new file mode 100644 index 00000000..07d90fa3 --- /dev/null +++ b/tests/api/node/WalletKeysendCest.php @@ -0,0 +1,74 @@ + [ + 'class' => UserFixture::class, + ], + 'wallets' => [ + 'class' => \lnpay\fixtures\WalletFixture::class, + ], + 'wallet_transactions' => [ + 'class' => \lnpay\fixtures\WalletTransactionFixture::class, + ], + 'user_access_key' => [ + 'class' => \lnpay\fixtures\UserAccessKeyFixture::class, + ], + 'ln_node' => [ + 'class'=>\lnpay\node\fixtures\LnNodeFixture::class + ] + ]; + } + + public function _before(ApiTester $I) + { + + } + + public function _after(ApiTester $I) + { + + } + + public function walleyKeysendSuccess(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'sak_KkKkKkKkKkneieivTI05Fm3YzTza4N'); + $I->sendPOST('/v1/wallet/wal_testCarolTransactions/keysend',[ + 'dest_pubkey'=>'03d6ff489e59236894f7e8458727058a5a9eeb5ca03eded6a6814852f68f68aa0a', + 'num_satoshis'=>5, + 'passThru'=>'{"myData":"isHere"}', + 'custom_records'=>[1337331=>['Hi'=>'Test']] + ]); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::CREATED); + $I->seeResponseIsJson(); + $I->seeResponseContains('wtx_'); + } + + public function walleyKeysendFail(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'sak_KkKkKkKkKkneieivTI05Fm3YzTza4N'); + $I->sendPOST('/v1/wallet/wal_testCarolTransactions/keysend',[ + 'dest_pubkey'=>'03d6ff489e59236894f7e8458727058a5a9eeb5ca03eded6a6814852f68f68aa0b', //bad pubkey + 'num_satoshis'=>5, + 'passThru'=>'{"myData":"isHere"}', + //'custom_records'=> + ]); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::BAD_REQUEST); + $I->seeResponseIsJson(); + $I->seeResponseContains('Failure reason: FAILURE_REASON_NO_ROUTE'); + } + + //@TODO: AMP sending / testing + public function walletAMPSuccess(\ApiTester $I) + { + + } +} diff --git a/tests/api/node/WalletPayInvoiceCest.php b/tests/api/node/WalletPayInvoiceCest.php new file mode 100644 index 00000000..75aa6eac --- /dev/null +++ b/tests/api/node/WalletPayInvoiceCest.php @@ -0,0 +1,164 @@ + [ + 'class' => UserFixture::class, + ], + 'wallets' => [ + 'class' => \lnpay\fixtures\WalletFixture::class, + ], + 'wallet_transactions' => [ + 'class' => \lnpay\fixtures\WalletTransactionFixture::class, + ], + 'user_access_key' => [ + 'class' => \lnpay\fixtures\UserAccessKeyFixture::class, + ], + 'ln_node' => [ + 'class'=>\lnpay\node\fixtures\LnNodeFixture::class + ] + ]; + } + + public function _before(ApiTester $I) + { + + } + + public function _after(ApiTester $I) + { + + } + + public function generateTestInvoice() + { + expect_that($node = \lnpay\node\models\LnNode::findOne('lnod_bob')); + expect_that($generated_invoice = (object) $node->getLndConnector('RPC')->createInvoice(['value'=>2])); + + return $generated_invoice; + } + + public function walletPayInvoiceSuccess(\ApiTester $I) + { + $generated_invoice = $this->generateTestInvoice(); + + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'sak_KkKkKkKkKkneieivTI05Fm3YzTza4N'); + $I->sendPOST('/v1/wallet/wal_testCarolTransactions/withdraw',[ + 'payment_request'=>$generated_invoice->paymentRequest, + 'passThru'=>'{"myData":"isHere"}' + ]); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::CREATED); + $I->seeResponseIsJson(); + $I->seeResponseContains('wtx_'); + $I->seeResponseContains('lntx_'); + $I->seeResponseContains('"num_satoshis":2'); + $I->seeResponseContains('"myData":"isHere"'); + } + + public function walletPayInvoiceSuccessWaka(\ApiTester $I) + { + $generated_invoice = $this->generateTestInvoice(); + + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'pak_HgiUO4kskfneieivTI05Fm3YzTza4N'); + $I->sendPOST('/v1/wallet/waka_carolTransactions/withdraw',[ + 'payment_request'=>$generated_invoice->paymentRequest + ]); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::CREATED); + $I->seeResponseIsJson(); + $I->seeResponseContains('wtx_'); + $I->seeResponseContains('lntx_'); + $I->seeResponseContains('"num_satoshis":2'); + } + + public function walletPayInvoiceSuccessWaklw(\ApiTester $I) + { + $generated_invoice = $this->generateTestInvoice(); + + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'pak_HgiUO4kskfneieivTI05Fm3YzTza4N'); + $I->sendPOST('/v1/wallet/waklw_carolTransactions/withdraw',[ + 'payment_request'=>$generated_invoice->paymentRequest + ]); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::CREATED); + $I->seeResponseIsJson(); + $I->seeResponseContains('wtx_'); + $I->seeResponseContains('lntx_'); + $I->seeResponseContains('"num_satoshis":2'); + } + + public function walletPayInvoiceFailWaki(\ApiTester $I) + { + $generated_invoice = $this->generateTestInvoice(); + + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'pak_HgiUO4kskfneieivTI05Fm3YzTza4N'); + $I->sendPOST('/v1/wallet/waki_carolTransactions/withdraw',[ + 'payment_request'=>$generated_invoice->paymentRequest + ]); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::UNAUTHORIZED); + $I->seeResponseIsJson(); + } + + public function walletPayInvoiceFailWakr(\ApiTester $I) + { + $generated_invoice = $this->generateTestInvoice(); + + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'pak_HgiUO4kskfneieivTI05Fm3YzTza4N'); + $I->sendPOST('/v1/wallet/wakr_carolTransactions/withdraw',[ + 'payment_request'=>$generated_invoice->paymentRequest + ]); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::UNAUTHORIZED); + $I->seeResponseIsJson(); + } + + public function walletPayInvoiceInvalidPaymentRequestFail(\ApiTester $I) + { + $generated_invoice = $this->generateTestInvoice(); + + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'sak_KkKkKkKkKkneieivTI05Fm3YzTza4N'); + $I->sendPOST('/v1/wallet/wal_testCarolTransactions/withdraw',[ + 'payment_request'=>'lnbcaksdfk2km12k3m123' + ]); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::BAD_REQUEST); + $I->seeResponseIsJson(); + } + + public function walletPayInvoiceInsufficientFundsFail(\ApiTester $I) + { + $generated_invoice = $this->generateTestInvoice(); + + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'sak_KkKkKkKkKkneieivTI05Fm3YzTza4N'); + $I->sendPOST('/v1/wallet/wal_KkMmfMmsksss/withdraw',[ + 'payment_request'=>$generated_invoice->paymentRequest + ]); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::BAD_REQUEST); + $I->seeResponseIsJson(); + $I->seeResponseContains('Invoice too large'); + } + + public function walletPayInvoiceValidationFail(\ApiTester $I) + { + $generated_invoice = $this->generateTestInvoice(); + + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'sak_KkKkKkKkKkneieivTI05Fm3YzTza4N'); + $I->sendPOST('/v1/wallet/wal_KkMmfMmsksss/withdraw',[ + 'payment_request'=>$generated_invoice->paymentRequest, + 'passThru'=>'asdf' + ]); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::BAD_REQUEST); + $I->seeResponseIsJson(); + $I->seeResponseContains('passThru data must be valid json'); + } +} diff --git a/tests/api/wallet/WalletAuthCest.php b/tests/api/wallet/WalletAuthCest.php new file mode 100644 index 00000000..11b0508b --- /dev/null +++ b/tests/api/wallet/WalletAuthCest.php @@ -0,0 +1,79 @@ + [ + 'class' => UserFixture::class, + ], + 'wallets' => [ + 'class' => \lnpay\fixtures\WalletFixture::class, + ], + 'user_access_key' => [ + 'class' => \lnpay\fixtures\UserAccessKeyFixture::class, + ] + ]; + } + + public function _before(ApiTester $I) + { + } + + public function _after(ApiTester $I) + { + } + + + public function walletReadByKeySuccess(\ApiTester $I) + { + //@TODO:[WalletTest] Implement this + } + + public function walletWithdrawByKeySuccess(\ApiTester $I) + { + //@TODO:[WalletTest] Implement this + } + + public function walletWithdrawByKeyFail(\ApiTester $I) + { + //@TODO:[WalletTest] Implement this + } + + public function walletLnurlWithdrawPublicByKeySuccess(\ApiTester $I) + { + //@TODO:[WalletTest] Implement this + } + + public function walletLnurlWithdrawPublicByKeyFail(\ApiTester $I) + { + //@TODO:[WalletTest] Implement this + } + + public function walletInvoiceByKeySuccess(\ApiTester $I) + { + //@TODO:[WalletTest] Implement this + } + + public function walletInvoiceByKeyFail(\ApiTester $I) + { + //@TODO:[WalletTest] Implement this + } + + public function walletTransferByKeySuccess(\ApiTester $I) + { + //@TODO:[WalletTest] Implement this + } + + public function walletTransferByKeyFail(\ApiTester $I) + { + //@TODO:[WalletTest] Implement this + } +} diff --git a/tests/api/wallet/WalletCreateCest.php b/tests/api/wallet/WalletCreateCest.php new file mode 100644 index 00000000..d9ae9198 --- /dev/null +++ b/tests/api/wallet/WalletCreateCest.php @@ -0,0 +1,95 @@ + [ + 'class' => UserFixture::class, + ], + 'wallets' => [ + 'class' => \lnpay\fixtures\WalletFixture::class, + ], + 'user_access_key' => [ + 'class' => \lnpay\fixtures\UserAccessKeyFixture::class, + ], + 'ln_node' => [ + 'class'=>\lnpay\node\fixtures\LnNodeFixture::class + ] + ]; + } + + public function _before(ApiTester $I) + { + } + + public function _after(ApiTester $I) + { + } + + public function walletCreateSuccess(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'sak_KkKkKkKkKkneieivTI05Fm3YzTza4N'); + $I->sendPOST('/v1/wallet',[ + 'user_label'=>'My Test Wallet' + ]); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::CREATED); + $I->seeResponseIsJson(); + $I->seeResponseContains('"access_keys"'); + $I->seeResponseContains('"user_label":"My Test Wallet"'); + $I->seeResponseContains('"default_lnurlpay_id"'); + } + + public function walletCreateDeterministicSuccess(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'sak_KkKkKkKkKkneieivTI05Fm3YzTza4N'); + $I->sendPOST('/v1/wallet',[ + 'user_label'=>'My Test Deterministic Wallet', + 'deterministic_identifier'=>'my_id' + ]); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::CREATED); + $I->seeResponseIsJson(); + $I->seeResponseContains('"access_keys"'); + $I->seeResponseContains('"user_label":"My Test Deterministic Wallet"'); + $I->seeResponseContains('"default_lnurlpay_id"'); + $I->seeResponseContains('walx_'.substr(hash('sha256',('my_id'.'org_1234567')),0,14)); + } + + public function walletCreateSuccessNotCustodialNode(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'sak_KkKkKkKkKkneieivTI05Fm3YzTza4N'); + $I->sendPOST('/v1/wallet',[ + 'user_label'=>'My Test Wallet', + 'ln_node_id'=>'lnod_bob' + ]); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::CREATED); + $I->seeResponseIsJson(); + $I->seeResponseContains('"access_keys"'); + $I->seeResponseContains('"user_label":"My Test Wallet"'); + } + + public function walletCreateValidationFail(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'pak_HgiUO4kskfneieivTI05Fm3YzTza4N'); + $I->sendPOST('/v1/wallet',[]); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::BAD_REQUEST); + $I->seeResponseIsJson(); + } + + public function walletCreatePermissionFail(\ApiTester $I) + { + //Only sak_ can do this command + } + +} diff --git a/tests/api/wallet/WalletGetCest.php b/tests/api/wallet/WalletGetCest.php new file mode 100644 index 00000000..29266a0a --- /dev/null +++ b/tests/api/wallet/WalletGetCest.php @@ -0,0 +1,102 @@ + [ + 'class' => UserFixture::class, + ], + 'wallets' => [ + 'class' => \lnpay\fixtures\WalletFixture::class, + ], + 'user_access_key' => [ + 'class' => \lnpay\fixtures\UserAccessKeyFixture::class, + ] + ]; + } + + public function _before(ApiTester $I) + { + } + + public function _after(ApiTester $I) + { + } + + public function walletGetSuccessById(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'sak_KkKkKkKkKkneieivTI05Fm3YzTza4N'); + $I->sendGET('/v1/wallet/wal_KkMmfMmsksss'); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::OK); + $I->seeResponseIsJson(); + $I->seeResponseContains('"id":"wal_KkMmfMmsksss"'); + } + + public function walletGetFailByPakId(\ApiTester $I) + { + //pak_ cannot access the wallet by it's ID only by wakX key + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'pak_HgiUO4kskfneieivTI05Fm3YzTza4N'); + $I->sendGET('/v1/wallet/wal_KkMmfMmsksss'); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::UNAUTHORIZED); + $I->seeResponseIsJson(); + } + + public function walletGetSuccessByAccessKeyWakr(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'pak_HgiUO4kskfneieivTI05Fm3YzTza4N'); + $I->sendGET('/v1/wallet/wakr_alice'); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::OK); + $I->seeResponseIsJson(); + $I->seeResponseContains('"id":"wal_KkMmfMmsksss"'); + } + + public function walletGetSuccessByAccessKeyWaka(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'pak_HgiUO4kskfneieivTI05Fm3YzTza4N'); + $I->sendGET('/v1/wallet/waka_alice'); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::OK); + $I->seeResponseIsJson(); + $I->seeResponseContains('"id":"wal_KkMmfMmsksss"'); + } + + public function walletGetSuccessByAccessKeyWaklw(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'pak_HgiUO4kskfneieivTI05Fm3YzTza4N'); + $I->sendGET('/v1/wallet/waklw_alice'); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::OK); + $I->seeResponseIsJson(); + $I->seeResponseContains('"id":"wal_KkMmfMmsksss"'); + } + + + public function walletGetFailByUnknownId(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'sak_KkKkKkKkKkneieivTI05Fm3YzTza4N'); + $I->sendGET('/v1/wallet/unknown_id'); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::UNAUTHORIZED); + $I->seeResponseIsJson(); + } + + public function walletGetFailByAccessKeyWaki(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'pak_HgiUO4kskfneieivTI05Fm3YzTza4N'); + $I->sendGET('/v1/wallet/waki_alice'); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::UNAUTHORIZED); + $I->seeResponseIsJson(); + } +} diff --git a/tests/api/wallet/WalletListCest.php b/tests/api/wallet/WalletListCest.php new file mode 100644 index 00000000..6d902f85 --- /dev/null +++ b/tests/api/wallet/WalletListCest.php @@ -0,0 +1,116 @@ + [ + 'class' => UserFixture::class, + ], + 'wallets' => [ + 'class' => \lnpay\fixtures\WalletFixture::class, + ], + 'wallet_transactions' => [ + 'class' => \lnpay\fixtures\WalletTransactionFixture::class, + ], + 'user_access_key' => [ + 'class' => \lnpay\fixtures\UserAccessKeyFixture::class, + ] + ]; + } + + public function _before(ApiTester $I) + { + } + + public function _after(ApiTester $I) + { + } + + public function walletListSuccessByIdAndSak(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'sak_KkKkKkKkKkneieivTI05Fm3YzTza4N'); + $I->sendGET('/v1/wallets'); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::OK); + $I->seeResponseIsJson(); + $I->seeResponseContains('"id":"wal_KkMmfMmsksss"'); + } + + public function walletListPermissionFail(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'pak_HgiUO4kskfneieivTI05Fm3YzTza4N'); + $I->sendGET('/v1/wallets'); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::UNAUTHORIZED); + $I->seeResponseIsJson(); + $I->seeResponseContains('This resource can only be access with secret access key'); + } + + //TRANSACTIONS + + public function walletListTransactionsSuccessByWaka(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'pak_HgiUO4kskfneieivTI05Fm3YzTza4N'); + $I->sendGET('/v1/wallet/waka_carolTransactions/transactions'); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::OK); + $I->seeResponseIsJson(); + $I->seeResponseContains('"id":"wtx_TransferIntoCarol"'); + } + + public function walletListTransactionsFailByWakr(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'pak_HgiUO4kskfneieivTI05Fm3YzTza4N'); + $I->sendGET('/v1/wallet/wakr_carolTransactions/transactions'); + $I->seeResponseContains('"id":"wtx_TransferIntoCarol"'); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::OK); + $I->seeResponseIsJson(); + } + + public function walletListTransactionsFailByWaki(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'pak_HgiUO4kskfneieivTI05Fm3YzTza4N'); + $I->sendGET('/v1/wallet/waki_carolTransactions/transactions'); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::UNAUTHORIZED); + $I->seeResponseIsJson(); + } + + public function walletListTransactionsFailByWaklw(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'pak_HgiUO4kskfneieivTI05Fm3YzTza4N'); + $I->sendGET('/v1/wallet/waklw_carolTransactions/transactions'); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::OK); + $I->seeResponseIsJson(); + } + + + public function walletListTransactionsSuccessByWal(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'sak_KkKkKkKkKkneieivTI05Fm3YzTza4N'); + $I->sendGET('/v1/wallet/wal_testCarolTransactions/transactions'); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::OK); + $I->seeResponseIsJson(); + $I->seeResponseContains('"id":"wtx_TransferIntoCarol"'); + } + + public function walletListTransactionsFailByWalPak(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'pak_HgiUO4kskfneieivTI05Fm3YzTza4N'); + $I->sendGET('/v1/wallet/wal_testCarolTransactions/transactions'); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::UNAUTHORIZED); + $I->seeResponseIsJson(); + } +} diff --git a/tests/api/wallet/WalletTransactionListCest.php b/tests/api/wallet/WalletTransactionListCest.php new file mode 100644 index 00000000..7d290dda --- /dev/null +++ b/tests/api/wallet/WalletTransactionListCest.php @@ -0,0 +1,77 @@ + [ + 'class' => UserFixture::class, + ], + 'wallets' => [ + 'class' => \lnpay\fixtures\WalletFixture::class, + ], + 'wallet_transactions' => [ + 'class' => \lnpay\fixtures\WalletTransactionFixture::class, + ], + 'user_access_key' => [ + 'class' => \lnpay\fixtures\UserAccessKeyFixture::class, + ] + ]; + } + + public function _before(ApiTester $I) + { + } + + public function _after(ApiTester $I) + { + } + + public function walletListTransactionsSuccess(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'sak_KkKkKkKkKkneieivTI05Fm3YzTza4N'); + $I->sendGET('/v1/wallet-transactions'); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::OK); + $I->seeResponseIsJson(); + $I->seeResponseContains('"id":"wtx_TransferIntoCarol"'); + $I->seeResponseContains('"id":"wtx_TransferIntoBob"'); + } + + public function walletListTransactionsFailPak(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'pak_HgiUO4kskfneieivTI05Fm3YzTza4N'); + $I->sendGET('/v1/wallet-transactions'); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::UNAUTHORIZED); + $I->seeResponseIsJson(); + } + + + public function walletListTransactionsFilterSuccessWalletId(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'sak_KkKkKkKkKkneieivTI05Fm3YzTza4N'); + $I->sendGET('/v1/wallet-transactions?wallet_id=wal_testCarolTransactions'); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::OK); + $I->seeResponseIsJson(); + $I->dontSeeResponseContains('"id":"wtx_TransferIntoBob"'); + $I->seeResponseContains('"id":"wtx_TransferIntoCarol"'); + } + + public function walletListTransactionsFilterFailWalletId(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'sak_KkKkKkKkKkneieivTI05Fm3YzTza4N'); + $I->sendGET('/v1/wallet-transactions?wallet_id=wal_carolTransactions'); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::UNAUTHORIZED); + $I->seeResponseIsJson(); + } +} diff --git a/tests/api/wallet/WalletTransferCest.php b/tests/api/wallet/WalletTransferCest.php new file mode 100644 index 00000000..1a96c207 --- /dev/null +++ b/tests/api/wallet/WalletTransferCest.php @@ -0,0 +1,153 @@ + [ + 'class' => UserFixture::class, + ], + 'wallets' => [ + 'class' => \lnpay\fixtures\WalletFixture::class, + ], + 'wallet_transactions' => [ + 'class' => \lnpay\fixtures\WalletTransactionFixture::class, + ], + 'user_access_key' => [ + 'class' => \lnpay\fixtures\UserAccessKeyFixture::class, + ] + ]; + } + + public function _before(ApiTester $I) + { + + } + + public function _after(ApiTester $I) + { + + } + + public function walletTransferSuccess(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'sak_KkKkKkKkKkneieivTI05Fm3YzTza4N'); + $I->sendPOST('/v1/wallet/wal_testCarolTransactions/transfer',[ + 'dest_wallet_id'=>'wal_carolTransfer1', + 'lnPayParams'=>'{"myData":"isHere"}', + 'passThru'=>'{"myOtherData":"isHere"}', + 'num_satoshis'=>3 + ]); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::CREATED); + $I->seeResponseIsJson(); + $I->seeResponseContains('wtx_transfer_in'); + $I->seeResponseContains('wtx_transfer_out'); + $I->seeResponseContains('"num_satoshis":3'); + $I->seeResponseContains('"num_satoshis":-3'); + $I->seeResponseContains('"myData":"isHere"'); + $I->seeResponseContains('"myOtherData":"isHere"'); + } + + public function walletTransferFailPak(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'pak_HgiUO4kskfneieivTI05Fm3YzTza4N'); + $I->sendPOST('/v1/wallet/wal_testCarolTransactions/transfer',[ + 'dest_wallet_id'=>'wal_carolTransfer1', + 'passThru'=>'"myData":"isHere"', + 'num_satoshis'=>3 + ]); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::UNAUTHORIZED); + $I->seeResponseIsJson(); + } + + public function walletTransferSuccessWaka(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'pak_HgiUO4kskfneieivTI05Fm3YzTza4N'); + $I->sendPOST('/v1/wallet/waka_carolTransfer2/transfer',[ + 'dest_wallet_id'=>'wal_carolTransfer1', + 'lnPayParams'=>'{"myData":"isHere"}', + 'passThru'=>'{"myOtherData":"isHere"}', + 'num_satoshis'=>3 + ]); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::CREATED); + $I->seeResponseIsJson(); + $I->seeResponseContains('wtx_transfer_in'); + $I->seeResponseContains('wtx_transfer_out'); + $I->seeResponseContains('"num_satoshis":3'); + $I->seeResponseContains('"num_satoshis":-3'); + $I->seeResponseContains('"myData":"isHere"'); + $I->seeResponseContains('"myOtherData":"isHere"'); + } + /* + * THIS TEST IS COMMENTED OUT BECAUSE REFERENCING DEST_WALLET_ID WITH A KEY IS NOT SUPPORTED + public function walletTransferSuccessWakaWaka(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'pak_HgiUO4kskfneieivTI05Fm3YzTza4N'); + $I->sendPOST('/v1/wallet/waka_carolTransfer1/transfer',[ + 'dest_wallet_id'=>'waka_carolTransfer1', + 'lnPayParams'=>'{"myData":"isHere"}', + 'passThru'=>'{"myOtherData":"isHere"}', + 'num_satoshis'=>3 + ]); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::CREATED); + $I->seeResponseIsJson(); + $I->seeResponseContains('wtx_transfer_in'); + $I->seeResponseContains('wtx_transfer_out'); + $I->seeResponseContains('"num_satoshis":3'); + $I->seeResponseContains('"num_satoshis":-3'); + $I->seeResponseContains('"myData":"isHere"'); + $I->seeResponseContains('"myOtherData":"isHere"'); + }*/ + + public function walletTransferFailWakr(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'pak_HgiUO4kskfneieivTI05Fm3YzTza4N'); + $I->sendPOST('/v1/wallet/wakr_carolTransfer1/transfer',[ + 'dest_wallet_id'=>'wal_carolTransfer1', + 'passThru'=>'"myData":"isHere"', + 'num_satoshis'=>3 + ]); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::UNAUTHORIZED); + $I->seeResponseIsJson(); + } + + public function walletTransferFailWaki(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'pak_HgiUO4kskfneieivTI05Fm3YzTza4N'); + $I->sendPOST('/v1/wallet/waki_carolTransfer1/transfer',[ + 'dest_wallet_id'=>'wal_carolTransfer1', + 'passThru'=>'"myData":"isHere"', + 'num_satoshis'=>3 + ]); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::UNAUTHORIZED); + $I->seeResponseIsJson(); + } + + public function walletTransferFailWaklw(\ApiTester $I) + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader('X-Api-Key', 'pak_HgiUO4kskfneieivTI05Fm3YzTza4N'); + $I->sendPOST('/v1/wallet/waklw_carolTransfer1/transfer',[ + 'dest_wallet_id'=>'wal_carolTransfer1', + 'passThru'=>'"myData":"isHere"', + 'num_satoshis'=>3 + ]); + $I->seeResponseCodeIs(\Codeception\Util\HttpCode::UNAUTHORIZED); + $I->seeResponseIsJson(); + } + + +} diff --git a/tests/bin/yii b/tests/bin/yii new file mode 100755 index 00000000..c06b0835 --- /dev/null +++ b/tests/bin/yii @@ -0,0 +1,33 @@ +#!/usr/bin/env php +safeLoad(); + +defined('YII_DEBUG') or define('YII_DEBUG', true); +defined('YII_ENV') or define('YII_ENV', 'test'); + +require __DIR__ . '/../../vendor/yiisoft/yii2/Yii.php'; +require(__DIR__ . '/../../src/LNPay.php'); + +$config = yii\helpers\ArrayHelper::merge( + require __DIR__ . '/../../config/main.php', + require __DIR__ . '/../../config/console.php', + [ + 'components' => [ + 'db' => require __DIR__ . '/../../config/test_db.php' + ] + ] +); + +$application = new yii\console\Application($config); +$exitCode = $application->run(); +exit($exitCode); diff --git a/tests/bin/yii.bat b/tests/bin/yii.bat new file mode 100644 index 00000000..d516b3a1 --- /dev/null +++ b/tests/bin/yii.bat @@ -0,0 +1,20 @@ +@echo off + +rem ------------------------------------------------------------- +rem Yii command line bootstrap script for Windows. +rem +rem @author Qiang Xue +rem @link http://www.yiiframework.com/ +rem @copyright Copyright (c) 2008 Yii Software LLC +rem @license http://www.yiiframework.com/license/ +rem ------------------------------------------------------------- + +@setlocal + +set YII_PATH=%~dp0 + +if "%PHP_COMMAND%" == "" set PHP_COMMAND=php.exe + +"%PHP_COMMAND%" "%YII_PATH%yii" %* + +@endlocal diff --git a/tests/fixtures/AuthAssignmentFixture.php b/tests/fixtures/AuthAssignmentFixture.php new file mode 100644 index 00000000..6a164a07 --- /dev/null +++ b/tests/fixtures/AuthAssignmentFixture.php @@ -0,0 +1,13 @@ +queue->push(new AnalyticsLogJob([ + 'userId' => 174, + 'eventName' => 'TestEvent', + 'params'=>[] + ])); + + expect_that($id); + + // Check whether the job is waiting for execution. + expect(\LNPay::$app->queue->isWaiting($id))->true(); + + \LNPay::$app->queue->run($repeat=false); + + //Since this event ships to amplitude...not much to test here + + // Check whether the job is waiting for execution. + expect(\LNPay::$app->queue->isDone($id))->true(); + } + +} \ No newline at end of file diff --git a/tests/functional/_bootstrap.php b/tests/functional/_bootstrap.php new file mode 100644 index 00000000..a4abe2da --- /dev/null +++ b/tests/functional/_bootstrap.php @@ -0,0 +1,2 @@ +- + bitcoind -server=1 -regtest=1 + -rpcauth=polaruser:5e5e98c21f5c814568f8b55d83b23c1c$$066b03f92df30b11de8e4b1b1cd5b1b4281aa25205bd57df9be82caf97a05526 + -debug=1 -zmqpubrawblock=tcp://0.0.0.0:28334 + -zmqpubrawtx=tcp://0.0.0.0:28335 -txindex=1 -dnsseed=0 -upnp=0 + -rpcbind=0.0.0.0 -rpcallowip=0.0.0.0/0 -rpcport=18443 -rest -listen=1 + -listenonion=0 -fallbackfee=0.0002 + volumes: + - './volumes/bitcoind/backend1:/home/bitcoin/.bitcoin' + expose: + - '18443' + - '18444' + - '28334' + - '28335' + ports: + - '18443:18443' + - '19444:18444' + - '28334:28334' + - '29335:28335' + networks: + lnpay-lms_public_net: + ipv4_address: 192.168.69.59 + alice: + image: 'polarlightning/lnd:0.13.0-beta' + container_name: polar-n4-alice + environment: + USERID: '${USERID:-1000}' + GROUPID: '${GROUPID:-1000}' + hostname: alice + command: >- + lnd --noseedbackup --trickledelay=5000 --alias=alice + --externalip=192.168.69.60 --tlsextradomain=alice + --tlsextradomain=polar-n4-alice --tlsextraip=192.168.69.60 + --listen=0.0.0.0:9735 --rpclisten=0.0.0.0:10009 --restlisten=0.0.0.0:8080 + --bitcoin.active --bitcoin.regtest --bitcoin.node=bitcoind + --bitcoind.rpchost=polar-n4-backend1 --bitcoind.rpcuser=polaruser + --bitcoind.rpcpass=polarpass + --bitcoind.zmqpubrawblock=tcp://polar-n4-backend1:28334 + --bitcoind.zmqpubrawtx=tcp://polar-n4-backend1:28335 + restart: always + volumes: + - './volumes/lnd/alice:/home/lnd/.lnd' + expose: + - '8080' + - '10009' + - '9735' + ports: + - '8080' + - '10009' + - '9735' + networks: + lnpay-lms_public_net: + ipv4_address: 192.168.69.60 + bob: + image: 'polarlightning/lnd:0.13.0-beta' + container_name: polar-n4-bob + environment: + USERID: '${USERID:-1000}' + GROUPID: '${GROUPID:-1000}' + hostname: bob + command: >- + lnd --noseedbackup --trickledelay=5000 --alias=bob + --externalip=192.168.69.61 --tlsextradomain=bob + --tlsextradomain=polar-n4-bob --tlsextraip=192.168.69.61 + --listen=0.0.0.0:9735 --rpclisten=0.0.0.0:10009 --restlisten=0.0.0.0:8080 + --bitcoin.active --bitcoin.regtest --bitcoin.node=bitcoind + --bitcoind.rpchost=polar-n4-backend1 --bitcoind.rpcuser=polaruser + --bitcoind.rpcpass=polarpass + --bitcoind.zmqpubrawblock=tcp://polar-n4-backend1:28334 + --bitcoind.zmqpubrawtx=tcp://polar-n4-backend1:28335 + restart: always + volumes: + - './volumes/lnd/bob:/home/lnd/.lnd' + expose: + - '8080' + - '10009' + - '9735' + ports: + - '8080' + - '10009' + - '9735' + networks: + lnpay-lms_public_net: + ipv4_address: 192.168.69.61 + carol: + image: 'polarlightning/lnd:0.13.0-beta' + container_name: polar-n4-carol + environment: + USERID: '${USERID:-1000}' + GROUPID: '${GROUPID:-1000}' + hostname: carol + command: >- + lnd --noseedbackup --trickledelay=5000 --alias=carol + --externalip=192.168.69.62 --tlsextradomain=carol + --tlsextradomain=polar-n4-carol --tlsextraip=192.168.69.62 + --listen=0.0.0.0:9735 --rpclisten=0.0.0.0:10009 --restlisten=0.0.0.0:8080 + --bitcoin.active --bitcoin.regtest --bitcoin.node=bitcoind + --bitcoind.rpchost=polar-n4-backend1 --bitcoind.rpcuser=polaruser + --bitcoind.rpcpass=polarpass + --bitcoind.zmqpubrawblock=tcp://polar-n4-backend1:28334 + --bitcoind.zmqpubrawtx=tcp://polar-n4-backend1:28335 + restart: always + volumes: + - './volumes/lnd/carol:/home/lnd/.lnd' + expose: + - '8080' + - '10009' + - '9735' + ports: + - '8080' + - '10009' + - '9735' + networks: + lnpay-lms_public_net: + ipv4_address: 192.168.69.62 + +networks: + lnpay-lms_public_net: + external: true \ No newline at end of file diff --git a/tests/polar-deprecated/export.json b/tests/polar-deprecated/export.json new file mode 100644 index 00000000..64a0ce69 --- /dev/null +++ b/tests/polar-deprecated/export.json @@ -0,0 +1,511 @@ +{ + "network":{ + "id":4, + "name":"LNPAY 0.13.0-beta", + "status":3, + "path":"/Users/timk/.polar/networks/4", + "nodes":{ + "bitcoin":[ + { + "id":0, + "networkId":4, + "name":"backend1", + "type":"bitcoin", + "implementation":"bitcoind", + "version":"0.21.0", + "peers":[ + + ], + "status":3, + "ports":{ + "rpc":18443, + "p2p":19444, + "zmqBlock":28334, + "zmqTx":29335 + }, + "docker":{ + "image":"", + "command":"" + } + } + ], + "lightning":[ + { + "id":0, + "networkId":4, + "name":"alice", + "type":"lightning", + "implementation":"LND", + "version":"0.13.0-beta", + "status":3, + "backendName":"backend1", + "paths":{ + "tlsCert":"/Users/timk/.polar/networks/4/volumes/lnd/alice/tls.cert", + "adminMacaroon":"/Users/timk/.polar/networks/4/volumes/lnd/alice/data/chain/bitcoin/regtest/admin.macaroon", + "invoiceMacaroon":"/Users/timk/.polar/networks/4/volumes/lnd/alice/data/chain/bitcoin/regtest/invoice.macaroon", + "readonlyMacaroon":"/Users/timk/.polar/networks/4/volumes/lnd/alice/data/chain/bitcoin/regtest/readonly.macaroon" + }, + "ports":{ + "rest":8081, + "grpc":10001, + "p2p":9735 + }, + "docker":{ + "image":"", + "command":" lnd\n --noseedbackup\n --trickledelay=5000\n --alias={{name}}\n --externalip=192.168.69.1\n --tlsextradomain={{name}}\n --tlsextradomain={{containerName}}\n --tlsextraip=192.168.69.1\n --listen=0.0.0.0:9735\n --rpclisten=0.0.0.0:10009\n --restlisten=0.0.0.0:8080\n --bitcoin.active\n --bitcoin.regtest\n --bitcoin.node=bitcoind\n --bitcoind.rpchost={{backendName}}\n --bitcoind.rpcuser={{rpcUser}}\n --bitcoind.rpcpass={{rpcPass}}\n --bitcoind.zmqpubrawblock=tcp://{{backendName}}:28334\n --bitcoind.zmqpubrawtx=tcp://{{backendName}}:28335" + } + }, + { + "id":1, + "networkId":4, + "name":"bob", + "type":"lightning", + "implementation":"LND", + "version":"0.13.0-beta", + "status":3, + "backendName":"backend1", + "paths":{ + "tlsCert":"/Users/timk/.polar/networks/4/volumes/lnd/bob/tls.cert", + "adminMacaroon":"/Users/timk/.polar/networks/4/volumes/lnd/bob/data/chain/bitcoin/regtest/admin.macaroon", + "invoiceMacaroon":"/Users/timk/.polar/networks/4/volumes/lnd/bob/data/chain/bitcoin/regtest/invoice.macaroon", + "readonlyMacaroon":"/Users/timk/.polar/networks/4/volumes/lnd/bob/data/chain/bitcoin/regtest/readonly.macaroon" + }, + "ports":{ + "rest":8082, + "grpc":10002, + "p2p":9736 + }, + "docker":{ + "image":"", + "command":" lnd\n --noseedbackup\n --trickledelay=5000\n --alias={{name}}\n --externalip=192.168.69.1\n --tlsextradomain={{name}}\n --tlsextradomain={{containerName}}\n --tlsextraip=192.168.69.1\n --listen=0.0.0.0:9735\n --rpclisten=0.0.0.0:10009\n --restlisten=0.0.0.0:8080\n --bitcoin.active\n --bitcoin.regtest\n --bitcoin.node=bitcoind\n --bitcoind.rpchost={{backendName}}\n --bitcoind.rpcuser={{rpcUser}}\n --bitcoind.rpcpass={{rpcPass}}\n --bitcoind.zmqpubrawblock=tcp://{{backendName}}:28334\n --bitcoind.zmqpubrawtx=tcp://{{backendName}}:28335" + } + }, + { + "id":2, + "networkId":4, + "name":"carol", + "type":"lightning", + "implementation":"LND", + "version":"0.13.0-beta", + "status":3, + "backendName":"backend1", + "paths":{ + "tlsCert":"/Users/timk/.polar/networks/4/volumes/lnd/carol/tls.cert", + "adminMacaroon":"/Users/timk/.polar/networks/4/volumes/lnd/carol/data/chain/bitcoin/regtest/admin.macaroon", + "invoiceMacaroon":"/Users/timk/.polar/networks/4/volumes/lnd/carol/data/chain/bitcoin/regtest/invoice.macaroon", + "readonlyMacaroon":"/Users/timk/.polar/networks/4/volumes/lnd/carol/data/chain/bitcoin/regtest/readonly.macaroon" + }, + "ports":{ + "rest":8083, + "grpc":10003, + "p2p":9737 + }, + "docker":{ + "image":"", + "command":" lnd\n --noseedbackup\n --trickledelay=5000\n --alias={{name}}\n --externalip=192.168.69.1\n --tlsextradomain={{name}}\n --tlsextradomain={{containerName}}\n --tlsextraip=192.168.69.1\n --listen=0.0.0.0:9735\n --rpclisten=0.0.0.0:10009\n --restlisten=0.0.0.0:8080\n --bitcoin.active\n --bitcoin.regtest\n --bitcoin.node=bitcoind\n --bitcoind.rpchost={{backendName}}\n --bitcoind.rpcuser={{rpcUser}}\n --bitcoind.rpcpass={{rpcPass}}\n --bitcoind.zmqpubrawblock=tcp://{{backendName}}:28334\n --bitcoind.zmqpubrawtx=tcp://{{backendName}}:28335" + } + } + ] + } + }, + "chart":{ + "offset":{ + "x":0, + "y":0 + }, + "nodes":{ + "backend1":{ + "id":"backend1", + "type":"bitcoin", + "position":{ + "x":200, + "y":400 + }, + "ports":{ + "backend":{ + "id":"backend", + "type":"top", + "position":{ + "x":100, + "y":0 + } + }, + "peer-left":{ + "id":"peer-left", + "type":"left", + "position":{ + "x":0, + "y":22 + } + }, + "peer-right":{ + "id":"peer-right", + "type":"right", + "position":{ + "x":200, + "y":22 + } + } + }, + "size":{ + "width":200, + "height":43 + }, + "properties":{ + "status":3, + "icon":"./static/media/bitcoin.c9f33461.svg" + } + }, + "alice":{ + "id":"alice", + "type":"lightning", + "position":{ + "x":420, + "y":180 + }, + "ports":{ + "empty-left":{ + "id":"empty-left", + "type":"left", + "position":{ + "x":0, + "y":19 + } + }, + "empty-right":{ + "id":"empty-right", + "type":"right", + "position":{ + "x":200, + "y":19 + } + }, + "backend":{ + "id":"backend", + "type":"bottom", + "position":{ + "x":100, + "y":85 + } + }, + "18fc650e480f":{ + "id":"18fc650e480f", + "type":"left", + "properties":{ + "nodeId":"alice" + }, + "position":{ + "x":0, + "y":43 + } + }, + "63f6769b203d":{ + "id":"63f6769b203d", + "type":"left", + "properties":{ + "nodeId":"alice", + "initiator":true + }, + "position":{ + "x":0, + "y":67 + } + }, + "59c718e187ee":{ + "id":"59c718e187ee", + "type":"right", + "properties":{ + "nodeId":"alice", + "initiator":true + }, + "position":{ + "x":200, + "y":43 + } + }, + "721d34d3d483":{ + "id":"721d34d3d483", + "type":"right", + "properties":{ + "nodeId":"alice" + }, + "position":{ + "x":200, + "y":67 + } + } + }, + "size":{ + "width":200, + "height":85 + }, + "properties":{ + "status":3, + "icon":"./static/media/lnd.095d2fef.png" + } + }, + "bob":{ + "id":"bob", + "type":"lightning", + "position":{ + "x":60, + "y":180 + }, + "ports":{ + "empty-left":{ + "id":"empty-left", + "type":"left", + "position":{ + "x":0, + "y":43 + } + }, + "empty-right":{ + "id":"empty-right", + "type":"right", + "position":{ + "x":200, + "y":19 + } + }, + "backend":{ + "id":"backend", + "type":"bottom", + "position":{ + "x":100, + "y":85 + } + }, + "18fc650e480f":{ + "id":"18fc650e480f", + "type":"right", + "properties":{ + "nodeId":"bob", + "initiator":true + }, + "position":{ + "x":200, + "y":43 + } + }, + "63f6769b203d":{ + "id":"63f6769b203d", + "type":"right", + "properties":{ + "nodeId":"bob" + }, + "position":{ + "x":200, + "y":67 + } + } + }, + "size":{ + "width":200, + "height":85 + }, + "properties":{ + "status":3, + "icon":"./static/media/lnd.095d2fef.png" + } + }, + "carol":{ + "id":"carol", + "type":"lightning", + "position":{ + "x":780, + "y":160 + }, + "ports":{ + "empty-left":{ + "id":"empty-left", + "type":"left", + "position":{ + "x":0, + "y":19 + } + }, + "empty-right":{ + "id":"empty-right", + "type":"right", + "position":{ + "x":200, + "y":43 + } + }, + "backend":{ + "id":"backend", + "type":"bottom", + "position":{ + "x":100, + "y":85 + } + }, + "59c718e187ee":{ + "id":"59c718e187ee", + "type":"left", + "properties":{ + "nodeId":"carol" + }, + "position":{ + "x":0, + "y":43 + } + }, + "721d34d3d483":{ + "id":"721d34d3d483", + "type":"left", + "properties":{ + "nodeId":"carol", + "initiator":true + }, + "position":{ + "x":0, + "y":67 + } + } + }, + "size":{ + "width":200, + "height":85 + }, + "properties":{ + "status":3, + "icon":"./static/media/lnd.095d2fef.png" + } + } + }, + "links":{ + "alice-backend1":{ + "id":"alice-backend1", + "from":{ + "nodeId":"alice", + "portId":"backend" + }, + "to":{ + "nodeId":"backend1", + "portId":"backend" + }, + "properties":{ + "type":"backend" + } + }, + "bob-backend1":{ + "id":"bob-backend1", + "from":{ + "nodeId":"bob", + "portId":"backend" + }, + "to":{ + "nodeId":"backend1", + "portId":"backend" + }, + "properties":{ + "type":"backend" + } + }, + "carol-backend1":{ + "id":"carol-backend1", + "from":{ + "nodeId":"carol", + "portId":"backend" + }, + "to":{ + "nodeId":"backend1", + "portId":"backend" + }, + "properties":{ + "type":"backend" + } + }, + "18fc650e480f":{ + "id":"18fc650e480f", + "from":{ + "nodeId":"bob", + "portId":"18fc650e480f" + }, + "to":{ + "nodeId":"alice", + "portId":"18fc650e480f" + }, + "properties":{ + "type":"open-channel", + "channelPoint":"00d65f82da170dd0230509460160708d56c12162e244a632fedc18fc650e480f:1", + "capacity":"1250000", + "fromBalance":"1239740", + "toBalance":"1210", + "direction":"ltr", + "status":"Open" + } + }, + "63f6769b203d":{ + "id":"63f6769b203d", + "from":{ + "nodeId":"alice", + "portId":"63f6769b203d" + }, + "to":{ + "nodeId":"bob", + "portId":"63f6769b203d" + }, + "properties":{ + "type":"open-channel", + "channelPoint":"4d14a3ca957e372dc39dc0114ac0bfa25a50556b4c9b4f416b1963f6769b203d:1", + "capacity":"1250000", + "fromBalance":"1240860", + "toBalance":"90", + "direction":"rtl", + "status":"Open" + } + }, + "59c718e187ee":{ + "id":"59c718e187ee", + "from":{ + "nodeId":"alice", + "portId":"59c718e187ee" + }, + "to":{ + "nodeId":"carol", + "portId":"59c718e187ee" + }, + "properties":{ + "type":"open-channel", + "channelPoint":"253cfad415b6236729ed50722a749ba2fb08810bcad45c69289859c718e187ee:1", + "capacity":"1250000", + "fromBalance":"1240700", + "toBalance":"250", + "direction":"ltr", + "status":"Open" + } + }, + "721d34d3d483":{ + "id":"721d34d3d483", + "from":{ + "nodeId":"carol", + "portId":"721d34d3d483" + }, + "to":{ + "nodeId":"alice", + "portId":"721d34d3d483" + }, + "properties":{ + "type":"open-channel", + "channelPoint":"1e8019bb5a9ee1424f01692bd7a51bb15b6745e4aef51c2da917721d34d3d483:1", + "capacity":"1250000", + "fromBalance":"1240862", + "toBalance":"88", + "direction":"rtl", + "status":"Open" + } + } + }, + "selected":{ + "type":"node", + "id":"carol" + }, + "hovered":{ + + }, + "scale":1 + } +} \ No newline at end of file diff --git a/tests/test_to_fix/node/NodeListenerTest.php b/tests/test_to_fix/node/NodeListenerTest.php new file mode 100644 index 00000000..069ba5f4 --- /dev/null +++ b/tests/test_to_fix/node/NodeListenerTest.php @@ -0,0 +1,60 @@ +user->login(User::findIdentity(147)); + $this->basePath = getenv('SUPERVISOR_CONF_PATH'); + } + + protected function _after() + { + + } + + public function testCreateLndRpcListenerObject() + { + expect_that($node = LnNode::findOne('lnod_test1')); + expect($n = NodeListener::createLndRpcListenerObject($node,NodeListener::LND_RPC_SUBSCRIBE_INVOICES)) + ->isInstanceOf(NodeListener::class); + + expect($n->delete())->equals(1); + } + + public function testCreateLndRpcListenerObjects() + { + expect_that($node = LnNode::findOne('lnod_test1')); + expect_that($config_filename = $node->getSupervisorConfFilename()); + expect(NodeListener::createLndRpcListenerObjects($node)) + ->count(sizeof(NodeListener::getAvailableSubscribeMethods())); + expect($f = file_get_contents($this->basePath.$config_filename))->notEquals(false); + expect($f)->contains('[program:'.$node->id.'--SubscribeInvoices'.']'); + } + + /* not sure what is going on here, but environment configuration is fucking this up + public function testUpdateLndRpcListenerObject() + { + expect($l = NodeListener::findOne('lnod_test1--SubscribeInvoices')); + expect($l->updateSupervisorParameters(['autostart'=>0])); + expect($f = file_get_contents($this->basePath.'lnod_test1.conf'))->notEquals(false); + expect($f)->contains('autostart = 0'); + expect(NodeListener::findOne('lnod_test1--SubscribeInvoices')->supervisor_parameters['autostart'])->equals(0); + //unlink($this->basePath.'lnod_test1.conf'); + }*/ + + +} diff --git a/tests/test_to_fix/wallet/LnNodeWalletTest.php b/tests/test_to_fix/wallet/LnNodeWalletTest.php new file mode 100644 index 00000000..26d9492d --- /dev/null +++ b/tests/test_to_fix/wallet/LnNodeWalletTest.php @@ -0,0 +1,75 @@ +user->login(User::findIdentity(147)); + $this->bobWallet = Wallet::findOne($this->bobWallet); + $this->aliceWallet = Wallet::findOne($this->aliceWallet); + } + /* + public function testLnWalletKeysendForm() + { + expect_that($model = new LnWalletKeysendForm()); + expect_that($model->dest_pubkey = $this->bobWallet->lnNode->default_pubkey); + expect_that($model->num_satoshis = 83); + expect_that($model->custom_records = [696969=>'hello']); + expect_that($model->wallet_id = 'wal_111111111111'); + expect_that($model->passThru = ['tim'=>2]); + expect_that($r = $model->processKeysend()); + expect_that($r = $r->toArray()); + expect($r)->hasKey('lnTx'); + expect($r)->contains(-83); + }*/ + + + public function testCreateInvoice() + { + expect_that($result = $this->bobWallet->generateLnInvoice(['num_satoshis'=>69])); + expect($result)->isInstanceOf(LnTx::class); + expect($result->num_satoshis)->equals(69); + } + + public function testPayInvoice() + { + $bobBalance = $this->bobWallet->balance; + expect_that($result = $this->aliceWallet->generateLnInvoice(['num_satoshis'=>69])); + expect($result)->isInstanceOf(LnTx::class); + expect($result->num_satoshis)->equals(69); + + expect_that($model = new LnWalletWithdrawForm()); + expect_that($model->wallet_id = 1111); + expect_that($model->payment_request = $result->payment_request); + expect($model->processWithdrawal())->isInstanceOf('lnpay\wallet\models\WalletTransaction'); + $model->walletObject->releaseMutex(); + expect($model->walletObject->balance)->equals($bobBalance-69); + + } + + + + + + +} diff --git a/tests/test_to_fix/wallet/WalletTest.php b/tests/test_to_fix/wallet/WalletTest.php new file mode 100644 index 00000000..5519c8e7 --- /dev/null +++ b/tests/test_to_fix/wallet/WalletTest.php @@ -0,0 +1,74 @@ +user->login(User::findIdentity(147)); + } + + public function testCreateWallet() + { + expect_that($w = new Wallet()); + expect_that($w->user_id = \LNPay::$app->user->id); + expect_that($w->user_label = 'Wallet 1'); + expect($w->save())->true(); + } + + public function testWalletPermissions() + { + expect_that($w = new Wallet()); + expect_that($w->user_id = \LNPay::$app->user->id); + expect_that($w->user_label = 'Wallet 2'); + expect($w->save())->true(); + + $auth = \LNPay::$app->authManager; + + expect($auth->checkAccess($w->getUserAccessKeys(UserAccessKeyBehavior::ROLE_WALLET_ADMIN)[UserAccessKeyBehavior::ROLE_WALLET_ADMIN][0],UserAccessKeyBehavior::ROLE_WALLET_ADMIN))->true(); + expect($auth->checkAccess($w->getUserAccessKeys(UserAccessKeyBehavior::ROLE_WALLET_INVOICE)[UserAccessKeyBehavior::ROLE_WALLET_INVOICE][0],UserAccessKeyBehavior::ROLE_WALLET_INVOICE))->true(); + expect($auth->checkAccess($w->getUserAccessKeys(UserAccessKeyBehavior::ROLE_WALLET_READ)[UserAccessKeyBehavior::ROLE_WALLET_READ][0],UserAccessKeyBehavior::ROLE_WALLET_READ))->true(); + + } + + public function testFindByKey() + { + expect_that($w = new Wallet()); + expect_that($w->user_id = \LNPay::$app->user->id); + expect_that($w->user_label = 'Wallet 3'); + expect($w->save())->true(); + + expect_that($key = $w->getFirstAccessKeyByRole(UserAccessKeyBehavior::ROLE_WALLET_ADMIN)); + + expect(Wallet::findByKey($key))->isInstanceOf('\lnpay\wallet\models\Wallet'); + } + + public function testCalculateBalance() + { + expect_that($w = Wallet::findOne(7)); + expect($w->calculateBalance())->equals(50); + } + + public function testUpdateBalance() + { + expect_that($w = Wallet::findOne(7)); + expect($w->updateBalance())->true(); + expect(Wallet::findOne(7)->balance)->equals(50); + } + + public function testGetIsEligibleToWithdraw() + { + expect_that($w = Wallet::findOne(7)); + expect($w->getIsEligibleToWithdraw(50))->true(); + expect($w->getIsEligibleToWithdraw(200))->false(); + } +} diff --git a/tests/test_to_fix/wallet/WalletTransactionTest.php b/tests/test_to_fix/wallet/WalletTransactionTest.php new file mode 100644 index 00000000..ae141a47 --- /dev/null +++ b/tests/test_to_fix/wallet/WalletTransactionTest.php @@ -0,0 +1,72 @@ +user->login(User::findIdentity(147)); + $this->bobNode = LnNode::findOne('lnod_bob'); + $this->aliceNode = LnNode::findOne('lnod_alice'); + $this->carolNode = LnNode::findOne('lnod_carol'); + } + + //@TODO: this test + public function testDetermineWtxType() + { + + } + + public function testCreateNetworkFeeTransactionNoFee() + { + $r = $this->carolNode->getLndConnector()->createInvoice(['value'=>10]); + $form = new LnWalletWithdrawForm(); + $form->payment_request = $r['payment_request']; + $form->wallet_id = 2222; // alice wallet + expect($wtx = $form->processWithdrawal()); + $resultTx = $wtx->createNetworkFeeTransaction(); + expect($resultTx)->isEmpty(); //should be null because there is no fee to process + $form->walletObject->releaseMutex(); + } + + public function testCreateNetworkFeeTransaction() + { + $r = $this->carolNode->getLndConnector()->createInvoice(['value'=>10]); + $form = new LnWalletWithdrawForm(); + $form->payment_request = $r['payment_request']; + $form->wallet_id = 1111; // bob wallet + $form->walletObject->releaseMutex(); + expect($wtx = $form->processWithdrawal()); + $resultTx = $wtx->createNetworkFeeTransaction(); + expect($resultTx)->isInstanceOf(WalletTransaction::class); + + expect($resultTx->num_satoshis)->equals((int) ceil($wtx->lnTx->fee_msat/1000)*-1); + } + + public function testCreateServiceFeeTransaction() + { + $r = $this->bobNode->getLndConnector()->createInvoice(['value'=>10]); + $form = new LnWalletWithdrawForm(); + $form->payment_request = $r['payment_request']; + $form->wallet_id = 1211; // carol wallet + expect($wtx = $form->processWithdrawal()); + $resultTx = $wtx->createServiceFeeTransaction(); + $form->walletObject->releaseMutex(); + expect($resultTx)->isEmpty(); //this user does not have any fees set + } +} diff --git a/tests/test_to_fix/wallet/WalletTransferFormTest.php b/tests/test_to_fix/wallet/WalletTransferFormTest.php new file mode 100644 index 00000000..31598d54 --- /dev/null +++ b/tests/test_to_fix/wallet/WalletTransferFormTest.php @@ -0,0 +1,80 @@ +user->login(User::findIdentity(147)); + } + + public function testInvalidWalletIds() + { + expect_that($model = new WalletTransferForm()); + expect_that($model->source_wallet_id = 'wa_invalid'); + expect_that($model->dest_wallet_id = 'LWAcasdfOt6i93WFh'); + expect($model->validate())->false(); + expect(HelperComponent::getFirstErrorFromFailedValidation($model))->equals("Invalid source wallet id"); + + expect_that($model = new WalletTransferForm()); + expect_that($model->source_wallet_id = 'LWAcasdfOt6i93WFh'); + expect_that($model->dest_wallet_id = 'wa_invalid'); + expect($model->validate())->false(); + expect(HelperComponent::getFirstErrorFromFailedValidation($model))->equals("Invalid dest wallet id"); + } + + public function testDifferentWallets() + { + expect_that($model = new WalletTransferForm()); + expect_that($model->source_wallet_id = 'w_asdfm3krm2k3mr23'); + expect_that($model->dest_wallet_id = 'w_asdfm3krm2k3mr23'); + expect($model->validate())->false(); + expect(HelperComponent::getFirstErrorFromFailedValidation($model))->equals("Source and destination wallets cannot be the same!"); + } + + public function testInsufficientBalance() + { + expect_that($model = new WalletTransferForm()); + expect_that($model->num_satoshis = 200); + expect_that($model->source_wallet_id = 'wal_LWAcZwCeDsezSfFe'); + expect_that($model->dest_wallet_id = 'LWAcasdfOt6i93WFh'); + expect($model->validate())->false(); + expect(HelperComponent::getFirstErrorFromFailedValidation($model))->equals("Insufficient balance in source wallet"); + } + + public function testInvalidJson() + { + expect_that($model = new WalletTransferForm()); + expect_that($model->num_satoshis = 1); + expect_that($model->source_wallet_id = 'wal_LWAcZwCeDsezSfFe'); + expect_that($model->dest_wallet_id = 'LWAcasdfOt6i93WFh'); + expect_that($model->lnPayParams = 'asd'); + expect($model->validate())->false(); + expect(HelperComponent::getFirstErrorFromFailedValidation($model))->equals("Invalid lnPayParams json specified"); + } + + public function testWalletTransferSuccess() + { + expect_that($model = new WalletTransferForm()); + expect_that($model->num_satoshis = 22); + expect_that($model->source_wallet_id = 'wal_LWAcZwCeDsezSfFe'); + expect_that($model->dest_wallet_id = 'LWAcasdfOt6i93WFh'); + expect($model->validate())->true(); + expect_that($result = $model->executeTransfer()); + expect($result)->hasKey('wtx_transfer_in'); + expect($result)->hasKey('wtx_transfer_out'); + } + + + + +} diff --git a/tests/unit.suite.yml b/tests/unit.suite.yml new file mode 100644 index 00000000..44b36826 --- /dev/null +++ b/tests/unit.suite.yml @@ -0,0 +1,13 @@ +# Codeception Test Suite Configuration + +# suite for unit (internal) tests. +# RUN `build` COMMAND AFTER ADDING/REMOVING MODULES. + +class_name: UnitTester +modules: + enabled: + - Asserts + - Yii2: + part: [orm, email, fixtures] + transaction: false + cleanup: true diff --git a/tests/unit/_bootstrap.php b/tests/unit/_bootstrap.php new file mode 100644 index 00000000..80cc72a4 --- /dev/null +++ b/tests/unit/_bootstrap.php @@ -0,0 +1,3 @@ + [ + 'class' => \lnpay\fixtures\UserFixture::class, + ], + 'wallets' => [ + 'class' => \lnpay\fixtures\WalletFixture::class, + ], + 'user_access_key' => [ + 'class' => \lnpay\fixtures\UserAccessKeyFixture::class, + ] + ]; + } + + public function test_user_created(\FunctionalTester $I) + { + $user = new User(); + $user->username = 'a777a@aa.com'; + $user->email = 'a777a@aa.com'; + $user->setPassword('a777a@aa.com'); + $user->generateAuthKey(); + $user->save(); + expect_that($event = new ActionEvent(['user'=>$user])); + expect_that($event->action_id = ActionName::USER_CREATED); + expect_that($event->userObject = $user); + ActionComponent::user_created($event); + } + +} diff --git a/tests/unit/components/node/LnMacaroonObjectTest.php b/tests/unit/components/node/LnMacaroonObjectTest.php new file mode 100644 index 00000000..0a8cb5de --- /dev/null +++ b/tests/unit/components/node/LnMacaroonObjectTest.php @@ -0,0 +1,99 @@ +equals(self::MAC_HEX); + } + + public function testGetHex() + { + $m = new LnMacaroonObject(self::MAC_HEX); + expect($m->hex)->equals(self::MAC_HEX); + + } + + public function testGetBase64() + { + $m = new LnMacaroonObject(self::MAC_HEX); + expect($m->base64)->equals(base64_encode($m->raw)); + } + + public function testGetBase64url() + { + $m = new LnMacaroonObject(self::MAC_HEX); + expect($m->base64url)->equals(HelperComponent::base64url_encode($m->raw)); + + } + + public function testGetRaw() + { + $m = new LnMacaroonObject(self::MAC_HEX); + expect($m->raw)->equals(hex2bin(self::MAC_HEX)); + } + + public function testGetPermissions() + { + $p = [ + 'address'=>['read'], + 'info'=>['read'], + 'invoices'=>['read'], + 'message'=>['read'], + 'offchain'=>['read'], + 'onchain'=>['read'], + 'peers'=>['read'], + 'signer'=>['read'] + ]; + $m = new LnMacaroonObject(self::MAC_HEX); + + expect($m->permissions)->equals($p); + } + + public function testGetAllowedPermissionsMap() + { + $p = [ + 'address'=>['read','write','generate'], + 'info'=>['read','write','generate'], + 'invoices'=>['read','write','generate'], + 'message'=>['read','write','generate'], + 'offchain'=>['read','write','generate'], + 'onchain'=>['read','write','generate'], + 'peers'=>['read','write','generate'], + 'signer'=>['read','write','generate'], + 'macaroon'=>['read','write','generate'], + ]; + + expect(LnMacaroonObject::getAllowedPermissionMap())->equals($p); + } + + public function testGetHasPerm() + { + $m = new LnMacaroonObject(self::MAC_HEX); + + expect($m->hasPerm('invoices','read'))->true(); + expect($m->hasPerm('invoices','write'))->false(); + } + + public function testGenerateLncliBakeCommand() + { + $m = new LnMacaroonObject(self::MAC_HEX); + expect($m->generateLncliBakeCommand())->equals('lncli bakemacaroon address:read info:read invoices:read message:read offchain:read onchain:read peers:read signer:read'); + } + + +} diff --git a/tests/unit/models/ChangePasswordFormTest.php b/tests/unit/models/ChangePasswordFormTest.php new file mode 100644 index 00000000..fbe61184 --- /dev/null +++ b/tests/unit/models/ChangePasswordFormTest.php @@ -0,0 +1,63 @@ + [ + 'class' => UserFixture::class, + ] + ]; + } + + /** + * Preset user session + */ + protected function _before() + { + \LNPay::$app->user->login(User::findIdentity(147)); + } + + + /** + * @return void + */ + public function testChangePassword(): void + { + $model = new ChangePasswordForm(); + $newPassword = 'abcdef'; + expect_that($model->newPassword = $newPassword); + expect_that($model->confirmNewPassword = $newPassword); + + // Current password is incorrect. + expect_that($model->currentPassword = '123451'); + expect($model->validate()) + ->false(); + codecept_debug(HelperComponent::getFirstErrorFromFailedValidation($model)); + expect(HelperComponent::getFirstErrorFromFailedValidation($model)) + ->equals("Current password is incorrect."); + + // Current password is correct. + expect_that($model->currentPassword = '123456'); + expect($model->validate()) + ->true(); + } +} \ No newline at end of file diff --git a/tests/unit/models/IntegrationWebhookRequestTest.php b/tests/unit/models/IntegrationWebhookRequestTest.php new file mode 100644 index 00000000..026da938 --- /dev/null +++ b/tests/unit/models/IntegrationWebhookRequestTest.php @@ -0,0 +1,83 @@ + [ + 'class' => \lnpay\fixtures\UserFixture::class, + ], + 'wallets' => [ + 'class' => \lnpay\fixtures\WalletFixture::class, + ], + 'lntx' => [ + 'class' => \lnpay\fixtures\LnTxFixture::class, + ], + 'user_access_key' => [ + 'class' => \lnpay\fixtures\UserAccessKeyFixture::class, + ], + 'wallet_lnurlpay' => [ + 'class' => \lnpay\fixtures\WalletLnurlpayFixture::class, + ] + ]; + } + + protected function _before() + { + expect_that($i = new IntegrationWebhook()); + expect_that($i->user_id = 147); + expect_that($i->endpoint_url = 'http://127.0.0.1'); + expect_that($i->action_name_id = ['default_all']); + expect($i->save())->true(); + } + + public function testWebhookRequest() + { + expect_that($u = User::findOne(147)); + expect_that($wallet = Wallet::findOne(6)); + + expect_that($actionFeedObject = $u->registerAction(ActionName::WALLET_CREATED,['wal'=>$wallet->toArray()])); + expect(IntegrationWebhookRequest::find()->where(['action_feed_id'=>$actionFeedObject->id])->exists())->true(); + } + + public function testPreparePayload() + { + expect_that($id = User::findOne(147)->registerAction(ActionName::USER_CREATED,['wallet'=>123])); + expect_that($testActionFeed = ActionFeed::findOne($id)); + + expect(IntegrationWebhookRequest::preparePayload($testActionFeed,['id'=>'id_1234']))->hasKey('id'); + } + + public function testPrepareRequest() + { + expect_that($id = User::findOne(147)->registerAction(ActionName::USER_CREATED,['wallet'=>123])); + expect_that($testActionFeed = ActionFeed::findOne($id)); + + expect(IntegrationWebhookRequest::preparePayload($testActionFeed,['id'=>'id_1234']))->hasKey('id'); + + expect_that($IW = IntegrationWebhook::findOne(5)); + expect(IntegrationWebhookRequest::prepareRequest($IW,$testActionFeed))->isInstanceOf(IntegrationWebhookRequest::class); + } + + public function testProcessResponse() + { + //@TODO: simulate guzzle response + } +} diff --git a/tests/unit/models/IntegrationWebhookTest.php b/tests/unit/models/IntegrationWebhookTest.php new file mode 100644 index 00000000..53253765 --- /dev/null +++ b/tests/unit/models/IntegrationWebhookTest.php @@ -0,0 +1,65 @@ + [ + 'class' => UserFixture::class, + ] + ]; + } + + protected function _before() + { + + } + + public function testAddWebhook() + { + expect_that($i = new IntegrationWebhook()); + expect_that($i->user_id = 147); + expect_that($i->endpoint_url = 'http://127.0.0.1'); + expect_that($i->action_name_id = ['default_all']); + expect($i->save())->true(); + } + + + public function testAddWebhookFailInvalidAction() + { + expect_that($i = new IntegrationWebhook()); + expect_that($i->user_id = 147); + expect_that($i->endpoint_url = 'http://127.0.0.1'); + expect_that($i->action_name_id = ['wrong_action']); + expect($i->save())->false(); + + $errorArray = ['action_name_id'=>['Invalid event: wrong_action']]; + expect($i->getErrors())->equals($errorArray); + } + + public function testAddWebhookFailNoArray() + { + expect_that($i = new IntegrationWebhook()); + expect_that($i->user_id = 147); + expect_that($i->endpoint_url = 'http://127.0.0.1'); + expect_that($i->action_name_id = 'www'); + expect($i->save())->false(); + + $errorArray = ['action_name_id'=>['Must supply array of event names']]; + expect($i->getErrors())->equals($errorArray); + } +} diff --git a/tests/unit/models/LoginFormTest.php b/tests/unit/models/LoginFormTest.php new file mode 100644 index 00000000..4bed79aa --- /dev/null +++ b/tests/unit/models/LoginFormTest.php @@ -0,0 +1,39 @@ +user->logout(); + } + + public function testLoginNoUser() + { + $this->model = new LoginForm([ + 'username' => 'not_existing_username', + 'password' => 'not_existing_password', + ]); + + expect_not($this->model->login()); + expect_that(\LNPay::$app->user->isGuest); + } + + public function testLoginWrongPassword() + { + $this->model = new LoginForm([ + 'username' => 'demo', + 'password' => 'wrong_password', + ]); + + expect_not($this->model->login()); + expect_that(\LNPay::$app->user->isGuest); + expect($this->model->errors)->hasKey('password'); + } + +} diff --git a/tests/unit/models/UserTest.php b/tests/unit/models/UserTest.php new file mode 100644 index 00000000..98884acb --- /dev/null +++ b/tests/unit/models/UserTest.php @@ -0,0 +1,91 @@ + [ + 'class' => UserFixture::class, + ], + 'user_access_keys' => [ + 'class' => UserAccessKeyFixture::class, + ], + ]; + } + + public function testFindUserById() + { + expect_that($user = User::findIdentity(147)); + expect($user->username)->equals('bandit'); + + expect_not(User::findIdentity(999)); + } + + public function testFindUserByAccessToken() + { + expect_that($user = User::findIdentityByAccessToken('THMbv7j1m-d3spjMUW0IAcSa281MeS1N')); + expect($user->username)->equals('bandit'); + + expect_not(User::findIdentityByAccessToken('non-existing')); + } + + public function testFindUserByUsername() + { + expect_that($user = User::findByUsername('bandit')); + expect_not(User::findByUsername('not-admin')); + } + + public function testValidateUser() + { + $user = User::findByUsername('bandit'); + expect_that($user->validateAuthKey('K3nF70it7tzNsHddEiq0BZ0i-OU8S3xV')); + expect_not($user->validateAuthKey('test102key')); + + expect_that($user->validatePassword('123456')); + expect_not($user->validatePassword('notpass')); + } + + public function testGetJsonData() + { + $user = User::findByUsername('jsonTester'); + + expect($user->getJsonData($user::DATA_LNURL_OTT))->equals('tester-ott'); + expect($user->getJsonData())->equals([$user::DATA_LNURL_OTT=>'tester-ott']); + } + + public function testAppendJsonData() + { + $user = User::findByUsername('jsonTester'); + + expect($user->appendJsonData(['append'=>'lenoir']))->equals([$user::DATA_LNURL_OTT=>'tester-ott','append'=>'lenoir']); + + expect($user->getJsonData('append'))->equals('lenoir'); + expect($user->getJsonData())->equals([$user::DATA_LNURL_OTT=>'tester-ott','append'=>'lenoir']); + } + + public function testDeleteJsonData() + { + $user = User::findByUsername('jsonTester'); + + $user->appendJsonData(['append'=>'lenoir']); + + expect($user->deleteJsonData(['append']))->true(); + + expect($user->getJsonData('append'))->null(); + expect($user->getJsonData())->equals([$user::DATA_LNURL_OTT=>'tester-ott']); + } + + + + + +} diff --git a/tests/unit/models/WalletCompressTest.php b/tests/unit/models/WalletCompressTest.php new file mode 100644 index 00000000..899e7612 --- /dev/null +++ b/tests/unit/models/WalletCompressTest.php @@ -0,0 +1,44 @@ + [ + 'class' => WalletTransactionFixture::class, + ] + ]; + } + + protected function _before() + { + + } + + public function testWalletCompress() + { + expect_that($w = Wallet::findOne(12)); + expect($w->compressTransactions())->equals([ + 'balance'=>100, + 'sum'=>100 + ]); + expect(WalletTransaction::find()->where(['wallet_id'=>12])->count())->equals(1); + } +} diff --git a/web/.htaccess b/web/.htaccess new file mode 100644 index 00000000..76a22a06 --- /dev/null +++ b/web/.htaccess @@ -0,0 +1,11 @@ +RewriteEngine on +RewriteCond %{REQUEST_FILENAME} !-d +RewriteCond %{REQUEST_FILENAME} !-f +RewriteRule . index.php [L] + +SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1 + + + Order deny,allow + Allow from all + \ No newline at end of file diff --git a/web/assets/.gitignore b/web/assets/.gitignore new file mode 100644 index 00000000..d6b7ef32 --- /dev/null +++ b/web/assets/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/web/css/sba.css b/web/css/sba.css new file mode 100644 index 00000000..998b6d5a --- /dev/null +++ b/web/css/sba.css @@ -0,0 +1,229 @@ + + +.bg-gradient-primary { + background-color: #6749f1 !important; + background-image: linear-gradient(180deg,#6749f1 10%,#224abe 100%) !important; +} + +.btn-primary { + background-color: #6749f1 !important; + border-color: #6749f1 !important; +} + +a { + +} + +.nav-flowchart-ico { + background-image: url("data:image/svg+xml,%3C%3Fxml version='1.0' encoding='iso-8859-1'%3F%3E%3C!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E%3Csvg version='1.1' id='Layer_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 475 475' style='enable-background:new 0 0 475 475;' xml:space='preserve'%3E%3Cg transform='translate(0 -540.36)'%3E%3Cg%3E%3Cg%3E%3Cpath d='M351.9,812.16H279c-4.1,0-7.5,3.4-7.5,7.5s3.4,7.5,7.5,7.5h72.9c4.2,0,7.5-3.4,7.5-7.5S356,812.16,351.9,812.16z'/%3E%3Cpath d='M467.5,580.16L467.5,580.16l-382.4-2.3c-2,0-4,0.8-5.4,2.3l-77.6,80.4c-1.3,1.4-2.1,3.3-2.1,5.2v304.6 c0,4.1,3.4,7.5,7.5,7.5H393c2.1,0,4-0.8,5.4-2.3l74.5-78.1c1.3-1.4,2.1-3.2,2.1-5.2v-304.6C475,583.56,471.7,580.26,467.5,580.16 z M382.4,962.86H15v-291.9h367.4v102.1H240.2c-4.1,0-7.5,3.4-7.5,7.5v78.1c0,4.1,3.4,7.5,7.5,7.5h142.2V962.86z M421.2,929.96 l-23.8,24.9v-93l23.8-23.2V929.96z M460,889.26l-23.8,24.9v-90.2l23.8-23.2V889.26z M460,779.76l-73.1,71.4H247.7v-63.1h142.2 c2,0,4-0.8,5.4-2.3l64.7-67.1V779.76z M460,697.16l-23.8,24.7v-97.4c0-4.1-3.4-7.5-7.5-7.5H116.1c-4.1,0-7.5,3.4-7.5,7.5 s3.4,7.5,7.5,7.5h305.1v104.2c0,0.4,0,0.8,0.1,1.2l-23.9,24.8v-98.6c0-4.1-3.4-7.5-7.5-7.5H27.4l60.8-63.2l371.8,2.3V697.16z'/%3E%3C/g%3E%3C/g%3E%3C/g%3E%3Cg%3E%3C/g%3E%3Cg%3E%3C/g%3E%3Cg%3E%3C/g%3E%3Cg%3E%3C/g%3E%3Cg%3E%3C/g%3E%3Cg%3E%3C/g%3E%3Cg%3E%3C/g%3E%3Cg%3E%3C/g%3E%3Cg%3E%3C/g%3E%3Cg%3E%3C/g%3E%3Cg%3E%3C/g%3E%3Cg%3E%3C/g%3E%3Cg%3E%3C/g%3E%3Cg%3E%3C/g%3E%3Cg%3E%3C/g%3E%3C/svg%3E%0A"); + background-repeat: no-repeat no-repeat; + background-position: center center; + background-size: cover; +} + +body, html { + height:100%; +} + +/* + * Off Canvas sidebar at medium breakpoint + * -------------------------------------------------- + */ +@media screen and (max-width: 992px) { + + .row-offcanvas { + position: relative; + -webkit-transition: all 0.25s ease-out; + -moz-transition: all 0.25s ease-out; + transition: all 0.25s ease-out; + } + + .row-offcanvas-left + .sidebar-offcanvas { + left: -33%; + } + + .row-offcanvas-left.active { + left: 33%; + margin-left: -6px; + } + + .sidebar-offcanvas { + position: absolute; + top: 0; + width: 33%; + height: 100%; + } +} + +/* + * Off Canvas wider at sm breakpoint + * -------------------------------------------------- + */ +@media screen and (max-width: 34em) { + .row-offcanvas-left + .sidebar-offcanvas { + left: -45%; + } + + .row-offcanvas-left.active { + left: 45%; + margin-left: -6px; + } + + .sidebar-offcanvas { + width: 45%; + } +} + +.card { + overflow:hidden; +} + +.card-body .rotate { + z-index: 8; + float: right; + height: 100%; +} + +.card-body .rotate i { + color: rgba(20, 20, 20, 0.15); + position: absolute; + left: 0; + left: auto; + right: -10px; + bottom: 0; + display: block; + -webkit-transform: rotate(-44deg); + -moz-transform: rotate(-44deg); + -o-transform: rotate(-44deg); + -ms-transform: rotate(-44deg); + transform: rotate(-44deg); +} + + + +:root { + --m6-tabs-bg: transparent; + --m6-tab-text: #888; + --m6-tab-bg: transparent; + --m6-tab-hover-text: #6749f1; + --m6-tab-hover-bg: transparent; +} + +section { + padding-top: 20px; + padding-bottom: 20px; +} + + + +#model_6 .tabs-container { + background: var(--m6-tabs-bg); + text-align: center; +} +#model_6 .nav-tabs { + border: 0; + position: relative; + display: -ms-flexbox; + display: -webkit-flex; + display: -moz-flex; + display: -ms-flex; + display: flex; + margin: 0 auto; + padding: 0; + list-style: none; + -ms-box-orient: horizontal; + -ms-box-pack: center; + -webkit-flex-flow: row wrap; + -moz-flex-flow: row wrap; + -ms-flex-flow: row wrap; + flex-flow: row wrap; + -webkit-justify-content: center; + -moz-justify-content: center; + -ms-justify-content: center; + justify-content: center; +} +#model_6 .nav .nav-item { + position: relative; + z-index: 1; + display: block; + margin: 0; + text-align: center; + -webkit-flex: 1; + -moz-flex: 1; + -ms-flex: 1; + flex: 1; +} +#model_6 .nav .nav-link::before { + position: absolute; + bottom: 1em; + left: 50%; + margin-left: -20px; + width: 40px; + height: 4px; + background: var(--m6-tab-hover-text); + content: ''; + opacity: 0; + -webkit-transition: -webkit-transform 0.2s ease-in; + transition: transform 0.2s ease-in; + -webkit-transform: scale3d(0,1,1); + transform: scale3d(0,1,1); +} +#model_6 .nav .nav-link { + border: 0; + outline: unset; + display: inline-block; + overflow: visible; + padding: 1em 0 2em; + color: var(--m6-tab-text); + line-height: 1; + -webkit-transition: color 0.3s cubic-bezier(0.7,0,0.3,1); + transition: color 0.3s cubic-bezier(0.7,0,0.3,1); +} +#model_6 .nav .nav-link:hover { + color: var(--m6-tab-hover-text); +} +#model_6 .nav .nav-link.active::before { + position: absolute; + bottom: 1em; + left: 50%; + margin-left: -60px; + width: 120px; + height: 4px; + background: var(--m6-tab-hover-text); + content: ''; + opacity: 0; + -webkit-transition: -webkit-transform 0.2s ease-in; + transition: transform 0.2s ease-in; + -webkit-transform: scale3d(0,1,1); + transform: scale3d(0,1,1); + opacity: 1; + -webkit-transform: scale3d(1,1,1); + transform: scale3d(1,1,1); +} +#model_6 .nav .nav-link.active, +#model_6 .nav .nav-link.active:hover { + background-color: var(--m6-tab-hover-bg); + color: var(--m6-tab-hover-text); +} +#model_6 .nav i { + speak: none; + -webkit-backface-visibility: hidden; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + font-size: 1.3em; + display: block; + margin: 0 0 0.35em; + opacity: 0; + -webkit-transition: -webkit-transform 0.2s, opacity 0.2s; + transition: transform 0.2s, opacity 0.2s; + -webkit-transform: translate3d(0,-100px,0); + transform: translate3d(0,-100px,0); + pointer-events: none; +} +#model_6 .nav .nav-link.active i { + opacity: 1; + -webkit-transform: translate3d(0,0,0); + transform: translate3d(0,0,0); +} \ No newline at end of file diff --git a/web/css/site.css b/web/css/site.css new file mode 100644 index 00000000..ab299a65 --- /dev/null +++ b/web/css/site.css @@ -0,0 +1,775 @@ +html, +body { + font-family: 'Open Sans', sans-serif !important; + position: relative; + min-height: 100%; + /* height: 100%; */ +} + +html { + display: flex; + flex-direction: column; +} + +body { + display: flex; + flex-direction: column; + flex: 1; +} + +h1, h2, h3, h4, h5, h6 { + font-family: 'Cabin', sans-serif !important; +} + +.navbar-nav > li > a { + font-family: 'Cabin', sans-serif !important; + color: hsl(215, 22%, 17%); +} + +/* CSS added by KayBeSee */ + +/* Header */ + +.navbar-header .navbar-toggle .icon-bar { + /* border: 1px solid #ffd28b !important; */ + background: #ffd28b; +} + +.navbar { + margin-bottom: 0px !important; + z-index: 10; +} + +.navbar-default { + background-color: #fff !important; + border-top: solid 5px #ffd28b; +} + +/* Sidebar */ +.paywalls-header { + display: grid; + grid-template-columns: 2fr 1fr; + margin-bottom: 24px; + justify-content: center; + align-items: center; +} + +@media(max-width:768px) { + .paywalls-header { + grid-template-columns: 1fr 1fr; + } +} + +.sidebar-layout { + display: grid; + grid-template-columns: minmax(0, 1fr); + grid-template-areas: + "sidebar" + "content"; + grid-gap: 50px; + /* padding: 25px; */ + height: 90%; +} + +.sidebar { + grid-area: sidebar; + background: #fff; + border: 1px solid #e7e7e7; + display: grid; + grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); + border-radius: 4px; +} + +@media (min-width: 700px) { + .sidebar-layout { + grid-template-columns: minmax(0, 1fr) minmax(0, 3fr); + grid-template-areas: + "sidebar content" + } + + .sidebar { + display: flex; + flex-direction: column; + } +} + +.sidebar-item-top { + background: #ff9810; + color: #fff !important; +} + +.sidebar a { + height: 75px; + list-style: none; + display: flex; + flex-direction: row; + justify-content: left; + padding: 25px; + align-items: center; + color: rgb(51, 51, 51); +} + +.sidebar a:hover { + text-decoration: none; +} + +.sidebar a:active { + background: #FFE6BF; +} + +.sidebar a.active:active { + background: #FFE6BF; +} + +.sidebar a img { + padding-right: 15px; +} + +.sidebar a.active { + background: #ffd28b; +} + +.wallet-content { + grid-area: content; + /* padding: 24px 46px; */ +} + +.wallet-content-item { + background: #fff; + border: 1px solid #e7e7e7; + border-radius: 4px; +} + +.wallet-content-item table { + margin-bottom: 0px; +} + +#withdrawForm { + display: grid; + /* row-gap: 25px; */ + /* grid-template-columns: minmax(0, 3fr) minmax(0, 1fr); */ +} + +.wallet-loop-container { + display: grid; + grid-template-columns: minmax(0px, 1fr) minmax(0px, 1fr); + grid-template-rows: 175px 175px; + grid-template-areas: + "balance withdraw" + ". deposit" + ". transfer"; + padding: 32px; + box-shadow: 0 1px 3px hsla(0, 0%, 0%, .2); +} + +.wallet-balance-container { + display: grid; + grid-template-columns: minmax(0px, 1fr) minmax(0px, 1fr); + grid-template-rows: 50px 50px; + grid-template-areas: + "balance withdraw" + ". deposit" + ". transfer"; + padding: 32px; + box-shadow: 0 1px 3px hsla(0, 0%, 0%, .2); +} + +#withdraw-details,#deposit-details, #transfer-details { + margin-top: 25px; + background: rgb(227, 233, 237); + padding: 12px 24px; + border: 1px solid rgb(231, 231, 231); + border-radius: 4px; +} + +.balance-area { + grid-area: 'balance'; +} + +.balance-area h1, h4 { + margin-top: 0px; + margin-bottom: 0px; +} + +.widthdraw-area { + grid-area: 'withdraw'; + display: flex; +} + +.deposit-area { + grid-area: 'deposit'; + display: flex; + +} + +.close:focus { + outline: none !important; +} + +/* Homepage */ +.crazy-shit-container { + height: 100vh; + width: 100%; + position: absolute; + overflow: hidden; + background: #fff; +} + +.crazy-shit { + overflow: hidden; + -webkit-transform: skewY(20deg); + transform: skewY(20deg); + -webkit-transform-origin: 0; + transform-origin: 0; + background: linear-gradient(150deg,#ff9810 15%,#ffd28b 70%,#ffd28b 94%); + position: absolute; + height: 175vh; + width: 100%; + top: -125vh; + z-index: 0; +} + +.main-message { + color: hsl(215, 22%, 17%); + margin-bottom: 32px; +} + + +.front-page-content { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); + /* grid-auto-rows: minmax(400px, auto); */ + grid-column-gap: 25px; + grid-column-gap: 50px; + align-content: center; + position: relative; + height: 100vh; +} + +.paywall-prompt-container { + display: flex; + justify-content: center; + flex: 1; + align-items: center; + flex-direction: column; +} + +.paywall-prompt-container .paywall-prompt { + max-width: 686px; + flex: 1; + border-radius: 4px; + border: 1px solid rgb(236, 239, 241); + padding: 16px; + background: #fff; + box-shadow: 0 1px 3px hsla(0, 0%, 0%, .2); + width: 100%; +} + +.paywall-prompt-memo-value-container { + display: grid; + grid-template-columns: 1fr auto; + column-gap: 32px; +} + +.paywall-prompt-container .paywall-prompt form { + display: flex; + flex-direction: column; +} + +.paywall-prompt-container .paywall-prompt .paywall-prompt-memo-value-container .form-group { + margin-bottom: 0px; +} + +.paywall-prompt-container .paywall-prompt form .form-group label:first { + display: none; +} + +.paywall-advanced-options-expander { + font-size: 10px; + align-self: flex-end; + margin-bottom: 15px; +} + +#withdrawForm label.control-label { + color: #777777; +} + +.secondary-button { + width: 100%; + padding: 12px 16px; + border: none; + /* border-shadow: 0 1px 3px hsla(0,0%,0%,.2); */ + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + background: hsl(0, 100%, 100%); + color: rgb(51, 51, 51); + margin-top: 12px; + border: 1px solid #e3e9ed; +} + +.secondary-button:active { + background: hsl(207, 22%, 90%); + /* background: hsl(210, 17%, 98%); */ +} + +.secondary-button:active, :focus { + outline: none !important; +} + +#manual-payment-info { + margin-top: 12px; + background-color: #eeeeee; + border: 1px solid #ccc; + border-radius: 4px; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + padding: 5px; +} + +#manual-payment-info textarea { + border: none; + box-shadow: none; +} + +.invoice-ta { + resize: none; +} + +.lnurl-button:active { + background: hsl(0, 0%, 97%); + border-radius: 4px; + border: 1px solid rgb(231, 231, 231); +} + +.lnurl-button:active, .lnurl-button:focus { + outline: 0; +} + +.lnurl-modal-body { + display: flex; + flex-direction: column; + align-items: center; + color: #777777; +} + +.styled-button-success { + width: 100%; + padding: 12px 16px; + border: none; + /* border-shadow: 0 1px 3px hsla(0,0%,0%,.2); */ + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + background: hsl(139, 50%, 45%); + color: #fff; +} + +.styled-button-success:hover { + text-decoration: none; + color: #fff; +} + +.styled-button-success:active { + background: hsl(139, 58%, 30%); +} + +.styled-button-success:active, .styled-button-success:focus { + outline: 0; + text-decoration: none; + color: hsl(139, 50%, 45%); +} + +.withdraw-collapse-button, .deposit-collapse-button, .transfer-collapse-button { + background: #fff; + border: 2px solid hsl(139, 50%, 45%); + color: hsl(139, 58%, 30%); +} + +button.withdraw-collapse-button.collapsed, +button.deposit-collapse-button.collapsed, +button.transfer-collapse-button.collapsed { + background: hsl(139, 50%, 45%); + color: #fff !important; +} + +.front-page-descriptions { + padding: 50px 0; +} + +.front-page-description-item { + margin-bottom: 50px; +} + +.front-page-final-section { + min-height: 50vh; + background: #ffd28b; + display: flex; + justify-content: center; + align-items: center; + flex-direction: column; +} + +/* Login Page */ + +.site-login { + height: 100%; + display: grid; + background-color: rgb(249, 249, 249); + grid-template-columns: minmax(auto, 500px); + grid-template-rows: auto; + margin: auto auto; + justify-content: center; + align-items: center; +} + +.site-login-container { + max-height: 75vh; + display: flex; + flex-direction: column; + text-align: center; +} + +section.login { + background-color: rgb(255, 255, 255); + border-radius: 4px; + box-shadow: 0 1px 3px hsla(0,0%,0%,.2); + border: 1px solid #f0f1f2; + padding: 24px 24px; + margin: 24px 0px; +} + +.login-btn { + cursor: pointer; + padding: 12px 12px; + margin: 0px 0px; + border-radius: 4px; + border: none; + color: #fff; + background-color: hsl(139,50%,45%); + border-color: hsl(139,50%,45%); + box-shadow: 0 1px 3px hsla(0,0%,0%,.2); + width: 100%; + outline: 0 !important; +} + +.login-btn:hover { + background-color: hsl(139,50%,45%); +} + +.login-btn:active { + background-color: hsl(139, 58%, 30%) !important; +} + +.login-btn:focus { + background-color: hsl(139, 58%, 30%) !important; +} + +/* Paywall Page */ + +.paywall-content { + background: #ffd28b; + height: 92%; + display: flex; + justify-content: center; + align-items: center; + flex-direction: column; +} + +.paywall-content-nf { + /*background: #fff;*/ + height: 100%; + display: flex; + justify-content: center; + align-items: center; + flex-direction: column; +} + +.paywall-container { + display: grid; + grid-template-columns: 1fr; + max-width: 750px; + background: #fff; + border-radius: 4px; + box-shadow: 0 1px 3px hsla(0, 0%, 0%, .2); + margin: 25px auto; + position: relative; + /* grid-template-rows: 1fr 1fr 1fr; */ +} + +.paywall-invoice-header { + background: #f5f5f5; + padding: 10px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid #ddd; + font-size: 12px; +} + +.powered-by-footer { + background: #ffd28b; + padding: 10px; + display: flex; + justify-content: space-between; + font-size: 10px; + color: rgb(51, 51, 51); + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + box-shadow: inset 0 1px 3px hsla(0, 0%, 0%, .2); +} + +.paywall-information { + display: flex; + flex-direction: column; + padding: 25px; +} + + +/* .help-icon { + position: absolute; + top: 7px; + right: 7px; + width: 24px; +} */ + +.paywall-buttons { + display: flex; + flex-direction: column; +} + +.paywall-qr { + background: #fff; + border-radius: 4px; + /* box-shadow: 0 1px 3px hsla(0, 0%, 0%, .2); */ + display: flex; + justify-content: center; + align-items: center; +} + +@media(max-width:768px) { + .paywalls-table tbody tr { + display: grid; + grid-template-columns: 1fr 1fr 1fr; + border-top: 1px solid #ddd; + /* grid-template-areas: + "memo" + "sats-earned" + "usage" + "actions"; */ + } + + .paywalls-table tbody td { + border-top: none !important; + } + + .memo-data { + grid-column-start: 1; + grid-column-end: 5; + } + + .success-data { + grid-area: "sats-earned"; + align-self: center; + } + .usage-data { + grid-area: "usage"; + align-self: center; + } + .action-data { + grid-area: "actions"; + align-self: center; + } + .layout-data { + grid-area: "layout"; + align-self: center; + } +} + +tr.table-header th { + background: #f2f5f7; + padding: 12px !important; + border-bottom: 2px solid #e3e9ed !important; +} + +span.table-memo { + font-weight: bold; +} + +a.view-paywall-link:active, a.view-paywall-link:visited, a.view-paywall-link:focus { + color: #566776; + text-decoration: none; +} + +td.number { + text-align: right; +} + +.table > thead > tr > th, .table > tbody > tr > th, .table > tfoot > tr > th, .table > thead > tr > td, .table > tbody > tr > td, .table > tfoot > tr > td { + vertical-align: middle; +} + +.alert { + padding: 6px; +} + +/* END CSS ADDED BY KAYBESEE */ + +.wrap { + background-color: rgb(249, 249, 249); + min-height: 100%; + height: 100%; + /* margin: 0 auto -60px; */ + /* padding: 0 0 60px; */ + flex: 1; + display: flex; + flex-direction: column; +} + +.site-index .wrap { + display: block; +} + +.wrap > .container { + padding: 20px 15px 20px; + height: 100%; +} + +.wrap > .container > .site-index, .wrap > .container > .site-index > .body-content { + height: 100%; +} + +/* .wrap > .container > .site-index > .body-content { + display: flex; +} + +.wrap > .container > .site-index > .body-content #expirationlink-destination_url { + display: flex; +} */ + +.footer { + background-color: #f5f5f5; + border-top: 1px solid #ddd; + padding: 20px; +} + +.footer-container { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); + grid-gap: 12px; + /* align-items: center; */ +} + +.jumbotron { + text-align: center; + background-color: transparent; +} + +.jumbotron .btn { + font-size: 21px; + padding: 14px 24px; +} + +.not-set { + color: #c55; + font-style: italic; +} + +/* add sorting icons to gridview sort links */ +a.asc:after, a.desc:after { + position: relative; + top: 1px; + display: inline-block; + font-family: 'Glyphicons Halflings'; + font-style: normal; + font-weight: normal; + line-height: 1; + padding-left: 5px; +} + +a.asc:after { + content: /*"\e113"*/ "\e151"; +} + +a.desc:after { + content: /*"\e114"*/ "\e152"; +} + +.sort-numerical a.asc:after { + content: "\e153"; +} + +.sort-numerical a.desc:after { + content: "\e154"; +} + +.sort-ordinal a.asc:after { + content: "\e155"; +} + +.sort-ordinal a.desc:after { + content: "\e156"; +} + +.grid-view th { + white-space: nowrap; +} + +.hint-block { + display: block; + margin-top: 5px; + color: #999; +} + +.error-summary { + color: #a94442; + background: #fdf7f7; + border-left: 3px solid #eed3d7; + padding: 10px 20px; + margin: 0 0 15px 0; +} + +/* align the logout "link" (button in form) of the navbar */ +.nav li > form > button.logout { + padding: 15px; + border: none; +} + +@media(max-width:767px) { + .nav li > form > button.logout { + display:block; + text-align: left; + width: 100%; + padding: 10px 15px; + } +} + +.nav > li > form > button.logout:focus, +.nav > li > form > button.logout:hover { + text-decoration: none; +} + +.nav > li > form > button.logout:focus { + outline: none; +} + + +.loader { + border: 16px solid #ffffff; /* Light grey */ + border-top: 16px solid #3498db; /* Blue */ + border-radius: 50%; + width: 120px; + height: 120px; + animation: spin 2s linear infinite; +} + +@keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } +} + +form div.required label.control-label:after { + content:" * "; + color:red; + +} \ No newline at end of file diff --git a/web/favicon.ico b/web/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..e3f5c3e885b6218ceb2d0ae027828d9ec867403b GIT binary patch literal 15406 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
  • #7i1>K7HC1Yd)Lp ze0n8(G0JBFzi;5TX!p*s9_Z)TDWopsi2%~O4t3lgXHq!yz9~|dV zPJ=>ns_Ag1oHQ?BTJTym4>i4?E^<}%0eN9m)v)^h@ecD5NTB&g^ielH%jvi9kh&aY za=CVGQR(2y(mCANMEe)gGpJLF4d_Y27Ob|ARvm3EZmQCH%@B(q?%`$Cj9v~Y) zlOsp0i3G&-3UyhWZS<}4EzO-{a0N5OVK*hj6w=)aK~hA&7R>ja{UvN;NwrZ-(c}?u z^F>68{Z_()?6seGpZHrcV~bnxc|gX_85Ur_IGBzLm-bX#6?_oisB!7@#g&i@Ziheq zqDR~7cs#OGjS=2XTZ6}^xj1I~gg&kLS5B+0uvNA3vJtkf9-0Ya?@S;3B#6HU@{R~aS#JzUf_QRXA1 ztk+?4Wfh7idL44q*7YvJ7yC=~jR*2wvNAMG*1n>vBQ2OvU8KPXNRMtdWAXXmFiz2V z&y)5ZhtB(DF0bvAfgS3{UAe?SdHTqw70RIu;sICt|~ z=92f?>oz#gi$HiOaGKN)T=_U5M@=b476!WA7VIQLR7LyY|F4SQp~4^7^ZQFQ{%g)oLUpKtQ4TCtoi`wOt~!?)RfYV5eIP_W~u z>=AYH;&}SK#sq^;Vu_g;RrAFAjimy3?90GAQ>v2UI4PkLh>G5e!PF2aE^ zvgn^*nvYUuHGbeKn&@OF8R5#n!~urn&FfvsI3~womf|4QJ3>NsD(cU7hvt%^x6{QE zM90aG{v|mNTTD!LJ{OrN7CbTWw2O15te#zPPL%LXcJo$cN%WHRoR&vP z`6_S4|MArEBtVdV+Xb}+r{wH zAI+)J2VVl5;-6~QDHgvmbIn?h7gxFUvAxUGoCKaIkMl;9l67!-@t*m%zUiesM1`HV zl_d&$>r*h7S3VD(sYku{vP;rCotEM%cevF%?B5^vtyXk)HJlMm%SX1URKNyYd%kwQ ze^}32uHNrl@7OU_tpq;&gU1bBEPGIaRES+DwI8Lt{9CeKv6x8T&jG5;49}d5`?QQm zl8(+jWjh7r1b)-o6ZbJsGm(TbT12|fb<=?OyTO15V2h?`)0|k(@bt^@%7yHrc+C6Q zNkc~gO>Z1SO6;(@r-pxfrZDbXVlW3?jc1&HB>Z&VdAKp1MwH7c)}WX}V5FG%P}xR6 z)h0YS<6}|>qL53Oqab&|I^Eb_2ZRc$VNkZTwPjv48$7k(Y%EJy@DMK}*VDCT;jv#n z*zr+9Oj{riO&jCqOWdKMAj%9LEj_xBF+Q74cauFBXTdpCa-R^zp;!6e;B~J*0QCRF73yBwyE0 zTj1mhP{;+vyU6wL4PL5n6fEyh7tcGWP3=5xqf#x_+Fki|>Bn|fl>Vi?aw(@*8vlJp z3q~;=mBn7wbLZ`+tT=3Gmitlhs@7wJ>+74yy3~{rzxt*(gT}}9maiw3n9#9N($X=+ zCkmCan7@QJJDCo>TYMZEHXj#KpPOWBjoDcPsSCfk9pe?-IB1x;DnOTjqKQcB`Gx54F*CT{@{jpGzg_I1Sb&52=H*vbCzAyNGK= zx~~n3c%*bMHJxU^qOtOF!X}*YkM-K3>uDJ>OJ=vp<|?lb!=*vx4UZv5g2L|NW4-9H zi~3D#-Z0W2hE#ocJxK@UIk4ku1nBYxi!u7cHUEZk72!r^Z^_1*7DQUU!wp2+h3KK6_EiWQ!PL%FX)Q!+@w0U=DP>s16lp z?`1j$c8TWK_U*b6#xD(kXZ@p#A{nkegpoIo+g24T$Nn0Ll00MOKq4vaf4ua3FQn5o^@mc6b%AEA zav-gm{qnC|yj(Xym>c>CGQu7zuq8s|ow7%LFz_yq-}26TA0+)Enpf(6)^}{p>n+;{}VpRP|h#`sF%#u{LYldX(Z$Ad@uDYTTHwkT$P7 zhv@(nIoS|p$>K9n7ob8pGHk`mipmQ3h#3CZ!Mh%=NQJd|8!-#)Zo8$=YDy(OR_SLm zoY}nQ)MAn!K3>El1wqW-0`P(IfqEN!|?37(Nr7dhpl+;j(S z9ar&dFW_S*JGS;Bu$O0ay@&TLP3yoLmz~srdw2?AfUz>YOP{wQIIspEF1`;Z3~sHM z#$bUlTCW;GM4~I?_}(K$Fkyv4Bbtu0 z>n(vK$5-40v*dPr>UM`Q1J@xeBnee)aXgB3Zs#RBA;qyg>{AT-m1pHj$%dYHQIay( zF|KWN?55%dl#h~+d#a&Fj(5~D-2@{6+xg5?HxU?xsbf33NAF2eYg(H18&$Q4XV}aW z8kNwEUzQ)~Z4@tjsMICny!Z@7Nl#CxuWkOkKFHUSs(wj^FMttY&g#b858^j6BuZXa z{aoW}+g-&C*<;_$!eGhy5ixvj^|XewQ;EImuF}Q82w|fC8f`+HlXC8c6;uBW+jG4~ zK?&V~is}2!r$5(jYk$02=&bWfKbL6_S$KB9Fe2A~{tIR8}N+Tm@N6fXC9Wo+Ln*N54 zrI`6Ke<;_A7oW0=-(#o7AA;a~PyDqYwj64>b~Dt*-V{Xjg%YISp-LT$l5h|heqQ`KIRzkXKH`Q(imCd6oQ{-bIq4|Z`#8B1F zvA62&DB(I{;mgWY{f_H@YefPEwsWXuhHxUU2QIyISQ@c*+(4kJdDMiG)?QOG8T+xo zE$2%)>d0`^`d!hEy1xNjqPxB}ij=w;GkQkkZ4vO;0%A@3=v-StWHLeQ>&Q#GSV|Km zq|Fy<`nnrDdXr}eI#u%X$uzXzSP_*Sy`0Fg5p->IUGGpx@W%S7Qn0M1ntBp#j~42o zxUCQ|v?1#NxxmIA!n8KYUrK$vs1CpUm%^ajTJ8_T*&L9RwS^p?yS*Wc;_Q?P*@@tX zI#Kk>djQi^Z*V#F_}%mopKyqbkW$O$sc<(sCnQmH#rj+p=MpS zf1bo*8(7D9t8aNr4@cjZY0P1OlH~ZFdh%AFP&Sqi^ouAOEg(Ot?NlG9@}McGp{B@e z+z&-(42%Mc8AGA%$*<5#OYA{l$=zl31s*=R* zX|jE+#HlT?xewm?&)xuuI)p*O?|MQrZQcGTR_uK6bmOI!;*3sGbZXb*JgPJS9c*sV z_bk$Yq9ZXj)eBwNdL*d0dHqK3s!T3OYX|tS2JwAG5pVZ9&RKMN_qfpI(x&+M=+M` zNA~x0+df`%{UNDXjKTfTgqqw~4Z&lN%vQafj$xYvE_CF@==8Me>d{@oVW1g?1sCjcfdHTm+7uGS^YkI z&AS>dtTT?mMT_@^c<;AkAhIey1wJ-1o0+WH+AazI(+h2AOI zE1=^6PB#t1cbO!ZS~&N_3f4|vo0D)g`r#*tYB58UQW7V57r>zS-yOL166PsaO&HhOwFO)`#7BcWebs9+ez>ZrQC|Is^Tmgt zC>nWV#$Cb__T)c3NL|^#O{6`lKNoS<_;!d{2i&V>-y){FW5_V1^xVsvVyIAQx-I)6 zi1KYK>2|yQSS<;UwlUY|%DNhGSSM%uvY4FRrwD}Cg9xR>qMn9PQ5$-_N*P1rnm6!m zOd(Tp<3yQ%e|`hsk)P%l8`8L z)S9MNkh#%o*MLlwc00V`@B`;i6PyiYvwYNLvQmW1AEWw;Fl(32wV zj;wQLrH(LNPML8R;AxRhLOD>P@vz_2McyAAx+jTIeU~06I7mwE)DK}xBp1fKev{llHzF5_;+_1%B?1Um-tE>SjgYRCm!JaF*)h7D#7~5+|9pLYMh8QF%C37h2Mm5O| z(?zxo4c%$4-%6U+(EF*7zi?qWwf73?Us;RnSUZ?~E4t_$MhHUk1(ob>CSpFOJt=ki zt5vhL3ZH3x^Fr0zD_&F4=G>K53WFmbDvnO1P@B&^iXS4yMILI|49vUe8q4L6D!j}I zjBw~dN_o95!#TX5#Jes!Jfgza{+rG1)vXqG z@*?$JAR(H}uGDRvAn}Exdv69tP|=}b|J-QaRiTpEp~p*xUhn>B*N+{{xU*_Wf!fT( z|M4suvSkRL-Co`VVf7Z*n_x0cNj}(vO2xD#>2XaJAA0E8 zzG!d@l)bXo-FSG)b|lsPIXW{#x+A3eK>2Q`giRKuxHPJX(+-2Q7bO`JL{MO`-aMyD z8RRVPe#U=(!%gF@){m-~?$BJRGwt@M{ms?uAAc;%AaemoXBZ&3dn{2^04Z?} zYWI4Z;DjL3Uv&h0!}0_P#C|V;unSy6+!lz@BU<3TKEx;GpLYnvi z4C4bVfYDx=kARgn2skH$$ORg}FtcZCCp^3oaMt3a4e3ujPVaqfusf^&G}JwIl8wja z%2?^#yk2cEZJ?I5_(bv#J!TY4ZhU)QbyA+3ftPO@y0_8f7zxxCof3{u3U$td$pzhNE4q;%* zB$j^;P|EI)^*`27H4MPRpsY*!07g7JL#nt{X4w8B0I>fdM7mptW!XsLKNChJbvwDf zPilMn^b5|jdI$8>tVejFhuoSiBH_P94$4J_LKQ^C#l@eGQ#f=!Fx{$IxGq=}=TH85 z%OBBE=W)3&!itmZ@~8B@bRoGMt^3POn6@+69}{q1c-GOA?xYMU09gJ0HTw_{VGLl+ z{laCw4DJ#F7>PnL{R2g1qyX%iAab>RY<~x!Qc{fJQfaV~5WpR#VBRzdXcGox!b^G| z3Q4mEI3cu!{oq3F_XjdjFqh#$xz~a8j7xs+48Tz+Kqeuz50rqw0h*PXkPAB?q!>UZ zhrDu;pspY~KneCJ3f@p|JRsBm6zH>Cqwmm1RB_NTtM6I=?8Shue_?Z3>y4FFwv=A- zHUh7AXGV0Jsvq6W;Tf+g4uoI5`U7}=sa$sLqel&km6yDk#B&{{nU)1!fMUNA12bl> zOxG6#a|KxVIzT)r^S|@tGcz$880xO8-q$ng( z+RldoetsIu9+=wBRp(#wwrb{yMR00Mw}Aa)o;6)!^gRW#O90H&|KgL_#-@iDAITp# z_FJ3}HjEPr6;tuD8XaovjqbA=47*_$i)wuHbru?Ie|v+Yq{h_Ogd=$6&QJz*?3SPG z6jW7J2Ny|@7c*^u#zW%j;jN@rF<1NP4Is^X-IQ7 z|8@48B5ndFAhppLKNoSc0Xf%TKggFbzZ5E5e+>cXI1`Y?yQX1*74^SouNj@_C>mLqf=0_anEElC-SzyzY)@`?s5{}5o6{Rb+xmdaBFqPx#F^?=t5d`d9^5i%tN zc|Rj$vMQ^P%7X%v7}CX(3E3qCA_;9B8zK-cup0SMRpx_WxsV%4@2#n#5+x^lGfNv& z06;n-MH5;}bqp(4M@7aW5JnodJ3^&c7PdeFC7x~-MuwzdC>}-poN0ot%?%X{zk{yu z_y<6n{`3cS|K$&&$a0!9qyEtGEDWuck1g+Q{%!83PhRI~|M47ec3^-4q9Watge%ye zB#b}*$VIi1R2H;~nF7FpeGue7``WWW^XnLdulJ!mX{seZ0_^j;5h375Pg) z79J6zMf~r{C~%y}D49-0oT}nNS+yq{=na*}F02dLHA@pNPl}YbKO$~@kDKw&foaGg zBwykmxLx6hd%Y4-YW{9j!c=%1;Xno(lFr^nUsAeuRq58jF^?T{&$k4*!%GhSsUL?4Ah126Hwm#Ktm#4lU>^5zkK?2Rt#<%tj?j92#1KI&EJQ=U z#N**g`BhH!}ikELzPRIxKAhKqGkr}Qa(KzeVgu^J3R*+)B*nw{= zu2_gYcVC=Fp{m7RpV>*vv8NDVbLVzVLA2vs*|)&eer=iRASp`Q&4?ucgx zHacLp{UX1i$c{VOySpy&!0bV{A5z@Yyn*&0{tOYOPDjgz^@CtCL?ex2NmBY=PGUn% zK$ab7ugbm4m>_L}b`i04Z7WAyVRyF&y zEzj<dVf>w_aHj{eo_Nwp8 zmKu2_6{f`{15QzS&yZ#E1zRI8Kq6|FCusYYkU z^bNY^-ph|UIo-OEo5*hRZi*K%=k1Tfj}MRTgvUrCNH0juNGk*pv4XL@vG@cVIZD)u z)CsE13#R6aYZKb%UH$FG7>3DLG-KuK%G|mZOg3qvXdO#BlWEU zxVh*8{?|4S@8<^>ly_Fwr#CG(3QsjRJtxLH=tqrB%+(Yg?SE$>_etLe8es3S2 z_wF|{H`@naF4-SEyKT069pF{q9$-4)d_e8MlfWz>e-J~Ehe)#sa!_>;WdBA`ULE1u z+WF==HfarML%bO26^~zbdp3H3mW8;5wuMf*pO%W2`s#;6<#pBd>va#zO!yiqH5qJz zasoZMz0*{ij~!vFeb>`-`<|lITp?QF??NI;eu;@f9jbiv5k;+UyLQpG(G;b$SVK<6 znxk7$jd2rkZ>D69Mt_G+BjWZp{~ZnG$s16}DXykmbFor5dj89y2&0ftv2IYfP2TU= zcc(3&tyJNoj>+I~pC49BQggI&#-nBAwe|k-wO==8P3^9DldZycFrxNWA)z{>$exkP ze{t-RbJBGJJr8?Ad(t^CbYtY%-1UiICn+yUoHwXH>dyp&RfT#F0}QSVR%8RRX_^X7 z!TtG>vqTPurXKD!OyHREZ0ct6SbFZxThGhy1m&#i^mLeTH-CpDdr!%mxWGPXjxlu{ z&nGKelJnyCVtw~!qTF!dBrd4F_0s^reV&Ga6nTY-3PS2yy z@M@&|S@{{p86SNSeb&lGm45xFYD)R3m#g%{7T!W8CFd0v4A;*!oUVGqq_xspd1CG; z?(KE7`jYzPnieB^N9*0?(T&8`oR6`ivW^R?jfqzOEz-5Qc6Ps`6TYjC4&Bnu)Rm%# z$k*IWRkzkF*v*B%JM(p>%+B^Nf^~}ZS8FpTLffmv&Akr+Gl8K&Ezs6TtVk)GWHF6+ zZ<*rqIa3u=gkht^cD6V6y!R8w`fddE0xG_X*T=WUi^i0rP;uDAS3;!U=DgX?Of=8# zm-)-6ays0+{++b2E1OS$;C-G|G@dt(&Om1KJ8fOP@4^dWXEJ%|+H~!Ep3K_k_7Ym% zSy^|T`?j}lwsw~o{~WES7tvJEL+pM%ExaTshAuXsjwTH{Edv9u$ zyZXcN<7xY_o6tk^aqIbG8d;Ed+E4D~*~H+GdcJIYCN@u}N8GoaKb@P0=3va@cQpVC zIx_>duaXcjtGc^YKnOTBdEix~41cxxExIFQ_@J#ssRuZRfg-U41I#(ZHJ~Etgj-(M z{QXT01za37_OKAoJ=v`}EbK=|-u>9wv1SKIGXi{45s{E=a0uSJ5UITJ1JGYi?@Cm{ zuWjl)qtTk(djZ?yy;OZ-Hl`T68bKu`ghB3k+1|J0js+b4)u`&hi)# zuk_kl`_Y#@|COygfV4iGE|lJNf^Ll68vIGxT(aJ63(JOv)zDR%qH$z_DTyY9sa zeL67rJQsSu9Hec+Gk5K5c^(ly4P)!K)%LvpF3KLG&igCRF(+=(|5w!fA9_;>bep4(@Lktt%r9)h+Ae7flNaa})ko-A{jK3&b|% zxi=SKO+@K4y-q7Oe^^%^bhuw#0!rQHTDSeq>^d)6iiz#JZX{34qQ5<^)=0$>*~M@! zI|NiDIOba-se$Jbx~-CCn4Vdkf2XhBkL5cpw;1;Scv!jo1<&NL^3z$qiLG_Z%X+0! zlbQRnZBLS3mHrrn>?{_F;CPhntPmz%bTD`6ezrVy(RDX%muXo#m$>e`C(MDQHhoQqY zAp(jo*?&dXy*>AvcL%@^wxZZvM-*BJZb7_o9>x#&Z2$zX-MTZo97-psPbZ$F7;f(m^Mv z(-e@Bp>h?4KANTX{j`kbr!aKa zvp+#zwYb%wL6IxV+`Xvld5|JvJM_KzFw?pNQ$wpCH0~~T$;y%^f5OPH+26XKwz8zz zNs;mEvWy~W|I$@f%_}P`5zl;k%I3eH6$@$ra%h#8yFad(yBkNdN=gX^q?fi4B>J{un?KA+Y0_H4Ls`&$2Q&oGkJ zX=duW7InXDKRRr&YnmQjQ_85|_x_@E`qHX%g?C>(!QfrmJw zvP9u_XKDU)41q&UXgw*-^5Q)F68L=H+XTg7uKz*}9`uhL zkZ&cV5-_l@OQeSo``#Mgw3a^l~)tl@{!A|)Y*9K+}DL>b~uR{uG>bj=<_U1jW8>G{&Z1CL|+8T!@ z@-Wz{jm^f#G?SI5Rlo2IB0il7XbwinU#^?1lXgK1BeNh!aiRtRTFC%)uE)P2Xz4_?>(S%& z=1Mg=r?_hZOPZ*zq2u!Fxr!hF`+J5K5!M_KSzxCwyg8|^yulaZ%Jbe!=>1yE$Q9pp zQ5oIRd)>0km3^A0Xs;7fzs`o(v9wqZfnFSHM{JWpeU#Y$eFz#M2mgVq-I8ZxTH}-b zX16C$Bv5`SSYtP+8RrS>Rl)*O11Z{d`>6VRcS(R0Tgj-Bo5l%XnIS?$&(rk8ZQ>~& zi(<#HFBA|5mCpmSEHlB}+jSfpa6iKISPC1FidYrQmJq-9>8I%jd$?s`8-@i28t7yw~J+u}@r!^E~>v>W8Fe%udD?BatHAdYI# zPDlp1%NqN{k1mN>*zKdC>#FWPD+1jPifVa=P+Jtz*uphY3InnW&_tL#HGd-HYUGem z{8s^&&EFyMVDJs#VD&mJ=cf7Hki@lxu&+ovAXU%n#Kynq%N)1$dH^0fb%G%#ooO!1 zzK8Y){9JEcRb^JOpHl0{mDa@@X#M+pm}Rer>+;{0_J`=q%i7#g3)tl#84)Wny`M7gPW-(;BJlC{(9s5iDi(aq~! zvEVN=xdblqn$%@|dcs$=#pQv>Gx73$tgxFJ+Hg=r zslY_()iTAr{EiHDWfP{>zfO!<+s!D1@?dcqaai;JK;D7jxq@+RF+mfvZA1-jUzi57 z_6JYvXCgvKdD9}LvM%3u3gY6{LQ4Onz95#q+uzYO48b$%2(tZsgFiT+NO6nj!2see zeZPUS-WK(~?vbyxh+2qR6kjx_ixdfkZYkY0-NLTGnY$UGE2f@jqx!XH!g?7e(4IxU zrKgTLJ`kb}{hFv-!3{Q$Q?f{js0=_^LD=A$0}AgkHYV?!FB`PN_LG|*tr zhC=UNX+NE0S~uM`+RO6%_+TwUKf&O%;r8W;uEFC6Qv%saGp&9jnX>+d%*9`(d|bx7 ziGIB?kg}KfWFUn_o#v9AzjQ%BR39+1NUa2|?<0nr3@TwLf>4U?1m8bUx@d9C-$*`? zHJDbw1S|&?_%AqGzdqlnKY=IB@%ENb(_-)OY?Z}x@4*}qlAX0F`Xy5mo;+}6;gM!L zh4-el*xHLU&|~R2&l352E6uZ_@Ra=5j&0(ia2W|@*-qoJWUH@Y2HcaAfHf6a#+2vU zXDqr@J2@EXivS1!rE(`B%Urh^rATi#K@Fe|BTyle>)~afc!oXDXRG9->B?ZILZ@Cj zpU#Y9r~_r*NT_JhE|S9_9+1do^_2BDvT&&+!?N-=`yi2nhkMl^NJWCYo0SC+5|2WI zKtn;b)emy3zq?-tz!){&i3Cs&%KyE?(y^y(roJMYm?is{;oKmLJK%_B03D!}no?5U z7i2Mxr|j(+g%_a)d0Y5rS$ct&llI1zW9^EnT!%T&z*e1{GgY~S z$wq53f$&lbNnl*j=gmciE^-(N6A>n;fm}$u0RcTH zs@Vq}AZkNNLF;G&AdLwJ8x)&VeJ=6L7^C=YEfcR02^hIO#;te33VSrf?48t5=oX{liJ z+>8>AL`!IpOtInyt{5&0wzWZ^G*)UZAGwlS<|gD(QG%&<_<34cn;Y(S?!iPxg!Ye^ zs)tNefZ1#I=MiLub^f#M{3DnpS(_X2iF{W5`(x8>XLw$+_OQ*5QpRj0ry*3SaBUCf z_{^6&AYm^$6?;sWQNg&p5uM?wxiDIfxN0yq=8D3Oq0=C1JghERU-EHgMG5?8gD20U zN-txd*yx(@=wLEIt%FBmfK(C%i>h@8@PssYE2$+>DU^$*=`C4*sgu76xp-mnHPb|+ zw5F@+7<_HE;)Z=H>r(hgsMNtt8Ys$2Af>&97Kv5YZ^#72NgHz1jC~}F=rQjTU~;-M z!RfJ4Bo(*cR)mw}xhGrQWSq{E;6srJK9Qt&cYGk+LnWOB#%VBj$-RVJO;nvzeTzp3 zn<$s!wdyz}C;yj>K!p>9(Te_MwIo&_UZJ{PIPCRQuLt9SwmWucTm(`*9I_w30DhWTAfH(k7(eBbg_)tx-acvyqf)*w|(zNOS%Nmi`98Y z-UZbLqq<`zHUke@_*Z}Jk;=7~wT7qipo zJVzIm>9QlsPU!WJI_%&S+=VIX!$^lE2O~-^P@OUHNQDW2E7dFRyt6vO;s}M?FIqOJe5J-K$+U}rLAB7tJ`NS7 zt(YFSL_b>|=IiOYvL|^YI_(nD!_y{qYNML8#(L8`cz{x+Q-3=O=V8~mC6Uby^7gr85l~vuc zQod-AgMFDnLusrQH&qOc_em{>J}7ItPhKb6#24_WbKzG`=Q`-4;VRyt3P1$xy3#AV z8A$UX%DoP)fxLeG2^Ag0t9StR|^0c3&V^?p0}K^HPH>CtiI4--4d_qvi?z^{`_RS z*Z+shC3kM_e0`s1M*KAl7(J@>3Cd==nxq%9p9M7%iTt}xK$xFp2hDc9(rtXr;NCYZ z12tCtvYDN4IDBLXD7^^@phcTuv@erYo*A2+$d+m~D+y?1h!!!?9Fquv!M) ztK*^STE3WS86kX<$Ph=?*_4N^aaxmcQ1OfFhy?BLp7-=sDT(x4FycO5A7th12&n15 zvGiV_+Y?cFB?JPY&Fnw+gbJ8Aha2)N`ysJiHalGJm_PQosVw`-PJw-mX(BVX;$%kH zmU>GPFStDWX)wK{>jkt&QRDev1kQ!p4O$CDeYU?=eIms0Cj|X@)mrQa?0MOsMcyEAxE5Fj2 z0uVc3(udf}5Z2L&3L-H>1f=23vmHbKC=vnCfI;{u2M!`!voGV~L)sJsP{*Lm+Hl5X zErR{5hP%`P5*N*7!vvGxTzl^tR$r{0T%NQ~`qc-{Yyeddo|Kdue%SQB&KKdmz#=9| zt05)xs~|}es=bjg3_C9qx<>`JXF!ooUxa+tVgnzy?Suj-*O4TjB0+6W!VCV6w)$dY zfM7syyw%<5&->Im;%x+QR5GA>Q9)Bk@&V{|)nn_r%u%RVY$awo%3;7Fh)BeCSmHM| z_RPEZxW9M@L?kSMf!U@$!P`7MfsD-Z$O!e|#9kT}M)1XbXG0lYcxWsgytymsy@@># z86g`oGAnOLJ`D$u$lNp2rD5aEPI$dwmBcybP}UtrN9bdG*H4x0BBqI4$Pg$-41z*D z-Ty#zut*j6h}en<E#gTLShyp4doJD94SRh8zY=jug@Sw96?e;0Z0;XNn^p(pp$| zZvwf?Y2R5P0<5n%LLo)~#IF&0;l6f11lI=|!JfsI$jPpEv_gl=X~6>>wZ20u&_4`7 zOwE+0+%|e92z0nzWOo0({W8z>loaUBKY(L{wCVkL9Q(|fJXrtw7eszy{=*h!y!U5aRwk@XKE?Trl9Lae>t;v6ZuszVr+hly{Dvn9y`V{D2KW z75$tSWd3HVPAL>@i_0mM@(LrR1LaaK20l)` z=-=Qlodsv6?p`q##gSgf+@-!iEsD7$tg%VGYy_TPpAX*)#h4;SY=IMp{5I16q4$Un zk0OhaY>W45ei!-~#yXTKv4X0q8A3C$8>BuRgJj#8hjb^<>0j?AE%ov0DeBkwc!cY4 zZqFal1GYaHhU{Mdu8Xs3!)_=;j!JEAU?NFD@k7xsVxWs{YCBX8FSf(O|9 z(4bi2q=PXb8+n$+G1}CV_dJ+^CV;?N1H=>ROQ>TX4t>UPQIYJP3C{;5td6)s*tieH zA958aIg$Ck>R$(NXh3wND=4bZcw5ZrBFygBna$oVhJngsnDq}fSQiKngzs@ zkOYG$5z?Ox93xL707wXhNgMA!R5}p7QrNHn#|}~_$^#M_pp-QRp^6`X_!~91 zABO*_g8>PNwwYM|hguG@FJfGQeiEb(W)~y`lg1G9A8HE7KIJvb5L}SD|L0ExegS#X XGcbMlLJ~ow7C=TqLA*xP;Me~EtCd;Z literal 0 HcmV?d00001 diff --git a/web/img/editor/invoice-string.png b/web/img/editor/invoice-string.png new file mode 100644 index 0000000000000000000000000000000000000000..f08e88893a49058cdd8d278e18c6ed27af299c83 GIT binary patch literal 8362 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 literal 0 HcmV?d00001 diff --git a/web/img/editor/memo.png b/web/img/editor/memo.png new file mode 100644 index 0000000000000000000000000000000000000000..2252cbe95f0f137d5fd1058d15c2e9111129e923 GIT binary patch literal 13491 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 literal 0 HcmV?d00001 diff --git a/web/img/editor/sample_qr.png b/web/img/editor/sample_qr.png new file mode 100644 index 0000000000000000000000000000000000000000..b1c74cd205673e657a8843b322796a1e330cec61 GIT binary patch literal 2203 zcmb7GeNdYB9XDAvZE8%~Ue|Szn$_F6UAAN`O%+jDIunu_!8hVt#YPiRC{hIbpopw# z)~1=k-sNmcKus<;ktY#WsRl(vqbYd-iA8i8USc#Vpbs&KCddN7B?bC!-3%eaMD z1w5hZ-J8MK@;N9MthTCapU@5R+QSZc30!H|_#=)715Lk6T*{q&9rmUn(5y#abm)Mo zIYnDjFTslnkig`EFYCQR6p(}9{8+gXI`~bIKahUTi}^ zL}vkmM@<{7aD!~yiq=zf)6hCXiV>pk1QR8}f!wai3H}3>6Fsm>9weVdf?%ketq*F*zi=nY_?oN^xfcNm-;ReeOZE?JnuiD zsJg??{cyGn!q*UO48cwgYdY=$eeAZl-MbGbUw;r};v0fRCPR#mm@>lcC(mE9tnYOq zipC9}yZsJYXS$m>?gWFqKvyU4&#YBu%P(#Vj`DOPUuWU&b*5CISwj`b z#xW$N+f=h3O=hf9qFw+N5`pZWt`umi$2#>4UB0F)rcKX0Qy-dHqcRu>c}UFo0CnO# zm8L)CzTJa69B}xox8BJaNm9MDQ-nwACV3*FzHqyD(}0I?|Dsv3LOOUh$6Xt(c)fjGfi?b2S78@A zPbrX>5BfQ9;&pqKh(iGRmr6vM(%5tXI6`g_N>SHhg2>$NNrr1DTKXEZ51?~9gn$$^ z|9dCwTJ9ouON!qO!-cU`*`=e@7=i$W?RYHHw19I~oM17AjUl-m3`=FaL1ohbLUp67NSW{N?#C_`B%ud3?ktu;lVi|R;A7g46oj9yfOn z8IBD^{s&DNSCqq?6p)Wc6ZRqBcf5^UYG3VY-GHXocB5VZiGYjG0X_v=GIi;#t7sio z*~`$io+DCTwL*bZ&vru_twfoWg|ppSo~lTWarV0J*p*LB_@J|QZR!_f%|fzo!FgO) zWwce_?EQq_hXub#gb%R%JA~nsA=@F!CFs2Q2a{QF^(_vO-9t<_WIDf0h6jo%D3Fmm zFN97msYn7ENm(Rmy5M*UBb<0_XN2ZQ0l);^w3u#ENv?V6F0=HW`NL|=4ZBU}u3R-y z`rkMovbl?ii*Er1-W>L3R~%X^&psUI^sqw&Gi+sB@qY{2`TzaEzx>*t)B7WQ0@LQ- PM%d9qm{idRAD{j=;=hrK literal 0 HcmV?d00001 diff --git a/web/img/icon_large_nodes.png b/web/img/icon_large_nodes.png new file mode 100644 index 0000000000000000000000000000000000000000..576e607c757ac24dd3f4e7b0f72d624796561216 GIT binary patch literal 92085 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 G)`E?vQvMCHSj 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�G}F{IHMi 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

    C0X-7w?JvsF(_p*>?|{&Ivz~<^E0u9fmeQv z1Ze(a0>X*0%@iwJQwj5WCKi{OVG@uC|J3c2GKmpI%0;rDZ2G8BwjJ=2o(aBQsfoqQ z_;O~(rE2Zo(V+c1^?-0hqrL@I^UqhdnZNT}4%XZv6Ti}gST^mS-}z7wTz$XO0Q>VZ z;k>dH`iBwJ-Aj(i(EF@+Ym6|`PeN`8p0+TEn?Aq)FY*UB|G7Czo^roF zXhlR{n2kn#`T_Xe^DrFNjMUS3aH=DBlJT#5UEnRxYx{{k(@W8%%7*A!(M#^h1$w3a zbSU#=#U!e&F3AUIGxO`KOm3$KSaR#S>+!AlevGec?)O+ixVu0|#i)|9l+CM@tssw}ERxSTG)SLDBV(=PsH93cJ; z^zht>zw7v|>RTGXt!jTd?GLyu*~8sApZtGTpxECBlfuT!1oz=a+%|qJzOG*?k)MZ8 z(Yo|w*#;zR;1ZSiO^kNZOumfxWddjVYSG?nmIM>SEMf6z=v4J`GFE88thK53GklG^SQ z*x_^DUZRBr8|#Iu)@-bqt&tZI6C|f&*YSKRk}V_{NQ=r?A+sM+c>X}TrNYH8kp5hhAS4U9ETd1)`Ld5AU8J4L< zf`=x$_S#)MrwvsqoJRCgUI#7RLJ?a&f)pG4npO2Y%v|Acl$h84pf;K^KE4_6J}{z9 zkJP|S7rY0c!Zc$@fJKyg6n*uZzbD_exNiH6S=5c^5xlA$s~GQSO3)TtJmeIU0miRO z&&V9z``9{feN@nKN5W^E=Dv3EAd%^QwS;OO^Cz zHs~7NsG7O_f?;LXn(3cpMra1fjDeXwirwedBR7!qO$hU8#<}{()sEO#bEef-6{K$1 z7>6(S(D{t#^Hm!e!&3=pA&a@s*^DkWV-bwH!l*`sSr%J zZO{Ck172wHC~=P){>JBRed6ZP&nWwFrb}uKhQ=!*G=-m~lAA6iU;TCha+QFbe{>T{ z<0V}t+DaR^HI}pKnJ(S%x){qjUvreN@l+=V9a7~74uA5OYy|dsoV`mdf$^!HI9VCb zJRDZ^rmEK3kAE0cIKmw-XAZhh4?S?gLGVI`0qB~$$njmi#zV{#ei3Z&A_nzj$~j}H zxdih^G+W~bW0?BbO|);Xd;hCfqaSJ|FA3kr%zktf>M76S$M7xGPSR%OLV!i9C2(~z zCdl#8yC3H*tvWDPg5ex4j&0bYxekrRZ2py}hM7VoYi?n0t)=RG{i{8{3>=KSRlLm= z*$rTw2P7MxE+-psP!&Db%9#)X)rz9Fqj;DLa(vqxpS|p&+EPLCmlmkjkbS&!SvXui z>-neS2TaaI3Eb(uuG)TF23fz3kv>{&C8vX28scQ_T=)ci(fz&zzYVfBUIa;_4mGa{ zCG6;Yx-QV6_jX3bv!UJzMDAzdrf)HX=rB zoi``Mp|Dp5I9XAX*7~C?$>iU)VaMUV^2!|sGYQQ|`9azm?VBjeYdULU)>`Inj4?tG zu=XX83vavm+xLL^x};*o`EmR@;`m|XJiQd)txJT}H5$E>?hl~gg6vZ*>~lttU)wh&%+6uaw8OLj=x#?o~Jop=H+=yWPID0Mq+pVIJ07QW4)tTty=P5c%ph~34158 zUg3_tD{V10#WcLRd+%$IeLMHJfbO&_xqCXmx?obj0N?_=dthkIcs|3J&MhE+*?1;C z(5!#78utSrL19Z$V6(SZ>iP#_fvDVd3FI!Xc9oo~=#tu3#s@DC59)>Tiefb~96%}oKsC+_p%K;F|8Ygs0LyNm`efAaDw}s_83c; z;UIm$V=CX}%KvO7C0|THxhCzHTMmn3k%yRUFwRFhw36Hvrgc=H@dH4*B861_Ulk8 ze6m>e-lS>Rl&#v(1f1y;wEZ_G7bN1d??iF4`Mu?rJNv~_ z+yjTop^#4nb6J@|Us){m+DYsf>j4OB(yAFkX%5@i;b1GOuai|A34IX?C0`FT|8%+$My zDlLbAj*=(M>WiMgm@K;OKSH#Y=YG%CAh&1w%fS^Jv}6V9YX!9?5|JXj2D!et!lx;o z62c}6$=}Le=5S{xD1gO;sZbo|Eo>6b6CcR+s4Dw!EBw?F1EZD8S(f8J&skrLuuF)5 z%BBwTro39se4lqdGm+w`Gjuh^vLkAD{o=P}Nc?YzaA63~E4Ag!jitoR7DrdEx4}pg zza%0-VGRs?9u+m8iik5++K^~ESQ;#|yItyFqLQ`TE1D4MA;e7uBD3)tpo@}hUv&#v z5(cZ~yKDC)b@hMP@vXtq;jP`d8U zmlD+H4m;LKvyW**_YQU6-5$1Z{>s)WYy*M|nVHoCxpb`WF4>l`fq)Ht&=Suv050#s zHm7>C0g-79%^a#J_?ajFVL!mv)#6KUU){gp2FNrwI|%iX_v5zAeo2MwohsKwiAeER zmCggl#01L9gh;4`E-19l?ShYWP8pM_^61<6UVibcnwatHJ3l&G>bP$~hTkvBVm$k8L2A`xQ^ zFzDJhsip==-&Lbis5)k1RPDMfZ zPbOtS8WAxi!cgb#V+irqJn1{(A(EawwTpqnfg7$GvvnT-{RP!c{_=2n51!3<#wvOc za+zmd?y%6jh48g$D?c0Knl1A34{T&hE>TuhRULd?-+%A0re$=?bKd2sCYRa0y1wki z(LiU=S#$(Vic?A4+p%&$Hh@DbtaykT5Tl2kenUTwJQ` zbEb!{&_}an<#llDc@J=>)wg0PnWvPk3pBoXBSmNdvz;VuRvJ=7=VHtF=a|<`|7~Pr z=(-#EYOk=6ac9~cohPn+>f7b%&QB~Pb?|q{82cZBweFl4j3_kVMrxh9RRLhRz3o}T z^FoB@&6DDobCJ_7`m^lc3fZ2l$4LtcKyNnAr0$p0#=-^TUw%G0N{t`Xt*7Z-)z`_1 z`o;{f+OAi=ycI$Nd)Y*7 z`k9&rVCS0?{*4y!X2(pSIL|uJ?^{dZsiaFt!t-tSh;eCy5i{+R$J3i1MacNw5#A?Q z>v5dn2GZ+eq#rx)Hq~M~PVgy?36OO9XWhk^!>9V!^fX=yaQmg3K5bY1@=UbEh{9f3 zxs}!cWwvNwx9I2eM=_1pIpr-PfN__Da0LLP6ibTnNoW5?$x(X9?5xcbDlXzWDxg|$ z)Xb9*sE4d*>wx+BD-(~{?9md-7x%R+9P$)v)EdieCB<}JKlC9fXV6KrU6h@i`O`cH z&-IXET1>87!M)7GDqGw+8S}1lty&NH6gl8J0Kw{i1_t9F3eUxvNQ{!NE(r)3lK{rS zZrdJ7N9k)avo_gAAvOvzwF0Wp6>P~K)MOWGd6^JP|2Xc}UYio-8hL0M*xc;|`|-qk0aWHg zM^ttP=$&B2KTQtFa~Kn(_mPa48UP|f86ImLV=;)#(TpgVjqYsF6bxDVX22gzo6|BB z>fx^$D7E%*S{PtX*$K)F^0DPF^zIa+?^YFj$dS#1o_mr5<&K5Kn zVPVqvgLG*+mp16pUEw`fe!CWsM(axSJt{$|`F-@Go5`>S?uOJwCSv@}sXfZ`Jr+)l z5j0Nja$RDqE$$@f=8<%xvFXkKDO`qpHV^8kyZig??2nH~w$$C(zebsu;#Ic~(0X~v z7xDba6}`*xtovY)4BXdKlje7uV93R2#WLdu3+PQ~pvfQ8CT6+A+9x4DQfzE>%pC70 z#C^G#+)$XKe<0(pto)Pw{l$BU{QbxSWKCOGT??O{h(SyYpFqBsVzEZHlEE0>vyV9 z^zF!(cn&xF|=0nGanP?U|V!I?F$%~*4{fAPMNxwX8rU)%ueEKd6~&ayP?l{d@BK;0Wg zkVLI{0ih881BE%Iq@G-*(5;;BXY3g=EJ48LPBmNl!W>PSKwkhDFRwf$VanmS??X0SQKOIY9mp<^U~={~QQ0T%ODY=P$5({}Sj01a<4 zwcr(;PyIakYJWrmuZZYFP!sQ|^P-ju_V6k?+IXe1B4n4oX?MXp5X_J@|6M=eI^>=D znG);ZCC_RaJ>&E4b3VDad8Q~kQF2Tm@ z@~V8an3|!ZY4!29q7sj%a;u{oDw^0kcdTfdjy=68`J=ZYjtM-5i><>+5f+z=5;-uQ zuo+AI$(hop<2LT1*RS!HZ!uC8ql>Xci+0I~@cM=^-+PRgO@jroaUI$^HJ8<+uAeOw zLF4e;hu=iZpM>~o^T${y%G`RLBPOry72P7mdLdSF!5lJ-`jm^BL#_*lopFTzFu0bW zS<}mWL;DGvm9Q26{a40~g0%R~>4Vpq0P`=0J3xP%N0UGaF@IQ`jkQkK_AS@bZGJxs z<#y3nlMh%!uLhobgPt$hijFYP;ez$Msonv%=pY3Jb-0v5eFpxfKskaA?r5sszTMk^ z`o#-X??==*wV-lNQXkeRn+H{lMKtZ|%3h-u?Cx0j7kTh%ei(oBHcC;iBE&2!U4CbA zIJv1wfiE!dd-70?0kf8O$&xhndm^7W4D-F=8!EnsCkHLyhQFnF{7!Z%=>R=$r#4jb zFui4KvE_KWDU{^5Pwjwio83gM=7Ew<N~AO%-xM(A-j)(a|WLztssY)7SWT% zAEGAV5k+md>G$-9c#_OuNPZTn8Lbw$o(j`jFR-#%Li6wh5|_709mjh`QZx8Kww5UR z0T;~wIKS!kxh{r9?eKo4wK_BX>5>ti7gBhzq=k865jZ*}W%odB_k||{%92uUp15~I zHeCzb{D!6x`ch}#eP=t+v2KX65t(UV@o^mQ$zHb8tWc#P#cQ9T*P(qzoo6te?bJQU zP~rcYb6@wD=ym+Cbl#;}hkdFF3(6Wbh)D;9zch z+FCbZ$5#f5V~9t1#g>mS(MbmWw?Lsp#J~!DBoLhFgOlxkntSyZZyaW@i<229X|0FQ z^ZO_75|>Sd=}02*l>OPV@0p)cnX&%9Z{rj}W%;JQ__L0l=x0Y`5+r-^|(NU(<@dw_yc2 zOs=0bQS}F1$+Mnoz_s!i8Skkuzx?ud=AE*5owA4LGbvpLKop!0JhERR8_bOk&17XL zW^y~Bh*y9ZUi3j(u#kg{$0ZqP=&{oca0vjbLLT-_7$uEFgxlZ2#77 z=}_)l*CL*{t|_G`QGw^2)seAex8%;Ym4eqlF$&9if&}L8e7eHZ1MgSz&+uN;c`QU7 zJ0WFa4YaKw&(9*S=>OW*8x;ZO%5}`_T`^ zyn8+;QE(`i-qsH`j{>JIv0!Vl;LSGyc&3hywK>atxj;ROH+7o2BPdQvMrU5oC)A(9 z`t!UAb!Z+@G-JwpLsn4N*!tP+#HZJ16#UD+_a=IV5WVn4i%|X37rb4759Z(qwwR>}bp=92&}Q1WtpJ-}lhQpE~3h z@0lN=J{5RK&rCdOkFk4TeMlCh8h_2%R+{pe^!KmLkqRqJDx_9_;n*V+v+S)zm$l}@A=I=e z5&9VxXA$DQL-={tHB{Mp_(gN?#sW*XRQ8Re!l$Og@JYajC#Lws4;%H@^G|ZKNDU?d z8xlR7CU@S-rh_0e9)d0N7GE83VK$z}Z6xZSc;d%0#31f|w*=3&bDSj01117qxk$Iipcx$W+_Iheg8V0HT|x^J~meaL0uE ztQwVOVXV;42vBgGV|L$JP^I7XlxEHDAgAG{Z+y-m>cpa$CiF{T4ykSY?BB72tCu6~ z+bm}}yFOf?PgBLC?2|8B#JsZXb!MOIIxEDb-HS-tC@lQ;$HlsXMbvsb-jmRqFC?<` z7B*I|`ff$lCv#|;3EFROXhH)ZjQl1X96Q-0wa)a8ugVMbKhJ)QeDJ;A!I{I;Pbm@1 z@nz_$dwOOLqtp12plj`xZ|P(qw`Rz%1+BNUO7e!zWoP8|nJhY%^Rc>D++}ffeQ)9gZBw0q^9lKq1<_n& zf#>qRpY=M?Nj8cs@$Vdv{h$zE&;!soVz=-+ZrwU&+IZE?X+q*$f)RxLBEO&5S!}4j zdkqinIA-_vSvaO-1?l=!A85_+I+V$Y?h3NP!#=$Edmupby+J7!R(!MSsp2h3DQc9y z#~G3&ottE^tj`3--?^65FlRy5NyWVEzJr=S znrP@5F$*hZ1N#&lfNS}Z8Uk51Uj6*H9PuSJNL&CS=OD1e_40#tZdh&W82`jNy(}bd z;xFj(h`SbdM2Y($lVlJnQWbpi1H1oFR7g_KszaC|Pw|Cl0+IIJFjSh1kaa-bNu5iA z-%ovBFyaZ+*3&Qgs{`fg#Z$5Mx2azK=6D*VR>~M(?(mKMxd6$6;?M;iaP9OS7EpGS zXa^`A7!dd~9w&z&>wdKICsK5$M)TA7>1&U|Nwi?~fueuib(A&M;mhj!1HRJZhJvBw zELIy039XSxs-TA_r8R<$8`9YIiNZxEF-1{Hac_CdP8QAG6Nu`fGgrH^#g~20uH z7+=8VPf_w+KeZz~=`9$!666A3A?1e=~gzeiM8lrPDYg z`wua%Z0pdKIf6ZgN&IKNG99A{p*F}oeSBy0^gYbBnf(qf9{gbquAxGczN*8dQCY>< zN%go%wUjs9_S8x;z#WDI=)li$;y!OG)H<4Mr{jQ7qR&tU#Zt6SNQIi^!9A>9k+&ut zXQgu-?=`pXAmlE73d8d010s*mB-DSH@d=7tcb|Ld8<%#9l;QEl;py|F%Z440Y$w;@ z7ySU8#w}pe-Wj&KaKQ+j2y{L9^VUm|~yaXGR7P2#j95rSan7}V;*g!r7pse%y z8Mw5RFK@NEOwI6wYUqeS6yao`I#g>lXn012^z#lC@c4Tr<+q)viCR8VZauntjv_G1 zMOR9=0JL-dyvK8+y!VJuh7L{>tyi)~RTS`|4>>pdL$Q(|a+92)VcHAVL#=COrNv`z zAv*?3$b1EMRJfJ%jmsxC^(7qF13@z~Gx%YMrB(Tb*8ACy`9Ljj z6Vd18qCgtNN?zq|=*yF+zl+qPR8Iv^iso+-O4yPxrAD`|kx}yumcP@Q0l!5Shfti0 zC=@488d~iELR8BvMN2_DBicI#w4IY;j z)&jSl&Q%3Adj_Q@+PoWHe!pYGsLdErYGVg|TL%PzB^ccnAML8UAjNGXGriKoUF`HR zjbyM6X4EWWbi^*>kWa{to^#pI0MJdL0CCs<9pIMTr;U3DvuD+i+PrmLZl&D2mkJB@JQ$D0`W*bnhRGH-8C~KpXNsj z2MR}Ff9DkxD>KfIPj})rz7D+HDjmqZccZ)fHHccg)AAl{o%N;Q;WIYzBW6$?r$=Df z#J;Gp$e%mY9S36uH{u8#efrmd`tm{a*7iY@*N|@_(oJ==@Hv*dq!wOc?e~Xi-Hh`8EAIVcOt&I^-i6nX1(JhB(DH?6T$%uHK&w zR1@>ggi<({6+nq{^)a?M%j9=7 zRXMkAR8w+-s@?52Z!KzhoP7#()-%4TAxVgHt)*zIIUZ2DC`&Bd_DnF-j^5yQn)LZM zX^a9Ju(RiY!_G#YsqB=F?i55cYKOD!P1stsic^Hr>1_qU*MnvNo@WBV5@iH_JPDa; za;v^#`(nheOTd{Th`OX>YM2hOyuzt==icwsPgB~ssr}@a)zGkqw4yES*S(z7ghUf> z*}-BZdy!gMBOO~qQfQ{gcib3!{0CeneWIu)L8*}$K6*)0}vCA+1)r@xZ<{v_!<-J%OQTDo@1i_#REQGq7!$oeIO@q}a%&TjW`@;H=-X^VY)M6750?hF z-N%Mok8}NGQaGF5<8FMSaJJCH@fJ-5-6gj&WDlkT77XI`YqMI}dK2UG?zR%*b0sjAIEJ;Upc!d%;xA1HmCMg|`^y{~Pcc01rp@ml-i89~khG++)RJVOX+CZ}Xw z$rqfTC+KBRW5RL3tFLUJ0K96asAaByU6aILmE2lqy?;a?|EIG7&&h`Xe~fxBh7m$P z5wKXxZ{Y1-xv^gV&+w4GdlFYDYP~P^LP9+;XgPlEV9cc zA_htkY*Kqt3NN|KI4)#)KBF_Dy@j>n{@R~qbfY`wHX@4EY3mggu#fnWe!$AzH_}&1 z8Gq4xccokD_qAwvpOV9cLsveqf?UrT5v_SuHeHe$OEQfVKL*(5FK9ldhIKw}@)6fo zuQs~S%TNvO!f0zfSFG>3rZIzeswH}}6i|M?yF15_*@!0cQ zymu=vcV>e}kFX5+|5*k#P(Apg80713y{f61HD3;pZq_@FxmUU-owy)*p5Q*e-;u~Y zx%Er%4r*PkuN~!T$DVen83VY@5CUNYcAVQH>Ke9i)E4uUW#8xqk%8#~w&%(^*=@J% zS0kvw!DK0GCN_jg55~+mY>PoiPC0Gw#wRLg3p&+oPPGgtK8Gp}1 z3T7ARF1NTPsmM?vILn-GV1mTx9JLb9oVxOTuhul|II#Zvt=xOy@rYF(qLfW z?m>z+bBu}Z#K_=$)-lFvgMv^5vOTg-bj}t*I7@B=`ssV=C&)EXD#V4)yLI~d0)1AE znJay#?ioSu?r8Zvj{#3q?9-lsjx}s|$O~haIL}8%KoHR0Inck=HAMO8z+wcK2l0}& znqBztf;a)ceoX2YEL5>2cRd^;z2|N2jtEob-D(L5?ADy^i-C(UJ8J{}lNAp#6X&_m zN7~9MLi)J=k3Ar~dr8aApU4TnyKgOyiGtRE4oWY_=sn>=F!Le-4SNFB8_jzpt+cf&8a&dc|PN!7a!z6IRTxa246Q!wnr3R>|Y z-zElv3^D-B@s)xx|9rKn4puB!p1dU}X%Gs6xIDu30||CL003_u$#ibH!@N1)9{kZd z#vIi2d6a*!GChKF#mq(Yfomp;mW~^`Fw0j^la~|)=NhEKmWwb_q- z;^WJCj%VaUA~VYF3jIs7>P~PK;*})BIz2Tsb4VDdcJP0u>?2QFX7< z6C^Wk=qPSyM-YacK4*WyClWUi+P_EL^wWAnZpDv@o^XIJyNmA<(+<_?bq} zH;{6-Bq2{Q0IT3*5Aj>vCP+Wpm8bV%CkW@JGR1ONSofvxG( zJtzBBpQp{8D9-OVZ(N#5c-4y=D{6#fW<6gR&dyE&e{!zB{xjOs0@{T+u%#IL$`9-A z;|C3LOwUIR>1Cg@<^8dJn{$hh5it9|ht=;1a_gW4nGeJBPo=)^q?e8b^_*LvSa$B2j6C6OS6(ZWB=~l0b>e-q`oC*?}^qAoNRD|i( z8(8rl%I5^h6Ox25$H1$uNM)PgHyaX)=dQjc5G?K$0U#@f-($I6{&b|B z+SGIf3rKKpHvFX8ZkeP(sOsaN#b~K_8~v*iv5D4O*?(1n>xyR+J-?z7tKP;6zOe|2 zK|w+ZgVy*+(O}@_8e>9Ui8qgi$#X5YE14H`!MG{1Z(zeteO7Q6N|}Rt_aj|PAz1;E z@-JZeT8<|7*5AM7Iv8ylLO?ccPkqOos1_L;>AI^UW>WMJM_2tXMOn`~%Q_R^;Jv3( z)4O;x=yT`KQ$&$-{u9gCG)hg#*5uTDEPQ<&$h;{7y;sHLb{6nHR@eNO)V1D=W4k9f z)q)=8nGYiqRtWVJgA&4+hLC~Q=zt6e3H~(m`n%%1E(Drd|DJTDFcHKII}gL9eQd48 zsQ5cx!K=2NWnn#LETAK|Ef^Mn*d^@sV?Cr@Ponx9Xv;iEb+mU&?mk zJ9b%ZB9FfQo3INd>JG6Qq0t*GpxRKeY~RufB-)TuV{`O-)btZk=v6z`J*HVq{kHr`jT2-A0|$?77iK>ej`PPX*rl!rb^fHv zSfqW+*TG{~pZj;gXEr1*O@c6~Z%*XYwh2w1NzqKI`>xE*7tQffvadobHd53HXIZzZ zm8-zpTk0f3pQk0S!m>7<3%esHZf~q*1?osfJi`>01}h}iy*i&W?v0%xtv)BhE4aP5 zx}s^gU}2S4Lkt}gc6`Y|3k=JGk4jp))smx`w1D-2;M*Ldo>|)?WsA&PHy(W@%&>6s zj&$p9V+z67xqA6urm$kFdOn3rQ!});ctO-K*GV$5K0WPRe+2^=u7N!GayeXDctqBD z+q52fb3=ixu6Q@f`iu=rNh=0@MdTb81usD*=EefP#2j6inI2t|RhD^u8a6x*XeCH9 zd_AP@nNZy|ac1R{xESb#TvXs%JWxbQ49akTS^Y-FZ|#!kG#RP#l`q<>U_2+QCfYx0 zNw2oE+mIK;3;LiT=2o3QSOXJH){5;aq@0N{=}fF6kWOeg+vT>5G;8b-EQKIau~qx@ zruCsD*2`gzM>#}ENES_Bp2Qs&tm_l)mlw28Ma;HwT&3qBLaScU0WRVMh?eVqTGBX= ze@liL1wdT!Gzji0C5~4k-jcy* zG4Pf@3M$3NyzrMd=*X7)1H@?kaz_XQ&>$aLy}Lnc#x&(6rh&$hq0fl>EqP-4ho5JT zRLkBzzUyX1*Wk-tz_Ww%Zq?@mFX5&?(l+e%EcHB25__7oSkV5Py}1h^7+Y7Y>EEc; z7;O-lNPzAApPVxYE@b_xrXvN7^21+IaVY|xIb;OfI(xZE0iXXgb~t)vawRp)C__9Z z%S=EON>*Lar=u!+HD=VmE2uq z{%_!v@+8sjZv2xsbb1wB1xSQd9PS7-QuxW`%ME9Tif1b}@rqM~aT6|14vpa%N!K)Q z$!tq|;@>FduIMx8jiV#P_X}2@4O7=SBi;^{Vy}xFh|T>X&KEgOi;Kbx{QCH~)-`KY z?%vep{L)};uM68!BK*{FJiqq#<)3fgfSZ_Wt%XAk$F|cJSht+tpW3YdCmEW)HN>g^N9&I1~`Hq(qR% zH@Lp`^J0!F)TJ0j$7|4Bri*H>;OKp?PCoQlwX=9?Y4ZyB{H1c5>wbP|m?-}9b;s5V zA|nqfzSH>jxEigdAAI*l`2q81AG+_bXSJ9QQCk*rk5Yx$k_`>+vEC}Y+u=;GBzd~CE77i5Ys`}u z&ox;z%$%}?>G%oz)zqIGrgc!NGbG91MYXY*lD=V5B?5&wM;-(Q&#zVK9yfCY+q}0J zlPSFmInV9XH~ig!7}($!_~ZCAQ8Yp>W329C@=^a5o=F7=i;e85lBibk{k)jwU8HYw zWSxoe>+I1MbcLru8uXHBsI9<1pXq@vuXc#$55IS|As-V z4~K>g)YOFiCUq%LC!m$aY485lHd4wNDEQwS1*yB4GBs${U5zGYUD<*dv$JIU<)me! zwbqUA5;B*igWCWf@nL+nd%%Syu_9e}i4+rk^}D)O8e=3lr^Y z{V{y1XW@N6Sa-cnt}tHF^4|LUgv@SMp+xmol)S?0 zt{-x4k5?>H-i+y$)e=Pl&(sTe4ocCL)H?*4KzV~5WpuRF+jvtvf@I!&eR_XxZ8kYt z*|j;g%QlrzAq^_Rqrx5$HGN zgSd$r2d0-5|Bf)q)p~Q{k6-y+!e1PSUh@Amxt)>^e*Fe#`!Hrg?!fM~*r_&ykd z7@oYw!Y`?{09zb;>&pIp)WB&lrFRyLU5E-?!XEG+*~r^*@_ zC?3H|Qlt9VJ1{Wti{tMd`)knRsn^;a&w!(y2UXM+3hT{`0j2dvw-x+$>q%-H-Xp8~ zdhPC;3Jxo5dhSWXOFCviyffh|3L3V*68^|#kU~|1E$`{k;1BIgpWPpV)s-YQb$lWN zKA)znkPp05Q)Ab1ssbg$8eWZR9u|a%!;PMB{*GmG`>hIbqzz-Jo^pWhmvFg{>G0yEMehH;wQq(^DxcCJ;)ZBNNYwS5l&)$xUEZVW>s63T%Py&2u)Ptt^2vUvy&l zk`cDJk>X}rY$!%@vwJ@v>hpaV)+ff~s%>$Zh(ENeC|UeAj+3%jK(>haVwp;Ac}Xo8 zf(Z=yY)^UF4k7xC{yU`c?9wW$P;|`nPk(<&{QNtNxL(k+su!aCuv=??C|MwXJYjMN z=GfVfvX-p4%E$H*qf&vfR(9C+q>?}?^*}Q=XGTz(@`gNitE^O-gQ6Pc+CDDJC>8U< z>fH4%zr}~ho*2UB)Em#bC1;@wnPAg^^gDk;_J>7Qq>^1vK~A_J5MGV87|pdmb^g?0 zaM$tT3my%@z+mX;`_O@poPk_~k`&}Zsj4jh;!`FndSyf3P`&;{{>GIyCRwZVfeNvw zj{iV8i#a?vwJ|n-IY|&_dQcv%@x`4*V+X|FqrkMo#Dellc>Z7sa^f0!}H_sZyv4*1@bVG=RUw7NWEK{Gj0 zR0SIRYL;rwzquvl2OL>|R3M63a80;h!qvvJ1W zjO9`QgnP{>(SZdq%h~T&)RmM<04^bK&45|AKK_msNNCW4#i~TLH2BLTHtbe8OUEQ( zcjr_)V*Cvri+-gxPiprYI%PzNh!1z$(zVzaVsoWGZQ;ZLbE~IbEINI+n>o)iV^3mf zQQJp4*H0BlO>TqNYokel&eu9(qr0(TuSv|4ne#>e@Z~K^$JDt-c|Qd^-nBZ>`t@Du z0Gi4|dDn7jQg|7e})A=MGG~w|`7EY*-Vit9br3sx97R3bq&B zvJC@9#(wmd!iV|{tJ`yOgTbke(yz!de~ddauSxO57Atq)EYPvIwnbD0iyD-M7PPiV zyD{Ao*N#m=EA=KVDqQ0ZNJ&W*tK69U0) z!fxH0i&LNaJpmtPglc1h&=;hPZpsm#EM9gR`)qd3;WkppoXmA|04V3FiNB5 z-Y?{*;BIYM6$ZA2-4UA2r+$LrJ&%$J$3tAbnUYMLhErU+MF%;<%XIwDF|!p_0kJ`s zZ^$X(FPP8cOXK7H#RxnaSkaDacvjwl;(0>ejcszebrFXizDd*bXvYUNsx`qr6G1V2 z)TTStaCkv7RKSWYd=KOJpw6mEssSx7CUaVQVyRwy_eb(>l*YC;iSb4b7CDt|YnnU? zH)(2J6utw8^te6?!nzfZ0sF!$73h0EsZ-rv<%GCnePHl|OGJBK6pDpM!1~FA^ogh) zz|$ytBQIyH)p7mR?`OX0=|<^+I9$x*7`dZR?0rqw$Sy+?mFVMqj!AIbZrNW5Zs`$AV&VpFI*9XIAt~?xOY$XkS7e3B=udBzZ$VGp>@v3o9Y|pZ76i@Z1Vx~z`h!)s zpwib}T{Wqx%aV@>OtU8VmEZ4udIa%S4=X3iGhE})3Y*QN8@ArfrLx5E`d7Ica@`FZ z!Y_h@486fs*Z~{E-G*EEA|rbk@~-SHXG2Me_I^>%td4}-yrb!?oYC-wYf1~v&lwi_ zvTbaOF0XYE7q1K{UH*$42!g*$4R4QAWdJ4v<)Cv5yIg^Q{;*Cc#`==7cj>q@xg`JU z_My!m?SE4AWM8n$whBhXXu@yc%^9Tr`iT3yJpJKJi%%?%&vuD&6ry|hs8t`^uslb> z=oWA!ZF0WUp_Sj0xlhfcN-xTzU~-Y-1w=rFe95nALW(*)XW!gV9Zb zn@vbq;&5kX!k&?>U%1uRBp%JhRXQhhxDI_ILrAPkLtbR)XG7Ey1Aa!@(Mha5wmt-40{m#-C9^Q=H>XCPy8G4>J3#NcmL zKdYX)JN$eXmPjIvAfP$&63Uloo=ZceUhKG&OD1wDp^=kj@_hXSuyqngv_i!%0X(bI zsHkCCazAK=-$-#0L* zt^w#MChE|xs7RKMxxE3<$Q+9SQl3zaER*q*3{A+QD_>_`OZoAdrziS(J>lCm%>b%<}L==NPp zb=N4qNXLFJk`{gW(n#7Ax7-z@8^u z0h$AEiCY5VdJ)u=lUjHIE*@YMwVo#7YY;gW<9&uHDMH4rDsEl3M_0pH9!gz+N-16 z3vY+Jy8E8Uu`M%;=5kw<)2znp$!GlwL*HJsqqr>rGf_RrvNFTW7kU*hI4*N}T+vgn zQmf}30Kq^Z{M_rKNLS;a7lrR5hcSestK!LV*^B_E3hIN233)1u3BgQ-Z`!-|>2{v% z9X&rUfh0r2P?-KPYHBz^Al04UNMdT+CmjCQx!iXUy|=CH_^8O+S>j8Sl@(Wf{lovo zOzm3+P&20fPWAxO&=i50n&RupFNz#*q%eJCzXt`q}*hl*j<+R6S{ISl`y{Adi>QEsf z6SQnv+t(O=GdYb=fIt8Ltpm0LwRyj2-Vhg*QDK_bQQ+uZZSt6hR zPxjVef6L=s_vZU#Vi6=x60m`e7r?61VfLcYvl8iGD<2!&mM<2 zc&g@~?^7h9?mJx^$!D+r>?P*6I1W*TJXs+IwW5YyLwS9Y zA5Od4K$^K0igN92c7E#3SMKefiO|U_&O4d&n{mW{IrXZDkHw`>p(u$IVfN`b7L4mk448H0C&f{mNjfVQO0^ zAU0v(v~96)5W+qYUxw*eW`xCtH4&babbD;8)XS3eO#YPVncRdL!Rgv1hV|!Zx4%y! zJ-l)l=W1SOaH_yQx=v=I%~&?mC#hbk00Nq$>42}4Lk_QfIdkvJ<14gwk6t&?Oni+9 z_oXSHO!*+&-C}?im)3*7=qc8WaJ7QqD(ZjW1=+NczT^|G!|Uv2-lyaDxLU7(#&$;b z)bmG-WJL3s-8IDh`XBPzAIVMTXXm?u=sdWxy%%n6{y_3NE)SPenAV38dyM);Ga?$s z99EHxCNU$QRrQBnp5(+MG(I?O=Tc7gnL3qkGCB_@@q!tez|8`Xep$3!{U>dcrlfaf z-A-a93C_~Q!TY{#`VP}{>A~_Ki2Si?V#zyn3gPtxWFR+xh8j@={gXnOW*V)BsRYP! z#CGNshg=8pcihSRXD5dz=FNVfoi0P^@ezAbIZu`GQ|QrSiaP@+X%n<2XR4+UIxT7e z30c8yh*H4)AzXO;IhFEr;g179AJO{O_fTsHOT#LiSsl3;(9?XsGifBWWDs9@>1|+Usp_rtG+M*q6PvMe4E5;KH z(PWEN+f@5upHA*}yeoSa#6`&SfDU~+pyUA&euJOoDRZv=V;vq1*g1If`*9}-$I&S* zOys=y$)NjjT!(P#|9t=x^I0Rnu$!#BCIB>lCl}f0~^|;N)cLz3VVji#Pna^E{J3eB!oG z+|L;{8}$nr5o%+%0#4N<_&j{@RA{qXCl9qU`ffLJcMq#O)yNDI_EULGXt_zc@P%Xf zbIGlzc+-*FYs@H7hVI6l3jD1oyGbIYOt|}@e1iW? zj6hdfo<$DwOR?@A5e~#p*#g$*5f9l2S##+^k>vVL-etr=Ce0)|<@f)=_IK77+MW?- z>wlx-gUJ#;2eliS)o1!VT%OzhLh8T#*VJO+9=5~)8&3jpF=Hu*4elH$o;y^qgLuLl z?MZp9H+Js#x3)Q5ol!UylM#ZsiT=q*3Gd0q1GLp2Kn0y8C3`#PIW$zyT&Hz;x%n^4 z(U<$@m-LpRfvS-`flR$WvV}O!AG&0`XFsOX765HU@10LZeXL^mUZvhHdaZ9asL)8!gR{^81B~4vpk{OT%(}V7+Gxa=}!8wO`q>6^r=X5NRz zejq8ckf_O{W>QSDv$IHb98tZkZ&vQTJe)3rEDxgD+@D2Cmt=FKTLUNKDx^O<6=7Np0%U7Xr$NFN;+4-QD2OjVflKR_6b#ZHc zWs)Q&&a*8A%2iqojys;8zQg7aNSs zR2t!pNQOw0nn2IF+Lnidb(L`TPzL{TXVZ*@&VZ18MnsmlX;{-+v?;gCfk5z=oWPJ1 z9y^a^CzodGEgL34aH;dG6TYlJCe8OGZUnW7rs5}13>N%hJ{jR;(P25sG5jX(#q*tI z!abD&(c#0VC*0;#uvm-9CW-3u`o`}&wSfh}uMGdKPKmI(%5**uGpPAW7n9N5bAI7d?4kM8gWX$rS+|CsrC8~HMclX{Lj!BANe?PYyH-B8u>#^^T z$Mv|b>-og*ImZv%fqm*f_oEy~#{D%puCx;(2wqwC@Og^|t=stY{4>{FR@vKt>lmgS zI$X=-CeBumZlY7re|pFlcMVZWdhk=cjr8+qP*zO-98)Q={MtQviG6A5m5dAwY zBX7mh>!W`wCiK1|vU_~c+d4haJ|;15vKeg7#2r%AS8nDm= zLJnB)APC)KWWEZGYfj|3yBUNj%Gyr9^ju*;KG&u!-dv3SzC~MnAlyhoy-9tXm=iy< zxxt}?RA1P2R>QFF)08n1;!D$a_`q2Q7T;RewW@-+o-*v5tlAiNR~oZun-jM3!mG>Z z=kgO9m3|pAUJY$^c=^ksZ8BOFO0Gwe>8oA*zx=)qN!D3hPWiFQ2_b_#N`3_jYs%O2 zr`;&^pzvGo!IwKuD=!N$kO`)EHqmduw4jN;??aNKQc?m`PI|VzHW+zAKn;iAX(#)T zVP16H@4N`irXfK>O~~aj(WLelcLs8~Vn(a7F5(AwT9@c&E_0OQtfzs#YUJEAQCCVg z%*tAt(rrYrFNClAx%{jh2~6i*g&)eb7X@mXd7I-4 zP~)XPn>!Z^3zb2#T{-C;*4!fVKJBc0L>W_CsX?R6`Kt@#Ns&8L*Rg$kC`c51PiSC5 zDQentaiK95ZY1+DZtKCd7uK(ZuJuvWJFen$cO-qnNa~-8?C)~bN%a#Y-`|!RuExW z+XoOtT1B9fCMDa`m%ArehamDz?89}6zK>0c@tHI(bfk(Yi6x|mx)Bu@wOAjXhMEF% zgG7tSSjTghqO0|a-`Tk)!nH|l4t=$0v3&ovs%|34@u1MUIZ2F6F?~+>_bm$Fs>Vvs z6@!H=w-Qe1n)xMvTJ(uphUF+Lw2W2e@UN4Ge({A;d0#unv0T|8y;nY72FZ+HPy~9p zR+LKe(%+0E9S<*3A1>=;L_843)rs-HjlZt`uA&M?o=Ye8b0?y)RG`f0xnrN|({!H~ ztTi?4`SOEnzi0ypT12BOT*-s7TaXF{ZpELCgWsW-C-yg5%}YrBpyFED7EP0-bspqF zzfJ1_i{=47q)`}pxk;&|RF%_LcD&?{hUG3{}jZRMou3uzUef&~uE6^{kiYn2O61l zP$Dqo(L07>%NBz`W1iD_dg$7$S(AY$FR>n{S}ou`WX~=g4bqkIpFJw9L@#3u1>VNW ztlA#;DZr?ISI&*ayiPlYzV-*9h2h}Ivd={V-@FgO4Uu9}wA}C3B7a|yO#TQK^V5ly zuaF-wG$B(pof+kg(I3{fNeIMW>v&X2B@*^qksO1+>X*^4pw9I)CA1Bdl=B*Ec-~dL zQZ|CN@%c0xn9`lp$ksqi4Wq`q)Go}tj!;yo?vQz@ee0CgM89fcbNxx@qzVTf1h^q*R!H_`m`6 zcp0hjthQ*@KzE-Q!W53`D^2;;U;4+=`1^EjT>+vKS-r#Y+wg$~5P07#sVBxQnsLC`&K2NemHgm@6Q$zP=+>zHFk?hSQAPyKAh7B-QIsr-E#=tF@Y4QQ$;9_ZYth^2}mz&9+1-l~j>& zJ~DPf=HmUAkQ`(u@9C$y(+VvY=3520-8|8!ODO_ow$GNji`bVrUn^=3etkidzQ0v}?DZ2Kif$1NA zEni%3Ej&ZaJz{S6Ow4FxK)vZ77!Zru|0!nVIq>Xh2Jpk0nsy&jqzp(&F~X?7xR~Iz_J0&y+l*ei?Es<RW z2zqEULSROfj}}+M-tftEJz-~2Dhc``j5n6aeKm?oq>fZ=%pvV-G*y!~V=jRGB%!V^ zWLwqsuQ|P+yeshia8#01Q`b&iOjQa|_`eMZ4UQkQfpaXK*su60a>AR%Pc*`l zvA0HDg&Iseie+V(SKrxetrDR9v;W3d-|%xL%)P^ZB)#ovhZP*lY5$W{{vsllJz7~~ z*L8Wt3R}G8FHg7~I(VN^#rrd;9xq6RnXXS(J>FWnO9!ceEXXh?oc}T#?q!QdtSJ%G zeW$aCK|q!-rfS7Ui8U=DB#*<5sPD?0Md_m~!nbt3-zu!Riu#mY=^Tq>&!k97#6Mm8 z7I5LEw#W(24mxVhYukx!Rx*68c$r}p$lf%J^<44ik}0PnPB#0F?4*R{B8E=Dd$I@v zm*pA(l(YdfJ)4c=LxxlJrP9yi8+3gF{}@XE7?T{edt_-KA@6O4G2d`!KY<33+0{8-TyGf6v8DGngpmQDZLar#n=1jg< z@m}L$cO?zrA#_)g?4K4U%g&Cl86T;+WVTroI4`ovAnrHM!NKhXs9p4}jm#|u&kV`# ztM9^wL5rtn5OqfcX}%(<+dS0`%8fv^?Z>Bxp>zKltfcg zs#l9QdozX8(b9~3WVs~mN=M?o8BASv>qErDq*5HguNGk%37};1`i86UWl35Am262~ zH+`P)G%moKTm~RG#+;>*EgvZbF9IXH#PK_A4Omf$9vd>udY_YONuGIdN(YG{$>LPk8oT(ocz_^r4_lDK3z74%@^I&Oj%y7ZG+-7O7H^mD%rw`j?HyL%N={LTk zG@!L)MRMw)&~8PoihTR~b*MGzYWWUJMDTZcq3g`4U6lR?NK?gSqmQOtjt`$Cd= zhtJj`&2!#De{b6bD(KuI9;6WVt%)C)lLh*m-Q0@OeQ1T`1DBZC_8zVBJT~w~=sf*v zl`l-IcXr8%HUrg>b%GPE`3CUk4KBN?y-N_vGsTfvQ*MvP?7f-WVa=l_s*5Z`Q*+a! zpzDtHwJBuP7pmv6pNOgJ`B>() zt-5}o3SM7NDD~7g9xfNOm1nT;g=#HQ`p*mQKqj0Ll>-cZEcJY)$h}a@IOpg|TChMK zFrL!^_ST5Jq=Hn~hqR)qboA;@1~_a3>BzdWoM_8p(opDp^r((+*tbtaf=y3J_;{H* zd8EZ`?Bv`J%?zjL!k~xtTP`uRHg0UE(FPwspc(w)c30w0NWg zf})Z|1O8Iv-e*xX0(Q5nxJQF+%MXd1b{3ZF5E;94^Nz zzd9;H_(HS-FdtDBamnsqv=g%(Z#Zg+(G7A!tq?&Qz$R5p1k9VhzG29b??LKYmiy`i z;?(A#FWijW2th={o>KrPyy7`Y-?B3Pt4w>P>tDotjJvisE2}*S6{m>{U=Iso=V(BE zZ{FST>$79IdBQfmrXHdn^p`YOygLSv(p@hoPt14qj~djsPag}yBY}krFFmST+X# zxjygkCla@Bk>9=xH83}atp|z)wMqrFqLQ(!Hex|NiwZ$r0{eu0cZ%oCB)j)np}G0` zBeC}u)+A`4(eB^hY_<9Ey&9{g>y`;+6I2QVJ@j>=6^Su!z?nA4l5qZjJu=hE0 zX+AHkJ8^M>=W7?fHZ_rNnPO$Ok3Y6p#`?63jNrsJ>r^LL{hFm|Z^{@EY|`PZf4|dl zKKOJ_nd*4}ADB~-uHO&qq^!l2hm46Jv9S2qJL2)}%~rg`3I}D1Y9I0Kh>6#)*Z};P zt#Nd@4Zj1xeE8Emi~Ax64WrtE4;I!Grr4+RkK60y!rW@ST~5nNiFY*b>|@W4%D)Z+ z`mK=Slb_zY2-4q?JGw98?_hG`vY38#oMf8jz64(&YrRB(~6~EKfq(CZ=3-NV9HGz}caQE&`_h|=tEgW8p@ z+h3XrKO)N{B42KT>A0zIw=bQMuv$p@$`eZ#W#LHG#};H>MM}|XURJ7gjR5i;E=#T{ zL*M@eEw%nsCyBG@rpifHQdZwB2-k`r;X^NJ(=5!8{cNkI+Y*+ri(q>uY^U8_g$5p88;I z@W}43NColE+22231-L`UBUxnq&X|?0(nW&ywSL_t5zyYbrB9e?!Z^*Lj~SqqcO^<@ zQsP2TNf(`SLQ4@H1hogLO6T;ib| zY0h`Tpo*lc{vW3-q+f_|Lb(E(cNLG{q>Ely9e_H_ei1Y@v0)R5vW;Y z}f+{w0z~v@bq{^u(Z!d@kb%+W5(w29yjgQZ;?ZQ~T1o<`y$LMo{xk^CD$n-!F zVcT2g54&uWHH8v5Ln8s`59FfMyd^kehK0}U+3NW=*Gx0=PF@Cn+E%;ydJYz^S{4I< z22A?%%f`fT&J7|F-dPdPmAS@{cHeqXU5)>zOnwaUmr#ERN8U~t3$o7};FGRZcbqTK$IH}Sa!>q~Y*QO&^YAol5`wRV~D z9t`au9T2#?`8F(24FjRvLlz3iThNT>Pfhuu(SBCm`!GfF6Q1zXWWdUl0Oe#C9dZ5% zP+gU9CH-Z%<;&K@Ke{@q*3+lyGI-O=kaihakiV|ae>^f!s^2m{Jq6sx>_;5a;!EEb zewy+*8U%aPfF3z;ddx*i&PFaRRbTj67ioxzBQQ|!o9`!Cx5Dkar(2ax(%v5wd}XYanwAP0~#7e@0}wV zZZg~sRUlv6y{rnW|%+nU`ax&cp!N%WBL zLm*R)YYWF)5V@ zW_WnBf*~fNS7+vr(xetyH=XXU2V%g~z#Vf2s8$5bLtWP(y@sG})5qF*`5C8d0CPv^ zpCHm+*i%CPK-br%lU*2bU0mvZc-Ln()%qsF;6=X9--D-)#>;1r%#@2j3_s#F^_2OviS%M z+0&x_HA=tkhh=!1!N^_csQG}4U4C3AHk~YAqaVk7K*3Fe)~`mVA);qy9xLHM5eAkU zBUvR}P4AqCpuEtYMM!)Y{hRM^0~JsWCJt7m6-lCbukkckTCt<5i&g0Uy<*HM z2{)5h>_5055qD1@oKA?j;ju}3`Xh0)Vfkl#N>Atd?br2n1pbDUlEl(;GU0@$Dv*XOp=w**46Lz za5N~y%TCH&%DEo?O`!M5tol&L2L}qkw?x-`BT1r}&&d+k>!o?~dC<6r8~;5V%g#-Z zIg7VySrHLb$JGZ@?tf5)f#X@W5WGq|S%8oWGn-Pm=0LQVepi)WY0dfB&ISXK_ol5`IrO?G|T9yh~4I=-28@1&;>o$2P};`{lAcQj{@yS ztliiRAzDpsK@_tjuruT}jBXxK$OnG!xSnpLSeHwJzFHX)*H{)etLBlEj32Oxv2zfc zQ?KqGaBy(2d7qJ?=JjSfr@dz1U9q6?Ajj9G#r&hFpv~d1g0MN zwk&qSxAE?wWr#>&DmNjD2>QLJ@ipwTnma4mV-Du~z(9_g>B>JMh^?=(%22<^qDfiI z5iF}_!0goXrvy?1i%Hj9j-1#NlTC>Bf1xliSFs^F-_Xu~uiny~%X>SU^syw1go?tO zc3>pXvD{f;Pq-MeyiP^7p5J|N-f33x3LqgWgq15~JH6o{HsF?Oos+RbmGyO@ku1Oe z(zTUg-=2ImN&I!;<&A1eK&9LW7799mE)7(BR{H=Q`4%>c%Xn8Ap5`Zn2#^E zv2o!RDpdPhTUa>#`A(v?_xu>PBon{Uk>IW`7?=|jhqg&Tj{-q3{PFl1-$v7G7pP4tMqXV=S?{HcBJEN7Mg*K2hzGc&qgL z9pkrmB8qSluhdM3H9Fv}ww9d7HN@OI*`CLInE$}q(8Kx~R-|SO4mYExOnLU7N&_4b zU(dBm_s%!R^FhVI^m#Hz0tkY;03#uVJ?$cFtP0@=f*0!7Z*0!0sBvrsl~|MwPzeL6GK9(L&d2d&3$_RaVzLUkkk9W_R#K4JA^z z&wtoiDneOka8LI9S-{b6Y_J6<7lz{R8Yez?EjJ&Xe0Wqtoa9>ZTYcexq*!AtPv$tX zbW0lx!o_43Q=s)4Rm{8${=UvD!i-AK0t!Oeoe2RA%#?*m=Z#0*>YrEvJ&zsOfp^nk z!SfG~geS~>)Fam-0+lH?>Yn8JCdHIW;DRm*O*S87)o**FKW2_ObMtd-BD*5P} z6kAZXZp5?%+ebLfT?Z+^-iHG$l23#}v7Xw$J;odRT9n&^&=lM!daUEA+W8w_qi4n0 zN+odI5olqvOdX*1Go-zjMmN|UUd#<8TE0?*|9x;}B|v|pE-9v$9WTWNu&@5`OL1s3 zc5Y+)jeKe0$AQ>%QxjLsC%q%iB~BIdTEkyv45%;ZH!wQIl(>iioF_Syg0gpl@CNXL zXXuBK;09;7usni9K+Tvs){I^suuTe=o!hYE)kHwk>QgR@vLOwa=}s8Rv}D0M!@%z^ z`Q&2Uu{bkw1?NDVnd`3irR*22d$(7(H{K}5Wu}S2>1`e9xP22N1tDM$Eu7eQ9TJv% z6ST*XB|aNpmoTQLZfv65swistkP-i;yCj?2wq_oT9Rd7|liO`!voaBAPaXt;CV-he z>P+D9c_p%sqI?qYf-m|TX4w_=M%;CY;j$h#n)`8pLH}4hX7*IuctU@3d`-EYN(;Eg1mc)WQ~i75WB zUVDUWQk0(wM{_(bkVa=lfk{I{h6avbqXIl9qB$-9M5v;^j_f1`nGHWfe&0>5 zJk}34aR#iAYz5K}V}faXWhbqACejrbMcSSyI@(fAMiYqYe4-3qJY@O5Nmq=wt8&wG zTZlIjBkC&iR;<@`E!6_gj@^f=|5WarQFKlHA1ok>g zwXwTh3@@|omT$9wJY4>1*DL`I*qWcpWhqU6oG^4O&)H}jm)4XQ{Jkt9IUAKnfC%6hVoc%aTVt+PX6(eB z3O+>R2g2%#tzO|tmUYC*3twDqTHX_FE~>Q8O42@h%z!+&29P`1ig=ZP+I}*0x`_f? z{M9FMMSjQk67u`afc-CbIUiFePe00?hXHWGnkas?NFx20?2r6BlE+(M+K$IVg4jim zXSzATX4#hfH;p8g`w#w}j1y%p9h7_Qa-TBzF`_Ki+R4b=@0yY<-B%ypTO8?c(g+kI zn{5^(*2lw+SRI^aIM?ME-wnKPAt#ze0fC-ffz+v1+fT*?3HrWU=h-E3l5x6ZC$z6H z2G@`;*1u~H+=raLq8n`QMB8A+5Dw?`*bEr<@jFmU4aqVOVmgXJ)*<`G;rK~Jh#<-A zD>J8RGI21Z;D?OUg@n}z+xNwTWg~f&JRVWMUv!h67Fe`lWy&4&7-OrcaS5(u3E%wA!8Ax%2O*6i+t-)%&#_urK*(5mYpYjV75Q=Oas* zoRS|qcQq}Nx}sM)zCVf-7+xB(KZUS@cQduY=;B_(&+=;{DZMG>VJDqy>75s=Vu%w* z+M2Spf7)V!YMpees=U_7qrq#`c`rXId|LWl;|V9VTh3doH(#UxVN@1{D`vm$(cCj6 zGfGmS9$OrrTqE~2vE8oS#zUrgSU+a>l2Pb|y_yEBM*U`<-Cga$#rn0*z`yQ@dQ^ug z4H0oNTVyPfK9BN;ZhuFB#_n+>do^2t3~*Dd?k4f94n_X@10sFBc8*&4+NAGUibGi& zN8UoeHt*rg?;41O-gT>Mf8s^iTrn87+i7xJ?)$@hUWq*3rllnbgjEiBx9SUefsN2A z#PL5u1u}}{0fzjCA98-Vm-HvIr`D_}J(FI@XZ)m|$wle*{dXTo-x7T|%Td&#T!fCF z-5Nj9_d8c+r0v5gu+bn4C8$EYc&-e}&4@~WE94synRG9D=;GtW-`mmaaokwQ2Eo#? z8O}aEKvH_)@)-fQ5jnI3<-Xbh&@x&3a$2ms(TBeWh1%~zQeQc3{zo_h)s9Shfyjjr?&dPlI1%W*(5WoY@nOKc zgzg&diiWT2SEH3en46o7mW6915Wt;7J1ol}Q+<_ys>*xHmhZ9Txv$YN5~#s$y0M%V zRJBmYhMIzQ~EfAaTv3?%JK}1ad)9(~{u#vM=_aL!>oZ_#nb;rHi7PctpuDh4_BPhewL?_N25`RAe|k+5*pr{Ly7 z*^Y}X5Mt@E3jya5>1OL1fjY`5B_aKTl0J28{TAD)@6C>PQyI88v%yNqCVrsh+g%gV ziGIqXoYLaRzWf=s3FmboHL#R*f>kfyD3)hJwWqlLu|~%MJeb#tq)J?WopSuDV3a*d zPwA{uz+;}-5ar2nauf+;BJ)t=X{J2sxYz(AmY(oe*|mNtP=|e1U(b%dV(NXGJ9${+ zup2Ilb&IpX_Od`-zz|-~fm#JffT6-6`Ci=C8bx<`CnY0?d$If4#Ea-hS!Ag1cjX*l z^Z^QVh@TPNiI0_AWDYc2L|s2W%I2U@So_E$D*Zjmhr`dm{UB_hdX!w>P^KAmfxP$- zHXJPU;x1AR);%({HjaYWG$t0zfpQ7=Xg#N-@7`w~Q9e(yb-5j{2o%C@ zI6iWHWCEK50q^FnWo&H}kECR%#(of>N7G*VGePx}!|FG*5b+Pu{qgoVslhqzxT&F~=b

    `4&}a_K!C;y>uF&}0x9=3AFpPgBoKVLm;yFx?)@ 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 n>O@CH_7 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web/img/icons/analytics.svg b/web/img/icons/analytics.svg new file mode 100644 index 00000000..02f34708 --- /dev/null +++ b/web/img/icons/analytics.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web/img/icons/authenticator.svg b/web/img/icons/authenticator.svg new file mode 100644 index 00000000..02f3ed19 --- /dev/null +++ b/web/img/icons/authenticator.svg @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web/img/icons/chain.svg b/web/img/icons/chain.svg new file mode 100644 index 00000000..8c46249e --- /dev/null +++ b/web/img/icons/chain.svg @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web/img/icons/dashboard.svg b/web/img/icons/dashboard.svg new file mode 100644 index 00000000..d9ab3f19 --- /dev/null +++ b/web/img/icons/dashboard.svg @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web/img/icons/domain.svg b/web/img/icons/domain.svg new file mode 100644 index 00000000..8551adbe --- /dev/null +++ b/web/img/icons/domain.svg @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web/img/icons/events.svg b/web/img/icons/events.svg new file mode 100644 index 00000000..5f4677d8 --- /dev/null +++ b/web/img/icons/events.svg @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web/img/icons/fees.svg b/web/img/icons/fees.svg new file mode 100644 index 00000000..781eb973 --- /dev/null +++ b/web/img/icons/fees.svg @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web/img/icons/flowchart.svg b/web/img/icons/flowchart.svg new file mode 100644 index 00000000..15c0070f --- /dev/null +++ b/web/img/icons/flowchart.svg @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web/img/icons/home.svg b/web/img/icons/home.svg new file mode 100644 index 00000000..0c5b4458 --- /dev/null +++ b/web/img/icons/home.svg @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web/img/icons/keys-auth.svg b/web/img/icons/keys-auth.svg new file mode 100644 index 00000000..c96023ab --- /dev/null +++ b/web/img/icons/keys-auth.svg @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web/img/icons/layout.svg b/web/img/icons/layout.svg new file mode 100644 index 00000000..a74fccb2 --- /dev/null +++ b/web/img/icons/layout.svg @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web/img/icons/lnurl-pay.svg b/web/img/icons/lnurl-pay.svg new file mode 100644 index 00000000..2fc34de9 --- /dev/null +++ b/web/img/icons/lnurl-pay.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/web/img/icons/lnurl-withdraw.svg b/web/img/icons/lnurl-withdraw.svg new file mode 100644 index 00000000..c18b7ba9 --- /dev/null +++ b/web/img/icons/lnurl-withdraw.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/web/img/icons/log.svg b/web/img/icons/log.svg new file mode 100644 index 00000000..f6f5def5 --- /dev/null +++ b/web/img/icons/log.svg @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web/img/icons/loop.svg b/web/img/icons/loop.svg new file mode 100644 index 00000000..d5f97a7d --- /dev/null +++ b/web/img/icons/loop.svg @@ -0,0 +1,4 @@ + + + + diff --git a/web/img/icons/node-add.svg b/web/img/icons/node-add.svg new file mode 100644 index 00000000..deb3ecf4 --- /dev/null +++ b/web/img/icons/node-add.svg @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web/img/icons/node-connect.svg b/web/img/icons/node-connect.svg new file mode 100644 index 00000000..beda9ab9 --- /dev/null +++ b/web/img/icons/node-connect.svg @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web/img/icons/node-info.svg b/web/img/icons/node-info.svg new file mode 100644 index 00000000..422d8b7a --- /dev/null +++ b/web/img/icons/node-info.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web/img/icons/nodes.svg b/web/img/icons/nodes.svg new file mode 100644 index 00000000..fa1ddf2f --- /dev/null +++ b/web/img/icons/nodes.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + diff --git a/web/img/icons/people.svg b/web/img/icons/people.svg new file mode 100644 index 00000000..45bc9422 --- /dev/null +++ b/web/img/icons/people.svg @@ -0,0 +1,4 @@ + + + + diff --git a/web/img/icons/rpc-forwarder.svg b/web/img/icons/rpc-forwarder.svg new file mode 100644 index 00000000..2e7bd899 --- /dev/null +++ b/web/img/icons/rpc-forwarder.svg @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web/img/icons/rpc-listen.svg b/web/img/icons/rpc-listen.svg new file mode 100644 index 00000000..b4d9971d --- /dev/null +++ b/web/img/icons/rpc-listen.svg @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web/img/icons/settings.svg b/web/img/icons/settings.svg new file mode 100644 index 00000000..0469ed45 --- /dev/null +++ b/web/img/icons/settings.svg @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web/img/icons/wall-of-bricks.svg b/web/img/icons/wall-of-bricks.svg new file mode 100644 index 00000000..06f68bd5 --- /dev/null +++ b/web/img/icons/wall-of-bricks.svg @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web/img/icons/wallet.svg b/web/img/icons/wallet.svg new file mode 100644 index 00000000..149b1702 --- /dev/null +++ b/web/img/icons/wallet.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web/img/icons/water-tap.svg b/web/img/icons/water-tap.svg new file mode 100644 index 00000000..571e1423 --- /dev/null +++ b/web/img/icons/water-tap.svg @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web/img/icons/webhook.svg b/web/img/icons/webhook.svg new file mode 100644 index 00000000..9338240e --- /dev/null +++ b/web/img/icons/webhook.svg @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web/img/paywall-logo-circle.png b/web/img/paywall-logo-circle.png new file mode 100644 index 0000000000000000000000000000000000000000..5ef09c0297cfe5e1acc3802c24def990c32a75ec GIT binary patch literal 97603 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 literal 0 HcmV?d00001 diff --git a/web/img/paywall-logo.png b/web/img/paywall-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..461ce5cc1c0d87c544a3b1fa1aafdb62c582e09c GIT binary patch literal 63890 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�Nk!BoEc5$?T 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 + +require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php'); +require(__DIR__ . '/../src/LNPay.php'); + +$config = require(__DIR__ . '/../config/test.php'); + +(new yii\web\Application($config))->run(); + + diff --git a/web/index.php b/web/index.php new file mode 100644 index 00000000..31200688 --- /dev/null +++ b/web/index.php @@ -0,0 +1,25 @@ +safeLoad(); + +// comment out the following two lines when deployed to production +defined('YII_DEBUG') or define('YII_DEBUG', getenv('YII_DEBUG')); +defined('YII_ENV') or define('YII_ENV',getenv('YII_ENV')); +if (getenv('LNPAY_FLAVOR')=='CLOUD') + define('LNPAY_FLAVOR_CLOUD',TRUE); +else + define('LNPAY_FLAVOR_CLOUD',FALSE); + +require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php'); +require(__DIR__ . '/../src/LNPay.php'); + +$config = yii\helpers\ArrayHelper::merge( + require(__DIR__ . '/../config/main.php'), + require(__DIR__ . '/../config/main-local.php'), + require(__DIR__ . '/../config/web.php'), + require(__DIR__ . '/../config/web-local.php') +); + +(new yii\web\Application($config))->run(); diff --git a/web/js/functions.js b/web/js/functions.js new file mode 100644 index 00000000..8feda4eb --- /dev/null +++ b/web/js/functions.js @@ -0,0 +1,68 @@ +$(document).ready(function(){ + if($(window).width() < 768){ + $('.navbar-toggler').click(function(){ + openNav(); + }); + function openNav() { + document.getElementById("myNav").style.height = "100%"; + var togle=false; + $('body').css({'height':'100%','overflow':'hidden'}); + } + $('.closebtn').click(function(){ + document.getElementById("myNav").style.height = "0%"; + $('body').css({'height':'auto','overflow':'visible'}); + }); + } + $('.ajaxFormLoader').on('ajaxBeforeSend', function (event, jqXHR, settings) { + // Activate waiting label + addLoadingCssToButton($(".ajaxFormLoader button")); + }).on('ajaxComplete', function (event, jqXHR, textStatus) { + // Deactivate waiting label + var response = jQuery.parseJSON(jqXHR.responseText); + var hasErrors = Object.keys(response).length; + if (hasErrors>0) + removeLoadingCssFromButton($(".ajaxFormLoader button")); + }); +}); + +function addLoadingCssToButton(button) { + button.prop("disabled",true); + button.append(''); + button.addClass('addedLoadingCssToButton'); +} +function removeLoadingCssFromButton(button) { + $(".cssLoader").removeClass("cssLoader fa fa-spinner fa-spin fa-fw margin-bottom"); + button.removeClass('disabled'); + button.prop('disabled',false); +} + +function copyTextToClipboard(elementId) { + /* Get the text field */ + var copyText = document.getElementById(elementId); + + /* Select the text field */ + copyText.select(); + + /* Copy the text inside the text field */ + document.execCommand("copy"); + + /* Alert the copied text */ + //alert("Copied the text: " + copyText.value); +} + +function CopyTextFromElementToClipboard(containerid) { + if (document.selection) { + var range = document.body.createTextRange(); + range.moveToElementText(document.getElementById(containerid)); + range.select().createTextRange(); + document.execCommand("copy"); + + } else if (window.getSelection) { + var range = document.createRange(); + range.selectNode(document.getElementById(containerid)); + window.getSelection().addRange(range); + document.execCommand("copy"); + //alert("text copied, copy in the text-area") + } +} + diff --git a/web/js/quiet/LICENSE b/web/js/quiet/LICENSE new file mode 100755 index 00000000..8bb8fad8 --- /dev/null +++ b/web/js/quiet/LICENSE @@ -0,0 +1,12 @@ +Copyright (c) 2016, Brian Armstrong +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/web/js/quiet/LICENSE-3RD-PARTY b/web/js/quiet/LICENSE-3RD-PARTY new file mode 100755 index 00000000..0dbd29d1 --- /dev/null +++ b/web/js/quiet/LICENSE-3RD-PARTY @@ -0,0 +1,104 @@ +------------------------------------------- +Liquid DSP +Copyright (c) 2007 - 2015 Joseph Gaeddert + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +------------------------------------------- +Emscripten +Emscripten is available under 2 licenses, the MIT license and the +University of Illinois/NCSA Open Source License. + +Both are permissive open source licenses, with little if any +practical difference between them. + +The reason for offering both is that (1) the MIT license is +well-known, while (2) the University of Illinois/NCSA Open Source +License allows Emscripten's code to be integrated upstream into +LLVM, which uses that license, should the opportunity arise. + +The full text of both licenses follows. + +============================================================================== + +Copyright (c) 2010-2014 Emscripten authors, see AUTHORS file. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +This program uses portions of Node.js source code located in src/library_path.js, +in accordance with the terms of the MIT license. Node's license follows: + + """ + Copyright Joyent, Inc. and other Node contributors. All rights reserved. + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to + deal in the Software without restriction, including without limitation the + rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + IN THE SOFTWARE. + """ + +------------------------------------------- +Jansson +Copyright (c) 2009-2014 Petri Lehtinen + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/web/js/quiet/README.md b/web/js/quiet/README.md new file mode 100755 index 00000000..488bf5ad --- /dev/null +++ b/web/js/quiet/README.md @@ -0,0 +1,54 @@ +Quiet.js +=========== + +**[Documentation](https://quiet.github.io/quiet-js/docs/Quiet.html)** + +This is a javascript binding for [libquiet](https://github.com/quiet/quiet), a library for sending and receiving data via sound card. It can function either via speaker or cable (e.g., 3.5mm). Quiet comes included with a few transmissions profiles which configure quiet's transmitter and receiver. For speaker transmission, there is a profile which transmits around the 19kHz range, which is essentially imperceptible to people (nearly ultrasonic). For transmission via cable, quiet.js has profiles which offer speeds of at least 40 kbps. + +Try it out in this [live example](https://quiet.github.io/quiet-js/). + +Compatibility +-------- +| Browser | Transmitter | Receiver | +| ------------------|-------------------------|------------------------------------| +| Chrome | *Supported* | *Supported*1 | +| Chrome (Android) | *Supported* | *Partially Supported*1,2| +| Edge | *Supported* | *Supported* | +| Firefox | *Supported* | *Partially Supported*3 | +| Firefox (Android) | *Supported* | *Partially Supported*2,3| +| Internet Explorer | *Not Supported* | *Not Supported* | +| Safari | *Supported* | *Not Supported*4 | +| Safari (iOS) | *Supported* | *Not Supported*4 | + +[1]: For Chrome receivers, the page *must* be delivered via https. Chrome does not support microphone input without TLS. + +[2]: GMSK profiles only + +[3]: Firefox's WebAudio implementation resamples audio input to 32kHz, which limits all audio received to 16kHz and below. This means the ultrasonic profile cannot be used for Firefox receivers. Additionally, the resampler used by Firefox produces strong audio distortion, which makes reception by some profiles difficult. However, the audible profiles work well. For the most recent information on this limitation, refer to [Bug 953265](https://bugzilla.mozilla.org/show_bug.cgi?id=953265). + +[4]: Safari does not support `getUserMedia` or microphone input in any capacity. + +Usage +-------- +The full documentation is available [here](http://quiet.github.io/quiet-js/docs/). + +Quiet-js includes a blob of libquiet compiled by emscripten as well as a javascript binding for ease of use. The bindings must be loaded before the compiled portion. Below is the recommended way to include Quiet in your project. + +``` + + + +``` + +Additionally, the emscripten compiled portion requires a memory initializer, `quiet-emscripten.js.mem`. This is loaded asynchronously by `quiet-emscripten.js`. + +**It is strongly recommended to also include libfec.js. An emscripten-compiled version of libfec may be found [here](https://github.com/quiet/libfec/releases) or with `npm install libfec`.** If libfec is not included, then quiet.js will not be able to use any profiles which use convolutional codes or Reed-Solomon error correction. + +For a complete example demonstrating ultrasonic text transmission and reception, see [this example](https://github.com/quiet/quiet-js/tree/master/examples/text). + + +License +-------- +Quiet and Quiet-js are licensed under 3-clause BSD. Quiet-js's emscripten-compiled output includes a statically-linked copies of [liquid dsp](http://liquidsdr.org/) and [libjansson](http://www.digip.org/jansson/), both of which are licensed under the MIT license. For more information on Quiet-js's 3rd party licenses, consult [LICENSE-3RD-PARTY](https://github.com/quiet/quiet-js/blob/master/LICENSE-3RD-PARTY). + +Additionally, it is strongly recommended to link [libfec](http://www.ka9q.net/code/fec/) (`npm install libfec`). libfec is licensed under LGPL. It is the intention of this project to adhere to the provisions of LGPL by dynamically linking libfec. However, neither this statement nor any other statements in these projects may be construed as legal advice from the author. It is solely the user's responsibility to ensure their own compliance with all applicable licenses. diff --git a/web/js/quiet/docs/Quiet.html b/web/js/quiet/docs/Quiet.html new file mode 100755 index 00000000..2f5f3299 --- /dev/null +++ b/web/js/quiet/docs/Quiet.html @@ -0,0 +1,2194 @@ + + + + + JSDoc: Namespace: Quiet + + + + + + + + + + + + + + +
    + +
    + Documentation generated by JSDoc 3.2.2 on Tue Mar 15 2016 00:24:30 GMT-0700 (PDT) +
    + + + + + \ No newline at end of file diff --git a/web/js/quiet/docs/index.html b/web/js/quiet/docs/index.html new file mode 100755 index 00000000..82b9467b --- /dev/null +++ b/web/js/quiet/docs/index.html @@ -0,0 +1,138 @@ + + + + + JSDoc: Index + + + + + + + + + + +
    + +

    Index

    + + + + + + + +

    + + + + + + + + + + + + + + +
    +

    Quiet.js

    +

    Documentation

    +

    This is a javascript binding for libquiet, a library for sending and receiving data via sound card. It can function either via speaker or cable (e.g., 3.5mm). Quiet comes included with a few transmissions profiles which configure quiet's transmitter and receiver. For speaker transmission, there is a profile which transmits around the 19kHz range, which is essentially imperceptible to people (nearly ultrasonic). For transmission via cable, quiet.js has profiles which offer speeds of at least 40 kbps.

    +

    Try it out in this live example.

    +

    Compatibility

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    BrowserTransmitterReceiver
    ChromeSupportedSupported1
    Chrome (Android)SupportedPartially Supported1,2
    EdgeSupportedSupported
    FirefoxSupportedPartially Supported3
    Firefox (Android)SupportedPartially Supported2,3
    Internet ExplorerNot SupportedNot Supported
    SafariSupportedNot Supported4
    Safari (iOS)SupportedNot Supported4
    +

    [1]: For Chrome receivers, the page must be delivered via https. Chrome does not support microphone input without TLS.

    +

    [2]: GMSK profiles only

    +

    [3]: Firefox's WebAudio implementation resamples audio input to 32kHz, which limits all audio received to 16kHz and below. This means the ultrasonic profile cannot be used for Firefox receivers. Additionally, the resampler used by Firefox produces strong audio distortion, which makes reception by some profiles difficult. However, the audible profiles work well. For the most recent information on this limitation, refer to Bug 953265.

    +

    [4]: Safari does not support getUserMedia or microphone input in any capacity.

    +

    Usage

    +

    The full documentation is available here.

    +

    Quiet-js includes a blob of libquiet compiled by emscripten as well as a javascript binding for ease of use. The bindings must be loaded before the compiled portion. Below is the recommended way to include Quiet in your project.

    +
        <script type="text/javascript" src="quiet.js"></script>
    +    <script type="text/javascript" src="your_project.js"></script>
    +    <script async type="text/javascript" src="quiet-emscripten.js"></script>
    +

    Additionally, the emscripten compiled portion requires a memory initializer, quiet-emscripten.js.mem. This is loaded asynchronously by quiet-emscripten.js.

    +

    It is strongly recommended to also include libfec.js. An emscripten-compiled version of libfec may be found here or with npm install libfec. If libfec is not included, then quiet.js will not be able to use any profiles which use convolutional codes or Reed-Solomon error correction.

    +

    For a complete example demonstrating ultrasonic text transmission and reception, see this example.

    +

    License

    +

    Quiet and Quiet-js are licensed under 3-clause BSD. Quiet-js's emscripten-compiled output includes a statically-linked copies of liquid dsp and libjansson, both of which are licensed under the MIT license. For more information on Quiet-js's 3rd party licenses, consult LICENSE-3RD-PARTY.

    +

    Additionally, it is strongly recommended to link libfec (npm install libfec). libfec is licensed under LGPL. It is the intention of this project to adhere to the provisions of LGPL by dynamically linking libfec. However, neither this statement nor any other statements in these projects may be construed as legal advice from the author. It is solely the user's responsibility to ensure their own compliance with all applicable licenses.

    +
    + + + + + + +
    + + + +
    + +
    + Documentation generated by JSDoc 3.2.2 on Tue Mar 15 2016 00:24:30 GMT-0700 (PDT) +
    + + + + + \ No newline at end of file diff --git a/web/js/quiet/docs/quiet.js.html b/web/js/quiet/docs/quiet.js.html new file mode 100755 index 00000000..049fb6bd --- /dev/null +++ b/web/js/quiet/docs/quiet.js.html @@ -0,0 +1,630 @@ + + + + + JSDoc: Source: quiet.js + + + + + + + + + + +
    + +

    Source: quiet.js

    + + + + + +
    +
    +
    /* Copyright 2016, Brian Armstrong
    + * quiet.js includes compiled portions from other sources
    + *  - liquid DSP, Copyright (c) 2007-2016 Joseph Gaeddert
    + *  - libjansson, Copyright (c) 2009-2016 Petri Lehtinen
    + *  - emscripten, Copyright (c) 2010-2016 Emscripten authors
    + */
    +
    +/** @namespace */
    +var Quiet = (function() {
    +    // sampleBufferSize is the number of audio samples we'll write per onaudioprocess call
    +    // must be a power of two. we choose the absolute largest permissible value
    +    // we implicitly assume that the browser will play back a written buffer without any gaps
    +    var sampleBufferSize = 16384;
    +
    +    // initialization flags
    +    var emscriptenInitialized = false;
    +    var profilesFetched = false;
    +
    +    // profiles is the string content of quiet-profiles.json
    +    var profiles;
    +
    +    // our local instance of window.AudioContext
    +    var audioCtx;
    +
    +    // consumer callbacks. these fire once quiet is ready to create transmitter/receiver
    +    var readyCallbacks = [];
    +    var readyErrbacks = [];
    +    var failReason = "";
    +
    +    // these are used for receiver only
    +    var gUM;
    +    var audioInput;
    +    var audioInputFailedReason = "";
    +    var audioInputReadyCallbacks = [];
    +    var audioInputFailedCallbacks = [];
    +    var frameBufferSize = Math.pow(2, 14);
    +
    +    // anti-gc
    +    var receivers = [];
    +
    +    // isReady tells us if we can start creating transmitters and receivers
    +    // we need the emscripten portion to be running and we need our
    +    // async fetch of the profiles to be completed
    +    function isReady() {
    +        return emscriptenInitialized && profilesFetched;
    +    };
    +
    +    function isFailed() {
    +        return failReason !== "";
    +    };
    +
    +    // start gets our AudioContext and notifies consumers that quiet can be used
    +    function start() {
    +        audioCtx = new (window.AudioContext || window.webkitAudioContext)();
    +        console.log(audioCtx.sampleRate);
    +        var len = readyCallbacks.length;
    +        for (var i = 0; i < len; i++) {
    +            readyCallbacks[i]();
    +        }
    +    };
    +
    +    function fail(reason) {
    +        failReason = reason;
    +        var len = readyErrbacks.length;
    +        for (var i = 0; i < len; i++) {
    +            readyErrbacks[i](reason);
    +        }
    +    };
    +
    +    function checkInitState() {
    +        if (isReady()) {
    +            start();
    +        }
    +    };
    +
    +    function onProfilesFetch(p) {
    +        profiles = p;
    +        profilesFetched = true;
    +        checkInitState();
    +    };
    +
    +    // this is intended to be called only by emscripten
    +    function onEmscriptenInitialized() {
    +        emscriptenInitialized = true;
    +        checkInitState();
    +    };
    +
    +    /**
    +     * Set the path prefix of quiet-profiles.json and do an async fetch of that path.
    +     * This file is used to configure transmitter and receiver parameters.
    +     * <br><br>
    +     * This function must be called before creating a transmitter or receiver.
    +     * @function setProfilesPrefix
    +     * @memberof Quiet
    +     * @param {string} prefix - The path prefix where Quiet will fetch quiet-profiles.json
    +     * @example
    +     * setProfilesPrefix("/js/");  // fetches /js/quiet-profiles.json
    +     */
    +    function setProfilesPrefix(prefix) {
    +        if (profilesFetched) {
    +            return;
    +        }
    +        if (!prefix.endsWith("/")) {
    +            prefix += "/";
    +        }
    +        var profilesPath = prefix + "quiet-profiles.json";
    +
    +        var fetch = new Promise(function(resolve, reject) {
    +            var xhr = new XMLHttpRequest();
    +            xhr.overrideMimeType("application/json");
    +            xhr.open("GET", profilesPath, true);
    +            xhr.onload = function() {
    +                if (this.status >= 200 && this.status < 300) {
    +                    resolve(this.responseText);
    +                } else {
    +                    reject(this.statusText);
    +                }
    +            };
    +            xhr.onerror = function() {
    +                reject(this.statusText);
    +            };
    +            xhr.send();
    +        });
    +
    +        fetch.then(function(body) {
    +            onProfilesFetch(body);
    +        }, function(err) {
    +            fail("fetch of quiet-profiles.json failed: " + err);
    +        });
    +    };
    +
    +    /**
    +     * Set the path prefix of quiet-emscripten.js.mem.
    +     * This file is used to initialize the memory state of emscripten.
    +     * <br><br>
    +     * This function must be called before quiet-emscripten.js has started loading.
    +     * If it is not called first, then emscripten will default to a prefix of "".
    +     * @function setMemoryInitializerPrefix
    +     * @memberof Quiet
    +     * @param {string} prefix - The path prefix where emscripten will fetch quiet-emscripten.js.mem
    +     * @example
    +     * setMemoryInitializerPrefix("/");  // fetches /quiet-emscripten.js.mem
    +     */
    +    function setMemoryInitializerPrefix(prefix) {
    +        Module.memoryInitializerPrefixURL = prefix;
    +    }
    +
    +    /**
    +     * Set the path prefix of libfec.js.
    +     * Although not strictly required, it is highly recommended to include this library.
    +     * <br><br>
    +     * This function, if used, must be called before quiet-emscripten.js has started loading.
    +     * If it is not called first, then emscripten will not load libfec.js.
    +     * @function setLibfecPrefix
    +     * @memberof Quiet
    +     * @param {string} prefix - The path prefix where emscripten will fetch libfec.js
    +     * @example
    +     * setLibfecPrefix("/");  // fetches /libfec.js
    +     */
    +    function setLibfecPrefix(prefix) {
    +        Module.dynamicLibraries = Module.dynamicLibraries || [];
    +        Module.dynamicLibraries.push(prefix + "libfec.js");
    +    }
    +
    +    /**
    +     * Callback to notify user that quiet.js failed to initialize
    +     *
    +     * @callback onError
    +     * @memberof Quiet
    +     * @param {string} reason - error message related to failure
    +     */
    +
    +    /**
    +     * Add a callback to be called when Quiet is ready for use, e.g. when transmitters and receivers can be created.
    +     * @function addReadyCallback
    +     * @memberof Quiet
    +     * @param {function} c - The user function which will be called
    +     * @param {onError} [onError] - User errback function
    +     * @example
    +     * addReadyCallback(function() { console.log("ready!"); });
    +     */
    +    function addReadyCallback(c, errback) {
    +        if (isReady()) {
    +            c();
    +            return;
    +        }
    +        readyCallbacks.push(c);
    +        if (errback !== undefined) {
    +            if (isFailed()) {
    +                errback(failReason);
    +                return;
    +            }
    +            readyErrbacks.push(errback);
    +        }
    +    }
    +
    +    /**
    +     * Callback used by transmit to notify user that transmission has finished
    +     * @callback onTransmitFinish
    +     * @memberof Quiet
    +     */
    +
    +    /**
    +     * Callback for user to provide data to a Quiet transmitter
    +     * <br><br>
    +     * This callback may be used multiple times, but the user must wait for the finished callback between subsequent calls.
    +     * @callback transmit
    +     * @memberof Quiet
    +     * @param {ArrayBuffer} payload - bytes which will be encoded and sent to speaker
    +     * @param {onTransmitFinish} [done] - callback to notify user that transmission has completed
    +     * @example
    +     * transmit(Quiet.str2ab("Hello, World!"), function() { console.log("transmission complete"); });
    +     */
    +
    +    /**
    +     * Create a new transmitter configured by the given profile name.
    +     * @function transmitter
    +     * @memberof Quiet
    +     * @param {string} profile - name of profile to use, must be a key in quiet-profiles.json
    +     * @returns {transmit} transmit - transmit callback which user calls to start transmission
    +     * @example
    +     * var transmit = transmitter("robust");
    +     * transmit(Quiet.str2ab("Hello, World!"), function() { console.log("transmission complete"); });
    +     */
    +    function transmitter(profile) {
    +        // get an encoder_options object for our quiet-profiles.json and profile key
    +        var c_profiles = Module.intArrayFromString(profiles);
    +        var c_profile = Module.intArrayFromString(profile);
    +        var opt = Module.ccall('quiet_encoder_profile_str', 'pointer', ['array', 'array'], [c_profiles, c_profile]);
    +
    +        // libquiet internally works at 44.1kHz but the local sound card may be a different rate. we inform quiet about that here
    +        var encoder = Module.ccall('quiet_encoder_create', 'pointer', ['pointer', 'number'], [opt, audioCtx.sampleRate]);
    +
    +        // some profiles have an option called close_frame which prevents data frames from overlapping multiple
    +        //     sample buffers. this is very convenient if our system is not fast enough to feed the sound card
    +        //     without any gaps between subsequent buffers due to e.g. gc pause. inform quiet about our
    +        //     sample buffer size here so that it can reduce the frame length if this profile has close_frame enabled.
    +        var frame_len = Module.ccall('quiet_encoder_clamp_frame_len', 'number', ['pointer', 'number'], [encoder, sampleBufferSize]);
    +        var samples = Module.ccall('malloc', 'pointer', ['number'], [4 * sampleBufferSize]);
    +
    +        // return user transmit function
    +        return function(buf, done) {
    +            var payload = new Uint8Array(buf);
    +            var payloadOffset = 0;
    +
    +            // fill as much of quiet's transmit queue as possible
    +            var writebuf = function() {
    +                if (payloadOffset == payload.length) {
    +                    return;
    +                }
    +                for (var i = payloadOffset; i < payload.length; ) {
    +                    var frame = payload.subarray(payloadOffset, payloadOffset + frame_len);
    +                    var written = Module.ccall('quiet_encoder_send', 'number', ['pointer', 'array', 'number'], [encoder, frame, frame.length]);
    +                    if (written === -1) {
    +                        break;
    +                    }
    +                    payloadOffset += frame.length;
    +                    i += frame.length;
    +                }
    +            };
    +
    +            writebuf();
    +
    +            // yes, this is pointer arithmetic, in javascript :)
    +            var sample_view = Module.HEAPF32.subarray((samples/4), (samples/4) + sampleBufferSize);
    +
    +            var script_processor = (audioCtx.createScriptProcessor || audioCtx.createJavaScriptNode);
    +            var transmitter = script_processor.call(audioCtx, sampleBufferSize, 1, 2);
    +
    +            var finished = false;
    +            transmitter.onaudioprocess = function(e) {
    +                var output_l = e.outputBuffer.getChannelData(0);
    +
    +                if (finished) {
    +                    for (var i = 0; i < sampleBufferSize; i++) {
    +                        output_l[i] = 0;
    +                    }
    +                    return;
    +                }
    +
    +                var written = Module.ccall('quiet_encoder_emit', 'number', ['pointer', 'pointer', 'number'], [encoder, samples, sampleBufferSize]);
    +                output_l.set(sample_view);
    +
    +                // libquiet notifies us that the payload is finished by returning written < number of samples we asked for
    +                if (written < sampleBufferSize) {
    +                    // be extra cautious and 0-fill what's left
    +                    //   (we want the end of transmission to be silence, not potentially loud noise)
    +                    for (var i = written; i < sampleBufferSize; i++) {
    +                        output_l[i] = 0;
    +                    }
    +                    // user callback
    +                    if (done !== undefined) {
    +                            done();
    +                    }
    +                    finished = true;
    +                    window.setTimeout(function() { transmitter.disconnect(); }, 1500);
    +                }
    +                window.setTimeout(writebuf, 0);
    +            };
    +
    +            // put an input node on the graph. some browsers require this to run our script processor
    +            // this oscillator will not actually be used in any way
    +            var dummy_osc = audioCtx.createOscillator();
    +            dummy_osc.type = 'square';
    +            dummy_osc.frequency.value = 420;
    +            dummy_osc.connect(transmitter);
    +
    +            transmitter.connect(audioCtx.destination);
    +        };
    +    };
    +
    +    // receiver functions
    +
    +    function audioInputReady() {
    +        var len = audioInputReadyCallbacks.length;
    +        for (var i = 0; i < len; i++) {
    +            audioInputReadyCallbacks[i]();
    +        }
    +    };
    +
    +    function audioInputFailed(reason) {
    +        audioInputFailedReason = reason;
    +        var len = audioInputFailedCallbacks.length;
    +        for (var i = 0; i < len; i++) {
    +            audioInputFailedCallbacks[i](audioInputFailedReason);
    +        }
    +    };
    +
    +    function addAudioInputReadyCallback(c, errback) {
    +        if (errback !== undefined) {
    +            if (audioInputFailedReason !== "") {
    +                errback(audioInputFailedReason);
    +                return
    +            }
    +            audioInputFailedCallbacks.push(errback);
    +        }
    +        if (audioInput instanceof MediaStreamAudioSourceNode) {
    +            c();
    +            return
    +        }
    +        audioInputReadyCallbacks.push(c);
    +    }
    +
    +    function gUMConstraints() {
    +        if (navigator.webkitGetUserMedia !== undefined) {
    +            return {
    +                audio: {
    +                    optional: [
    +                      {googAutoGainControl: false},
    +                      {googAutoGainControl2: false},
    +                      {echoCancellation: false},
    +                      {googEchoCancellation: false},
    +                      {googEchoCancellation2: false},
    +                      {googDAEchoCancellation: false},
    +                      {googNoiseSuppression: false},
    +                      {googNoiseSuppression2: false},
    +                      {googHighpassFilter: false},
    +                      {googTypingNoiseDetection: false},
    +                      {googAudioMirroring: false}
    +                    ]
    +                }
    +            };
    +        }
    +        if (navigator.mozGetUserMedia !== undefined) {
    +            return {
    +                audio: {
    +                    echoCancellation: false,
    +                    mozAutoGainControl: false,
    +                    mozNoiseSuppression: false
    +                }
    +            };
    +
    +        }
    +        return {
    +            audio: {
    +                echoCancellation: false
    +            }
    +        };
    +    };
    +
    +
    +    function createAudioInput() {
    +        audioInput = 0; // prevent others from trying to create
    +        gUM.call(navigator, gUMConstraints(),
    +            function(e) {
    +                audioInput = audioCtx.createMediaStreamSource(e);
    +
    +                // stash a very permanent reference so this isn't collected
    +                window.quiet_receiver_anti_gc = audioInput;
    +
    +                audioInputReady();
    +            }, function(reason) {
    +                audioInputFailed(reason.name);
    +        });
    +    };
    +
    +    /**
    +    * Callback used by receiver to notify user that a frame was received but
    +    * failed checksum. Frames that fail checksum are not sent to onReceive.
    +    *
    +    * @callback onReceiveFail
    +    * @memberof Quiet
    +    * @param {number} total - total number of frames failed across lifetime of receiver
    +    */
    +
    +    /**
    +     * Callback used by receiver to notify user of errors in creating receiver.
    +     * This is a callback because frequently this will result when the user denies
    +     * permission to use the mic, which happens long after the call to create
    +     * the receiver.
    +     *
    +     * @callback onReceiverCreateFail
    +     * @memberof Quiet
    +     * @param {string} reason - error message related to create fail
    +    */
    +
    +    /**
    +     * Callback used by receiver to notify user of data received via microphone/line-in.
    +     *
    +     * @callback onReceive
    +     * @memberof Quiet
    +     * @param {ArrayBuffer} payload - chunk of data received
    +    */
    +
    +    /**
    +     * Create a new receiver with the profile specified by profile (should match profile of transmitter).
    +     * @function receiver
    +     * @memberof Quiet
    +     * @param {string} profile - name of profile to use, must be a key in quiet-profiles.json
    +     * @param {onReceive} onReceive - callback which receiver will call to send user received data
    +     * @param {onReceiverCreateFail} [onCreateFail] - callback to notify user that receiver could not be created
    +     * @param {onReceiveFail} [onReceiveFail] - callback to notify user that receiver received corrupted data
    +     * @example
    +     * receiver("robust", function(payload) { console.log("received chunk of data: " + Quiet.ab2str(payload)); });
    +     */
    +    function receiver(profile, onReceive, onCreateFail, onReceiveFail) {
    +        var c_profiles = Module.intArrayFromString(profiles);
    +        var c_profile = Module.intArrayFromString(profile);
    +        var opt = Module.ccall('quiet_decoder_profile_str', 'pointer', ['array', 'array'], [c_profiles, c_profile]);
    +
    +        // quiet creates audioCtx when it starts but it does not create an audio input
    +        // getting microphone access requires a permission dialog so only ask for it if we need it
    +        if (gUM === undefined) {
    +            gUM = (navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia);
    +        }
    +
    +        if (gUM === undefined) {
    +            // we couldn't find a suitable getUserMedia, so fail fast
    +            if (onCreateFail !== undefined) {
    +                onCreateFail("getUserMedia undefined (mic not supported by browser)");
    +            }
    +            return;
    +        }
    +
    +        if (audioInput === undefined) {
    +            createAudioInput()
    +        }
    +
    +        // TODO investigate if this still needs to be placed on window.
    +        // seems this was done to keep it from being collected
    +        var scriptProcessor = audioCtx.createScriptProcessor(16384, 2, 1);
    +        receivers.push(scriptProcessor);
    +
    +        // inform quiet about our local sound card's sample rate so that it can resample to its internal sample rate
    +        var decoder = Module.ccall('quiet_decoder_create', 'pointer', ['pointer', 'number'], [opt, audioCtx.sampleRate]);
    +
    +        var samples = Module.ccall('malloc', 'pointer', ['number'], [4 * sampleBufferSize]);
    +
    +        var frame = Module.ccall('malloc', 'pointer', ['number'], [frameBufferSize]);
    +
    +        var readbuf = function() {
    +            while (true) {
    +                var read = Module.ccall('quiet_decoder_recv', 'number', ['pointer', 'pointer', 'number'], [decoder, frame, frameBufferSize]);
    +                if (read === -1) {
    +                    break;
    +                }
    +                // convert from emscripten bytes to js string. more pointer arithmetic.
    +                var frameArray = Module.HEAP8.slice(frame, frame + read);
    +                onReceive(frameArray);
    +            }
    +        };
    +
    +        var lastChecksumFailCount = 0;
    +        var consume = function() {
    +            Module.ccall('quiet_decoder_consume', 'number', ['pointer', 'pointer', 'number'], [decoder, samples, sampleBufferSize]);
    +
    +            window.setTimeout(readbuf, 0);
    +
    +            var currentChecksumFailCount = Module.ccall('quiet_decoder_checksum_fails', 'number', ['pointer'], [decoder]);
    +            if ((onReceiveFail !== undefined) && (currentChecksumFailCount > lastChecksumFailCount)) {
    +                window.setTimeout(function() { onReceiveFail(currentChecksumFailCount); }, 0);
    +            }
    +            lastChecksumFailCount = currentChecksumFailCount;
    +        }
    +
    +
    +        scriptProcessor.onaudioprocess = function(e) {
    +            var input = e.inputBuffer.getChannelData(0);
    +            var sample_view = Module.HEAPF32.subarray(samples/4, samples/4 + sampleBufferSize);
    +            sample_view.set(input);
    +
    +            window.setTimeout(consume, 0);
    +        }
    +
    +        // if this is the first receiver object created, wait for our input node to be created
    +        addAudioInputReadyCallback(function() {
    +            audioInput.connect(scriptProcessor);
    +        }, onCreateFail);
    +
    +        // more unused nodes in the graph that some browsers insist on having
    +        var fakeGain = audioCtx.createGain();
    +        fakeGain.value = 0;
    +        scriptProcessor.connect(fakeGain);
    +        fakeGain.connect(audioCtx.destination);
    +    };
    +
    +    /**
    +     * Convert a string to array buffer in UTF8
    +     * @function str2ab
    +     * @memberof Quiet
    +     * @param {string} s - string to be converted
    +     * @returns {ArrayBuffer} buf - converted arraybuffer
    +     */
    +    function str2ab(s) {
    +        var s_utf8 = unescape(encodeURIComponent(s));
    +        var buf = new ArrayBuffer(s_utf8.length);
    +        var bufView = new Uint8Array(buf);
    +        for (var i = 0; i < s_utf8.length; i++) {
    +            bufView[i] = s_utf8.charCodeAt(i);
    +        }
    +        return buf;
    +    };
    +
    +    /**
    +     * Convert an array buffer in UTF8 to string
    +     * @function ab2str
    +     * @memberof Quiet
    +     * @param {ArrayBuffer} ab - array buffer to be converted
    +     * @returns {string} s - converted string
    +     */
    +    function ab2str(ab) {
    +        return decodeURIComponent(escape(String.fromCharCode.apply(null, new Uint8Array(ab))));
    +    };
    +
    +    /**
    +     * Merge 2 ArrayBuffers
    +     * This is a convenience function to assist user receiver functions that
    +     * want to aggregate multiple payloads.
    +     * @function mergeab
    +     * @memberof Quiet
    +     * @param {ArrayBuffer} ab1 - beginning ArrayBuffer
    +     * @param {ArrayBuffer} ab2 - ending ArrayBuffer
    +     * @returns {ArrayBuffer} buf - ab1 merged with ab2
    +     */
    +    function mergeab(ab1, ab2) {
    +        var tmp = new Uint8Array(ab1.byteLength + ab2.byteLength);
    +        tmp.set(new Uint8Array(ab1), 0);
    +        tmp.set(new Uint8Array(ab2), ab1.byteLength);
    +        return tmp.buffer;
    +    };
    +
    +    return {
    +        emscriptenInitialized: onEmscriptenInitialized,
    +        setProfilesPrefix: setProfilesPrefix,
    +        setMemoryInitializerPrefix: setMemoryInitializerPrefix,
    +        setLibfecPrefix: setLibfecPrefix,
    +        addReadyCallback: addReadyCallback,
    +        transmitter: transmitter,
    +        receiver: receiver,
    +        str2ab: str2ab,
    +        ab2str: ab2str,
    +        mergeab: mergeab
    +    };
    +})();
    +
    +// extend emscripten Module
    +var Module = {
    +    onRuntimeInitialized: Quiet.emscriptenInitialized,
    +    memoryInitializerPrefixURL: ""
    +};
    +
    +
    +
    + + + + +
    + + + +
    + +
    + Documentation generated by JSDoc 3.2.2 on Tue Mar 15 2016 00:24:30 GMT-0700 (PDT) +
    + + + + + diff --git a/web/js/quiet/docs/scripts/linenumber.js b/web/js/quiet/docs/scripts/linenumber.js new file mode 100755 index 00000000..613865d0 --- /dev/null +++ b/web/js/quiet/docs/scripts/linenumber.js @@ -0,0 +1,17 @@ +(function() { + var counter = 0; + var numbered; + var source = document.getElementsByClassName('prettyprint source'); + + if (source && source[0]) { + source = source[0].getElementsByTagName('code')[0]; + + numbered = source.innerHTML.split('\n'); + numbered = numbered.map(function(item) { + counter++; + return '' + item; + }); + + source.innerHTML = numbered.join('\n'); + } +})(); diff --git a/web/js/quiet/docs/scripts/prettify/Apache-License-2.0.txt b/web/js/quiet/docs/scripts/prettify/Apache-License-2.0.txt new file mode 100755 index 00000000..d6456956 --- /dev/null +++ b/web/js/quiet/docs/scripts/prettify/Apache-License-2.0.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/web/js/quiet/docs/scripts/prettify/lang-css.js b/web/js/quiet/docs/scripts/prettify/lang-css.js new file mode 100755 index 00000000..041e1f59 --- /dev/null +++ b/web/js/quiet/docs/scripts/prettify/lang-css.js @@ -0,0 +1,2 @@ +PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\f\r ]+/,null," \t\r\n "]],[["str",/^"(?:[^\n\f\r"\\]|\\(?:\r\n?|\n|\f)|\\[\S\s])*"/,null],["str",/^'(?:[^\n\f\r'\\]|\\(?:\r\n?|\n|\f)|\\[\S\s])*'/,null],["lang-css-str",/^url\(([^"')]*)\)/i],["kwd",/^(?:url|rgb|!important|@import|@page|@media|@charset|inherit)(?=[^\w-]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*)\s*:/i],["com",/^\/\*[^*]*\*+(?:[^*/][^*]*\*+)*\//],["com", +/^(?:<\!--|--\>)/],["lit",/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],["lit",/^#[\da-f]{3,6}/i],["pln",/^-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*/i],["pun",/^[^\s\w"']+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[["kwd",/^-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[["str",/^[^"')]+/]]),["css-str"]); diff --git a/web/js/quiet/docs/scripts/prettify/prettify.js b/web/js/quiet/docs/scripts/prettify/prettify.js new file mode 100755 index 00000000..eef5ad7e --- /dev/null +++ b/web/js/quiet/docs/scripts/prettify/prettify.js @@ -0,0 +1,28 @@ +var q=null;window.PR_SHOULD_USE_CONTINUATION=!0; +(function(){function L(a){function m(a){var f=a.charCodeAt(0);if(f!==92)return f;var b=a.charAt(1);return(f=r[b])?f:"0"<=b&&b<="7"?parseInt(a.substring(1),8):b==="u"||b==="x"?parseInt(a.substring(2),16):a.charCodeAt(1)}function e(a){if(a<32)return(a<16?"\\x0":"\\x")+a.toString(16);a=String.fromCharCode(a);if(a==="\\"||a==="-"||a==="["||a==="]")a="\\"+a;return a}function h(a){for(var f=a.substring(1,a.length-1).match(/\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\[0-3][0-7]{0,2}|\\[0-7]{1,2}|\\[\S\s]|[^\\]/g),a= +[],b=[],o=f[0]==="^",c=o?1:0,i=f.length;c122||(d<65||j>90||b.push([Math.max(65,j)|32,Math.min(d,90)|32]),d<97||j>122||b.push([Math.max(97,j)&-33,Math.min(d,122)&-33]))}}b.sort(function(a,f){return a[0]-f[0]||f[1]-a[1]});f=[];j=[NaN,NaN];for(c=0;ci[0]&&(i[1]+1>i[0]&&b.push("-"),b.push(e(i[1])));b.push("]");return b.join("")}function y(a){for(var f=a.source.match(/\[(?:[^\\\]]|\\[\S\s])*]|\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\\d+|\\[^\dux]|\(\?[!:=]|[()^]|[^()[\\^]+/g),b=f.length,d=[],c=0,i=0;c=2&&a==="["?f[c]=h(j):a!=="\\"&&(f[c]=j.replace(/[A-Za-z]/g,function(a){a=a.charCodeAt(0);return"["+String.fromCharCode(a&-33,a|32)+"]"}));return f.join("")}for(var t=0,s=!1,l=!1,p=0,d=a.length;p=5&&"lang-"===b.substring(0,5))&&!(o&&typeof o[1]==="string"))c=!1,b="src";c||(r[f]=b)}i=d;d+=f.length;if(c){c=o[1];var j=f.indexOf(c),k=j+c.length;o[2]&&(k=f.length-o[2].length,j=k-c.length);b=b.substring(5);B(l+i,f.substring(0,j),e,p);B(l+i+j,c,C(b,c),p);B(l+i+k,f.substring(k),e,p)}else p.push(l+i,b)}a.e=p}var h={},y;(function(){for(var e=a.concat(m), +l=[],p={},d=0,g=e.length;d=0;)h[n.charAt(k)]=r;r=r[1];n=""+r;p.hasOwnProperty(n)||(l.push(r),p[n]=q)}l.push(/[\S\s]/);y=L(l)})();var t=m.length;return e}function u(a){var m=[],e=[];a.tripleQuotedStrings?m.push(["str",/^(?:'''(?:[^'\\]|\\[\S\s]|''?(?=[^']))*(?:'''|$)|"""(?:[^"\\]|\\[\S\s]|""?(?=[^"]))*(?:"""|$)|'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$))/,q,"'\""]):a.multiLineStrings?m.push(["str",/^(?:'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$)|`(?:[^\\`]|\\[\S\s])*(?:`|$))/, +q,"'\"`"]):m.push(["str",/^(?:'(?:[^\n\r'\\]|\\.)*(?:'|$)|"(?:[^\n\r"\\]|\\.)*(?:"|$))/,q,"\"'"]);a.verbatimStrings&&e.push(["str",/^@"(?:[^"]|"")*(?:"|$)/,q]);var h=a.hashComments;h&&(a.cStyleComments?(h>1?m.push(["com",/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,q,"#"]):m.push(["com",/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\n\r]*)/,q,"#"]),e.push(["str",/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,q])):m.push(["com",/^#[^\n\r]*/, +q,"#"]));a.cStyleComments&&(e.push(["com",/^\/\/[^\n\r]*/,q]),e.push(["com",/^\/\*[\S\s]*?(?:\*\/|$)/,q]));a.regexLiterals&&e.push(["lang-regex",/^(?:^^\.?|[!+-]|!=|!==|#|%|%=|&|&&|&&=|&=|\(|\*|\*=|\+=|,|-=|->|\/|\/=|:|::|;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|[?@[^]|\^=|\^\^|\^\^=|{|\||\|=|\|\||\|\|=|~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\s*(\/(?=[^*/])(?:[^/[\\]|\\[\S\s]|\[(?:[^\\\]]|\\[\S\s])*(?:]|$))+\/)/]);(h=a.types)&&e.push(["typ",h]);a=(""+a.keywords).replace(/^ | $/g, +"");a.length&&e.push(["kwd",RegExp("^(?:"+a.replace(/[\s,]+/g,"|")+")\\b"),q]);m.push(["pln",/^\s+/,q," \r\n\t\xa0"]);e.push(["lit",/^@[$_a-z][\w$@]*/i,q],["typ",/^(?:[@_]?[A-Z]+[a-z][\w$@]*|\w+_t\b)/,q],["pln",/^[$_a-z][\w$@]*/i,q],["lit",/^(?:0x[\da-f]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+-]?\d+)?)[a-z]*/i,q,"0123456789"],["pln",/^\\[\S\s]?/,q],["pun",/^.[^\s\w"-$'./@\\`]*/,q]);return x(m,e)}function D(a,m){function e(a){switch(a.nodeType){case 1:if(k.test(a.className))break;if("BR"===a.nodeName)h(a), +a.parentNode&&a.parentNode.removeChild(a);else for(a=a.firstChild;a;a=a.nextSibling)e(a);break;case 3:case 4:if(p){var b=a.nodeValue,d=b.match(t);if(d){var c=b.substring(0,d.index);a.nodeValue=c;(b=b.substring(d.index+d[0].length))&&a.parentNode.insertBefore(s.createTextNode(b),a.nextSibling);h(a);c||a.parentNode.removeChild(a)}}}}function h(a){function b(a,d){var e=d?a.cloneNode(!1):a,f=a.parentNode;if(f){var f=b(f,1),g=a.nextSibling;f.appendChild(e);for(var h=g;h;h=g)g=h.nextSibling,f.appendChild(h)}return e} +for(;!a.nextSibling;)if(a=a.parentNode,!a)return;for(var a=b(a.nextSibling,0),e;(e=a.parentNode)&&e.nodeType===1;)a=e;d.push(a)}var k=/(?:^|\s)nocode(?:\s|$)/,t=/\r\n?|\n/,s=a.ownerDocument,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=s.defaultView.getComputedStyle(a,q).getPropertyValue("white-space"));var p=l&&"pre"===l.substring(0,3);for(l=s.createElement("LI");a.firstChild;)l.appendChild(a.firstChild);for(var d=[l],g=0;g=0;){var h=m[e];A.hasOwnProperty(h)?window.console&&console.warn("cannot override language handler %s",h):A[h]=a}}function C(a,m){if(!a||!A.hasOwnProperty(a))a=/^\s*=o&&(h+=2);e>=c&&(a+=2)}}catch(w){"console"in window&&console.log(w&&w.stack?w.stack:w)}}var v=["break,continue,do,else,for,if,return,while"],w=[[v,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"], +"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"],F=[w,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"],G=[w,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"], +H=[G,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"],w=[w,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"],I=[v,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"], +J=[v,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"],v=[v,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"],K=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/,N=/\S/,O=u({keywords:[F,H,w,"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END"+ +I,J,v],hashComments:!0,cStyleComments:!0,multiLineStrings:!0,regexLiterals:!0}),A={};k(O,["default-code"]);k(x([],[["pln",/^[^]*(?:>|$)/],["com",/^<\!--[\S\s]*?(?:--\>|$)/],["lang-",/^<\?([\S\s]+?)(?:\?>|$)/],["lang-",/^<%([\S\s]+?)(?:%>|$)/],["pun",/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\S\s]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\S\s]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\S\s]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]), +["default-markup","htm","html","mxml","xhtml","xml","xsl"]);k(x([["pln",/^\s+/,q," \t\r\n"],["atv",/^(?:"[^"]*"?|'[^']*'?)/,q,"\"'"]],[["tag",/^^<\/?[a-z](?:[\w-.:]*\w)?|\/?>$/i],["atn",/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^\s"'>]*(?:[^\s"'/>]|\/(?=\s)))/],["pun",/^[/<->]+/],["lang-js",/^on\w+\s*=\s*"([^"]+)"/i],["lang-js",/^on\w+\s*=\s*'([^']+)'/i],["lang-js",/^on\w+\s*=\s*([^\s"'>]+)/i],["lang-css",/^style\s*=\s*"([^"]+)"/i],["lang-css",/^style\s*=\s*'([^']+)'/i],["lang-css", +/^style\s*=\s*([^\s"'>]+)/i]]),["in.tag"]);k(x([],[["atv",/^[\S\s]+/]]),["uq.val"]);k(u({keywords:F,hashComments:!0,cStyleComments:!0,types:K}),["c","cc","cpp","cxx","cyc","m"]);k(u({keywords:"null,true,false"}),["json"]);k(u({keywords:H,hashComments:!0,cStyleComments:!0,verbatimStrings:!0,types:K}),["cs"]);k(u({keywords:G,cStyleComments:!0}),["java"]);k(u({keywords:v,hashComments:!0,multiLineStrings:!0}),["bsh","csh","sh"]);k(u({keywords:I,hashComments:!0,multiLineStrings:!0,tripleQuotedStrings:!0}), +["cv","py"]);k(u({keywords:"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["perl","pl","pm"]);k(u({keywords:J,hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["rb"]);k(u({keywords:w,cStyleComments:!0,regexLiterals:!0}),["js"]);k(u({keywords:"all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes", +hashComments:3,cStyleComments:!0,multilineStrings:!0,tripleQuotedStrings:!0,regexLiterals:!0}),["coffee"]);k(x([],[["str",/^[\S\s]+/]]),["regex"]);window.prettyPrintOne=function(a,m,e){var h=document.createElement("PRE");h.innerHTML=a;e&&D(h,e);E({g:m,i:e,h:h});return h.innerHTML};window.prettyPrint=function(a){function m(){for(var e=window.PR_SHOULD_USE_CONTINUATION?l.now()+250:Infinity;p=0){var k=k.match(g),f,b;if(b= +!k){b=n;for(var o=void 0,c=b.firstChild;c;c=c.nextSibling)var i=c.nodeType,o=i===1?o?b:c:i===3?N.test(c.nodeValue)?b:o:o;b=(f=o===b?void 0:o)&&"CODE"===f.tagName}b&&(k=f.className.match(g));k&&(k=k[1]);b=!1;for(o=n.parentNode;o;o=o.parentNode)if((o.tagName==="pre"||o.tagName==="code"||o.tagName==="xmp")&&o.className&&o.className.indexOf("prettyprint")>=0){b=!0;break}b||((b=(b=n.className.match(/\blinenums\b(?::(\d+))?/))?b[1]&&b[1].length?+b[1]:!0:!1)&&D(n,b),d={g:k,h:n,i:b},E(d))}}p + + + + + Receive Text + + + + + + + +
    +
    +

    Receive Text

    +
    +
    + +
    Your received text will show up here. Waiting...
    +
    +
    + + diff --git a/web/js/quiet/examples/text/receivetext.js b/web/js/quiet/examples/text/receivetext.js new file mode 100755 index 00000000..da43280d --- /dev/null +++ b/web/js/quiet/examples/text/receivetext.js @@ -0,0 +1,50 @@ +var TextReceiver = (function() { + Quiet.init({ + profilesPrefix: "/", + memoryInitializerPrefix: "/", + libfecPrefix: "/" + }); + var target; + var content = new ArrayBuffer(0); + var warningbox; + + function onReceive(recvPayload) { + content = Quiet.mergeab(content, recvPayload); + target.textContent = Quiet.ab2str(content); + warningbox.classList.add("hidden"); + }; + + function onReceiverCreateFail(reason) { + console.log("failed to create quiet receiver: " + reason); + warningbox.classList.remove("hidden"); + warningbox.textContent = "Sorry, it looks like this example is not supported by your browser. Please give permission to use the microphone or try again in Google Chrome or Microsoft Edge." + }; + + function onReceiveFail(num_fails) { + warningbox.classList.remove("hidden"); + warningbox.textContent = "We didn't quite get that. It looks like you tried to transmit something. You may need to move the transmitter closer to the receiver and set the volume to 50%." + }; + + function onQuietReady() { + var profilename = document.querySelector('[data-quiet-profile-name]').getAttribute('data-quiet-profile-name'); + Quiet.receiver({profile: profilename, + onReceive: onReceive, + onCreateFail: onReceiverCreateFail, + onReceiveFail: onReceiveFail + }); + }; + + function onQuietFail(reason) { + console.log("quiet failed to initialize: " + reason); + warningbox.classList.remove("hidden"); + warningbox.textContent = "Sorry, it looks like there was a problem with this example (" + reason + ")"; + }; + + function onDOMLoad() { + target = document.querySelector('[data-quiet-receive-text-target]'); + warningbox = document.querySelector('[data-quiet-warning]'); + Quiet.addReadyCallback(onQuietReady, onQuietFail); + }; + + document.addEventListener("DOMContentLoaded", onDOMLoad); +})(); diff --git a/web/js/quiet/examples/text/sendtext.html b/web/js/quiet/examples/text/sendtext.html new file mode 100755 index 00000000..667ed665 --- /dev/null +++ b/web/js/quiet/examples/text/sendtext.html @@ -0,0 +1,27 @@ + + + + + + Send Text + + + + + + + +
    +
    +

    Send Text

    +
    +
    + +
    + +
    + +
    +
    + + diff --git a/web/js/quiet/examples/text/sendtext.js b/web/js/quiet/examples/text/sendtext.js new file mode 100755 index 00000000..0af7feb8 --- /dev/null +++ b/web/js/quiet/examples/text/sendtext.js @@ -0,0 +1,55 @@ +var TextTransmitter = (function() { + Quiet.init({ + profilesPrefix: "/", + memoryInitializerPrefix: "/", + libfecPrefix: "/" + }); + var btn; + var textbox; + var warningbox; + var transmit; + + function onTransmitFinish() { + textbox.focus(); + btn.addEventListener('click', onClick, false); + btn.disabled = false; + var originalText = btn.innerText; + btn.innerText = btn.getAttribute('data-quiet-sending-text'); + btn.setAttribute('data-quiet-sending-text', originalText); + }; + + function onClick(e) { + e.target.removeEventListener(e.type, arguments.callee); + e.target.disabled = true; + var originalText = e.target.innerText; + e.target.innerText = e.target.getAttribute('data-quiet-sending-text'); + e.target.setAttribute('data-quiet-sending-text', originalText); + var payload = textbox.value; + if (payload === "") { + onTransmitFinish(); + return; + } + transmit.transmit(Quiet.str2ab(payload)); + }; + + function onQuietReady() { + var profilename = document.querySelector('[data-quiet-profile-name]').getAttribute('data-quiet-profile-name'); + transmit = Quiet.transmitter({profile: profilename, onFinish: onTransmitFinish}); + btn.addEventListener('click', onClick, false); + }; + + function onQuietFail(reason) { + console.log("quiet failed to initialize: " + reason); + warningbox.classList.remove("hidden"); + warningbox.textContent = "Sorry, it looks like there was a problem with this example (" + reason + ")"; + }; + + function onDOMLoad() { + btn = document.querySelector('[data-quiet-send-button]'); + textbox = document.querySelector('[data-quiet-text-input]'); + warningbox = document.querySelector('[data-quiet-warning]'); + Quiet.addReadyCallback(onQuietReady, onQuietFail); + }; + + document.addEventListener("DOMContentLoaded", onDOMLoad); +})(); diff --git a/web/js/quiet/libfec.js b/web/js/quiet/libfec.js new file mode 100644 index 00000000..4b743103 --- /dev/null +++ b/web/js/quiet/libfec.js @@ -0,0 +1,16 @@ +(function(fb,parentModule){var Module={};var args=[];Module.arguments=[];Module.print=parentModule.print;Module.printErr=parentModule.printErr;Module.cleanups=[];var gb=0;var STACKTOP=getMemory(TOTAL_STACK);assert(STACKTOP%8==0);var STACK_MAX=STACKTOP+TOTAL_STACK;Module.cleanups.push((function(){parentModule["_free"](STACKTOP);parentModule["_free"](gb)}));var ASM_CONSTS=[];gb=Runtime.alignMemory(getMemory(199904,16||1));__ATINIT__.push();allocate([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,2,0,0,0,3,0,0,0,1,0,0,0,2,0,0,0,2,0,0,0,3,0,0,0,2,0,0,0,3,0,0,0,3,0,0,0,4,0,0,0,1,0,0,0,2,0,0,0,2,0,0,0,3,0,0,0,2,0,0,0,3,0,0,0,3,0,0,0,4,0,0,0,2,0,0,0,3,0,0,0,3,0,0,0,4,0,0,0,3,0,0,0,4,0,0,0,4,0,0,0,5,0,0,0,1,0,0,0,2,0,0,0,2,0,0,0,3,0,0,0,2,0,0,0,3,0,0,0,3,0,0,0,4,0,0,0,2,0,0,0,3,0,0,0,3,0,0,0,4,0,0,0,3,0,0,0,4,0,0,0,4,0,0,0,5,0,0,0,2,0,0,0,3,0,0,0,3,0,0,0,4,0,0,0,3,0,0,0,4,0,0,0,4,0,0,0,5,0,0,0,3,0,0,0,4,0,0,0,4,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,5,0,0,0,6,0,0,0,1,0,0,0,2,0,0,0,2,0,0,0,3,0,0,0,2,0,0,0,3,0,0,0,3,0,0,0,4,0,0,0,2,0,0,0,3,0,0,0,3,0,0,0,4,0,0,0,3,0,0,0,4,0,0,0,4,0,0,0,5,0,0,0,2,0,0,0,3,0,0,0,3,0,0,0,4,0,0,0,3,0,0,0,4,0,0,0,4,0,0,0,5,0,0,0,3,0,0,0,4,0,0,0,4,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,5,0,0,0,6,0,0,0,2,0,0,0,3,0,0,0,3,0,0,0,4,0,0,0,3,0,0,0,4,0,0,0,4,0,0,0,5,0,0,0,3,0,0,0,4,0,0,0,4,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,5,0,0,0,6,0,0,0,3,0,0,0,4,0,0,0,4,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,5,0,0,0,6,0,0,0,4,0,0,0,5,0,0,0,5,0,0,0,6,0,0,0,5,0,0,0,6,0,0,0,6,0,0,0,7,0,0,0,1,0,0,0,2,0,0,0,2,0,0,0,3,0,0,0,2,0,0,0,3,0,0,0,3,0,0,0,4,0,0,0,2,0,0,0,3,0,0,0,3,0,0,0,4,0,0,0,3,0,0,0,4,0,0,0,4,0,0,0,5,0,0,0,2,0,0,0,3,0,0,0,3,0,0,0,4,0,0,0,3,0,0,0,4,0,0,0,4,0,0,0,5,0,0,0,3,0,0,0,4,0,0,0,4,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,5,0,0,0,6,0,0,0,2,0,0,0,3,0,0,0,3,0,0,0,4,0,0,0,3,0,0,0,4,0,0,0,4,0,0,0,5,0,0,0,3,0,0,0,4,0,0,0,4,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,5,0,0,0,6,0,0,0,3,0,0,0,4,0,0,0,4,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,5,0,0,0,6,0,0,0,4,0,0,0,5,0,0,0,5,0,0,0,6,0,0,0,5,0,0,0,6,0,0,0,6,0,0,0,7,0,0,0,2,0,0,0,3,0,0,0,3,0,0,0,4,0,0,0,3,0,0,0,4,0,0,0,4,0,0,0,5,0,0,0,3,0,0,0,4,0,0,0,4,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,5,0,0,0,6,0,0,0,3,0,0,0,4,0,0,0,4,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,5,0,0,0,6,0,0,0,4,0,0,0,5,0,0,0,5,0,0,0,6,0,0,0,5,0,0,0,6,0,0,0,6,0,0,0,7,0,0,0,3,0,0,0,4,0,0,0,4,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,5,0,0,0,6,0,0,0,4,0,0,0,5,0,0,0,5,0,0,0,6,0,0,0,5,0,0,0,6,0,0,0,6,0,0,0,7,0,0,0,4,0,0,0,5,0,0,0,5,0,0,0,6,0,0,0,5,0,0,0,6,0,0,0,6,0,0,0,7,0,0,0,5,0,0,0,6,0,0,0,6,0,0,0,7,0,0,0,6,0,0,0,7,0,0,0,7,0,0,0,8,0,0,0,237,1,0,0,155,1,0,0,39,1,0,0,85,110,107,110,111,119,110,0,80,111,114,116,97,98,108,101,32,67,0,120,56,54,32,77,117,108,116,105,32,77,101,100,105,97,32,69,120,116,101,110,115,105,111,110,115,32,40,77,77,88,41,0,120,56,54,32,83,116,114,101,97,109,105,110,103,32,83,73,77,68,32,69,120,116,101,110,115,105,111,110,115,32,40,83,83,69,41,0,120,56,54,32,83,116,114,101,97,109,105,110,103,32,83,73,77,68,32,69,120,116,101,110,115,105,111,110,115,32,50,32,40,83,83,69,50,41,0,80,111,119,101,114,80,67,32,71,52,47,71,53,32,65,108,116,105,118,101,99,47,86,101,108,111,99,105,116,121,32,69,110,103,105,110,101,0,1,2,4,8,16,32,64,128,135,137,149,173,221,61,122,244,111,222,59,118,236,95,190,251,113,226,67,134,139,145,165,205,29,58,116,232,87,174,219,49,98,196,15,30,60,120,240,103,206,27,54,108,216,55,110,220,63,126,252,127,254,123,246,107,214,43,86,172,223,57,114,228,79,158,187,241,101,202,19,38,76,152,183,233,85,170,211,33,66,132,143,153,181,237,93,186,243,97,194,3,6,12,24,48,96,192,7,14,28,56,112,224,71,142,155,177,229,77,154,179,225,69,138,147,161,197,13,26,52,104,208,39,78,156,191,249,117,234,83,166,203,17,34,68,136,151,169,213,45,90,180,239,89,178,227,65,130,131,129,133,141,157,189,253,125,250,115,230,75,150,171,209,37,74,148,175,217,53,106,212,47,94,188,255,121,242,99,198,11,22,44,88,176,231,73,146,163,193,5,10,20,40,80,160,199,9,18,36,72,144,167,201,21,42,84,168,215,41,82,164,207,25,50,100,200,23,46,92,184,247,105,210,35,70,140,159,185,245,109,218,51,102,204,31,62,124,248,119,238,91,182,235,81,162,195,0,255,0,1,99,2,198,100,106,3,205,199,188,101,126,107,42,4,141,206,78,200,212,189,225,102,221,127,49,108,32,43,243,5,87,142,232,207,172,79,131,201,217,213,65,190,148,226,180,103,39,222,240,128,177,50,53,109,69,33,18,44,13,244,56,6,155,88,26,143,121,233,112,208,194,173,168,80,117,132,72,202,252,218,138,214,84,66,36,191,152,149,249,227,94,181,21,104,97,40,186,223,76,241,47,129,230,178,63,51,238,54,16,110,24,70,166,34,136,19,247,45,184,14,61,245,164,57,59,7,158,156,157,89,159,27,8,144,9,122,28,234,160,113,90,209,29,195,123,174,10,169,145,81,91,118,114,133,161,73,235,203,124,253,196,219,30,139,210,215,146,85,170,67,11,37,175,192,115,153,119,150,92,250,82,228,236,95,74,182,162,22,134,105,197,98,254,41,125,187,204,224,211,77,140,242,31,48,220,130,171,231,86,179,147,64,216,52,176,239,38,55,12,17,68,111,120,25,154,71,116,167,193,35,83,137,251,20,93,248,151,46,75,185,96,15,237,62,229,246,135,165,23,58,163,60,183,0,249,59,66,4,43,126,251,97,30,3,213,50,66,170,5,24,5,170,66,50,213,3,30,97,251,126,43,4,66,59,249,0,0,123,175,212,153,226,54,77,250,129,85,46,99,24,204,183,134,253,41,82,31,100,176,203,124,7,211,168,229,158,74,49,236,151,67,56,117,14,218,161,22,109,185,194,143,244,32,91,106,17,197,190,243,136,92,39,144,235,63,68,9,114,166,221,239,148,64,59,118,13,217,162,21,110,186,193,140,247,35,88,105,18,198,189,240,139,95,36,147,232,60,71,10,113,165,222,3,120,172,215,154,225,53,78,249,130,86,45,96,27,207,180,133,254,42,81,28,103,179,200,127,4,208,171,230,157,73,50,141,246,34,89,20,111,187,192,119,12,216,163,238,149,65,58,11,112,164,223,146,233,61,70,241,138,94,37,104,19,199,188,97,26,206,181,248,131,87,44,155,224,52,79,2,121,173,214,231,156,72,51,126,5,209,170,29,102,178,201,132,255,43,80,98,25,205,182,251,128,84,47,152,227,55,76,1,122,174,213,228,159,75,48,125,6,210,169,30,101,177,202,135,252,40,83,142,245,33,90,23,108,184,195,116,15,219,160,237,150,66,57,8,115,167,220,145,234,62,69,242,137,93,38,107,16,196,191,0,204,172,96,121,181,213,25,240,60,92,144,137,69,37,233,253,49,81,157,132,72,40,228,13,193,161,109,116,184,216,20,46,226,130,78,87,155,251,55,222,18,114,190,167,107,11,199,211,31,127,179,170,102,6,202,35,239,143,67,90,150,246,58,66,142,238,34,59,247,151,91,178,126,30,210,203,7,103,171,191,115,19,223,198,10,106,166,79,131,227,47,54,250,154,86,108,160,192,12,21,217,185,117,156,80,48,252,229,41,73,133,145,93,61,241,232,36,68,136,97,173,205,1,24,212,180,120,197,9,105,165,188,112,16,220,53,249,153,85,76,128,224,44,56,244,148,88,65,141,237,33,200,4,100,168,177,125,29,209,235,39,71,139,146,94,62,242,27,215,183,123,98,174,206,2,22,218,186,118,111,163,195,15,230,42,74,134,159,83,51,255,135,75,43,231,254,50,82,158,119,187,219,23,14,194,162,110,122,182,214,26,3,207,175,99,138,70,38,234,243,63,95,147,169,101,5,201,208,28,124,176,89,149,245,57,32,236,140,64,84,152,248,52,45,225,129,77,164,104,8,196,221,17,113,189],"i8",ALLOC_NONE,gb);function _malloc(){return parentModule["_malloc"].apply(null,arguments)}function _random(){return parentModule["_random"].apply(null,arguments)}function _memmove(){return parentModule["_memmove"].apply(null,arguments)}function _memset(){return parentModule["_memset"].apply(null,arguments)}function _free(){return parentModule["_free"].apply(null,arguments)}function _calloc(){return parentModule["_calloc"].apply(null,arguments)}function _memcpy(){return parentModule["_memcpy"].apply(null,arguments)}var setTempRet0=Runtime.setTempRet0,getTempRet0=Runtime.getTempRet0;Module.asmGlobalArg={"Math":Math,"Int8Array":Int8Array,"Int16Array":Int16Array,"Int32Array":Int32Array,"Uint8Array":Uint8Array,"Uint16Array":Uint16Array,"Uint32Array":Uint32Array,"Float32Array":Float32Array,"Float64Array":Float64Array,"NaN":NaN,"Infinity":Infinity};Module.asmLibraryArg={"abort":abort,"assert":assert,"setTempRet0":setTempRet0,"getTempRet0":getTempRet0,"_free":_free,"_random":_random,"_memset":_memset,"_malloc":_malloc,"_memcpy":_memcpy,"_memmove":_memmove,"_calloc":_calloc,"STACKTOP":STACKTOP,"STACK_MAX":STACK_MAX,"tempDoublePtr":tempDoublePtr,"ABORT":ABORT,"cttz_i8":cttz_i8,"gb":gb,"fb":fb};// EMSCRIPTEN_START_ASM +var asm=(function(global,env,buffer) { +"use asm";var a=new global.Int8Array(buffer);var b=new global.Int16Array(buffer);var c=new global.Int32Array(buffer);var d=new global.Uint8Array(buffer);var e=new global.Uint16Array(buffer);var f=new global.Uint32Array(buffer);var g=new global.Float32Array(buffer);var h=new global.Float64Array(buffer);var i=env.STACKTOP|0;var j=env.STACK_MAX|0;var k=env.tempDoublePtr|0;var l=env.ABORT|0;var m=env.cttz_i8|0;var n=env.gb|0;var o=env.fb|0;var p=0;var q=0;var r=0;var s=0;var t=global.NaN,u=global.Infinity;var v=0,w=0,x=0,y=0,z=0.0,A=0,B=0,C=0,D=0.0;var E=0;var F=0;var G=0;var H=0;var I=0;var J=0;var K=0;var L=0;var M=0;var N=0;var O=global.Math.floor;var P=global.Math.abs;var Q=global.Math.sqrt;var R=global.Math.pow;var S=global.Math.cos;var T=global.Math.sin;var U=global.Math.tan;var V=global.Math.acos;var W=global.Math.asin;var X=global.Math.atan;var Y=global.Math.atan2;var Z=global.Math.exp;var _=global.Math.log;var $=global.Math.ceil;var aa=global.Math.imul;var ba=global.Math.min;var ca=global.Math.clz32;var da=env.abort;var ea=env.assert;var fa=env.setTempRet0;var ga=env.getTempRet0;var ha=env._free;var ia=env._random;var ja=env._memset;var ka=env._malloc;var la=env._memcpy;var ma=env._memmove;var na=env._calloc;var oa=0.0; +// EMSCRIPTEN_START_FUNCS +function pa(a){a=a|0;var b=0;b=i;i=i+a|0;i=i+15&-16;return b|0}function qa(){return i|0}function ra(a){a=a|0;i=a}function sa(a,b){a=a|0;b=b|0;i=a;j=b}function ta(a,b){a=a|0;b=b|0;if(!p){p=a;q=b}}function ua(b){b=b|0;a[k>>0]=a[b>>0];a[k+1>>0]=a[b+1>>0];a[k+2>>0]=a[b+2>>0];a[k+3>>0]=a[b+3>>0]}function va(b){b=b|0;a[k>>0]=a[b>>0];a[k+1>>0]=a[b+1>>0];a[k+2>>0]=a[b+2>>0];a[k+3>>0]=a[b+3>>0];a[k+4>>0]=a[b+4>>0];a[k+5>>0]=a[b+5>>0];a[k+6>>0]=a[b+6>>0];a[k+7>>0]=a[b+7>>0]}function wa(){if(c[n+198968>>2]|0)return;c[n+198968>>2]=1;return}function xa(){var b=0,d=0,e=0,f=0,g=0,h=0;b=0;while(1){if(!b){a[n+199640+b>>0]=0;b=1;continue}else{d=0;e=b}while(1){f=e>>1;if(!f){g=d;h=e;break}else{d=(e&1)+d|0;e=f}}a[n+199640+b>>0]=h+g&1;b=b+1|0;if((b|0)==256)break}c[n+198972>>2]=1;return}function ya(a,b){a=+a;b=+b;var d=0.0,e=0.0,f=0.0,g=0.0,i=0.0,j=0.0,k=0.0,l=0.0;if(c[n+198976>>2]|0){c[n+198976>>2]=0;d=+h[n+198960>>3]*b;e=d+a;return +e}do{f=+(ia()|0)*2.0/2147483647.0+-1.0;g=+(ia()|0)*2.0/2147483647.0+-1.0;i=f*f+g*g}while(i>=1.0|i==0.0);j=f;k=g;l=i;i=+Q(+(+_(+l)*-2.0/l));h[n+198960>>3]=j*i;c[n+198976>>2]=(c[n+198976>>2]|0)+1;d=k*b*i;e=d+a;return +e}function za(a,b,d,e,f){a=a|0;b=+b;d=+d;e=+e;f=f|0;var g=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0,o=0.0;g=a|0?b:-b;if(!(c[n+198976>>2]|0)){do{b=+(ia()|0)*2.0/2147483647.0+-1.0;i=+(ia()|0)*2.0/2147483647.0+-1.0;j=b*b+i*i}while(j>=1.0|j==0.0);k=b;l=i;m=j;j=+Q(+(+_(+m)*-2.0/m));h[n+198960>>3]=k*j;c[n+198976>>2]=(c[n+198976>>2]|0)+1;o=l*j}else{c[n+198976>>2]=0;o=+h[n+198960>>3]}a=~~((g+o)*d+e);return ((a|0)<0?0:((a|0)>(f|0)?f:a)&255)|0}function Aa(a){a=a|0;wa();return Ia(a)|0}function Ba(a){a=a|0;Ha(a);return}function Ca(a,b){a=a|0;b=b|0;return Ga(a,b)|0}function Da(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Ja(a,b,c,d)|0}function Ea(a){a=a|0;Ka(a);return}function Fa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;if(!a){d=-1;return d|0}La(a,b,c)|0;d=0;return d|0}function Ga(a,b){a=a|0;b=b|0;var d=0,e=0;if(!a){d=-1;return d|0}e=0;do{c[a+(e<<2)>>2]=63;e=e+1|0}while((e|0)!=64);c[a+516>>2]=a;c[a+520>>2]=a+256;c[a+512>>2]=c[a+524>>2];c[a+((b&63)<<2)>>2]=0;d=0;return d|0}function Ha(b){b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=b+4|0;f=0;do{g=c[b>>2]|0;h=f<<1;i=((g|0)>-1?g:0-g|0)&h;j=i>>16^i;i=c[n+198972>>2]|0;if(!i){xa();k=c[n+198972>>2]|0}else k=i;a[n+2288+f>>0]=((g>>>31|0)!=(d[((j>>>8^j)&255)+(n+199640)>>0]|0|0))<<31>>31;j=c[e>>2]|0;g=((j|0)>-1?j:0-j|0)&h;h=g>>16^g;if(!k)xa();a[n+2320+f>>0]=((j>>>31|0)!=(d[((h>>>8^h)&255)+(n+199640)>>0]|0|0))<<31>>31;f=f+1|0}while((f|0)!=32);c[n+198980>>2]=(c[n+198980>>2]|0)+1;return}function Ia(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;if(!(c[n+198980>>2]|0)){d=0;do{e=d<<1;f=c[n+198972>>2]|0;if(!f){xa();g=c[n+198972>>2]|0}else g=f;a[n+2288+d>>0]=((a[(e&108)+(n+199640)>>0]|0)!=0)<<31>>31;if(!g)xa();a[n+2320+d>>0]=((a[(e&78)+(n+199640)>>0]|0)!=0)<<31>>31;d=d+1|0}while((d|0)!=32);c[n+198980>>2]=(c[n+198980>>2]|0)+1}d=ka(528)|0;if(!d){h=0;return h|0}g=ka((b<<3)+48|0)|0;b=d+524|0;c[b>>2]=g;if(!g){ha(d|0);h=0;return h|0}g=0;do{c[d+(g<<2)>>2]=63;g=g+1|0}while((g|0)!=64);c[d+516>>2]=d;c[d+520>>2]=d+256;c[d+512>>2]=c[b>>2];c[d>>2]=0;h=d;return h|0}function Ja(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;if(!b){g=-1;return g|0}h=(c[b+524>>2]|0)+48|0;if(!e){g=0;return g|0}b=f<<2&252;f=e;do{f=f+-1|0;b=(c[h+(f<<3)+(b>>>7<<2)>>2]|0)>>>(b>>>2&31)<<7&128|b>>>1;a[d+(f>>>3)>>0]=b}while((f|0)!=0);g=0;return g|0}function Ka(a){a=a|0;if(!a)return;ha(c[a+524>>2]|0);ha(a|0);return}function La(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0;if(!b){f=-1;return f|0}g=b+512|0;h=c[g>>2]|0;if(!e)i=h;else{j=c[n+2288>>2]|0;k=j&255;l=c[n+2320>>2]|0;m=l&255;o=b+516|0;p=b+520|0;b=(j&65535)>>>8&255;q=(l&65535)>>>8&255;r=j>>>16&255;s=l>>>16&255;t=j>>>24&255;j=l>>>24&255;l=c[n+2288+4>>2]|0;u=l&255;v=c[n+2320+4>>2]|0;w=v&255;x=(l&65535)>>>8&255;y=(v&65535)>>>8&255;z=l>>>16&255;A=v>>>16&255;B=l>>>24&255;l=v>>>24&255;v=c[n+2288+8>>2]|0;C=v&255;D=c[n+2320+8>>2]|0;E=D&255;F=(v&65535)>>>8&255;G=(D&65535)>>>8&255;H=v>>>16&255;I=D>>>16&255;J=v>>>24&255;v=D>>>24&255;D=c[n+2288+12>>2]|0;K=D&255;L=c[n+2320+12>>2]|0;M=L&255;N=(D&65535)>>>8&255;O=(L&65535)>>>8&255;P=D>>>16&255;Q=L>>>16&255;R=D>>>24&255;D=L>>>24&255;L=c[n+2288+16>>2]|0;S=L&255;T=c[n+2320+16>>2]|0;U=T&255;V=(L&65535)>>>8&255;W=(T&65535)>>>8&255;X=L>>>16&255;Y=T>>>16&255;Z=L>>>24&255;L=T>>>24&255;T=c[n+2288+20>>2]|0;_=T&255;$=c[n+2320+20>>2]|0;aa=$&255;ba=(T&65535)>>>8&255;ca=($&65535)>>>8&255;da=T>>>16&255;ea=$>>>16&255;fa=T>>>24&255;T=$>>>24&255;$=c[n+2288+24>>2]|0;ga=$&255;ha=c[n+2320+24>>2]|0;ia=ha&255;ja=($&65535)>>>8&255;ka=(ha&65535)>>>8&255;la=$>>>16&255;ma=ha>>>16&255;na=$>>>24&255;$=ha>>>24&255;ha=c[n+2288+28>>2]|0;oa=ha&255;pa=c[n+2320+28>>2]|0;qa=pa&255;ra=(ha&65535)>>>8&255;sa=(pa&65535)>>>8&255;ta=ha>>>16&255;ua=pa>>>16&255;va=ha>>>24&255;ha=pa>>>24&255;pa=d;d=e;wa=c[o>>2]|0;xa=c[p>>2]|0;ya=h;while(1){d=d+-1|0;za=ya+4|0;c[za>>2]=0;c[ya>>2]=0;Aa=a[pa>>0]|0;Ba=a[pa+1>>0]|0;Ca=((m^Ba)&255)+((k^Aa)&255)|0;Da=Ca+(c[wa>>2]|0)|0;Ea=510-Ca+(c[wa+128>>2]|0)|0;Fa=(Da-Ea|0)>0;c[xa>>2]=Fa?Ea:Da;Ga=(Ca<<1)+-510|0;Ca=Da-Ga|0;Da=Ea+Ga|0;Ga=(Ca-Da|0)>0;c[xa+4>>2]=Ga?Da:Ca;Ca=((q^Ba)&255)+((b^Aa)&255)|0;Da=Ca+(c[wa+4>>2]|0)|0;Ea=510-Ca+(c[wa+132>>2]|0)|0;Ha=(Da-Ea|0)>0;c[xa+8>>2]=Ha?Ea:Da;Ia=(Ca<<1)+-510|0;Ca=Da-Ia|0;Da=Ea+Ia|0;Ia=(Ca-Da|0)>0;c[xa+12>>2]=Ia?Da:Ca;Ca=((s^Ba)&255)+((r^Aa)&255)|0;Da=Ca+(c[wa+8>>2]|0)|0;Ea=510-Ca+(c[wa+136>>2]|0)|0;Ja=(Da-Ea|0)>0;Ka=c[p>>2]|0;c[Ka+16>>2]=Ja?Ea:Da;La=(Ca<<1)+-510|0;Ca=Da-La|0;Da=Ea+La|0;La=(Ca-Da|0)>0;c[Ka+20>>2]=La?Da:Ca;Ca=((j^Ba)&255)+((t^Aa)&255)|0;Da=c[o>>2]|0;Ea=Ca+(c[Da+12>>2]|0)|0;Ma=510-Ca+(c[Da+140>>2]|0)|0;Na=(Ea-Ma|0)>0;c[Ka+24>>2]=Na?Ma:Ea;Oa=(Ca<<1)+-510|0;Ca=Ea-Oa|0;Ea=Ma+Oa|0;Oa=(Ca-Ea|0)>0;c[Ka+28>>2]=Oa?Ea:Ca;Ca=((w^Ba)&255)+((u^Aa)&255)|0;Ea=Ca+(c[Da+16>>2]|0)|0;Ma=510-Ca+(c[Da+144>>2]|0)|0;Pa=(Ea-Ma|0)>0;c[Ka+32>>2]=Pa?Ma:Ea;Qa=(Ca<<1)+-510|0;Ca=Ea-Qa|0;Ea=Ma+Qa|0;Qa=(Ca-Ea|0)>0;c[Ka+36>>2]=Qa?Ea:Ca;Ca=((y^Ba)&255)+((x^Aa)&255)|0;Ea=Ca+(c[Da+20>>2]|0)|0;Ka=510-Ca+(c[Da+148>>2]|0)|0;Da=(Ea-Ka|0)>0;Ma=c[p>>2]|0;c[Ma+40>>2]=Da?Ka:Ea;Ra=(Ca<<1)+-510|0;Ca=Ea-Ra|0;Ea=Ka+Ra|0;Ra=(Ca-Ea|0)>0;c[Ma+44>>2]=Ra?Ea:Ca;Ca=((A^Ba)&255)+((z^Aa)&255)|0;Ea=c[o>>2]|0;Ka=Ca+(c[Ea+24>>2]|0)|0;Sa=510-Ca+(c[Ea+152>>2]|0)|0;Ta=(Ka-Sa|0)>0;c[Ma+48>>2]=Ta?Sa:Ka;Ua=(Ca<<1)+-510|0;Ca=Ka-Ua|0;Ka=Sa+Ua|0;Ua=(Ca-Ka|0)>0;c[Ma+52>>2]=Ua?Ka:Ca;Ca=((l^Ba)&255)+((B^Aa)&255)|0;Ka=Ca+(c[Ea+28>>2]|0)|0;Sa=510-Ca+(c[Ea+156>>2]|0)|0;Va=(Ka-Sa|0)>0;c[Ma+56>>2]=Va?Sa:Ka;Wa=(Ca<<1)+-510|0;Ca=Ka-Wa|0;Ka=Sa+Wa|0;Wa=(Ca-Ka|0)>0;c[Ma+60>>2]=Wa?Ka:Ca;Ca=((E^Ba)&255)+((C^Aa)&255)|0;Ka=Ca+(c[Ea+32>>2]|0)|0;Ma=510-Ca+(c[Ea+160>>2]|0)|0;Ea=(Ka-Ma|0)>0;Sa=c[p>>2]|0;c[Sa+64>>2]=Ea?Ma:Ka;Xa=(Ca<<1)+-510|0;Ca=Ka-Xa|0;Ka=Ma+Xa|0;Xa=(Ca-Ka|0)>0;c[Sa+68>>2]=Xa?Ka:Ca;Ca=((G^Ba)&255)+((F^Aa)&255)|0;Ka=c[o>>2]|0;Ma=Ca+(c[Ka+36>>2]|0)|0;Ya=510-Ca+(c[Ka+164>>2]|0)|0;Za=(Ma-Ya|0)>0;c[Sa+72>>2]=Za?Ya:Ma;_a=(Ca<<1)+-510|0;Ca=Ma-_a|0;Ma=Ya+_a|0;_a=(Ca-Ma|0)>0;c[Sa+76>>2]=_a?Ma:Ca;Ca=((I^Ba)&255)+((H^Aa)&255)|0;Ma=Ca+(c[Ka+40>>2]|0)|0;Ya=510-Ca+(c[Ka+168>>2]|0)|0;$a=(Ma-Ya|0)>0;c[Sa+80>>2]=$a?Ya:Ma;ab=(Ca<<1)+-510|0;Ca=Ma-ab|0;Ma=Ya+ab|0;ab=(Ca-Ma|0)>0;c[Sa+84>>2]=ab?Ma:Ca;Ca=((v^Ba)&255)+((J^Aa)&255)|0;Ma=Ca+(c[Ka+44>>2]|0)|0;Sa=510-Ca+(c[Ka+172>>2]|0)|0;Ka=(Ma-Sa|0)>0;Ya=c[p>>2]|0;c[Ya+88>>2]=Ka?Sa:Ma;bb=(Ca<<1)+-510|0;Ca=Ma-bb|0;Ma=Sa+bb|0;bb=(Ca-Ma|0)>0;c[Ya+92>>2]=bb?Ma:Ca;Ca=((M^Ba)&255)+((K^Aa)&255)|0;Ma=c[o>>2]|0;Sa=Ca+(c[Ma+48>>2]|0)|0;cb=510-Ca+(c[Ma+176>>2]|0)|0;db=(Sa-cb|0)>0;c[Ya+96>>2]=db?cb:Sa;eb=(Ca<<1)+-510|0;Ca=Sa-eb|0;Sa=cb+eb|0;eb=(Ca-Sa|0)>0;c[Ya+100>>2]=eb?Sa:Ca;Ca=((O^Ba)&255)+((N^Aa)&255)|0;Sa=Ca+(c[Ma+52>>2]|0)|0;cb=510-Ca+(c[Ma+180>>2]|0)|0;fb=(Sa-cb|0)>0;c[Ya+104>>2]=fb?cb:Sa;gb=(Ca<<1)+-510|0;Ca=Sa-gb|0;Sa=cb+gb|0;gb=(Ca-Sa|0)>0;c[Ya+108>>2]=gb?Sa:Ca;Ca=((Q^Ba)&255)+((P^Aa)&255)|0;Sa=Ca+(c[Ma+56>>2]|0)|0;Ya=510-Ca+(c[Ma+184>>2]|0)|0;Ma=(Sa-Ya|0)>0;cb=c[p>>2]|0;c[cb+112>>2]=Ma?Ya:Sa;hb=(Ca<<1)+-510|0;Ca=Sa-hb|0;Sa=Ya+hb|0;hb=(Ca-Sa|0)>0;c[cb+116>>2]=hb?Sa:Ca;Ca=((D^Ba)&255)+((R^Aa)&255)|0;Sa=c[o>>2]|0;Ya=Ca+(c[Sa+60>>2]|0)|0;ib=510-Ca+(c[Sa+188>>2]|0)|0;jb=(Ya-ib|0)>0;c[cb+120>>2]=jb?ib:Ya;kb=(Ca<<1)+-510|0;Ca=Ya-kb|0;Ya=ib+kb|0;kb=(Ca-Ya|0)>0;c[cb+124>>2]=kb?Ya:Ca;c[ya>>2]=(jb&1)<<30|((Ma&1)<<28|((fb&1)<<26|((db&1)<<24|((Ka&1)<<22|(($a&1)<<20|((Za&1)<<18|((Ea&1)<<16|((Va&1)<<14|((Ta&1)<<12|((Da&1)<<10|((Pa&1)<<8|((Na&1)<<6|((Ja&1)<<4|((Ha&1)<<2|(Fa&1|(Ga&1)<<1)|(Ia&1)<<3)|(La&1)<<5)|(Oa&1)<<7)|(Qa&1)<<9)|(Ra&1)<<11)|(Ua&1)<<13)|(Wa&1)<<15)|(Xa&1)<<17)|(_a&1)<<19)|(ab&1)<<21)|(bb&1)<<23)|(eb&1)<<25)|(gb&1)<<27)|(hb&1)<<29)|(kb&1)<<31;kb=((U^Ba)&255)+((S^Aa)&255)|0;hb=kb+(c[Sa+64>>2]|0)|0;gb=510-kb+(c[Sa+192>>2]|0)|0;eb=(hb-gb|0)>0;c[cb+128>>2]=eb?gb:hb;bb=eb&1|c[za>>2];eb=(kb<<1)+-510|0;kb=hb-eb|0;hb=gb+eb|0;eb=(kb-hb|0)>0;c[cb+132>>2]=eb?hb:kb;kb=((W^Ba)&255)+((V^Aa)&255)|0;hb=kb+(c[Sa+68>>2]|0)|0;cb=510-kb+(c[Sa+196>>2]|0)|0;Sa=(hb-cb|0)>0;gb=c[p>>2]|0;c[gb+136>>2]=Sa?cb:hb;ab=(kb<<1)+-510|0;kb=hb-ab|0;hb=cb+ab|0;ab=(kb-hb|0)>0;c[gb+140>>2]=ab?hb:kb;kb=((Y^Ba)&255)+((X^Aa)&255)|0;hb=c[o>>2]|0;cb=kb+(c[hb+72>>2]|0)|0;_a=510-kb+(c[hb+200>>2]|0)|0;Xa=(cb-_a|0)>0;c[gb+144>>2]=Xa?_a:cb;Wa=(kb<<1)+-510|0;kb=cb-Wa|0;cb=_a+Wa|0;Wa=(kb-cb|0)>0;c[gb+148>>2]=Wa?cb:kb;kb=((L^Ba)&255)+((Z^Aa)&255)|0;cb=kb+(c[hb+76>>2]|0)|0;_a=510-kb+(c[hb+204>>2]|0)|0;Ua=(cb-_a|0)>0;c[gb+152>>2]=Ua?_a:cb;Ra=(kb<<1)+-510|0;kb=cb-Ra|0;cb=_a+Ra|0;Ra=(kb-cb|0)>0;c[gb+156>>2]=Ra?cb:kb;kb=((aa^Ba)&255)+((_^Aa)&255)|0;cb=kb+(c[hb+80>>2]|0)|0;gb=510-kb+(c[hb+208>>2]|0)|0;hb=(cb-gb|0)>0;_a=c[p>>2]|0;c[_a+160>>2]=hb?gb:cb;Qa=(kb<<1)+-510|0;kb=cb-Qa|0;cb=gb+Qa|0;Qa=(kb-cb|0)>0;c[_a+164>>2]=Qa?cb:kb;kb=((ca^Ba)&255)+((ba^Aa)&255)|0;cb=c[o>>2]|0;gb=kb+(c[cb+84>>2]|0)|0;Oa=510-kb+(c[cb+212>>2]|0)|0;La=(gb-Oa|0)>0;c[_a+168>>2]=La?Oa:gb;Ia=(kb<<1)+-510|0;kb=gb-Ia|0;gb=Oa+Ia|0;Ia=(kb-gb|0)>0;c[_a+172>>2]=Ia?gb:kb;kb=((ea^Ba)&255)+((da^Aa)&255)|0;gb=kb+(c[cb+88>>2]|0)|0;Oa=510-kb+(c[cb+216>>2]|0)|0;Ga=(gb-Oa|0)>0;c[_a+176>>2]=Ga?Oa:gb;Fa=(kb<<1)+-510|0;kb=gb-Fa|0;gb=Oa+Fa|0;Fa=(kb-gb|0)>0;c[_a+180>>2]=Fa?gb:kb;kb=((T^Ba)&255)+((fa^Aa)&255)|0;gb=kb+(c[cb+92>>2]|0)|0;_a=510-kb+(c[cb+220>>2]|0)|0;cb=(gb-_a|0)>0;Oa=c[p>>2]|0;c[Oa+184>>2]=cb?_a:gb;Ha=(kb<<1)+-510|0;kb=gb-Ha|0;gb=_a+Ha|0;Ha=(kb-gb|0)>0;c[Oa+188>>2]=Ha?gb:kb;kb=((ia^Ba)&255)+((ga^Aa)&255)|0;gb=c[o>>2]|0;_a=kb+(c[gb+96>>2]|0)|0;Ja=510-kb+(c[gb+224>>2]|0)|0;Na=(_a-Ja|0)>0;c[Oa+192>>2]=Na?Ja:_a;Pa=(kb<<1)+-510|0;kb=_a-Pa|0;_a=Ja+Pa|0;Pa=(kb-_a|0)>0;c[Oa+196>>2]=Pa?_a:kb;kb=((ka^Ba)&255)+((ja^Aa)&255)|0;_a=kb+(c[gb+100>>2]|0)|0;Ja=510-kb+(c[gb+228>>2]|0)|0;Da=(_a-Ja|0)>0;c[Oa+200>>2]=Da?Ja:_a;Ta=(kb<<1)+-510|0;kb=_a-Ta|0;_a=Ja+Ta|0;Ta=(kb-_a|0)>0;c[Oa+204>>2]=Ta?_a:kb;kb=((ma^Ba)&255)+((la^Aa)&255)|0;_a=kb+(c[gb+104>>2]|0)|0;Oa=510-kb+(c[gb+232>>2]|0)|0;gb=(_a-Oa|0)>0;Ja=c[p>>2]|0;c[Ja+208>>2]=gb?Oa:_a;Va=(kb<<1)+-510|0;kb=_a-Va|0;_a=Oa+Va|0;Va=(kb-_a|0)>0;c[Ja+212>>2]=Va?_a:kb;kb=(($^Ba)&255)+((na^Aa)&255)|0;_a=c[o>>2]|0;Oa=kb+(c[_a+108>>2]|0)|0;Ea=510-kb+(c[_a+236>>2]|0)|0;Za=(Oa-Ea|0)>0;c[Ja+216>>2]=Za?Ea:Oa;$a=(kb<<1)+-510|0;kb=Oa-$a|0;Oa=Ea+$a|0;$a=(kb-Oa|0)>0;c[Ja+220>>2]=$a?Oa:kb;kb=((qa^Ba)&255)+((oa^Aa)&255)|0;Oa=kb+(c[_a+112>>2]|0)|0;Ea=510-kb+(c[_a+240>>2]|0)|0;Ka=(Oa-Ea|0)>0;c[Ja+224>>2]=Ka?Ea:Oa;db=(kb<<1)+-510|0;kb=Oa-db|0;Oa=Ea+db|0;db=(kb-Oa|0)>0;c[Ja+228>>2]=db?Oa:kb;kb=((sa^Ba)&255)+((ra^Aa)&255)|0;Oa=kb+(c[_a+116>>2]|0)|0;Ja=510-kb+(c[_a+244>>2]|0)|0;_a=(Oa-Ja|0)>0;wa=c[p>>2]|0;c[wa+232>>2]=_a?Ja:Oa;Ea=(kb<<1)+-510|0;kb=Oa-Ea|0;Oa=Ja+Ea|0;Ea=(kb-Oa|0)>0;c[wa+236>>2]=Ea?Oa:kb;kb=((ua^Ba)&255)+((ta^Aa)&255)|0;xa=c[o>>2]|0;Oa=kb+(c[xa+120>>2]|0)|0;Ja=510-kb+(c[xa+248>>2]|0)|0;fb=(Oa-Ja|0)>0;c[wa+240>>2]=fb?Ja:Oa;Ma=(kb<<1)+-510|0;kb=Oa-Ma|0;Oa=Ja+Ma|0;Ma=(kb-Oa|0)>0;c[wa+244>>2]=Ma?Oa:kb;kb=((ha^Ba)&255)+((va^Aa)&255)|0;Aa=kb+(c[xa+124>>2]|0)|0;Ba=510-kb+(c[xa+252>>2]|0)|0;Oa=(Aa-Ba|0)>0;c[wa+248>>2]=Oa?Ba:Aa;Ja=(kb<<1)+-510|0;kb=Aa-Ja|0;Aa=Ba+Ja|0;Ja=(kb-Aa|0)>0;c[wa+252>>2]=Ja?Aa:kb;c[za>>2]=(Oa&1)<<30|((fb&1)<<28|((_a&1)<<26|((Ka&1)<<24|((Za&1)<<22|((gb&1)<<20|((Da&1)<<18|((Na&1)<<16|((cb&1)<<14|((Ga&1)<<12|((La&1)<<10|((hb&1)<<8|((Ua&1)<<6|((Xa&1)<<4|((Sa&1)<<2|(bb|(eb&1)<<1)|(ab&1)<<3)|(Wa&1)<<5)|(Ra&1)<<7)|(Qa&1)<<9)|(Ia&1)<<11)|(Fa&1)<<13)|(Ha&1)<<15)|(Pa&1)<<17)|(Ta&1)<<19)|(Va&1)<<21)|($a&1)<<23)|(db&1)<<25)|(Ea&1)<<27)|(Ma&1)<<29)|(Ja&1)<<31;c[o>>2]=wa;c[p>>2]=xa;if(!d)break;else{pa=pa+2|0;ya=ya+8|0}}i=h+(e<<3)|0}c[g>>2]=i;f=0;return f|0}function Ma(a){a=a|0;wa();return Ua(a)|0}function Na(a){a=a|0;Ta(a);return}function Oa(a,b){a=a|0;b=b|0;return Sa(a,b)|0}function Pa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Va(a,b,c,d)|0}function Qa(a){a=a|0;Wa(a);return}function Ra(a,b,c){a=a|0;b=b|0;c=c|0;return Xa(a,b,c)|0}function Sa(a,b){a=a|0;b=b|0;var d=0,e=0;if(!a){d=-1;return d|0}e=0;do{c[a+(e<<2)>>2]=63;e=e+1|0}while((e|0)!=256);c[a+2052>>2]=a;c[a+2056>>2]=a+1024;c[a+2048>>2]=c[a+2060>>2];c[a+((b&255)<<2)>>2]=0;d=0;return d|0}function Ta(b){b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=b+4|0;f=0;do{g=c[b>>2]|0;h=f<<1;i=((g|0)>-1?g:0-g|0)&h;j=i>>16^i;i=c[n+198972>>2]|0;if(!i){xa();k=c[n+198972>>2]|0}else k=i;a[n+198984+f>>0]=((g>>>31|0)!=(d[((j>>>8^j)&255)+(n+199640)>>0]|0|0))<<31>>31;j=c[e>>2]|0;g=((j|0)>-1?j:0-j|0)&h;h=g>>16^g;if(!k)xa();a[n+199112+f>>0]=((j>>>31|0)!=(d[((h>>>8^h)&255)+(n+199640)>>0]|0|0))<<31>>31;f=f+1|0}while((f|0)!=128);c[n+199240>>2]=(c[n+199240>>2]|0)+1;return}function Ua(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;if(!(c[n+199240>>2]|0)){d=0;do{e=d<<1;f=d>>>7&1;g=c[n+198972>>2]|0;if(!g){xa();h=c[n+198972>>2]|0}else h=g;a[n+198984+d>>0]=((a[(f|e&174)+(n+199640)>>0]|0)!=0)<<31>>31;if(!h)xa();a[n+199112+d>>0]=((a[(f|e&28)+(n+199640)>>0]|0)!=0)<<31>>31;d=d+1|0}while((d|0)!=128);c[n+199240>>2]=(c[n+199240>>2]|0)+1}d=ka(2064)|0;if(!d){i=0;return i|0}h=ka((b<<5)+256|0)|0;b=d+2060|0;c[b>>2]=h;if(!h){ha(d|0);i=0;return i|0}h=0;do{c[d+(h<<2)>>2]=63;h=h+1|0}while((h|0)!=256);c[d+2052>>2]=d;c[d+2056>>2]=d+1024;c[d+2048>>2]=c[b>>2];c[d>>2]=0;i=d;return i|0}function Va(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;if(!b){g=-1;return g|0}h=(c[b+2060>>2]|0)+256|0;if(!e){g=0;return g|0}b=f&255;f=e;do{f=f+-1|0;b=(c[h+(f<<5)+(b>>>5<<2)>>2]|0)>>>(b&31)<<7&128|b>>>1;a[d+(f>>>3)>>0]=b}while((f|0)!=0);g=0;return g|0}function Wa(a){a=a|0;if(!a)return;ha(c[a+2060>>2]|0);ha(a|0);return}function Xa(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;if(!b){f=-1;return f|0}g=b+2048|0;h=c[g>>2]|0;if(!e)i=h;else{j=b+2052|0;k=b+2056|0;b=d;d=e;l=h;m=0;while(1){o=h+(m<<5)|0;c[o>>2]=0;c[o+4>>2]=0;c[o+8>>2]=0;c[o+12>>2]=0;c[o+16>>2]=0;c[o+20>>2]=0;c[o+24>>2]=0;c[o+28>>2]=0;o=a[b>>0]|0;p=a[b+1>>0]|0;q=c[j>>2]|0;r=c[k>>2]|0;s=q;t=r;u=0;do{v=((a[n+199112+u>>0]^p)&255)+((a[n+198984+u>>0]^o)&255)|0;w=v+(c[q+(u<<2)>>2]|0)|0;x=510-v+(c[q+(u+128<<2)>>2]|0)|0;y=(w-x|0)>0;z=u<<1;c[r+(z<<2)>>2]=y?x:w;A=l+(((u|0)/16|0)<<2)|0;B=(y&1)<<(z&30)|c[A>>2];y=(v<<1)+-510|0;v=w-y|0;w=x+y|0;y=(v-w|0)>0;x=z|1;c[r+(x<<2)>>2]=y?w:v;c[A>>2]=B|(y&1)<<(x&31);u=u+1|0}while((u|0)!=128);d=d+-1|0;c[j>>2]=t;c[k>>2]=s;if(!d)break;else{b=b+2|0;l=l+32|0;m=m+1|0}}i=h+(e<<5)|0}c[g>>2]=i;f=0;return f|0}function Ya(a){a=a|0;wa();return eb(a)|0}function Za(a){a=a|0;db(a);return}function _a(a,b){a=a|0;b=b|0;return cb(a,b)|0}function $a(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return fb(a,b,c,d)|0}function ab(a){a=a|0;gb(a);return}function bb(a,b,c){a=a|0;b=b|0;c=c|0;return hb(a,b,c)|0}function cb(a,b){a=a|0;b=b|0;var d=0,e=0;if(!a){d=-1;return d|0}e=0;do{c[a+(e<<2)>>2]=63;e=e+1|0}while((e|0)!=256);c[a+2052>>2]=a;c[a+2056>>2]=a+1024;c[a+2048>>2]=c[a+2060>>2];c[a+((b&255)<<2)>>2]=0;d=0;return d|0}function db(b){b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;e=b+4|0;f=b+8|0;g=0;do{h=c[b>>2]|0;i=g<<1;j=((h|0)>-1?h:0-h|0)&i;k=j>>16^j;j=c[n+198972>>2]|0;if(!j){xa();l=c[n+198972>>2]|0}else l=j;a[n+199244+g>>0]=((h>>>31|0)!=(d[((k>>>8^k)&255)+(n+199640)>>0]|0|0))<<31>>31;k=c[e>>2]|0;h=((k|0)>-1?k:0-k|0)&i;j=h>>16^h;if(!l){xa();m=c[n+198972>>2]|0}else m=l;a[n+199372+g>>0]=((k>>>31|0)!=(d[((j>>>8^j)&255)+(n+199640)>>0]|0|0))<<31>>31;j=c[f>>2]|0;k=((j|0)>-1?j:0-j|0)&i;i=k>>16^k;if(!m)xa();a[n+199500+g>>0]=((j>>>31|0)!=(d[((i>>>8^i)&255)+(n+199640)>>0]|0|0))<<31>>31;g=g+1|0}while((g|0)!=128);c[n+199628>>2]=(c[n+199628>>2]|0)+1;return}function eb(a){a=a|0;var b=0,d=0,e=0,f=0;b=i;i=i+16|0;d=b;if(!(c[n+199628>>2]|0)){c[d>>2]=c[n+1048>>2];c[d+4>>2]=c[n+1048+4>>2];c[d+8>>2]=c[n+1048+8>>2];db(d)}d=ka(2064)|0;if(!d){e=0;i=b;return e|0}f=ka((a<<5)+256|0)|0;a=d+2060|0;c[a>>2]=f;if(!f){ha(d|0);e=0;i=b;return e|0}f=0;do{c[d+(f<<2)>>2]=63;f=f+1|0}while((f|0)!=256);c[d+2052>>2]=d;c[d+2056>>2]=d+1024;c[d+2048>>2]=c[a>>2];c[d>>2]=0;e=d;i=b;return e|0}function fb(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;if(!b){g=-1;return g|0}h=(c[b+2060>>2]|0)+256|0;if(!e){g=0;return g|0}b=f&255;f=e;do{f=f+-1|0;b=(c[h+(f<<5)+(b>>>5<<2)>>2]|0)>>>(b&31)<<7&128|b>>>1;a[d+(f>>>3)>>0]=b}while((f|0)!=0);g=0;return g|0}function gb(a){a=a|0;if(!a)return;ha(c[a+2060>>2]|0);ha(a|0);return}function hb(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;if(!b){f=-1;return f|0}g=b+2048|0;h=c[g>>2]|0;if(!e)i=h;else{j=b+2052|0;k=b+2056|0;b=d;d=e;l=h;m=0;while(1){o=h+(m<<5)|0;c[o>>2]=0;c[o+4>>2]=0;c[o+8>>2]=0;c[o+12>>2]=0;c[o+16>>2]=0;c[o+20>>2]=0;c[o+24>>2]=0;c[o+28>>2]=0;o=a[b>>0]|0;p=a[b+1>>0]|0;q=a[b+2>>0]|0;r=c[j>>2]|0;s=c[k>>2]|0;t=r;u=s;v=0;do{w=((a[n+199372+v>>0]^p)&255)+((a[n+199244+v>>0]^o)&255)+((a[n+199500+v>>0]^q)&255)|0;x=w+(c[r+(v<<2)>>2]|0)|0;y=765-w+(c[r+(v+128<<2)>>2]|0)|0;z=(x-y|0)>0;A=v<<1;c[s+(A<<2)>>2]=z?y:x;B=l+(((v|0)/16|0)<<2)|0;C=(z&1)<<(A&30)|c[B>>2];z=(w<<1)+-765|0;w=x-z|0;x=y+z|0;z=(w-x|0)>0;y=A|1;c[s+(y<<2)>>2]=z?x:w;c[B>>2]=C|(z&1)<<(y&31);v=v+1|0}while((v|0)!=128);d=d+-1|0;c[j>>2]=u;c[k>>2]=t;if(!d)break;else{b=b+3|0;l=l+32|0;m=m+1|0}}i=h+(e<<5)|0}c[g>>2]=i;f=0;return f|0}function ib(a){a=a|0;wa();return ob(a)|0}function jb(a){a=a|0;pb(a);return}function kb(a,b){a=a|0;b=b|0;return qb(a,b)|0}function lb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return rb(a,b,c,d)|0}function mb(a){a=a|0;sb(a);return}function nb(a,b,c){a=a|0;b=b|0;c=c|0;return tb(a,b,c)|0}function ob(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;if(!(c[n+199632>>2]|0)){d=0;do{e=d<<1;f=c[n+198972>>2]|0;if(!f){xa();g=c[n+198972>>2]|0}else g=f;c[n+2352+(d<<2)>>2]=a[(d>>>7&69|e&152)+(n+199640)>>0]|0?255:0;if(!g){xa();h=c[n+198972>>2]|0}else h=g;c[n+2352+32768+(d<<2)>>2]=a[(d>>>7&78^e&164)+(n+199640)>>0]|0?255:0;if(!h){xa();i=c[n+198972>>2]|0}else i=h;c[n+2352+65536+(d<<2)>>2]=a[(d>>>7&93^e&70)+(n+199640)>>0]|0?255:0;if(!i){xa();j=c[n+198972>>2]|0}else j=i;c[n+2352+98304+(d<<2)>>2]=a[(d>>>7&118^e&242)+(n+199640)>>0]|0?255:0;if(!j){xa();k=c[n+198972>>2]|0}else k=j;c[n+2352+131072+(d<<2)>>2]=a[(d>>>7&126^e&182)+(n+199640)>>0]|0?255:0;if(!k)xa();c[n+2352+163840+(d<<2)>>2]=a[(d>>>7&105^e&94)+(n+199640)>>0]|0?255:0;d=d+1|0}while((d|0)!=8192);c[n+199632>>2]=(c[n+199632>>2]|0)+1}d=ka(131088)|0;if(!d){l=0;return l|0}k=ka((b<<11)+28672|0)|0;c[d+131084>>2]=k;if(!k){ha(d|0);l=0;return l|0}else{kb(d,0)|0;l=d;return l|0}return 0}function pb(a){a=a|0;var b=0,e=0,f=0,g=0,h=0,i=0;b=0;do{e=b<<1;f=0;do{g=c[a+(f<<2)>>2]|0;h=((g|0)>-1?g:0-g|0)&e;i=h>>16^h;if(!(c[n+198972>>2]|0))xa();c[n+2352+(f<<15)+(b<<2)>>2]=(g>>>31|0)!=(d[((i>>>8^i)&255)+(n+199640)>>0]|0|0)?255:0;f=f+1|0}while((f|0)!=6);b=b+1|0}while((b|0)!=8192);c[n+199632>>2]=(c[n+199632>>2]|0)+1;return}function qb(a,b){a=a|0;b=b|0;var d=0,e=0;if(!a){d=-1;return d|0}e=0;do{c[a+(e<<2)>>2]=1e3;e=e+1|0}while((e|0)!=16384);c[a+131076>>2]=a;c[a+131080>>2]=a+65536;c[a+131072>>2]=c[a+131084>>2];c[a+((b&16383)<<2)>>2]=0;d=0;return d|0}function rb(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;if(!b){h=-1;return h|0}i=(c[b+131084>>2]|0)+28672|0;if(!f){h=0;return h|0}b=g&16383;g=f;do{g=g+-1|0;b=(d[i+(g<<11)+(b>>>3)>>0]|0)>>>(b&7)<<13&8192|b>>>1;a[e+(g>>>3)>>0]=b>>>6}while((g|0)!=0);h=0;return h|0}function sb(a){a=a|0;if(!a)return;ha(c[a+131084>>2]|0);ha(a|0);return}function tb(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;if(!b){g=-1;return g|0}h=b+131072|0;i=c[h>>2]|0;if(!f)j=i;else{k=b+131076|0;l=b+131080|0;b=e;e=f;m=i;while(1){ja(m|0,0,2048)|0;o=b+1|0;p=b+2|0;q=b+3|0;r=b+4|0;s=b+5|0;t=0;do{u=((d[o>>0]|0)^c[n+2352+32768+(t<<2)>>2])+((d[b>>0]|0)^c[n+2352+(t<<2)>>2])+((d[p>>0]|0)^c[n+2352+65536+(t<<2)>>2])+((d[q>>0]|0)^c[n+2352+98304+(t<<2)>>2])+((d[r>>0]|0)^c[n+2352+131072+(t<<2)>>2])+((d[s>>0]|0)^c[n+2352+163840+(t<<2)>>2])|0;v=c[k>>2]|0;w=c[v+(t<<2)>>2]|0;x=u+w|0;y=c[v+(t+8192<<2)>>2]|0;v=1530-u|0;z=v+y|0;A=v+w|0;w=y+u|0;u=x-z|0;y=A-w|0;v=t<<1;B=c[l>>2]|0;c[B+(v<<2)>>2]=(u|0)>-1?z:x;c[B+((v|1)<<2)>>2]=(y|0)>-1?w:A;A=m+((t|0)/4|0)|0;a[A>>0]=((y>>>31<<1|u>>>31)^3)<<(v&6)|(d[A>>0]|0);t=t+1|0}while((t|0)!=8192);e=e+-1|0;t=c[k>>2]|0;c[k>>2]=c[l>>2];c[l>>2]=t;if(!e)break;else{b=b+6|0;m=m+2048|0}}j=i+(f<<11)|0}c[h>>2]=j;g=0;return g|0}function ub(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;g=b+20|0;ja(f|0,0,c[g>>2]|0)|0;h=b+4|0;i=c[h>>2]|0;j=c[g>>2]|0;k=b+36|0;if((i-j-(c[k>>2]|0)|0)<=0)return;l=b+12|0;m=f+1|0;n=b+16|0;o=b+8|0;p=i;i=j;j=0;do{q=d[(c[l>>2]|0)+((a[f>>0]^a[e+j>>0])&255)>>0]|0;a:do if((q|0)!=(p|0)&(i|0)>1){r=i;s=p;t=1;while(1){u=(d[(c[n>>2]|0)+(r-t)>>0]|0)+q|0;if((s|0)>(u|0))v=u;else{w=c[b>>2]|0;x=u;while(1){u=x-s|0;y=(u>>w)+(u&s)|0;if((y|0)<(s|0)){v=y;break}else x=y}}x=f+t|0;a[x>>0]=a[x>>0]^a[(c[o>>2]|0)+v>>0];x=t+1|0;w=c[g>>2]|0;if((w|0)<=(x|0)){z=w;break a}r=w;s=c[h>>2]|0;t=x}}else z=i;while(0);ma(f|0,m|0,z+-1|0)|0;t=c[h>>2]|0;if((q|0)==(t|0))a[f+((c[g>>2]|0)+-1)>>0]=0;else{s=(d[c[n>>2]>>0]|0)+q|0;if((t|0)>(s|0))A=s;else{r=c[b>>2]|0;x=s;while(1){s=x-t|0;w=(s>>r)+(s&t)|0;if((w|0)<(t|0)){A=w;break}else x=w}}a[f+((c[g>>2]|0)+-1)>>0]=a[(c[o>>2]|0)+A>>0]|0}j=j+1|0;p=c[h>>2]|0;i=c[g>>2]|0}while((j|0)<(p-i-(c[k>>2]|0)|0));return}function vb(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;e=a+20|0;ja(d|0,0,c[e>>2]<<2|0)|0;f=a+4|0;g=c[f>>2]|0;h=c[e>>2]|0;i=a+36|0;if((g-h-(c[i>>2]|0)|0)<=0)return;j=a+12|0;k=d+4|0;l=a+16|0;m=a+8|0;n=g;g=h;h=0;do{o=c[(c[j>>2]|0)+((c[d>>2]^c[b+(h<<2)>>2])<<2)>>2]|0;a:do if((o|0)!=(n|0)&(g|0)>1){p=c[l>>2]|0;q=c[m>>2]|0;r=g;s=n;t=1;while(1){u=(c[p+(r-t<<2)>>2]|0)+o|0;if((s|0)>(u|0))v=u;else{w=c[a>>2]|0;x=u;while(1){u=x-s|0;y=(u>>w)+(u&s)|0;if((y|0)<(s|0)){v=y;break}else x=y}}x=d+(t<<2)|0;c[x>>2]=c[x>>2]^c[q+(v<<2)>>2];x=t+1|0;w=c[e>>2]|0;if((w|0)<=(x|0)){z=w;break a}r=w;s=c[f>>2]|0;t=x}}else z=g;while(0);ma(d|0,k|0,(z<<2)+-4|0)|0;t=c[f>>2]|0;if((o|0)==(t|0))c[d+((c[e>>2]|0)+-1<<2)>>2]=0;else{s=(c[c[l>>2]>>2]|0)+o|0;if((t|0)>(s|0))A=s;else{r=c[a>>2]|0;q=s;while(1){s=q-t|0;p=(s>>r)+(s&t)|0;if((p|0)<(t|0)){A=p;break}else q=p}}c[d+((c[e>>2]|0)+-1<<2)>>2]=c[(c[m>>2]|0)+(A<<2)>>2]}h=h+1|0;n=c[f>>2]|0;g=c[e>>2]|0}while((h|0)<(n-g-(c[i>>2]|0)|0));return}function wb(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,o=0,p=0,q=0,r=0,s=0,t=0;if(!(c[n+199636>>2]|0))c[n+199636>>2]=5;g=e;h=g+32|0;do{a[g>>0]=0;g=g+1|0}while((g|0)<(h|0));g=223-f|0;if((g|0)<=0)return;f=e+31|0;h=e+1|0;i=0;j=0;while(1){k=a[((a[b+j>>0]^i)&255)+(n+1481)>>0]|0;l=k&255;if(k<<24>>24==-1){ma(e|0,h|0,31)|0;m=0}else{k=1;do{o=(d[32-k+(n+1737)>>0]|0)+l|0;if(o>>>0>254){p=o;while(1){q=p+-255|0;r=(q>>8)+(q&255)|0;if((r|0)>254)p=r;else{s=r;break}}}else s=o;p=e+k|0;a[p>>0]=a[p>>0]^a[n+1225+s>>0];k=k+1|0}while((k|0)!=32);ma(e|0,h|0,31)|0;k=(d[n+1737>>0]|0)+l|0;if(k>>>0>254){p=k;while(1){r=p+-255|0;q=(r>>8)+(r&255)|0;if((q|0)>254)p=q;else{t=q;break}}}else t=k;m=a[n+1225+t>>0]|0}a[f>>0]=m;p=j+1|0;if((p|0)==(g|0))break;i=a[e>>0]|0;j=p}return}function xb(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ka=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0;h=i;j=b+20|0;k=c[j>>2]|0;l=k+1|0;m=i;i=i+((1*l|0)+15&-16)|0;n=i;i=i+((1*k|0)+15&-16)|0;o=i;i=i+((1*l|0)+15&-16)|0;p=i;i=i+((1*l|0)+15&-16)|0;q=i;i=i+((1*l|0)+15&-16)|0;r=i;i=i+((1*k|0)+15&-16)|0;s=i;i=i+((1*l|0)+15&-16)|0;t=i;i=i+((1*k|0)+15&-16)|0;u=(k|0)>0;if(u)ja(n|0,a[e>>0]|0,((k|0)>1?k:1)|0)|0;v=b+4|0;w=c[v>>2]|0;x=b+36|0;y=w-(c[x>>2]|0)|0;if((y|0)>1){z=b+12|0;A=b+24|0;B=b+28|0;C=b+8|0;if(u)D=1;else{E=0;i=h;return E|0}do{F=a[e+D>>0]|0;G=0;do{H=n+G|0;I=a[H>>0]|0;if(!(I<<24>>24))J=F;else{K=(aa((c[A>>2]|0)+G|0,c[B>>2]|0)|0)+(d[(c[z>>2]|0)+(I&255)>>0]|0)|0;if((w|0)>(K|0))L=K;else{I=c[b>>2]|0;M=K;while(1){K=M-w|0;N=(K>>I)+(K&w)|0;if((N|0)<(w|0)){L=N;break}else M=N}}J=a[(c[C>>2]|0)+L>>0]^F}a[H>>0]=J;G=G+1|0}while((G|0)<(k|0));D=D+1|0}while((D|0)<(y|0))}if(!u){E=0;i=h;return E|0}y=c[b+12>>2]|0;D=0;J=0;while(1){L=n+D|0;C=d[L>>0]|0;z=C|J;a[L>>0]=a[y+C>>0]|0;D=D+1|0;if((D|0)>=(k|0)){O=z;break}else J=z}if(!O){E=0;i=h;return E|0}O=m+1|0;ja(O|0,0,k|0)|0;a[m>>0]=1;if((g|0)>0){J=c[b+28>>2]|0;D=aa(w+-1-(c[f>>2]|0)|0,J)|0;if((w|0)>(D|0))P=D;else{y=c[b>>2]|0;z=D;while(1){D=z-w|0;C=(D>>y)+(D&w)|0;if((C|0)<(w|0)){P=C;break}else z=C}}z=c[b+8>>2]|0;a[O>>0]=a[z+P>>0]|0;if((g|0)>1){P=w+-1|0;y=c[b+12>>2]|0;C=1;do{D=aa(P-(c[f+(C<<2)>>2]|0)|0,J)|0;if((w|0)>(D|0))Q=D;else{L=c[b>>2]|0;B=D;while(1){D=B-w|0;A=(D>>L)+(D&w)|0;if((A|0)<(w|0)){Q=A;break}else B=A}}C=C+1|0;B=Q&255;L=C;do{A=L;L=L+-1|0;D=d[y+(d[m+L>>0]|0)>>0]|0;if((D|0)!=(w|0)){G=D+B|0;if((w|0)>(G|0))R=G;else{D=c[b>>2]|0;F=G;while(1){G=F-w|0;M=(G>>D)+(G&w)|0;if((M|0)<(w|0)){R=M;break}else F=M}}F=m+A|0;a[F>>0]=a[F>>0]^a[z+R>>0]}}while((A|0)>1)}while((C|0)!=(g|0))}}C=(k|0)<0;if(!C){R=c[b+12>>2]|0;z=0;while(1){a[o+z>>0]=a[R+(d[m+z>>0]|0)>>0]|0;if((z|0)<(k|0))z=z+1|0;else break}}a:do if((k|0)>(g|0)){z=b+12|0;R=o+1|0;y=b+8|0;Q=c[z>>2]|0;J=w&255;P=w&255;B=g;L=g;while(1){F=B;while(1){D=F;F=F+1|0;if((D|0)<0)S=0;else{H=0;M=0;while(1){G=a[m+M>>0]|0;I=G&255;if(G<<24>>24!=0?(G=d[n+(D-M)>>0]|0,(G|0)!=(w|0)):0){N=(d[(c[z>>2]|0)+I>>0]|0)+G|0;if((w|0)>(N|0))T=N;else{G=c[b>>2]|0;I=N;while(1){N=I-w|0;K=(N>>G)+(N&w)|0;if((K|0)<(w|0)){T=K;break}else I=K}}U=a[(c[y>>2]|0)+T>>0]^H}else U=H;if((D|0)==(M|0)){S=U;break}else{H=U;M=M+1|0}}}M=d[Q+(S&255)>>0]|0;if((M|0)!=(w|0)){V=D;W=F;X=M;break}ma(R|0,o|0,k|0)|0;a[o>>0]=J;if((F|0)>=(k|0))break a}F=a[m>>0]|0;a[p>>0]=F;if(u){A=0;do{M=d[o+A>>0]|0;A=A+1|0;H=a[m+A>>0]|0;if((M|0)==(w|0))a[p+A>>0]=H;else{I=M+X|0;if((w|0)>(I|0))Y=I;else{M=c[b>>2]|0;G=I;while(1){I=G-w|0;K=(I>>M)+(I&w)|0;if((K|0)<(w|0)){Y=K;break}else G=K}}a[p+A>>0]=a[(c[y>>2]|0)+Y>>0]^H}}while((A|0)<(k|0))}b:do if((L<<1|0)<=(V+g|0)){A=W+g-L|0;if(C)Z=A;else{G=F;M=0;while(1){if(G<<24>>24){D=(d[Q+(G&255)>>0]|0)-X|0;K=D+w|0;if((D|0)<0)_=K;else{D=c[b>>2]|0;I=K;while(1){K=I-w|0;N=(K>>D)+(K&w)|0;if((N|0)<(w|0)){_=N;break}else I=N}}}else _=w;a[o+M>>0]=_;I=M+1|0;if((M|0)>=(k|0)){Z=A;break b}G=a[m+I>>0]|0;M=I}}}else{ma(R|0,o|0,k|0)|0;a[o>>0]=P;Z=L}while(0);la(m|0,p|0,l|0)|0;if((W|0)<(k|0)){B=W;L=Z}else break}}while(0);if(C)$=0;else{C=c[b+12>>2]|0;Z=0;W=0;while(1){l=m+W|0;p=a[C+(d[l>>0]|0)>>0]|0;a[l>>0]=p;l=(p&255|0)==(w|0)?Z:W;if((W|0)<(k|0)){Z=l;W=W+1|0}else{$=l;break}}}la(s+1|0,O|0,k|0)|0;k=c[b+32>>2]|0;O=k+-1|0;c:do if((w|0)<1)ba=0;else{W=b+8|0;if(($|0)>0){ca=0;da=1;ea=O}else{Z=1;C=O;while(1){l=Z;Z=Z+1|0;p=k+C|0;if((w|0)>(p|0))fa=p;else{o=c[b>>2]|0;_=p;while(1){p=_-w|0;X=(p>>o)+(p&w)|0;if((X|0)<(w|0)){fa=X;break}else _=X}}if((l|0)>=(w|0)){ba=0;break c}else C=fa}}while(1){C=$;Z=1;while(1){_=s+C|0;o=d[_>>0]|0;if((o|0)==(w|0))ga=Z;else{X=o+C|0;if((w|0)>(X|0))ha=X;else{o=c[b>>2]|0;p=X;while(1){X=p-w|0;g=(X>>o)+(X&w)|0;if((g|0)<(w|0)){ha=g;break}else p=g}}a[_>>0]=ha;ga=a[(c[W>>2]|0)+(ha&255)>>0]^Z}if((C|0)>1){C=C+-1|0;Z=ga}else{ia=ga;break}}if(!(ia<<24>>24)){a[r+ca>>0]=da;a[t+ca>>0]=ea;Z=ca+1|0;if((Z|0)==($|0)){ba=$;break c}else ka=Z}else ka=ca;Z=da;da=da+1|0;C=k+ea|0;if((w|0)>(C|0))na=C;else{l=c[b>>2]|0;p=C;while(1){C=p-w|0;o=(C>>l)+(C&w)|0;if((o|0)<(w|0)){na=o;break}else p=o}}if((Z|0)>=(w|0)){ba=ka;break}else{ca=ka;ea=na}}}while(0);if(($|0)!=(ba|0)){E=-1;i=h;return E|0}ba=($|0)>0;if(!ba){E=$;i=h;return E|0}na=b+8|0;ea=c[b+12>>2]|0;ka=0;do{ca=ka;k=0;while(1){da=d[n+(ka-ca)>>0]|0;if((da|0)!=(w|0)?(ia=d[m+ca>>0]|0,(ia|0)!=(w|0)):0){ga=ia+da|0;if((w|0)>(ga|0))oa=ga;else{da=c[b>>2]|0;ia=ga;while(1){ga=ia-w|0;ha=(ga>>da)+(ga&w)|0;if((ha|0)<(w|0)){oa=ha;break}else ia=ha}}pa=a[(c[na>>2]|0)+oa>>0]^k}else pa=k;if((ca|0)>0){ca=ca+-1|0;k=pa}else{qa=pa;break}}a[q+ka>>0]=a[ea+(qa&255)>>0]|0;ka=ka+1|0}while((ka|0)!=($|0));if(!ba){E=$;i=h;return E|0}ba=b+8|0;ka=b+24|0;qa=b+12|0;ea=$;do{pa=ea;ea=ea+-1|0;oa=r+ea|0;na=$;w=0;d:while(1){n=na;while(1){k=n+-1|0;if((n|0)<=0){ra=w;break d}ca=d[q+k>>0]|0;ia=c[v>>2]|0;if((ca|0)==(ia|0))n=k;else{sa=ca;ta=ia;ua=k;break}}n=(aa(d[oa>>0]|0,ua)|0)+sa|0;if((ta|0)>(n|0))va=n;else{k=c[b>>2]|0;ia=n;while(1){n=ia-ta|0;ca=(n>>k)+(n&ta)|0;if((ca|0)<(ta|0)){va=ca;break}else ia=ca}}na=ua;w=a[(c[ba>>2]|0)+va>>0]^w}w=d[oa>>0]|0;na=aa((c[ka>>2]|0)+-1|0,w)|0;ia=c[v>>2]|0;k=na+ia|0;if((na|0)<0)wa=k;else{na=c[b>>2]|0;ca=k;while(1){k=ca-ia|0;n=(k>>na)+(k&ia)|0;if((n|0)<(ia|0)){wa=n;break}else ca=n}}ca=c[ba>>2]|0;na=a[ca+wa>>0]|0;oa=(c[j>>2]|0)+-1|0;n=(($|0)<(oa|0)?$:oa)&-2;if((n|0)>-1){oa=0;k=n;while(1){n=d[m+(k|1)>>0]|0;if((n|0)==(ia|0))xa=oa;else{da=(aa(w,k)|0)+n|0;if((ia|0)>(da|0))ya=da;else{n=c[b>>2]|0;Z=da;while(1){da=Z-ia|0;ha=(da>>n)+(da&ia)|0;if((ha|0)<(ia|0)){ya=ha;break}else Z=ha}}xa=a[ca+ya>>0]^oa}k=k+-2|0;if((k|0)<=-1){za=xa;break}else oa=xa}}else za=0;oa=ra&255;if(ra<<24>>24?(k=d[t+ea>>0]|0,w=c[x>>2]|0,(k|0)>=(w|0)):0){Z=c[qa>>2]|0;n=(d[Z+(na&255)>>0]|0)+(d[Z+oa>>0]|0)+ia-(d[Z+(za&255)>>0]|0)|0;if((ia|0)>(n|0))Aa=n;else{Z=c[b>>2]|0;oa=n;while(1){n=oa-ia|0;ha=(n>>Z)+(n&ia)|0;if((ha|0)<(ia|0)){Aa=ha;break}else oa=ha}}oa=e+(k-w)|0;a[oa>>0]=a[oa>>0]^a[ca+Aa>>0]}}while((pa|0)>1);if((f|0)!=0&($|0)>0)Ba=0;else{E=$;i=h;return E|0}do{c[f+(Ba<<2)>>2]=d[t+Ba>>0];Ba=Ba+1|0}while((Ba|0)!=($|0));E=$;i=h;return E|0}function yb(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ka=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0;f=i;g=a+20|0;h=c[g>>2]|0;j=h+1|0;k=i;i=i+((1*(j<<2)|0)+15&-16)|0;l=i;i=i+((1*(h<<2)|0)+15&-16)|0;m=i;i=i+((1*(j<<2)|0)+15&-16)|0;n=i;i=i+((1*(j<<2)|0)+15&-16)|0;o=i;i=i+((1*(j<<2)|0)+15&-16)|0;p=i;i=i+((1*(h<<2)|0)+15&-16)|0;q=i;i=i+((1*(j<<2)|0)+15&-16)|0;j=i;i=i+((1*(h<<2)|0)+15&-16)|0;r=(h|0)>0;if(r){s=c[b>>2]|0;t=0;do{c[l+(t<<2)>>2]=s;t=t+1|0}while((t|0)<(h|0))}t=a+4|0;s=c[t>>2]|0;u=a+36|0;v=s-(c[u>>2]|0)|0;if((v|0)>1){w=a+12|0;x=a+24|0;y=a+28|0;z=a+8|0;if(r)A=1;else{B=0;i=f;return B|0}do{C=c[b+(A<<2)>>2]|0;D=0;do{E=l+(D<<2)|0;F=c[E>>2]|0;if(!F)G=C;else{H=(aa((c[x>>2]|0)+D|0,c[y>>2]|0)|0)+(c[(c[w>>2]|0)+(F<<2)>>2]|0)|0;if((s|0)>(H|0))I=H;else{F=c[a>>2]|0;J=H;while(1){H=J-s|0;K=(H>>F)+(H&s)|0;if((K|0)<(s|0)){I=K;break}else J=K}}G=c[(c[z>>2]|0)+(I<<2)>>2]^C}c[E>>2]=G;D=D+1|0}while((D|0)<(h|0));A=A+1|0}while((A|0)<(v|0))}if(!r){B=0;i=f;return B|0}v=c[a+12>>2]|0;A=0;G=0;while(1){I=l+(A<<2)|0;z=c[I>>2]|0;w=z|G;c[I>>2]=c[v+(z<<2)>>2];A=A+1|0;if((A|0)>=(h|0)){L=w;break}else G=w}if(!L){B=0;i=f;return B|0}L=k+4|0;G=h<<2;ja(L|0,0,G|0)|0;c[k>>2]=1;if((e|0)>0){A=c[a+28>>2]|0;v=aa(s+-1-(c[d>>2]|0)|0,A)|0;if((s|0)>(v|0))M=v;else{w=c[a>>2]|0;z=v;while(1){v=z-s|0;I=(v>>w)+(v&s)|0;if((I|0)<(s|0)){M=I;break}else z=I}}z=c[a+8>>2]|0;c[L>>2]=c[z+(M<<2)>>2];if((e|0)>1){M=s+-1|0;w=c[a+12>>2]|0;I=1;do{v=aa(M-(c[d+(I<<2)>>2]|0)|0,A)|0;if((s|0)>(v|0))N=v;else{y=c[a>>2]|0;x=v;while(1){v=x-s|0;D=(v>>y)+(v&s)|0;if((D|0)<(s|0)){N=D;break}else x=D}}I=I+1|0;x=I;do{y=x;x=x+-1|0;D=c[w+(c[k+(x<<2)>>2]<<2)>>2]|0;if((D|0)!=(s|0)){v=D+N|0;if((s|0)>(v|0))O=v;else{D=c[a>>2]|0;C=v;while(1){v=C-s|0;J=(v>>D)+(v&s)|0;if((J|0)<(s|0)){O=J;break}else C=J}}C=k+(y<<2)|0;c[C>>2]=c[C>>2]^c[z+(O<<2)>>2]}}while((y|0)>1)}while((I|0)!=(e|0))}}I=(h|0)<0;if(!I){O=c[a+12>>2]|0;z=0;while(1){c[m+(z<<2)>>2]=c[O+(c[k+(z<<2)>>2]<<2)>>2];if((z|0)<(h|0))z=z+1|0;else break}}a:do if((h|0)>(e|0)){z=m+4|0;O=a+8|0;N=c[a+12>>2]|0;w=G+4|0;A=e;M=e;while(1){x=A;while(1){C=x;x=x+1|0;if((C|0)<0)P=0;else{D=0;E=0;while(1){J=c[k+(E<<2)>>2]|0;if((J|0)!=0?(v=c[l+(C-E<<2)>>2]|0,(v|0)!=(s|0)):0){F=(c[N+(J<<2)>>2]|0)+v|0;if((s|0)>(F|0))Q=F;else{v=c[a>>2]|0;J=F;while(1){F=J-s|0;K=(F>>v)+(F&s)|0;if((K|0)<(s|0)){Q=K;break}else J=K}}R=c[(c[O>>2]|0)+(Q<<2)>>2]^D}else R=D;if((C|0)==(E|0)){P=R;break}else{D=R;E=E+1|0}}}E=c[N+(P<<2)>>2]|0;if((E|0)!=(s|0)){S=C;T=x;U=E;break}ma(z|0,m|0,G|0)|0;c[m>>2]=s;if((x|0)>=(h|0))break a}x=c[k>>2]|0;c[n>>2]=x;if(r){y=0;do{E=c[m+(y<<2)>>2]|0;y=y+1|0;D=c[k+(y<<2)>>2]|0;if((E|0)==(s|0))c[n+(y<<2)>>2]=D;else{J=E+U|0;if((s|0)>(J|0))V=J;else{E=c[a>>2]|0;v=J;while(1){J=v-s|0;K=(J>>E)+(J&s)|0;if((K|0)<(s|0)){V=K;break}else v=K}}c[n+(y<<2)>>2]=c[(c[O>>2]|0)+(V<<2)>>2]^D}}while((y|0)<(h|0))}b:do if((M<<1|0)<=(S+e|0)){y=T+e-M|0;if(I)W=y;else{v=x;E=0;while(1){if(v){C=(c[N+(v<<2)>>2]|0)-U+s|0;if((s|0)>(C|0))X=C;else{K=c[a>>2]|0;J=C;while(1){C=J-s|0;F=(C>>K)+(C&s)|0;if((F|0)<(s|0)){X=F;break}else J=F}}}else X=s;c[m+(E<<2)>>2]=X;J=E+1|0;if((E|0)>=(h|0)){W=y;break b}v=c[k+(J<<2)>>2]|0;E=J}}}else{ma(z|0,m|0,G|0)|0;c[m>>2]=s;W=M}while(0);la(k|0,n|0,w|0)|0;if((T|0)<(h|0)){A=T;M=W}else break}}while(0);if(I)Y=0;else{I=c[a+12>>2]|0;W=0;T=0;while(1){n=k+(T<<2)|0;m=c[I+(c[n>>2]<<2)>>2]|0;c[n>>2]=m;n=(m|0)==(s|0)?W:T;if((T|0)<(h|0)){W=n;T=T+1|0}else{Y=n;break}}}la(q+4|0,L|0,G|0)|0;G=c[a+32>>2]|0;L=G+-1|0;c:do if((s|0)<1)Z=0;else{T=a+8|0;if((Y|0)>0){_=0;$=1;ba=L}else{W=1;h=L;while(1){I=W;W=W+1|0;n=G+h|0;if((s|0)>(n|0))ca=n;else{m=c[a>>2]|0;X=n;while(1){n=X-s|0;U=(n>>m)+(n&s)|0;if((U|0)<(s|0)){ca=U;break}else X=U}}if((I|0)>=(s|0)){Z=0;break c}else h=ca}}while(1){h=Y;W=1;while(1){X=q+(h<<2)|0;m=c[X>>2]|0;if((m|0)==(s|0))da=W;else{U=m+h|0;if((s|0)>(U|0))ea=U;else{m=c[a>>2]|0;n=U;while(1){U=n-s|0;e=(U>>m)+(U&s)|0;if((e|0)<(s|0)){ea=e;break}else n=e}}c[X>>2]=ea;da=c[(c[T>>2]|0)+(ea<<2)>>2]^W}if((h|0)>1){h=h+-1|0;W=da}else{fa=da;break}}if(!fa){c[p+(_<<2)>>2]=$;c[j+(_<<2)>>2]=ba;W=_+1|0;if((W|0)==(Y|0)){Z=Y;break c}else ga=W}else ga=_;W=$;$=$+1|0;h=G+ba|0;if((s|0)>(h|0))ha=h;else{I=c[a>>2]|0;n=h;while(1){h=n-s|0;m=(h>>I)+(h&s)|0;if((m|0)<(s|0)){ha=m;break}else n=m}}if((W|0)>=(s|0)){Z=ga;break}else{_=ga;ba=ha}}}while(0);if((Y|0)!=(Z|0)){B=-1;i=f;return B|0}Z=(Y|0)>0;if(!Z){B=Y;i=f;return B|0}ha=c[a+12>>2]|0;ba=a+8|0;ga=0;do{_=ga;G=0;while(1){$=c[l+(ga-_<<2)>>2]|0;if(($|0)!=(s|0)?(fa=c[k+(_<<2)>>2]|0,(fa|0)!=(s|0)):0){da=fa+$|0;if((s|0)>(da|0))ia=da;else{$=c[a>>2]|0;fa=da;while(1){da=fa-s|0;ea=(da>>$)+(da&s)|0;if((ea|0)<(s|0)){ia=ea;break}else fa=ea}}ka=c[(c[ba>>2]|0)+(ia<<2)>>2]^G}else ka=G;if((_|0)>0){_=_+-1|0;G=ka}else{na=ka;break}}c[o+(ga<<2)>>2]=c[ha+(na<<2)>>2];ga=ga+1|0}while((ga|0)!=(Y|0));if(!Z){B=Y;i=f;return B|0}Z=a+8|0;ga=a+24|0;na=c[Z>>2]|0;ha=a+12|0;ka=Y;do{ia=ka;ka=ka+-1|0;ba=p+(ka<<2)|0;s=Y;l=0;d:while(1){G=s;while(1){_=G+-1|0;if((G|0)<=0){oa=l;break d}fa=c[o+(_<<2)>>2]|0;$=c[t>>2]|0;if((fa|0)==($|0))G=_;else{pa=fa;qa=$;ra=_;break}}G=(aa(c[ba>>2]|0,ra)|0)+pa|0;if((qa|0)>(G|0))sa=G;else{_=c[a>>2]|0;$=G;while(1){G=$-qa|0;fa=(G>>_)+(G&qa)|0;if((fa|0)<(qa|0)){sa=fa;break}else $=fa}}s=ra;l=c[(c[Z>>2]|0)+(sa<<2)>>2]^l}l=c[ba>>2]|0;s=aa((c[ga>>2]|0)+-1|0,l)|0;$=c[t>>2]|0;_=s+$|0;if(($|0)>(_|0))ta=_;else{s=c[a>>2]|0;fa=_;while(1){_=fa-$|0;G=(_>>s)+(_&$)|0;if((G|0)<($|0)){ta=G;break}else fa=G}}fa=c[na+(ta<<2)>>2]|0;s=(c[g>>2]|0)+-1|0;ba=((Y|0)<(s|0)?Y:s)&-2;if((ba|0)>-1){s=0;G=ba;while(1){ba=c[k+((G|1)<<2)>>2]|0;if((ba|0)==($|0))ua=s;else{_=(aa(l,G)|0)+ba|0;if(($|0)>(_|0))va=_;else{ba=c[a>>2]|0;W=_;while(1){_=W-$|0;ea=(_>>ba)+(_&$)|0;if((ea|0)<($|0)){va=ea;break}else W=ea}}ua=c[(c[Z>>2]|0)+(va<<2)>>2]^s}G=G+-2|0;if((G|0)<=-1){wa=ua;break}else s=ua}}else wa=0;if(oa|0?(s=c[j+(ka<<2)>>2]|0,G=c[u>>2]|0,s>>>0>=G>>>0):0){l=c[ha>>2]|0;W=(c[l+(fa<<2)>>2]|0)+(c[l+(oa<<2)>>2]|0)+$-(c[l+(wa<<2)>>2]|0)|0;if(($|0)>(W|0))xa=W;else{l=c[a>>2]|0;ba=W;while(1){W=ba-$|0;ea=(W>>l)+(W&$)|0;if((ea|0)<($|0)){xa=ea;break}else ba=ea}}ba=b+(s-G<<2)|0;c[ba>>2]=c[ba>>2]^c[(c[Z>>2]|0)+(xa<<2)>>2]}}while((ia|0)>1);if(!((d|0)!=0&(Y|0)>0)){B=Y;i=f;return B|0}la(d|0,j|0,Y<<2|0)|0;B=Y;i=f;return B|0}function zb(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ka=0,la=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0;h=i;i=i+288|0;j=h+240|0;k=h+208|0;l=h+170|0;m=h+137|0;o=h+104|0;p=h+72|0;q=h+32|0;r=h;if(g>>>0>222){s=-1;i=h;return s|0}ja(k|0,a[b>>0]|0,32)|0;t=255-g|0;if((t|0)>1){u=1;do{v=a[b+u>>0]|0;w=0;do{x=k+w|0;y=a[x>>0]|0;if(!(y<<24>>24))z=v;else{A=(w*11|0)+1232+(d[(y&255)+(n+1481)>>0]|0)|0;if((A|0)>254){y=A;while(1){B=y+-255|0;C=(B>>8)+(B&255)|0;if((C|0)>254)y=C;else{D=C;break}}}else D=A;z=a[n+1225+D>>0]^v}a[x>>0]=z;w=w+1|0}while((w|0)!=32);u=u+1|0}while((u|0)!=(t|0));E=0;F=0}else{E=0;F=0}while(1){t=k+E|0;u=d[t>>0]|0;z=u|F;a[t>>0]=a[n+1481+u>>0]|0;E=E+1|0;if((E|0)==32){G=z;break}else F=z}if(G){G=j+1|0;F=G;E=F+32|0;do{a[F>>0]=0;F=F+1|0}while((F|0)<(E|0));a[j>>0]=1;if((f|0)>0){z=(254-(c[e>>2]|0)|0)*11|0;if((z|0)>254){u=z;while(1){t=u+-255|0;D=(t>>8)+(t&255)|0;if((D|0)>254)u=D;else{H=D;break}}}else H=z;a[G>>0]=a[n+1225+H>>0]|0;if((f|0)>1){H=1;do{z=(254-(c[e+(H<<2)>>2]|0)|0)*11|0;if((z|0)>254){u=z;while(1){D=u+-255|0;t=(D>>8)+(D&255)|0;if((t|0)>254)u=t;else{I=t;break}}}else I=z;H=H+1|0;u=I&255;t=H;do{D=t;t=t+-1|0;w=a[(d[j+t>>0]|0)+(n+1481)>>0]|0;if(w<<24>>24!=-1){v=(w&255)+u|0;if(v>>>0>254){w=v;while(1){y=w+-255|0;C=(y>>8)+(y&255)|0;if((C|0)>254)w=C;else{J=C;break}}}else J=v;w=j+D|0;a[w>>0]=a[w>>0]^a[n+1225+J>>0]}}while((D|0)>1)}while((H|0)!=(f|0));K=0}else K=0}else K=0;do{a[l+K>>0]=a[(d[j+K>>0]|0)+(n+1481)>>0]|0;K=K+1|0}while((K|0)!=33);K=f+1|0;a:do if((K|0)<33){H=l+1|0;J=K;I=f;u=f;while(1){t=J;z=u;while(1){if((z|0)<0)L=0;else{w=t+-1|0;x=0;A=0;while(1){C=a[j+A>>0]|0;y=C&255;if(C<<24>>24!=0?(C=a[k+(w-A)>>0]|0,C<<24>>24!=-1):0){B=(d[n+1481+y>>0]|0)+(C&255)|0;if(B>>>0>254){C=B;while(1){y=C+-255|0;M=(y>>8)+(y&255)|0;if((M|0)>254)C=M;else{N=M;break}}}else N=B;O=a[n+1225+N>>0]^x}else O=x;if((A|0)==(z|0)){L=O;break}else{x=O;A=A+1|0}}}A=a[(L&255)+(n+1481)>>0]|0;if(A<<24>>24!=-1){P=t;Q=A;R=z;break}ma(H|0,l|0,32)|0;a[l>>0]=-1;A=t+1|0;if((A|0)<33){x=t;t=A;z=x}else{S=0;T=0;break a}}z=Q&255;t=a[j>>0]|0;a[m>>0]=t;D=0;do{v=a[l+D>>0]|0;D=D+1|0;x=a[j+D>>0]|0;if(v<<24>>24==-1)a[m+D>>0]=x;else{A=(v&255)+z|0;if(A>>>0>254){v=A;while(1){w=v+-255|0;C=(w>>8)+(w&255)|0;if((C|0)>254)v=C;else{U=C;break}}}else U=A;a[m+D>>0]=a[n+1225+U>>0]^x}}while((D|0)!=32);if((I<<1|0)>(R+f|0)){ma(H|0,l|0,32)|0;a[l>>0]=-1;V=I}else{D=f-I|0;v=t;C=0;while(1){if(v<<24>>24){w=(d[(v&255)+(n+1481)>>0]|0)-z+255|0;if((w|0)>254){M=w;while(1){y=M+-255|0;W=(y>>8)+(y&255)|0;if((W|0)>254)M=W;else{X=W;break}}}else X=w}else X=255;a[l+C>>0]=X;M=C+1|0;if((M|0)==33)break;v=a[j+M>>0]|0;C=M}V=D+P|0}F=j;Y=m;E=F+33|0;do{a[F>>0]=a[Y>>0]|0;F=F+1|0;Y=Y+1|0}while((F|0)<(E|0));D=P+1|0;if((D|0)<33){J=D;I=V;u=P}else{S=0;T=0;break}}}else{S=0;T=0}while(0);while(1){P=j+T|0;V=a[(d[P>>0]|0)+(n+1481)>>0]|0;a[P>>0]=V;P=V<<24>>24==-1?S:T;T=T+1|0;if((T|0)==33){Z=P;break}else S=P}F=q+1|0;Y=G;E=F+32|0;do{a[F>>0]=a[Y>>0]|0;F=F+1|0;Y=Y+1|0}while((F|0)<(E|0));Y=(Z|0)>0;b:do if(Y){F=0;E=1;G=115;while(1){S=Z;T=1;while(1){P=q+S|0;V=a[P>>0]|0;if(V<<24>>24==-1)_=T;else{m=(V&255)+S|0;if((m|0)>254){V=m;while(1){X=V+-255|0;l=(X>>8)+(X&255)|0;if((l|0)>254)V=l;else{$=l;break}}}else $=m;a[P>>0]=$;_=a[($&255)+(n+1225)>>0]^T}if((S|0)>1){S=S+-1|0;T=_}else{ba=_;break}}if(!(ba<<24>>24)){a[p+F>>0]=E;a[r+F>>0]=G;T=F+1|0;if((T|0)==(Z|0)){ca=Z;break b}else da=T}else da=F;E=E+1|0;T=G+116|0;if((T|0)>254){S=T;while(1){V=S+-255|0;w=(V>>8)+(V&255)|0;if((w|0)>254)S=w;else{ea=w;break}}}else ea=T;if((E|0)>=256){ca=da;break}else{F=da;G=ea}}}else{G=1;F=115;while(1){G=G+1|0;E=F+116|0;if((E|0)>254){S=E;while(1){w=S+-255|0;V=(w>>8)+(w&255)|0;if((V|0)>254)S=V;else{fa=V;break}}}else fa=E;if((G|0)>=256){ca=0;break}else F=fa}}while(0);fa=(Z|0)!=(ca|0);if(!(fa|Y^1)){ca=0;do{ea=ca;da=0;while(1){ba=a[k+(ca-ea)>>0]|0;_=ba&255;if(ba<<24>>24!=-1?(ba=a[j+ea>>0]|0,ba<<24>>24!=-1):0){$=(ba&255)+_|0;if($>>>0>254){_=$;while(1){ba=_+-255|0;q=(ba>>8)+(ba&255)|0;if((q|0)>254)_=q;else{ga=q;break}}}else ga=$;ha=a[n+1225+ga>>0]^da}else ha=da;if((ea|0)>0){ea=ea+-1|0;da=ha}else{ia=ha;break}}a[o+ca>>0]=a[(ia&255)+(n+1481)>>0]|0;ca=ca+1|0}while((ca|0)!=(Z|0));if(Y){Y=((Z|0)<31?Z:31)&-2;ca=(Y|0)>-1;ia=Z;do{ha=ia;ia=ia+-1|0;ga=p+ia|0;k=Z;da=0;c:while(1){ea=k;while(1){_=ea+-1|0;if((ea|0)<=0){ka=da;break c}E=a[o+_>>0]|0;if(E<<24>>24==-1)ea=_;else{la=E;na=_;break}}ea=(aa(d[ga>>0]|0,na)|0)+(la&255)|0;if((ea|0)>254){$=ea;while(1){_=$+-255|0;E=(_>>8)+(_&255)|0;if((E|0)>254)$=E;else{oa=E;break}}}else oa=ea;k=na;da=a[n+1225+oa>>0]^da}da=d[ga>>0]|0;k=(da*111|0)+255|0;while(1){$=k+-255|0;E=($>>8)+($&255)|0;if((E|0)>254)k=E;else{pa=E;break}}k=a[n+1225+pa>>0]|0;if(ca){ga=0;E=Y;while(1){$=a[j+(E|1)>>0]|0;if($<<24>>24==-1)qa=ga;else{_=(aa(da,E)|0)+($&255)|0;if((_|0)>254){$=_;while(1){q=$+-255|0;ba=(q>>8)+(q&255)|0;if((ba|0)>254)$=ba;else{ra=ba;break}}}else ra=_;qa=a[n+1225+ra>>0]^ga}E=E+-2|0;if((E|0)<=-1){sa=qa;break}else ga=qa}}else sa=0;ga=ka&255;if(ka<<24>>24?(E=d[r+ia>>0]|0,(E|0)>=(g|0)):0){da=(d[n+1481+ga>>0]|0)+255+(d[(k&255)+(n+1481)>>0]|0)-(d[(sa&255)+(n+1481)>>0]|0)|0;if((da|0)>254){ga=da;while(1){$=ga+-255|0;ea=($>>8)+($&255)|0;if((ea|0)>254)ga=ea;else{ta=ea;break}}}else ta=da;ga=b+(E-g)|0;a[ga>>0]=a[ga>>0]^a[n+1225+ta>>0]}}while((ha|0)>1);if((e|0)!=0&(Z|0)>0){ta=0;do{c[e+(ta<<2)>>2]=d[r+ta>>0];ta=ta+1|0}while((ta|0)!=(Z|0));ua=Z}else ua=Z}else ua=Z}else ua=fa?-1:Z}else ua=0;s=ua;i=h;return s|0}function Ab(a){a=a|0;ha(c[a+8>>2]|0);ha(c[a+12>>2]|0);ha(c[a+16>>2]|0);ha(a|0);return}function Bb(b,e,f,g,h,i){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;if(b>>>0>8|(f|b|0)<0){j=0;return j|0}k=1<>2]=b;c[m+4>>2]=l;c[m+36>>2]=i;i=ka(k|0)|0;c[m+8>>2]=i;if(!i){ha(m|0);j=0;return j|0}n=ka(k|0)|0;c[m+12>>2]=n;if(!n){ha(i|0);ha(m|0);j=0;return j|0}a[n>>0]=l;a[i+l>>0]=0;if((k|0)>1){o=0;p=1;while(1){a[n+p>>0]=o;a[i+o>>0]=p;q=p<<1;r=l&(((q&k|0)==0?0:e)^q);o=o+1|0;if((o|0)>=(l|0)){s=r;break}else p=r}if((s|0)!=1){ha(i|0);ha(n|0);ha(m|0);j=0;return j|0}}s=h+1|0;p=ka(s|0)|0;c[m+16>>2]=p;if(!p){ha(i|0);ha(n|0);ha(m|0);j=0;return j|0}c[m+24>>2]=f;c[m+28>>2]=g;c[m+20>>2]=h;if(!(1%(g|0)|0))t=1;else{o=1;while(1){e=l+o|0;if(!((e|0)%(g|0)|0)){t=e;break}else o=e}}c[m+32>>2]=(t|0)/(g|0)|0;a[p>>0]=1;if((h|0)>0){t=0;o=aa(g,f)|0;while(1){f=t;t=t+1|0;a[p+t>>0]=1;if((f|0)>0){e=f;do{f=p+e|0;k=a[f>>0]|0;r=e;e=e+-1|0;q=a[p+e>>0]|0;if(!(k<<24>>24))u=q;else{v=(d[n+(k&255)>>0]|0)+o|0;if((l|0)>(v|0))w=v;else{k=v;while(1){v=k-l|0;x=(v>>b)+(v&l)|0;if((x|0)<(l|0)){w=x;break}else k=x}}u=a[i+w>>0]^q}a[f>>0]=u}while((r|0)>1)}e=(d[n+(d[p>>0]|0)>>0]|0)+o|0;if((l|0)>(e|0))y=e;else{k=e;while(1){e=k-l|0;x=(e>>b)+(e&l)|0;if((x|0)<(l|0)){y=x;break}else k=x}}k=a[i+y>>0]|0;a[p>>0]=k;if((t|0)==(h|0)){z=k;break}else o=o+g|0}}else z=1;a[p>>0]=a[n+(z&255)>>0]|0;if(!h){j=m;return j|0}else A=1;do{a[p+A>>0]=a[n+(d[p+A>>0]|0)>>0]|0;A=A+1|0}while((A|0)!=(s|0));j=m;return j|0}function Cb(a){a=a|0;ha(c[a+8>>2]|0);ha(c[a+12>>2]|0);ha(c[a+16>>2]|0);ha(a|0);return}function Db(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;if(a>>>0>32|(d|a|0)<0){h=0;return h|0}i=1<>2]=a;a=k+4|0;c[a>>2]=j;c[k+36>>2]=g;g=ka(i<<2|0)|0;l=k+8|0;c[l>>2]=g;if(!g){ha(k|0);h=0;return h|0}m=ka((j<<2)+4|0)|0;n=k+12|0;c[n>>2]=m;if(!m){ha(g|0);ha(k|0);h=0;return h|0}c[m>>2]=j;c[g+(j<<2)>>2]=0;if((i|0)>1){j=c[n>>2]|0;m=c[l>>2]|0;o=c[a>>2]|0;p=0;q=1;while(1){c[j+(q<<2)>>2]=p;c[m+(p<<2)>>2]=q;r=q<<1;s=o&(((r&i|0)==0?0:b)^r);p=p+1|0;if((p|0)>=(o|0)){t=s;break}else q=s}if((t|0)==1)u=m;else{ha(m|0);ha(c[n>>2]|0);ha(k|0);h=0;return h|0}}else u=g;g=ka((f<<2)+4|0)|0;m=k+16|0;c[m>>2]=g;if(!g){ha(u|0);ha(c[n>>2]|0);ha(k|0);h=0;return h|0}c[k+24>>2]=d;c[k+28>>2]=e;c[k+20>>2]=f;if(!(1%(e|0)|0))v=1;else{u=c[a>>2]|0;t=1;while(1){q=u+t|0;if(!((q|0)%(e|0)|0)){v=q;break}else t=q}}c[k+32>>2]=(v|0)/(e|0)|0;c[g>>2]=1;if((f|0)>0){g=aa(e,d)|0;d=c[m>>2]|0;v=c[n>>2]|0;t=c[l>>2]|0;u=c[a>>2]|0;q=0;o=g;while(1){g=q;q=q+1|0;c[d+(q<<2)>>2]=1;if((g|0)>0){p=c[d+(g<<2)>>2]|0;b=g;do{g=d+(b<<2)|0;i=b;b=b+-1|0;j=p;p=c[d+(b<<2)>>2]|0;if(!j)w=p;else{s=(c[(c[n>>2]|0)+(j<<2)>>2]|0)+o|0;j=c[a>>2]|0;if((j|0)>(s|0))x=s;else{r=c[k>>2]|0;y=s;while(1){s=y-j|0;z=(s>>r)+(s&j)|0;if((z|0)<(j|0)){x=z;break}else y=z}}w=c[(c[l>>2]|0)+(x<<2)>>2]^p}c[g>>2]=w}while((i|0)>1)}p=(c[v+(c[d>>2]<<2)>>2]|0)+o|0;if((u|0)>(p|0))A=p;else{b=c[k>>2]|0;y=p;while(1){p=y-u|0;j=(p>>b)+(p&u)|0;if((j|0)<(u|0)){A=j;break}else y=j}}c[d>>2]=c[t+(A<<2)>>2];if((q|0)==(f|0))break;else o=o+e|0}}e=c[m>>2]|0;m=c[n>>2]|0;n=0;while(1){o=e+(n<<2)|0;c[o>>2]=c[m+(c[o>>2]<<2)>>2];if((n|0)==(f|0)){h=k;break}else n=n+1|0}return h|0}function Eb(b,c,e){b=b|0;c=c|0;e=e|0;var f=0,g=0,h=0,j=0;f=i;i=i+224|0;g=f;h=223-e|0;if((h|0)>0){j=0;do{a[g+j>>0]=a[(d[b+j>>0]|0)+(n+2026)>>0]|0;j=j+1|0}while((j|0)!=(h|0))}wb(g,c,e);e=0;do{g=c+e|0;a[g>>0]=a[(d[g>>0]|0)+(n+1770)>>0]|0;e=e+1|0}while((e|0)!=32);i=f;return}function Fb(b,c,e,f){b=b|0;c=c|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,o=0;g=i;i=i+256|0;h=g;j=255-f|0;k=(j|0)>0;if(k)l=0;else{m=zb(h,c,e,f)|0;i=g;return m|0}do{a[h+l>>0]=a[(d[b+l>>0]|0)+(n+2026)>>0]|0;l=l+1|0}while((l|0)!=(j|0));l=zb(h,c,e,f)|0;if((l|0)>0&k)o=0;else{m=l;i=g;return m|0}do{a[b+o>>0]=a[(d[h+o>>0]|0)+(n+1770)>>0]|0;o=o+1|0}while((o|0)!=(j|0));m=l;i=g;return m|0}function Gb(a,b){a=a|0;b=b|0;wa();return Jb(a,b)|0}function Hb(a){a=a|0;return}function Ib(a,b){a=a|0;b=b|0;return Lb(a,b)|0}function Jb(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,h=0;if(!d){e=0;return e|0}f=na(1,8)|0;c[f>>2]=d;g=na(d|0,2)|0;c[f+4>>2]=g;if((d|0)>0)h=0;else{e=f;return e|0}do{b[g+(h<<1)>>1]=b[a+(h<<1)>>1]|0;h=h+1|0}while((h|0)!=(d|0));e=f;return e|0}function Kb(a){a=a|0;var b=0;b=c[a+4>>2]|0;if(b|0)ha(b|0);ha(a|0);return}function Lb(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=c[a>>2]|0;if((e|0)<=0){f=0;return f|0}g=c[a+4>>2]|0;a=0;h=0;while(1){i=(aa(b[g+(h<<1)>>1]|0,b[d+(h<<1)>>1]|0)|0)+a|0;h=h+1|0;if((h|0)>=(e|0)){f=i;break}else a=i}return f|0}function Mb(a,b){a=a|0;b=b|0;wa();return Nb(a,b)|0}function Nb(a,c){a=a|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0;if((c|0)>0){d=0;e=0}else{f=0;return f|0}while(1){g=b[a+(d<<1)>>1]|0;h=g<<16>>16;i=g<<16>>16>-1?h:0-h|0;h=(i|0)>(e|0)?i:e;d=d+1|0;if((d|0)==(c|0)){f=h;break}else e=h}return f|0}function Ob(a,b){a=a|0;b=b|0;var c=0;c=Pb(a,b)|0;fa(ga()|0);return c|0}function Pb(a,c){a=a|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;if((c|0)>0){d=0;e=0;f=0}else{g=0;h=0;fa(g|0);return h|0}while(1){i=b[a+(f<<1)>>1]|0;j=Rb(aa(i,i)|0,0,d|0,e|0)|0;i=ga()|0;f=f+1|0;if((f|0)==(c|0)){g=i;h=j;break}else{d=j;e=i}}fa(g|0);return h|0}function Qb(){c[n+0>>2]=(c[n+0>>2]|0)+(n+1060|0);c[n+4>>2]=(c[n+4>>2]|0)+(n+1068|0);c[n+8>>2]=(c[n+8>>2]|0)+(n+1079|0);c[n+12>>2]=(c[n+12>>2]|0)+(n+1112|0);c[n+16>>2]=(c[n+16>>2]|0)+(n+1148|0);c[n+20>>2]=(c[n+20>>2]|0)+(n+1187|0)}function Rb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=a+c>>>0;return (fa(b+d+(e>>>0>>0|0)>>>0|0),e|0)|0}function Sb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=b-d>>>0;e=b-d-(c>>>0>a>>>0|0)>>>0;return (fa(e|0),a-c>>>0|0)|0}function Tb(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){fa(b<>>32-c|0);return a<>>c|0);return a>>>c|(b&(1<>>c-32|0}function Vb(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){fa(b>>c|0);return a>>>c|(b&(1<>c-32|0}function Wb(b){b=b|0;var c=0;c=a[m+(b&255)>>0]|0;if((c|0)<8)return c|0;c=a[m+(b>>8&255)>>0]|0;if((c|0)<8)return c+8|0;c=a[m+(b>>16&255)>>0]|0;if((c|0)<8)return c+16|0;return (a[m+(b>>>24)>>0]|0)+24|0}function Xb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=a&65535;d=b&65535;e=aa(d,c)|0;f=a>>>16;a=(e>>>16)+(aa(d,f)|0)|0;d=b>>>16;b=aa(d,c)|0;return (fa((a>>>16)+(aa(d,f)|0)+(((a&65535)+b|0)>>>16)|0),a+b<<16|e&65535|0)|0}function Yb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=b>>31|((b|0)<0?-1:0)<<1;f=((b|0)<0?-1:0)>>31|((b|0)<0?-1:0)<<1;g=d>>31|((d|0)<0?-1:0)<<1;h=((d|0)<0?-1:0)>>31|((d|0)<0?-1:0)<<1;i=Sb(e^a|0,f^b|0,e|0,f|0)|0;b=ga()|0;a=g^e;e=h^f;return Sb((bc(i,b,Sb(g^c|0,h^d|0,g|0,h|0)|0,ga()|0,0)|0)^a|0,(ga()|0)^e|0,a|0,e|0)|0}function Zb(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;f=i;i=i+16|0;g=f|0;h=b>>31|((b|0)<0?-1:0)<<1;j=((b|0)<0?-1:0)>>31|((b|0)<0?-1:0)<<1;k=e>>31|((e|0)<0?-1:0)<<1;l=((e|0)<0?-1:0)>>31|((e|0)<0?-1:0)<<1;m=Sb(h^a|0,j^b|0,h|0,j|0)|0;b=ga()|0;bc(m,b,Sb(k^d|0,l^e|0,k|0,l|0)|0,ga()|0,g)|0;l=Sb(c[g>>2]^h|0,c[g+4>>2]^j|0,h|0,j|0)|0;j=ga()|0;i=f;return (fa(j|0),l)|0}function _b(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=a;a=c;c=Xb(e,a)|0;f=ga()|0;return (fa((aa(b,a)|0)+(aa(d,e)|0)+f|f&0|0),c|0|0)|0}function $b(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return bc(a,b,c,d,0)|0}function ac(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=i;i=i+16|0;g=f|0;bc(a,b,d,e,g)|0;i=f;return (fa(c[g+4>>2]|0),c[g>>2]|0)|0}function bc(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;g=a;h=b;i=h;j=d;k=e;l=k;if(!i){m=(f|0)!=0;if(!l){if(m){c[f>>2]=(g>>>0)%(j>>>0);c[f+4>>2]=0}n=0;o=(g>>>0)/(j>>>0)>>>0;return (fa(n|0),o)|0}else{if(!m){n=0;o=0;return (fa(n|0),o)|0}c[f>>2]=a|0;c[f+4>>2]=b&0;n=0;o=0;return (fa(n|0),o)|0}}m=(l|0)==0;do if(j){if(!m){p=(ca(l|0)|0)-(ca(i|0)|0)|0;if(p>>>0<=31){q=p+1|0;r=31-p|0;s=p-31>>31;t=q;u=g>>>(q>>>0)&s|i<>>(q>>>0)&s;w=0;x=g<>2]=a|0;c[f+4>>2]=h|b&0;n=0;o=0;return (fa(n|0),o)|0}r=j-1|0;if(r&j|0){s=(ca(j|0)|0)+33-(ca(i|0)|0)|0;q=64-s|0;p=32-s|0;y=p>>31;z=s-32|0;A=z>>31;t=s;u=p-1>>31&i>>>(z>>>0)|(i<>>(s>>>0))&A;v=A&i>>>(s>>>0);w=g<>>(z>>>0))&y|g<>31;break}if(f|0){c[f>>2]=r&g;c[f+4>>2]=0}if((j|0)==1){n=h|b&0;o=a|0|0;return (fa(n|0),o)|0}else{r=Wb(j|0)|0;n=i>>>(r>>>0)|0;o=i<<32-r|g>>>(r>>>0)|0;return (fa(n|0),o)|0}}else{if(m){if(f|0){c[f>>2]=(i>>>0)%(j>>>0);c[f+4>>2]=0}n=0;o=(i>>>0)/(j>>>0)>>>0;return (fa(n|0),o)|0}if(!g){if(f|0){c[f>>2]=0;c[f+4>>2]=(i>>>0)%(l>>>0)}n=0;o=(i>>>0)/(l>>>0)>>>0;return (fa(n|0),o)|0}r=l-1|0;if(!(r&l)){if(f|0){c[f>>2]=a|0;c[f+4>>2]=r&i|b&0}n=0;o=i>>>((Wb(l|0)|0)>>>0);return (fa(n|0),o)|0}r=(ca(l|0)|0)-(ca(i|0)|0)|0;if(r>>>0<=30){s=r+1|0;p=31-r|0;t=s;u=i<>>(s>>>0);v=i>>>(s>>>0);w=0;x=g<>2]=a|0;c[f+4>>2]=h|b&0;n=0;o=0;return (fa(n|0),o)|0}while(0);if(!t){B=x;C=w;D=v;E=u;F=0;G=0}else{b=d|0|0;d=k|e&0;e=Rb(b|0,d|0,-1,-1)|0;k=ga()|0;h=x;x=w;w=v;v=u;u=t;t=0;do{a=h;h=x>>>31|h<<1;x=t|x<<1;g=v<<1|a>>>31|0;a=v>>>31|w<<1|0;Sb(e|0,k|0,g|0,a|0)|0;i=ga()|0;l=i>>31|((i|0)<0?-1:0)<<1;t=l&1;v=Sb(g|0,a|0,l&b|0,(((i|0)<0?-1:0)>>31|((i|0)<0?-1:0)<<1)&d|0)|0;w=ga()|0;u=u-1|0}while((u|0)!=0);B=h;C=x;D=w;E=v;F=0;G=t}t=C;C=0;if(f|0){c[f>>2]=E;c[f+4>>2]=D}n=(t|0)>>>31|(B|C)<<1|(C<<1|t>>>31)&0|F;o=(t<<1|0>>>31)&-2|G;return (fa(n|0),o)|0} + +// EMSCRIPTEN_END_FUNCS +return{_create_viterbi615:ib,_initdp:Gb,_init_viterbi39:_a,_set_viterbi615_polynomial_port:pb,_delete_viterbi29:Qa,_set_viterbi615_polynomial:jb,_encode_rs_ccsds:Eb,_update_viterbi27_blk_port:La,_delete_viterbi615:mb,_decode_rs_char:xb,_chainback_viterbi39:$a,_init_viterbi29_port:Sa,_peakval:Mb,_create_viterbi27:Aa,_create_viterbi39:Ya,_delete_viterbi29_port:Wa,_peakval_port:Nb,_create_viterbi29:Ma,_decode_rs_ccsds:Fb,_update_viterbi615_blk_port:tb,_encode_rs_8:wb,_init_viterbi27:Ca,_init_viterbi29:Oa,_free_rs_char:Ab,_create_viterbi615_port:ob,_addnoise:za,_init_rs_char:Bb,_partab_init:xa,_chainback_viterbi27_port:Ja,_chainback_viterbi615_port:rb,stackSave:qa,_freedp_port:Kb,_set_viterbi39_polynomial_port:db,_delete_viterbi39_port:gb,runPostSets:Qb,_set_viterbi39_polynomial:Za,_chainback_viterbi39_port:fb,_chainback_viterbi29:Pa,_sumsq:Ob,_chainback_viterbi29_port:Va,_update_viterbi29_blk_port:Xa,_chainback_viterbi27:Da,_create_viterbi29_port:Ua,_find_cpu_mode:wa,_set_viterbi27_polynomial_port:Ha,_chainback_viterbi615:lb,_delete_viterbi27_port:Ka,_decode_rs_int:yb,_init_viterbi27_port:Ga,_delete_viterbi27:Ea,setThrew:ta,_encode_rs_int:vb,_freedp:Hb,_delete_viterbi39:ab,_init_viterbi39_port:cb,_initdp_port:Jb,stackAlloc:pa,_update_viterbi29_blk:Ra,_init_rs_int:Db,_encode_rs_char:ub,_i64Add:Rb,_decode_rs_8:zb,_init_viterbi615_port:qb,_dotprod_port:Lb,_update_viterbi615_blk:nb,_update_viterbi39_blk_port:hb,_update_viterbi27_blk:Fa,_set_viterbi27_polynomial:Ba,_create_viterbi39_port:eb,_update_viterbi39_blk:bb,_create_viterbi27_port:Ia,_set_viterbi29_polynomial_port:Ta,_init_viterbi615:kb,establishStackSpace:sa,_delete_viterbi615_port:sb,stackRestore:ra,_dotprod:Ib,_free_rs_int:Cb,_set_viterbi29_polynomial:Na,_sumsq_port:Pb,_normal_rand:ya}}) + + +// EMSCRIPTEN_END_ASM +(Module.asmGlobalArg,Module.asmLibraryArg,buffer);var _find_cpu_mode=Module["_find_cpu_mode"]=asm["_find_cpu_mode"];var _set_viterbi27_polynomial_port=Module["_set_viterbi27_polynomial_port"]=asm["_set_viterbi27_polynomial_port"];var _chainback_viterbi615=Module["_chainback_viterbi615"]=asm["_chainback_viterbi615"];var _create_viterbi615=Module["_create_viterbi615"]=asm["_create_viterbi615"];var _initdp=Module["_initdp"]=asm["_initdp"];var _delete_viterbi27_port=Module["_delete_viterbi27_port"]=asm["_delete_viterbi27_port"];var _init_viterbi39=Module["_init_viterbi39"]=asm["_init_viterbi39"];var _set_viterbi39_polynomial=Module["_set_viterbi39_polynomial"]=asm["_set_viterbi39_polynomial"];var _init_viterbi27_port=Module["_init_viterbi27_port"]=asm["_init_viterbi27_port"];var _set_viterbi615_polynomial=Module["_set_viterbi615_polynomial"]=asm["_set_viterbi615_polynomial"];var _peakval_port=Module["_peakval_port"]=asm["_peakval_port"];var _set_viterbi615_polynomial_port=Module["_set_viterbi615_polynomial_port"]=asm["_set_viterbi615_polynomial_port"];var _encode_rs_int=Module["_encode_rs_int"]=asm["_encode_rs_int"];var _delete_viterbi29=Module["_delete_viterbi29"]=asm["_delete_viterbi29"];var _chainback_viterbi27_port=Module["_chainback_viterbi27_port"]=asm["_chainback_viterbi27_port"];var _delete_viterbi27=Module["_delete_viterbi27"]=asm["_delete_viterbi27"];var _encode_rs_ccsds=Module["_encode_rs_ccsds"]=asm["_encode_rs_ccsds"];var _update_viterbi27_blk_port=Module["_update_viterbi27_blk_port"]=asm["_update_viterbi27_blk_port"];var _delete_viterbi615=Module["_delete_viterbi615"]=asm["_delete_viterbi615"];var _decode_rs_char=Module["_decode_rs_char"]=asm["_decode_rs_char"];var _create_viterbi27=Module["_create_viterbi27"]=asm["_create_viterbi27"];var _delete_viterbi39=Module["_delete_viterbi39"]=asm["_delete_viterbi39"];var _init_viterbi29_port=Module["_init_viterbi29_port"]=asm["_init_viterbi29_port"];var _init_viterbi39_port=Module["_init_viterbi39_port"]=asm["_init_viterbi39_port"];var _normal_rand=Module["_normal_rand"]=asm["_normal_rand"];var _initdp_port=Module["_initdp_port"]=asm["_initdp_port"];var _chainback_viterbi39=Module["_chainback_viterbi39"]=asm["_chainback_viterbi39"];var _delete_viterbi29_port=Module["_delete_viterbi29_port"]=asm["_delete_viterbi29_port"];var _init_viterbi615=Module["_init_viterbi615"]=asm["_init_viterbi615"];var _set_viterbi29_polynomial=Module["_set_viterbi29_polynomial"]=asm["_set_viterbi29_polynomial"];var _init_rs_int=Module["_init_rs_int"]=asm["_init_rs_int"];var _sumsq=Module["_sumsq"]=asm["_sumsq"];var _create_viterbi29=Module["_create_viterbi29"]=asm["_create_viterbi29"];var _decode_rs_ccsds=Module["_decode_rs_ccsds"]=asm["_decode_rs_ccsds"];var _update_viterbi615_blk_port=Module["_update_viterbi615_blk_port"]=asm["_update_viterbi615_blk_port"];var _encode_rs_8=Module["_encode_rs_8"]=asm["_encode_rs_8"];var _init_viterbi27=Module["_init_viterbi27"]=asm["_init_viterbi27"];var _i64Add=Module["_i64Add"]=asm["_i64Add"];var _init_viterbi615_port=Module["_init_viterbi615_port"]=asm["_init_viterbi615_port"];var _init_viterbi29=Module["_init_viterbi29"]=asm["_init_viterbi29"];var _decode_rs_8=Module["_decode_rs_8"]=asm["_decode_rs_8"];var _free_rs_char=Module["_free_rs_char"]=asm["_free_rs_char"];var _dotprod_port=Module["_dotprod_port"]=asm["_dotprod_port"];var runPostSets=Module["runPostSets"]=asm["runPostSets"];var _update_viterbi615_blk=Module["_update_viterbi615_blk"]=asm["_update_viterbi615_blk"];var _update_viterbi39_blk_port=Module["_update_viterbi39_blk_port"]=asm["_update_viterbi39_blk_port"];var _addnoise=Module["_addnoise"]=asm["_addnoise"];var _chainback_viterbi27=Module["_chainback_viterbi27"]=asm["_chainback_viterbi27"];var _update_viterbi27_blk=Module["_update_viterbi27_blk"]=asm["_update_viterbi27_blk"];var _set_viterbi27_polynomial=Module["_set_viterbi27_polynomial"]=asm["_set_viterbi27_polynomial"];var _create_viterbi39_port=Module["_create_viterbi39_port"]=asm["_create_viterbi39_port"];var _partab_init=Module["_partab_init"]=asm["_partab_init"];var _update_viterbi39_blk=Module["_update_viterbi39_blk"]=asm["_update_viterbi39_blk"];var _create_viterbi27_port=Module["_create_viterbi27_port"]=asm["_create_viterbi27_port"];var _chainback_viterbi615_port=Module["_chainback_viterbi615_port"]=asm["_chainback_viterbi615_port"];var _set_viterbi29_polynomial_port=Module["_set_viterbi29_polynomial_port"]=asm["_set_viterbi29_polynomial_port"];var _set_viterbi39_polynomial_port=Module["_set_viterbi39_polynomial_port"]=asm["_set_viterbi39_polynomial_port"];var _delete_viterbi39_port=Module["_delete_viterbi39_port"]=asm["_delete_viterbi39_port"];var _freedp_port=Module["_freedp_port"]=asm["_freedp_port"];var _encode_rs_char=Module["_encode_rs_char"]=asm["_encode_rs_char"];var _create_viterbi615_port=Module["_create_viterbi615_port"]=asm["_create_viterbi615_port"];var _delete_viterbi615_port=Module["_delete_viterbi615_port"]=asm["_delete_viterbi615_port"];var _peakval=Module["_peakval"]=asm["_peakval"];var _decode_rs_int=Module["_decode_rs_int"]=asm["_decode_rs_int"];var _dotprod=Module["_dotprod"]=asm["_dotprod"];var _chainback_viterbi39_port=Module["_chainback_viterbi39_port"]=asm["_chainback_viterbi39_port"];var _chainback_viterbi29=Module["_chainback_viterbi29"]=asm["_chainback_viterbi29"];var _free_rs_int=Module["_free_rs_int"]=asm["_free_rs_int"];var _update_viterbi29_blk=Module["_update_viterbi29_blk"]=asm["_update_viterbi29_blk"];var _create_viterbi29_port=Module["_create_viterbi29_port"]=asm["_create_viterbi29_port"];var _chainback_viterbi29_port=Module["_chainback_viterbi29_port"]=asm["_chainback_viterbi29_port"];var _sumsq_port=Module["_sumsq_port"]=asm["_sumsq_port"];var _update_viterbi29_blk_port=Module["_update_viterbi29_blk_port"]=asm["_update_viterbi29_blk_port"];var _create_viterbi39=Module["_create_viterbi39"]=asm["_create_viterbi39"];var _freedp=Module["_freedp"]=asm["_freedp"];var _init_rs_char=Module["_init_rs_char"]=asm["_init_rs_char"];var NAMED_GLOBALS={"Cpu_mode":198968,"Partab":199640,"CCSDS_poly":1737,"Tal1tab":2026,"Taltab":1770,"CCSDS_index_of":1481,"Bitcnt":24,"Cpu_modes":0,"CCSDS_alpha_to":1225,"P_init":198972};for(var named in NAMED_GLOBALS){Module["_"+named]=gb+NAMED_GLOBALS[named]}Module["NAMED_GLOBALS"]=NAMED_GLOBALS;Runtime.registerFunctions([],Module);__ATPRERUN__.push(runPostSets);if(runtimeInitialized){callRuntimeCallbacks(__ATPRERUN__);callRuntimeCallbacks(__ATINIT__)}return Module}) + + + + diff --git a/web/js/quiet/quiet-emscripten.js b/web/js/quiet/quiet-emscripten.js new file mode 100755 index 00000000..4d4b330c --- /dev/null +++ b/web/js/quiet/quiet-emscripten.js @@ -0,0 +1,20 @@ +var Module;if(!Module)Module=(typeof Module!=="undefined"?Module:null)||{};var moduleOverrides={};for(var key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;if(Module["ENVIRONMENT"]){if(Module["ENVIRONMENT"]==="WEB"){ENVIRONMENT_IS_WEB=true}else if(Module["ENVIRONMENT"]==="WORKER"){ENVIRONMENT_IS_WORKER=true}else if(Module["ENVIRONMENT"]==="NODE"){ENVIRONMENT_IS_NODE=true}else if(Module["ENVIRONMENT"]==="SHELL"){ENVIRONMENT_IS_SHELL=true}else{throw new Error("The provided Module['ENVIRONMENT'] value is not valid. It must be one of: WEB|WORKER|NODE|SHELL.")}}else{ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER}if(ENVIRONMENT_IS_NODE){if(!Module["print"])Module["print"]=console.log;if(!Module["printErr"])Module["printErr"]=console.warn;var nodeFS;var nodePath;Module["read"]=function read(filename,binary){if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);var ret=nodeFS["readFileSync"](filename);if(!ret&&filename!=nodePath["resolve"](filename)){filename=path.join(__dirname,"..","src",filename);ret=nodeFS["readFileSync"](filename)}if(ret&&!binary)ret=ret.toString();return ret};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};Module["load"]=function load(f){globalEval(read(f))};if(!Module["thisProgram"]){if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}else{Module["thisProgram"]="unknown-program"}}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",(function(ex){if(!(ex instanceof ExitStatus)){throw ex}}));Module["inspect"]=(function(){return"[Emscripten Module object]"})}else if(ENVIRONMENT_IS_SHELL){if(!Module["print"])Module["print"]=print;if(typeof printErr!="undefined")Module["printErr"]=printErr;if(typeof read!="undefined"){Module["read"]=read}else{Module["read"]=function read(){throw"no read() available (jsc?)"}}Module["readBinary"]=function readBinary(f){if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}var data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){Module["read"]=function read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response)}else{onerror()}};xhr.onerror=onerror;xhr.send(null)};if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof console!=="undefined"){if(!Module["print"])Module["print"]=function print(x){console.log(x)};if(!Module["printErr"])Module["printErr"]=function printErr(x){console.warn(x)}}else{var TRY_USE_DUMP=false;if(!Module["print"])Module["print"]=TRY_USE_DUMP&&typeof dump!=="undefined"?(function(x){dump(x)}):(function(x){})}if(ENVIRONMENT_IS_WORKER){Module["load"]=importScripts}if(typeof Module["setWindowTitle"]==="undefined"){Module["setWindowTitle"]=(function(title){document.title=title})}}else{throw"Unknown runtime environment. Where are we?"}function globalEval(x){eval.call(null,x)}if(!Module["load"]&&Module["read"]){Module["load"]=function load(f){globalEval(Module["read"](f))}}if(!Module["print"]){Module["print"]=(function(){})}if(!Module["printErr"]){Module["printErr"]=Module["print"]}if(!Module["arguments"]){Module["arguments"]=[]}if(!Module["thisProgram"]){Module["thisProgram"]="./this.program"}Module.print=Module["print"];Module.printErr=Module["printErr"];Module["preRun"]=[];Module["postRun"]=[];for(var key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;var Runtime={setTempRet0:(function(value){tempRet0=value}),getTempRet0:(function(){return tempRet0}),stackSave:(function(){return STACKTOP}),stackRestore:(function(stackTop){STACKTOP=stackTop}),getNativeTypeSize:(function(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return Runtime.QUANTUM_SIZE}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0);return bits/8}else{return 0}}}}),getNativeFieldSize:(function(type){return Math.max(Runtime.getNativeTypeSize(type),Runtime.QUANTUM_SIZE)}),STACK_ALIGN:16,prepVararg:(function(ptr,type){if(type==="double"||type==="i64"){if(ptr&7){assert((ptr&7)===4);ptr+=4}}else{assert((ptr&3)===0)}return ptr}),getAlignSize:(function(type,size,vararg){if(!vararg&&(type=="i64"||type=="double"))return 8;if(!type)return Math.min(size,8);return Math.min(size||(type?Runtime.getNativeFieldSize(type):0),Runtime.QUANTUM_SIZE)}),dynCall:(function(sig,ptr,args){if(args&&args.length){assert(args.length==sig.length-1);if(!args.splice)args=Array.prototype.slice.call(args);args.splice(0,0,ptr);assert("dynCall_"+sig in Module,"bad function pointer type - no table for sig '"+sig+"'");return Module["dynCall_"+sig].apply(null,args)}else{assert(sig.length==1);assert("dynCall_"+sig in Module,"bad function pointer type - no table for sig '"+sig+"'");return Module["dynCall_"+sig].call(null,ptr)}}),functionPointers:[],addFunction:(function(func){for(var i=0;i0),size)|0;DYNAMICTOP=DYNAMICTOP+15&-16;if(DYNAMICTOP>=TOTAL_MEMORY){var success=enlargeMemory();if(!success){DYNAMICTOP=ret;return 0}}return ret}),alignMemory:(function(size,quantum){var ret=size=Math.ceil(size/(quantum?quantum:16))*(quantum?quantum:16);return ret}),makeBigInt:(function(low,high,unsigned){var ret=unsigned?+(low>>>0)+ +(high>>>0)*+4294967296:+(low>>>0)+ +(high|0)*+4294967296;return ret}),GLOBAL_BASE:8,QUANTUM_SIZE:4,__dummy__:0};Module["Runtime"]=Runtime;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function getCFunc(ident){var func=Module["_"+ident];if(!func){try{func=eval("_"+ident)}catch(e){}}assert(func,"Cannot call unknown function "+ident+" (perhaps LLVM optimizations or closure removed it?)");return func}var cwrap,ccall;((function(){var JSfuncs={"stackSave":(function(){Runtime.stackSave()}),"stackRestore":(function(){Runtime.stackRestore()}),"arrayToC":(function(arr){var ret=Runtime.stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}),"stringToC":(function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){ret=Runtime.stackAlloc((str.length<<2)+1);writeStringToMemory(str,ret)}return ret})};var toC={"string":JSfuncs["stringToC"],"array":JSfuncs["arrayToC"]};ccall=function ccallFunc(ident,returnType,argTypes,args,opts){var func=getCFunc(ident);var cArgs=[];var stack=0;assert(returnType!=="array",'Return type should not be "array".');if(args){for(var i=0;i>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=+1?tempDouble>+0?(Math_min(+Math_floor(tempDouble/+4294967296),+4294967295)|0)>>>0:~~+Math_ceil((tempDouble- +(~~tempDouble>>>0))/+4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}Module["setValue"]=setValue;function getValue(ptr,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":return HEAP8[ptr>>0];case"i8":return HEAP8[ptr>>0];case"i16":return HEAP16[ptr>>1];case"i32":return HEAP32[ptr>>2];case"i64":return HEAP32[ptr>>2];case"float":return HEAPF32[ptr>>2];case"double":return HEAPF64[ptr>>3];default:abort("invalid type for setValue: "+type)}return null}Module["getValue"]=getValue;var ALLOC_NORMAL=0;var ALLOC_STACK=1;var ALLOC_STATIC=2;var ALLOC_DYNAMIC=3;var ALLOC_NONE=4;Module["ALLOC_NORMAL"]=ALLOC_NORMAL;Module["ALLOC_STACK"]=ALLOC_STACK;Module["ALLOC_STATIC"]=ALLOC_STATIC;Module["ALLOC_DYNAMIC"]=ALLOC_DYNAMIC;Module["ALLOC_NONE"]=ALLOC_NONE;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[typeof _malloc==="function"?_malloc:Runtime.staticAlloc,Runtime.stackAlloc,Runtime.staticAlloc,Runtime.dynamicAlloc][allocator===undefined?ALLOC_STATIC:allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var ptr=ret,stop;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i>0];hasUtf|=t;if(t==0&&!length)break;i++;if(length&&i==length)break}if(!length)length=i;var ret="";if(hasUtf<128){var MAX_CHUNK=1024;var curr;while(length>0){curr=String.fromCharCode.apply(String,HEAPU8.subarray(ptr,ptr+Math.min(length,MAX_CHUNK)));ret=ret?ret+curr:curr;ptr+=MAX_CHUNK;length-=MAX_CHUNK}return ret}return Module["UTF8ToString"](ptr)}Module["Pointer_stringify"]=Pointer_stringify;function AsciiToString(ptr){var str="";while(1){var ch=HEAP8[ptr++>>0];if(!ch)return str;str+=String.fromCharCode(ch)}}Module["AsciiToString"]=AsciiToString;function stringToAscii(str,outPtr){return writeAsciiToMemory(str,outPtr,false)}Module["stringToAscii"]=stringToAscii;function UTF8ArrayToString(u8Array,idx){var u0,u1,u2,u3,u4,u5;var str="";while(1){u0=u8Array[idx++];if(!u0)return str;if(!(u0&128)){str+=String.fromCharCode(u0);continue}u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u3=u8Array[idx++]&63;if((u0&248)==240){u0=(u0&7)<<18|u1<<12|u2<<6|u3}else{u4=u8Array[idx++]&63;if((u0&252)==248){u0=(u0&3)<<24|u1<<18|u2<<12|u3<<6|u4}else{u5=u8Array[idx++]&63;u0=(u0&1)<<30|u1<<24|u2<<18|u3<<12|u4<<6|u5}}}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}Module["UTF8ArrayToString"]=UTF8ArrayToString;function UTF8ToString(ptr){return UTF8ArrayToString(HEAPU8,ptr)}Module["UTF8ToString"]=UTF8ToString;function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=2097151){if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=67108863){if(outIdx+4>=endIdx)break;outU8Array[outIdx++]=248|u>>24;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+5>=endIdx)break;outU8Array[outIdx++]=252|u>>30;outU8Array[outIdx++]=128|u>>24&63;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}Module["stringToUTF8Array"]=stringToUTF8Array;function stringToUTF8(str,outPtr,maxBytesToWrite){assert(typeof maxBytesToWrite=="number","stringToUTF8(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!");return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}Module["stringToUTF8"]=stringToUTF8;function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){++len}else if(u<=2047){len+=2}else if(u<=65535){len+=3}else if(u<=2097151){len+=4}else if(u<=67108863){len+=5}else{len+=6}}return len}Module["lengthBytesUTF8"]=lengthBytesUTF8;function demangle(func){var hasLibcxxabi=!!Module["___cxa_demangle"];if(hasLibcxxabi){try{var buf=_malloc(func.length);writeStringToMemory(func.substr(1),buf);var status=_malloc(4);var ret=Module["___cxa_demangle"](buf,0,0,status);if(getValue(status,"i32")===0&&ret){return Pointer_stringify(ret)}}catch(e){return func}finally{if(buf)_free(buf);if(status)_free(status);if(ret)_free(ret)}}Runtime.warnOnce("warning: build with -s DEMANGLE_SUPPORT=1 to link in libcxxabi demangling");return func}function demangleAll(text){return text.replace(/__Z[\w\d_]+/g,(function(x){var y=demangle(x);return x===y?x:x+" ["+y+"]"}))}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){return demangleAll(jsStackTrace())}Module["stackTrace"]=stackTrace;var PAGE_SIZE=4096;function alignMemoryPage(x){if(x%4096>0){x+=4096-x%4096}return x}var HEAP;var buffer;var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var STATIC_BASE=0,STATICTOP=0,staticSealed=false;var STACK_BASE=0,STACKTOP=0,STACK_MAX=0;var DYNAMIC_BASE=0,DYNAMICTOP=0;function abortOnCannotGrowMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+TOTAL_MEMORY+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which adjusts the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}function enlargeMemory(){abortOnCannotGrowMemory()}var TOTAL_STACK=Module["TOTAL_STACK"]||5242880;var TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;var totalMemory=64*1024;while(totalMemory0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Runtime.dynCall("v",func)}else{Runtime.dynCall("vi",func,[callback.arg])}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__);runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}Module["addOnPreRun"]=addOnPreRun;function addOnInit(cb){__ATINIT__.unshift(cb)}Module["addOnInit"]=addOnInit;function addOnPreMain(cb){__ATMAIN__.unshift(cb)}Module["addOnPreMain"]=addOnPreMain;function addOnExit(cb){__ATEXIT__.unshift(cb)}Module["addOnExit"]=addOnExit;function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}Module["addOnPostRun"]=addOnPostRun;function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}Module["intArrayFromString"]=intArrayFromString;function intArrayToString(array){var ret=[];for(var i=0;i255){assert(false,"Character code "+chr+" ("+String.fromCharCode(chr)+") at offset "+i+" not in 0x00-0xFF.");chr&=255}ret.push(String.fromCharCode(chr))}return ret.join("")}Module["intArrayToString"]=intArrayToString;function writeStringToMemory(string,buffer,dontAddNull){var array=intArrayFromString(string,dontAddNull);var i=0;while(i>0]=chr;i=i+1}}Module["writeStringToMemory"]=writeStringToMemory;function writeArrayToMemory(array,buffer){for(var i=0;i>0]=array[i]}}Module["writeArrayToMemory"]=writeArrayToMemory;function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}Module["writeAsciiToMemory"]=writeAsciiToMemory;if(!Math["imul"]||Math["imul"](4294967295,5)!==-5)Math["imul"]=function imul(a,b){var ah=a>>>16;var al=a&65535;var bh=b>>>16;var bl=b&65535;return al*bl+(ah*bl+al*bh<<16)|0};Math.imul=Math["imul"];if(!Math["clz32"])Math["clz32"]=(function(x){x=x>>>0;for(var i=0;i<32;i++){if(x&1<<31-i)return i}return 32});Math.clz32=Math["clz32"];var Math_abs=Math.abs;var Math_cos=Math.cos;var Math_sin=Math.sin;var Math_tan=Math.tan;var Math_acos=Math.acos;var Math_asin=Math.asin;var Math_atan=Math.atan;var Math_atan2=Math.atan2;var Math_exp=Math.exp;var Math_log=Math.log;var Math_sqrt=Math.sqrt;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_pow=Math.pow;var Math_imul=Math.imul;var Math_fround=Math.fround;var Math_min=Math.min;var Math_clz32=Math.clz32;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;var runDependencyTracking={};function getUniqueRunDependency(id){var orig=id;while(1){if(!runDependencyTracking[id])return id;id=orig+Math.random()}return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(id){assert(!runDependencyTracking[id]);runDependencyTracking[id]=1;if(runDependencyWatcher===null&&typeof setInterval!=="undefined"){runDependencyWatcher=setInterval((function(){if(ABORT){clearInterval(runDependencyWatcher);runDependencyWatcher=null;return}var shown=false;for(var dep in runDependencyTracking){if(!shown){shown=true;Module.printErr("still waiting on run dependencies:")}Module.printErr("dependency: "+dep)}if(shown){Module.printErr("(end of list)")}}),1e4)}}else{Module.printErr("warning: run dependency added without ID")}}Module["addRunDependency"]=addRunDependency;function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(id){assert(runDependencyTracking[id]);delete runDependencyTracking[id]}else{Module.printErr("warning: run dependency removed without ID")}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["removeRunDependency"]=removeRunDependency;Module["preloadedImages"]={};Module["preloadedAudios"]={};var memoryInitializer=null;var ASM_CONSTS=[];STATIC_BASE=8;STATICTOP=STATIC_BASE+47072;__ATINIT__.push();memoryInitializer="quiet-emscripten.js.mem";var tempDoublePtr=STATICTOP;STATICTOP+=16;assert(tempDoublePtr%8==0);Module["_i64Subtract"]=_i64Subtract;function ___assert_fail(condition,filename,line,func){ABORT=true;throw"Assertion failed: "+Pointer_stringify(condition)+", at: "+[filename?Pointer_stringify(filename):"unknown filename",line,func?Pointer_stringify(func):"unknown function"]+" at "+stackTrace()}Module["_roundf"]=_roundf;Module["_memset"]=_memset;function _pthread_mutex_lock(){}function _pthread_cond_signal(){}function _abort(){Module["abort"]()}function _pthread_cond_destroy(){}function _pthread_once(ptr,func){if(!_pthread_once.seen)_pthread_once.seen={};if(ptr in _pthread_once.seen)return;Runtime.dynCall("v",func);_pthread_once.seen[ptr]=1}function _pthread_mutex_init(){}function ___lock(){}function ___unlock(){}var PTHREAD_SPECIFIC={};function _pthread_getspecific(key){return PTHREAD_SPECIFIC[key]||0}var _llvm_fabs_f64=Math_abs;function _llvm_stackrestore(p){var self=_llvm_stacksave;var ret=self.LLVM_SAVEDSTACKS[p];self.LLVM_SAVEDSTACKS.splice(p,1);Runtime.stackRestore(ret)}var PTHREAD_SPECIFIC_NEXT_KEY=1;var ERRNO_CODES={EPERM:1,ENOENT:2,ESRCH:3,EINTR:4,EIO:5,ENXIO:6,E2BIG:7,ENOEXEC:8,EBADF:9,ECHILD:10,EAGAIN:11,EWOULDBLOCK:11,ENOMEM:12,EACCES:13,EFAULT:14,ENOTBLK:15,EBUSY:16,EEXIST:17,EXDEV:18,ENODEV:19,ENOTDIR:20,EISDIR:21,EINVAL:22,ENFILE:23,EMFILE:24,ENOTTY:25,ETXTBSY:26,EFBIG:27,ENOSPC:28,ESPIPE:29,EROFS:30,EMLINK:31,EPIPE:32,EDOM:33,ERANGE:34,ENOMSG:42,EIDRM:43,ECHRNG:44,EL2NSYNC:45,EL3HLT:46,EL3RST:47,ELNRNG:48,EUNATCH:49,ENOCSI:50,EL2HLT:51,EDEADLK:35,ENOLCK:37,EBADE:52,EBADR:53,EXFULL:54,ENOANO:55,EBADRQC:56,EBADSLT:57,EDEADLOCK:35,EBFONT:59,ENOSTR:60,ENODATA:61,ETIME:62,ENOSR:63,ENONET:64,ENOPKG:65,EREMOTE:66,ENOLINK:67,EADV:68,ESRMNT:69,ECOMM:70,EPROTO:71,EMULTIHOP:72,EDOTDOT:73,EBADMSG:74,ENOTUNIQ:76,EBADFD:77,EREMCHG:78,ELIBACC:79,ELIBBAD:80,ELIBSCN:81,ELIBMAX:82,ELIBEXEC:83,ENOSYS:38,ENOTEMPTY:39,ENAMETOOLONG:36,ELOOP:40,EOPNOTSUPP:95,EPFNOSUPPORT:96,ECONNRESET:104,ENOBUFS:105,EAFNOSUPPORT:97,EPROTOTYPE:91,ENOTSOCK:88,ENOPROTOOPT:92,ESHUTDOWN:108,ECONNREFUSED:111,EADDRINUSE:98,ECONNABORTED:103,ENETUNREACH:101,ENETDOWN:100,ETIMEDOUT:110,EHOSTDOWN:112,EHOSTUNREACH:113,EINPROGRESS:115,EALREADY:114,EDESTADDRREQ:89,EMSGSIZE:90,EPROTONOSUPPORT:93,ESOCKTNOSUPPORT:94,EADDRNOTAVAIL:99,ENETRESET:102,EISCONN:106,ENOTCONN:107,ETOOMANYREFS:109,EUSERS:87,EDQUOT:122,ESTALE:116,ENOTSUP:95,ENOMEDIUM:123,EILSEQ:84,EOVERFLOW:75,ECANCELED:125,ENOTRECOVERABLE:131,EOWNERDEAD:130,ESTRPIPE:86};function _pthread_key_create(key,destructor){if(key==0){return ERRNO_CODES.EINVAL}HEAP32[key>>2]=PTHREAD_SPECIFIC_NEXT_KEY;PTHREAD_SPECIFIC[PTHREAD_SPECIFIC_NEXT_KEY]=0;PTHREAD_SPECIFIC_NEXT_KEY++;return 0}function _llvm_ctpop_i32(x){var ret=0;while(x){if(x&1)ret++;x>>>=1}return ret}var _llvm_pow_f32=Math_pow;var PROCINFO={ppid:1,pid:42,sid:42,pgid:42};var ERRNO_MESSAGES={0:"Success",1:"Not super-user",2:"No such file or directory",3:"No such process",4:"Interrupted system call",5:"I/O error",6:"No such device or address",7:"Arg list too long",8:"Exec format error",9:"Bad file number",10:"No children",11:"No more processes",12:"Not enough core",13:"Permission denied",14:"Bad address",15:"Block device required",16:"Mount device busy",17:"File exists",18:"Cross-device link",19:"No such device",20:"Not a directory",21:"Is a directory",22:"Invalid argument",23:"Too many open files in system",24:"Too many open files",25:"Not a typewriter",26:"Text file busy",27:"File too large",28:"No space left on device",29:"Illegal seek",30:"Read only file system",31:"Too many links",32:"Broken pipe",33:"Math arg out of domain of func",34:"Math result not representable",35:"File locking deadlock error",36:"File or path name too long",37:"No record locks available",38:"Function not implemented",39:"Directory not empty",40:"Too many symbolic links",42:"No message of desired type",43:"Identifier removed",44:"Channel number out of range",45:"Level 2 not synchronized",46:"Level 3 halted",47:"Level 3 reset",48:"Link number out of range",49:"Protocol driver not attached",50:"No CSI structure available",51:"Level 2 halted",52:"Invalid exchange",53:"Invalid request descriptor",54:"Exchange full",55:"No anode",56:"Invalid request code",57:"Invalid slot",59:"Bad font file fmt",60:"Device not a stream",61:"No data (for no delay io)",62:"Timer expired",63:"Out of streams resources",64:"Machine is not on the network",65:"Package not installed",66:"The object is remote",67:"The link has been severed",68:"Advertise error",69:"Srmount error",70:"Communication error on send",71:"Protocol error",72:"Multihop attempted",73:"Cross mount point (not really error)",74:"Trying to read unreadable message",75:"Value too large for defined data type",76:"Given log. name not unique",77:"f.d. invalid for this operation",78:"Remote address changed",79:"Can access a needed shared lib",80:"Accessing a corrupted shared lib",81:".lib section in a.out corrupted",82:"Attempting to link in too many libs",83:"Attempting to exec a shared library",84:"Illegal byte sequence",86:"Streams pipe error",87:"Too many users",88:"Socket operation on non-socket",89:"Destination address required",90:"Message too long",91:"Protocol wrong type for socket",92:"Protocol not available",93:"Unknown protocol",94:"Socket type not supported",95:"Not supported",96:"Protocol family not supported",97:"Address family not supported by protocol family",98:"Address already in use",99:"Address not available",100:"Network interface is not configured",101:"Network is unreachable",102:"Connection reset by network",103:"Connection aborted",104:"Connection reset by peer",105:"No buffer space available",106:"Socket is already connected",107:"Socket is not connected",108:"Can't send after socket shutdown",109:"Too many references",110:"Connection timed out",111:"Connection refused",112:"Host is down",113:"Host is unreachable",114:"Socket already connected",115:"Connection already in progress",116:"Stale file handle",122:"Quota exceeded",123:"No medium (in tape drive)",125:"Operation canceled",130:"Previous owner died",131:"State not recoverable"};function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;else Module.printErr("failed to set errno from JS");return value}var PATH={splitPath:(function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)}),normalizeArray:(function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up--;up){parts.unshift("..")}}return parts}),normalize:(function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter((function(p){return!!p})),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path}),dirname:(function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir}),basename:(function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)}),extname:(function(path){return PATH.splitPath(path)[3]}),join:(function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))}),join2:(function(l,r){return PATH.normalize(l+"/"+r)}),resolve:(function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter((function(p){return!!p})),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."}),relative:(function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()}),put_char:(function(tty,val){if(val===null||val===10){Module["print"](UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}}),flush:(function(tty){if(tty.output&&tty.output.length>0){Module["print"](UTF8ArrayToString(tty.output,0));tty.output=[]}})},default_tty1_ops:{put_char:(function(tty,val){if(val===null||val===10){Module["printErr"](UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}}),flush:(function(tty){if(tty.output&&tty.output.length>0){Module["printErr"](UTF8ArrayToString(tty.output,0));tty.output=[]}})}};var MEMFS={ops_table:null,mount:(function(mount){return MEMFS.createNode(null,"/",16384|511,0)}),createNode:(function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node}),getFileDataAsRegularArray:(function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;inode.contents.length){node.contents=MEMFS.getFileDataAsRegularArray(node);node.usedBytes=node.contents.length}if(!node.contents||node.contents.subarray){var prevCapacity=node.contents?node.contents.buffer.byteLength:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return}if(!node.contents&&newCapacity>0)node.contents=[];while(node.contents.lengthnewSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);assert(size>=0);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}}));var remove=[];Object.keys(dst.entries).forEach((function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}}));if(!total){return callback(null)}var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=(function(e){done(this.error);e.preventDefault()});create.sort().forEach((function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,(function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)}))}else{IDBFS.loadLocalEntry(path,(function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)}))}}));remove.sort().reverse().forEach((function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}}))})};var NODEFS={isWindows:false,staticInit:(function(){NODEFS.isWindows=!!process.platform.match(/^win/)}),mount:(function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)}),createNode:(function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node}),getMode:(function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&146)>>1}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}return stat.mode}),realPath:(function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)}),flagsToPermissionStringMap:{0:"r",1:"r+",2:"r+",64:"r",65:"r+",66:"r+",129:"rx+",193:"rx+",514:"w+",577:"w",578:"w+",705:"wx",706:"wx+",1024:"a",1025:"a",1026:"a+",1089:"a",1090:"a+",1153:"ax",1154:"ax+",1217:"ax",1218:"ax+",4096:"rs",4098:"rs+"},flagsToPermissionString:(function(flags){flags&=~32768;flags&=~524288;if(flags in NODEFS.flagsToPermissionStringMap){return NODEFS.flagsToPermissionStringMap[flags]}else{throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}}),node_ops:{getattr:(function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}}),setattr:(function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),lookup:(function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)}),mknod:(function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}return node}),rename:(function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),unlink:(function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),rmdir:(function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),readdir:(function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),symlink:(function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),readlink:(function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}})},stream_ops:{open:(function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsToPermissionString(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),close:(function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),read:(function(stream,buffer,offset,length,position){if(length===0)return 0;var nbuffer=new Buffer(length);var res;try{res=fs.readSync(stream.nfd,nbuffer,0,length,position)}catch(e){throw new FS.ErrnoError(ERRNO_CODES[e.code])}if(res>0){for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size}),write:(function(stream,buffer,offset,length,position){throw new FS.ErrnoError(ERRNO_CODES.EIO)}),llseek:(function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}return position})}};STATICTOP+=16;STATICTOP+=16;STATICTOP+=16;var FS={root:null,mounts:[],devices:[null],streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:(function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)}),lookupPath:(function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(ERRNO_CODES.ELOOP)}var parts=PATH.normalizeArray(path.split("/").filter((function(p){return!!p})),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(ERRNO_CODES.ELOOP)}}}}return{path:current_path,node:current}}),getPath:(function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}}),hashName:(function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length}),hashAddNode:(function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node}),hashRemoveNode:(function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}}),lookupNode:(function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)}),createNode:(function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=(function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev});FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:(function(){return(this.mode&readMode)===readMode}),set:(function(val){val?this.mode|=readMode:this.mode&=~readMode})},write:{get:(function(){return(this.mode&writeMode)===writeMode}),set:(function(val){val?this.mode|=writeMode:this.mode&=~writeMode})},isFolder:{get:(function(){return FS.isDir(this.mode)})},isDevice:{get:(function(){return FS.isChrdev(this.mode)})}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node}),destroyNode:(function(node){FS.hashRemoveNode(node)}),isRoot:(function(node){return node===node.parent}),isMountpoint:(function(node){return!!node.mounted}),isFile:(function(mode){return(mode&61440)===32768}),isDir:(function(mode){return(mode&61440)===16384}),isLink:(function(mode){return(mode&61440)===40960}),isChrdev:(function(mode){return(mode&61440)===8192}),isBlkdev:(function(mode){return(mode&61440)===24576}),isFIFO:(function(mode){return(mode&61440)===4096}),isSocket:(function(mode){return(mode&49152)===49152}),flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:(function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags}),flagsToPermissionString:(function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms}),nodePermissions:(function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return ERRNO_CODES.EACCES}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return ERRNO_CODES.EACCES}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return ERRNO_CODES.EACCES}return 0}),mayLookup:(function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return ERRNO_CODES.EACCES;return 0}),mayCreate:(function(dir,name){try{var node=FS.lookupNode(dir,name);return ERRNO_CODES.EEXIST}catch(e){}return FS.nodePermissions(dir,"wx")}),mayDelete:(function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return ERRNO_CODES.ENOTDIR}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return ERRNO_CODES.EBUSY}}else{if(FS.isDir(node.mode)){return ERRNO_CODES.EISDIR}}return 0}),mayOpen:(function(node,flags){if(!node){return ERRNO_CODES.ENOENT}if(FS.isLink(node.mode)){return ERRNO_CODES.ELOOP}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return ERRNO_CODES.EISDIR}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))}),MAX_OPEN_FDS:4096,nextfd:(function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(ERRNO_CODES.EMFILE)}),getStream:(function(fd){return FS.streams[fd]}),createStream:(function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=(function(){});FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:(function(){return this.node}),set:(function(val){this.node=val})},isRead:{get:(function(){return(this.flags&2097155)!==1})},isWrite:{get:(function(){return(this.flags&2097155)!==0})},isAppend:{get:(function(){return this.flags&1024})}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream}),closeStream:(function(fd){FS.streams[fd]=null}),chrdev_stream_ops:{open:(function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}}),llseek:(function(){throw new FS.ErrnoError(ERRNO_CODES.ESPIPE)})},major:(function(dev){return dev>>8}),minor:(function(dev){return dev&255}),makedev:(function(ma,mi){return ma<<8|mi}),registerDevice:(function(dev,ops){FS.devices[dev]={stream_ops:ops}}),getDevice:(function(dev){return FS.devices[dev]}),getMounts:(function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts}),syncfs:(function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){assert(FS.syncFSRequests>0);FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach((function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)}))}),mount:(function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(ERRNO_CODES.EBUSY)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(ERRNO_CODES.EBUSY)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot}),unmount:(function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach((function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}}));node.mounted=null;var idx=node.mount.mounts.indexOf(mount);assert(idx!==-1);node.mount.mounts.splice(idx,1)}),lookup:(function(parent,name){return parent.node_ops.lookup(parent,name)}),mknod:(function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}return parent.node_ops.mknod(parent,name,mode,dev)}),create:(function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)}),mkdir:(function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)}),mkdev:(function(path,mode,dev){if(typeof dev==="undefined"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)}),symlink:(function(oldpath,newpath){if(!PATH.resolve(oldpath)){throw new FS.ErrnoError(ERRNO_CODES.ENOENT)}var lookup=FS.lookupPath(newpath,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(ERRNO_CODES.ENOENT)}var newname=PATH.basename(newpath);var err=FS.mayCreate(parent,newname);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.symlink){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}return parent.node_ops.symlink(parent,newname,oldpath)}),rename:(function(old_path,new_path){var old_dirname=PATH.dirname(old_path);var new_dirname=PATH.dirname(new_path);var old_name=PATH.basename(old_path);var new_name=PATH.basename(new_path);var lookup,old_dir,new_dir;try{lookup=FS.lookupPath(old_path,{parent:true});old_dir=lookup.node;lookup=FS.lookupPath(new_path,{parent:true});new_dir=lookup.node}catch(e){throw new FS.ErrnoError(ERRNO_CODES.EBUSY)}if(!old_dir||!new_dir)throw new FS.ErrnoError(ERRNO_CODES.ENOENT);if(old_dir.mount!==new_dir.mount){throw new FS.ErrnoError(ERRNO_CODES.EXDEV)}var old_node=FS.lookupNode(old_dir,old_name);var relative=PATH.relative(old_path,new_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}relative=PATH.relative(new_path,old_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY)}var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(old_node===new_node){return}var isdir=FS.isDir(old_node.mode);var err=FS.mayDelete(old_dir,old_name,isdir);if(err){throw new FS.ErrnoError(err)}err=new_node?FS.mayDelete(new_dir,new_name,isdir):FS.mayCreate(new_dir,new_name);if(err){throw new FS.ErrnoError(err)}if(!old_dir.node_ops.rename){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}if(FS.isMountpoint(old_node)||new_node&&FS.isMountpoint(new_node)){throw new FS.ErrnoError(ERRNO_CODES.EBUSY)}if(new_dir!==old_dir){err=FS.nodePermissions(old_dir,"w");if(err){throw new FS.ErrnoError(err)}}try{if(FS.trackingDelegate["willMovePath"]){FS.trackingDelegate["willMovePath"](old_path,new_path)}}catch(e){console.log("FS.trackingDelegate['willMovePath']('"+old_path+"', '"+new_path+"') threw an exception: "+e.message)}FS.hashRemoveNode(old_node);try{old_dir.node_ops.rename(old_node,new_dir,new_name)}catch(e){throw e}finally{FS.hashAddNode(old_node)}try{if(FS.trackingDelegate["onMovePath"])FS.trackingDelegate["onMovePath"](old_path,new_path)}catch(e){console.log("FS.trackingDelegate['onMovePath']('"+old_path+"', '"+new_path+"') threw an exception: "+e.message)}}),rmdir:(function(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var err=FS.mayDelete(parent,name,true);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.rmdir){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(ERRNO_CODES.EBUSY)}try{if(FS.trackingDelegate["willDeletePath"]){FS.trackingDelegate["willDeletePath"](path)}}catch(e){console.log("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: "+e.message)}parent.node_ops.rmdir(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate["onDeletePath"])FS.trackingDelegate["onDeletePath"](path)}catch(e){console.log("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: "+e.message)}}),readdir:(function(path){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;if(!node.node_ops.readdir){throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR)}return node.node_ops.readdir(node)}),unlink:(function(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var err=FS.mayDelete(parent,name,false);if(err){if(err===ERRNO_CODES.EISDIR)err=ERRNO_CODES.EPERM;throw new FS.ErrnoError(err)}if(!parent.node_ops.unlink){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(ERRNO_CODES.EBUSY)}try{if(FS.trackingDelegate["willDeletePath"]){FS.trackingDelegate["willDeletePath"](path)}}catch(e){console.log("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: "+e.message)}parent.node_ops.unlink(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate["onDeletePath"])FS.trackingDelegate["onDeletePath"](path)}catch(e){console.log("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: "+e.message)}}),readlink:(function(path){var lookup=FS.lookupPath(path);var link=lookup.node;if(!link){throw new FS.ErrnoError(ERRNO_CODES.ENOENT)}if(!link.node_ops.readlink){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}return PATH.resolve(FS.getPath(link.parent),link.node_ops.readlink(link))}),stat:(function(path,dontFollow){var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;if(!node){throw new FS.ErrnoError(ERRNO_CODES.ENOENT)}if(!node.node_ops.getattr){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}return node.node_ops.getattr(node)}),lstat:(function(path){return FS.stat(path,true)}),chmod:(function(path,mode,dontFollow){var node;if(typeof path==="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}node.node_ops.setattr(node,{mode:mode&4095|node.mode&~4095,timestamp:Date.now()})}),lchmod:(function(path,mode){FS.chmod(path,mode,true)}),fchmod:(function(fd,mode){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(ERRNO_CODES.EBADF)}FS.chmod(stream.node,mode)}),chown:(function(path,uid,gid,dontFollow){var node;if(typeof path==="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}node.node_ops.setattr(node,{timestamp:Date.now()})}),lchown:(function(path,uid,gid){FS.chown(path,uid,gid,true)}),fchown:(function(fd,uid,gid){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(ERRNO_CODES.EBADF)}FS.chown(stream.node,uid,gid)}),truncate:(function(path,len){if(len<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}var node;if(typeof path==="string"){var lookup=FS.lookupPath(path,{follow:true});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}if(FS.isDir(node.mode)){throw new FS.ErrnoError(ERRNO_CODES.EISDIR)}if(!FS.isFile(node.mode)){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}var err=FS.nodePermissions(node,"w");if(err){throw new FS.ErrnoError(err)}node.node_ops.setattr(node,{size:len,timestamp:Date.now()})}),ftruncate:(function(fd,len){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(ERRNO_CODES.EBADF)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}FS.truncate(stream.node,len)}),utime:(function(path,atime,mtime){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;node.node_ops.setattr(node,{timestamp:Math.max(atime,mtime)})}),open:(function(path,flags,mode,fd_start,fd_end){if(path===""){throw new FS.ErrnoError(ERRNO_CODES.ENOENT)}flags=typeof flags==="string"?FS.modeStringToFlags(flags):flags;mode=typeof mode==="undefined"?438:mode;if(flags&64){mode=mode&4095|32768}else{mode=0}var node;if(typeof path==="object"){node=path}else{path=PATH.normalize(path);try{var lookup=FS.lookupPath(path,{follow:!(flags&131072)});node=lookup.node}catch(e){}}var created=false;if(flags&64){if(node){if(flags&128){throw new FS.ErrnoError(ERRNO_CODES.EEXIST)}}else{node=FS.mknod(path,mode,0);created=true}}if(!node){throw new FS.ErrnoError(ERRNO_CODES.ENOENT)}if(FS.isChrdev(node.mode)){flags&=~512}if(flags&65536&&!FS.isDir(node.mode)){throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR)}if(!created){var err=FS.mayOpen(node,flags);if(err){throw new FS.ErrnoError(err)}}if(flags&512){FS.truncate(node,0)}flags&=~(128|512);var stream=FS.createStream({node:node,path:FS.getPath(node),flags:flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false},fd_start,fd_end);if(stream.stream_ops.open){stream.stream_ops.open(stream)}if(Module["logReadFiles"]&&!(flags&1)){if(!FS.readFiles)FS.readFiles={};if(!(path in FS.readFiles)){FS.readFiles[path]=1;Module["printErr"]("read file: "+path)}}try{if(FS.trackingDelegate["onOpenFile"]){var trackingFlags=0;if((flags&2097155)!==1){trackingFlags|=FS.tracking.openFlags.READ}if((flags&2097155)!==0){trackingFlags|=FS.tracking.openFlags.WRITE}FS.trackingDelegate["onOpenFile"](path,trackingFlags)}}catch(e){console.log("FS.trackingDelegate['onOpenFile']('"+path+"', flags) threw an exception: "+e.message)}return stream}),close:(function(stream){if(stream.getdents)stream.getdents=null;try{if(stream.stream_ops.close){stream.stream_ops.close(stream)}}catch(e){throw e}finally{FS.closeStream(stream.fd)}}),llseek:(function(stream,offset,whence){if(!stream.seekable||!stream.stream_ops.llseek){throw new FS.ErrnoError(ERRNO_CODES.ESPIPE)}stream.position=stream.stream_ops.llseek(stream,offset,whence);stream.ungotten=[];return stream.position}),read:(function(stream,buffer,offset,length,position){if(length<0||position<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(ERRNO_CODES.EBADF)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(ERRNO_CODES.EISDIR)}if(!stream.stream_ops.read){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}var seeking=true;if(typeof position==="undefined"){position=stream.position;seeking=false}else if(!stream.seekable){throw new FS.ErrnoError(ERRNO_CODES.ESPIPE)}var bytesRead=stream.stream_ops.read(stream,buffer,offset,length,position);if(!seeking)stream.position+=bytesRead;return bytesRead}),write:(function(stream,buffer,offset,length,position,canOwn){if(length<0||position<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(ERRNO_CODES.EBADF)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(ERRNO_CODES.EISDIR)}if(!stream.stream_ops.write){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}if(stream.flags&1024){FS.llseek(stream,0,2)}var seeking=true;if(typeof position==="undefined"){position=stream.position;seeking=false}else if(!stream.seekable){throw new FS.ErrnoError(ERRNO_CODES.ESPIPE)}var bytesWritten=stream.stream_ops.write(stream,buffer,offset,length,position,canOwn);if(!seeking)stream.position+=bytesWritten;try{if(stream.path&&FS.trackingDelegate["onWriteToFile"])FS.trackingDelegate["onWriteToFile"](stream.path)}catch(e){console.log("FS.trackingDelegate['onWriteToFile']('"+path+"') threw an exception: "+e.message)}return bytesWritten}),allocate:(function(stream,offset,length){if(offset<0||length<=0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(ERRNO_CODES.EBADF)}if(!FS.isFile(stream.node.mode)&&!FS.isDir(node.mode)){throw new FS.ErrnoError(ERRNO_CODES.ENODEV)}if(!stream.stream_ops.allocate){throw new FS.ErrnoError(ERRNO_CODES.EOPNOTSUPP)}stream.stream_ops.allocate(stream,offset,length)}),mmap:(function(stream,buffer,offset,length,position,prot,flags){if((stream.flags&2097155)===1){throw new FS.ErrnoError(ERRNO_CODES.EACCES)}if(!stream.stream_ops.mmap){throw new FS.ErrnoError(ERRNO_CODES.ENODEV)}return stream.stream_ops.mmap(stream,buffer,offset,length,position,prot,flags)}),msync:(function(stream,buffer,offset,length,mmapFlags){if(!stream||!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)}),munmap:(function(stream){return 0}),ioctl:(function(stream,cmd,arg){if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(ERRNO_CODES.ENOTTY)}return stream.stream_ops.ioctl(stream,cmd,arg)}),readFile:(function(path,opts){opts=opts||{};opts.flags=opts.flags||"r";opts.encoding=opts.encoding||"binary";if(opts.encoding!=="utf8"&&opts.encoding!=="binary"){throw new Error('Invalid encoding type "'+opts.encoding+'"')}var ret;var stream=FS.open(path,opts.flags);var stat=FS.stat(path);var length=stat.size;var buf=new Uint8Array(length);FS.read(stream,buf,0,length,0);if(opts.encoding==="utf8"){ret=UTF8ArrayToString(buf,0)}else if(opts.encoding==="binary"){ret=buf}FS.close(stream);return ret}),writeFile:(function(path,data,opts){opts=opts||{};opts.flags=opts.flags||"w";opts.encoding=opts.encoding||"utf8";if(opts.encoding!=="utf8"&&opts.encoding!=="binary"){throw new Error('Invalid encoding type "'+opts.encoding+'"')}var stream=FS.open(path,opts.flags,opts.mode);if(opts.encoding==="utf8"){var buf=new Uint8Array(lengthBytesUTF8(data)+1);var actualNumBytes=stringToUTF8Array(data,buf,0,buf.length);FS.write(stream,buf,0,actualNumBytes,0,opts.canOwn)}else if(opts.encoding==="binary"){FS.write(stream,data,0,data.length,0,opts.canOwn)}FS.close(stream)}),cwd:(function(){return FS.currentPath}),chdir:(function(path){var lookup=FS.lookupPath(path,{follow:true});if(!FS.isDir(lookup.node.mode)){throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR)}var err=FS.nodePermissions(lookup.node,"x");if(err){throw new FS.ErrnoError(err)}FS.currentPath=lookup.path}),createDefaultDirectories:(function(){FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")}),createDefaultDevices:(function(){FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:(function(){return 0}),write:(function(stream,buffer,offset,length,pos){return length})});FS.mkdev("/dev/null",FS.makedev(1,3));TTY.register(FS.makedev(5,0),TTY.default_tty_ops);TTY.register(FS.makedev(6,0),TTY.default_tty1_ops);FS.mkdev("/dev/tty",FS.makedev(5,0));FS.mkdev("/dev/tty1",FS.makedev(6,0));var random_device;if(typeof crypto!=="undefined"){var randomBuffer=new Uint8Array(1);random_device=(function(){crypto.getRandomValues(randomBuffer);return randomBuffer[0]})}else if(ENVIRONMENT_IS_NODE){random_device=(function(){return require("crypto").randomBytes(1)[0]})}else{random_device=(function(){return Math.random()*256|0})}FS.createDevice("/dev","random",random_device);FS.createDevice("/dev","urandom",random_device);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")}),createSpecialDirectories:(function(){FS.mkdir("/proc");FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount:(function(){var node=FS.createNode("/proc/self","fd",16384|511,73);node.node_ops={lookup:(function(parent,name){var fd=+name;var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);var ret={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:(function(){return stream.path})}};ret.parent=ret;return ret})};return node})},{},"/proc/self/fd")}),createStandardStreams:(function(){if(Module["stdin"]){FS.createDevice("/dev","stdin",Module["stdin"])}else{FS.symlink("/dev/tty","/dev/stdin")}if(Module["stdout"]){FS.createDevice("/dev","stdout",null,Module["stdout"])}else{FS.symlink("/dev/tty","/dev/stdout")}if(Module["stderr"]){FS.createDevice("/dev","stderr",null,Module["stderr"])}else{FS.symlink("/dev/tty1","/dev/stderr")}var stdin=FS.open("/dev/stdin","r");assert(stdin.fd===0,"invalid handle for stdin ("+stdin.fd+")");var stdout=FS.open("/dev/stdout","w");assert(stdout.fd===1,"invalid handle for stdout ("+stdout.fd+")");var stderr=FS.open("/dev/stderr","w");assert(stderr.fd===2,"invalid handle for stderr ("+stderr.fd+")")}),ensureErrnoError:(function(){if(FS.ErrnoError)return;FS.ErrnoError=function ErrnoError(errno,node){this.node=node;this.setErrno=(function(errno){this.errno=errno;for(var key in ERRNO_CODES){if(ERRNO_CODES[key]===errno){this.code=key;break}}});this.setErrno(errno);this.message=ERRNO_MESSAGES[errno];if(this.stack)this.stack=demangleAll(this.stack)};FS.ErrnoError.prototype=new Error;FS.ErrnoError.prototype.constructor=FS.ErrnoError;[ERRNO_CODES.ENOENT].forEach((function(code){FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack=""}))}),staticInit:(function(){FS.ensureErrnoError();FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={"MEMFS":MEMFS,"IDBFS":IDBFS,"NODEFS":NODEFS,"WORKERFS":WORKERFS}}),init:(function(input,output,error){assert(!FS.init.initialized,"FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)");FS.init.initialized=true;FS.ensureErrnoError();Module["stdin"]=input||Module["stdin"];Module["stdout"]=output||Module["stdout"];Module["stderr"]=error||Module["stderr"];FS.createStandardStreams()}),quit:(function(){FS.init.initialized=false;var fflush=Module["_fflush"];if(fflush)fflush(0);for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=(function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}});var lazyArray=this;lazyArray.setDataGetter((function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]}));if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:(function(){if(!this.lengthKnown){this.cacheLength()}return this._length})},chunkSize:{get:(function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize})}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:(function(){return this.contents.length})}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach((function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(ERRNO_CODES.EIO)}return fn.apply(null,arguments)}}));stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(ERRNO_CODES.EIO)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);assert(size>=0);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;HEAP32[buf+36>>2]=stat.size;HEAP32[buf+40>>2]=4096;HEAP32[buf+44>>2]=stat.blocks;HEAP32[buf+48>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+52>>2]=0;HEAP32[buf+56>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ino;return 0}),doMsync:(function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)}),doMkdir:(function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0}),doMknod:(function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0}),doReadlink:(function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);ret=ret.slice(0,Math.max(0,bufsize));writeStringToMemory(ret,buf,true);return ret.length}),doAccess:(function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0}),doDup:(function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd}),doReadv:(function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret}),varargs:0,get:(function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret}),getStr:(function(){var ret=Pointer_stringify(SYSCALLS.get());return ret}),getStreamFromFD:(function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream}),getSocketFromFD:(function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket}),getSocketAddress:(function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info}),get64:(function(){var low=SYSCALLS.get(),high=SYSCALLS.get();if(low>=0)assert(high===0);else assert(high===-1);return low}),getZero:(function(){assert(SYSCALLS.get()===0)})};function ___syscall20(which,varargs){SYSCALLS.varargs=varargs;try{return PROCINFO.pid}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function __exit(status){Module["exit"](status)}function _exit(status){__exit(status)}function _pthread_setspecific(key,value){if(!(key in PTHREAD_SPECIFIC)){return ERRNO_CODES.EINVAL}PTHREAD_SPECIFIC[key]=value;return 0}function _pthread_cond_timedwait(){return 0}function _emscripten_memcpy_big(dest,src,num){HEAPU8.set(HEAPU8.subarray(src,src+num),dest);return dest}Module["_memcpy"]=_memcpy;Module["_memmove"]=_memmove;function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0};case 21506:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0};case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0};case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL};case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)};default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function _sysconf(name){switch(name){case 30:return PAGE_SIZE;case 85:return totalMemory/PAGE_SIZE;case 132:case 133:case 12:case 137:case 138:case 15:case 235:case 16:case 17:case 18:case 19:case 20:case 149:case 13:case 10:case 236:case 153:case 9:case 21:case 22:case 159:case 154:case 14:case 77:case 78:case 139:case 80:case 81:case 82:case 68:case 67:case 164:case 11:case 29:case 47:case 48:case 95:case 52:case 51:case 46:return 200809;case 79:return 0;case 27:case 246:case 127:case 128:case 23:case 24:case 160:case 161:case 181:case 182:case 242:case 183:case 184:case 243:case 244:case 245:case 165:case 178:case 179:case 49:case 50:case 168:case 169:case 175:case 170:case 171:case 172:case 97:case 76:case 32:case 173:case 35:return-1;case 176:case 177:case 7:case 155:case 8:case 157:case 125:case 126:case 92:case 93:case 129:case 130:case 131:case 94:case 91:return 1;case 74:case 60:case 69:case 70:case 4:return 1024;case 31:case 42:case 72:return 32;case 87:case 26:case 33:return 2147483647;case 34:case 1:return 47839;case 38:case 36:return 99;case 43:case 37:return 2048;case 0:return 2097152;case 3:return 65536;case 28:return 32768;case 44:return 32767;case 75:return 16384;case 39:return 1e3;case 89:return 700;case 71:return 256;case 40:return 255;case 2:return 100;case 180:return 64;case 25:return 20;case 5:return 16;case 6:return 6;case 73:return 4;case 84:{if(typeof navigator==="object")return navigator["hardwareConcurrency"]||1;return 1}}___setErrNo(ERRNO_CODES.EINVAL);return-1}Module["_bitshift64Lshr"]=_bitshift64Lshr;function _sched_yield(){return 0}function _pthread_cond_init(){}function _pthread_cleanup_push(routine,arg){__ATEXIT__.push((function(){Runtime.dynCall("vi",routine,[arg])}));_pthread_cleanup_push.level=__ATEXIT__.length}function _gettimeofday(ptr){var now=Date.now();HEAP32[ptr>>2]=now/1e3|0;HEAP32[ptr+4>>2]=now%1e3*1e3|0;return 0}Module["_i64Add"]=_i64Add;function _pthread_mutex_unlock(){}function ___syscall3(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),buf=SYSCALLS.get(),count=SYSCALLS.get();return FS.read(stream,HEAP8,buf,count)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function _sbrk(bytes){var self=_sbrk;if(!self.called){DYNAMICTOP=alignMemoryPage(DYNAMICTOP);self.called=true;assert(Runtime.dynamicAlloc);self.alloc=Runtime.dynamicAlloc;Runtime.dynamicAlloc=(function(){abort("cannot dynamically allocate, sbrk now has control")})}var ret=DYNAMICTOP;if(bytes!=0){var success=self.alloc(bytes);if(!success)return-1>>>0}return ret}Module["_bitshift64Shl"]=_bitshift64Shl;function _llvm_stacksave(){var self=_llvm_stacksave;if(!self.LLVM_SAVEDSTACKS){self.LLVM_SAVEDSTACKS=[]}self.LLVM_SAVEDSTACKS.push(Runtime.stackSave());return self.LLVM_SAVEDSTACKS.length-1}function _pthread_cleanup_pop(){assert(_pthread_cleanup_push.level==__ATEXIT__.length,"cannot pop if something else added meanwhile!");__ATEXIT__.pop();_pthread_cleanup_push.level=__ATEXIT__.length}function _pthread_mutex_destroy(){}function _pthread_cond_wait(){return 0}var _llvm_fabs_f32=Math_abs;function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}function _pthread_self(){return 0}function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();var offset=offset_low;assert(offset_high===0);FS.llseek(stream,offset,whence);HEAP32[result>>2]=stream.position;if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd};case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0};case 12:case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0};case 13:case 14:case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}FS.staticInit();__ATINIT__.unshift((function(){if(!Module["noFSInit"]&&!FS.init.initialized)FS.init()}));__ATMAIN__.push((function(){FS.ignorePermissions=false}));__ATEXIT__.push((function(){FS.quit()}));Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;__ATINIT__.unshift((function(){TTY.init()}));__ATEXIT__.push((function(){TTY.shutdown()}));if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}STACK_BASE=STACKTOP=Runtime.alignMemory(STATICTOP);staticSealed=true;STACK_MAX=STACK_BASE+TOTAL_STACK;DYNAMIC_BASE=DYNAMICTOP=Runtime.alignMemory(STACK_MAX);assert(DYNAMIC_BASE>2]|0)){g[a>>2]=0.0;g[a+4>>2]=0.0;return}h=b+136|0;switch(c[h>>2]|0){case 0:{f=b+120|0;e=c[f>>2]|0;i=e+1|0;c[f>>2]=i;b=c[b+64>>2]|0;d=c[b+(e<<3)>>2]|0;e=c[b+(e<<3)+4>>2]|0;if((i|0)==64){c[f>>2]=0;c[h>>2]=1}c[a>>2]=d;c[a+4>>2]=e;return}case 1:{d=b+120|0;f=c[d>>2]|0;i=f+1|0;c[d>>2]=i;j=c[b+100>>2]|0;e=c[j+(f<<3)>>2]|0;f=c[j+(f<<3)+4>>2]|0;if((i|0)==(c[b+96>>2]|0)){c[d>>2]=0;c[h>>2]=2}c[a>>2]=e;c[a+4>>2]=f;return}case 2:{d=b+120|0;f=c[d>>2]|0;j=f+1|0;c[d>>2]=j;i=c[b+116>>2]|0;e=c[i+(f<<3)>>2]|0;f=c[i+(f<<3)+4>>2]|0;if((j|0)==(c[b+112>>2]|0)){c[d>>2]=0;c[h>>2]=3}c[a>>2]=e;c[a+4>>2]=f;return}case 3:{d=b+120|0;j=(c[d>>2]|0)+1|0;c[d>>2]=j;if((j|0)==(c[b+4>>2]<<1|0)){c[d>>2]=0;c[b+132>>2]=1;c[e>>2]=0}c[a>>2]=0;c[a+4>>2]=0;return}default:{Qp(25744,74,1,c[2348]|0)|0;kb(1)}}}function Vf(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0.0,k=0,l=0.0;h=Xp(244)|0;c[h>>2]=a;c[h+4>>2]=b;a=h+64|0;c[a>>2]=7;b=h+68|0;g[b>>2]=.30000001192092896;d=h+116|0;c[d>>2]=Xp(512)|0;c[h+120>>2]=Xp(512)|0;e=Qj(7,137,1)|0;f=0;do{k=(Tj(e)|0)!=0;i=c[d>>2]|0;g[i+(f<<3)>>2]=k?.7071067690849304:-.7071067690849304;g[i+(f<<3)+4>>2]=0.0;i=(Tj(e)|0)!=0;l=i?.7071067811865476:-.7071067811865476;i=c[d>>2]|0;k=i+(f<<3)|0;i=i+(f<<3)+4|0;j=l+ +g[i>>2];g[k>>2]=+g[k>>2]+l*0.0;g[i>>2]=j;f=f+1|0}while((f|0)!=64);Sj(e);k=eh(c[d>>2]|0,64,7,2,c[a>>2]|0,+g[b>>2])|0;c[h+72>>2]=k;dh(k,.5);c[h+104>>2]=32;k=h+100|0;c[k>>2]=Me(7,32,2,c[a>>2]|0,+g[b>>2])|0;f=h+92|0;c[f>>2]=zj(0)|0;e=zj(0)|0;i=h+96|0;c[i>>2]=e;Cj(e,9.999999747378752e-05);c[h+128>>2]=0;c[h+140>>2]=0;c[h+160>>2]=0;c[h+136>>2]=0;c[h+148>>2]=0;c[h+152>>2]=14;c[h+124>>2]=0;Wf(h,0)|0;c[h+188>>2]=di(48)|0;e=h+208|0;c[e>>2]=64;b=ph()|0;d=h+200|0;c[d>>2]=b;rh(b,c[e>>2]|0,5,1,7,47)|0;d=sh(c[d>>2]|0)|0;c[h+196>>2]=d;c[h+192>>2]=Xp(d<<3)|0;c[h+204>>2]=Xp(c[e>>2]|0)|0;c[h+184>>2]=0;yl(h+48|0);e=h+228|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;Dj(c[f>>2]|0);Dj(c[i>>2]|0);Ie(c[k>>2]|0);c[h+224>>2]=0;c[h+216>>2]=0;c[h+220>>2]=0;g[h+8>>2]=0.0;return h|0}function Wf(a,b){a=a|0;b=b|0;var d=0;b=(b|0)==0?572:b;if(((c[b>>2]|0)+-1|0)>>>0>5){Qp(25819,72,1,c[2348]|0)|0;kb(1)}if(!(c[b+4>>2]|0)){d=c[2348]|0;Qp(25892,72,1,d)|0;kb(1)}if(!(c[b+8>>2]|0)){d=c[2348]|0;Qp(25892,72,1,d)|0;kb(1)}if(!(c[b+12>>2]|0)){Qp(25965,79,1,c[2348]|0)|0;kb(1)}else{gq(a+168|0,b|0,16)|0;Xf(a,c[a+152>>2]|0);return 0}return 0}function Xf(a,b){a=a|0;b=b|0;var d=0,e=0;c[a+152>>2]=b;e=b+6|0;b=a+156|0;c[b>>2]=e;d=a+160|0;c[d>>2]=_p(c[d>>2]|0,e)|0;d=a+148|0;e=c[d>>2]|0;if(e|0)qh(e);e=ph()|0;c[d>>2]=e;rh(e,c[b>>2]|0,c[a+168>>2]|0,c[a+172>>2]|0,c[a+176>>2]|0,c[a+180>>2]|0)|0;e=sh(c[d>>2]|0)|0;b=a+144|0;c[b>>2]=e;d=a+140|0;c[d>>2]=_p(c[d>>2]|0,e<<3)|0;d=a+136|0;e=c[d>>2]|0;if(e|0)Fh(e);e=Eh(c[b>>2]|0,16)|0;c[d>>2]=e;e=Gh(e)|0;c[a+132>>2]=e;a=a+128|0;c[a>>2]=_p(c[a>>2]|0,e<<3)|0;return}function Yf(a){a=a|0;if(c[a+232>>2]|0)uk(c[a+240>>2]|0);Yp(c[a+116>>2]|0);Yp(c[a+120>>2]|0);Yp(c[a+128>>2]|0);Yp(c[a+140>>2]|0);Yp(c[a+160>>2]|0);Yp(c[a+192>>2]|0);Yp(c[a+204>>2]|0);Fh(c[a+136>>2]|0);qh(c[a+148>>2]|0);Hi(c[a+188>>2]|0);qh(c[a+200>>2]|0);fh(c[a+72>>2]|0);Ge(c[a+100>>2]|0);Ej(c[a+92>>2]|0);Ej(c[a+96>>2]|0);Yp(a);return}function Zf(a,b){a=a|0;b=b|0;c[a+124>>2]=b;return}function _f(a,b){a=a|0;b=b|0;c[a+184>>2]=b;return}function $f(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;w=i;i=i+48|0;if((i|0)>=(j|0))ba();e=w+40|0;f=w+32|0;g=w+24|0;o=w+16|0;p=w+8|0;q=w;if(!d){i=w;return}r=a+228|0;s=a+224|0;t=g+4|0;u=o+4|0;h=p+4|0;k=q+4|0;l=a+236|0;m=a+240|0;n=f+4|0;v=0;a:while(1){if(c[r>>2]|0?(c[l>>2]|0)==0:0){x=c[m>>2]|0;y=c[b+(v<<3)+4>>2]|0;c[f>>2]=c[b+(v<<3)>>2];c[n>>2]=y;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];tk(x,e)}switch(c[s>>2]|0){case 0:{y=c[b+(v<<3)+4>>2]|0;c[g>>2]=c[b+(v<<3)>>2];c[t>>2]=y;c[e>>2]=c[g>>2];c[e+4>>2]=c[g+4>>2];ag(a,e);break}case 1:{y=c[b+(v<<3)+4>>2]|0;c[o>>2]=c[b+(v<<3)>>2];c[u>>2]=y;c[e>>2]=c[o>>2];c[e+4>>2]=c[o+4>>2];bg(a,e);break}case 2:{y=c[b+(v<<3)+4>>2]|0;c[p>>2]=c[b+(v<<3)>>2];c[h>>2]=y;c[e>>2]=c[p>>2];c[e+4>>2]=c[p+4>>2];cg(a,e);break}case 3:{y=c[b+(v<<3)+4>>2]|0;c[q>>2]=c[b+(v<<3)>>2];c[k>>2]=y;c[e>>2]=c[q>>2];c[e+4>>2]=c[q+4>>2];eg(a,e);break}default:{e=11;break a}}v=v+1|0;if(v>>>0>=d>>>0){e=13;break}}if((e|0)==11){Qp(26500,58,1,c[2348]|0)|0;kb(1)}else if((e|0)==13){i=w;return}}function ag(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0,h=0,k=0,l=0,m=0,n=0;n=i;i=i+16|0;if((i|0)>=(j|0))ba();l=n+8|0;h=n;m=a+72|0;k=c[m>>2]|0;f=c[b+4>>2]|0;c[h>>2]=c[b>>2];c[h+4>>2]=f;c[l>>2]=c[h>>2];c[l+4>>2]=c[h+4>>2];l=hh(k,l)|0;if(!l){i=n;return}k=a+76|0;g[k>>2]=+lh(c[m>>2]|0);e=a+88|0;g[e>>2]=+mh(c[m>>2]|0);f=a+80|0;g[f>>2]=+nh(c[m>>2]|0);h=a+84|0;g[h>>2]=+oh(c[m>>2]|0);d=+g[k>>2];k=c[a+104>>2]|0;if(d>0.0){d=d*+(k>>>0);b=0}else{d=(d+1.0)*+(k>>>0);b=1}c[a+112>>2]=(~~d>>>0>>>0)%(k>>>0)|0;c[a+108>>2]=b;Ne(c[a+100>>2]|0,.5/+g[e>>2]);k=a+92|0;Fj(c[k>>2]|0,+g[f>>2]);Hj(c[k>>2]|0,+g[h>>2]);c[a+224>>2]=1;k=a+236|0;c[k>>2]=1;$f(a,l,kh(c[m>>2]|0)|0);c[k>>2]=0;i=n;return}function bg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,k=0,l=0,m=0;k=i;i=i+32|0;if((i|0)>=(j|0))ba();f=k+24|0;e=k+16|0;l=k+8|0;g=k;m=c[b+4>>2]|0;d=a+92|0;h=c[d>>2]|0;c[l>>2]=c[b>>2];c[l+4>>2]=m;c[f>>2]=c[l>>2];c[f+4>>2]=c[l+4>>2];Mj(h,f,e);Ij(c[d>>2]|0);d=a+100|0;h=c[d>>2]|0;b=e+4|0;l=c[b>>2]|0;c[g>>2]=c[e>>2];c[g+4>>2]=l;c[f>>2]=c[g>>2];c[f+4>>2]=c[g+4>>2];Ke(h,f);Le(c[d>>2]|0,c[a+112>>2]|0,e);d=a+108|0;f=c[d>>2]|0;c[d>>2]=f+1;if((f|0)>-1){g=c[e>>2]|0;h=c[b>>2]|0;c[d>>2]=f+-1}else{g=0;h=0}if((f|0)<0){i=k;return}d=c[a+64>>2]<<1;e=a+216|0;b=c[e>>2]|0;if(b>>>0>=d>>>0){b=b-d|0;m=c[a+120>>2]|0;c[m+(b<<3)>>2]=g;c[m+(b<<3)+4>>2]=h;b=c[e>>2]|0}c[e>>2]=b+1;if((b|0)!=(d+63|0)){i=k;return}c[a+224>>2]=2;i=k;return}function cg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=i;i=i+64|0;if((i|0)>=(j|0))ba();o=q+24|0;e=q+16|0;d=q+8|0;f=q;m=c[b+4>>2]|0;p=a+92|0;n=c[p>>2]|0;c[d>>2]=c[b>>2];c[d+4>>2]=m;c[o>>2]=c[d>>2];c[o+4>>2]=c[d+4>>2];Mj(n,o,e);Ij(c[p>>2]|0);n=a+100|0;d=c[n>>2]|0;b=e+4|0;m=c[b>>2]|0;c[f>>2]=c[e>>2];c[f+4>>2]=m;c[o>>2]=c[f>>2];c[o+4>>2]=c[f+4>>2];Ke(d,o);Le(c[n>>2]|0,c[a+112>>2]|0,e);d=a+108|0;f=c[d>>2]|0;c[d>>2]=f+1;if((f|0)>-1){l=c[e>>2]|0;m=c[b>>2]|0;c[d>>2]=f+-1;b=l;d=m}else{b=0;d=0}if((f|0)<0){i=q;return}m=a+220|0;l=c[m>>2]|0;k=c[a+128>>2]|0;c[k+(l<<3)>>2]=b;c[k+(l<<3)+4>>2]=d;l=(c[m>>2]|0)+1|0;c[m>>2]=l;if((l|0)!=(c[a+132>>2]|0)){i=q;return}dg(a);b=a+164|0;if(c[b>>2]|0){c[m>>2]=0;c[a+224>>2]=3;i=q;return}l=a+48|0;c[l>>2]=(c[l>>2]|0)+1;if(c[a>>2]|0){f=a+8|0;g[f>>2]=0.0;g[a+12>>2]=+yp(+g[a+88>>2])*20.0;g[a+16>>2]=+Jj(c[p>>2]|0);k=a+20|0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0;c[k+20>>2]=0;c[k+24>>2]=0;k=c[a>>2]|0;l=c[a+160>>2]|0;b=c[b>>2]|0;d=c[a+4>>2]|0;e=o;h=e+40|0;do{c[e>>2]=c[f>>2];e=e+4|0;f=f+4|0}while((e|0)<(h|0));ob[k&1](l,b,0,0,0,o,d)|0}Dj(c[p>>2]|0);Dj(c[a+96>>2]|0);Ie(c[n>>2]|0);c[a+224>>2]=0;c[a+216>>2]=0;c[m>>2]=0;g[a+8>>2]=0.0;i=q;return}function dg(b){b=b|0;var e=0,f=0,g=0,h=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0.0,r=0.0,s=0;p=i;i=i+16|0;if((i|0)>=(j|0))ba();l=p;h=b+136|0;f=b+140|0;Hh(c[h>>2]|0,c[b+128>>2]|0,c[f>>2]|0);e=c[b+148>>2]|0;f=c[f>>2]|0;k=b+160|0;g=c[k>>2]|0;if(!(c[b+124>>2]|0))e=yh(e,f,g)|0;else e=zh(e,f,g)|0;o=b+164|0;c[o>>2]=e;if(!e){i=p;return}q=+Ih(c[h>>2]|0);r=+Jh(c[h>>2]|0);n=b+96|0;Fj(c[n>>2]|0,q);Hj(c[n>>2]|0,r+q*+((c[b+132>>2]|0)>>>0));n=c[b+152>>2]|0;m=c[k>>2]|0;e=a[m+n>>0]|0;if(e<<24>>24!=102){b=c[2348]|0;c[l>>2]=e&255;c[l+4>>2]=102;Kp(b,26045,l)|0;c[o>>2]=0;i=p;return}f=(d[m+(n+1)>>0]|0)<<8|(d[m+(n+2)>>0]|0);g=b+208|0;c[g>>2]=f;s=a[m+(n+3)>>0]|0;h=s&255;l=d[m+(n+4)>>0]|0;k=l>>>5;l=l&31;e=(d[m+(n+5)>>0]|0)&31;if((s+-1&255)>59){Qp(26128,66,1,c[2348]|0)|0;c[o>>2]=0;i=p;return}switch(k|0){case 0:case 7:{Qp(26195,70,1,c[2348]|0)|0;c[o>>2]=0;i=p;return}default:{}}if((l+-1|0)>>>0>26){Qp(26266,78,1,c[2348]|0)|0;c[o>>2]=0;i=p;return}if((e+-1|0)>>>0>26){Qp(26345,78,1,c[2348]|0)|0;c[o>>2]=0;i=p;return}n=b+188|0;c[n>>2]=Gi(c[n>>2]|0,h)|0;n=b+200|0;rh(c[n>>2]|0,f,k,l,e,h)|0;n=sh(c[n>>2]|0)|0;c[b+196>>2]=n;s=b+192|0;c[s>>2]=_p(c[s>>2]|0,n<<3)|0;n=b+204|0;b=_p(c[n>>2]|0,c[g>>2]|0)|0;c[n>>2]=b;if(!((b|0)==0|(c[s>>2]|0)==0)){i=p;return}Qp(26424,75,1,c[2348]|0)|0;c[o>>2]=0;i=p;return}function eg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0,x=0.0;v=i;i=i+96|0;if((i|0)>=(j|0))ba();t=v+48|0;k=v+32|0;d=v+16|0;e=v+8|0;m=v;f=v+40|0;h=v+24|0;l=m+4|0;g[m>>2]=0.0;g[l>>2]=0.0;r=c[b+4>>2]|0;u=a+92|0;s=c[u>>2]|0;c[d>>2]=c[b>>2];c[d+4>>2]=r;c[t>>2]=c[d>>2];c[t+4>>2]=c[d+4>>2];Mj(s,t,k);Ij(c[u>>2]|0);s=a+100|0;d=c[s>>2]|0;b=k+4|0;r=c[b>>2]|0;c[e>>2]=c[k>>2];c[e+4>>2]=r;c[t>>2]=c[e>>2];c[t+4>>2]=c[e+4>>2];Ke(d,t);Le(c[s>>2]|0,c[a+112>>2]|0,k);d=a+108|0;e=c[d>>2]|0;c[d>>2]=e+1;if((e|0)>-1){q=c[k>>2]|0;r=c[b>>2]|0;c[m>>2]=q;c[l>>2]=r;c[d>>2]=e+-1;b=q;d=r}else{b=0;d=0}if((e|0)<0){i=v;return}r=a+96|0;p=c[r>>2]|0;c[f>>2]=b;c[f+4>>2]=d;c[t>>2]=c[f>>2];c[t+4>>2]=c[f+4>>2];Mj(p,t,m);p=a+188|0;n=c[p>>2]|0;q=c[l>>2]|0;c[h>>2]=c[m>>2];c[h+4>>2]=q;c[t>>2]=c[h>>2];c[t+4>>2]=c[h+4>>2];Mi(n,t,k);x=+Qi(c[p>>2]|0);w=+Ri(c[p>>2]|0);Kj(c[r>>2]|0,x);Ij(c[r>>2]|0);p=a+8|0;g[p>>2]=w*w+ +g[p>>2];n=c[l>>2]|0;q=a+220|0;o=c[q>>2]|0;k=a+192|0;f=c[k>>2]|0;c[f+(o<<3)>>2]=c[m>>2];c[f+(o<<3)+4>>2]=n;o=(c[q>>2]|0)+1|0;c[q>>2]=o;f=a+196|0;if((o|0)!=(c[f>>2]|0)){i=v;return}h=a+200|0;b=c[h>>2]|0;d=c[k>>2]|0;l=a+204|0;e=c[l>>2]|0;if(!(c[a+184>>2]|0))b=yh(b,d,e)|0;else b=zh(b,d,e)|0;d=a+212|0;c[d>>2]=b;o=a+48|0;c[o>>2]=(c[o>>2]|0)+1;o=a+52|0;c[o>>2]=(c[o>>2]|0)+1;o=a+56|0;c[o>>2]=(c[o>>2]|0)+b;b=a+208|0;o=a+60|0;c[o>>2]=(c[o>>2]|0)+(c[b>>2]|0);if(c[a>>2]|0){m=wh(c[h>>2]|0)|0;g[p>>2]=+yp(+g[p>>2]/+((c[f>>2]|0)>>>0))*10.0;g[a+12>>2]=+yp(+g[a+88>>2])*20.0;g[a+16>>2]=+Jj(c[u>>2]|0);c[a+20>>2]=c[k>>2];c[a+24>>2]=c[f>>2];c[a+28>>2]=m;c[a+32>>2]=c[636+(m<<4)+12>>2];c[a+36>>2]=th(c[h>>2]|0)|0;c[a+40>>2]=uh(c[h>>2]|0)|0;c[a+44>>2]=vh(c[h>>2]|0)|0;m=c[a>>2]|0;n=c[a+160>>2]|0;o=c[a+164>>2]|0;l=c[l>>2]|0;k=c[b>>2]|0;e=c[d>>2]|0;f=c[a+4>>2]|0;h=t;b=p;d=h+40|0;do{c[h>>2]=c[b>>2];h=h+4|0;b=b+4|0}while((h|0)<(d|0));ob[m&1](n,o,l,k,e,t,f)|0}Dj(c[u>>2]|0);Dj(c[r>>2]|0);Ie(c[s>>2]|0);c[a+224>>2]=0;c[a+216>>2]=0;c[q>>2]=0;g[a+8>>2]=0.0;i=v;return}function fg(a){a=a|0;var b=0;b=a+232|0;if(c[b>>2]|0)return;c[a+240>>2]=qk(2e3)|0;c[a+228>>2]=1;c[b>>2]=1;return}function gg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0.0;x=i;i=i+256|0;if((i|0)>=(j|0))ba();w=x+248|0;v=x+224|0;s=x+200|0;r=x+192|0;q=x+168|0;p=x+144|0;o=x+136|0;n=x+112|0;m=x+88|0;l=x+64|0;k=x+40|0;f=x+16|0;e=x+8|0;d=x;u=x+252|0;if(!(c[a+232>>2]|0)){Qp(26559,90,1,c[2348]|0)|0;i=x;return}t=Ep(b,37318)|0;c[d>>2]=b;Kp(t,28173,d)|0;Qp(37886,2,1,t)|0;Qp(37457,11,1,t)|0;Qp(28200,12,1,t)|0;c[e>>2]=2e3;Kp(t,37469,e)|0;Qp(26650,54,1,t)|0;Qp(37695,16,1,t)|0;sk(c[a+240>>2]|0,u);d=0;do{e=c[u>>2]|0;z=+g[e+(d<<3)>>2];y=+g[e+(d<<3)+4>>2];d=d+1|0;c[f>>2]=d;h[f+8>>3]=z;h[f+16>>3]=y;Kp(t,37712,f)|0}while((d|0)!=2e3);Qp(37886,2,1,t)|0;Qp(26705,18,1,t)|0;Qp(28283,48,1,t)|0;Qp(39490,9,1,t)|0;Qp(37790,24,1,t)|0;Qp(37815,30,1,t)|0;Qp(26724,27,1,t)|0;d=c[a+116>>2]|0;c[u>>2]=d;y=+g[d>>2];z=+g[d+4>>2];c[k>>2]=1;h[k+8>>3]=y;h[k+16>>3]=z;Kp(t,26752,k)|0;d=1;do{k=c[u>>2]|0;y=+g[k+(d<<3)>>2];z=+g[k+(d<<3)+4>>2];d=d+1|0;c[l>>2]=d;h[l+8>>3]=y;h[l+16>>3]=z;Kp(t,26752,l)|0}while((d|0)!=64);Qp(26792,27,1,t)|0;d=c[a+120>>2]|0;c[u>>2]=d;y=+g[d>>2];z=+g[d+4>>2];c[m>>2]=1;h[m+8>>3]=y;h[m+16>>3]=z;Kp(t,26820,m)|0;d=1;do{m=c[u>>2]|0;y=+g[m+(d<<3)>>2];z=+g[m+(d<<3)+4>>2];d=d+1|0;c[n>>2]=d;h[n+8>>3]=y;h[n+16>>3]=z;Kp(t,26820,n)|0}while((d|0)!=64);e=a+144|0;c[o>>2]=c[e>>2];Kp(t,26860,o)|0;d=c[a+140>>2]|0;c[u>>2]=d;if(c[e>>2]|0?(o=d,y=+g[o>>2],z=+g[o+4>>2],c[p>>2]=1,h[p+8>>3]=y,h[p+16>>3]=z,Kp(t,26887,p)|0,(c[e>>2]|0)>>>0>1):0){d=1;do{p=c[u>>2]|0;y=+g[p+(d<<3)>>2];z=+g[p+(d<<3)+4>>2];d=d+1|0;c[q>>2]=d;h[q+8>>3]=y;h[q+16>>3]=z;Kp(t,26887,q)|0}while(d>>>0<(c[e>>2]|0)>>>0)}e=a+196|0;c[r>>2]=c[e>>2];Kp(t,26925,r)|0;d=c[a+192>>2]|0;c[u>>2]=d;if(c[e>>2]|0?(r=d,y=+g[r>>2],z=+g[r+4>>2],c[s>>2]=1,h[s+8>>3]=y,h[s+16>>3]=z,Kp(t,26953,s)|0,(c[e>>2]|0)>>>0>1):0){d=1;do{s=c[u>>2]|0;y=+g[s+(d<<3)>>2];z=+g[s+(d<<3)+4>>2];d=d+1|0;c[v>>2]=d;h[v+8>>3]=y;h[v+16>>3]=z;Kp(t,26953,v)|0}while(d>>>0<(c[e>>2]|0)>>>0)}Qp(26992,20,1,t)|0;Qp(27013,45,1,t)|0;Qp(27059,20,1,t)|0;Qp(27080,28,1,t)|0;Qp(39490,9,1,t)|0;Qp(27109,23,1,t)|0;Qp(39476,13,1,t)|0;Qp(27133,34,1,t)|0;Qp(27168,20,1,t)|0;Qp(27189,47,1,t)|0;Qp(27059,20,1,t)|0;Qp(27080,28,1,t)|0;Qp(39490,9,1,t)|0;Qp(27109,23,1,t)|0;Qp(39476,13,1,t)|0;Qp(27237,35,1,t)|0;Qp(37886,2,1,t)|0;Hp(t)|0;c[w>>2]=b;Rp(27273,w)|0;i=x;return}function hg(){var a=0,b=0,d=0,e=0;a=Xp(100)|0;c[a+4>>2]=2;c[a+8>>2]=3;g[a+12>>2]=.5;c[a+16>>2]=63;d=a+24|0;c[d>>2]=0;c[a+28>>2]=6;e=$h(2,3,.5)|0;c[a>>2]=e;b=a+32|0;c[b>>2]=Qj(6,109,1)|0;ai(e);c[a+84>>2]=0;Vj(c[b>>2]|0);c[a+88>>2]=0;c[a+92>>2]=0;c[a+96>>2]=0;c[a+44>>2]=0;c[a+48>>2]=0;c[a+52>>2]=0;ig(a,8);c[a+72>>2]=0;c[a+60>>2]=6;c[a+64>>2]=1;c[a+68>>2]=1;b=Ck(0,6,1,1)|0;c[a+56>>2]=b;b=Fk(b)|0;c[a+76>>2]=b;c[d>>2]=b<<3;c[a+80>>2]=Xp(b)|0;return a|0}function ig(a,b){a=a|0;b=b|0;var d=0,e=0;if(c[a+88>>2]|0){Qp(27317,87,1,c[2348]|0)|0;return}c[a+36>>2]=b;d=b+5|0;e=a+44|0;c[e>>2]=_p(c[e>>2]|0,d)|0;e=a+52|0;b=c[e>>2]|0;if(b|0)Ek(b);b=Ck(d,6,6,1)|0;c[e>>2]=b;b=Fk(b)|0;e=a+40|0;c[e>>2]=b;d=a+48|0;c[d>>2]=_p(c[d>>2]|0,b)|0;c[a+20>>2]=c[e>>2]<<3;return}function jg(a){a=a|0;ai(c[a>>2]|0);c[a+84>>2]=0;Vj(c[a+32>>2]|0);c[a+88>>2]=0;c[a+92>>2]=0;c[a+96>>2]=0;return}function kg(a){a=a|0;bi(c[a>>2]|0);Sj(c[a+32>>2]|0);Yp(c[a+44>>2]|0);Yp(c[a+48>>2]|0);Ek(c[a+52>>2]|0);Yp(c[a+80>>2]|0);Ek(c[a+56>>2]|0);Yp(a);return}function lg(a){a=a|0;return c[a+88>>2]|0}function mg(a){a=a|0;if(!(c[a+88>>2]|0)){Qp(27405,58,1,c[2348]|0)|0;a=0;return a|0}else{a=_((c[a+20>>2]|0)+(c[a+16>>2]|0)+(c[a+24>>2]|0)+(c[a+8>>2]<<1)|0,c[a+4>>2]|0)|0;return a|0}return 0}function ng(b,e,f,g,h,i,j){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0;m=b+72|0;n=b+60|0;if((((c[m>>2]|0)==(g|0)?(c[n>>2]|0)==(h|0):0)?(l=b+64|0,(c[l>>2]|0)==(i|0)):0)?(k=b+68|0,(c[k>>2]|0)==(j|0)):0){h=b+56|0;i=b+80|0}else{c[m>>2]=g;c[n>>2]=h;l=b+64|0;c[l>>2]=i;k=b+68|0;c[k>>2]=j;o=b+56|0;h=Dk(c[o>>2]|0,g,h,i,j)|0;c[o>>2]=h;h=Fk(h)|0;c[b+76>>2]=h;c[b+24>>2]=h<<3;i=b+80|0;c[i>>2]=_p(c[i>>2]|0,h)|0;h=o}c[b+88>>2]=1;g=b+44|0;o=b+36|0;gq(c[g>>2]|0,e|0,c[o>>2]|0)|0;o=c[o>>2]|0;a[(c[g>>2]|0)+o>>0]=4;a[(c[g>>2]|0)+(o+1)>>0]=(c[m>>2]|0)>>>8;a[(c[g>>2]|0)+(o+2)>>0]=c[m>>2];e=o+3|0;a[(c[g>>2]|0)+e>>0]=c[n>>2]<<5;e=(c[g>>2]|0)+e|0;a[e>>0]=d[e>>0]|0|c[l>>2]&31;a[(c[g>>2]|0)+(o+4)>>0]=c[k>>2]&31;o=b+48|0;Jk(c[b+52>>2]|0,c[g>>2]|0,c[o>>2]|0);Nj(c[o>>2]|0,c[b+40>>2]|0);Jk(c[h>>2]|0,f,c[i>>2]|0);return}function og(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0;h=i;i=i+16|0;if((i|0)>=(j|0))ba();f=h;g=a+84|0;switch(c[g>>2]|0){case 0:{pg(a,b);break}case 1:{e=a+96|0;Vp(f,c[e>>2]|0,8);ci(c[a>>2]|0,(d[(c[a+48>>2]|0)+(c[f>>2]|0)>>0]|0)>>>(7-(c[f+4>>2]|0)|0)&1,b);f=(c[e>>2]|0)+1|0;c[e>>2]=f;if((f|0)==(c[a+20>>2]|0)){c[e>>2]=0;c[g>>2]=2}break}case 2:{e=a+96|0;Vp(f,c[e>>2]|0,8);ci(c[a>>2]|0,(d[(c[a+80>>2]|0)+(c[f>>2]|0)>>0]|0)>>>(7-(c[f+4>>2]|0)|0)&1,b);f=(c[e>>2]|0)+1|0;c[e>>2]=f;if((f|0)==(c[a+24>>2]|0)){c[e>>2]=0;c[g>>2]=3}break}case 3:{qg(a,b);break}default:{Qp(27464,70,1,c[2348]|0)|0;kb(1)}}e=a+92|0;if(!(c[e>>2]|0)){a=0;i=h;return a|0}ai(c[a>>2]|0);c[g>>2]=0;Vj(c[a+32>>2]|0);c[a+88>>2]=0;c[e>>2]=0;c[a+96>>2]=0;a=1;i=h;return a|0}function pg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,l=0,m=0.0,n=0.0;k=a+32|0;l=Tj(c[k>>2]|0)|0;ci(c[a>>2]|0,l&255,b);l=a+96|0;d=c[l>>2]|0;j=a+8|0;h=c[j>>2]|0;a:do if(d>>>0>>0?(i=a+4|0,e=c[i>>2]|0,(e|0)!=0):0){f=0;while(1){n=+Vh((_(d,e)|0)+f|0,_(e<<1,h)|0);d=b+(f<<3)|0;e=b+(f<<3)+4|0;m=n*+g[e>>2];g[d>>2]=n*+g[d>>2];g[e>>2]=m;f=f+1|0;e=c[i>>2]|0;d=c[l>>2]|0;if(f>>>0>=e>>>0)break a;h=c[j>>2]|0}}while(0);b=d+1|0;c[l>>2]=b;if((b|0)!=(c[a+16>>2]|0))return;Vj(c[k>>2]|0);c[l>>2]=0;c[a+84>>2]=1;return}function qg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,l=0.0,m=0.0;k=(Np()|0)%2|0;ci(c[a>>2]|0,k&255,b);k=a+96|0;d=c[k>>2]|0;i=a+8|0;h=c[i>>2]|0;if(d>>>0>=h>>>0?(j=a+4|0,e=c[j>>2]|0,(e|0)!=0):0){f=0;while(1){m=+Vh((_(d,e)|0)+f|0,_(e<<1,h)|0);h=b+(f<<3)|0;e=b+(f<<3)+4|0;l=m*+g[e>>2];g[h>>2]=m*+g[h>>2];g[e>>2]=l;f=f+1|0;e=c[j>>2]|0;if(f>>>0>=e>>>0)break;d=c[k>>2]|0;h=c[i>>2]|0}d=c[k>>2]|0}b=d+1|0;c[k>>2]=b;if((b|0)!=(c[a+28>>2]|0))return;c[k>>2]=0;c[a+92>>2]=1;return}function rg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=i;q=Xp(256)|0;c[q+16>>2]=a;c[q+20>>2]=b;n=q+4|0;c[n>>2]=2;o=q+8|0;c[o>>2]=3;p=q+12|0;g[p>>2]=.5;c[q>>2]=Ue(3,.375)|0;m=q+132|0;c[m>>2]=63;f=q+136|0;c[f>>2]=Xp(252)|0;c[q+140>>2]=Xp(252)|0;k=i;i=i+((1*((c[n>>2]|0)*63<<3)|0)+15&-16)|0;if((i|0)>=(j|0))ba();a=Qj(6,109,1)|0;b=$h(c[n>>2]|0,c[o>>2]|0,+g[p>>2])|0;if((c[o>>2]|0)!=(0-(c[m>>2]|0)|0)){h=0;do{d=Tj(a)|0;d=d&255;if(h>>>0<(c[m>>2]|0)>>>0)g[(c[f>>2]|0)+(h<<2)>>2]=d|0?1.0:-1.0;e=c[o>>2]|0;if(h>>>0>>0)ci(b,d,k);else ci(b,d,k+((_(c[n>>2]|0,h-e|0)|0)<<3)|0);h=h+1|0}while(h>>>0<((c[o>>2]|0)+(c[m>>2]|0)|0)>>>0)}bi(b);Sj(a);l=q+108|0;c[l>>2]=tl(k,_(c[n>>2]|0,c[m>>2]|0)|0,.5,.05000000074505806)|0;h=q+124|0;c[h>>2]=qk(_((c[o>>2]|0)+(c[m>>2]|0)|0,c[n>>2]|0)|0)|0;a=q+84|0;c[a>>2]=32;e=q+76|0;c[e>>2]=te(12,32,c[n>>2]|0,c[o>>2]|0,+g[p>>2])|0;f=q+80|0;c[f>>2]=ue(12,c[a>>2]|0,c[n>>2]|0,c[o>>2]|0,+g[p>>2])|0;a=q+128|0;c[a>>2]=zj(0)|0;d=q+156|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;sg(q,8);d=q+196|0;c[d>>2]=1;c[q+180>>2]=6;c[q+184>>2]=1;c[q+188>>2]=1;b=Ck(1,6,1,1)|0;c[q+208>>2]=b;b=Fk(b)|0;c[q+192>>2]=b;c[q+204>>2]=Xp(c[d>>2]|0)|0;c[q+200>>2]=Xp(b)|0;b=q+216|0;d=b+40|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));rk(c[h>>2]|0);ul(c[l>>2]|0);Dj(c[a>>2]|0);g[q+64>>2]=0.0;g[q+68>>2]=0.0;g[q+72>>2]=0.0;pe(c[e>>2]|0);pe(c[f>>2]|0);g[q+88>>2]=0.0;i=r;return q|0}function sg(a,b){a=a|0;b=b|0;var d=0,e=0;c[a+144>>2]=b;b=b+5|0;d=a+164|0;c[d>>2]=_p(c[d>>2]|0,b)|0;d=a+168|0;e=c[d>>2]|0;if(e|0)Ek(e);b=Ck(b,6,6,1)|0;c[d>>2]=b;b=Fk(b)|0;e=a+148|0;c[e>>2]=b;d=a+160|0;c[d>>2]=_p(c[d>>2]|0,b)|0;e=c[e>>2]<<3;c[a+152>>2]=e;a=a+156|0;c[a>>2]=_p(c[a>>2]|0,e)|0;return}function tg(a){a=a|0;if(c[a+236>>2]|0){uk(c[a+240>>2]|0);pk(c[a+244>>2]|0);pk(c[a+248>>2]|0);pk(c[a+252>>2]|0)}Re(c[a>>2]|0);ne(c[a+76>>2]|0);ne(c[a+80>>2]|0);Ej(c[a+128>>2]|0);vl(c[a+108>>2]|0);uk(c[a+124>>2]|0);Yp(c[a+136>>2]|0);Yp(c[a+140>>2]|0);Ek(c[a+168>>2]|0);Yp(c[a+156>>2]|0);Yp(c[a+160>>2]|0);Yp(c[a+164>>2]|0);Ek(c[a+208>>2]|0);Yp(c[a+200>>2]|0);Yp(c[a+204>>2]|0);Yp(a);return}function ug(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;G=i;i=i+80|0;if((i|0)>=(j|0))ba();e=G+64|0;f=G+24|0;g=G+8|0;F=G;t=G+56|0;y=G+48|0;z=G+40|0;A=G+32|0;B=G+16|0;if(!d){i=G;return}C=t+4|0;D=a+232|0;h=a+216|0;k=F+4|0;l=a+124|0;m=f+4|0;n=a+108|0;o=a+112|0;p=a+116|0;q=a+120|0;r=g+4|0;s=z+4|0;u=A+4|0;v=B+4|0;w=a+240|0;x=y+4|0;E=0;do{H=c[a>>2]|0;I=c[b+(E<<3)+4>>2]|0;c[t>>2]=c[b+(E<<3)>>2];c[C>>2]=I;c[e>>2]=c[t>>2];c[e+4>>2]=c[t+4>>2];Te(H,e,F);if(c[D>>2]|0){I=c[w>>2]|0;H=c[k>>2]|0;c[y>>2]=c[F>>2];c[x>>2]=H;c[e>>2]=c[y>>2];c[e+4>>2]=c[y+4>>2];tk(I,e)}switch(c[h>>2]|0){case 0:{J=c[F>>2]|0;H=c[k>>2]|0;I=c[l>>2]|0;c[f>>2]=J;c[m>>2]=H;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];tk(I,e);I=c[n>>2]|0;c[g>>2]=J;c[r>>2]=H;c[e>>2]=c[g>>2];c[e+4>>2]=c[g+4>>2];if(wl(I,e,o,p,q)|0)vg(a);break}case 1:{J=c[k>>2]|0;c[z>>2]=c[F>>2];c[s>>2]=J;c[e>>2]=c[z>>2];c[e+4>>2]=c[z+4>>2];wg(a,e);break}case 2:{J=c[k>>2]|0;c[A>>2]=c[F>>2];c[u>>2]=J;c[e>>2]=c[A>>2];c[e+4>>2]=c[A+4>>2];yg(a,e);break}case 3:{J=c[k>>2]|0;c[B>>2]=c[F>>2];c[v>>2]=J;c[e>>2]=c[B>>2];c[e+4>>2]=c[B+4>>2];Ag(a,e);break}default:{}}E=E+1|0}while((E|0)!=(d|0));i=G;return}function vg(a){a=a|0;var b=0.0,d=0,e=0,f=0,h=0.0,k=0,l=0,m=0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0,w=0.0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0;L=i;i=i+80|0;if((i|0)>=(j|0))ba();z=L+64|0;A=L+56|0;B=L+48|0;D=L+40|0;E=L+24|0;J=L+8|0;K=L;F=L+32|0;G=L+16|0;H=a+76|0;pe(c[H>>2]|0);I=a+80|0;pe(c[I>>2]|0);sk(c[a+124>>2]|0,J);b=+g[a+112>>2];if(!(b<.5&b>-.5))Ha(27535,27577,501,27609);C=a+4|0;m=a+8|0;d=_(c[C>>2]<<1,c[m>>2]|0)|0;f=c[a+84>>2]|0;h=+(f>>>0);b=-(b*h);k=a+92|0;g[k>>2]=b;e=~~+dq(+b);l=a+96|0;c[l>>2]=e;d=d+-1|0;if((e|0)<0){do{e=f+e|0;b=h+b;d=d+-1|0}while((e|0)<0);c[l>>2]=e;g[k>>2]=b}c[a+100>>2]=0;y=a+128|0;Fj(c[y>>2]|0,+g[a+116>>2]);e=_((c[m>>2]|0)+(c[a+132>>2]|0)|0,c[C>>2]|0)|0;if(!e){K=a+216|0;c[K>>2]=1;i=L;return}f=F+4|0;k=K+4|0;l=a+64|0;m=a+68|0;p=B+4|0;q=A+4|0;r=D+4|0;s=E+4|0;t=a+72|0;u=G+4|0;x=0;do{if(x>>>0>>0){M=c[y>>2]|0;O=c[J>>2]|0;N=c[O+(x<<3)+4>>2]|0;c[F>>2]=c[O+(x<<3)>>2];c[f>>2]=N;c[z>>2]=c[F>>2];c[z+4>>2]=c[F+4>>2];Mj(M,z,K);Ij(c[y>>2]|0);v=+g[K>>2];w=+g[k>>2];M=c[m>>2]|0;c[B>>2]=c[l>>2];c[p>>2]=M;c[z>>2]=c[B>>2];c[z+4>>2]=c[B+4>>2];Ko(A,z);n=+g[A>>2];o=+g[q>>2];h=v*n-w*o;b=w*n+v*o;if((h!=h|0.0!=0.0)&(b!=b|0.0!=0.0)){ao(D,n,o,v,w);h=+g[D>>2];b=+g[r>>2]}g[E>>2]=h;g[s>>2]=b;c[z>>2]=c[E>>2];c[z+4>>2]=c[E+4>>2];o=+Bo(z);o=o*+((c[C>>2]|0)>>>0);g[t>>2]=o;g[l>>2]=v;g[m>>2]=w;re(c[H>>2]|0,o);re(c[I>>2]|0,+g[t>>2])}else{N=c[J>>2]|0;O=c[N+(x<<3)+4>>2]|0;c[G>>2]=c[N+(x<<3)>>2];c[u>>2]=O;c[z>>2]=c[G>>2];c[z+4>>2]=c[G+4>>2];wg(a,z)}x=x+1|0}while((x|0)!=(e|0));O=a+216|0;c[O>>2]=1;i=L;return}function wg(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0,h=0.0,k=0.0,l=0,m=0.0,n=0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;v=i;i=i+64|0;if((i|0)>=(j|0))ba();s=v+48|0;n=v+40|0;l=v+32|0;q=v+24|0;r=v+8|0;f=v;d=v+16|0;t=a+220|0;u=a+132|0;if((c[t>>2]|0)==(c[u>>2]|0)){Qp(27630,64,1,c[2348]|0)|0;i=v;return}w=a+128|0;x=c[w>>2]|0;y=c[b+4>>2]|0;c[d>>2]=c[b>>2];c[d+4>>2]=y;c[s>>2]=c[d>>2];c[s+4>>2]=c[d+4>>2];Mj(x,s,f);Ij(c[w>>2]|0);p=+g[f>>2];o=+g[f+4>>2];b=a+64|0;f=a+68|0;d=c[f>>2]|0;c[l>>2]=c[b>>2];c[l+4>>2]=d;c[s>>2]=c[l>>2];c[s+4>>2]=c[l+4>>2];Ko(n,s);m=+g[n>>2];k=+g[n+4>>2];h=p*m-o*k;e=o*m+p*k;if((h!=h|0.0!=0.0)&(e!=e|0.0!=0.0)){ao(q,m,k,p,o);h=+g[q>>2];e=+g[q+4>>2]}g[r>>2]=h;g[r+4>>2]=e;c[s>>2]=c[r>>2];c[s+4>>2]=c[r+4>>2];m=+Bo(s);d=a+4|0;m=m*+((c[d>>2]|0)>>>0);g[a+72>>2]=m;g[b>>2]=p;g[f>>2]=o;g[s>>2]=0.0;if(xg(a,m,s)|0?(y=c[t>>2]|0,g[(c[a+140>>2]|0)+(y<<2)>>2]=+g[s>>2]/+((c[d>>2]|0)>>>0),y=y+1|0,c[t>>2]=y,(y|0)==(c[u>>2]|0)):0)c[a+216>>2]=2;i=v;return}function xg(a,b,d){a=a|0;b=+b;d=d|0;var e=0,f=0,h=0,k=0,l=0,m=0,n=0,o=0.0,p=0,q=0,r=0,s=0;s=i;i=i+32|0;if((i|0)>=(j|0))ba();f=s+24|0;r=s+20|0;n=s+16|0;h=s+8|0;k=s;l=a+76|0;re(c[l>>2]|0,b);m=a+80|0;re(c[m>>2]|0,b);g[r>>2]=0.0;g[n>>2]=0.0;if(c[a+232>>2]|0){ok(c[a+244>>2]|0,+g[a+72>>2]);se(c[l>>2]|0,c[a+96>>2]|0,r);ok(c[a+248>>2]|0,+g[r>>2])}q=a+100|0;e=c[q>>2]|0;if((e|0)>=1){n=e;p=0;n=n+-1|0;c[q>>2]=n;b=+g[r>>2];r=a+4|0;r=c[r>>2]|0;o=+(r>>>0);o=b/o;g[d>>2]=o;i=s;return p|0}c[q>>2]=2;p=a+96|0;se(c[l>>2]|0,c[p>>2]|0,r);se(c[m>>2]|0,c[p>>2]|0,n);l=a+88|0;b=+g[l>>2]*.9900000095367432;c[k>>2]=c[r>>2];g[k+4>>2]=0.0;c[f>>2]=c[k>>2];c[f+4>>2]=c[k+4>>2];Ko(h,f);b=b+ +g[h>>2]*+g[n>>2]*.05000000074505806;g[l>>2]=b;l=a+92|0;b=+g[l>>2]+b;g[l>>2]=b;f=~~+dq(+b);c[p>>2]=f;k=c[a+84>>2]|0;if((f|0)<0){o=+(k>>>0);e=c[q>>2]|0;do{f=k+f|0;b=o+b;e=e+-1|0}while((f|0)<0);c[p>>2]=f;g[l>>2]=b;c[q>>2]=e}h=k+-1|0;if(f>>>0<=h>>>0){n=c[q>>2]|0;p=1;n=n+-1|0;c[q>>2]=n;b=+g[r>>2];r=a+4|0;r=c[r>>2]|0;o=+(r>>>0);o=b/o;g[d>>2]=o;i=s;return p|0}o=+(k>>>0);e=c[q>>2]|0;do{f=f-k|0;b=b-o;e=e+1|0}while(f>>>0>h>>>0);c[p>>2]=f;g[l>>2]=b;c[q>>2]=e;n=e;p=1;n=n+-1|0;c[q>>2]=n;b=+g[r>>2];r=a+4|0;r=c[r>>2]|0;o=+(r>>>0);o=b/o;g[d>>2]=o;i=s;return p|0}function yg(b,d){b=b|0;d=d|0;var e=0.0,f=0,h=0,k=0,l=0,m=0,n=0,o=0.0,p=0.0,q=0.0,r=0,s=0.0,t=0.0,u=0,v=0,w=0,x=0;x=i;i=i+96|0;if((i|0)>=(j|0))ba();v=x+48|0;k=x+40|0;r=x+32|0;f=x+16|0;h=x+8|0;u=x;m=x+24|0;w=b+128|0;n=c[w>>2]|0;l=c[d+4>>2]|0;c[m>>2]=c[d>>2];c[m+4>>2]=l;c[v>>2]=c[m>>2];c[v+4>>2]=c[m+4>>2];Mj(n,v,u);Ij(c[w>>2]|0);s=+g[u>>2];t=+g[u+4>>2];d=b+64|0;u=b+68|0;n=c[u>>2]|0;c[r>>2]=c[d>>2];c[r+4>>2]=n;c[v>>2]=c[r>>2];c[v+4>>2]=c[r+4>>2];Ko(k,v);p=+g[k>>2];q=+g[k+4>>2];o=s*p-t*q;e=t*p+s*q;if((o!=o|0.0!=0.0)&(e!=e|0.0!=0.0)){ao(f,p,q,s,t);o=+g[f>>2];e=+g[f+4>>2]}g[h>>2]=o;g[h+4>>2]=e;c[v>>2]=c[h>>2];c[v+4>>2]=c[h+4>>2];q=+Bo(v);q=q*+((c[b+4>>2]|0)>>>0);r=b+72|0;g[r>>2]=q;g[d>>2]=s;g[u>>2]=t;g[k>>2]=0.0;if(!(xg(b,q,k)|0)){i=x;return}m=b+224|0;a[(c[b+156>>2]|0)+(c[m>>2]|0)>>0]=+g[k>>2]>0.0&1;n=(c[m>>2]|0)+1|0;c[m>>2]=n;if((n|0)!=(c[b+152>>2]|0)){i=x;return}zg(b);d=b+172|0;do if(!(c[d>>2]|0)){f=c[b+16>>2]|0;if(f|0){m=b+24|0;g[b+28>>2]=+yp(+g[b+120>>2])*20.0;g[m>>2]=0.0;c[b+36>>2]=0;c[b+40>>2]=0;c[b+44>>2]=0;c[b+48>>2]=1;c[b+52>>2]=0;c[b+56>>2]=0;c[b+60>>2]=0;h=c[b+164>>2]|0;k=c[b+20>>2]|0;l=v;n=l+40|0;do{c[l>>2]=c[m>>2];l=l+4|0;m=m+4|0}while((l|0)<(n|0));ob[f&1](h,0,0,0,0,v,k)|0;v=b+216|0;c[v>>2]=0;c[v+4>>2]=0;c[v+8>>2]=0;c[v+12>>2]=0;rk(c[b+124>>2]|0);ul(c[b+108>>2]|0);Dj(c[w>>2]|0);g[b+64>>2]=0.0;g[u>>2]=0.0;g[r>>2]=0.0;pe(c[b+76>>2]|0);pe(c[b+80>>2]|0);g[b+88>>2]=0.0;if(c[d>>2]|0)break}v=b+216|0;c[v>>2]=0;c[v+4>>2]=0;c[v+8>>2]=0;c[v+12>>2]=0;rk(c[b+124>>2]|0);ul(c[b+108>>2]|0);Dj(c[w>>2]|0);g[b+64>>2]=0.0;g[u>>2]=0.0;g[r>>2]=0.0;pe(c[b+76>>2]|0);pe(c[b+80>>2]|0);g[b+88>>2]=0.0;i=x;return}while(0);c[b+216>>2]=3;i=x;return}function zg(b){b=b|0;var e=0,f=0,g=0,h=0,k=0,l=0,m=0,n=0;n=i;i=i+16|0;if((i|0)>=(j|0))ba();e=n;f=b+160|0;m=b+148|0;ck(c[b+156>>2]|0,c[b+152>>2]|0,c[f>>2]|0,c[m>>2]|0,e);e=c[e>>2]|0;if((e|0)!=(c[m>>2]|0))Ha(29224,27577,762,27695);Oj(c[f>>2]|0,e);e=b+164|0;f=Kk(c[b+168>>2]|0,c[f>>2]|0,c[e>>2]|0)|0;m=b+172|0;c[m>>2]=f;if(!f){i=n;return}h=c[b+144>>2]|0;g=c[e>>2]|0;if((a[g+h>>0]|0)!=4){Qp(27723,64,1,c[2348]|0)|0;c[m>>2]=0;i=n;return}l=d[g+(h+1)>>0]<<8|d[g+(h+2)>>0];e=d[g+(h+3)>>0]|0;k=e>>>5;e=e&31;h=d[g+(h+4)>>0]&31;if((k|0)==7){Qp(27788,70,1,c[2348]|0)|0;c[m>>2]=0;f=0;g=0}else g=k;if(e>>>0>27){Qp(27859,78,1,c[2348]|0)|0;c[m>>2]=0;f=0;e=0}if(h>>>0>27){Qp(27938,78,1,c[2348]|0)|0;c[m>>2]=0;i=n;return}if(!f){i=n;return}m=b+196|0;c[m>>2]=l;c[b+180>>2]=g;c[b+184>>2]=e;c[b+188>>2]=h;f=b+208|0;k=Dk(c[f>>2]|0,l,g,e,h)|0;c[f>>2]=k;k=Fk(k)|0;c[b+192>>2]=k;l=b+200|0;c[l>>2]=_p(c[l>>2]|0,k)|0;b=b+204|0;c[b>>2]=_p(c[b>>2]|0,c[m>>2]|0)|0;i=n;return}function Ag(b,e){b=b|0;e=e|0;var f=0.0,h=0,k=0.0,l=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0,w=0.0,x=0,y=0,z=0,A=0,B=0;B=i;i=i+96|0;if((i|0)>=(j|0))ba();z=B+48|0;o=B+40|0;x=B+32|0;h=B+16|0;n=B+8|0;y=B;t=B+24|0;A=b+128|0;u=c[A>>2]|0;s=c[e+4>>2]|0;c[t>>2]=c[e>>2];c[t+4>>2]=s;c[z>>2]=c[t>>2];c[z+4>>2]=c[t+4>>2];Mj(u,z,y);Ij(c[A>>2]|0);v=+g[y>>2];w=+g[y+4>>2];e=b+64|0;y=b+68|0;u=c[y>>2]|0;c[x>>2]=c[e>>2];c[x+4>>2]=u;c[z>>2]=c[x>>2];c[z+4>>2]=c[x+4>>2];Ko(o,z);l=+g[o>>2];m=+g[o+4>>2];k=v*l-w*m;f=w*l+v*m;if((k!=k|0.0!=0.0)&(f!=f|0.0!=0.0)){ao(h,l,m,v,w);k=+g[h>>2];f=+g[h+4>>2]}g[n>>2]=k;g[n+4>>2]=f;c[z>>2]=c[n>>2];c[z+4>>2]=c[n+4>>2];m=+Bo(z);m=m*+((c[b+4>>2]|0)>>>0);x=b+72|0;g[x>>2]=m;g[e>>2]=v;g[y>>2]=w;g[o>>2]=0.0;if(!(xg(b,m,o)|0)){i=B;return}t=b+176|0;u=((d[t>>0]|0)<<1|+g[o>>2]>0.0)&255;a[t>>0]=u;t=b+228|0;e=b+200|0;a[(c[e>>2]|0)+((c[t>>2]|0)>>>3)>>0]=u;u=(c[t>>2]|0)+1|0;c[t>>2]=u;if((u|0)!=(c[b+192>>2]<<3|0)){i=B;return}h=b+204|0;r=Kk(c[b+208>>2]|0,c[e>>2]|0,c[h>>2]|0)|0;c[b+212>>2]=r;s=c[b+16>>2]|0;if(s|0){p=b+24|0;g[b+28>>2]=+yp(+g[b+120>>2])*20.0;g[p>>2]=0.0;c[b+36>>2]=0;c[b+40>>2]=0;c[b+44>>2]=0;c[b+48>>2]=1;c[b+52>>2]=c[b+180>>2];c[b+56>>2]=c[b+184>>2];c[b+60>>2]=c[b+188>>2];t=c[b+164>>2]|0;u=c[b+172>>2]|0;n=c[h>>2]|0;e=c[b+196>>2]|0;h=c[b+20>>2]|0;o=z;q=o+40|0;do{c[o>>2]=c[p>>2];o=o+4|0;p=p+4|0}while((o|0)<(q|0));ob[s&1](t,u,n,e,r,z,h)|0}z=b+216|0;c[z>>2]=0;c[z+4>>2]=0;c[z+8>>2]=0;c[z+12>>2]=0;rk(c[b+124>>2]|0);ul(c[b+108>>2]|0);Dj(c[A>>2]|0);g[b+64>>2]=0.0;g[y>>2]=0.0;g[x>>2]=0.0;pe(c[b+76>>2]|0);pe(c[b+80>>2]|0);g[b+88>>2]=0.0;i=B;return}function Bg(a){a=a|0;var b=0;b=a+236|0;if(c[b>>2]|0){a=a+232|0;c[a>>2]=1;c[b>>2]=1;return}c[a+240>>2]=qk(2e3)|0;c[a+244>>2]=lk(2e3)|0;c[a+248>>2]=lk(2e3)|0;c[a+252>>2]=lk(2e3)|0;a=a+232|0;c[a>>2]=1;c[b>>2]=1;return}function Cg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0.0,r=0.0;p=i;i=i+96|0;if((i|0)>=(j|0))ba();n=p+80|0;m=p+64|0;k=p+48|0;o=p+24|0;f=p+16|0;e=p+8|0;d=p;if(!(c[a+236>>2]|0)){Qp(28017,86,1,c[2348]|0)|0;i=p;return}l=Ep(b,37318)|0;if(!l){o=c[2348]|0;c[d>>2]=b;Kp(o,28104,d)|0;i=p;return}c[e>>2]=b;Kp(l,28173,e)|0;Qp(37886,2,1,l)|0;Qp(37457,11,1,l)|0;Qp(28200,12,1,l)|0;c[f>>2]=2e3;Kp(l,28213,f)|0;Qp(28232,23,1,l)|0;Qp(28256,26,1,l)|0;sk(c[a+240>>2]|0,f);d=0;do{e=c[f>>2]|0;r=+g[e+(d<<3)>>2];q=+g[e+(d<<3)+4>>2];d=d+1|0;c[o>>2]=d;h[o+8>>3]=r;h[o+16>>3]=q;Kp(l,37712,o)|0}while((d|0)!=2e3);Qp(37886,2,1,l)|0;Qp(37741,8,1,l)|0;Qp(28283,48,1,l)|0;Qp(37815,30,1,l)|0;Qp(37886,2,1,l)|0;Qp(28332,27,1,l)|0;nk(c[a+244>>2]|0,o);d=0;do{r=+g[(c[o>>2]|0)+(d<<2)>>2];d=d+1|0;c[k>>2]=d;h[k+8>>3]=r;Kp(l,28360,k)|0}while((d|0)!=2e3);Qp(37886,2,1,l)|0;Qp(37741,8,1,l)|0;Qp(28379,23,1,l)|0;Qp(28403,23,1,l)|0;Qp(37886,2,1,l)|0;Qp(28427,27,1,l)|0;nk(c[a+248>>2]|0,o);d=0;do{r=+g[(c[o>>2]|0)+(d<<2)>>2];d=d+1|0;c[m>>2]=d;h[m+8>>3]=r;Kp(l,28455,m)|0}while((d|0)!=2e3);Qp(37886,2,1,l)|0;Qp(37741,8,1,l)|0;Qp(28474,23,1,l)|0;Qp(28498,21,1,l)|0;Qp(37886,2,1,l)|0;Hp(l)|0;c[n>>2]=b;Rp(28520,n)|0;i=p;return}function Dg(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0;if(a>>>0<2){Qp(28566,75,1,c[2348]|0)|0;kb(1)}if(a&1|0){Qp(28642,69,1,c[2348]|0)|0;kb(1)}j=Xp(184)|0;c[j>>2]=a;k=j+4|0;c[k>>2]=b;l=j+8|0;c[l>>2]=d;b=a+b|0;i=j+36|0;c[i>>2]=b;c[j+40>>2]=Xp(a<<3)|0;c[j+44>>2]=Xp(b<<3)|0;g=j+48|0;c[g>>2]=b;b=Xp(a)|0;h=j+12|0;c[h>>2]=b;if(!e){_i(a,b);d=c[h>>2]|0;b=c[j>>2]|0}else{fq(b|0,e|0,a|0)|0;d=b;b=a}$i(d,b,j+16|0,j+20|0,j+24|0);a=j+52|0;c[a>>2]=aj(c[j>>2]|0,c[k>>2]|0,c[l>>2]|0,c[h>>2]|0)|0;l=j+64|0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;c[l+16>>2]=0;c[j+84>>2]=8;Eg(j,0);c[j+104>>2]=1;l=Ck(1,1,1,1)|0;c[j+100>>2]=l;l=Fk(l)|0;c[j+120>>2]=l;c[j+112>>2]=Xp(l)|0;c[j+124>>2]=1;c[j+116>>2]=Xp(4)|0;c[j+108>>2]=di(48)|0;Gg(j,f);f=j+128|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;c[g>>2]=c[i>>2];cj(c[a>>2]|0);return j|0}function Eg(a,b){a=a|0;b=b|0;var d=0;b=(b|0)==0?604:b;if(((c[b>>2]|0)+-1|0)>>>0>5){Qp(28712,67,1,c[2348]|0)|0;kb(1)}if(!(c[b+4>>2]|0)){d=c[2348]|0;Qp(28780,67,1,d)|0;kb(1)}if(!(c[b+8>>2]|0)){d=c[2348]|0;Qp(28780,67,1,d)|0;kb(1)}if(!(c[b+12>>2]|0)){Qp(28848,74,1,c[2348]|0)|0;kb(1)}else{gq(a+168|0,b|0,16)|0;Fg(a,c[a+84>>2]|0);return}}function Fg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,k=0;k=i;i=i+16|0;if((i|0)>=(j|0))ba();g=k+8|0;h=k;c[a+84>>2]=b;e=b+6|0;b=a+88|0;c[b>>2]=e;d=a+72|0;c[d>>2]=_p(c[d>>2]|0,e)|0;d=a+68|0;e=c[d>>2]|0;if(e|0)Ek(e);b=Ck(c[b>>2]|0,c[a+168>>2]|0,c[a+172>>2]|0,c[a+176>>2]|0)|0;c[d>>2]=b;b=Fk(b)|0;e=a+92|0;c[e>>2]=b;f=a+76|0;c[f>>2]=_p(c[f>>2]|0,b)|0;f=a+180|0;Vp(g,c[e>>2]<<3,c[636+(c[f>>2]<<4)+12>>2]|0);e=((c[g+4>>2]|0)!=0&1)+(c[g>>2]|0)|0;b=a+96|0;c[b>>2]=e;d=a+80|0;c[d>>2]=_p(c[d>>2]|0,e)|0;d=a+64|0;e=c[d>>2]|0;if(e|0)Hi(e);c[d>>2]=di(c[f>>2]|0)|0;Vp(h,c[b>>2]|0,c[a+24>>2]|0);c[a+56>>2]=((c[h+4>>2]|0)!=0&1)+(c[h>>2]|0);i=k;return}function Gg(a,b){a=a|0;b=b|0;var d=0;while(1)if(!b)b=588;else break;if(((c[b>>2]|0)+-1|0)>>>0>5){Qp(28712,67,1,c[2348]|0)|0;kb(1)}if(!(c[b+4>>2]|0)){d=c[2348]|0;Qp(28780,67,1,d)|0;kb(1)}if(!(c[b+8>>2]|0)){d=c[2348]|0;Qp(28780,67,1,d)|0;kb(1)}if(!(c[b+12>>2]|0)){Qp(28848,74,1,c[2348]|0)|0;kb(1)}else{gq(a+152|0,b|0,16)|0;Hg(a);return}}function Hg(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=i;i=i+16|0;if((i|0)>=(j|0))ba();g=b+8|0;e=b;f=a+100|0;d=Dk(c[f>>2]|0,c[a+104>>2]|0,c[a+152>>2]|0,c[a+156>>2]|0,c[a+160>>2]|0)|0;c[f>>2]=d;d=Fk(d)|0;f=a+120|0;c[f>>2]=d;h=a+112|0;c[h>>2]=_p(c[h>>2]|0,d)|0;h=a+108|0;d=a+164|0;c[h>>2]=Gi(c[h>>2]|0,c[d>>2]|0)|0;Vp(g,c[f>>2]<<3,c[636+(c[d>>2]<<4)+12>>2]|0);g=((c[g+4>>2]|0)!=0&1)+(c[g>>2]|0)|0;d=a+124|0;c[d>>2]=g;f=a+116|0;c[f>>2]=_p(c[f>>2]|0,g<<2)|0;Vp(e,c[d>>2]|0,c[a+24>>2]|0);d=c[e>>2]|0;e=c[e+4>>2]|0;c[a+60>>2]=((e>>>0>0|(e|0)==0&d>>>0>4294967295)&1)+d;i=b;return}function Ig(a){a=a|0;var b=0;b=a+128|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=0;c[b+20>>2]=0;c[a+48>>2]=c[a+36>>2];cj(c[a+52>>2]|0);return}function Jg(a){a=a|0;bj(c[a+52>>2]|0);Ek(c[a+68>>2]|0);Hi(c[a+64>>2]|0);Ek(c[a+100>>2]|0);Hi(c[a+108>>2]|0);Yp(c[a+112>>2]|0);Yp(c[a+116>>2]|0);Yp(c[a+40>>2]|0);Yp(c[a+44>>2]|0);Yp(c[a+12>>2]|0);Yp(c[a+72>>2]|0);Yp(c[a+76>>2]|0);Yp(c[a+80>>2]|0);Yp(a);return}function Kg(a){a=a|0;return c[a+136>>2]|0}function Lg(a){a=a|0;return (c[a+56>>2]|0)+3+(c[a+60>>2]|0)|0}function Mg(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,k=0,l=0,m=0,n=0;n=i;i=i+16|0;if((i|0)>=(j|0))ba();m=b+128|0;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;c[m+12>>2]=0;c[m+16>>2]=0;c[m+20>>2]=0;c[b+48>>2]=c[b+36>>2];cj(c[b+52>>2]|0);m=b+104|0;if((c[m>>2]|0)!=(g|0)){c[m>>2]=g;Hg(b)}c[b+136>>2]=1;g=b+72|0;h=c[g>>2]|0;k=b+84|0;l=c[k>>2]|0;if(!e)eq(h|0,0,l|0)|0;else gq(h|0,e|0,l|0)|0;e=c[k>>2]|0;a[(c[g>>2]|0)+e>>0]=105;a[(c[g>>2]|0)+(e+1)>>0]=(c[m>>2]|0)>>>8;a[(c[g>>2]|0)+(e+2)>>0]=c[m>>2];m=b+164|0;a[(c[g>>2]|0)+(e+3)>>0]=c[m>>2];l=e+4|0;a[(c[g>>2]|0)+l>>0]=c[b+152>>2]<<5;l=(c[g>>2]|0)+l|0;a[l>>0]=d[l>>0]|0|c[b+156>>2]&31;a[(c[g>>2]|0)+(e+5)>>0]=c[b+160>>2]&31;e=b+76|0;Jk(c[b+68>>2]|0,c[g>>2]|0,c[e>>2]|0);l=b+92|0;Nj(c[e>>2]|0,c[l>>2]|0);ek(c[e>>2]|0,8,c[l>>2]|0,c[b+80>>2]|0,c[636+(c[b+180>>2]<<4)+12>>2]|0,c[b+96>>2]|0,n);l=b+112|0;Jk(c[b+100>>2]|0,f,c[l>>2]|0);f=b+116|0;e=b+124|0;eq(c[f>>2]|0,0,c[e>>2]<<2|0)|0;bk(c[l>>2]|0,c[b+120>>2]|0,c[636+(c[m>>2]<<4)+12>>2]|0,c[e>>2]|0,c[f>>2]|0);i=n;return}function Ng(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;if(!d){i=a+140|0;i=c[i>>2]|0;return i|0}f=a+48|0;g=a+36|0;h=a+44|0;i=0;do{e=c[f>>2]|0;if(e>>>0>=(c[g>>2]|0)>>>0){Og(a);c[f>>2]=0;e=0}c[f>>2]=e+1;k=c[h>>2]|0;j=c[k+(e<<3)+4>>2]|0;c[b+(i<<3)>>2]=c[k+(e<<3)>>2];c[b+(i<<3)+4>>2]=j;i=i+1|0}while((i|0)!=(d|0));k=a+140|0;k=c[k>>2]|0;return k|0}function Og(a){a=a|0;var b=0,d=0,e=0,f=0,h=0;b=a+128|0;c[b>>2]=(c[b>>2]|0)+1;f=a+132|0;switch(c[f>>2]|0){case 0:{dj(c[a+52>>2]|0,c[a+44>>2]|0);c[f>>2]=1;return}case 1:{ej(c[a+52>>2]|0,c[a+44>>2]|0);c[f>>2]=2;return}case 2:{fj(c[a+52>>2]|0,c[a+44>>2]|0);c[b>>2]=0;c[f>>2]=3;return}case 3:{Pg(a);return}case 4:{Qg(a);return}case 5:{d=a+36|0;b=a+44|0;if(c[d>>2]|0){e=0;do{h=c[b>>2]|0;g[h+(e<<3)>>2]=0.0;g[h+(e<<3)+4>>2]=0.0;e=e+1|0}while(e>>>0<(c[d>>2]|0)>>>0)}hj(c[a+52>>2]|0,c[b>>2]|0);c[a+140>>2]=1;c[a+136>>2]=0;c[f>>2]=6;return}case 6:{e=a+36|0;if(!(c[e>>2]|0))return;b=a+44|0;d=0;do{h=c[b>>2]|0;g[h+(d<<3)>>2]=0.0;g[h+(d<<3)+4>>2]=0.0;d=d+1|0}while(d>>>0<(c[e>>2]|0)>>>0);return}default:{Qp(28923,74,1,c[2348]|0)|0;kb(1)}}}function Pg(b){b=b|0;var e=0,f=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;if(!(c[b>>2]|0))e=b+40|0;else{i=b+12|0;j=b+144|0;k=b+96|0;l=b+64|0;m=b+80|0;e=b+40|0;n=0;do{do if((a[(c[i>>2]|0)+n>>0]|0)==2){f=c[j>>2]|0;h=c[l>>2]|0;if(f>>>0<(c[k>>2]|0)>>>0){c[j>>2]=f+1;Li(h,d[(c[m>>2]|0)+f>>0]|0,(c[e>>2]|0)+(n<<3)|0);break}else{h=Ii(h)|0;Li(c[l>>2]|0,h,(c[e>>2]|0)+(n<<3)|0);break}}else{h=c[e>>2]|0;g[h+(n<<3)>>2]=0.0;g[h+(n<<3)+4>>2]=0.0}while(0);n=n+1|0}while(n>>>0<(c[b>>2]|0)>>>0)}gj(c[b+52>>2]|0,c[e>>2]|0,c[b+44>>2]|0);e=b+128|0;if((c[e>>2]|0)!=(c[b+56>>2]|0))return;c[e>>2]=0;c[b+132>>2]=4;return}function Qg(b){b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,l=0,m=0;if(!(c[b>>2]|0))d=b+40|0;else{h=b+12|0;i=b+148|0;j=b+124|0;k=b+108|0;l=b+116|0;d=b+40|0;m=0;do{do if((a[(c[h>>2]|0)+m>>0]|0)==2){e=c[i>>2]|0;f=c[k>>2]|0;if(e>>>0<(c[j>>2]|0)>>>0){c[i>>2]=e+1;Li(f,c[(c[l>>2]|0)+(e<<2)>>2]|0,(c[d>>2]|0)+(m<<3)|0);break}else{f=Ii(f)|0;Li(c[k>>2]|0,f,(c[d>>2]|0)+(m<<3)|0);break}}else{f=c[d>>2]|0;g[f+(m<<3)>>2]=0.0;g[f+(m<<3)+4>>2]=0.0}while(0);m=m+1|0}while(m>>>0<(c[b>>2]|0)>>>0)}gj(c[b+52>>2]|0,c[d>>2]|0,c[b+44>>2]|0);if((c[b+128>>2]|0)!=(c[b+60>>2]|0))return;c[b+132>>2]=5;return}function Rg(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0;i=Xp(232)|0;if(a>>>0>=8){if(a&1|0){Qp(29060,70,1,c[2348]|0)|0;kb(1)}if(b>>>0>a>>>0){Qp(29131,92,1,c[2348]|0)|0;kb(1)}}else Qp(28998,61,1,c[2348]|0)|0;c[i>>2]=a;c[i+4>>2]=b;c[i+8>>2]=d;c[i+156>>2]=f;c[i+160>>2]=h;f=Xp(a)|0;h=i+12|0;c[h>>2]=f;if(!e){_i(a,f);f=c[h>>2]|0;h=c[i>>2]|0}else{fq(f|0,e|0,a|0)|0;h=a}$i(f,h,i+16|0,i+20|0,i+24|0);h=i+208|0;c[h>>2]=ij(a,b,d,e,5,i)|0;d=i+40|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[i+60>>2]=8;c[i+36>>2]=0;Wg(i,0);c[i+96>>2]=48;c[i+100>>2]=2;d=i+104|0;c[d>>2]=1;a=i+108|0;c[a>>2]=1;b=i+112|0;c[b>>2]=1;e=i+116|0;c[e>>2]=1;c[i+128>>2]=di(48)|0;c[i+120>>2]=0;e=Ck(c[d>>2]|0,c[a>>2]|0,c[b>>2]|0,c[e>>2]|0)|0;c[i+124>>2]=e;e=Fk(e)|0;c[i+140>>2]=e;c[i+132>>2]=Xp(e)|0;d=c[d>>2]|0;c[i+136>>2]=Xp(d)|0;c[i+152>>2]=Xp(d<<3)|0;c[i+144>>2]=0;d=i+212|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;g[i+204>>2]=9.999999960041972e-13;zl(i+164|0);jj(c[h>>2]|0);return i|0}function Sg(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;b=e+212|0;c[b>>2]=(c[b>>2]|0)+1;switch(c[e+216>>2]|0){case 0:{Tg(e,a);return 0}case 1:{Vg(e,a);return 0}default:{Qp(29705,81,1,c[2348]|0)|0;kb(1)}}return 0}function Tg(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0.0;y=i;i=i+64|0;if((i|0)>=(j|0))ba();w=y+24|0;t=y;h=y+16|0;k=y+8|0;e=c[b>>2]|0;if(!e){i=y;return}n=b+12|0;o=b+36|0;p=b+40|0;q=k+4|0;r=b+220|0;s=b+56|0;x=b+204|0;v=b+72|0;l=b+92|0;m=h+4|0;f=0;while(1){if((a[(c[n>>2]|0)+f>>0]|0)==2){if(!(c[o>>2]|0)){e=c[p>>2]|0;z=c[d+(f<<3)+4>>2]|0;c[k>>2]=c[d+(f<<3)>>2];c[q>>2]=z;c[w>>2]=c[k>>2];c[w+4>>2]=c[k+4>>2];Mi(e,w,t);a[(c[s>>2]|0)+(c[r>>2]|0)>>0]=c[t>>2]}else{e=c[p>>2]|0;A=c[d+(f<<3)+4>>2]|0;z=_(c[r>>2]|0,c[636+(c[l>>2]<<4)+12>>2]|0)|0;z=(c[s>>2]|0)+z|0;c[h>>2]=c[d+(f<<3)>>2];c[m>>2]=A;c[w>>2]=c[h>>2];c[w+4>>2]=c[h+4>>2];Ni(e,w,t,z)}c[r>>2]=(c[r>>2]|0)+1;B=+Ri(c[p>>2]|0);g[x>>2]=+g[x>>2]+B*B;if((c[r>>2]|0)==(c[v>>2]|0))break;e=c[b>>2]|0}f=f+1|0;if(f>>>0>=e>>>0){u=13;break}}if((u|0)==13){i=y;return}Ug(b);p=b+164|0;g[p>>2]=+yp(+g[x>>2]/+((c[v>>2]|0)>>>0))*10.0;e=b+76|0;if(!(c[e>>2]|0)){m=b+208|0;g[b+168>>2]=+vj(c[m>>2]|0);g[b+172>>2]=+wj(c[m>>2]|0);n=b+176|0;c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;c[n+12>>2]=0;c[n+16>>2]=0;c[n+20>>2]=0;c[n+24>>2]=0;n=c[b+156>>2]|0;o=c[b+48>>2]|0;e=c[e>>2]|0;f=c[b+160>>2]|0;h=w;k=p;l=h+40|0;do{c[h>>2]=c[k>>2];h=h+4|0;k=k+4|0}while((h|0)<(l|0));ob[n&1](o,e,0,0,0,w,f)|0;A=b+212|0;c[A>>2]=0;c[A+4>>2]=0;c[A+8>>2]=0;c[A+12>>2]=0;c[A+16>>2]=0;g[x>>2]=9.999999960041972e-13;zl(p);jj(c[m>>2]|0);i=y;return}else{c[b+216>>2]=1;i=y;return}}function Ug(b){b=b|0;var e=0,f=0,g=0,h=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=i;i=i+16|0;if((i|0)>=(j|0))ba();p=q;do if(!(c[b+36>>2]|0)){e=b+52|0;n=b+68|0;ek(c[b+56>>2]|0,c[636+(c[b+92>>2]<<4)+12>>2]|0,c[b+72>>2]|0,c[e>>2]|0,8,c[n>>2]|0,p);f=c[p>>2]|0;if((f|0)==(c[n>>2]|0)){Oj(c[e>>2]|0,f);g=Kk(c[b+44>>2]|0,c[e>>2]|0,c[b+48>>2]|0)|0;o=b+76|0;c[o>>2]=g;break}else Ha(29224,29256,537,29292)}else{g=b+52|0;o=b+68|0;gq(c[g>>2]|0,c[b+56>>2]|0,c[o>>2]|0)|0;Pj(c[g>>2]|0,(c[o>>2]|0)>>>3);g=Lk(c[b+44>>2]|0,c[g>>2]|0,c[b+48>>2]|0)|0;o=b+76|0;c[o>>2]=g}while(0);if(!g){i=q;return}h=c[b+60>>2]|0;e=b+48|0;f=c[e>>2]|0;if((a[f+h>>0]|0)!=105){Qp(29324,68,1,c[2348]|0)|0;c[o>>2]=0;g=0;f=c[e>>2]|0}n=d[f+(h+1)>>0]<<8|d[f+(h+2)>>0];m=a[f+(h+3)>>0]|0;l=m&255;if((m+-1&255)>59){Qp(29393,70,1,c[2348]|0)|0;c[o>>2]=0;i=q;return}k=d[f+(h+4)>>0]|0;e=k>>>5;k=k&31;m=d[f+(h+5)>>0]&31;if((e|0)==7){Qp(29464,74,1,c[2348]|0)|0;c[o>>2]=0;g=0;h=0}else h=e;if(k>>>0>27){Qp(29539,82,1,c[2348]|0)|0;c[o>>2]=0;g=0;f=0}else f=k;if(m>>>0>27){Qp(29622,82,1,c[2348]|0)|0;c[o>>2]=0;i=q;return}if(!g){i=q;return}e=b+96|0;if((l|0)==(c[e>>2]|0))e=b+100|0;else{c[e>>2]=l;e=b+100|0;c[e>>2]=c[636+(l<<4)+12>>2];o=b+128|0;c[o>>2]=Gi(c[o>>2]|0,l)|0}g=b+104|0;c[g>>2]=n;c[b+108>>2]=h;c[b+112>>2]=f;c[b+116>>2]=m;o=b+124|0;f=Dk(c[o>>2]|0,n,h,f,m)|0;c[o>>2]=f;o=(c[b+120>>2]|0)==0;f=Fk(f)|0;e=c[e>>2]|0;if(o){o=b+140|0;c[o>>2]=f;Vp(p,f<<3,e);f=o;e=((c[p+4>>2]|0)!=0&1)+(c[p>>2]|0)|0}else{o=f<<3;f=b+140|0;c[f>>2]=o;Vp(p,o,e);e=((c[p+4>>2]|0)!=0&1)+(c[p>>2]|0)|0}p=b+144|0;c[p>>2]=e;o=b+132|0;c[o>>2]=_p(c[o>>2]|0,c[f>>2]|0)|0;o=b+136|0;c[o>>2]=_p(c[o>>2]|0,c[g>>2]|0)|0;b=b+152|0;c[b>>2]=_p(c[b>>2]|0,c[p>>2]<<3)|0;i=q;return}function Vg(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;C=i;i=i+64|0;if((i|0)>=(j|0))ba();B=C+24|0;u=C;l=C+16|0;m=C+8|0;e=c[b>>2]|0;if(!e){i=C;return}q=b+12|0;r=b+224|0;A=b+152|0;x=b+120|0;s=b+128|0;t=m+4|0;w=b+132|0;n=b+140|0;o=b+228|0;y=b+100|0;z=b+144|0;p=l+4|0;k=0;while(1){if((a[(c[q>>2]|0)+k>>0]|0)==2){f=d+(k<<3)|0;h=d+(k<<3)+4|0;E=c[h>>2]|0;e=c[r>>2]|0;D=c[A>>2]|0;c[D+(e<<3)>>2]=c[f>>2];c[D+(e<<3)+4>>2]=E;e=c[s>>2]|0;f=c[f>>2]|0;h=c[h>>2]|0;if(!(c[x>>2]|0)){c[m>>2]=f;c[t>>2]=h;c[B>>2]=c[m>>2];c[B+4>>2]=c[m+4>>2];Mi(e,B,u);$j(c[w>>2]|0,c[n>>2]|0,c[o>>2]|0,c[y>>2]|0,c[u>>2]|0);c[o>>2]=(c[o>>2]|0)+(c[y>>2]|0)}else{E=_(c[r>>2]|0,c[y>>2]|0)|0;E=(c[w>>2]|0)+E|0;c[l>>2]=f;c[p>>2]=h;c[B>>2]=c[l>>2];c[B+4>>2]=c[l+4>>2];Ni(e,B,u,E)}E=(c[r>>2]|0)+1|0;c[r>>2]=E;if((E|0)==(c[z>>2]|0))break;e=c[b>>2]|0}k=k+1|0;if(k>>>0>=e>>>0){v=16;break}}if((v|0)==16){i=C;return}h=c[b+124>>2]|0;e=c[w>>2]|0;k=b+136|0;f=c[k>>2]|0;if(!(c[x>>2]|0))e=Kk(h,e,f)|0;else e=Lk(h,e,f)|0;f=b+148|0;c[f>>2]=e;e=b+156|0;if(!(c[e>>2]|0)){E=b+212|0;c[E>>2]=0;c[E+4>>2]=0;c[E+8>>2]=0;c[E+12>>2]=0;c[E+16>>2]=0;g[b+204>>2]=9.999999960041972e-13;zl(b+164|0);jj(c[b+208>>2]|0);i=C;return}else{r=b+208|0;s=b+164|0;g[b+168>>2]=+vj(c[r>>2]|0);g[b+172>>2]=+wj(c[r>>2]|0);c[b+176>>2]=c[A>>2];c[b+180>>2]=c[z>>2];c[b+184>>2]=c[b+96>>2];c[b+188>>2]=c[y>>2];c[b+192>>2]=c[b+108>>2];c[b+196>>2]=c[b+112>>2];c[b+200>>2]=c[b+116>>2];o=c[e>>2]|0;p=c[b+48>>2]|0;q=c[b+76>>2]|0;n=c[k>>2]|0;m=c[b+104>>2]|0;e=c[f>>2]|0;f=c[b+160>>2]|0;h=B;k=s;l=h+40|0;do{c[h>>2]=c[k>>2];h=h+4|0;k=k+4|0}while((h|0)<(l|0));ob[o&1](p,q,n,m,e,B,f)|0;E=b+212|0;c[E>>2]=0;c[E+4>>2]=0;c[E+8>>2]=0;c[E+12>>2]=0;c[E+16>>2]=0;g[b+204>>2]=9.999999960041972e-13;zl(s);jj(c[r>>2]|0);i=C;return}}function Wg(a,b){a=a|0;b=b|0;var d=0;b=(b|0)==0?620:b;if(((c[b>>2]|0)+-1|0)>>>0>5){Qp(29787,76,1,c[2348]|0)|0;kb(1)}if(!(c[b+4>>2]|0)){d=c[2348]|0;Qp(29864,76,1,d)|0;kb(1)}if(!(c[b+8>>2]|0)){d=c[2348]|0;Qp(29864,76,1,d)|0;kb(1)}if(!(c[b+12>>2]|0)){Qp(29941,83,1,c[2348]|0)|0;kb(1)}else{gq(a+80|0,b|0,16)|0;Xg(a,c[a+60>>2]|0);return}}function Xg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=i;i=i+16|0;if((i|0)>=(j|0))ba();f=g;c[a+60>>2]=b;e=b+6|0;b=a+64|0;c[b>>2]=e;d=a+48|0;c[d>>2]=_p(c[d>>2]|0,e)|0;d=a+44|0;e=c[d>>2]|0;if(e|0)Ek(e);b=Ck(c[b>>2]|0,c[a+80>>2]|0,c[a+84>>2]|0,c[a+88>>2]|0)|0;c[d>>2]=b;e=(c[a+36>>2]|0)==0;b=Fk(b)|0;if(e){d=a+68|0;c[d>>2]=b;Vp(f,b<<3,c[636+(c[a+92>>2]<<4)+12>>2]|0);b=((c[f+4>>2]|0)!=0&1)+(c[f>>2]|0)|0;d=c[d>>2]|0}else{d=b<<3;c[a+68>>2]=d;b=d}f=a+72|0;c[f>>2]=b;b=a+52|0;c[b>>2]=_p(c[b>>2]|0,d)|0;b=a+56|0;c[b>>2]=_p(c[b>>2]|0,c[f>>2]|0)|0;b=a+40|0;d=c[b>>2]|0;if(!d){a=a+92|0;a=c[a>>2]|0;a=di(a)|0;c[b>>2]=a;i=g;return}Hi(d);a=a+92|0;a=c[a>>2]|0;a=di(a)|0;c[b>>2]=a;i=g;return}function Yg(a){a=a|0;kj(c[a+208>>2]|0);Ek(c[a+44>>2]|0);Hi(c[a+40>>2]|0);Ek(c[a+124>>2]|0);Hi(c[a+128>>2]|0);Yp(c[a+12>>2]|0);Yp(c[a+132>>2]|0);Yp(c[a+136>>2]|0);Yp(c[a+152>>2]|0);Yp(c[a+48>>2]|0);Yp(c[a+52>>2]|0);Yp(c[a+56>>2]|0);Yp(a);return}function Zg(a,b){a=a|0;b=b|0;c[a+36>>2]=b;Xg(a,c[a+60>>2]|0);return}function _g(a,b){a=a|0;b=b|0;c[a+120>>2]=b;return}function $g(a,b,d){a=a|0;b=b|0;d=d|0;lj(c[a+208>>2]|0,b,d);return}function ah(a){a=a|0;xj(c[a+208>>2]|0);return}function bh(a,b){a=a|0;b=b|0;yj(c[a+208>>2]|0,b);return}function ch(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,l=0,m=0;if(!b){Qp(30025,63,1,c[2348]|0)|0;kb(1)}else{d=Xp(96)|0;c[d>>2]=b;h=b<<3;m=Xp(h)|0;i=d+4|0;c[i>>2]=m;fq(m|0,a|0,h|0)|0;g[d+12>>2]=+Bk(m,b);m=1<<(Rh(c[d>>2]<<1)|0);b=d+32|0;c[b>>2]=m;h=m<<3;l=Xp(h)|0;e=d+16|0;c[e>>2]=l;k=Xp(h)|0;a=d+20|0;c[a>>2]=k;f=d+24|0;c[f>>2]=Xp(h)|0;j=d+28|0;c[j>>2]=Xp(h)|0;h=d+36|0;c[h>>2]=Mk(m,l,k,1,0)|0;c[d+40>>2]=Mk(c[b>>2]|0,c[f>>2]|0,c[j>>2]|0,-1,0)|0;j=c[b>>2]<<3;f=d+8|0;c[f>>2]=Xp(j)|0;eq(c[e>>2]|0,0,j|0)|0;gq(c[e>>2]|0,c[i>>2]|0,c[d>>2]<<3|0)|0;el(c[h>>2]|0);gq(c[f>>2]|0,c[a>>2]|0,c[b>>2]<<3|0)|0;a=c[b>>2]|0;c[d+44>>2]=a>>>1;c[d+56>>2]=0;g[d+60>>2]=0.0;g[d+64>>2]=0.0;c[d+88>>2]=0;c[d+92>>2]=0;eq(c[e>>2]|0,0,a<<3|0)|0;a=d+72|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=0;g[d+48>>2]=.5;b=~~(+((c[b>>2]|0)>>>0)*.30000001192092896/6.283185307179586);c[d+52>>2]=(b|0)<0?0:b;return d|0}return 0}function dh(a,b){a=a|0;b=+b;var d=0,e=0;e=i;i=i+16|0;if((i|0)>=(j|0))ba();d=e;if(b<=0.0|b>2.0){a=c[2348]|0;h[d>>3]=b;Kp(a,30089,d)|0;i=e;return}else{g[a+48>>2]=b;i=e;return}}function eh(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=+h;var k=0.0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;r=i;i=i+16|0;if((i|0)>=(j|0))ba();m=r+8|0;n=r;if(!b){Qp(30141,70,1,c[2348]|0)|0;kb(1)}if((e+-2|0)>>>0>78){Qp(30212,76,1,c[2348]|0)|0;kb(1)}if((f+-1|0)>>>0>99){Qp(30289,71,1,c[2348]|0)|0;kb(1)}if(h<0.0|h>1.0){Qp(30361,80,1,c[2348]|0)|0;kb(1)}o=(f<<1)+b|0;p=_(o,e)|0;q=Xp(p<<3)|0;d=Ee(d,e,f,h,0.0)|0;if(!o){Fe(d);b=ch(q,p)|0;Yp(q);i=r;return b|0}f=n+4|0;l=0;do{if(l>>>0>>0){h=+g[a+(l<<3)>>2];k=+g[a+(l<<3)+4>>2]}else{h=0.0;k=0.0}s=q+((_(l,e)|0)<<3)|0;g[n>>2]=h;g[f>>2]=k;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];Je(d,m,s);l=l+1|0}while((l|0)!=(o|0));Fe(d);s=ch(q,p)|0;Yp(q);i=r;return s|0}function fh(a){a=a|0;Yp(c[a+4>>2]|0);Yp(c[a+8>>2]|0);Yp(c[a+16>>2]|0);Yp(c[a+20>>2]|0);Yp(c[a+24>>2]|0);Yp(c[a+28>>2]|0);dl(c[a+36>>2]|0);dl(c[a+40>>2]|0);Yp(a);return}function gh(a){a=a|0;return}function hh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=i;i=i+32|0;if((i|0)>=(j|0))ba();d=g+16|0;e=g+8|0;f=g;switch(c[a+88>>2]|0){case 0:{f=c[b+4>>2]|0;c[e>>2]=c[b>>2];c[e+4>>2]=f;c[d>>2]=c[e>>2];c[d+4>>2]=c[e+4>>2];ih(a,d);break}case 1:{e=c[b+4>>2]|0;c[f>>2]=c[b>>2];c[f+4>>2]=e;c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];jh(a,d);break}default:{}}d=a+92|0;if(!(c[d>>2]|0)){a=0;i=g;return a|0}c[d>>2]=0;a=c[a+28>>2]|0;i=g;return a|0}function ih(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0,h=0.0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,P=0,Q=0,R=0,S=0;Q=i;i=i+48|0;if((i|0)>=(j|0))ba();E=Q+40|0;F=Q+32|0;G=Q+24|0;H=Q+16|0;I=Q+8|0;J=Q;N=c[b>>2]|0;M=c[b+4>>2]|0;P=a+44|0;b=c[P>>2]|0;c[P>>2]=b+1;L=a+16|0;K=c[L>>2]|0;c[K+(b<<3)>>2]=N;c[K+(b<<3)+4>>2]=M;p=(c[k>>2]=N,+g[k>>2]);s=(c[k>>2]=M,+g[k>>2]);M=a+64|0;g[M>>2]=+g[M>>2]+(p*p+s*s);N=a+32|0;b=c[N>>2]|0;if((c[P>>2]|0)>>>0>>0){i=Q;return}c[P>>2]=b>>>1;el(c[a+36>>2]|0);K=a+60|0;p=+O(+(+g[K>>2]+ +g[M>>2]));f=c[N>>2]|0;s=+(f>>>0);s=s*(p*+O(+(+((c[a>>2]|0)>>>0)/s)));s=1.0/(s*+O(+(+g[a+12>>2])));t=a+52|0;D=c[t>>2]|0;b=0-D|0;if((D|0)<(b|0)){e=0;b=0;d=0.0}else{u=a+40|0;v=a+28|0;w=I+4|0;x=J+4|0;y=a+20|0;z=a+8|0;A=G+4|0;B=F+4|0;C=H+4|0;D=a+24|0;r=b;e=0;b=0;d=0.0;while(1){if(f|0){q=0;do{R=((q-r+f|0)>>>0)%(f>>>0)|0;S=c[y>>2]|0;m=+g[S+(q<<3)>>2];n=+g[S+(q<<3)+4>>2];S=c[z>>2]|0;f=c[S+(R<<3)+4>>2]|0;c[G>>2]=c[S+(R<<3)>>2];c[A>>2]=f;c[E>>2]=c[G>>2];c[E+4>>2]=c[G+4>>2];Ko(F,E);o=+g[F>>2];p=+g[B>>2];l=m*o-n*p;h=n*o+m*p;if((l!=l|0.0!=0.0)&(h!=h|0.0!=0.0)){ao(H,m,n,o,p);l=+g[H>>2];h=+g[C>>2]}f=c[D>>2]|0;g[f+(q<<3)>>2]=l;g[f+(q<<3)+4>>2]=h;q=q+1|0;f=c[N>>2]|0}while(q>>>0>>0)}el(c[u>>2]|0);S=c[v>>2]|0;R=c[N>>2]|0;g[I>>2]=s;g[w>>2]=0.0;c[E>>2]=c[I>>2];c[E+4>>2]=c[I+4>>2];fk(S,R,E,S);if(!(c[N>>2]|0))f=0;else{q=0;do{S=c[v>>2]|0;f=c[S+(q<<3)+4>>2]|0;c[J>>2]=c[S+(q<<3)>>2];c[x>>2]=f;c[E>>2]=c[J>>2];c[E+4>>2]=c[J+4>>2];p=+wo(E);f=p>d;d=f?p:d;e=f?q:e;b=f?r:b;q=q+1|0;f=c[N>>2]|0}while(q>>>0>>0)}if((r|0)<(c[t>>2]|0))r=r+1|0;else break}}S=a+56|0;c[S>>2]=(c[S>>2]|0)+1;if(d>+g[a+48>>2]?e>>>0<(f-(c[a>>2]|0)|0)>>>0:0){c[a+88>>2]=1;c[a+68>>2]=b;S=c[L>>2]|0;gq(S|0,S+(e<<3)|0,f-e<<3|0)|0;c[P>>2]=(c[N>>2]|0)-e;i=Q;return}R=c[L>>2]|0;S=f>>>1;gq(R|0,R+(S<<3)|0,S<<3|0)|0;c[K>>2]=c[M>>2];g[M>>2]=0.0;i=Q;return}function jh(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0,h=0,k=0.0,l=0.0,m=0,n=0,o=0.0,p=0.0,q=0.0,r=0,s=0.0,t=0.0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;U=i;i=i+144|0;if((i|0)>=(j|0))ba();S=U+136|0;x=U+128|0;y=U+120|0;z=U+112|0;A=U+104|0;B=U+96|0;C=U+88|0;E=U+80|0;F=U+72|0;G=U+64|0;H=U+56|0;I=U+48|0;J=U+40|0;K=U+32|0;L=U+24|0;M=U+16|0;N=U+8|0;T=U;v=c[b>>2]|0;w=c[b+4>>2]|0;P=a+44|0;R=c[P>>2]|0;c[P>>2]=R+1;Q=a+16|0;D=c[Q>>2]|0;c[D+(R<<3)>>2]=v;c[D+(R<<3)+4>>2]=w;R=a+32|0;if((c[P>>2]|0)>>>0<(c[R>>2]|0)>>>0){i=U;return}D=a+36|0;el(c[D>>2]|0);b=c[R>>2]|0;if(b|0){h=a+68|0;m=a+20|0;n=a+8|0;r=y+4|0;u=x+4|0;v=z+4|0;w=a+24|0;f=0;do{V=((b+f-(c[h>>2]|0)|0)>>>0)%(b>>>0)|0;W=c[m>>2]|0;k=+g[W+(f<<3)>>2];l=+g[W+(f<<3)+4>>2];W=c[n>>2]|0;b=c[W+(V<<3)+4>>2]|0;c[y>>2]=c[W+(V<<3)>>2];c[r>>2]=b;c[S>>2]=c[y>>2];c[S+4>>2]=c[y+4>>2];Ko(x,S);o=+g[x>>2];p=+g[u>>2];e=k*o-l*p;d=l*o+k*p;if((e!=e|0.0!=0.0)&(d!=d|0.0!=0.0)){ao(z,k,l,o,p);e=+g[z>>2];d=+g[v>>2]}b=c[w>>2]|0;g[b+(f<<3)>>2]=e;g[b+(f<<3)+4>>2]=d;f=f+1|0;b=c[R>>2]|0}while(f>>>0>>0)}el(c[a+40>>2]|0);V=(c[R>>2]|0)+-1|0;v=a+28|0;z=c[v>>2]|0;W=c[z+(V<<3)+4>>2]|0;c[A>>2]=c[z+(V<<3)>>2];c[A+4>>2]=W;c[S>>2]=c[A>>2];c[S+4>>2]=c[A+4>>2];q=+O(+(+wo(S)));W=c[v>>2]|0;V=c[W+4>>2]|0;c[B>>2]=c[W>>2];c[B+4>>2]=V;c[S>>2]=c[B>>2];c[S+4>>2]=c[B+4>>2];p=+O(+(+wo(S)));V=c[v>>2]|0;W=c[V+12>>2]|0;c[C>>2]=c[V+8>>2];c[C+4>>2]=W;c[S>>2]=c[C>>2];c[S+4>>2]=c[C+4>>2];t=+O(+(+wo(S)));s=(q+t)*.5-p;q=(t-q)*.5;t=-q/(s*2.0);g[a+72>>2]=t;t=p+(q*t+t*(s*t));W=c[R>>2]|0;g[a+76>>2]=t*t/(+(W>>>0)*+g[a+12>>2]);gq(c[v>>2]|0,c[Q>>2]|0,W<<3|0)|0;if(c[R>>2]|0){b=a+4|0;f=F+4|0;h=E+4|0;m=G+4|0;u=0;do{if(u>>>0<(c[a>>2]|0)>>>0){V=c[b>>2]|0;W=c[V+(u<<3)+4>>2]|0;c[F>>2]=c[V+(u<<3)>>2];c[f>>2]=W;c[S>>2]=c[F>>2];c[S+4>>2]=c[F+4>>2];Ko(E,S);o=+g[E>>2];p=+g[h>>2]}else{o=0.0;p=0.0}r=c[Q>>2]|0;n=r+(u<<3)|0;k=+g[n>>2];r=r+(u<<3)+4|0;l=+g[r>>2];e=o*k-p*l;d=p*k+o*l;if((e!=e|0.0!=0.0)&(d!=d|0.0!=0.0)){ao(G,k,l,o,p);e=+g[G>>2];d=+g[m>>2]}g[n>>2]=e;g[r>>2]=d;u=u+1|0}while(u>>>0<(c[R>>2]|0)>>>0)}el(c[D>>2]|0);n=a+20|0;if(!(c[R>>2]|0)){f=0;b=0;d=0.0}else{h=H+4|0;m=0;b=0;d=0.0;do{W=c[n>>2]|0;f=c[W+(m<<3)+4>>2]|0;c[H>>2]=c[W+(m<<3)>>2];c[h>>2]=f;c[S>>2]=c[H>>2];c[S+4>>2]=c[H+4>>2];t=+wo(S);f=t>d;b=f?m:b;d=f?t:d;m=m+1|0;f=c[R>>2]|0}while(m>>>0>>0)}H=((b+-1+f|0)>>>0)%(f>>>0)|0;W=((b+1|0)>>>0)%(f>>>0)|0;f=c[n>>2]|0;V=c[f+(H<<3)+4>>2]|0;c[I>>2]=c[f+(H<<3)>>2];c[I+4>>2]=V;c[S>>2]=c[I>>2];c[S+4>>2]=c[I+4>>2];s=+wo(S);V=c[n>>2]|0;f=c[V+(W<<3)+4>>2]|0;c[J>>2]=c[V+(W<<3)>>2];c[J+4>>2]=f;c[S>>2]=c[J>>2];c[S+4>>2]=c[J+4>>2];t=+wo(S);t=+(b>>>0)+-((t-s)*.5)/(((s+t)*.5-d)*2.0);f=c[R>>2]|0;d=+(f>>>0);d=(b>>>0>f>>>1>>>0?t-d:t)*2.0*3.141592653589793/d;f=a+80|0;g[f>>2]=d;a:do if(!(c[a>>2]|0)){e=0.0;d=0.0}else{h=K+4|0;m=M+4|0;n=L+4|0;r=N+4|0;k=d;b=0;e=0.0;d=0.0;while(1){W=c[Q>>2]|0;s=+g[W+(b<<3)>>2];t=+g[W+(b<<3)+4>>2];q=k*-0.0;o=-k;p=+(b>>>0);l=p*q-q;k=p*o+q*0.0;if((l!=l|0.0!=0.0)&(k!=k|0.0!=0.0)){ao(K,q,o,p,0.0);l=+g[K>>2];k=+g[h>>2]}g[M>>2]=l;g[m>>2]=k;c[S>>2]=c[M>>2];c[S+4>>2]=c[M+4>>2];Io(L,S);o=+g[L>>2];p=+g[n>>2];k=s*o-t*p;l=t*o+s*p;if((k!=k|0.0!=0.0)&(l!=l|0.0!=0.0)){ao(N,s,t,o,p);k=+g[N>>2];l=+g[r>>2]}e=e+k;d=d+l;b=b+1|0;if(b>>>0>=(c[a>>2]|0)>>>0)break a;k=+g[f>>2]}}while(0);g[T>>2]=e;g[T+4>>2]=d;c[S>>2]=c[T>>2];c[S+4>>2]=c[T+4>>2];g[a+84>>2]=+Bo(S);c[a+92>>2]=1;W=(c[R>>2]|0)>>>1;gq(c[Q>>2]|0,(c[v>>2]|0)+(W<<3)|0,W<<3|0)|0;c[a+88>>2]=0;g[a+60>>2]=+Bk(c[Q>>2]|0,(c[R>>2]|0)>>>1);g[a+64>>2]=0.0;c[P>>2]=(c[R>>2]|0)>>>1;i=U;return}function kh(a){a=a|0;return c[a+32>>2]|0}function lh(a){a=a|0;return +(+g[a+72>>2])}function mh(a){a=a|0;return +(+g[a+76>>2])}function nh(a){a=a|0;return +(+g[a+80>>2])}function oh(a){a=a|0;return +(+g[a+84>>2])}function ph(){var a=0,b=0,d=0,e=0,f=0;a=i;i=i+16|0;if((i|0)>=(j|0))ba();e=a;b=Xp(36)|0;c[b>>2]=di(48)|0;c[b+8>>2]=2;c[b+12>>2]=1;d=Ck(1,1,1,1)|0;c[b+4>>2]=d;d=Fk(d)|0;c[b+24>>2]=d;f=d<<3;c[b+28>>2]=f;Vp(e,f,2);c[b+16>>2]=Xp(((c[e+4>>2]|0)!=0&1)+(c[e>>2]|0)<<1)|0;c[b+32>>2]=d<<1;c[b+20>>2]=Xp(d<<3)|0;i=a;return b|0}function qh(a){a=a|0;Ek(c[a+4>>2]|0);Hi(c[a>>2]|0);Yp(c[a+16>>2]|0);Yp(c[a+20>>2]|0);Yp(a);return}function rh(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,k=0,l=0,m=0;h=i;i=i+16|0;if((i|0)>=(j|0))ba();l=h;m=a+12|0;c[m>>2]=b;b=Gi(c[a>>2]|0,g)|0;c[a>>2]=b;k=a+8|0;c[k>>2]=Ji(b)|0;b=a+4|0;f=Dk(c[b>>2]|0,c[m>>2]|0,d,e,f)|0;c[b>>2]=f;f=Fk(f)|0;c[a+24>>2]=f;f=f<<3;c[a+28>>2]=f;Vp(l,f,c[k>>2]|0);f=((c[l+4>>2]|0)!=0&1)+(c[l>>2]|0)|0;b=a+32|0;c[b>>2]=f;g=a+16|0;c[g>>2]=_p(c[g>>2]|0,_(c[k>>2]|0,f)|0)|0;a=a+20|0;c[a>>2]=_p(c[a>>2]|0,c[b>>2]<<2)|0;i=h;return 0}function sh(a){a=a|0;return c[a+32>>2]|0}function th(a){a=a|0;return Gk(c[a+4>>2]|0)|0}function uh(a){a=a|0;return Hk(c[a+4>>2]|0)|0}function vh(a){a=a|0;return Ik(c[a+4>>2]|0)|0}function wh(a){a=a|0;return Ki(c[a>>2]|0)|0}function xh(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=a+20|0;e=c[f>>2]|0;g=a+16|0;Jk(c[a+4>>2]|0,b,c[g>>2]|0);b=a+32|0;eq(c[f>>2]|0,0,c[b>>2]<<2|0)|0;bk(c[g>>2]|0,c[a+24>>2]|0,c[a+8>>2]|0,c[b>>2]|0,e);if(!(c[b>>2]|0))return;e=0;do{Li(c[a>>2]|0,c[(c[f>>2]|0)+(e<<2)>>2]|0,d+(e<<3)|0);e=e+1|0}while(e>>>0<(c[b>>2]|0)>>>0);return}function yh(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;p=i;i=i+32|0;if((i|0)>=(j|0))ba();f=p+16|0;o=p+8|0;g=p;h=a+32|0;if(!(c[h>>2]|0)){n=a+16|0;o=a+4|0;o=c[o>>2]|0;a=c[n>>2]|0;a=Kk(o,a,d)|0;i=p;return a|0}k=g+4|0;e=a+16|0;l=a+24|0;m=a+8|0;n=0;do{q=c[a>>2]|0;r=c[b+(n<<3)+4>>2]|0;c[g>>2]=c[b+(n<<3)>>2];c[k>>2]=r;c[f>>2]=c[g>>2];c[f+4>>2]=c[g+4>>2];Mi(q,f,o);q=c[m>>2]|0;r=_(q,n)|0;$j(c[e>>2]|0,c[l>>2]|0,r,q,c[o>>2]|0);n=n+1|0}while(n>>>0<(c[h>>2]|0)>>>0);q=a+4|0;q=c[q>>2]|0;r=c[e>>2]|0;r=Kk(q,r,d)|0;i=p;return r|0}function zh(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;r=i;i=i+32|0;if((i|0)>=(j|0))ba();h=r+16|0;q=r+8|0;k=r;l=a+32|0;if(!(c[l>>2]|0)){g=0;f=c[a+8>>2]|0;e=0}else{m=a+16|0;n=k+4|0;o=a+8|0;p=0;e=0;do{g=c[a>>2]|0;s=c[b+(p<<3)+4>>2]|0;f=(c[m>>2]|0)+e|0;c[k>>2]=c[b+(p<<3)>>2];c[n>>2]=s;c[h>>2]=c[k>>2];c[h+4>>2]=c[k+4>>2];Ni(g,h,q,f);f=c[o>>2]|0;e=f+e|0;p=p+1|0;g=c[l>>2]|0}while(p>>>0>>0)}if((e|0)==(_(f,g)|0)){s=Lk(c[a+4>>2]|0,c[a+16>>2]|0,d)|0;i=r;return s|0}else Ha(30442,30489,315,30520);return 0}function Ah(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0.0;o=i;i=i+32|0;if((i|0)>=(j|0))ba();k=o+24|0;d=o+16|0;l=o+8|0;m=o;if(!a){Qp(30545,66,1,c[2348]|0)|0;kb(1)}if(b>>>0<2){Qp(30612,68,1,c[2348]|0)|0;kb(1)}n=Xp(20)|0;c[n>>2]=a;c[n+4>>2]=b;Vp(d,a,b+-1|0);h=((c[d+4>>2]|0)!=0&1)+(c[d>>2]|0)|0;c[n+8>>2]=h;c[n+12>>2]=h+a;b=Xp(h<<3)|0;c[n+16>>2]=b;d=Rj(Rh(h)|0)|0;if(!h){Sj(d);i=o;return n|0}a=m+4|0;e=l+4|0;f=0;do{q=+((Uj(d,2)|0)>>>0)*6.283185307179586*.25+.7853981633974483;g[m>>2]=q*0.0;g[a>>2]=q;c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];Io(l,k);p=c[e>>2]|0;c[b+(f<<3)>>2]=c[l>>2];c[b+(f<<3)+4>>2]=p;f=f+1|0}while(f>>>0>>0);Sj(d);i=o;return n|0}function Bh(a){a=a|0;Yp(c[a+16>>2]|0);Yp(a);return}function Ch(a){a=a|0;return c[a+12>>2]|0}function Dh(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;g=a+12|0;if(!(c[g>>2]|0)){f=0;e=0}else{h=a+4|0;i=a+16|0;j=0;f=0;e=0;do{if(!((j>>>0)%((c[h>>2]|0)>>>0)|0)){l=c[i>>2]|0;k=c[l+(e<<3)+4>>2]|0;c[d+(j<<3)>>2]=c[l+(e<<3)>>2];c[d+(j<<3)+4>>2]=k;e=e+1|0}else{l=c[b+(f<<3)+4>>2]|0;c[d+(j<<3)>>2]=c[b+(f<<3)>>2];c[d+(j<<3)+4>>2]=l;f=f+1|0}j=j+1|0}while(j>>>0<(c[g>>2]|0)>>>0)}if((f|0)!=(c[a>>2]|0))Ha(30681,30702,157,30730);if((e|0)==(c[a+8>>2]|0))return;else Ha(30748,30702,158,30730)}function Eh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0.0;p=i;i=i+32|0;if((i|0)>=(j|0))ba();l=p+24|0;d=p+16|0;m=p+8|0;n=p;if(!a){Qp(30768,67,1,c[2348]|0)|0;kb(1)}if(b>>>0<2){Qp(30836,69,1,c[2348]|0)|0;kb(1)}o=Xp(48)|0;c[o>>2]=a;c[o+4>>2]=b;Vp(d,a,b+-1|0);f=((c[d+4>>2]|0)!=0&1)+(c[d>>2]|0)|0;h=o+8|0;c[h>>2]=f;c[o+12>>2]=f+a;b=Xp(f<<3)|0;c[o+16>>2]=b;k=Rj(Rh(f)|0)|0;if(!f)b=0;else{d=n+4|0;a=m+4|0;e=0;do{r=+((Uj(k,2)|0)>>>0)*6.283185307179586*.25+.7853981633974483;g[n>>2]=r*0.0;g[d>>2]=r;c[l>>2]=c[n>>2];c[l+4>>2]=c[n+4>>2];Io(m,l);q=c[a>>2]|0;c[b+(e<<3)>>2]=c[m>>2];c[b+(e<<3)+4>>2]=q;e=e+1|0}while(e>>>0>>0);b=c[h>>2]|0}Sj(k);b=1<<(Rh((b>>>1)+b|0)|0);c[o+20>>2]=b;a=b<<3;d=Xp(a)|0;c[o+24>>2]=d;a=Xp(a)|0;c[o+28>>2]=a;c[o+32>>2]=Mk(b,d,a,1,0)|0;a=0;do{g[d+(a<<3)>>2]=0.0;g[d+(a<<3)+4>>2]=0.0;a=a+1|0}while(a>>>0>>0);g[o+36>>2]=0.0;g[o+40>>2]=0.0;g[o+44>>2]=1.0;i=p;return o|0}function Fh(a){a=a|0;Yp(c[a+16>>2]|0);Yp(c[a+24>>2]|0);Yp(c[a+28>>2]|0);dl(c[a+32>>2]|0);Yp(a);return}function Gh(a){a=a|0;return c[a+12>>2]|0}function Hh(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0,h=0.0,k=0,l=0.0,m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0.0,v=0,w=0,x=0,y=0.0,z=0.0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0;P=i;i=i+144|0;if((i|0)>=(j|0))ba();L=P+128|0;e=P+120|0;k=P+112|0;q=P+104|0;A=P+96|0;B=P+88|0;C=P+80|0;D=P+72|0;F=P+64|0;G=P+56|0;H=P+48|0;E=P+40|0;I=P+32|0;J=P+24|0;M=P+16|0;N=P+8|0;O=P;K=a+8|0;if(c[K>>2]|0){p=a+4|0;r=a+16|0;s=k+4|0;t=e+4|0;v=q+4|0;w=a+24|0;x=0;do{R=_(c[p>>2]|0,x)|0;l=+g[b+(R<<3)>>2];m=+g[b+(R<<3)+4>>2];R=c[r>>2]|0;Q=c[R+(x<<3)+4>>2]|0;c[k>>2]=c[R+(x<<3)>>2];c[s>>2]=Q;c[L>>2]=c[k>>2];c[L+4>>2]=c[k+4>>2];Ko(e,L);n=+g[e>>2];o=+g[t>>2];h=l*n-m*o;f=m*n+l*o;if((h!=h|0.0!=0.0)&(f!=f|0.0!=0.0)){ao(q,l,m,n,o);h=+g[q>>2];f=+g[v>>2]}R=c[w>>2]|0;g[R+(x<<3)>>2]=h;g[R+(x<<3)+4>>2]=f;x=x+1|0}while(x>>>0<(c[K>>2]|0)>>>0)}el(c[a+32>>2]|0);t=a+20|0;s=a+28|0;if(!(c[t>>2]|0)){e=0;k=0;f=0.0}else{p=B+4|0;q=A+4|0;r=0;k=0;f=0.0;do{if(!((r|0)!=0?(Q=c[s>>2]|0,R=c[Q+(r<<3)+4>>2]|0,c[A>>2]=c[Q+(r<<3)>>2],c[q>>2]=R,c[L>>2]=c[A>>2],c[L+4>>2]=c[A+4>>2],!(+wo(L)>f)):0)){R=c[s>>2]|0;k=c[R+(r<<3)+4>>2]|0;c[B>>2]=c[R+(r<<3)>>2];c[p>>2]=k;c[L>>2]=c[B>>2];c[L+4>>2]=c[B+4>>2];k=r;f=+wo(L)}r=r+1|0;e=c[t>>2]|0}while(r>>>0>>0)}x=((k+-1+e|0)>>>0)%(e>>>0)|0;w=((k+1|0)>>>0)%(e>>>0)|0;Q=c[s>>2]|0;R=c[Q+(w<<3)+4>>2]|0;c[C>>2]=c[Q+(w<<3)>>2];c[C+4>>2]=R;c[L>>2]=c[C>>2];c[L+4>>2]=c[C+4>>2];y=+wo(L);R=c[s>>2]|0;w=c[R+(x<<3)+4>>2]|0;c[D>>2]=c[R+(x<<3)>>2];c[D+4>>2]=w;c[L>>2]=c[D>>2];c[L+4>>2]=c[D+4>>2];z=+wo(L);f=+(k>>>0)+-((y-z)*.5)/(((y+z)*.5-f)*2.0);w=c[t>>2]|0;x=a+4|0;f=(k>>>0>w>>>1>>>0?f-+(w>>>0):f)*2.0*3.141592653589793/+((_(c[x>>2]|0,w)|0)>>>0);w=a+36|0;g[w>>2]=f;a:do if(!(c[K>>2]|0)){h=0.0;f=0.0}else{k=a+24|0;p=F+4|0;q=H+4|0;r=G+4|0;s=E+4|0;l=f;e=0;h=0.0;f=0.0;while(1){R=c[k>>2]|0;y=+g[R+(e<<3)>>2];z=+g[R+(e<<3)+4>>2];u=l*-0.0;n=-l;o=+(e>>>0);m=o*u-u;l=o*n+u*0.0;if((m!=m|0.0!=0.0)&(l!=l|0.0!=0.0)){ao(F,u,n,o,0.0);m=+g[F>>2];l=+g[p>>2]}n=+((c[x>>2]|0)>>>0);g[H>>2]=m*n;g[q>>2]=l*n;c[L>>2]=c[H>>2];c[L+4>>2]=c[H+4>>2];Io(G,L);n=+g[G>>2];o=+g[r>>2];l=y*n-z*o;m=z*n+y*o;if((l!=l|0.0!=0.0)&(m!=m|0.0!=0.0)){ao(E,y,z,n,o);l=+g[E>>2];m=+g[s>>2]}h=h+l;f=f+m;e=e+1|0;if(e>>>0>=(c[K>>2]|0)>>>0)break a;l=+g[w>>2]}}while(0);g[I>>2]=h;g[I+4>>2]=f;c[L>>2]=c[I>>2];c[L+4>>2]=c[I+4>>2];v=a+40|0;g[v>>2]=+Bo(L);g[J>>2]=h;g[J+4>>2]=f;c[L>>2]=c[J>>2];c[L+4>>2]=c[J+4>>2];u=+wo(L);u=u/+((c[K>>2]|0)>>>0);g[a+44>>2]=u;u=1.0/u;q=a+12|0;e=c[q>>2]|0;if(!e){i=P;return}r=N+4|0;s=M+4|0;t=O+4|0;p=0;k=0;do{if((p>>>0)%((c[x>>2]|0)>>>0)|0){l=u*+g[b+(p<<3)>>2];m=u*+g[b+(p<<3)+4>>2];n=+(p>>>0)*+g[w>>2]+ +g[v>>2];g[N>>2]=n*-0.0;g[r>>2]=-n;c[L>>2]=c[N>>2];c[L+4>>2]=c[N+4>>2];Io(M,L);n=+g[M>>2];o=+g[s>>2];h=l*n-m*o;f=m*n+l*o;if((h!=h|0.0!=0.0)&(f!=f|0.0!=0.0)){ao(O,l,m,n,o);h=+g[O>>2];f=+g[t>>2]}g[d+(k<<3)>>2]=h;g[d+(k<<3)+4>>2]=f;e=c[q>>2]|0;k=k+1|0}p=p+1|0}while(p>>>0>>0);i=P;return}function Ih(a){a=a|0;return +(+g[a+36>>2])}function Jh(a){a=a|0;return +(+g[a+40>>2])}function Kh(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0.0,f=0,g=0,i=0,j=0;j=(b|0)==0;if(j)return;else i=0;do{g=c+(i<<3)|0;h[g>>3]=1.0;d=a+(i<<3)|0;e=1.0;f=0;do{if((i|0)!=(f|0)){e=e*(+h[d>>3]-+h[a+(f<<3)>>3]);h[g>>3]=e}f=f+1|0}while((f|0)!=(b|0));h[g>>3]=1.0/e;i=i+1|0}while((i|0)!=(b|0));e=+h[c>>3];if(j)return;h[c>>3]=e/e;if((b|0)==1)return;else d=1;do{h[c+(d<<3)>>3]=+h[c+(d<<3)>>3]/e;d=d+1|0}while((d|0)!=(b|0));return}function Lh(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0,g=0.0,i=0.0,j=0.0,k=0.0;a:do if(!e){i=0.0;g=0.0}else{f=0;i=0.0;g=0.0;while(1){j=d-+h[a+(f<<3)>>3];if(+N(+j)<9.999999974752427e-07)break;k=+h[c+(f<<3)>>3];i=i+k*+h[b+(f<<3)>>3]/j;g=g+k/j;f=f+1|0;if(f>>>0>=e>>>0)break a}k=+h[b+(f<<3)>>3];return +k}while(0);k=i/g;return +k}function Mh(a,b,c){a=a|0;b=b|0;c=+c;var d=0.0,e=0,f=0.0;if(!b){f=0.0;return +f}else{e=0;f=1.0;d=0.0}while(1){d=d+f*+g[a+(e<<2)>>2];e=e+1|0;if((e|0)==(b|0))break;else f=f*c}return +d}function Nh(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,h=0,k=0,l=0.0,m=0.0,n=0,o=0,p=0;p=i;n=_(e,c)|0;o=i;i=i+((1*(n<<2)|0)+15&-16)|0;if((i|0)>=(j|0))ba();if(!((c|0)==0|(e|0)==0)){k=0;do{f=_(k,e)|0;l=+g[a+(k<<2)>>2];h=0;m=1.0;while(1){g[o+(h+f<<2)>>2]=m;h=h+1|0;if((h|0)==(e|0))break;else m=m*l}k=k+1|0}while((k|0)!=(c|0))}f=i;i=i+((1*(n<<2)|0)+15&-16)|0;if((i|0)>=(j|0))ba();fq(f|0,o|0,n<<2|0)|0;Zh(f,c,e);k=i;i=i+((1*(e<<2)|0)+15&-16)|0;if((i|0)>=(j|0))ba();Wh(f,e,c,b,c,1,k,e,1);a=_(e,e)|0;h=i;i=i+((1*(a<<2)|0)+15&-16)|0;if((i|0)>=(j|0))ba();Wh(f,e,c,o,c,e,h,e,e);f=i;i=i+((1*(a<<2)|0)+15&-16)|0;if((i|0)>=(j|0))ba();fq(f|0,h|0,a<<2|0)|0;Xh(f,e,e);Wh(f,e,e,k,e,1,d,e,1);i=p;return}function Oh(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0.0,f=0.0,h=0.0,k=0.0,l=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0.0,A=0.0,B=0;y=i;i=i+16|0;if((i|0)>=(j|0))ba();w=y+8|0;x=y;if(!b){g[c>>2]=0.0;g[c+4>>2]=0.0;i=y;return}else d=0;while(1){g[c+(d<<3)>>2]=+((d|0)==0&1);g[c+(d<<3)+4>>2]=0.0;if((d|0)==(b|0))break;else d=d+1|0}t=x+4|0;u=w+4|0;v=0;do{q=a+(v<<3)|0;r=a+(v<<3)+4|0;v=v+1|0;f=-+g[q>>2];e=-+g[r>>2];d=c+(v<<3)|0;A=+g[d>>2];n=c+(v<<3)+4|0;z=+g[n>>2];l=f;h=z;m=e;k=A;f=A*f;e=z*e;s=v;while(1){f=f-e;e=m*k+l*h;if((f!=f|0.0!=0.0)&(e!=e|0.0!=0.0)){ao(w,l,m,k,h);f=+g[w>>2];e=+g[u>>2]}B=s;s=s+-1|0;o=c+(s<<3)|0;p=c+(s<<3)+4|0;l=e+ +g[p>>2];g[d>>2]=f+ +g[o>>2];g[n>>2]=l;l=-+g[q>>2];m=-+g[r>>2];k=+g[o>>2];h=+g[p>>2];f=k*l;e=h*m;if((B|0)<=1){n=o;d=p;break}else{d=o;n=p}}f=f-e;e=k*m+h*l;if((f!=f|0.0!=0.0)&(e!=e|0.0!=0.0)){ao(x,k,h,l,m);f=+g[x>>2];e=+g[t>>2]}g[n>>2]=f;g[d>>2]=e}while((v|0)!=(b|0));i=y;return}function Ph(a){a=+a;return +((1.0-+qp(a*.7071067811865476))*.5)}function Qh(a){a=+a;var b=0.0;b=a*3.141592653589793;if(+N(+a)<.009999999776482582){a=+Q(+(b*.5))*+Q(+(b*.25))*+Q(+(b*.125));return +a}else{a=+R(+b)/b;return +a}return 0.0}function Rh(a){a=a|0;var b=0;if(!a){Qp(30906,58,1,c[2348]|0)|0;kb(1)}a=a+-1|0;if(!a){b=0;return b|0}else b=0;do{a=a>>>1;b=b+1|0}while((a|0)!=0);a=b;return a|0}function Sh(a){a=+a;var b=0.0,c=0,d=0.0;if(a==0.0){b=1.0;return +b}b=+Y(+(a*.5));c=0;a=0.0;do{d=+(c>>>0);a=a+ +X(+((d*b-+Th(d+1.0))*2.0));c=c+1|0}while((c|0)!=32);return +a}function Th(a){a=+a;if(a<0.0){Qp(30965,47,1,c[2348]|0)|0;kb(1)}if(a<10.0)return +(+Th(a+1.0)-+Y(+a));else return +((1.8378770351409912-+Y(+a))*.5+(+Y(+(1.0/(a*12.0-.10000000149011612/a)+a))+-1.0)*a);return 0.0}function Uh(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;if(a>>>0>b>>>0){Qp(31013,60,1,c[2348]|0)|0;kb(1)}if(d<0.0){Qp(31074,60,1,c[2348]|0)|0;kb(1)}if(e<-.5|e>.5){Qp(31135,64,1,c[2348]|0)|0;kb(1)}else{e=(+(a>>>0)-+((b+-1|0)>>>0)*.5+e)*2.0/+(b>>>0);e=+Sh(+O(+(1.0-e*e))*d);return +(e/+Sh(d))}return +(0.0)}function Vh(a,b){a=a|0;b=b|0;if(a>>>0>b>>>0){Qp(31200,61,1,c[2348]|0)|0;kb(1)}else return +(.53836-+Q(+(+(a>>>0)*6.283185307179586/+((b+-1|0)>>>0)))*.46164);return +(0.0)}function Wh(a,b,d,e,f,h,i,j,k){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0.0,m=0,n=0,o=0,p=0;if(!((d|0)==(f|0)&((j|0)==(b|0)&(k|0)==(h|0)))){Qp(31262,40,1,c[2348]|0)|0;kb(1)}if(!j)return;h=(d|0)==0;if(!k)return;f=k<<2;p=0;do{m=_(p,k)|0;n=_(p,d)|0;if(h)eq(i+(m<<2)|0,0,f|0)|0;else{o=0;do{b=0;l=0.0;do{l=l+ +g[a+(b+n<<2)>>2]*+g[e+((_(b,k)|0)+o<<2)>>2];b=b+1|0}while((b|0)!=(d|0));g[i+(o+m<<2)>>2]=l;o=o+1|0}while((o|0)!=(k|0))}p=p+1|0}while((p|0)!=(j|0));return}function Xh(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,k=0,l=0,m=0,n=0;n=i;if((b|0)!=(d|0)){Qp(31303,40,1,c[2348]|0)|0;kb(1)}l=b<<1;k=(_(l,b)|0)<<2;m=i;i=i+((1*k|0)+15&-16)|0;if((i|0)>=(j|0))ba();e=(b|0)==0;if(e){Yh(m,b,l);i=n;return}f=b<<2;k=0;do{d=_(l,k)|0;fq(m+(d<<2)|0,a+((_(k,b)|0)<<2)|0,f|0)|0;d=d+b|0;h=0;do{g[m+(d+h<<2)>>2]=+((k|0)==(h|0)&1);h=h+1|0}while((h|0)!=(b|0));k=k+1|0}while((k|0)!=(b|0));Yh(m,b,l);if(e){i=n;return}d=b<<2;e=0;do{fq(a+((_(e,b)|0)<<2)|0,m+((_(l,e)|0)+b<<2)|0,d|0)|0;e=e+1|0}while((e|0)!=(b|0));i=n;return}function Yh(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0,h=0,i=0,j=0,k=0.0,l=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;o=(b|0)==0;if(o)return;p=c[2348]|0;q=(d|0)==0;r=(d|0)!=0;e=0;h=0;f=0.0;do{i=e;do{l=+N(+(+g[a+((_(i,d)|0)+e<<2)>>2]));n=(i|0)==(e|0)|l>f;f=n?l:f;h=n?i:h;i=i+1|0}while((i|0)!=(b|0));if(f==0.0)Qp(31344,63,1,p)|0;n=_(e,d)|0;if((e|0)!=(h|0)&r){i=_(h,d)|0;j=0;do{t=a+(j+n<<2)|0;s=c[t>>2]|0;m=a+(j+i<<2)|0;c[t>>2]=c[m>>2];c[m>>2]=s;j=j+1|0}while((j|0)!=(d|0))}k=+g[a+(n+e<<2)>>2];if(!(k==0.0)){if(!q){m=0;do{if((m|0)!=(e|0)){i=_(m,d)|0;l=+g[a+(i+e<<2)>>2]/k;j=0;do{t=a+(j+i<<2)|0;g[t>>2]=l*+g[a+(j+n<<2)>>2]-+g[t>>2];j=j+1|0}while((j|0)!=(d|0))}m=m+1|0}while((m|0)!=(b|0))}}else Qp(31408,42,1,p)|0;e=e+1|0}while((e|0)!=(b|0));if(o|(d|0)==0)return;else i=0;do{e=_(i,d)|0;f=1.0/+g[a+(e+i<<2)>>2];h=0;do{t=a+(h+e<<2)|0;g[t>>2]=f*+g[t>>2];h=h+1|0}while((h|0)!=(d|0));i=i+1|0}while((i|0)!=(b|0));return}function Zh(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,k=0,l=0,m=0,n=0;m=i;i=i+48|0;if((i|0)>=(j|0))ba();f=m+32|0;k=m+16|0;l=m;_h(a,b,d);d=_(d,b)|0;if(!d){i=m;return}b=l+8|0;e=0;do{n=a+(e<<2)|0;h[l>>3]=+g[n>>2];h[b>>3]=0.0;c[f>>2]=c[l>>2];c[f+4>>2]=c[l+4>>2];c[f+8>>2]=c[l+8>>2];c[f+12>>2]=c[l+12>>2];Jo(k,f);g[n>>2]=+h[k>>3];e=e+1|0}while((e|0)!=(d|0));i=m;return}function _h(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,k=0;k=i;e=_(d,b)|0;h=i;i=i+((1*(e<<2)|0)+15&-16)|0;if((i|0)>=(j|0))ba();fq(h|0,a|0,e<<2|0)|0;if((b|0)==0|(d|0)==0){i=k;return}else g=0;do{e=_(g,d)|0;f=0;do{c[a+((_(f,b)|0)+g<<2)>>2]=c[h+(f+e<<2)>>2];f=f+1|0}while((f|0)!=(d|0));g=g+1|0}while((g|0)!=(b|0));i=k;return}function $h(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0;if(a>>>0<2){Qp(31451,59,1,c[2348]|0)|0;kb(1)}if(!b){Qp(31511,57,1,c[2348]|0)|0;kb(1)}if(d<=0.0|d>=1.0){Qp(31569,65,1,c[2348]|0)|0;kb(1)}else{e=Xp(32)|0;c[e>>2]=a;c[e+4>>2]=b;g[e+8>>2]=d;g[e+28>>2]=1.0/+(a>>>0);f=_(a<<1,b)|0|1;c[e+12>>2]=f;f=Xp(f<<2)|0;c[e+16>>2]=f;sf(a,b,d,0.0,f);b=le(11,a,b,d,0.0)|0;c[e+20>>2]=b;g[e+24>>2]=0.0;oe(b);return e|0}return 0}function ai(a){a=a|0;g[a+24>>2]=0.0;oe(c[a+20>>2]|0);return}function bi(a){a=a|0;me(c[a+20>>2]|0);Yp(c[a+16>>2]|0);Yp(a);return}function ci(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,h=0,k=0,l=0.0;k=i;e=+g[a+28>>2];h=i;i=i+((1*(c[a>>2]<<2)|0)+15&-16)|0;if((i|0)>=(j|0))ba();qe(c[a+20>>2]|0,(b|0)==0?-e:e,h);if(!(c[a>>2]|0)){i=k;return}b=a+24|0;f=0;do{l=+g[h+(f<<2)>>2]+ +g[b>>2];e=l;l=e>3.141592653589793?e+-6.283185307179586:l;e=l;l=e<-3.141592653589793?e+6.283185307179586:l;g[b>>2]=l;e=+R(+l);g[d+(f<<3)>>2]=+Q(+l)+e*0.0;g[d+(f<<3)+4>>2]=e;f=f+1|0}while(f>>>0<(c[a>>2]|0)>>>0);i=k;return}function di(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,k=0,l=0,m=0,n=0;n=i;i=i+16|0;if((i|0)>=(j|0))ba();b=n;do switch(a|0){case 1:{m=ei(1)|0;i=n;return m|0}case 2:{m=ei(2)|0;i=n;return m|0}case 3:{m=ei(3)|0;i=n;return m|0}case 4:{m=ei(4)|0;i=n;return m|0}case 5:{m=ei(5)|0;i=n;return m|0}case 6:{m=ei(6)|0;i=n;return m|0}case 7:{m=ei(7)|0;i=n;return m|0}case 8:{m=ei(8)|0;i=n;return m|0}case 9:{b=Xp(252)|0;c[b>>2]=9;c[b+76>>2]=0;c[b+80>>2]=0;c[b+4>>2]=1;c[b+8>>2]=2;m=b+236|0;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;c[m+12>>2]=0;g[b+108>>2]=1.5707963705062866;a=b+104|0;g[a>>2]=0.0;g[b+12>>2]=1.5707963705062866;g[b+100>>2]=1.5707963705062866;c[m>>2]=1;c[b+240>>2]=2;g[b+84>>2]=1.0;g[b+88>>2]=0.0;c[b+92>>2]=1065353216;g[b+96>>2]=0.0;if(!(Ti(9)|0)){m=b;i=n;return m|0}g[a>>2]=0.0;m=b;i=n;return m|0}case 10:{a=Xp(252)|0;c[a>>2]=10;c[a+76>>2]=0;c[a+80>>2]=0;b=a+4|0;c[b>>2]=2;d=a+8|0;c[d>>2]=4;e=a+236|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=a+100|0;h=a+108|0;g[h>>2]=.7853981852531433;k=a+104|0;g[k>>2]=0.0;l=a+12|0;g[l>>2]=.7853981852531433;g[a+16>>2]=1.5707963705062866;if((c[b>>2]|0)>>>0>2){m=2;do{g[l+(m<<2)>>2]=+g[h>>2]*+(1<>>0<(c[b>>2]|0)>>>0)}m=c[a>>2]|0;g[f>>2]=(1.0-1.0/+((c[d>>2]|0)>>>0))*3.141592653589793;c[e>>2]=1;c[a+240>>2]=2;g[a+84>>2]=1.0;g[a+88>>2]=0.0;c[a+92>>2]=1065353216;g[a+96>>2]=0.0;if(!(Ti(m)|0)){m=a;i=n;return m|0}g[k>>2]=0.0;m=a;i=n;return m|0}case 11:{a=Xp(252)|0;c[a>>2]=11;c[a+76>>2]=0;c[a+80>>2]=0;b=a+4|0;c[b>>2]=3;d=a+8|0;c[d>>2]=8;e=a+236|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=a+100|0;h=a+108|0;g[h>>2]=.39269909262657166;k=a+104|0;g[k>>2]=0.0;l=a+12|0;g[l>>2]=.39269909262657166;g[a+16>>2]=.7853981852531433;if((c[b>>2]|0)>>>0>2){m=2;do{g[l+(m<<2)>>2]=+g[h>>2]*+(1<>>0<(c[b>>2]|0)>>>0)}m=c[a>>2]|0;g[f>>2]=(1.0-1.0/+((c[d>>2]|0)>>>0))*3.141592653589793;c[e>>2]=1;c[a+240>>2]=2;g[a+84>>2]=1.0;g[a+88>>2]=0.0;c[a+92>>2]=1065353216;g[a+96>>2]=0.0;if(!(Ti(m)|0)){m=a;i=n;return m|0}g[k>>2]=0.0;m=a;i=n;return m|0}case 12:{d=Xp(252)|0;c[d>>2]=12;c[d+76>>2]=0;c[d+80>>2]=0;e=d+4|0;c[e>>2]=4;f=d+8|0;c[f>>2]=16;h=d+236|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;k=d+100|0;l=d+108|0;g[l>>2]=.19634954631328583;m=d+104|0;g[m>>2]=0.0;a=d+12|0;g[a>>2]=.19634954631328583;g[d+16>>2]=.39269909262657166;if((c[e>>2]|0)>>>0>2){b=2;do{g[a+(b<<2)>>2]=+g[l>>2]*+(1<>>0<(c[e>>2]|0)>>>0)}l=c[d>>2]|0;g[k>>2]=(1.0-1.0/+((c[f>>2]|0)>>>0))*3.141592653589793;c[h>>2]=1;c[d+240>>2]=2;g[d+84>>2]=1.0;g[d+88>>2]=0.0;c[d+92>>2]=1065353216;g[d+96>>2]=0.0;if(!(Ti(l)|0)){m=d;i=n;return m|0}g[m>>2]=0.0;m=d;i=n;return m|0}case 13:{a=Xp(252)|0;c[a>>2]=13;c[a+76>>2]=0;c[a+80>>2]=0;b=a+4|0;c[b>>2]=5;d=a+8|0;c[d>>2]=32;e=a+236|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=a+100|0;h=a+108|0;g[h>>2]=.09817477315664291;k=a+104|0;g[k>>2]=0.0;l=a+12|0;g[l>>2]=.09817477315664291;g[a+16>>2]=.19634954631328583;if((c[b>>2]|0)>>>0>2){m=2;do{g[l+(m<<2)>>2]=+g[h>>2]*+(1<>>0<(c[b>>2]|0)>>>0)}m=c[a>>2]|0;g[f>>2]=(1.0-1.0/+((c[d>>2]|0)>>>0))*3.141592653589793;c[e>>2]=1;c[a+240>>2]=2;g[a+84>>2]=1.0;g[a+88>>2]=0.0;c[a+92>>2]=1065353216;g[a+96>>2]=0.0;if(!(Ti(m)|0)){m=a;i=n;return m|0}g[k>>2]=0.0;m=a;i=n;return m|0}case 14:{a=Xp(252)|0;c[a>>2]=14;c[a+76>>2]=0;c[a+80>>2]=0;b=a+4|0;c[b>>2]=6;d=a+8|0;c[d>>2]=64;e=a+236|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=a+100|0;h=a+108|0;g[h>>2]=.04908738657832146;k=a+104|0;g[k>>2]=0.0;l=a+12|0;g[l>>2]=.04908738657832146;g[a+16>>2]=.09817477315664291;if((c[b>>2]|0)>>>0>2){m=2;do{g[l+(m<<2)>>2]=+g[h>>2]*+(1<>>0<(c[b>>2]|0)>>>0)}m=c[a>>2]|0;g[f>>2]=(1.0-1.0/+((c[d>>2]|0)>>>0))*3.141592653589793;c[e>>2]=1;c[a+240>>2]=2;g[a+84>>2]=1.0;g[a+88>>2]=0.0;c[a+92>>2]=1065353216;g[a+96>>2]=0.0;if(!(Ti(m)|0)){m=a;i=n;return m|0}g[k>>2]=0.0;m=a;i=n;return m|0}case 15:{a=Xp(252)|0;c[a>>2]=15;c[a+76>>2]=0;c[a+80>>2]=0;b=a+4|0;c[b>>2]=7;d=a+8|0;c[d>>2]=128;e=a+236|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=a+100|0;h=a+108|0;g[h>>2]=.02454369328916073;k=a+104|0;g[k>>2]=0.0;l=a+12|0;g[l>>2]=.02454369328916073;g[a+16>>2]=.04908738657832146;if((c[b>>2]|0)>>>0>2){m=2;do{g[l+(m<<2)>>2]=+g[h>>2]*+(1<>>0<(c[b>>2]|0)>>>0)}m=c[a>>2]|0;g[f>>2]=(1.0-1.0/+((c[d>>2]|0)>>>0))*3.141592653589793;c[e>>2]=1;c[a+240>>2]=2;g[a+84>>2]=1.0;g[a+88>>2]=0.0;c[a+92>>2]=1065353216;g[a+96>>2]=0.0;if(!(Ti(m)|0)){m=a;i=n;return m|0}g[k>>2]=0.0;m=a;i=n;return m|0}case 16:{a=Xp(252)|0;c[a>>2]=16;c[a+76>>2]=0;c[a+80>>2]=0;b=a+4|0;c[b>>2]=8;d=a+8|0;c[d>>2]=256;e=a+236|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;f=a+100|0;h=a+108|0;g[h>>2]=.012271846644580364;k=a+104|0;g[k>>2]=0.0;l=a+12|0;g[l>>2]=.012271846644580364;g[a+16>>2]=.02454369328916073;if((c[b>>2]|0)>>>0>2){m=2;do{g[l+(m<<2)>>2]=+g[h>>2]*+(1<>>0<(c[b>>2]|0)>>>0)}m=c[a>>2]|0;g[f>>2]=(1.0-1.0/+((c[d>>2]|0)>>>0))*3.141592653589793;c[e>>2]=1;c[a+240>>2]=2;g[a+84>>2]=1.0;g[a+88>>2]=0.0;c[a+92>>2]=1065353216;g[a+96>>2]=0.0;if(!(Ti(m)|0)){m=a;i=n;return m|0}g[k>>2]=0.0;m=a;i=n;return m|0}case 17:{a=Xp(252)|0;c[a+76>>2]=0;c[a+80>>2]=0;c[a+4>>2]=1;c[a+8>>2]=2;m=a+236|0;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;c[m+12>>2]=0;g[a+100>>2]=1.0;c[a>>2]=17;g[a+12>>2]=1.0;c[m>>2]=3;c[a+240>>2]=4;g[a+84>>2]=1.0;g[a+88>>2]=0.0;c[a+92>>2]=1065353216;g[a+96>>2]=0.0;if(!(Ti(17)|0)){m=a;i=n;return m|0}g[a+104>>2]=0.0;m=a;i=n;return m|0}case 18:{h=Xp(252)|0;c[h+76>>2]=0;c[h+80>>2]=0;d=h+4|0;c[d>>2]=2;c[h+8>>2]=4;k=h+236|0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;e=h+100|0;g[e>>2]=.4472135901451111;c[h>>2]=18;f=h+12|0;g[f>>2]=.4472135901451111;g[h+16>>2]=.8944271802902222;a=c[d>>2]|0;if(a>>>0>2){b=2;do{g[f+(b<<2)>>2]=+g[e>>2]*+(1<>2]|0}while(b>>>0>>0)}c[k>>2]=3;c[h+240>>2]=4;if((a+-2|0)>>>0<6)ii(h,2);g[h+84>>2]=1.0;g[h+88>>2]=0.0;c[h+92>>2]=1065353216;g[h+96>>2]=0.0;if(!(Ti(c[h>>2]|0)|0)){m=h;i=n;return m|0}g[h+104>>2]=0.0;m=h;i=n;return m|0}case 19:{h=Xp(252)|0;c[h+76>>2]=0;c[h+80>>2]=0;d=h+4|0;c[d>>2]=3;c[h+8>>2]=8;k=h+236|0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;e=h+100|0;g[e>>2]=.2182178944349289;c[h>>2]=19;f=h+12|0;g[f>>2]=.2182178944349289;g[h+16>>2]=.4364357888698578;a=c[d>>2]|0;if(a>>>0>2){b=2;do{g[f+(b<<2)>>2]=+g[e>>2]*+(1<>2]|0}while(b>>>0>>0)}c[k>>2]=3;c[h+240>>2]=4;if((a+-2|0)>>>0<6)ii(h,2);g[h+84>>2]=1.0;g[h+88>>2]=0.0;c[h+92>>2]=1065353216;g[h+96>>2]=0.0;if(!(Ti(c[h>>2]|0)|0)){m=h;i=n;return m|0}g[h+104>>2]=0.0;m=h;i=n;return m|0}case 20:{h=Xp(252)|0;c[h+76>>2]=0;c[h+80>>2]=0;d=h+4|0;c[d>>2]=4;c[h+8>>2]=16;k=h+236|0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;e=h+100|0;g[e>>2]=.10846523195505142;c[h>>2]=20;f=h+12|0;g[f>>2]=.10846523195505142;g[h+16>>2]=.21693046391010284;a=c[d>>2]|0;if(a>>>0>2){b=2;do{g[f+(b<<2)>>2]=+g[e>>2]*+(1<>2]|0}while(b>>>0>>0)}c[k>>2]=3;c[h+240>>2]=4;if((a+-2|0)>>>0<6)ii(h,2);g[h+84>>2]=1.0;g[h+88>>2]=0.0;c[h+92>>2]=1065353216;g[h+96>>2]=0.0;if(!(Ti(c[h>>2]|0)|0)){m=h;i=n;return m|0}g[h+104>>2]=0.0;m=h;i=n;return m|0}case 21:{h=Xp(252)|0;c[h+76>>2]=0;c[h+80>>2]=0;d=h+4|0;c[d>>2]=5;c[h+8>>2]=32;k=h+236|0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;e=h+100|0;g[e>>2]=.05415303632616997;c[h>>2]=21;f=h+12|0;g[f>>2]=.05415303632616997;g[h+16>>2]=.10830607265233994;a=c[d>>2]|0;if(a>>>0>2){b=2;do{g[f+(b<<2)>>2]=+g[e>>2]*+(1<>2]|0}while(b>>>0>>0)}c[k>>2]=3;c[h+240>>2]=4;if((a+-2|0)>>>0<6)ii(h,2);g[h+84>>2]=1.0;g[h+88>>2]=0.0;c[h+92>>2]=1065353216;g[h+96>>2]=0.0;if(!(Ti(c[h>>2]|0)|0)){m=h;i=n;return m|0}g[h+104>>2]=0.0;m=h;i=n;return m|0}case 22:{h=Xp(252)|0;c[h+76>>2]=0;c[h+80>>2]=0;d=h+4|0;c[d>>2]=6;c[h+8>>2]=64;k=h+236|0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;e=h+100|0;g[e>>2]=.02706659771502018;c[h>>2]=22;f=h+12|0;g[f>>2]=.02706659771502018;g[h+16>>2]=.05413319543004036;a=c[d>>2]|0;if(a>>>0>2){b=2;do{g[f+(b<<2)>>2]=+g[e>>2]*+(1<>2]|0}while(b>>>0>>0)}c[k>>2]=3;c[h+240>>2]=4;if((a+-2|0)>>>0<6)ii(h,2);g[h+84>>2]=1.0;g[h+88>>2]=0.0;c[h+92>>2]=1065353216;g[h+96>>2]=0.0;if(!(Ti(c[h>>2]|0)|0)){m=h;i=n;return m|0}g[h+104>>2]=0.0;m=h;i=n;return m|0}case 23:{h=Xp(252)|0;c[h+76>>2]=0;c[h+80>>2]=0;d=h+4|0;c[d>>2]=7;c[h+8>>2]=128;k=h+236|0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;e=h+100|0;g[e>>2]=.013532060198485851;c[h>>2]=23;f=h+12|0;g[f>>2]=.013532060198485851;g[h+16>>2]=.027064120396971703;a=c[d>>2]|0;if(a>>>0>2){b=2;do{g[f+(b<<2)>>2]=+g[e>>2]*+(1<>2]|0}while(b>>>0>>0)}c[k>>2]=3;c[h+240>>2]=4;if((a+-2|0)>>>0<6)ii(h,2);g[h+84>>2]=1.0;g[h+88>>2]=0.0;c[h+92>>2]=1065353216;g[h+96>>2]=0.0;if(!(Ti(c[h>>2]|0)|0)){m=h;i=n;return m|0}g[h+104>>2]=0.0;m=h;i=n;return m|0}case 24:{h=Xp(252)|0;c[h+76>>2]=0;c[h+80>>2]=0;d=h+4|0;c[d>>2]=8;c[h+8>>2]=256;k=h+236|0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;e=h+100|0;g[e>>2]=.006765875034034252;c[h>>2]=24;f=h+12|0;g[f>>2]=.006765875034034252;g[h+16>>2]=.013531750068068504;a=c[d>>2]|0;if(a>>>0>2){b=2;do{g[f+(b<<2)>>2]=+g[e>>2]*+(1<>2]|0}while(b>>>0>>0)}c[k>>2]=3;c[h+240>>2]=4;if((a+-2|0)>>>0<6)ii(h,2);g[h+84>>2]=1.0;g[h+88>>2]=0.0;c[h+92>>2]=1065353216;g[h+96>>2]=0.0;if(!(Ti(c[h>>2]|0)|0)){m=h;i=n;return m|0}g[h+104>>2]=0.0;m=h;i=n;return m|0}case 25:{m=ni(2)|0;i=n;return m|0}case 26:{m=ni(3)|0;i=n;return m|0}case 27:{m=ni(4)|0;i=n;return m|0}case 28:{m=ni(5)|0;i=n;return m|0}case 29:{m=ni(6)|0;i=n;return m|0}case 30:{m=ni(7)|0;i=n;return m|0}case 31:{m=ni(8)|0;i=n;return m|0}case 32:{m=ni(9)|0;i=n;return m|0}case 33:{m=ni(10)|0;i=n;return m|0}case 34:{m=ni(11)|0;i=n;return m|0}case 35:{m=ni(12)|0;i=n;return m|0}case 36:{m=ni(13)|0;i=n;return m|0}case 37:{m=ni(14)|0;i=n;return m|0}case 38:{m=ni(15)|0;i=n;return m|0}case 39:{m=ni(16)|0;i=n;return m|0}case 40:{m=qi(2)|0;i=n;return m|0}case 41:{m=qi(3)|0;i=n;return m|0}case 42:{m=qi(4)|0;i=n;return m|0}case 43:{m=qi(5)|0;i=n;return m|0}case 44:{m=qi(6)|0;i=n;return m|0}case 45:{m=qi(7)|0;i=n;return m|0}case 46:{m=qi(8)|0;i=n;return m|0}case 47:{a=Xp(252)|0;c[a>>2]=47;c[a+76>>2]=0;c[a+80>>2]=0;c[a+4>>2]=1;c[a+8>>2]=2;m=a+236|0;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;c[m+12>>2]=0;c[m>>2]=5;c[a+240>>2]=6;g[a+84>>2]=1.0;g[a+88>>2]=0.0;c[a+92>>2]=1065353216;g[a+96>>2]=0.0;if(!(Ti(47)|0)){m=a;i=n;return m|0}g[a+104>>2]=0.0;m=a;i=n;return m|0}case 48:{a=Xp(252)|0;c[a>>2]=48;c[a+76>>2]=0;c[a+80>>2]=0;c[a+4>>2]=2;c[a+8>>2]=4;m=a+236|0;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;c[m+12>>2]=0;c[m>>2]=7;c[a+240>>2]=8;g[a+84>>2]=1.0;g[a+88>>2]=0.0;c[a+92>>2]=1065353216;g[a+96>>2]=0.0;if(!(Ti(48)|0)){m=a;i=n;return m|0}g[a+104>>2]=0.0;m=a;i=n;return m|0}case 49:{a=Xp(252)|0;c[a>>2]=49;c[a+76>>2]=0;c[a+80>>2]=0;c[a+4>>2]=1;c[a+8>>2]=2;m=a+236|0;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;c[m+12>>2]=0;c[m>>2]=9;c[a+240>>2]=10;g[a+84>>2]=1.0;g[a+88>>2]=0.0;c[a+92>>2]=1065353216;g[a+96>>2]=0.0;if(!(Ti(49)|0)){m=a;i=n;return m|0}g[a+104>>2]=0.0;m=a;i=n;return m|0}case 50:{a=Xp(252)|0;c[a>>2]=50;c[a+76>>2]=0;c[a+80>>2]=0;c[a+4>>2]=5;c[a+8>>2]=32;b=a+236|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;d=Xp(64)|0;c[a+100>>2]=d;e=2080;f=d+64|0;do{c[d>>2]=c[e>>2];d=d+4|0;e=e+4|0}while((d|0)<(f|0));c[b>>2]=11;c[a+240>>2]=12;g[a+84>>2]=1.0;g[a+88>>2]=0.0;c[a+92>>2]=1065353216;g[a+96>>2]=0.0;if(!(Ti(50)|0)){m=a;i=n;return m|0}g[a+104>>2]=0.0;m=a;i=n;return m|0}case 51:{a=Xp(252)|0;c[a>>2]=51;c[a+76>>2]=0;c[a+80>>2]=0;c[a+4>>2]=7;c[a+8>>2]=128;m=a+236|0;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;c[m+12>>2]=0;l=Xp(256)|0;c[a+100>>2]=l;fq(l|0,2144,256)|0;c[m>>2]=13;c[a+240>>2]=14;g[a+84>>2]=1.0;g[a+88>>2]=0.0;c[a+92>>2]=1065353216;g[a+96>>2]=0.0;if(!(Ti(51)|0)){m=a;i=n;return m|0}g[a+104>>2]=0.0;m=a;i=n;return m|0}case 52:{m=Xp(252)|0;c[m>>2]=60;c[m+80>>2]=0;c[m+4>>2]=4;c[m+8>>2]=16;l=m+236|0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;c[m+76>>2]=Zp(16,8)|0;c[l>>2]=15;c[m+240>>2]=16;Fi(m,2400,16);i=n;return m|0}case 53:{m=Xp(252)|0;c[m>>2]=60;c[m+80>>2]=0;c[m+4>>2]=4;c[m+8>>2]=16;l=m+236|0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;c[m+76>>2]=Zp(16,8)|0;c[l>>2]=15;c[m+240>>2]=16;Fi(m,3552,16);i=n;return m|0}case 54:{m=Xp(252)|0;c[m>>2]=60;c[m+80>>2]=0;c[m+4>>2]=5;c[m+8>>2]=32;l=m+236|0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;c[m+76>>2]=Zp(32,8)|0;c[l>>2]=15;c[m+240>>2]=16;Fi(m,3680,32);i=n;return m|0}case 55:{m=Xp(252)|0;c[m>>2]=60;c[m+80>>2]=0;c[m+4>>2]=6;c[m+8>>2]=64;l=m+236|0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;c[m+76>>2]=Zp(64,8)|0;c[l>>2]=15;c[m+240>>2]=16;Fi(m,3936,64);i=n;return m|0}case 56:{m=Xp(252)|0;c[m>>2]=60;c[m+80>>2]=0;c[m+4>>2]=7;c[m+8>>2]=128;l=m+236|0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;c[m+76>>2]=Zp(128,8)|0;c[l>>2]=15;c[m+240>>2]=16;Fi(m,4448,128);i=n;return m|0}case 57:{m=Xp(252)|0;c[m>>2]=60;c[m+80>>2]=0;c[m+4>>2]=8;c[m+8>>2]=256;l=m+236|0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;c[m+76>>2]=Zp(256,8)|0;c[l>>2]=15;c[m+240>>2]=16;Fi(m,5472,256);i=n;return m|0}case 58:{m=Xp(252)|0;c[m>>2]=60;c[m+80>>2]=0;c[m+4>>2]=6;c[m+8>>2]=64;l=m+236|0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;c[m+76>>2]=Zp(64,8)|0;c[l>>2]=15;c[m+240>>2]=16;Fi(m,2528,64);i=n;return m|0}case 59:{m=Xp(252)|0;c[m>>2]=60;c[m+80>>2]=0;c[m+4>>2]=6;c[m+8>>2]=64;l=m+236|0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;c[m+76>>2]=Zp(64,8)|0;c[l>>2]=15;c[m+240>>2]=16;Fi(m,3040,64);i=n;return m|0}case 60:{Qp(32779,105,1,c[2348]|0)|0;kb(1);break}default:{n=c[2348]|0;c[b>>2]=a;Kp(n,32885,b)|0;kb(1)}}while(0);return 0}function ei(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,i=0,j=0,k=0,l=0,m=0.0;i=Xp(252)|0;switch(a|0){case 1:{c[i>>2]=1;break}case 2:{c[i>>2]=2;break}case 3:{c[i>>2]=3;break}case 4:{c[i>>2]=4;break}case 5:{c[i>>2]=5;break}case 6:{c[i>>2]=6;break}case 7:{c[i>>2]=7;break}case 8:{c[i>>2]=8;break}default:{Qp(31635,57,1,c[2348]|0)|0;kb(1)}}j=i+76|0;c[j>>2]=0;k=i+80|0;c[k>>2]=0;l=i+4|0;c[l>>2]=a;a=1<>2]=a;h=i+236|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;m=3.141592653589793/+(a>>>0);a=i+100|0;b=i+104|0;g[b>>2]=m;d=i+12|0;g[d>>2]=m;if((c[l>>2]|0)>>>0>1){e=1;do{g[d+(e<<2)>>2]=+(1<>2];e=e+1|0}while(e>>>0<(c[l>>2]|0)>>>0)}f=c[f>>2]|0;g[a>>2]=(1.0-1.0/+(f>>>0))*3.141592653589793;c[h>>2]=17;c[i+240>>2]=18;c[j>>2]=Xp(f<<3)|0;hi(i);c[k>>2]=1;if((c[l>>2]|0)>>>0>2)ii(i,2);g[i+84>>2]=1.0;g[i+88>>2]=0.0;c[i+92>>2]=1065353216;g[i+96>>2]=0.0;if(!(Ti(c[i>>2]|0)|0))return i|0;g[b>>2]=0.0;return i|0}function fi(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0;e=+((Wi(b)|0)<<1>>>0);e=+g[a+104>>2]*e;d=+R(+e);g[c>>2]=+Q(+e)+d*0.0;g[c+4>>2]=d;return}function gi(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,h=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=i;i=i+16|0;if((i|0)>=(j|0))ba();m=q+8|0;n=q;p=c[b>>2]|0;o=c[b+4>>2]|0;c[n>>2]=p;c[n+4>>2]=o;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];e=+Bo(m);e=e-+g[a+100>>2];f=e;m=c[a+4>>2]|0;if(!m)b=0;else{n=m+-1|0;e=f<-3.141592653589793?f+6.283185307179586:e;k=0;l=0;b=0;while(1){b=b<<1;if(e>0.0){e=e-+g[a+12+(k+n<<2)>>2];b=b|1}else e=e+ +g[a+12+(k+n<<2)>>2];h=l+1|0;if((h|0)==(m|0))break;else{k=~l;l=h}}}n=Vi(b)|0;c[d>>2]=n;e=+((Wi(n)|0)<<1>>>0);e=+g[a+104>>2]*e;f=+R(+e);g[a+92>>2]=+Q(+e)+f*0.0;g[a+96>>2]=f;c[a+84>>2]=p;c[a+88>>2]=o;i=q;return}function hi(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;f=a+76|0;b=c[f>>2]|0;if(!b){Qp(31693,65,1,c[2348]|0)|0;kb(1)}g=a+8|0;e=c[g>>2]|0;if((e+-1|0)>>>0>65535){Qp(31759,60,1,c[2348]|0)|0;kb(1)}h=a+236|0;d=c[h>>2]|0;if(!d){Qp(31820,70,1,c[2348]|0)|0;kb(1)}if(!e)return;tb[d&31](a,0,b);if((c[g>>2]|0)>>>0>1)b=1;else return;do{tb[c[h>>2]&31](a,b,(c[f>>2]|0)+(b<<3)|0);b=b+1|0}while(b>>>0<(c[g>>2]|0)>>>0);return}function ii(b,e){b=b|0;e=e|0;var f=0,h=0,k=0,l=0,m=0,n=0,o=0.0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=i;i=i+16|0;if((i|0)>=(j|0))ba();v=A+8|0;w=A;h=b+8|0;y=c[h>>2]|0;if((y+-1|0)>>>0>>0){Qp(31891,63,1,c[2348]|0)|0;kb(1)}c[b+248>>2]=e;z=b+244|0;c[z>>2]=Xp(_(y,e)|0)|0;x=i;i=i+((1*(y<<3)|0)+15&-16)|0;if((i|0)>=(j|0))ba();q=(y|0)==0;if(q){i=A;return}k=b+80|0;l=b+236|0;m=b+76|0;if(!y){u=c[2348]|0;Qp(31955,65,1,u)|0;kb(1)}else{n=x;f=0}while(1){if(!(c[k>>2]|0))tb[c[l>>2]&31](b,f,n);else{t=c[m>>2]|0;u=c[t+(f<<3)+4>>2]|0;c[n>>2]=c[t+(f<<3)>>2];c[x+(f<<3)+4>>2]=u}f=f+1|0;if(f>>>0>=y>>>0)break;if((c[h>>2]|0)>>>0>f>>>0)n=x+(f<<3)|0;else{p=10;break}}if((p|0)==10){u=c[2348]|0;Qp(31955,65,1,u)|0;kb(1)}if(q){i=A;return}f=y&255;if(e|0){k=0;do{h=_(k,e)|0;l=0;do{a[(c[z>>2]|0)+(l+h)>>0]=f;l=l+1|0}while((l|0)!=(e|0));k=k+1|0}while((k|0)!=(y|0));if(q){i=A;return}}l=(e|0)==0;m=w+4|0;s=0;do{if(!l){n=x+(s<<3)|0;b=x+(s<<3)+4|0;p=_(s,e)|0;u=0;do{q=u+p|0;r=1.0e9;t=0;while(1){h=c[z>>2]|0;k=0;f=(s|0)!=(t|0)&1;do{f=(d[h+(k+p)>>0]|0|0)==(t|0)?0:f;k=k+1|0}while((k|0)!=(e|0));o=+g[b>>2]-+g[x+(t<<3)+4>>2];g[w>>2]=+g[n>>2]-+g[x+(t<<3)>>2];g[m>>2]=o;c[v>>2]=c[w>>2];c[v+4>>2]=c[w+4>>2];o=+wo(v);if((f|0)!=0&o>2]|0)+q>>0]=t;else o=r;t=t+1|0;if((t|0)==(y|0))break;else r=o}u=u+1|0}while((u|0)!=(e|0))}s=s+1|0}while((s|0)!=(y|0));i=A;return}function ji(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0;e=+((Wi(b)|0)<<1>>>0);b=a+104|0;e=+g[b>>2]+ +g[a+108>>2]*e;e=e-(e>6.283185307179586?6.283185307179586:0.0);g[b>>2]=e;d=+R(+e);e=+Q(+e)+d*0.0;g[c>>2]=e;g[c+4>>2]=d;g[a+84>>2]=e;g[a+88>>2]=d;return}function ki(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,h=0,k=0,l=0,m=0,n=0,o=0,p=0.0,q=0,r=0;r=i;i=i+32|0;if((i|0)>=(j|0))ba();n=r+16|0;l=r+8|0;m=r;q=c[b>>2]|0;o=c[b+4>>2]|0;c[l>>2]=q;c[l+4>>2]=o;c[n>>2]=c[l>>2];c[n+4>>2]=c[l+4>>2];p=+Bo(n);c[m>>2]=q;c[m+4>>2]=o;c[n>>2]=c[m>>2];c[n+4>>2]=c[m+4>>2];e=+Bo(n);n=a+104|0;e=e-+g[n>>2];g[n>>2]=p;e=e-+g[a+100>>2];f=e;if(!(f>3.141592653589793)){if(f<-3.141592653589793)e=f+6.283185307179586}else e=f+-6.283185307179586;m=c[a+4>>2]|0;if(!m)b=0;else{n=m+-1|0;k=0;l=0;b=0;while(1){b=b<<1;if(e>0.0){e=e-+g[a+12+(k+n<<2)>>2];b=b|1}else e=e+ +g[a+12+(k+n<<2)>>2];h=l+1|0;if((h|0)==(m|0))break;else{k=~l;l=h}}}c[d>>2]=Vi(b)|0;f=p-e;p=+R(+f);g[a+92>>2]=+Q(+f)+p*0.0;g[a+96>>2]=p;c[a+84>>2]=q;c[a+88>>2]=o;i=r;return}function li(a,b,d){a=a|0;b=b|0;d=d|0;b=(Wi(b)|0)<<1;g[d>>2]=+g[a+100>>2]*+(1-(c[a+8>>2]|0)+b|0);g[d+4>>2]=0.0;return}function mi(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0.0,i=0,j=0,l=0,m=0,n=0;l=c[a+4>>2]|0;if(!l){f=c[b>>2]|0;e=0}else{h=+g[b>>2];m=l+-1|0;f=(g[k>>2]=h,c[k>>2]|0);j=0;n=0;e=0;while(1){e=e<<1;if(h>0.0){h=h-+g[a+12+(j+m<<2)>>2];e=e|1}else h=h+ +g[a+12+(j+m<<2)>>2];i=n+1|0;if((i|0)==(l|0))break;else{j=~n;n=i}}}n=Vi(e)|0;c[d>>2]=n;d=(Wi(n)|0)<<1;g[a+92>>2]=+g[a+100>>2]*+(1-(c[a+8>>2]|0)+d|0);g[a+96>>2]=0.0;b=c[b+4>>2]|0;c[a+84>>2]=f;c[a+88>>2]=b;return}function ni(a){a=a|0;var b=0,d=0,e=0,f=0,h=0.0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;if(!a){Qp(32021,66,1,c[2348]|0)|0;kb(1)}o=Xp(252)|0;if(a>>>0>16){Qp(32088,64,1,c[2348]|0)|0;kb(1)}j=o+76|0;c[j>>2]=0;k=o+80|0;c[k>>2]=0;l=o+4|0;c[l>>2]=a;f=1<>2]=f;i=o+236|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;if(!(a&1)){e=a>>>1;c[o+100>>2]=e;n=o+104|0;c[n>>2]=e;d=e}else{d=(a+1|0)>>>1;c[o+100>>2]=d;e=(a+-1|0)>>>1;n=o+104|0;c[n>>2]=e}b=1<>2]=b;c[o+112>>2]=1<=512){if((f|0)<8192)switch(f|0){case 512:{g[o+116>>2]=.048450157046318054;c[o>>2]=32;h=.048450157046318054;break a}case 1024:{g[o+116>>2]=.03829197958111763;c[o>>2]=33;h=.03829197958111763;break a}case 2048:{g[o+116>>2]=.02421087585389614;c[o>>2]=34;h=.02421087585389614;break a}case 4096:{g[o+116>>2]=.01913897506892681;c[o>>2]=35;h=.01913897506892681;break a}default:{a=c[2348]|0;Qp(32280,58,1,a)|0;kb(1)}}if((f|0)<32768)if((f|0)<16384)switch(f|0){case 8192:{g[o+116>>2]=.012103663757443428;c[o>>2]=36;h=.012103663757443428;break a}default:{a=c[2348]|0;Qp(32280,58,1,a)|0;kb(1)}}else switch(f|0){case 16384:{g[o+116>>2]=.009568611159920692;c[o>>2]=37;h=.009568611159920692;break a}default:{a=c[2348]|0;Qp(32280,58,1,a)|0;kb(1)}}else if((f|0)<65536)switch(f|0){case 32768:{g[o+116>>2]=6.0516102239489555e-03;c[o>>2]=38;h=6.0516102239489555e-03;break a}default:{a=c[2348]|0;Qp(32280,58,1,a)|0;kb(1)}}else switch(f|0){case 65536:{g[o+116>>2]=.004784196149557829;c[o>>2]=39;h=.004784196149557829;break a}default:{a=c[2348]|0;Qp(32280,58,1,a)|0;kb(1)}}}else switch(f|0){case 4:{g[o+116>>2]=.7071067690849304;c[o>>2]=25;h=.7071067690849304;break a}case 8:{g[o+116>>2]=.40824830532073975;c[o>>2]=26;h=.40824830532073975;break a}case 16:{g[o+116>>2]=.3162277638912201;c[o>>2]=27;h=.3162277638912201;break a}case 32:{g[o+116>>2]=.1961161345243454;c[o>>2]=28;h=.1961161345243454;break a}case 64:{g[o+116>>2]=.15430335700511932;c[o>>2]=29;h=.15430335700511932;break a}case 128:{g[o+116>>2]=.09712858498096466;c[o>>2]=30;h=.09712858498096466;break a}case 256:{g[o+116>>2]=.0766965001821518;c[o>>2]=31;h=.0766965001821518;break a}default:{a=c[2348]|0;Qp(32280,58,1,a)|0;kb(1)}}while(0);d=o+116|0;e=o+12|0;g[e>>2]=h;if((c[l>>2]|0)>>>0>1){b=1;do{g[e+(b<<2)>>2]=+(1<>2];b=b+1|0}while(b>>>0<(c[l>>2]|0)>>>0)}b=c[m>>2]|0;c[i>>2]=19;c[o+240>>2]=20;c[j>>2]=Xp(b<<3)|0;hi(o);c[k>>2]=1;b=c[l>>2]|0;if((b|0)!=3){if(b>>>0>3)ii(o,4)}else ii(o,3);g[o+84>>2]=1.0;g[o+88>>2]=0.0;c[o+92>>2]=1065353216;g[o+96>>2]=0.0;if(!(Ti(c[o>>2]|0)|0))return o|0;g[n>>2]=0.0;return o|0}function oi(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,h=0.0,i=0;i=c[a+104>>2]|0;f=Wi(b>>>i)|0;b=Wi((1<>2];e=h*+((b<<1|1)-(c[a+112>>2]|0)|0);g[d>>2]=h*+((f<<1|1)-(c[a+108>>2]|0)|0)+e*0.0;g[d+4>>2]=e;return}function pi(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0,h=0,i=0,j=0,k=0,l=0,m=0.0,n=0,o=0.0,p=0.0;p=+g[b>>2];j=c[a+100>>2]|0;if(!j){o=p;n=0}else{k=j+-1|0;f=p;i=0;l=0;e=0;while(1){e=e<<1;if(f>0.0){f=f-+g[a+12+(i+k<<2)>>2];e=e|1}else f=f+ +g[a+12+(i+k<<2)>>2];h=l+1|0;if((h|0)==(j|0)){o=f;n=e;break}else{i=~l;l=h}}}m=+g[b+4>>2];b=a+104|0;j=c[b>>2]|0;if(!j){f=m;e=0}else{k=j+-1|0;f=m;i=0;l=0;e=0;while(1){e=e<<1;if(f>0.0){f=f-+g[a+12+(i+k<<2)>>2];e=e|1}else f=f+ +g[a+12+(i+k<<2)>>2];h=l+1|0;if((h|0)==(j|0))break;else{i=~l;l=h}}}l=Vi(n)|0;n=Vi(e)|0;c[d>>2]=(l<>2])+n;g[a+92>>2]=p-(o+f*0.0);g[a+96>>2]=m-f;g[a+84>>2]=p;g[a+88>>2]=m;return}function qi(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=i;i=i+16|0;if((i|0)>=(j|0))ba();b=v;switch(a|0){case 2:{u=1632;break}case 3:{u=1680;break}case 4:{u=1728;break}case 5:{u=1788;break}case 6:{u=1860;break}case 7:{u=1944;break}case 8:{u=2052;break}default:{t=c[2348]|0;c[b>>2]=a;Kp(t,32339,b)|0;kb(1)}}p=Xp(252)|0;c[p>>2]=c[u>>2];q=p+76|0;c[q>>2]=0;r=p+80|0;c[r>>2]=0;s=p+4|0;c[s>>2]=a;t=p+8|0;c[t>>2]=1<>2]=0;c[o+4>>2]=0;c[o+8>>2]=0;c[o+12>>2]=0;l=c[u+4>>2]|0;n=p+100|0;c[n>>2]=l;if(l){a=c[u+8>>2]|0;d=p+104|0;e=c[u+12>>2]|0;f=p+136|0;h=c[u+16>>2]|0;k=p+200|0;l=0;do{c[d+(l<<2)>>2]=c[a+(l<<2)>>2];c[f+(l<<2)>>2]=c[e+(l<<2)>>2];c[k+(l<<2)>>2]=c[h+(l<<2)>>2];l=l+1|0;b=c[n>>2]|0}while(l>>>0>>0);if((b|0)!=1)m=12}else m=12;if((m|0)==12){b=c[u+20>>2]|0;a=p+168|0;d=0;do{c[a+(d<<2)>>2]=c[b+(d<<2)>>2];d=d+1|0}while(d>>>0<((c[n>>2]|0)+-1|0)>>>0)}n=c[t>>2]|0;m=Xp(n)|0;c[p+232>>2]=m;gq(m|0,c[u+24>>2]|0,n|0)|0;c[o>>2]=21;c[p+240>>2]=22;switch(c[s>>2]|0){case 2:{ii(p,3);break}case 3:{ii(p,3);break}case 4:{ii(p,4);break}case 5:{ii(p,4);break}case 6:{ii(p,4);break}case 7:{ii(p,5);break}case 8:{ii(p,5);break}default:{}}c[q>>2]=Xp(c[t>>2]<<3)|0;hi(p);c[r>>2]=1;g[p+84>>2]=1.0;g[p+88>>2]=0.0;c[p+92>>2]=1065353216;g[p+96>>2]=0.0;if(!(Ti(c[p>>2]|0)|0)){i=v;return p|0}g[p+104>>2]=0.0;i=v;return p|0}function ri(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,h=0,i=0,j=0,k=0.0,l=0.0,m=0.0;if((c[a+8>>2]|0)>>>0<=b>>>0){Qp(32402,59,1,c[2348]|0)|0;return}j=d[(c[a+232>>2]|0)+b>>0]|0;f=c[a+100>>2]|0;a:do if(!f){h=0;b=0}else{h=0;i=0;while(1){b=(c[a+104+(h<<2)>>2]|0)+i|0;if(j>>>0>>0){b=i;break a}h=h+1|0;if(h>>>0>=f>>>0){h=0;break}else i=b}}while(0);l=+g[a+136+(h<<2)>>2];m=+g[a+200+(h<<2)>>2]+ +((j-b|0)>>>0)*2.0*3.141592653589793/+((c[a+104+(h<<2)>>2]|0)>>>0);k=+R(+m);g[e>>2]=l*(+Q(+m)+k*0.0);g[e+4>>2]=l*k;return}function si(a,b,e){a=a|0;b=b|0;e=e|0;var f=0.0,h=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+32|0;if((i|0)>=(j|0))ba();k=p+16|0;m=p+8|0;l=p;o=c[b>>2]|0;n=c[b+4>>2]|0;c[m>>2]=o;c[m+4>>2]=n;c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];f=+wo(k);b=(c[a+100>>2]|0)+-1|0;a:do if(!b)h=0;else{h=0;while(1){if(f<+g[a+168+(h<<2)>>2])break a;h=h+1|0;if(h>>>0>=b>>>0){h=b;break}}}while(0);c[l>>2]=o;c[l+4>>2]=n;c[k>>2]=c[l>>2];c[k+4>>2]=c[l+4>>2];f=+Bo(k);if(f<0.0)f=f+6.283185307179586;b=c[a+104+(h<<2)>>2]|0;b=(~~+dq(+((f-+g[a+200+(h<<2)>>2])/(6.283185307179586/+(b>>>0))))>>>0>>>0)%(b>>>0)|0;if(h){k=0;do{b=(c[a+104+(k<<2)>>2]|0)+b|0;k=k+1|0}while((k|0)!=(h|0))}m=a+8|0;k=c[m>>2]|0;b:do if(!k)h=0;else{l=c[a+232>>2]|0;h=0;while(1){if((d[l+h>>0]|0|0)==(b|0))break b;h=h+1|0;if(h>>>0>=k>>>0){h=0;break}}}while(0);c[e>>2]=h;b=a+92|0;if((c[m>>2]|0)>>>0<=h>>>0){Qp(31955,65,1,c[2348]|0)|0;kb(1)}if(!(c[a+80>>2]|0)){tb[c[a+236>>2]&31](a,h,b);e=a+84|0;a=a+88|0;c[e>>2]=o;c[a>>2]=n;i=p;return}else{m=c[a+76>>2]|0;e=c[m+(h<<3)+4>>2]|0;c[b>>2]=c[m+(h<<3)>>2];c[a+96>>2]=e;e=a+84|0;a=a+88|0;c[e>>2]=o;c[a>>2]=n;i=p;return}}function ti(a,b,c){a=a|0;b=b|0;c=c|0;g[c>>2]=b|0?-1.0:1.0;g[c+4>>2]=0.0;return}function ui(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0;e=+g[b>>2];f=!(e>0.0);c[d>>2]=f&1;g[a+92>>2]=f?-1.0:1.0;g[a+96>>2]=0.0;b=c[b+4>>2]|0;g[a+84>>2]=e;c[a+88>>2]=b;return}function vi(a,b,c){a=a|0;b=b|0;c=c|0;a=(b&2|0)!=0;g[c>>2]=(b&1|0?-.7071067811865476:.7071067811865476)+(a?-0.0:0.0);g[c+4>>2]=a?-.7071067690849304:.7071067690849304;return}function wi(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,h=0;f=+g[b>>2];h=!(f>0.0);e=+g[b+4>>2];b=e>0.0;c[d>>2]=(b?0:2)|h&1;g[a+92>>2]=(h?-.7071067811865476:.7071067811865476)+(b?0.0:-0.0);g[a+96>>2]=b?.7071067690849304:-.7071067690849304;g[a+84>>2]=f;g[a+88>>2]=e;return}function xi(a,b,c){a=a|0;b=b|0;c=c|0;g[c>>2]=b|0?0.0:1.4142135381698608;g[c+4>>2]=0.0;return}function yi(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0;e=+g[b>>2];f=!(e>.7071067811865476);c[d>>2]=f&1;g[a+92>>2]=f?0.0:1.4142135381698608;g[a+96>>2]=0.0;b=c[b+4>>2]|0;g[a+84>>2]=e;c[a+88>>2]=b;return}function zi(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,h=0,k=0,l=0,m=0,n=0,o=0,p=0;o=i;i=i+48|0;if((i|0)>=(j|0))ba();h=o+32|0;k=o+24|0;l=o+16|0;m=o+8|0;n=o;p=b&7;a=c[a+100>>2]|0;e=+g[a+(p<<3)>>2];f=+g[a+(p<<3)+4>>2];switch(b>>>3&3|0){case 0:{g[d>>2]=e;g[d+4>>2]=f;i=o;return}case 1:{g[l>>2]=e;g[l+4>>2]=f;c[h>>2]=c[l>>2];c[h+4>>2]=c[l+4>>2];Ko(k,h);p=c[k+4>>2]|0;c[d>>2]=c[k>>2];c[d+4>>2]=p;i=o;return}case 2:{g[n>>2]=e;g[n+4>>2]=f;c[h>>2]=c[n>>2];c[h+4>>2]=c[n+4>>2];Ko(m,h);f=-+g[m+4>>2];g[d>>2]=-+g[m>>2];g[d+4>>2]=f;i=o;return}case 3:{g[d>>2]=-e;g[d+4>>2]=-f;i=o;return}default:{}}}function Ai(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,h=0,k=0,l=0,m=0,n=0,o=0,p=0.0,q=0.0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0.0,y=0;y=i;i=i+80|0;if((i|0)>=(j|0))ba();s=y+72|0;t=y+24|0;u=y+16|0;v=y+8|0;w=y;h=y+64|0;k=y+56|0;l=y+48|0;m=y+40|0;o=y+32|0;x=+g[b>>2];r=+g[b+4>>2];n=(x<0.0&1)<<1|r<0.0;switch(n|0){case 0:{p=x;q=r;break}case 1:{g[k>>2]=x;g[k+4>>2]=r;c[s>>2]=c[k>>2];c[s+4>>2]=c[k+4>>2];Ko(h,s);p=+g[h>>2];q=+g[h+4>>2];break}case 2:{g[m>>2]=x;g[m+4>>2]=r;c[s>>2]=c[m>>2];c[s+4>>2]=c[m+4>>2];Ko(l,s);p=-+g[l>>2];q=-+g[l+4>>2];break}case 3:{p=-x;q=-r;break}default:{}}if(!(p>=0.0))Ha(32462,32486,98,32515);if(!(q>=0.0))Ha(32539,32486,99,32515);k=a+100|0;b=o+4|0;m=c[k>>2]|0;e=q-+g[m+4>>2];g[o>>2]=p-+g[m>>2];g[b>>2]=e;c[s>>2]=c[o>>2];c[s+4>>2]=c[o+4>>2];e=+wo(s);c[d>>2]=0;m=c[k>>2]|0;f=q-+g[m+12>>2];g[o>>2]=p-+g[m+8>>2];g[b>>2]=f;c[s>>2]=c[o>>2];c[s+4>>2]=c[o+4>>2];f=+wo(s);if(f>2]=1;e=f}m=c[k>>2]|0;f=q-+g[m+20>>2];g[o>>2]=p-+g[m+16>>2];g[b>>2]=f;c[s>>2]=c[o>>2];c[s+4>>2]=c[o+4>>2];f=+wo(s);if(f>2]=2;e=f}m=c[k>>2]|0;f=q-+g[m+28>>2];g[o>>2]=p-+g[m+24>>2];g[b>>2]=f;c[s>>2]=c[o>>2];c[s+4>>2]=c[o+4>>2];f=+wo(s);if(f>2]=3;e=f}m=c[k>>2]|0;f=q-+g[m+36>>2];g[o>>2]=p-+g[m+32>>2];g[b>>2]=f;c[s>>2]=c[o>>2];c[s+4>>2]=c[o+4>>2];f=+wo(s);if(f>2]=4;else f=e;m=c[k>>2]|0;e=q-+g[m+44>>2];g[o>>2]=p-+g[m+40>>2];g[b>>2]=e;c[s>>2]=c[o>>2];c[s+4>>2]=c[o+4>>2];e=+wo(s);if(e>2]=5;f=e}m=c[k>>2]|0;e=q-+g[m+52>>2];g[o>>2]=p-+g[m+48>>2];g[b>>2]=e;c[s>>2]=c[o>>2];c[s+4>>2]=c[o+4>>2];e=+wo(s);if(e>2]=6;else e=f;m=c[k>>2]|0;q=q-+g[m+60>>2];g[o>>2]=p-+g[m+56>>2];g[b>>2]=q;c[s>>2]=c[o>>2];c[s+4>>2]=c[o+4>>2];if(+wo(s)>2]=7;b=7}else b=c[d>>2]|0;o=b|n<<3;c[d>>2]=o;h=a+92|0;d=b&7;n=c[k>>2]|0;e=+g[n+(d<<3)>>2];f=+g[n+(d<<3)+4>>2];switch(o>>>3&3|0){case 0:{g[h>>2]=e;g[a+96>>2]=f;w=a+88|0;a=a+84|0;g[a>>2]=x;g[w>>2]=r;i=y;return}case 1:{g[u>>2]=e;g[u+4>>2]=f;c[s>>2]=c[u>>2];c[s+4>>2]=c[u+4>>2];Ko(t,s);w=c[t+4>>2]|0;c[h>>2]=c[t>>2];c[a+96>>2]=w;w=a+88|0;a=a+84|0;g[a>>2]=x;g[w>>2]=r;i=y;return}case 2:{g[w>>2]=e;g[w+4>>2]=f;c[s>>2]=c[w>>2];c[s+4>>2]=c[w+4>>2];Ko(v,s);q=-+g[v+4>>2];g[h>>2]=-+g[v>>2];g[a+96>>2]=q;w=a+88|0;a=a+84|0;g[a>>2]=x;g[w>>2]=r;i=y;return}case 3:{g[h>>2]=-e;g[a+96>>2]=-f;w=a+88|0;a=a+84|0;g[a>>2]=x;g[w>>2]=r;i=y;return}default:{}}}function Bi(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,h=0,k=0,l=0,m=0,n=0,o=0,p=0;o=i;i=i+48|0;if((i|0)>=(j|0))ba();h=o+32|0;k=o+24|0;l=o+16|0;m=o+8|0;n=o;p=b&31;a=c[a+100>>2]|0;e=+g[a+(p<<3)>>2];f=+g[a+(p<<3)+4>>2];switch(b>>>5&3|0){case 0:{g[d>>2]=e;g[d+4>>2]=f;i=o;return}case 1:{g[l>>2]=e;g[l+4>>2]=f;c[h>>2]=c[l>>2];c[h+4>>2]=c[l+4>>2];Ko(k,h);p=c[k+4>>2]|0;c[d>>2]=c[k>>2];c[d+4>>2]=p;i=o;return}case 2:{g[n>>2]=e;g[n+4>>2]=f;c[h>>2]=c[n>>2];c[h+4>>2]=c[n+4>>2];Ko(m,h);f=-+g[m+4>>2];g[d>>2]=-+g[m>>2];g[d+4>>2]=f;i=o;return}case 3:{g[d>>2]=-e;g[d+4>>2]=-f;i=o;return}default:{}}}function Ci(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,h=0,k=0,l=0,m=0,n=0,o=0,p=0.0,q=0.0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0.0,y=0;y=i;i=i+80|0;if((i|0)>=(j|0))ba();s=y+72|0;t=y+64|0;u=y+40|0;v=y+24|0;w=y+16|0;h=y+56|0;k=y+48|0;l=y+32|0;m=y+8|0;o=y;x=+g[b>>2];r=+g[b+4>>2];n=(x<0.0&1)<<1|r<0.0;switch(n|0){case 0:{p=x;q=r;break}case 1:{g[k>>2]=x;g[k+4>>2]=r;c[s>>2]=c[k>>2];c[s+4>>2]=c[k+4>>2];Ko(h,s);p=+g[h>>2];q=+g[h+4>>2];break}case 2:{g[m>>2]=x;g[m+4>>2]=r;c[s>>2]=c[m>>2];c[s+4>>2]=c[m+4>>2];Ko(l,s);p=-+g[l>>2];q=-+g[l+4>>2];break}case 3:{p=-x;q=-r;break}default:{}}if(!(p>=0.0))Ha(32462,32563,99,32593);if(!(q>=0.0))Ha(32539,32563,100,32593);k=a+100|0;b=o+4|0;f=0.0;h=0;while(1){m=c[k>>2]|0;e=q-+g[m+(h<<3)+4>>2];g[o>>2]=p-+g[m+(h<<3)>>2];g[b>>2]=e;c[s>>2]=c[o>>2];c[s+4>>2]=c[o+4>>2];e=+wo(s);if((h|0)==0|e>2]=h;else e=f;h=h+1|0;if((h|0)==32)break;else f=e}m=c[d>>2]|0;o=m|n<<5;c[d>>2]=o;b=a+92|0;d=m&31;n=c[k>>2]|0;e=+g[n+(d<<3)>>2];f=+g[n+(d<<3)+4>>2];switch(o>>>5&3|0){case 0:{g[b>>2]=e;g[a+96>>2]=f;w=a+88|0;a=a+84|0;g[a>>2]=x;g[w>>2]=r;i=y;return}case 1:{g[u>>2]=e;g[u+4>>2]=f;c[s>>2]=c[u>>2];c[s+4>>2]=c[u+4>>2];Ko(t,s);w=c[t+4>>2]|0;c[b>>2]=c[t>>2];c[a+96>>2]=w;w=a+88|0;a=a+84|0;g[a>>2]=x;g[w>>2]=r;i=y;return}case 2:{g[w>>2]=e;g[w+4>>2]=f;c[s>>2]=c[w>>2];c[s+4>>2]=c[w+4>>2];Ko(v,s);q=-+g[v+4>>2];g[b>>2]=-+g[v>>2];g[a+96>>2]=q;w=a+88|0;a=a+84|0;g[a>>2]=x;g[w>>2]=r;i=y;return}case 3:{g[b>>2]=-e;g[a+96>>2]=-f;w=a+88|0;a=a+84|0;g[a>>2]=x;g[w>>2]=r;i=y;return}default:{}}}function Di(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if((c[a+8>>2]|0)>>>0>b>>>0){e=c[a+76>>2]|0;a=c[e+(b<<3)+4>>2]|0;c[d>>2]=c[e+(b<<3)>>2];c[d+4>>2]=a;return}else{Qp(32618,52,1,c[2348]|0)|0;kb(1)}}function Ei(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,k=0.0,l=0.0,m=0.0,n=0,o=0,p=0.0,q=0,r=0,s=0,t=0;t=i;i=i+16|0;if((i|0)>=(j|0))ba();f=t+8|0;h=t;s=a+8|0;if(!(c[s>>2]|0))e=0;else{l=+g[b>>2];m=+g[b+4>>2];n=a+76|0;o=h+4|0;p=0.0;q=0;e=0;while(1){r=c[n>>2]|0;k=m-+g[r+(q<<3)+4>>2];g[h>>2]=l-+g[r+(q<<3)>>2];g[o>>2]=k;c[f>>2]=c[h>>2];c[f+4>>2]=c[h+4>>2];k=+wo(f);r=(q|0)==0|k>>0>=(c[s>>2]|0)>>>0)break;else p=r?k:p}}c[d>>2]=e;if((c[s>>2]|0)>>>0>e>>>0){s=c[a+76>>2]|0;d=c[s+(e<<3)+4>>2]|0;c[a+92>>2]=c[s+(e<<3)>>2];c[a+96>>2]=d;d=c[b+4>>2]|0;c[a+84>>2]=c[b>>2];c[a+88>>2]=d;i=t;return}else{Qp(32618,52,1,c[2348]|0)|0;kb(1)}}function Fi(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0,h=0,k=0.0,l=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0;q=i;i=i+16|0;if((i|0)>=(j|0))ba();n=q+8|0;o=q;if((c[a>>2]|0)!=60){Qp(32671,56,1,c[2348]|0)|0;kb(1)}p=a+8|0;if((c[p>>2]|0)!=(d|0)){Qp(32728,50,1,c[2348]|0)|0;kb(1)}if(d){e=a+76|0;h=0;do{s=c[b+(h<<3)+4>>2]|0;r=c[e>>2]|0;c[r+(h<<3)>>2]=c[b+(h<<3)>>2];c[r+(h<<3)+4>>2]=s;h=h+1|0}while((h|0)!=(d|0));if((c[a>>2]|0)!=60)e=c[p>>2]|0;else l=10}else l=10;if((l|0)==10){d=c[p>>2]|0;if(!d){i=q;return}h=a+76|0;b=c[h>>2]|0;e=0;f=0.0;k=0.0;do{f=f+ +g[b+(e<<3)>>2];k=k+ +g[b+(e<<3)+4>>2];e=e+1|0}while((e|0)!=(d|0));t=+(d>>>0);m=f/t;f=k/t;e=b+4|0;k=+g[e>>2]-f;g[b>>2]=+g[b>>2]-m;g[e>>2]=k;e=c[p>>2]|0;if(e>>>0>1){d=1;do{e=c[h>>2]|0;s=e+(d<<3)|0;e=e+(d<<3)+4|0;t=+g[e>>2]-f;g[s>>2]=+g[s>>2]-m;g[e>>2]=t;d=d+1|0;e=c[p>>2]|0}while(d>>>0>>0)}}if(!e){i=q;return}h=a+76|0;d=o+4|0;f=0.0;b=0;do{s=c[h>>2]|0;e=c[s+(b<<3)+4>>2]|0;c[o>>2]=c[s+(b<<3)>>2];c[d>>2]=e;c[n>>2]=c[o>>2];c[n+4>>2]=c[o+4>>2];t=+wo(n);f=f+t*t;b=b+1|0;e=c[p>>2]|0}while(b>>>0>>0);f=+O(+(f/+(e>>>0)));if(!e){i=q;return}else e=0;do{s=c[h>>2]|0;r=s+(e<<3)|0;s=s+(e<<3)+4|0;t=+g[s>>2]/f;g[r>>2]=+g[r>>2]/f;g[s>>2]=t;e=e+1|0}while(e>>>0<(c[p>>2]|0)>>>0);i=q;return}function Gi(a,b){a=a|0;b=b|0;if((c[a>>2]|0)==(b|0)){b=a;return b|0}Hi(a);b=di(b)|0;return b|0}function Hi(a){a=a|0;var b=0;b=c[a+76>>2]|0;if(b|0)Yp(b);b=c[a+244>>2]|0;if(b|0)Yp(b);b=c[a>>2]|0;switch(b|0){case 50:{Yp(c[a+100>>2]|0);Yp(a);return}case 51:{Yp(c[a+100>>2]|0);Yp(a);return}default:{if(!(Ui(b)|0)){Yp(a);return}Yp(c[a+232>>2]|0);Yp(a);return}}}function Ii(a){a=a|0;var b=0;b=Np()|0;return (b>>>0)%((c[a+8>>2]|0)>>>0)|0|0}function Ji(a){a=a|0;return c[a+4>>2]|0}function Ki(a){a=a|0;return c[a>>2]|0}function Li(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if((c[a+8>>2]|0)>>>0<=b>>>0){Qp(31955,65,1,c[2348]|0)|0;kb(1)}if(!(c[a+80>>2]|0)){tb[c[a+236>>2]&31](a,b,d);return}else{e=c[a+76>>2]|0;a=c[e+(b<<3)+4>>2]|0;c[d>>2]=c[e+(b<<3)>>2];c[d+4>>2]=a;return}}function Mi(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,k=0;e=i;i=i+16|0;if((i|0)>=(j|0))ba();f=e+8|0;h=e;g=c[a+240>>2]|0;k=c[b+4>>2]|0;c[h>>2]=c[b>>2];c[h+4>>2]=k;c[f>>2]=c[h>>2];c[f+4>>2]=c[h+4>>2];tb[g&31](a,f,d);i=e;return}function Ni(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,k=0,l=0,m=0,n=0,o=0,p=0.0,q=0.0;o=i;i=i+48|0;if((i|0)>=(j|0))ba();h=o+32|0;k=o+24|0;l=o+16|0;n=o+8|0;m=o;switch(c[b>>2]|0){case 60:{n=c[d+4>>2]|0;c[k>>2]=c[d>>2];c[k+4>>2]=n;c[h>>2]=c[k>>2];c[h+4>>2]=c[k+4>>2];Oi(b,h,e,f);i=o;return}case 47:{p=+g[d>>2];d=c[d+4>>2]|0;n=~~(p*-2.0*4.0*16.0+127.0);n=(n|0)>255?255:n;a[f>>0]=(n|0)<0?0:n;n=!(p>0.0);g[b+92>>2]=n?-1.0:1.0;g[b+96>>2]=0.0;g[b+84>>2]=p;c[b+88>>2]=d;c[e>>2]=n&1;i=o;return}case 48:{q=+g[d>>2];p=+g[d+4>>2];d=~~(p*-2.0*5.800000190734863*16.0+127.0);d=(d|0)>255?255:d;a[f>>0]=(d|0)<0?0:d;d=~~(q*-2.0*5.800000190734863*16.0+127.0);d=(d|0)>255?255:d;a[f+1>>0]=(d|0)<0?0:d;d=!(q>0.0);n=p>0.0;c[e>>2]=(n?0:2)|d&1;g[b+92>>2]=(d?-.7071067811865476:.7071067811865476)+(n?0.0:-0.0);g[b+96>>2]=n?.7071067690849304:-.7071067690849304;g[b+84>>2]=q;g[b+88>>2]=p;i=o;return}default:{if(c[b+244>>2]|0?c[b+248>>2]|0:0){n=c[d+4>>2]|0;c[l>>2]=c[d>>2];c[l+4>>2]=n;c[h>>2]=c[l>>2];c[h+4>>2]=c[l+4>>2];Pi(b,h,e,f);i=o;return}l=c[b+240>>2]|0;k=c[d+4>>2]|0;c[m>>2]=c[d>>2];c[m+4>>2]=k;c[h>>2]=c[m>>2];c[h+4>>2]=c[m+4>>2];tb[l&31](b,h,n);n=c[n>>2]|0;c[e>>2]=n;Xi(n,c[b+4>>2]|0,f);i=o;return}}}function Oi(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,k=0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0.0,t=0,u=0,v=0,w=0.0,x=0.0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0.0,K=0,L=0,M=0.0;L=i;i=i+32|0;if((i|0)>=(j|0))ba();A=L+24|0;B=L+16|0;C=L+8|0;D=L;H=c[b+4>>2]|0;I=b+8|0;E=c[I>>2]|0;J=+(E>>>0)*1.2000000476837158;K=i;i=i+((1*(H<<2)|0)+15&-16)|0;if((i|0)>=(j|0))ba();G=i;i=i+((1*(H<<2)|0)+15&-16)|0;if((i|0)>=(j|0))ba();F=(H|0)==0;if(!F){h=0;do{g[K+(h<<2)>>2]=4.0;g[G+(h<<2)>>2]=4.0;h=h+1|0}while((h|0)!=(H|0))}a:do if(!E)k=0;else{v=b+76|0;w=+g[d>>2];x=+g[d+4>>2];y=C+4|0;z=B+4|0;t=H+-1|0;if(F){s=0.0;q=0;k=0;while(1){u=c[v>>2]|0;m=w-+g[u+(q<<3)>>2];n=x-+g[u+(q<<3)+4>>2];g[C>>2]=m;g[y>>2]=n;c[A>>2]=c[C>>2];c[A+4>>2]=c[C+4>>2];Ko(B,A);o=+g[B>>2];p=+g[z>>2];l=m*o-n*p;M=n*o+m*p;if((l!=l|0.0!=0.0)&(M!=M|0.0!=0.0)){ao(D,m,n,o,p);l=+g[D>>2]}h=(q|0)==0|l>2]|0;l=w-+g[r+(u<<3)>>2];m=x-+g[r+(u<<3)+4>>2];g[C>>2]=l;g[y>>2]=m;c[A>>2]=c[C>>2];c[A+4>>2]=c[C+4>>2];Ko(B,A);n=+g[B>>2];o=+g[z>>2];p=l*n-m*o;M=m*n+l*o;if((p!=p|0.0!=0.0)&(M!=M|0.0!=0.0)){ao(D,l,m,n,o);p=+g[D>>2]}r=(u|0)==0|p>2])g[h>>2]=p}else{h=G+(q<<2)|0;if(p<+g[h>>2])g[h>>2]=p}q=q+1|0}while((q|0)!=(H|0));u=u+1|0;if((u|0)==(E|0))break;else s=r?p:s}}while(0);if(!F){h=0;do{F=~~(J*(+g[K+(h<<2)>>2]-+g[G+(h<<2)>>2])*16.0+127.0);F=(F|0)>255?255:F;a[f+h>>0]=(F|0)<0?0:F;h=h+1|0}while((h|0)!=(H|0))}c[e>>2]=k;if((c[I>>2]|0)>>>0>k>>>0){e=c[b+76>>2]|0;f=c[e+(k<<3)+4>>2]|0;c[b+92>>2]=c[e+(k<<3)>>2];c[b+96>>2]=f;f=c[d+4>>2]|0;c[b+84>>2]=c[d>>2];c[b+88>>2]=f;i=L;return}else{Qp(32618,52,1,c[2348]|0)|0;kb(1)}}function Pi(b,e,f,h){b=b|0;e=e|0;f=f|0;h=h|0;var l=0,m=0.0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0.0,C=0.0,D=0,E=0,F=0,G=0,H=0.0,I=0,J=0,K=0,L=0,M=0.0;L=i;i=i+48|0;if((i|0)>=(j|0))ba();n=L+40|0;F=L+32|0;K=L+16|0;t=L+24|0;s=L+8|0;u=L;l=c[e>>2]|0;e=c[e+4>>2]|0;G=c[b+240>>2]|0;c[F>>2]=l;c[F+4>>2]=e;c[n>>2]=c[F>>2];c[n+4>>2]=c[F+4>>2];tb[G&31](b,n,K);G=c[b+4>>2]|0;D=b+8|0;H=+((c[D>>2]|0)>>>0)*1.2000000476837158;I=i;i=i+((1*(G<<2)|0)+15&-16)|0;if((i|0)>=(j|0))ba();J=i;i=i+((1*(G<<2)|0)+15&-16)|0;if((i|0)>=(j|0))ba();E=(G|0)==0;C=(c[k>>2]=l,+g[k>>2]);B=(c[k>>2]=e,+g[k>>2]);if(!E){e=0;do{g[I+(e<<2)>>2]=8.0;g[J+(e<<2)>>2]=8.0;e=e+1|0}while((e|0)!=(G|0))}z=c[b+244>>2]|0;A=c[b+248>>2]|0;q=C-+g[b+92>>2];r=B-+g[b+96>>2];g[s>>2]=q;g[s+4>>2]=r;c[n>>2]=c[s>>2];c[n+4>>2]=c[s+4>>2];Ko(t,n);p=+g[t>>2];o=+g[t+4>>2];m=q*p-r*o;M=r*p+q*o;if((m!=m|0.0!=0.0)&(M!=M|0.0!=0.0)){ao(u,q,r,p,o);m=+g[u>>2]}if(!E){e=c[K>>2]|0;l=G+-1|0;n=0;do{if(!(e&1<>2]=m;else g[J+(n<<2)>>2]=m;n=n+1|0}while((n|0)!=(G|0))}a:do if(A|0){u=b+80|0;v=b+236|0;w=F+4|0;x=G+-1|0;y=b+76|0;if(E){l=0;while(1){e=d[z+((_(c[K>>2]|0,A)|0)+l)>>0]|0;if(!(c[u>>2]|0)){if((c[D>>2]|0)>>>0<=e>>>0)break;tb[c[v>>2]&31](b,e,F)}else{s=c[y>>2]|0;t=c[s+(e<<3)+4>>2]|0;c[F>>2]=c[s+(e<<3)>>2];c[w>>2]=t}l=l+1|0;if(l>>>0>=A>>>0)break a}t=c[2348]|0;Qp(31955,65,1,t)|0;kb(1)}l=c[K>>2]|0;t=0;while(1){e=d[z+((_(l,A)|0)+t)>>0]|0;if(!(c[u>>2]|0)){if((c[D>>2]|0)>>>0<=e>>>0)break;tb[c[v>>2]&31](b,e,F);m=+g[F>>2];o=+g[w>>2];l=c[K>>2]|0}else{s=c[y>>2]|0;n=c[s+(e<<3)>>2]|0;s=c[s+(e<<3)+4>>2]|0;c[F>>2]=n;c[w>>2]=s;m=(c[k>>2]=n,+g[k>>2]);o=(c[k>>2]=s,+g[k>>2])}M=C-m;m=B-o;m=M*M+m*m;n=d[z+((_(l,A)|0)+t)>>0]|0;s=0;do{if(!(n&1<>2])g[e>>2]=m}else{e=J+(s<<2)|0;if(m<+g[e>>2])g[e>>2]=m}s=s+1|0}while((s|0)!=(G|0));t=t+1|0;if(t>>>0>=A>>>0)break a}b=c[2348]|0;Qp(31955,65,1,b)|0;kb(1)}while(0);if(E){K=c[K>>2]|0;c[f>>2]=K;i=L;return}else e=0;do{b=~~(H*(+g[I+(e<<2)>>2]-+g[J+(e<<2)>>2])*16.0+127.0);b=(b|0)>255?255:b;a[h+e>>0]=(b|0)<0?0:b;e=e+1|0}while((e|0)!=(G|0));K=c[K>>2]|0;c[f>>2]=K;i=L;return}function Qi(a){a=a|0;var b=0.0,d=0.0,e=0.0,f=0,h=0.0,k=0.0,l=0,m=0.0,n=0,o=0,p=0,q=0;l=i;i=i+32|0;if((i|0)>=(j|0))ba();o=l+24|0;n=l+16|0;p=l+8|0;f=l;h=+g[a+84>>2];k=+g[a+88>>2];q=c[a+96>>2]|0;c[p>>2]=c[a+92>>2];c[p+4>>2]=q;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];Ko(n,o);b=+g[n>>2];d=+g[n+4>>2];m=h*b-k*d;e=k*b+h*d;if(!((m!=m|0.0!=0.0)&(e!=e|0.0!=0.0))){m=e;i=l;return +m}ao(f,h,k,b,d);m=+g[f+4>>2];i=l;return +m}function Ri(a){a=a|0;var b=0,d=0.0,e=0,f=0;b=i;i=i+16|0;if((i|0)>=(j|0))ba();e=b+8|0;f=b;d=+g[a+96>>2]-+g[a+88>>2];g[f>>2]=+g[a+92>>2]-+g[a+84>>2];g[f+4>>2]=d;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];d=+wo(e);i=b;return +d}function Si(a){a=a|0;var b=0,d=0,e=0,f=0;f=i;i=i+16|0;if((i|0)>=(j|0))ba();d=f;b=0;do{if(!(dp(a,c[636+(b<<4)>>2]|0)|0)){e=5;break}b=b+1|0}while(b>>>0<61);if((e|0)==5){i=f;return b|0}e=c[2348]|0;c[d>>2]=a;Kp(e,35245,d)|0;e=0;i=f;return e|0}function Ti(a){a=a|0;return (a+-9|0)>>>0<8|0}function Ui(a){a=a|0;return (a+-40|0)>>>0<7|0}function Vi(a){a=a|0;return a>>>1^a|0}function Wi(a){a=a|0;return a>>>1^a^a>>>2^a>>>3^a>>>4^a>>>5^a>>>6^a>>>7^a>>>8^a>>>9^a>>>10^a>>>11^a>>>12^a>>>13^a>>>14^a>>>15^a>>>16|0}function Xi(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=i;i=i+16|0;if((i|0)>=(j|0))ba();f=h;if(d>>>0>16){g=c[2348]|0;c[f>>2]=16;Kp(g,35316,f)|0;kb(1)}if(!d){i=h;return}f=d+-1|0;g=0;do{a[e+g>>0]=((1<>31;g=g+1|0}while((g|0)!=(d|0));i=h;return}function Yi(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0.0,k=0,l=0,m=0,n=0,o=0.0;m=Rh(d)|0;m=Rj(m>>>0<4?4:m>>>0>8?8:m)|0;n=(d|0)==0;if(n){Sj(m);k=c[2348]|0;Qp(35892,69,1,k)|0;kb(1)}else{i=0;l=0}do{k=(Uj(m,3)|0)&1;do if(a[b+l>>0]|0)if(!(l&1)){g[e+(l<<3)>>2]=k|0?1.0:-1.0;g[e+(l<<3)+4>>2]=0.0;i=i+1|0;break}else{g[e+(l<<3)>>2]=0.0;g[e+(l<<3)+4>>2]=0.0;break}else{g[e+(l<<3)>>2]=0.0;g[e+(l<<3)+4>>2]=0.0}while(0);l=l+1|0}while((l|0)!=(d|0));Sj(m);if(!i){m=c[2348]|0;Qp(35892,69,1,m)|0;kb(1)}c[h>>2]=i;fl(d,e,f,-1,0);j=1.0/+O(+(+(i>>>0)));if(n)return;else i=0;do{e=f+(i<<3)|0;n=f+(i<<3)+4|0;o=j*+g[n>>2];g[e>>2]=j*+g[e>>2];g[n>>2]=o;i=i+1|0}while((i|0)!=(d|0));return}function Zi(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0.0,k=0,l=0,m=0,n=0,o=0.0;m=Rh(d)|0;m=Rj(m>>>0<4?5:(m>>>0>8?8:m)+1|0)|0;n=(d|0)==0;if(n){Sj(m);k=c[2348]|0;Qp(35962,69,1,k)|0;kb(1)}else{i=0;l=0}do{k=Uj(m,3)|0;if(!(a[b+l>>0]|0))j=0.0;else{j=k&1|0?1.0:-1.0;i=i+1|0}g[e+(l<<3)>>2]=j;g[e+(l<<3)+4>>2]=0.0;l=l+1|0}while((l|0)!=(d|0));Sj(m);if(!i){m=c[2348]|0;Qp(35962,69,1,m)|0;kb(1)}c[h>>2]=i;fl(d,e,f,-1,0);j=1.0/+O(+(+(i>>>0)));if(n)return;else i=0;do{e=f+(i<<3)|0;n=f+(i<<3)+4|0;o=j*+g[n>>2];g[e>>2]=j*+g[e>>2];g[n>>2]=o;i=i+1|0}while((i|0)!=(d|0));return}function _i(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;if(b>>>0<6)Qp(36032,66,1,c[2348]|0)|0;e=(b>>>0)/10|0;h=b>>>0>34?8:4;j=h>>>1;if(b|0)eq(d|0,0,b|0)|0;i=(b>>>1)-(e>>>0<2?2:e)|0;e=i>>>0>1;if(!e)return;f=h+-1|0;g=1;do{a[d+g>>0]=(g+j&f|0)==0?1:2;g=g+1|0}while(g>>>0>>0);if(!e)return;e=h+-1|0;f=1;do{a[d+(b-f)>>0]=(f+j&e|0)==0?1:2;f=f+1|0}while(f>>>0>>0);return}function $i(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=i;i=i+16|0;if((i|0)>=(j|0))ba();r=s;a:do if(!d){o=0;p=0;q=0}else{m=0;k=0;l=0;n=0;b:while(1){h=a[b+n>>0]|0;switch(h<<24>>24){case 0:{h=m;k=k+1|0;break}case 1:{h=m;l=l+1|0;break}case 2:{h=m+1|0;break}default:break b}n=n+1|0;if(n>>>0>=d>>>0){o=h;p=k;q=l;break a}else m=h}n=c[2348]|0;c[r>>2]=h&255;Kp(n,36099,r)|0;kb(1)}while(0);c[e>>2]=p;c[f>>2]=q;c[g>>2]=o;i=s;return}function aj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0.0;if(a>>>0<2){Qp(36165,71,1,c[2348]|0)|0;kb(1)}if(a&1|0){Qp(36237,65,1,c[2348]|0)|0;kb(1)}if(b>>>0>a>>>0){Qp(36303,72,1,c[2348]|0)|0;kb(1)}if(d>>>0>b>>>0){Qp(36376,71,1,c[2348]|0)|0;kb(1)}k=Xp(80)|0;c[k>>2]=a;c[k+4>>2]=b;i=k+12|0;c[i>>2]=d;b=Xp(a)|0;h=k+8|0;c[h>>2]=b;if(!e){_i(a,b);b=c[h>>2]|0;d=c[k>>2]|0}else{fq(b|0,e|0,a|0)|0;d=a}a=k+28|0;j=k+32|0;$i(b,d,k+24|0,a,j);b=c[a>>2]|0;d=c[j>>2]|0;if((b|0)==(0-d|0)){Qp(36448,72,1,c[2348]|0)|0;kb(1)}if(!d){Qp(36521,70,1,c[2348]|0)|0;kb(1)}if(b>>>0<2){Qp(36592,71,1,c[2348]|0)|0;kb(1)}l=c[k>>2]|0;m=l<<3;n=Xp(m)|0;c[k+52>>2]=n;m=Xp(m)|0;c[k+56>>2]=m;c[k+48>>2]=Mk(l,n,m,-1,0)|0;m=c[k>>2]|0;n=m<<3;l=Xp(n)|0;c[k+60>>2]=l;e=Xp(n)|0;c[k+64>>2]=e;d=k+68|0;c[d>>2]=Xp(n)|0;b=k+72|0;c[b>>2]=Xp(n)|0;Yi(c[h>>2]|0,m,l,e,k+36|0);Zi(c[h>>2]|0,c[k>>2]|0,c[d>>2]|0,c[b>>2]|0,k+40|0);b=c[i>>2]|0;d=Xp(b<<2)|0;c[k+16>>2]=d;c[k+20>>2]=Xp(b<<3)|0;if(!b){m=c[a>>2]|0;n=c[j>>2]|0;m=n+m|0;f=+(m>>>0);f=+O(+f);f=1.0/f;m=k+44|0;g[m>>2]=f;m=Rj(8)|0;n=k+76|0;c[n>>2]=m;return k|0}f=+(b>>>0);e=0;do{o=+R(+((+(e>>>0)+.5)/f*1.5707963267948966));g[d+(e<<2)>>2]=o*o;e=e+1|0}while(e>>>0>>0);m=c[a>>2]|0;n=c[j>>2]|0;m=n+m|0;o=+(m>>>0);o=+O(+o);o=1.0/o;m=k+44|0;g[m>>2]=o;m=Rj(8)|0;n=k+76|0;c[n>>2]=m;return k|0}function bj(a){a=a|0;Yp(c[a+8>>2]|0);Yp(c[a+52>>2]|0);Yp(c[a+56>>2]|0);dl(c[a+48>>2]|0);Yp(c[a+16>>2]|0);Yp(c[a+20>>2]|0);Yp(c[a+60>>2]|0);Yp(c[a+64>>2]|0);Yp(c[a+68>>2]|0);Yp(c[a+72>>2]|0);Sj(c[a+76>>2]|0);Yp(a);return}function cj(a){a=a|0;var b=0,d=0,e=0;Vj(c[a+76>>2]|0);d=a+12|0;if(!(c[d>>2]|0))return;a=a+20|0;b=0;do{e=c[a>>2]|0;g[e+(b<<3)>>2]=0.0;g[e+(b<<3)+4>>2]=0.0;b=b+1|0}while(b>>>0<(c[d>>2]|0)>>>0);return}function dj(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,l=0,m=0.0,n=0.0;d=c[a>>2]|0;h=a+4|0;e=c[h>>2]|0;if((e|0)!=(0-d|0)){i=a+64|0;f=0;do{k=((d+f-(e<<1)|0)>>>0)%(d>>>0)|0;l=c[i>>2]|0;j=c[l+(k<<3)+4>>2]|0;c[b+(f<<3)>>2]=c[l+(k<<3)>>2];c[b+(f<<3)+4>>2]=j;f=f+1|0;d=c[a>>2]|0;e=c[h>>2]|0}while(f>>>0<(e+d|0)>>>0)}f=a+12|0;if(!(c[f>>2]|0))return;d=a+16|0;e=0;do{n=+g[(c[d>>2]|0)+(e<<2)>>2];k=b+(e<<3)|0;l=b+(e<<3)+4|0;m=n*+g[l>>2];g[k>>2]=n*+g[k>>2];g[l>>2]=m;e=e+1|0}while(e>>>0<(c[f>>2]|0)>>>0);return}function ej(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;d=c[a>>2]|0;h=a+4|0;e=c[h>>2]|0;g=a+64|0;if((e|0)!=(0-d|0)){f=0;do{j=((d+f-e|0)>>>0)%(d>>>0)|0;k=c[g>>2]|0;i=c[k+(j<<3)+4>>2]|0;c[b+(f<<3)>>2]=c[k+(j<<3)>>2];c[b+(f<<3)+4>>2]=i;f=f+1|0;d=c[a>>2]|0;e=c[h>>2]|0}while(f>>>0<(e+d|0)>>>0)}gq(c[a+20>>2]|0,c[g>>2]|0,c[a+12>>2]<<3|0)|0;return}function fj(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0.0,k=0,l=0.0,m=0,n=0.0;i=a+56|0;gq(c[i>>2]|0,c[a+72>>2]|0,c[a>>2]<<3|0)|0;e=a+4|0;h=c[e>>2]|0;gq(b|0,(c[i>>2]|0)+((c[a>>2]|0)-h<<3)|0,h<<3|0)|0;gq(b+(c[e>>2]<<3)|0,c[i>>2]|0,c[a>>2]<<3|0)|0;e=a+12|0;if(!(c[e>>2]|0)){b=0;h=a+20|0;h=c[h>>2]|0;i=c[i>>2]|0;gq(h|0,i|0,b|0)|0;return}f=a+16|0;h=a+20|0;d=0;do{j=+g[(c[f>>2]|0)+(d<<2)>>2];k=b+(d<<3)|0;a=b+(d<<3)+4|0;n=j*+g[k>>2];j=j*+g[a>>2];g[k>>2]=n;g[a>>2]=j;m=c[h>>2]|0;l=+g[(c[f>>2]|0)+((c[e>>2]|0)+~d<<2)>>2];j=j+ +g[m+(d<<3)+4>>2]*l;g[k>>2]=n+ +g[m+(d<<3)>>2]*l;g[a>>2]=j;d=d+1|0;a=c[e>>2]|0}while(d>>>0>>0);m=a<<3;b=h;b=c[b>>2]|0;k=c[i>>2]|0;gq(b|0,k|0,m|0)|0;return}function gj(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0.0,p=0.0,q=0.0;f=c[b>>2]|0;a:do if(f|0){i=b+8|0;j=b+44|0;k=b+52|0;l=b+76|0;h=0;while(1){f=(((f>>>1)+h|0)>>>0)%(f>>>0)|0;switch(a[(c[i>>2]|0)+f>>0]|0){case 0:{m=c[k>>2]|0;g[m+(f<<3)>>2]=0.0;g[m+(f<<3)+4>>2]=0.0;break}case 1:{n=(Tj(c[l>>2]|0)|0)!=0;m=c[k>>2]|0;g[m+(f<<3)>>2]=+g[j>>2]*(n?1.0:-1.0);g[m+(f<<3)+4>>2]=0.0;break}default:{p=+g[j>>2];o=+g[d+(f<<3)+4>>2]*p;n=c[k>>2]|0;g[n+(f<<3)>>2]=+g[d+(f<<3)>>2]*p;g[n+(f<<3)+4>>2]=o}}h=h+1|0;f=c[b>>2]|0;if(h>>>0>=f>>>0)break a}}while(0);el(c[b+48>>2]|0);i=b+4|0;n=c[i>>2]|0;l=b+56|0;gq(e|0,(c[l>>2]|0)+((c[b>>2]|0)-n<<3)|0,n<<3|0)|0;gq(e+(c[i>>2]<<3)|0,c[l>>2]|0,c[b>>2]<<3|0)|0;i=b+12|0;if(!(c[i>>2]|0)){n=0;e=b+20|0;e=c[e>>2]|0;m=c[l>>2]|0;gq(e|0,m|0,n|0)|0;return}j=b+16|0;k=b+20|0;h=0;do{p=+g[(c[j>>2]|0)+(h<<2)>>2];n=e+(h<<3)|0;f=e+(h<<3)+4|0;q=p*+g[n>>2];p=p*+g[f>>2];g[n>>2]=q;g[f>>2]=p;m=c[k>>2]|0;o=+g[(c[j>>2]|0)+((c[i>>2]|0)+~h<<2)>>2];p=p+ +g[m+(h<<3)+4>>2]*o;g[n>>2]=q+ +g[m+(h<<3)>>2]*o;g[f>>2]=p;h=h+1|0;f=c[i>>2]|0}while(h>>>0>>0);n=f<<3;e=k;e=c[e>>2]|0;m=c[l>>2]|0;gq(e|0,m|0,n|0)|0;return}function hj(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0.0,j=0.0,k=0;f=a+12|0;d=c[f>>2]|0;if(!d)return;h=a+20|0;e=a+16|0;a=0;do{k=c[h>>2]|0;j=+g[(c[e>>2]|0)+(d+~a<<2)>>2];i=+g[k+(a<<3)+4>>2]*j;g[b+(a<<3)>>2]=+g[k+(a<<3)>>2]*j;g[b+(a<<3)+4>>2]=i;a=a+1|0;d=c[f>>2]|0}while(d>>>0>a>>>0);return}function ij(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0,k=0,l=0,m=0,n=0,o=0.0,p=0,q=0,r=0.0;l=Xp(216)|0;if(a>>>0>=8){if(a&1|0){Qp(36722,66,1,c[2348]|0)|0;kb(1)}if(b>>>0>a>>>0){Qp(36789,88,1,c[2348]|0)|0;kb(1)}}else Qp(36664,57,1,c[2348]|0)|0;c[l>>2]=a;k=l+8|0;c[k>>2]=b;c[l+4>>2]=a>>>1;d=Xp(a)|0;j=l+12|0;c[j>>2]=d;if(!e){_i(a,d);d=c[j>>2]|0;b=c[l>>2]|0}else{fq(d|0,e|0,a|0)|0;b=a}e=l+20|0;a=l+24|0;$i(d,b,l+16|0,e,a);d=c[e>>2]|0;b=c[a>>2]|0;if((d|0)==(0-b|0)){Qp(36878,73,1,c[2348]|0)|0;kb(1)}if(!b){Qp(36952,71,1,c[2348]|0)|0;kb(1)}if(d>>>0<2){Qp(37024,72,1,c[2348]|0)|0;kb(1)}p=c[l>>2]|0;m=p<<3;q=Xp(m)|0;c[l+52>>2]=q;m=Xp(m)|0;c[l+56>>2]=m;c[l+48>>2]=Mk(p,m,q,1,0)|0;c[l+60>>2]=qk((c[k>>2]|0)+(c[l>>2]|0)|0)|0;q=c[l>>2]|0;m=q<<3;p=Xp(m)|0;c[l+64>>2]=p;n=Xp(m)|0;c[l+68>>2]=n;b=l+72|0;c[b>>2]=Xp(m)|0;d=l+76|0;c[d>>2]=Xp(m)|0;m=l+28|0;Yi(c[j>>2]|0,q,p,n,m);n=l+32|0;Zi(c[j>>2]|0,c[l>>2]|0,c[b>>2]|0,c[d>>2]|0,n);j=c[l>>2]|0;i=+(j>>>0);o=+O(+i);g[l+36>>2]=o/+O(+(+(((c[a>>2]|0)+(c[e>>2]|0)|0)>>>0)));g[l+40>>2]=o/+O(+(+((c[m>>2]|0)>>>0)));g[l+44>>2]=o/+O(+(+((c[n>>2]|0)>>>0)));g[l+80>>2]=1.0;a=j<<3;n=Xp(a)|0;c[l+84>>2]=n;m=Xp(a)|0;c[l+88>>2]=m;e=Xp(a)|0;c[l+92>>2]=e;d=Xp(a)|0;b=l+96|0;c[b>>2]=d;c[l+100>>2]=Xp(a)|0;eq(n|0,0,a|0)|0;eq(m|0,0,a|0)|0;eq(e|0,0,a|0)|0;eq(d|0,0,a|0)|0;k=c[k>>2]|0;k=k>>>0<2?k:2;c[l+132>>2]=k;i=+(k>>>0)*2.0*3.141592653589793/i;if(j|0?(r=i*0.0,o=+R(+r),g[d>>2]=+Q(+r)+o*0.0,g[d+4>>2]=o,(c[l>>2]|0)>>>0>1):0){d=1;do{q=c[b>>2]|0;o=i*+(d>>>0);r=+R(+o);g[q+(d<<3)>>2]=+Q(+o)+r*0.0;g[q+(d<<3)+4>>2]=r;d=d+1|0}while(d>>>0<(c[l>>2]|0)>>>0)}c[l+160>>2]=f;c[l+164>>2]=h;q=l+108|0;c[q>>2]=zj(0)|0;d=l+112|0;c[d>>2]=Rj(8)|0;Dj(c[q>>2]|0);Vj(c[d>>2]|0);d=l+136|0;q=l+116|0;c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;c[q+12>>2]=0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;d=c[l>>2]|0;if(d>>>0>44){g[l+152>>2]=.3499999940395355;r=.30000001192092896;q=l+156|0;g[q>>2]=r;q=l+104|0;c[q>>2]=0;q=l+168|0;p=l+208|0;c[p>>2]=0;p=l+212|0;c[p>>2]=0;c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;c[q+12>>2]=0;c[q+16>>2]=0;c[q+20>>2]=0;c[q+24>>2]=0;c[q+28>>2]=0;return l|0}else{r=+((44-d|0)>>>0)*.009999999776482582;g[l+152>>2]=r+.3499999940395355;r=r+.30000001192092896;q=l+156|0;g[q>>2]=r;q=l+104|0;c[q>>2]=0;q=l+168|0;p=l+208|0;c[p>>2]=0;p=l+212|0;c[p>>2]=0;c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;c[q+12>>2]=0;c[q+16>>2]=0;c[q+20>>2]=0;c[q+24>>2]=0;c[q+28>>2]=0;return l|0}return 0}function jj(a){a=a|0;var b=0,d=0,e=0.0;Dj(c[a+108>>2]|0);Vj(c[a+112>>2]|0);b=a+136|0;d=a+116|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;b=c[a>>2]|0;if(b>>>0>44){g[a+152>>2]=.3499999940395355;e=.30000001192092896;d=a+156|0;g[d>>2]=e;d=a+104|0;c[d>>2]=0;return}else{g[a+152>>2]=+((44-b|0)>>>0)*.009999999776482582+.3499999940395355;e=+((44-b|0)>>>0)*.009999999776482582+.30000001192092896;d=a+156|0;g[d>>2]=e;d=a+104|0;c[d>>2]=0;return}}function kj(a){a=a|0;var b=0;b=c[a+176>>2]|0;if(b|0)uk(b);b=c[a+180>>2]|0;if(b|0)pk(b);b=c[a+184>>2]|0;if(b|0)uk(b);b=c[a+188>>2]|0;if(b|0)Yp(b);b=c[a+192>>2]|0;if(b|0)Yp(b);b=c[a+196>>2]|0;if(b|0)Yp(b);b=c[a+208>>2]|0;if(b|0)pk(b);b=c[a+212>>2]|0;if(b|0)pk(b);Yp(c[a+12>>2]|0);uk(c[a+60>>2]|0);Yp(c[a+52>>2]|0);Yp(c[a+56>>2]|0);dl(c[a+48>>2]|0);Yp(c[a+64>>2]|0);Yp(c[a+68>>2]|0);Yp(c[a+72>>2]|0);Yp(c[a+76>>2]|0);Yp(c[a+84>>2]|0);Yp(c[a+88>>2]|0);Yp(c[a+92>>2]|0);Yp(c[a+96>>2]|0);Yp(c[a+100>>2]|0);Ej(c[a+108>>2]|0);Sj(c[a+112>>2]|0);Yp(a);return}function lj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0.0,L=0.0;I=i;i=i+48|0;if((i|0)>=(j|0))ba();h=I+40|0;G=I+16|0;H=I;k=I+32|0;l=I+24|0;w=I+8|0;if(!d){i=I;return}z=H+4|0;A=a+104|0;B=a+60|0;C=l+4|0;D=a+168|0;E=a+124|0;m=a+4|0;n=a+8|0;o=a+84|0;p=a+80|0;q=G+4|0;r=a+140|0;s=a+136|0;t=a+176|0;u=w+4|0;v=a+180|0;x=a+108|0;y=k+4|0;F=0;do{e=c[b+(F<<3)>>2]|0;f=c[b+(F<<3)+4>>2]|0;c[H>>2]=e;c[z>>2]=f;if(c[A>>2]|0){J=c[x>>2]|0;c[k>>2]=e;c[y>>2]=f;c[h>>2]=c[k>>2];c[h+4>>2]=c[k+4>>2];Mj(J,h,H);Ij(c[x>>2]|0);e=c[H>>2]|0;f=c[z>>2]|0}J=c[B>>2]|0;c[l>>2]=e;c[C>>2]=f;c[h>>2]=c[l>>2];c[h+4>>2]=c[l+4>>2];tk(J,h);if(c[D>>2]|0){J=c[t>>2]|0;f=c[z>>2]|0;c[w>>2]=c[H>>2];c[u>>2]=f;c[h>>2]=c[w>>2];c[h+4>>2]=c[w+4>>2];tk(J,h);L=+g[H>>2];K=+g[z>>2];ok(c[v>>2]|0,L*L+K*K)}switch(c[A>>2]|0){case 0:{mj(a);break}case 1:{J=(c[E>>2]|0)+1|0;c[E>>2]=J;if(J>>>0>=(c[m>>2]|0)>>>0){c[E>>2]=0;sk(c[B>>2]|0,h);nj(a,(c[h>>2]|0)+(c[n>>2]<<3)|0,c[o>>2]|0);oj(a,c[o>>2]|0,G);K=+g[p>>2];L=K*+g[q>>2];g[s>>2]=K*+g[G>>2];g[r>>2]=L;c[A>>2]=2}break}case 2:{pj(a);break}case 3:{qj(a);break}case 4:{tj(a);break}default:{}}F=F+1|0}while((F|0)!=(d|0));i=I;return}function mj(a){a=a|0;var b=0.0,d=0,e=0,f=0,h=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0;q=i;i=i+48|0;if((i|0)>=(j|0))ba();n=q+32|0;d=q+24|0;m=q+8|0;h=q+16|0;o=q;p=a+124|0;l=(c[p>>2]|0)+1|0;c[p>>2]=l;if(l>>>0<(c[a>>2]|0)>>>0){i=q;return}c[p>>2]=0;sk(c[a+60>>2]|0,d);k=c[a+8>>2]|0;l=c[a>>2]|0;e=k+l|0;f=c[d>>2]|0;if(k>>>0>>0){b=0.0;d=k;do{s=+g[f+(d<<3)>>2];r=+g[f+(d<<3)+4>>2];b=b+(s*s+r*r);d=d+1|0}while(d>>>0>>0)}else b=0.0;t=+(l>>>0)/b;d=a+84|0;nj(a,f+(k<<3)|0,c[d>>2]|0);oj(a,c[d>>2]|0,m);d=m+4|0;r=t*+g[m>>2];s=t*+g[d>>2];g[m>>2]=r;g[d>>2]=s;g[h>>2]=r;g[h+4>>2]=s;c[n>>2]=c[h>>2];c[n+4>>2]=c[h+4>>2];b=+Bo(n);d=a+4|0;e=c[d>>2]|0;g[a+80>>2]=t;g[o>>2]=r;g[o+4>>2]=s;c[n>>2]=c[o>>2];c[n+4>>2]=c[o+4>>2];s=+wo(n);if(s>+g[a+152>>2]){n=~~+dq(+(b*+(e>>>0)/6.283185307179586));o=c[a>>2]|0;c[p>>2]=(((o+n|0)>>>0)%((c[d>>2]|0)>>>0)|0)+o;c[a+104>>2]=1}i=q;return}function nj(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,k=0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;B=i;i=i+32|0;if((i|0)>=(j|0))ba();x=B+24|0;y=B+16|0;z=B+8|0;A=B;gq(c[b+56>>2]|0,d|0,c[b>>2]<<3|0)|0;el(c[b+48>>2]|0);p=+O(+(+((c[b+28>>2]|0)>>>0)));w=c[b>>2]|0;p=p/+(w>>>0);if(!w){i=B;return}q=b+12|0;r=b+52|0;s=b+64|0;t=z+4|0;u=y+4|0;v=A+4|0;w=0;do{if((w&1|0)==0?(a[(c[q>>2]|0)+w>>0]|0)!=0:0){d=c[r>>2]|0;l=+g[d+(w<<3)>>2];m=+g[d+(w<<3)+4>>2];d=c[s>>2]|0;k=c[d+(w<<3)+4>>2]|0;c[z>>2]=c[d+(w<<3)>>2];c[t>>2]=k;c[x>>2]=c[z>>2];c[x+4>>2]=c[z+4>>2];Ko(y,x);n=+g[y>>2];o=+g[u>>2];h=l*n-m*o;f=m*n+l*o;if((h!=h|0.0!=0.0)&(f!=f|0.0!=0.0)){ao(A,l,m,n,o);h=+g[A>>2];f=+g[v>>2]}k=e+(w<<3)|0;d=e+(w<<3)+4|0;g[k>>2]=h;g[d>>2]=f}else{k=e+(w<<3)|0;d=e+(w<<3)+4|0;g[k>>2]=0.0;g[d>>2]=0.0;h=0.0;f=0.0}g[k>>2]=p*h;g[d>>2]=p*f;w=w+1|0}while(w>>>0<(c[b>>2]|0)>>>0);i=B;return}function oj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,h=0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;z=i;i=i+48|0;if((i|0)>=(j|0))ba();r=z+32|0;s=z+24|0;t=z+16|0;u=z+8|0;y=z;h=c[a>>2]|0;if(!h){f=0.0;e=0.0}else{v=t+4|0;w=s+4|0;x=u+4|0;q=0;f=0.0;e=0.0;do{A=q;q=q+2|0;h=(q>>>0)%(h>>>0)|0;m=+g[b+(h<<3)>>2];n=+g[b+(h<<3)+4>>2];h=c[b+(A<<3)+4>>2]|0;c[t>>2]=c[b+(A<<3)>>2];c[v>>2]=h;c[r>>2]=c[t>>2];c[r+4>>2]=c[t+4>>2];Ko(s,r);o=+g[s>>2];p=+g[w>>2];k=m*o-n*p;l=n*o+m*p;if((k!=k|0.0!=0.0)&(l!=l|0.0!=0.0)){ao(u,m,n,o,p);k=+g[u>>2];l=+g[x>>2]}f=f+k;e=e+l;h=c[a>>2]|0}while(q>>>0>>0)}_n(y,f,e,+((c[a+28>>2]|0)>>>0),0.0);A=c[y+4>>2]|0;c[d>>2]=c[y>>2];c[d+4>>2]=A;i=z;return}function pj(a){a=a|0;var b=0.0,d=0.0,e=0,f=0,h=0,k=0.0,l=0.0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0.0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;I=i;i=i+128|0;if((i|0)>=(j|0))ba();F=I+112|0;E=I+88|0;f=I+64|0;e=I+104|0;n=I+96|0;o=I+80|0;p=I+72|0;y=I+56|0;z=I+48|0;A=I+40|0;B=I+32|0;C=I+24|0;D=I+16|0;x=I+8|0;G=I;h=a+124|0;w=(c[h>>2]|0)+1|0;c[h>>2]=w;H=a+4|0;if(w>>>0<(c[H>>2]|0)>>>0){i=I;return}w=a+8|0;c[h>>2]=(c[w>>2]|0)+(c[a>>2]|0)-(c[a+132>>2]|0);sk(c[a+60>>2]|0,E);q=a+88|0;nj(a,(c[E>>2]|0)+(c[w>>2]<<3)|0,c[q>>2]|0);oj(a,c[q>>2]|0,f);u=+g[a+80>>2];w=f+4|0;t=u*+g[f>>2];u=u*+g[w>>2];g[f>>2]=t;g[w>>2]=u;g[a+144>>2]=t;g[a+148>>2]=u;u=u+ +g[a+140>>2];g[e>>2]=t+ +g[a+136>>2];g[e+4>>2]=u;c[F>>2]=c[e>>2];c[F+4>>2]=c[e+4>>2];u=+Bo(F);e=c[H>>2]|0;w=~~+dq(+(u*+(e>>>0)/6.283185307179586));c[h>>2]=(c[h>>2]|0)-w;if(c[a>>2]|0){e=a+84|0;f=o+4|0;h=n+4|0;m=0;do{v=c[q>>2]|0;b=+g[v+(m<<3)>>2];d=+g[v+(m<<3)+4>>2];v=c[e>>2]|0;w=c[v+(m<<3)+4>>2]|0;c[o>>2]=c[v+(m<<3)>>2];c[f>>2]=w;c[F>>2]=c[o>>2];c[F+4>>2]=c[o+4>>2];Ko(n,F);k=+g[n>>2];l=+g[h>>2];t=b*k-d*l;u=d*k+b*l;if((t!=t|0.0!=0.0)&(u!=u|0.0!=0.0))ao(p,b,d,k,l);m=m+1|0}while(m>>>0<(c[a>>2]|0)>>>0);e=c[H>>2]|0}if(!e){d=0.0;b=0.0}else{f=z+4|0;h=y+4|0;m=a+68|0;n=A+4|0;o=B+4|0;p=D+4|0;q=C+4|0;v=x+4|0;w=0;d=0.0;b=0.0;do{J=c[E>>2]|0;e=c[J+(w<<3)+4>>2]|0;c[z>>2]=c[J+(w<<3)>>2];c[f>>2]=e;c[F>>2]=c[z>>2];c[F+4>>2]=c[z+4>>2];Ko(y,F);k=+g[y>>2];l=+g[h>>2];e=c[m>>2]|0;r=+g[e+(w<<3)>>2];s=+g[e+(w<<3)+4>>2];t=k*r-l*s;u=l*r+k*s;if((t!=t|0.0!=0.0)&(u!=u|0.0!=0.0)){ao(A,k,l,r,s);t=+g[A>>2];u=+g[n>>2]}e=c[H>>2]|0;J=e+w|0;K=c[E>>2]|0;k=+g[K+(J<<3)>>2];l=+g[K+(J<<3)+4>>2];r=t*k-u*l;s=u*k+t*l;if((r!=r|0.0!=0.0)&(s!=s|0.0!=0.0)){ao(B,t,u,k,l);e=c[H>>2]|0;u=+g[B>>2];t=+g[o>>2]}else{u=r;t=s}J=e+w|0;e=c[m>>2]|0;K=c[e+(J<<3)+4>>2]|0;c[D>>2]=c[e+(J<<3)>>2];c[p>>2]=K;c[F>>2]=c[D>>2];c[F+4>>2]=c[D+4>>2];Ko(C,F);r=+g[C>>2];s=+g[q>>2];k=u*r-t*s;l=t*r+u*s;if((k!=k|0.0!=0.0)&(l!=l|0.0!=0.0)){ao(x,u,t,r,s);k=+g[x>>2];l=+g[v>>2]}d=d+k;b=b+l;w=w+1|0}while(w>>>0<(c[H>>2]|0)>>>0)}g[G>>2]=d;g[G+4>>2]=b;c[F>>2]=c[G>>2];c[F+4>>2]=c[G+4>>2];u=+Bo(F);Fj(c[a+108>>2]|0,u/+((c[H>>2]|0)>>>0));c[a+104>>2]=3;i=I;return}function qj(a){a=a|0;var b=0,d=0.0,e=0.0,f=0,h=0,k=0,l=0.0,m=0.0,n=0.0,o=0.0,p=0,q=0,r=0.0,s=0,t=0.0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;G=i;i=i+96|0;if((i|0)>=(j|0))ba();y=G+80|0;b=G+64|0;q=G+72|0;s=G+56|0;u=G+48|0;v=G+40|0;w=G+32|0;x=G+24|0;B=G+16|0;D=G+8|0;F=G;C=a+124|0;E=(c[C>>2]|0)+-1|0;c[C>>2]=E;if(E|0){i=G;return}z=a+128|0;c[z>>2]=(c[z>>2]|0)+1;sk(c[a+60>>2]|0,b);A=a+8|0;E=a+92|0;rj(a,(c[b>>2]|0)+(c[A>>2]<<3)|0,c[E>>2]|0);b=c[a>>2]|0;if(!b){e=0.0;d=0.0}else{h=s+4|0;k=q+4|0;p=u+4|0;e=0.0;d=0.0;f=0;do{H=f;f=f+1|0;b=(f>>>0)%(b>>>0)|0;I=c[E>>2]|0;n=+g[I+(b<<3)>>2];o=+g[I+(b<<3)+4>>2];b=c[I+(H<<3)+4>>2]|0;c[s>>2]=c[I+(H<<3)>>2];c[h>>2]=b;c[y>>2]=c[s>>2];c[y+4>>2]=c[s+4>>2];Ko(q,y);r=+g[q>>2];t=+g[k>>2];l=n*r-o*t;m=o*r+n*t;if((l!=l|0.0!=0.0)&(m!=m|0.0!=0.0)){ao(u,n,o,r,t);l=+g[u>>2];m=+g[p>>2]}e=e+l;d=d+m;b=c[a>>2]|0}while(f>>>0>>0)}_n(v,e,d,+((c[a+32>>2]|0)>>>0),0.0);l=+g[a+80>>2];o=+g[v>>2]*l;l=+g[v+4>>2]*l;b=a+132|0;n=+((c[b>>2]|0)>>>0)*2.0*3.141592653589793/+((c[a>>2]|0)>>>0);m=+R(+n);n=+Q(+n)+m*0.0;e=o*n-l*m;d=o*m+l*n;if((e!=e|0.0!=0.0)&(d!=d|0.0!=0.0)){ao(w,o,l,n,m);e=+g[w>>2];d=+g[w+4>>2]}g[x>>2]=e;g[x+4>>2]=d;c[y>>2]=c[x>>2];c[y+4>>2]=c[x+4>>2];t=+wo(y);f=a+156|0;if(t>+g[f>>2]?(g[B>>2]=e,g[B+4>>2]=d,c[y>>2]=c[B>>2],c[y+4>>2]=c[B+4>>2],+N(+(+Bo(y)))<.3141592700403172):0){c[a+104>>2]=4;I=c[a>>2]|0;c[C>>2]=(c[A>>2]|0)+I+(c[b>>2]|0);c[z>>2]=0;s=a+20|0;b=c[s>>2]|0;q=a+24|0;f=c[q>>2]|0;r=+(I>>>0)/+O(+(+((f+b|0)>>>0)));if(I){b=a+96|0;f=D+4|0;p=0;do{k=c[E>>2]|0;h=k+(p<<3)|0;k=k+(p<<3)+4|0;l=r*+g[k>>2];g[h>>2]=r*+g[h>>2];g[k>>2]=l;k=c[b>>2]|0;l=+g[k+(p<<3)>>2];m=+g[k+(p<<3)+4>>2];k=c[E>>2]|0;h=k+(p<<3)|0;n=+g[h>>2];k=k+(p<<3)+4|0;o=+g[k>>2];e=l*n-m*o;d=m*n+l*o;if((e!=e|0.0!=0.0)&(d!=d|0.0!=0.0)){ao(D,n,o,l,m);e=+g[D>>2];d=+g[f>>2]}g[h>>2]=e;g[k>>2]=d;p=p+1|0}while(p>>>0<(c[a>>2]|0)>>>0);f=c[q>>2]|0;b=c[s>>2]|0}I=f+b|0;sj(a,I>>>0<5?I+-1|0:4);if(c[a>>2]|0){b=a+96|0;f=F+4|0;h=a+100|0;k=0;do{I=c[b>>2]|0;H=c[E>>2]|0;_n(F,+g[I+(k<<3)>>2],+g[I+(k<<3)+4>>2],+g[H+(k<<3)>>2],+g[H+(k<<3)+4>>2]);H=c[f>>2]|0;I=c[h>>2]|0;c[I+(k<<3)>>2]=c[F>>2];c[I+(k<<3)+4>>2]=H;k=k+1|0}while(k>>>0<(c[a>>2]|0)>>>0)}}else{if((c[z>>2]|0)==16){Dj(c[a+108>>2]|0);Vj(c[a+112>>2]|0);b=a+136|0;I=a+116|0;c[I>>2]=0;c[I+4>>2]=0;c[I+8>>2]=0;c[I+12>>2]=0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;b=c[a>>2]|0;if(b>>>0>44){d=.3499999940395355;e=.30000001192092896}else{e=+((44-b|0)>>>0)*.009999999776482582;d=e+.3499999940395355;e=e+.30000001192092896}g[a+152>>2]=d;g[f>>2]=e;c[a+104>>2]=0}c[C>>2]=c[a+4>>2]}i=G;return}function rj(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,k=0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;B=i;i=i+32|0;if((i|0)>=(j|0))ba();x=B+24|0;y=B+16|0;z=B+8|0;A=B;gq(c[b+56>>2]|0,d|0,c[b>>2]<<3|0)|0;el(c[b+48>>2]|0);p=+O(+(+((c[b+32>>2]|0)>>>0)));w=c[b>>2]|0;p=p/+(w>>>0);if(!w){i=B;return}q=b+12|0;r=b+52|0;s=b+72|0;t=z+4|0;u=y+4|0;v=A+4|0;w=0;do{if(!(a[(c[q>>2]|0)+w>>0]|0)){k=e+(w<<3)|0;d=e+(w<<3)+4|0;g[k>>2]=0.0;g[d>>2]=0.0;h=0.0;f=0.0}else{d=c[r>>2]|0;l=+g[d+(w<<3)>>2];m=+g[d+(w<<3)+4>>2];d=c[s>>2]|0;k=c[d+(w<<3)+4>>2]|0;c[z>>2]=c[d+(w<<3)>>2];c[t>>2]=k;c[x>>2]=c[z>>2];c[x+4>>2]=c[z+4>>2];Ko(y,x);n=+g[y>>2];o=+g[u>>2];h=l*n-m*o;f=m*n+l*o;if((h!=h|0.0!=0.0)&(f!=f|0.0!=0.0)){ao(A,l,m,n,o);h=+g[A>>2];f=+g[v>>2]}k=e+(w<<3)|0;d=e+(w<<3)+4|0;g[k>>2]=h;g[d>>2]=f}g[k>>2]=p*h;g[d>>2]=p*f;w=w+1|0}while(w>>>0<(c[b>>2]|0)>>>0);i=B;return}function sj(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,h=0.0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0.0;F=i;i=i+32|0;if((i|0)>=(j|0))ba();t=F+16|0;u=F+8|0;v=F;if(!(c[b+168>>2]|0))E=b;else{gq(c[b+188>>2]|0,c[b+92>>2]|0,c[b>>2]<<3|0)|0;E=b}A=(c[b+24>>2]|0)+(c[b+20>>2]|0)|0;x=A+-1|0;d=x>>>0>>0?x:d;x=i;i=i+((1*(A<<2)|0)+15&-16)|0;if((i|0)>=(j|0))ba();y=i;i=i+((1*(A<<2)|0)+15&-16)|0;if((i|0)>=(j|0))ba();z=i;i=i+((1*(A<<2)|0)+15&-16)|0;if((i|0)>=(j|0))ba();B=(d>>>0>10?10:d)+1|0;C=i;i=i+((1*(B<<2)|0)+15&-16)|0;if((i|0)>=(j|0))ba();D=i;i=i+((1*(B<<2)|0)+15&-16)|0;if((i|0)>=(j|0))ba();d=c[E>>2]|0;a:do if(!d)w=0;else{o=b+4|0;p=b+12|0;q=b+92|0;r=u+4|0;s=v+4|0;n=0;k=0;while(1){l=c[o>>2]|0;m=((l+n|0)>>>0)%(d>>>0)|0;if(a[(c[p>>2]|0)+m>>0]|0){if((k|0)==(A|0))break;f=+(m>>>0);h=+(d>>>0);g[x+(k<<2)>>2]=(m>>>0>l>>>0?f-h:f)/h;d=c[q>>2]|0;l=c[d+(m<<3)+4>>2]|0;c[u>>2]=c[d+(m<<3)>>2];c[r>>2]=l;c[t>>2]=c[u>>2];c[t+4>>2]=c[u+4>>2];g[y+(k<<2)>>2]=+wo(t);l=c[q>>2]|0;d=c[l+(m<<3)+4>>2]|0;c[v>>2]=c[l+(m<<3)>>2];c[s>>2]=d;c[t>>2]=c[v>>2];c[t+4>>2]=c[v+4>>2];g[z+(k<<2)>>2]=+Bo(t);d=c[E>>2]|0;k=k+1|0}n=n+1|0;if(n>>>0>=d>>>0){w=k;break a}}Qp(37097,71,1,c[2348]|0)|0;kb(1)}while(0);if((w|0)!=(A|0)){Qp(37097,71,1,c[2348]|0)|0;kb(1)}if(A>>>0>1){f=+g[z>>2];l=1;while(1){k=z+(l<<2)|0;e=+g[k>>2];d=z+(l+-1<<2)|0;if(e-f>3.141592653589793){do e=e+-6.283185307179586;while(e-f>3.141592653589793);g[k>>2]=e}f=+g[d>>2];if(e-f<-3.141592653589793){do e=e+6.283185307179586;while(e-f<-3.141592653589793);g[k>>2]=e}l=l+1|0;if((l|0)==(A|0))break;else f=e}}Nh(x,y,A,C,B);Nh(x,z,A,D,B);d=c[E>>2]|0;if(!d){i=F;return}m=b+4|0;n=b+12|0;l=b+92|0;k=0;do{f=+(k>>>0);e=+(d>>>0);e=(k>>>0>(c[m>>2]|0)>>>0?f-e:f)/e;f=+Mh(C,B,e);e=+Mh(D,B,e);if(!(a[(c[n>>2]|0)+k>>0]|0)){h=0.0;e=0.0}else{G=+R(+e);h=f*(+Q(+e)+G*0.0);e=f*G}d=c[l>>2]|0;g[d+(k<<3)>>2]=h;g[d+(k<<3)+4>>2]=e;k=k+1|0;d=c[E>>2]|0}while(k>>>0>>0);i=F;return}function tj(b){b=b|0;var d=0,e=0.0,f=0.0,h=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;s=i;i=i+32|0;if((i|0)>=(j|0))ba();o=s+16|0;d=s+8|0;p=s;q=b+124|0;r=(c[q>>2]|0)+-1|0;c[q>>2]=r;if(r|0){i=s;return}sk(c[b+60>>2]|0,d);r=b+8|0;gq(c[b+56>>2]|0,(c[d>>2]|0)+((c[r>>2]|0)-(c[b+132>>2]|0)<<3)|0,c[b>>2]<<3|0)|0;el(c[b+48>>2]|0);uj(b);if(c[b+168>>2]|0?(h=c[b>>2]|0,h|0):0){k=b+12|0;l=b+184|0;m=b+52|0;n=p+4|0;d=0;do{if((a[(c[k>>2]|0)+d>>0]|0)==2){h=c[l>>2]|0;u=c[m>>2]|0;t=c[u+(d<<3)+4>>2]|0;c[p>>2]=c[u+(d<<3)>>2];c[n>>2]=t;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];tk(h,o);h=c[b>>2]|0}d=d+1|0}while(d>>>0>>0)}d=c[b+160>>2]|0;if(d|0?vb[d&7](c[b+52>>2]|0,c[b+12>>2]|0,c[b>>2]|0,c[b+164>>2]|0)|0:0){Dj(c[b+108>>2]|0);Vj(c[b+112>>2]|0);d=b+136|0;u=b+116|0;c[u>>2]=0;c[u+4>>2]=0;c[u+8>>2]=0;c[u+12>>2]=0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;d=c[b>>2]|0;if(d>>>0>44){e=.3499999940395355;f=.30000001192092896}else{f=+((44-d|0)>>>0)*.009999999776482582;e=f+.3499999940395355;f=f+.30000001192092896}g[b+152>>2]=e;g[b+156>>2]=f;c[b+104>>2]=0}c[q>>2]=(c[r>>2]|0)+(c[b>>2]|0);i=s;return}function uj(b){b=b|0;var d=0,e=0,f=0.0,h=0.0,l=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;K=i;i=i+64|0;if((i|0)>=(j|0))ba();z=K+56|0;l=K+48|0;J=K+40|0;A=K+32|0;B=K+24|0;C=K+16|0;D=K+8|0;I=K;if(!(c[b>>2]|0))e=0;else{r=b+100|0;s=b+52|0;q=l+4|0;t=0;do{e=c[r>>2]|0;m=+g[e+(t<<3)>>2];n=+g[e+(t<<3)+4>>2];e=c[s>>2]|0;d=e+(t<<3)|0;o=+g[d>>2];e=e+(t<<3)+4|0;p=+g[e>>2];h=m*o-n*p;f=n*o+m*p;if((h!=h|0.0!=0.0)&(f!=f|0.0!=0.0)){ao(l,o,p,m,n);h=+g[l>>2];f=+g[q>>2]}g[d>>2]=h;g[e>>2]=f;t=t+1|0;d=c[b>>2]|0}while(t>>>0>>0);e=d}F=b+20|0;d=c[F>>2]|0;G=i;i=i+((1*(d<<2)|0)+15&-16)|0;if((i|0)>=(j|0))ba();H=i;i=i+((1*(d<<2)|0)+15&-16)|0;if((i|0)>=(j|0))ba();do if(!e){q=d;d=0}else{r=b+4|0;s=b+12|0;t=b+112|0;u=b+52|0;v=B+4|0;w=A+4|0;x=C+4|0;y=D+4|0;q=0;d=0;while(1){l=(((c[r>>2]|0)+q|0)>>>0)%(e>>>0)|0;if((a[(c[s>>2]|0)+l>>0]|0)==1){if((d|0)==(c[F>>2]|0))break;e=(Tj(c[t>>2]|0)|0)!=0;f=+(l>>>0);if(l>>>0>(c[r>>2]|0)>>>0)f=f-+((c[b>>2]|0)>>>0);g[G+(d<<2)>>2]=f;L=c[u>>2]|0;p=+g[L+(l<<3)>>2];o=+g[L+(l<<3)+4>>2];g[B>>2]=e?1.0:-1.0;g[v>>2]=0.0;c[z>>2]=c[B>>2];c[z+4>>2]=c[B+4>>2];Ko(A,z);m=+g[A>>2];n=+g[w>>2];h=p*m-o*n;f=o*m+p*n;if((h!=h|0.0!=0.0)&(f!=f|0.0!=0.0)){ao(C,p,o,m,n);h=+g[C>>2];f=+g[x>>2]}g[D>>2]=h;g[y>>2]=f;c[z>>2]=c[D>>2];c[z+4>>2]=c[D+4>>2];g[H+(d<<2)>>2]=+Bo(z);e=c[b>>2]|0;d=d+1|0}q=q+1|0;if(q>>>0>=e>>>0){E=17;break}}if((E|0)==17){q=c[F>>2]|0;break}Qp(37169,61,1,c[2348]|0)|0;i=K;return}while(0);if((d|0)!=(q|0)){Qp(37169,61,1,c[2348]|0)|0;i=K;return}if(q>>>0>1){h=+g[H>>2];l=1;while(1){e=H+(l<<2)|0;f=+g[e>>2];d=H+(l+-1<<2)|0;if(f-h>3.141592653589793){do f=f+-6.283185307179586;while(f-h>3.141592653589793);g[e>>2]=f}h=+g[d>>2];if(f-h<-3.141592653589793){do f=f+6.283185307179586;while(f-h<-3.141592653589793);g[e>>2]=f}l=l+1|0;if(l>>>0>=q>>>0)break;else h=f}}Nh(G,H,q,J,2);d=J+4|0;L=b+120|0;p=+g[d>>2]*.30000001192092896+ +g[L>>2]*.699999988079071;g[d>>2]=p;g[L>>2]=p;if(c[b+168>>2]|0){gq(c[b+192>>2]|0,G|0,c[F>>2]<<2|0)|0;gq(c[b+196>>2]|0,H|0,c[F>>2]<<2|0)|0;c[b+200>>2]=c[d>>2];L=c[J>>2]|0;c[b+204>>2]=L;ok(c[b+208>>2]|0,(c[k>>2]=L,+g[k>>2]));ok(c[b+212>>2]|0,+g[d>>2])}d=c[b>>2]|0;if(d|0){q=b+12|0;r=b+52|0;s=b+4|0;t=I+4|0;l=0;do{if(!(a[(c[q>>2]|0)+l>>0]|0)){L=c[r>>2]|0;g[L+(l<<3)>>2]=0.0;g[L+(l<<3)+4>>2]=0.0}else{n=+(l>>>0);n=+Mh(J,2,l>>>0>(c[s>>2]|0)>>>0?n-+(d>>>0):n);m=+R(+-n);n=+Q(+n)+m*0.0;e=c[r>>2]|0;d=e+(l<<3)|0;o=+g[d>>2];e=e+(l<<3)+4|0;p=+g[e>>2];h=o*n-m*p;f=m*o+n*p;if((h!=h|0.0!=0.0)&(f!=f|0.0!=0.0)){ao(I,o,p,n,m);h=+g[I>>2];f=+g[t>>2]}g[d>>2]=h;g[e>>2]=f}l=l+1|0;d=c[b>>2]|0}while(l>>>0>>0)}l=b+128|0;if(!(c[l>>2]|0)){d=b+116|0;e=1}else{d=b+116|0;f=+g[J>>2]-+g[d>>2];h=f;if(h>3.141592653589793)do{f=h+-.6366197723675814;h=f}while(h>3.141592653589793);h=f;if(h<-3.141592653589793)do{f=h+.6366197723675814;h=f}while(h<-3.141592653589793);Gj(c[b+108>>2]|0,f*1.0000000474974513e-03);e=(c[l>>2]|0)+1|0}c[d>>2]=c[J>>2];c[l>>2]=e;i=K;return}function vj(a){a=a|0;return +(+xp(+g[a+80>>2])*-10.0)}function wj(a){a=a|0;return +(+Jj(c[a+108>>2]|0))}function xj(a){a=a|0;var b=0,d=0;b=a+172|0;if(c[b>>2]|0)return;c[a+176>>2]=qk(2048)|0;c[a+180>>2]=lk(2048)|0;c[a+184>>2]=qk(2048)|0;c[a+188>>2]=Xp(c[a>>2]<<3)|0;d=c[a+20>>2]<<2;c[a+192>>2]=Xp(d)|0;c[a+196>>2]=Xp(d)|0;c[a+208>>2]=lk(2048)|0;c[a+212>>2]=lk(2048)|0;c[a+168>>2]=1;c[b>>2]=1;return} +function yb(a){a=a|0;var b=0;b=i;i=i+a|0;i=i+15&-16;if((i|0)>=(j|0))ba();return b|0}function zb(){return i|0}function Ab(a){a=a|0;i=a}function Bb(a,b){a=a|0;b=b|0;i=a;j=b}function Cb(a,b){a=a|0;b=b|0;if(!n){n=a;o=b}}function Db(b){b=b|0;a[k>>0]=a[b>>0];a[k+1>>0]=a[b+1>>0];a[k+2>>0]=a[b+2>>0];a[k+3>>0]=a[b+3>>0]}function Eb(b){b=b|0;a[k>>0]=a[b>>0];a[k+1>>0]=a[b+1>>0];a[k+2>>0]=a[b+2>>0];a[k+3>>0]=a[b+3>>0];a[k+4>>0]=a[b+4>>0];a[k+5>>0]=a[b+5>>0];a[k+6>>0]=a[b+6>>0];a[k+7>>0]=a[b+7>>0]}function Fb(a){a=a|0;C=a}function Gb(){return C|0}function Hb(a){a=a|0;return c[a+120>>2]|0}function Ib(b,d){b=b|0;d=+d;var e=0,f=0,h=0,k=0,l=0,m=0,n=0;n=i;i=i+16|0;if((i|0)>=(j|0))ba();k=n;m=Xp(388)|0;e=m;f=b;h=e+84|0;do{c[e>>2]=c[f>>2];e=e+4|0;f=f+4|0}while((e|0)<(h|0));switch(c[m+56>>2]|0){case 0:{e=Bc(b)|0;f=b+4|0;h=Rg(c[b>>2]|0,c[f>>2]|0,c[b+8>>2]|0,e,1,m)|0;Xg(h,0);if(a[b+80>>0]|0)ah(h);Zg(h,1);_g(h,1);if(a[b+60>>0]|0){c[k>>2]=c[b+64>>2];c[k+4>>2]=c[b+68>>2];c[k+8>>2]=c[b+72>>2];c[k+12>>2]=c[b+76>>2];Wg(h,k)}l=(c[f>>2]|0)+(c[b>>2]|0)|0;c[m+92>>2]=Xp(l<<3)|0;c[m+96>>2]=l;Yp(e);c[m+84>>2]=h;break}case 1:{e=Vf(1,m)|0;Xf(e,0);if(a[b+80>>0]|0)fg(e);Zf(e,1);_f(e,1);if(a[b+60>>0]|0){c[k>>2]=c[b+64>>2];c[k+4>>2]=c[b+68>>2];c[k+8>>2]=c[b+72>>2];c[k+12>>2]=c[b+76>>2];Wf(e,k)|0}c[m+92>>2]=Xp(2048)|0;c[m+96>>2]=256;c[m+84>>2]=e;break}case 2:{e=rg(1,m)|0;sg(e,0);if(a[b+80>>0]|0)Bg(e);c[m+92>>2]=Xp(2048)|0;c[m+96>>2]=256;c[m+84>>2]=e;break}default:{}}e=pc(b+20|0)|0;f=m+88|0;c[f>>2]=e;c[m+100>>2]=0;h=m+104|0;g[h>>2]=1.0;l=m+112|0;c[l>>2]=0;k=m+108|0;c[k>>2]=0;if(d!=44100.0){d=44100.0/d;c[k>>2]=ve(d,c[b+40>>2]|0,+g[b+44>>2],+g[b+48>>2],c[b+52>>2]|0)|0;g[h>>2]=d;e=c[f>>2]|0}c[l>>2]=Xp(_(c[m+96>>2]<<2,c[e+4>>2]|0)|0)|0;c[m+116>>2]=0;c[m+120>>2]=0;c[m+124>>2]=dc(65536)|0;c[m+132>>2]=0;c[m+128>>2]=0;a[m+384>>0]=0;c[m+316>>2]=0;c[m+348>>2]=0;c[m+320>>2]=0;c[m+352>>2]=0;c[m+324>>2]=0;c[m+356>>2]=0;c[m+328>>2]=0;c[m+360>>2]=0;c[m+332>>2]=0;c[m+364>>2]=0;c[m+336>>2]=0;c[m+368>>2]=0;c[m+340>>2]=0;c[m+372>>2]=0;c[m+344>>2]=0;c[m+376>>2]=0;c[m+136>>2]=0;c[m+140>>2]=0;c[m+148>>2]=0;i=n;return m|0}function Jb(b){b=b|0;var d=0,e=0;a[b+384>>0]=1;d=b+316|0;e=d+68|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(e|0));c[b+136>>2]=dc(65536)|0;c[b+140>>2]=0;c[b+144>>2]=0;e=Xp(20)|0;c[b+148>>2]=e;c[e>>2]=0;c[b+152>>2]=0;return}function Kb(b){b=b|0;var d=0,e=0,f=0;a[b+384>>0]=0;d=b+316|0;e=c[d>>2]|0;if(e|0){Yp(e);c[d>>2]=0;c[b+348>>2]=0}d=b+320|0;e=c[d>>2]|0;if(e|0){Yp(e);c[d>>2]=0;c[b+352>>2]=0}d=b+324|0;e=c[d>>2]|0;if(e|0){Yp(e);c[d>>2]=0;c[b+356>>2]=0}d=b+328|0;e=c[d>>2]|0;if(e|0){Yp(e);c[d>>2]=0;c[b+360>>2]=0}d=b+332|0;e=c[d>>2]|0;if(e|0){Yp(e);c[d>>2]=0;c[b+364>>2]=0}d=b+336|0;e=c[d>>2]|0;if(e|0){Yp(e);c[d>>2]=0;c[b+368>>2]=0}d=b+340|0;e=c[d>>2]|0;if(e|0){Yp(e);c[d>>2]=0;c[b+372>>2]=0}d=b+344|0;e=c[d>>2]|0;if(e|0){Yp(e);c[d>>2]=0;c[b+376>>2]=0}c[b+380>>2]=0;e=b+136|0;d=c[e>>2]|0;if(d|0){ec(d);c[e>>2]=0}d=b+140|0;e=c[d>>2]|0;if(e|0){Yp(e);c[d>>2]=0;c[b+144>>2]=0}f=b+148|0;d=c[f>>2]|0;if(!d)return;e=c[d>>2]|0;if(e){Yp(e);d=c[f>>2]|0}Yp(d);c[f>>2]=0;c[b+152>>2]=0;return}function Lb(a,b){a=a|0;b=b|0;c[b>>2]=c[a+380>>2];return a+156|0}function Mb(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=i;i=i+16|0;if((i|0)>=(j|0))ba();f=g;e=a+124|0;lc(c[e>>2]|0);a=jc(c[e>>2]|0,f,4)|0;a:do if(!a)a=0;else{if((a|0)>=0){a=c[f>>2]|0;a=a>>>0>>0?a:d;b=(jc(c[e>>2]|0,b,a)|0)<0;d=c[e>>2]|0;if(b){mc(d);cc(9);a=-1;break}else{kc(d,(c[f>>2]|0)-a|0);mc(c[e>>2]|0);break}}mc(c[e>>2]|0);switch(a|0){case -1:{cc(7);a=-1;break a}case -2:{cc(8);a=-1;break a}default:{cc(9);a=-1;break a}}}while(0);i=g;return a|0}function Nb(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;A=i;i=i+80|0;if((i|0)>=(j|0))ba();z=A+16|0;y=A+8|0;x=A;v=A+24|0;w=A+20|0;if(!b){i=A;return}t=b+88|0;u=_(c[(c[t>>2]|0)+4>>2]|0,c[b+96>>2]|0)|0;if(a[b+384>>0]|0)c[b+380>>2]=0;if(!e){i=A;return}l=b+108|0;m=b+116|0;n=b+112|0;o=b+92|0;p=b+56|0;q=b+84|0;r=b+80|0;s=b+100|0;h=b+84|0;k=0;do{b=c[l>>2]|0;if(!b){b=c[m>>2]|0;f=b+(e-k)|0;f=f>>>0>>0?f:u;gq((c[n>>2]|0)+(b<<2)|0,d+(k<<2)|0,f-b<<2|0)|0;b=f-(c[m>>2]|0)|0}else{f=c[m>>2]|0;xe(b,d+(k<<2)|0,e-k|0,v,(c[n>>2]|0)+(f<<2)|0,u-f|0,w)|0;b=c[v>>2]|0;f=(c[m>>2]|0)+(c[w>>2]|0)|0}k=b+k|0;B=c[t>>2]|0;g=(f>>>0)%((c[B+4>>2]|0)>>>0)|0;b=f-g|0;f=qc(B,c[n>>2]|0,b,c[o>>2]|0)|0;if(g|0){B=c[n>>2]|0;gq(B|0,B+(b<<2)|0,g<<2|0)|0}c[m>>2]=g;switch(c[p>>2]|0){case 0:{$g(c[q>>2]|0,c[o>>2]|0,f);if(a[r>>0]|0){c[x>>2]=c[s>>2];Oo(v,10366,x)|0;bh(c[q>>2]|0,v);c[s>>2]=(c[s>>2]|0)+1}break}case 1:{$f(c[h>>2]|0,c[o>>2]|0,f);if(a[r>>0]|0){c[y>>2]=c[s>>2];Oo(v,10366,y)|0;gg(c[h>>2]|0,v);c[s>>2]=(c[s>>2]|0)+1}break}case 2:{ug(c[h>>2]|0,c[o>>2]|0,f);if(a[r>>0]|0){c[z>>2]=c[s>>2];Oo(v,10366,z)|0;Cg(c[h>>2]|0,v);c[s>>2]=(c[s>>2]|0)+1}break}default:{}}}while(k>>>0>>0);i=A;return}function Ob(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,k=0,l=0,m=0,n=0,o=0;m=i;i=i+16|0;if((i|0)>=(j|0))ba();l=m;if(!a){i=m;return}d=c[a+108>>2]|0;if(!d){b=a+116|0;l=0}else{o=c[a+40>>2]|0;k=Zp(o,4)|0;f=a+88|0;n=_(c[(c[f>>2]|0)+4>>2]|0,c[a+96>>2]|0)|0;h=a+112|0;b=a+116|0;e=c[b>>2]|0;xe(d,k,o,m+4|0,(c[h>>2]|0)+(e<<2)|0,n-e|0,l)|0;d=(c[l>>2]|0)+(c[b>>2]|0)|0;c[l>>2]=d;f=c[f>>2]|0;e=(d>>>0)%((c[f+4>>2]|0)>>>0)|0;if(!e)e=0;else{d=d-e|0;c[l>>2]=d}d=qc(f,c[h>>2]|0,d,c[a+92>>2]|0)|0;if(e|0){o=c[h>>2]|0;gq(o|0,o+(c[l>>2]<<2)|0,e<<2|0)|0}c[b>>2]=e;Yp(k);l=d}e=c[b>>2]|0;k=a+88|0;if(!e){h=a+92|0;b=l}else{b=c[k>>2]|0;d=c[b+4>>2]|0;f=a+112|0;if((d|0)==(e|0))d=e;else{eq(c[f>>2]|0,0,d-e<<2|0)|0;d=c[k>>2]|0;b=d;d=c[d+4>>2]|0}o=a+92|0;h=o;b=(qc(b,c[f>>2]|0,d,(c[o>>2]|0)+(l<<3)|0)|0)+l|0}b=(rc(c[k>>2]|0,(c[h>>2]|0)+(b<<3)|0)|0)+b|0;switch(c[a+56>>2]|0){case 0:{$g(c[a+84>>2]|0,c[h>>2]|0,b);i=m;return}case 1:{d=0;e=b;while(1){o=d+e|0;n=c[h>>2]|0;g[n+(o<<3)>>2]=0.0;g[n+(o<<3)+4>>2]=0.0;d=d+1|0;if((d|0)==60)break;else e=e+1|0}$f(c[a+84>>2]|0,c[h>>2]|0,b+60|0);i=m;return}case 2:{ug(c[a+84>>2]|0,c[h>>2]|0,b);i=m;return}default:{i=m;return}}}function Pb(a){a=a|0;var b=0,d=0,e=0;if(!a)return;switch(c[a+56>>2]|0){case 0:{Yg(c[a+84>>2]|0);break}case 1:{Yf(c[a+84>>2]|0);break}case 2:{tg(c[a+84>>2]|0);break}default:{}}b=c[a+108>>2]|0;if(b|0)we(b);b=c[a+112>>2]|0;if(b|0)Yp(b);b=c[a+316>>2]|0;if(b|0)Yp(b);b=c[a+320>>2]|0;if(b|0)Yp(b);b=c[a+324>>2]|0;if(b|0)Yp(b);b=c[a+328>>2]|0;if(b|0)Yp(b);b=c[a+332>>2]|0;if(b|0)Yp(b);b=c[a+336>>2]|0;if(b|0)Yp(b);b=c[a+340>>2]|0;if(b|0)Yp(b);b=c[a+344>>2]|0;if(b|0)Yp(b);ec(c[a+124>>2]|0);b=c[a+136>>2]|0;if(b|0)ec(b);b=c[a+140>>2]|0;if(b|0)Yp(b);d=a+148|0;b=c[d>>2]|0;if(b|0){e=c[b>>2]|0;if(e){Yp(e);b=c[d>>2]|0}Yp(b)}b=c[a+128>>2]|0;if(b|0)Yp(b);sc(c[a+88>>2]|0);Yp(c[a+92>>2]|0);Yp(a);return}function Qb(b,d,e,f,g,h,k){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=i;i=i+64|0;if((i|0)>=(j|0))ba();o=s+48|0;q=s+44|0;p=s+40|0;r=s;if(!d){f=1;i=s;return f|0}if(!k){f=0;i=s;return f|0}if(a[k+384>>0]|0){l=r;b=h;d=l+40|0;do{c[l>>2]=c[b>>2];l=l+4|0;b=b+4|0}while((l|0)<(d|0));c[o>>2]=g;m=k+380|0;n=c[m>>2]|0;if(n>>>0<8){h=k+316+(n<<2)|0;b=k+348+(n<<2)|0;d=c[r+16>>2]|0;if((c[b>>2]|0)>>>0>>0){c[h>>2]=_p(c[h>>2]|0,d<<3)|0;c[b>>2]=d}if(!d)b=c[h>>2]|0;else{l=c[r+12>>2]|0;b=c[h>>2]|0;h=0;do{c[b+(h<<3)>>2]=c[l+(h<<3)>>2];c[b+(h<<3)+4>>2]=c[l+(h<<3)+4>>2];h=h+1|0}while((h|0)!=(d|0))}c[k+156+(n*20|0)>>2]=b;c[k+156+(n*20|0)+4>>2]=d;c[k+156+(n*20|0)+8>>2]=c[r>>2];c[k+156+(n*20|0)+12>>2]=c[r+4>>2];a[k+156+(n*20|0)+16>>0]=(g|0)!=0&1;c[m>>2]=(c[m>>2]|0)+1}else d=c[r+16>>2]|0;b=d<<3;n=b+20|0;h=k+136|0;nc(c[h>>2]|0);if((gc(c[h>>2]|0,n)|0)==(n|0)){c[q>>2]=b+16;hc(c[h>>2]|0,q,4)|0;c[p>>2]=d;hc(c[h>>2]|0,p,4)|0;hc(c[h>>2]|0,c[r+12>>2]|0,b)|0;hc(c[h>>2]|0,r+4|0,4)|0;hc(c[h>>2]|0,r,4)|0;hc(c[h>>2]|0,o,4)|0;ic(c[h>>2]|0)|0;oc(c[h>>2]|0)}}if(!g){f=k+120|0;c[f>>2]=(c[f>>2]|0)+1;f=1;i=s;return f|0}l=f+4|0;b=k+132|0;h=k+128|0;if(l>>>0>(c[b>>2]|0)>>>0){g=_p(c[h>>2]|0,l)|0;c[h>>2]=g;c[b>>2]=l;d=h;b=g}else{d=h;b=c[h>>2]|0}a[b>>0]=f;a[b+1>>0]=f>>8;a[b+2>>0]=f>>16;a[b+3>>0]=f>>24;fq((c[d>>2]|0)+4|0,e|0,f|0)|0;f=k+124|0;nc(c[f>>2]|0);fc(c[f>>2]|0,c[d>>2]|0,l)|0;oc(c[f>>2]|0);f=0;i=s;return f|0}function Rb(b,d){b=b|0;d=+d;var e=0,f=0,h=0,k=0,l=0,m=0,n=0,o=0,p=0.0;o=i;i=i+32|0;if((i|0)>=(j|0))ba();k=o+16|0;l=o;m=b+20|0;p=+g[b+40>>2];if(p<0.0|p>.5){cc(2);b=0;i=o;return b|0}n=Xp(176)|0;e=n;f=b;h=e+108|0;do{c[e>>2]=c[f>>2];e=e+4|0;f=f+4|0}while((e|0)<(h|0));switch(c[n+64>>2]|0){case 0:{c[k>>2]=c[b+68>>2];c[k+4>>2]=c[b+72>>2];c[k+8>>2]=c[b+76>>2];c[k+12>>2]=c[b+80>>2];f=Bc(b)|0;h=b+4|0;e=Dg(c[b>>2]|0,c[h>>2]|0,c[b+8>>2]|0,f,k)|0;Fg(e,0);if(a[b+84>>0]|0){c[l>>2]=c[b+88>>2];c[l+4>>2]=c[b+92>>2];c[l+8>>2]=c[b+96>>2];c[l+12>>2]=c[b+100>>2];Eg(e,l)}k=(c[h>>2]|0)+(c[b>>2]|0)|0;c[n+120>>2]=Xp(k<<3)|0;l=n+124|0;c[l>>2]=k;Yp(f);c[n+108>>2]=e;e=l;break}case 1:{c[k>>2]=c[b+68>>2];c[k+4>>2]=c[b+72>>2];c[k+8>>2]=c[b+76>>2];c[k+12>>2]=c[b+80>>2];e=Jf(k)|0;Nf(e,0);if(a[b+84>>0]|0){c[l>>2]=c[b+88>>2];c[l+4>>2]=c[b+92>>2];c[l+8>>2]=c[b+96>>2];c[l+12>>2]=c[b+100>>2];Mf(e,l)|0}c[n+120>>2]=0;l=n+124|0;c[l>>2]=0;c[n+108>>2]=e;c[n+112>>2]=0;e=l;break}case 2:{l=hg()|0;ig(l,0);c[n+120>>2]=0;e=n+124|0;c[e>>2]=0;c[n+108>>2]=l;c[n+112>>2]=2;break}default:e=n+124|0}m=tc(m)|0;f=n+116|0;c[f>>2]=m;e=uc(m,c[e>>2]|0)|0;f=xc(c[f>>2]|0)|0;f=e>>>0>f>>>0?e:f;c[n+132>>2]=f;c[n+128>>2]=Xp(f<<2)|0;f=n+136|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;a[n+152>>0]=1;a[n+153>>0]=0;a[n+154>>0]=0;f=n+156|0;g[f>>2]=1.0;e=n+160|0;c[e>>2]=0;if(d!=44100.0){p=d/44100.0;c[e>>2]=ve(p,c[b+48>>2]|0,+g[b+52>>2],+g[b+56>>2],c[b+60>>2]|0)|0;g[f>>2]=p}c[n+164>>2]=dc(65536)|0;b=c[n+104>>2]|0;c[n+168>>2]=Xp(b+4|0)|0;c[n+172>>2]=Xp(b)|0;b=n;i=o;return b|0}function Sb(a){a=a|0;return c[a+104>>2]|0}function Tb(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=0.0,k=0;a[b+154>>0]=1;j=+g[b+156>>2];d=~~(+Z(+(+(d>>>0)/j))+ +Z(+j))>>>0;d=d-(xc(c[b+116>>2]|0)|0)|0;if(c[b+160>>2]|0)d=d-(c[b+48>>2]|0)|0;i=b+104|0;h=(Ub(b,c[i>>2]|0)|0)>>>0>d>>>0;f=c[i>>2]|0;if(!h){b=f;return b|0}e=f>>>1;if(f>>>0>1){h=0;do{k=(Ub(b,e)|0)>>>0>d>>>0;f=k?e:f;h=k?h:e;k=f-h|0;e=(k>>>1)+h|0}while(k>>>0>1);d=e}else d=e;c[i>>2]=d;k=d;return k|0}function Ub(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=i;i=i+16|0;if((i|0)>=(j|0))ba();d=f;e=Zp(b,1)|0;switch(c[a+64>>2]|0){case 0:{g=a+108|0;Mg(c[g>>2]|0,d,e,b);b=Lg(c[g>>2]|0)|0;b=_(c[a+124>>2]|0,b)|0;Ig(c[g>>2]|0);break}case 1:{g=a+108|0;Sf(c[g>>2]|0,d,e,b);b=Rf(c[g>>2]|0)|0;Of(c[g>>2]|0);break}case 2:{g=a+108|0;ng(c[g>>2]|0,d,e,b,c[a+68>>2]|0,c[a+72>>2]|0,c[a+76>>2]|0);b=mg(c[g>>2]|0)|0;jg(c[g>>2]|0);break}default:b=0}Yp(e);g=uc(c[a+116>>2]|0,b)|0;i=f;return g|0}function Vb(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;if((c[b+104>>2]|0)>>>0>>0){cc(6);e=-1;return e|0}f=b+168|0;g=c[f>>2]|0;a[g>>0]=e;a[g+1>>0]=e>>8;a[g+2>>0]=e>>16;a[g+3>>0]=e>>24;fq((c[f>>2]|0)+4|0,d|0,e|0)|0;b=b+164|0;nc(c[b>>2]|0);d=fc(c[b>>2]|0,c[f>>2]|0,e+4|0)|0;oc(c[b>>2]|0);if(!d){g=0;return g|0}if((d|0)>=0){g=d+-4|0;return g|0}switch(d|0){case -1:{cc(7);g=-1;return g|0}case -2:{cc(8);g=-1;return g|0}default:{cc(9);g=-1;return g|0}}return 0}function Wb(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,k=0,l=0,m=0,n=0,o=0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0;Q=i;i=i+16|0;if((i|0)>=(j|0))ba();O=Q+4|0;P=Q;if(!b){b=0;i=Q;return b|0}if(e|0){B=b+136|0;H=b+140|0;I=b+64|0;J=b+154|0;K=b+153|0;L=b+164|0;M=b+172|0;N=b+152|0;r=b+108|0;s=b+108|0;t=b+112|0;u=b+68|0;v=b+72|0;w=b+76|0;x=b+156|0;y=b+116|0;z=b+132|0;A=b+128|0;C=b+120|0;D=b+4|0;E=b+124|0;F=b+160|0;G=b+48|0;h=0;f=0;a:while(1){k=c[B>>2]|0;b:while(1){o=e-f|0;n=(f|0)>0;p=+(o>>>0);c:do if(!k)while(1){c[H>>2]=0;if(h){q=49;break a}switch(c[I>>2]|0){case 0:{k=Kg(c[r>>2]|0)|0;q=15;break}case 1:{k=Qf(c[s>>2]|0)|0;q=15;break}case 2:{k=lg(c[r>>2]|0)|0;q=15;break}default:q=16}if((q|0)==15?(q=0,(k|0)==0):0)q=16;if((q|0)==16){q=0;l=n&(a[J>>0]|0)!=0;if(a[K>>0]|0){o=0;n=l;break b}lc(c[L>>2]|0);k=jc(c[L>>2]|0,O,4)|0;m=c[L>>2]|0;if((k|0)<1){h=m;q=18;break b}jc(m,c[M>>2]|0,c[O>>2]|0)|0;mc(c[L>>2]|0);switch(c[I>>2]|0){case 0:{Mg(c[r>>2]|0,P,c[M>>2]|0,c[O>>2]|0);break}case 1:{Sf(c[s>>2]|0,P,c[M>>2]|0,c[O>>2]|0);c[t>>2]=Rf(c[s>>2]|0)|0;break}case 2:{jg(c[r>>2]|0);ng(c[r>>2]|0,P,c[M>>2]|0,c[O>>2]|0,c[u>>2]|0,c[v>>2]|0,c[w>>2]|0);break}default:{}}a[N>>0]=0;if(l){o=1;n=1;break b}}q=~~+Z(+(p/+g[x>>2]))>>>0;k=vc(c[y>>2]|0,q)|0;k=(((q>>>0)%((c[(c[y>>2]|0)+4>>2]|0)>>>0)|0|0)!=0&1)+k|0;d:do switch(c[I>>2]|0){case 0:{k=(c[D>>2]|0)+(c[b>>2]|0)|0;Ng(c[r>>2]|0,c[C>>2]|0,k)|0;break}case 1:{q=c[t>>2]|0;k=q>>>0>>0?q:k;if(k>>>0>(c[E>>2]|0)>>>0){l=_p(c[C>>2]|0,k<<3)|0;c[C>>2]=l;c[E>>2]=k}else l=c[C>>2]|0;Tf(c[s>>2]|0,l,k)|0;c[t>>2]=(c[t>>2]|0)-k;break}case 2:{q=c[t>>2]|0;l=(k>>>0)%(q>>>0)|0;l=((l|0)==0?0:q-l|0)+k|0;if(l>>>0>(c[E>>2]|0)>>>0){c[C>>2]=_p(c[C>>2]|0,l<<3)|0;c[E>>2]=l}if(!l)k=0;else{k=0;do{if(og(c[r>>2]|0,(c[C>>2]|0)+(k<<3)|0)|0)break d;k=(c[t>>2]|0)+k|0}while(k>>>0>>0)}break}default:k=0}while(0);l=uc(c[y>>2]|0,k)|0;if(l>>>0>(c[z>>2]|0)>>>0){q=_p(c[A>>2]|0,l<<2)|0;c[A>>2]=q;c[z>>2]=l;l=q}else l=c[A>>2]|0;k=wc(c[y>>2]|0,c[C>>2]|0,k,l)|0;c[B>>2]=k;a[N>>0]=0;if(k|0)break c}while(0);l=c[F>>2]|0;if(!l){l=Cc((c[A>>2]|0)+(c[H>>2]<<2)|0,k,d,o)|0;c[H>>2]=(c[H>>2]|0)+l;k=(c[B>>2]|0)-l|0;c[B>>2]=k}else{xe(l,(c[A>>2]|0)+(c[H>>2]<<2)|0,k,O,d,o,P)|0;l=c[P>>2]|0;k=c[O>>2]|0;c[H>>2]=(c[H>>2]|0)+k;k=(c[B>>2]|0)-k|0;c[B>>2]=k}d=d+(l<<2)|0;f=l+f|0;if(f>>>0>=e>>>0){q=48;break a}}if((q|0)==18){q=0;mc(h);if(!k)a[K>>0]=1;o=0;n=l}if(a[N>>0]|0){e=f;break}m=yc(c[y>>2]|0,c[A>>2]|0)|0;c[B>>2]=m;if(c[F>>2]|0){h=c[G>>2]|0;if(!h)h=0;else{k=c[A>>2]|0;l=0;do{g[k+(m+l<<2)>>2]=0.0;l=l+1|0}while(l>>>0>>0)}c[B>>2]=m+h}zc(c[y>>2]|0);a[N>>0]=1;h=n&o;if(f>>>0>=e>>>0){q=48;break}}if((q|0)==48)if(h)q=49;else e=f;if((q|0)==49)if((f|0)!=(e|0))eq(d|0,0,e-f<<2|0)|0;if(e|0){b=e;i=Q;return b|0}}if(a[b+153>>0]|0){b=0;i=Q;return b|0}cc(7);b=-1;i=Q;return b|0}function Xb(a){a=a|0;var b=0;if(!a)return;switch(c[a+64>>2]|0){case 0:{Jg(c[a+108>>2]|0);break}case 1:{Pf(c[a+108>>2]|0);break}case 2:{kg(c[a+108>>2]|0);break}default:{}}b=c[a+160>>2]|0;if(b|0)we(b);Ac(c[a+116>>2]|0);Yp(c[a+120>>2]|0);Yp(c[a+128>>2]|0);ec(c[a+164>>2]|0);Yp(c[a+168>>2]|0);Yp(c[a+172>>2]|0);Yp(a);return}function Yb(b,d){b=b|0;d=d|0;var e=0.0,f=0,h=0,i=0,j=0;f=im(b,d)|0;if(!f){cc(4);i=0;return i|0}i=Zp(1,108)|0;if(!i){cc(1);i=0;return i|0}d=im(f,10383)|0;if(d|0)c[i+68>>2]=Dc(om(d)|0)|0;d=im(f,10399)|0;if(d|0)c[i+72>>2]=Jc(om(d)|0)|0;d=im(f,10416)|0;if(d|0)c[i+76>>2]=Jc(om(d)|0)|0;d=im(f,10433)|0;do if(d|0){d=om(d)|0;b=i+64|0;if(!(dp(d,10444)|0)){c[b>>2]=2;break}else{c[b>>2]=1;c[i+80>>2]=Si(d)|0;break}}while(0);b=im(f,10449)|0;if(b|0){a[i+84>>0]=1;d=im(b,10383)|0;if(d|0)c[i+88>>2]=Dc(om(d)|0)|0;d=im(b,10399)|0;if(d|0)c[i+92>>2]=Jc(om(d)|0)|0;d=im(b,10416)|0;if(d|0)c[i+96>>2]=Jc(om(d)|0)|0;d=im(b,10433)|0;if(d|0)c[i+100>>2]=Si(om(d)|0)|0}d=im(f,10456)|0;if(d|0){b=qm(d)|0;c[i+104>>2]=b}b=im(f,10469)|0;if(b|0){d=i+64|0;if((c[d>>2]|0)==2){Yp(i);cc(5);i=0;return i|0}c[d>>2]=0;d=im(b,10474)|0;if(d|0){d=qm(d)|0;c[i>>2]=d}d=im(b,10490)|0;if(d|0){d=qm(d)|0;c[i+4>>2]=d}d=im(b,10511)|0;if(d|0){d=qm(d)|0;c[i+8>>2]=d}d=im(b,10524)|0;if(d|0){d=qm(d)|0;c[i+12>>2]=d}d=im(b,10534)|0;if(d|0){b=qm(d)|0;c[i+16>>2]=b}}d=im(f,10545)|0;do if(d|0){b=im(d,10556)|0;if(b|0)g[i+36>>2]=+sm(b)/44100.0*3.141592653589793*2.0;d=im(d,10573)|0;if(d|0){e=+sm(d);if(!(e<0.0|e>.5)){g[i+40>>2]=e;break}Yp(i);cc(5);i=0;return i|0}}while(0);b=im(f,10578)|0;if(b){d=im(b,10592)|0;if(!d)c[i+20>>2]=1;else{d=om(d)|0;j=(dp(d,10444)|0)==0;c[i+20>>2]=_e(j?22050:d)|0}d=im(b,10598)|0;if(d|0){j=qm(d)|0;c[i+24>>2]=j}d=im(b,10617)|0;if(d|0){j=qm(d)|0;c[i+28>>2]=j}d=im(b,10630)|0;if(d|0)g[i+32>>2]=+sm(d)}else c[i+24>>2]=1;d=im(f,10647)|0;if(d|0?(h=im(d,10663)|0,h|0):0)g[i+44>>2]=+sm(h);b=im(f,10679)|0;if(!b){j=i;return j|0}d=im(b,10689)|0;if(d|0){j=qm(d)|0;c[i+48>>2]=j}d=im(b,10695)|0;if(d|0)g[i+52>>2]=+sm(d);d=im(b,10705)|0;if(d|0)g[i+56>>2]=+sm(d);d=im(b,10717)|0;if(!d){j=i;return j|0}c[i+60>>2]=~~+sm(d)>>>0;j=i;return j|0}function Zb(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+256|0;if((i|0)>=(j|0))ba();e=Pl(a,0,f)|0;if(e){a=Yb(e,b)|0;b=e+4|0;d=c[b>>2]|0;if((d|0)!=-1?(d=d+-1|0,c[b>>2]=d,(d|0)==0):0)km(e)}else{cc(3);a=0}i=f;return a|0}function _b(b,d){b=b|0;d=d|0;var e=0,f=0,h=0;f=im(b,d)|0;if(!f){cc(4);h=0;return h|0}h=Zp(1,84)|0;if(!h){cc(1);h=0;return h|0}d=im(f,10433)|0;if(d|0){b=(dp(om(d)|0,10444)|0)==0;c[h+56>>2]=b?2:1}b=im(f,10449)|0;if(b|0){a[h+60>>0]=1;d=im(b,10383)|0;if(d|0)c[h+64>>2]=Dc(om(d)|0)|0;d=im(b,10399)|0;if(d|0)c[h+68>>2]=Jc(om(d)|0)|0;d=im(b,10416)|0;if(d|0)c[h+72>>2]=Jc(om(d)|0)|0;d=im(b,10433)|0;if(d|0)c[h+76>>2]=Si(om(d)|0)|0}b=im(f,10469)|0;if(b|0){d=h+56|0;if((c[d>>2]|0)==2){Yp(h);cc(5);h=0;return h|0}c[d>>2]=0;d=im(b,10474)|0;if(d|0){d=qm(d)|0;c[h>>2]=d}d=im(b,10490)|0;if(d|0){d=qm(d)|0;c[h+4>>2]=d}d=im(b,10511)|0;if(d|0){d=qm(d)|0;c[h+8>>2]=d}d=im(b,10524)|0;if(d|0){d=qm(d)|0;c[h+12>>2]=d}d=im(b,10534)|0;if(d|0){b=qm(d)|0;c[h+16>>2]=b}}d=im(f,10545)|0;if(d|0?(e=im(d,10556)|0,e|0):0)g[h+36>>2]=+sm(e)/44100.0*3.141592653589793*2.0;b=im(f,10578)|0;if(b){d=im(b,10592)|0;if(!d)c[h+20>>2]=1;else{e=om(d)|0;d=(dp(e,10444)|0)==0;c[h+20>>2]=_e(d?22057:e)|0}d=im(b,10598)|0;if(d|0){e=qm(d)|0;c[h+24>>2]=e}d=im(b,10617)|0;if(d|0){e=qm(d)|0;c[h+28>>2]=e}d=im(b,10630)|0;if(d|0)g[h+32>>2]=+sm(d)}else c[h+24>>2]=1;b=im(f,10679)|0;if(!b)return h|0;d=im(b,10689)|0;if(d|0){f=qm(d)|0;c[h+40>>2]=f}d=im(b,10695)|0;if(d|0)g[h+44>>2]=+sm(d);d=im(b,10705)|0;if(d|0)g[h+48>>2]=+sm(d);d=im(b,10717)|0;if(!d)return h|0;c[h+52>>2]=~~+sm(d)>>>0;return h|0}function $b(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+256|0;if((i|0)>=(j|0))ba();e=Pl(a,0,f)|0;if(e){a=_b(e,b)|0;b=e+4|0;d=c[b>>2]|0;if((d|0)!=-1?(d=d+-1|0,c[b>>2]=d,(d|0)==0):0)km(e)}else{cc(3);a=0}i=f;return a|0}function ac(){Aa(45076,2)|0;return}function bc(a){a=a|0;Yp(a);return}function cc(a){a=a|0;var b=0;Va(45072,1)|0;b=Pa(c[11269]|0)|0;if(b|0){c[b>>2]=a;return}b=Xp(4)|0;Za(c[11269]|0,b|0)|0;c[b>>2]=a;return}function dc(b){b=b|0;var d=0;d=Xp(68)|0;c[d>>2]=b;b=Xp(b)|0;c[d+4>>2]=b;c[d+8>>2]=b;c[d+12>>2]=b;jb(d+16|0,0)|0;b=Xp(60)|0;a[b>>0]=0;Ia(b+12|0,0)|0;c[d+56>>2]=b;b=Xp(60)|0;a[b>>0]=0;Ia(b+12|0,0)|0;c[d+60>>2]=b;a[d+64>>0]=0;a[d+52>>0]=0;c[d+44>>2]=0;return d|0}function ec(a){a=a|0;Ja((c[a+56>>2]|0)+12|0)|0;Ja((c[a+60>>2]|0)+12|0)|0;Ta(a+16|0)|0;Yp(c[a+4>>2]|0);Yp(a);return}function fc(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=i;i=i+16|0;if((i|0)>=(j|0))ba();r=t;q=b+60|0;f=c[q>>2]|0;h=(a[f>>0]|0)!=0;do if(h){g=f+4|0;f=f+8|0;if((c[g>>2]|0)==0?(c[f>>2]|0)==0:0){n=0;o=0;break}hb(r|0,0)|0;o=((c[r+4>>2]|0)*1e3|0)+(c[f>>2]|0)|0;s=(o|0)>1e9;n=(c[r>>2]|0)+(c[g>>2]|0)+(s&1)|0;o=s?o+-1e9|0:o}else{n=0;o=0}while(0);if(a[b+52>>0]|0){d=-3;i=t;return d|0}l=b+64|0;p=b+8|0;s=b+12|0;m=b+16|0;k=r+4|0;a:do if(!h){if(a[l>>0]|0){d=0;i=t;return d|0}h=c[s>>2]|0;f=c[p>>2]|0;if(f>>>0>>0)f=f+(c[b>>2]|0)|0;g=h;if((f|0)==(h|0))f=c[b>>2]|0;else f=f-g|0;if((f+-1|0)>>>0>>0){d=-1;i=t;return d|0}else f=g}else{b:do if(!(n|o)){while(1){if(a[l>>0]|0){f=0;break}h=c[s>>2]|0;f=c[p>>2]|0;if(f>>>0>>0)g=f+(c[b>>2]|0)|0;else g=f;f=h;if((g|0)==(h|0))g=c[b>>2]|0;else g=g-f|0;if((g+-1|0)>>>0>=e>>>0)break a;g=c[q>>2]|0;c[r>>2]=n;c[k>>2]=o;g=g+12|0;do f=za(g|0,m|0)|0;while((f|0)==4);if(f|0)break b}i=t;return f|0}else{while(1){if(a[l>>0]|0){f=0;break}h=c[s>>2]|0;f=c[p>>2]|0;if(f>>>0>>0)g=f+(c[b>>2]|0)|0;else g=f;f=h;if((g|0)==(h|0))g=c[b>>2]|0;else g=g-f|0;if((g+-1|0)>>>0>=e>>>0)break a;g=c[q>>2]|0;c[r>>2]=n;c[k>>2]=o;g=g+12|0;do f=bb(g|0,m|0,r|0)|0;while((f|0)==4);if(f|0)break b}i=t;return f|0}while(0);d=(c[(eo()|0)>>2]|0)==110;d=d?-2:-5;i=t;return d|0}while(0);g=b+4|0;q=c[b>>2]|0;r=(c[g>>2]|0)+q|0;f=(r>>>0>>0?r+q|0:r)-f|0;f=f>>>0>e>>>0?e:f;fq(h|0,d|0,f|0)|0;if(f>>>0>>0)fq(c[g>>2]|0,d+f|0,e-f|0)|0;r=h+e|0;d=c[b>>2]|0;c[s>>2]=r>>>0<((c[g>>2]|0)+d|0)>>>0?r:r+(0-d)|0;Ra((c[b+56>>2]|0)+12|0)|0;d=e;i=t;return d|0}function gc(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=i;i=i+16|0;if((i|0)>=(j|0))ba();r=t;q=b+60|0;e=c[q>>2]|0;g=(a[e>>0]|0)!=0;do if(g){f=e+4|0;e=e+8|0;if((c[f>>2]|0)==0?(c[e>>2]|0)==0:0){n=0;o=0;break}hb(r|0,0)|0;o=((c[r+4>>2]|0)*1e3|0)+(c[e>>2]|0)|0;s=(o|0)>1e9;n=(c[r>>2]|0)+(c[f>>2]|0)+(s&1)|0;o=s?o+-1e9|0:o}else{n=0;o=0}while(0);s=b+52|0;if(a[s>>0]|0){b=-3;i=t;return b|0}k=b+64|0;p=b+8|0;l=b+12|0;m=b+16|0;h=r+4|0;a:do if(!g){if(a[k>>0]|0){b=0;i=t;return b|0}g=c[l>>2]|0;f=c[p>>2]|0;e=g;if(f>>>0>>0)f=f+(c[b>>2]|0)|0;if((f|0)==(g|0))f=c[b>>2]|0;else f=f-e|0;if((f+-1|0)>>>0>>0){b=-1;i=t;return b|0}}else{b:do if(!(n|o)){while(1){if(a[k>>0]|0){e=0;break}g=c[l>>2]|0;f=c[p>>2]|0;e=g;if(f>>>0>>0)f=f+(c[b>>2]|0)|0;if((f|0)==(g|0))f=c[b>>2]|0;else f=f-e|0;if((f+-1|0)>>>0>=d>>>0)break a;f=c[q>>2]|0;c[r>>2]=n;c[h>>2]=o;f=f+12|0;do e=za(f|0,m|0)|0;while((e|0)==4);if(e|0)break b}i=t;return e|0}else{while(1){if(a[k>>0]|0){e=0;break}g=c[l>>2]|0;f=c[p>>2]|0;e=g;if(f>>>0>>0)f=f+(c[b>>2]|0)|0;if((f|0)==(g|0))f=c[b>>2]|0;else f=f-e|0;if((f+-1|0)>>>0>=d>>>0)break a;f=c[q>>2]|0;c[r>>2]=n;c[h>>2]=o;f=f+12|0;do e=bb(f|0,m|0,r|0)|0;while((e|0)==4);if(e|0)break b}i=t;return e|0}while(0);b=(c[(eo()|0)>>2]|0)==110;b=b?-2:-5;i=t;return b|0}while(0);c[b+44>>2]=d;c[b+48>>2]=e;a[s>>0]=1;b=d;i=t;return b|0}function hc(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;if(a[b+64>>0]|0){d=0;return d|0}g=b+44|0;if((c[g>>2]|0)>>>0>>0){d=-4;return d|0}h=b+48|0;j=c[h>>2]|0;i=b+4|0;k=c[b>>2]|0;f=(c[i>>2]|0)+k|0;f=(f>>>0>>0?f+k|0:f)-j|0;f=f>>>0>e>>>0?e:f;fq(j|0,d|0,f|0)|0;if(f>>>0>>0)fq(c[i>>2]|0,d+f|0,e-f|0)|0;j=(c[h>>2]|0)+e|0;k=c[b>>2]|0;c[h>>2]=j>>>0<((c[i>>2]|0)+k|0)>>>0?j:j+(0-k)|0;c[g>>2]=(c[g>>2]|0)-e;k=e;return k|0}function ic(b){b=b|0;var d=0;if(a[b+64>>0]|0){b=0;return b|0}d=b+52|0;if(!(a[d>>0]|0)){b=-4;return b|0}if(c[b+44>>2]|0){b=-4;return b|0}c[b+12>>2]=c[b+48>>2];a[d>>0]=0;Ra((c[b+56>>2]|0)+12|0)|0;b=0;return b|0}function jc(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=i;i=i+16|0;if((i|0)>=(j|0))ba();t=x;s=b+56|0;f=c[s>>2]|0;h=(a[f>>0]|0)!=0;do if(h){g=f+4|0;f=f+8|0;if((c[g>>2]|0)==0?(c[f>>2]|0)==0:0){o=0;p=0;break}hb(t|0,0)|0;p=((c[t+4>>2]|0)*1e3|0)+(c[f>>2]|0)|0;w=(p|0)>1e9;o=(c[t>>2]|0)+(c[g>>2]|0)+(w&1)|0;p=w?p+-1e9|0:p}else{o=0;p=0}while(0);w=b+8|0;q=b+12|0;v=b+64|0;n=b+16|0;m=t+4|0;a:do if(h)if(!(o|p)){b:while(1){h=c[w>>2]|0;f=c[q>>2]|0;if(f>>>0>>0)g=f+(c[b>>2]|0)|0;else g=f;f=h;if((g-f|0)>>>0>=e>>>0)break a;f=(a[v>>0]|0)!=0;if(f){k=(f^1)<<31>>31;break}g=c[s>>2]|0;c[t>>2]=o;c[m>>2]=p;g=g+12|0;do f=za(g|0,n|0)|0;while((f|0)==4);switch(f|0){case 0:break;case 110:{k=-2;break b}default:{r=-5;u=30;break b}}}if((u|0)==30){i=x;return r|0}d=k;i=x;return d|0}else{c:while(1){h=c[w>>2]|0;f=c[q>>2]|0;if(f>>>0>>0)g=f+(c[b>>2]|0)|0;else g=f;f=h;if((g-f|0)>>>0>=e>>>0)break a;f=(a[v>>0]|0)!=0;if(f){l=(f^1)<<31>>31;break}g=c[s>>2]|0;c[t>>2]=o;c[m>>2]=p;g=g+12|0;do f=bb(g|0,n|0,t|0)|0;while((f|0)==4);switch(f|0){case 0:break;case 110:{l=-2;break c}default:{r=-5;u=30;break c}}}if((u|0)==30){i=x;return r|0}d=l;i=x;return d|0}else{h=c[w>>2]|0;f=c[q>>2]|0;if(f>>>0>>0)g=f+(c[b>>2]|0)|0;else g=f;f=h;if((g-f|0)>>>0>>0){d=(a[v>>0]|0)+-1<<24>>24<<24>>24;i=x;return d|0}}while(0);g=b+4|0;u=c[b>>2]|0;v=(c[g>>2]|0)+u|0;f=(v>>>0>>0?v+u|0:v)-f|0;f=f>>>0>e>>>0?e:f;fq(d|0,h|0,f|0)|0;if(f>>>0>>0)fq(d+f|0,c[g>>2]|0,e-f|0)|0;v=h+e|0;d=c[b>>2]|0;c[w>>2]=v>>>0<((c[g>>2]|0)+d|0)>>>0?v:v+(0-d)|0;Ra((c[b+60>>2]|0)+12|0)|0;d=e;i=x;return d|0}function kc(a,b){a=a|0;b=b|0;var d=0,e=0;d=a+8|0;e=(c[d>>2]|0)+b|0;b=c[a>>2]|0;c[d>>2]=e>>>0<((c[a+4>>2]|0)+b|0)>>>0?e:e+(0-b)|0;return}function lc(a){a=a|0;gb(a+16|0)|0;return}function mc(a){a=a|0;Ua(a+16|0)|0;return}function nc(a){a=a|0;gb(a+16|0)|0;return}function oc(a){a=a|0;Ua(a+16|0)|0;return}function pc(a){a=a|0;var b=0,d=0;if(!a){a=0;return a|0}b=Xp(28)|0;c[b>>2]=c[a>>2];c[b+4>>2]=c[a+4>>2];c[b+8>>2]=c[a+8>>2];c[b+12>>2]=c[a+12>>2];c[b+16>>2]=c[a+16>>2];d=zj(0)|0;c[b+20>>2]=d;Hj(d,0.0);Fj(d,+g[a+16>>2]);d=c[a+4>>2]|0;if(d>>>0>1){c[b+24>>2]=ze(c[a>>2]|0,d,c[a+8>>2]|0,+g[a+12>>2],0.0)|0;a=b;return a|0}else{c[b+4>>2]=1;c[b+8>>2]=0;c[b+24>>2]=0;a=b;return a|0}return 0}function qc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;w=i;i=i+32|0;if((i|0)>=(j|0))ba();q=w+16|0;r=w+8|0;s=w;if(!a){v=0;i=w;return v|0}t=a+4|0;f=c[t>>2]|0;if((d>>>0)%(f>>>0)|0|0){v=0;i=w;return v|0}v=Wa()|0;u=i;i=i+((1*(f<<3)|0)+15&-16)|0;if((i|0)>=(j|0))ba();if(!d)f=0;else{n=a+24|0;o=u+4|0;p=s+4|0;k=a+20|0;l=r+4|0;a=c[t>>2]|0;m=0;f=0;do{if(!a)a=0;else{h=0;do{a=c[k>>2]|0;c[r>>2]=c[b+(h+m<<2)>>2];g[l>>2]=0.0;c[q>>2]=c[r>>2];c[q+4>>2]=c[r+4>>2];Mj(a,q,u+(h<<3)|0);Ij(c[k>>2]|0);h=h+1|0;a=c[t>>2]|0}while(h>>>0>>0)}h=c[n>>2]|0;if(!h){h=c[o>>2]|0;c[e+(m<<3)>>2]=c[u>>2];c[e+(m<<3)+4>>2]=h}else{Be(h,u,e+(((m>>>0)/(a>>>0)|0)<<3)|0);a=c[t>>2]|0;h=(m>>>0)/(a>>>0)|0;x=e+(h<<3)|0;h=e+(h<<3)+4|0;_n(s,+g[x>>2],+g[h>>2],+(a>>>0),0.0);a=c[p>>2]|0;c[x>>2]=c[s>>2];c[h>>2]=a}f=f+1|0;a=c[t>>2]|0;m=a+m|0}while(m>>>0>>0)}Ga(v|0);x=f;i=w;return x|0}function rc(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,k=0;k=i;if(!a){b=0;i=k;return b|0}d=c[a+4>>2]|0;e=c[a+8>>2]|0;f=_(e<<1,d)|0;g=Wa()|0;h=i;i=i+((1*(f<<2)|0)+15&-16)|0;if((i|0)>=(j|0))ba();if(f|0)eq(h|0,0,(_(e,d)|0)<<3|0)|0;b=qc(a,h,f,b)|0;Ga(g|0);i=k;return b|0}function sc(a){a=a|0;var b=0;if(!a)return;Ej(c[a+20>>2]|0);b=c[a+24>>2]|0;if(b|0)Ae(b);Yp(a);return}function tc(a){a=a|0;var b=0.0,d=0,e=0;e=Xp(40)|0;c[e>>2]=c[a>>2];c[e+4>>2]=c[a+4>>2];c[e+8>>2]=c[a+8>>2];c[e+12>>2]=c[a+12>>2];c[e+16>>2]=c[a+16>>2];c[e+20>>2]=c[a+20>>2];c[e+24>>2]=c[a+24>>2];d=zj(0)|0;c[e+28>>2]=d;Hj(d,0.0);Fj(d,+g[a+16>>2]);d=c[a+4>>2]|0;if(d>>>0>1)c[e+32>>2]=Ee(c[a>>2]|0,d,c[a+8>>2]|0,+g[a+12>>2],0.0)|0;else{c[e+4>>2]=1;c[e+8>>2]=0;c[e+32>>2]=0}b=+g[a+24>>2];if(b!=0.0){c[e+36>>2]=Ve(b)|0;return e|0}else{c[e+36>>2]=0;return e|0}return 0}function uc(a,b){a=a|0;b=b|0;if(!a){b=0;return b|0}b=_(c[a+4>>2]|0,b)|0;return b|0}function vc(a,b){a=a|0;b=b|0;if(!a){b=0;return b|0}b=(b>>>0)/((c[a+4>>2]|0)>>>0)|0;return b|0}function wc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;D=i;i=i+48|0;if((i|0)>=(j|0))ba();p=D+32|0;q=D+24|0;B=D+8|0;r=D+16|0;x=D;if(!a){C=0;i=D;return C|0}y=a+4|0;A=c[y>>2]|0;C=Wa()|0;z=i;i=i+((1*(A<<3)|0)+15&-16)|0;if((i|0)>=(j|0))ba();if(!d)a=0;else{A=a+32|0;s=z+4|0;t=q+4|0;u=a+28|0;v=r+4|0;w=a+36|0;l=a+20|0;m=B+4|0;n=x+4|0;o=0;a=0;do{f=c[A>>2]|0;h=c[b+(o<<3)>>2]|0;k=c[b+(o<<3)+4>>2]|0;if(!f){c[z>>2]=h;c[s>>2]=k}else{c[q>>2]=h;c[t>>2]=k;c[p>>2]=c[q>>2];c[p+4>>2]=c[q+4>>2];Je(f,p,z)}if(c[y>>2]|0){h=0;do{f=c[u>>2]|0;k=c[z+(h<<3)+4>>2]|0;c[r>>2]=c[z+(h<<3)>>2];c[v>>2]=k;c[p>>2]=c[r>>2];c[p+4>>2]=c[r+4>>2];Lj(f,p,B);f=c[w>>2]|0;if(f|0){k=c[m>>2]|0;c[x>>2]=c[B>>2];c[n>>2]=k;c[p>>2]=c[x>>2];c[p+4>>2]=c[x+4>>2];Te(f,p,B)}g[e+((_(c[y>>2]|0,o)|0)+h<<2)>>2]=+g[B>>2]*+g[l>>2];a=a+1|0;Ij(c[u>>2]|0);h=h+1|0}while(h>>>0<(c[y>>2]|0)>>>0)}o=o+1|0}while((o|0)!=(d|0))}Ga(C|0);C=a;i=D;return C|0}function xc(a){a=a|0;if(!a){a=0;return a|0}a=_(c[a+4>>2]<<1,c[a+8>>2]|0)|0;return a|0}function yc(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,k=0;k=i;if(!a){b=0;i=k;return b|0}d=c[a+8>>2]|0;if(!d){b=0;i=k;return b|0}d=d<<1;e=Wa()|0;f=i;i=i+((1*(d<<3)|0)+15&-16)|0;if((i|0)>=(j|0))ba();if(d|0){h=0;do{g[f+(h<<3)>>2]=0.0;g[f+(h<<3)+4>>2]=0.0;h=h+1|0}while((h|0)!=(d|0))}b=wc(a,f,d,b)|0;Ga(e|0);i=k;return b|0}function zc(a){a=a|0;var b=0;b=c[a+32>>2]|0;if(b|0)He(b);b=c[a+36>>2]|0;if(!b)return;Se(b);return}function Ac(a){a=a|0;var b=0;if(!a)return;Ej(c[a+28>>2]|0);b=c[a+32>>2]|0;if(b|0)Fe(b);b=c[a+36>>2]|0;if(b|0)Re(b);Yp(a);return}function Bc(b){b=b|0;var d=0,e=0,f=0,g=0;e=c[b>>2]|0;g=Xp(e)|0;_i(e,g);e=(c[b>>2]|0)>>>1;d=e;while(1)if(!(a[g+d>>0]|0))d=d+-1|0;else break;while(1){f=g+e|0;if(!(a[f>>0]|0))e=e+1|0;else break}e=c[b+16>>2]|0;if(e|0){e=e>>>0>1?e:1;eq(g+(d+1-e)|0,0,e|0)|0}d=c[b+12>>2]|0;if(!d)return g|0;eq(f|0,0,(d>>>0>1?d:1)|0)|0;return g|0}function Cc(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;b=d>>>0>>0?d:b;gq(c|0,a|0,b<<2|0)|0;return b|0}function Dc(a){a=a|0;var b=0,d=0,e=0;d=i;i=i+16|0;if((i|0)>=(j|0))ba();b=d;if(dp(a,c[2]|0)|0)if(dp(a,c[4]|0)|0)if(dp(a,c[6]|0)|0)if(dp(a,c[8]|0)|0)if(dp(a,c[10]|0)|0)if(dp(a,c[12]|0)|0)if(!(dp(a,c[14]|0)|0))a=6;else{e=c[2348]|0;c[b>>2]=a;Kp(e,10834,b)|0;a=0}else a=5;else a=4;else a=3;else a=2;else a=1;else a=0;i=d;return a|0}function Ec(a){a=a|0;var b=0,d=0,e=0,f=0;e=i;i=i+16|0;if((i|0)>=(j|0))ba();d=e;switch(a|0){case 1:case 0:{b=0;break}case 2:{b=1;break}case 3:{b=1;break}case 4:{b=2;break}case 5:{b=3;break}case 6:{b=4;break}default:{f=c[2348]|0;c[d>>2]=a;Kp(f,10905,d)|0;kb(1)}}i=e;return b|0}function Fc(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0;h=i;i=i+16|0;if((i|0)>=(j|0))ba();f=h;switch(a|0){case 0:{Qp(10962,71,1,c[2348]|0)|0;kb(-1);break}case 2:{if(!e){e=0;i=h;return e|0}else{f=0;a=0}do{a=(d[b+f>>0]|0)+a|0;f=f+1|0}while((f|0)!=(e|0));e=(a^255)+1&255;i=h;return e|0}case 3:{f=d[40210]|0;if(!e){e=0;i=h;return e|0}else{g=0;a=-1}do{a=(d[b+g>>0]|0)^a;a=f&0-(a&1)^a>>>1;a=f&0-(a&1)^a>>>1;a=f&0-(a&1)^a>>>1;a=f&0-(a&1)^a>>>1;a=f&0-(a&1)^a>>>1;a=f&0-(a&1)^a>>>1;a=f&0-(a&1)^a>>>1;a=f&0-(a&1)^a>>>1;g=g+1|0}while((g|0)!=(e|0));e=a&255^255;i=h;return e|0}case 4:{e=Gc(b,e)|0;i=h;return e|0}case 5:{e=Hc(b,e)|0;i=h;return e|0}case 6:{f=Zj(79764919)|0;if(!e){e=0;i=h;return e|0}else{g=0;a=-1}do{a=(d[b+g>>0]|0)^a;a=f&0-(a&1)^a>>>1;a=f&0-(a&1)^a>>>1;a=f&0-(a&1)^a>>>1;a=f&0-(a&1)^a>>>1;a=f&0-(a&1)^a>>>1;a=f&0-(a&1)^a>>>1;a=f&0-(a&1)^a>>>1;a=f&0-(a&1)^a>>>1;g=g+1|0}while((g|0)!=(e|0));e=~a;i=h;return e|0}case 1:{e=0;i=h;return e|0}default:{h=c[2348]|0;c[f>>2]=a;Kp(h,11034,f)|0;kb(1)}}return 0}function Gc(a,b){a=a|0;b=b|0;var c=0,e=0,f=0;e=Xj(32773)|0;if(!b){f=0;return f|0}else{f=0;c=-1}do{c=(d[a+f>>0]|0)^c;c=e&0-(c&1)^c>>>1;c=e&0-(c&1)^c>>>1;c=e&0-(c&1)^c>>>1;c=e&0-(c&1)^c>>>1;c=e&0-(c&1)^c>>>1;c=e&0-(c&1)^c>>>1;c=e&0-(c&1)^c>>>1;c=e&0-(c&1)^c>>>1;f=f+1|0}while((f|0)!=(b|0));f=c&65535^65535;return f|0}function Hc(a,b){a=a|0;b=b|0;var c=0,e=0,f=0;e=Yj(6122955)|0;if(!b){f=0;return f|0}else{f=0;c=-1}do{c=(d[a+f>>0]|0)^c;c=e&0-(c&1)^c>>>1;c=e&0-(c&1)^c>>>1;c=e&0-(c&1)^c>>>1;c=e&0-(c&1)^c>>>1;c=e&0-(c&1)^c>>>1;c=e&0-(c&1)^c>>>1;c=e&0-(c&1)^c>>>1;c=e&0-(c&1)^c>>>1;f=f+1|0}while((f|0)!=(b|0));f=c&16777215^16777215;return f|0}function Ic(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;switch(a|0){case 0:{Qp(11093,71,1,c[2348]|0)|0;kb(-1);break}case 1:{a=1;return a|0}default:{a=(Fc(a,b,d)|0)==(e|0)&1;return a|0}}return 0}function Jc(a){a=a|0;var b=0,d=0,e=0,f=0;f=i;i=i+16|0;if((i|0)>=(j|0))ba();d=f;b=0;do{if(!(dp(a,c[64+(b<<3)>>2]|0)|0)){e=5;break}b=b+1|0}while(b>>>0<28);if((e|0)==5){i=f;return b|0}e=c[2348]|0;c[d>>2]=a;Kp(e,11990,d)|0;e=0;i=f;return e|0}function Kc(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=i;i=i+32|0;if((i|0)>=(j|0))ba();f=g;d=g+16|0;e=g+8|0;do switch(a|0){case 1:{f=b;i=g;return f|0}case 2:{f=b*3|0;i=g;return f|0}case 3:{f=b*5|0;i=g;return f|0}case 4:{f=(b<<1&1073741822)*7|0;f=((f&6|0)!=0&1)+(f>>>3)|0;i=g;return f|0}case 5:{f=b<<1&536870910;i=g;return f|0}case 6:{f=(b&536870911)*12|0;f=(f>>>2&1)+(f>>>3)|0;i=g;return f|0}case 7:{f=b<<3;f=(((((f>>>0)%12|0|0)!=0&1)+((f>>>0)/12|0)|0)*24|0)>>>3;i=g;return f|0}case 8:{f=(b>>>1)+b+(b&1)|0;i=g;return f|0}case 9:{f=(b>>>2)+b+((b&3|0)!=0&1)|0;i=g;return f|0}case 10:{f=(b>>>3)+b+((b&7|0)!=0&1)|0;i=g;return f|0}case 11:{f=(b<<1)+2|0;i=g;return f|0}case 12:{f=(b<<1)+2|0;i=g;return f|0}case 13:{f=(b*3|0)+3|0;i=g;return f|0}case 14:{f=(b*6|0)+11|0;i=g;return f|0}case 15:{f=(((b<<2&2147483644|3)+(b<<3|6)|0)>>>3)+1|0;i=g;return f|0}case 16:{f=b<<3|6;f=(((f+2|0)>>>0)/3|0)+f|0;f=((f&7|0)!=0&1)+(f>>>3)|0;i=g;return f|0}case 17:{f=b<<3|6;f=((f+3|0)>>>2)+f|0;f=((f&6|0)!=0&1)+(f>>>3)|0;i=g;return f|0}case 18:{f=b<<3|6;f=(((f+4|0)>>>0)/5|0)+f|0;f=((f&7|0)!=0&1)+(f>>>3)|0;i=g;return f|0}case 19:{f=b<<3|6;f=(((f+5|0)>>>0)/6|0)+f|0;f=((f&7|0)!=0&1)+(f>>>3)|0;i=g;return f|0}case 20:{f=b<<3|6;f=(((f+6|0)>>>0)/7|0)+f|0;f=((f&7|0)!=0&1)+(f>>>3)|0;i=g;return f|0}case 21:{f=b<<3;f=f+8+((f+9|0)>>>1)|0;f=(f>>>2&1)+(f>>>3)|0;i=g;return f|0}case 22:{f=b<<3;f=f+8+(((f+10|0)>>>0)/3|0)|0;f=((f&7|0)!=0&1)+(f>>>3)|0;i=g;return f|0}case 23:{f=b<<3;f=f+8+((f+11|0)>>>2)|0;f=((f&6|0)!=0&1)+(f>>>3)|0;i=g;return f|0}case 24:{f=b<<3;f=f+8+(((f+12|0)>>>0)/5|0)|0;f=((f&7|0)!=0&1)+(f>>>3)|0;i=g;return f|0}case 25:{f=b<<3;f=f+8+(((f+13|0)>>>0)/6|0)|0;f=((f&7|0)!=0&1)+(f>>>3)|0;i=g;return f|0}case 26:{f=b<<3;f=f+8+(((f+14|0)>>>0)/7|0)|0;f=((f&7|0)!=0&1)+(f>>>3)|0;i=g;return f|0}case 27:{if(!b){Qp(12061,69,1,c[2348]|0)|0;kb(1)}Vp(d,b,223);f=((c[d+4>>2]|0)!=0&1)+(c[d>>2]|0)|0;Vp(e,b,f);f=_((c[e>>2]|0)+32+((c[e+4>>2]|0)!=0&1)|0,f)|0;i=g;return f|0}case 0:{f=0;i=g;return f|0}default:{c[f>>2]=a;Rp(12131,f)|0;kb(-1)}}while(0);return 0}function Lc(a,b,d){a=a|0;b=b|0;d=d|0;if(!b){Qp(12196,61,1,c[2348]|0)|0;kb(1)}if(d>>>0>>0){Qp(12258,76,1,c[2348]|0)|0;kb(1)}else{a=a<<3;b=_((((a>>>0)%(b>>>0)|0|0)!=0&1)+((a>>>0)/(b>>>0)|0)|0,d)|0;return ((b&7|0)!=0&1)+(b>>>3)|0}return 0}function Mc(a){a=a|0;var b=0.0,d=0,e=0;e=i;i=i+16|0;if((i|0)>=(j|0))ba();d=e;do switch(a|0){case 0:{b=0.0;break}case 1:{b=1.0;break}case 2:{b=.3333333432674408;break}case 3:{b=.20000000298023224;break}case 4:{b=.5714285969734192;break}case 5:{b=.5;break}case 6:{b=.6666666865348816;break}case 7:{b=.5;break}case 8:{b=.6666666865348816;break}case 9:{b=.800000011920929;break}case 10:{b=.8888888955116272;break}case 11:{b=.5;break}case 12:{b=.5;break}case 13:{b=.3333333432674408;break}case 14:{b=.1666666716337204;break}case 15:{b=.6666666865348816;break}case 16:{b=.75;break}case 17:{b=.800000011920929;break}case 18:{b=.8333333134651184;break}case 19:{b=.8571428656578064;break}case 20:{b=.875;break}case 21:{b=.6666666865348816;break}case 22:{b=.75;break}case 23:{b=.800000011920929;break}case 24:{b=.8333333134651184;break}case 25:{b=.8571428656578064;break}case 26:{b=.875;break}case 27:{b=.8745098114013672;break}default:{c[d>>2]=a;Rp(12335,d)|0;kb(-1)}}while(0);i=e;return +b}function Nc(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;if((i|0)>=(j|0))ba();e=f;do switch(a|0){case 0:{Sp(12390)|0;kb(-1);break}case 1:{d=Ad(0)|0;break}case 2:{d=Ed(b)|0;break}case 3:{d=Jd(b)|0;break}case 4:{d=hd(b)|0;break}case 5:{d=nd(b)|0;break}case 6:{d=ud(b)|0;break}case 7:{d=dd(b)|0;break}case 8:{d=Vd(b)|0;break}case 9:{d=_d(b)|0;break}case 10:{d=fe(b)|0;break}case 14:case 13:case 12:case 11:{d=Sc(a)|0;break}case 26:case 25:case 24:case 23:case 22:case 21:case 20:case 19:case 18:case 17:case 16:case 15:{d=Zc(a)|0;break}case 27:{d=Od(27)|0;break}default:{c[e>>2]=a;Rp(12454,e)|0;kb(-1)}}while(0);i=f;return d|0}function Oc(a){a=a|0;var b=0,d=0,e=0;e=i;i=i+16|0;if((i|0)>=(j|0))ba();d=e;b=c[a>>2]|0;do switch(b|0){case 0:{Sp(12507)|0;kb(-1);break}case 1:{Dd(a);break}case 2:{Id(a);break}case 3:{Nd(a);break}case 4:{md(a);break}case 5:{sd(a);break}case 6:{zd(a);break}case 7:{gd(a);break}case 8:{Yd(a);break}case 9:{be(a);break}case 10:{ie(a);break}case 14:case 13:case 12:case 11:{Yc(a);break}case 26:case 25:case 24:case 23:case 22:case 21:case 20:case 19:case 18:case 17:case 16:case 15:{bd(a);break}case 27:{Sd(a);break}default:{c[d>>2]=b;Rp(12573,d)|0;kb(-1)}}while(0);i=e;return}function Pc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;xb[c[a+136>>2]&63](a,b,d,e);return}function Qc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;xb[c[a+140>>2]&63](a,b,d,e);return}function Rc(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,k=0,l=0,m=0,n=0,o=0;n=i;h=c[b+144>>2]|0;if(h|0){xb[h&63](b,e,f,g);i=n;return}h=Kc(c[b>>2]|0,e)|0;k=Wa()|0;l=i;i=i+((1*h|0)+15&-16)|0;if((i|0)>=(j|0))ba();if(h|0){m=0;do{o=m<<3;a[l+m>>0]=(d[f+(o|6)>>0]|0)>>>6&2|((d[f+(o|5)>>0]|0)>>>5&4|((d[f+(o|4)>>0]|0)>>>4&8|((d[f+(o|3)>>0]|0)>>>3&16|((d[f+(o|2)>>0]|0)>>>2&32|((d[f+(o|1)>>0]|0)>>>1&64|(d[f+o>>0]|0)&128)))))|(d[f+(o|7)>>0]|0)>>>7;m=m+1|0}while((m|0)!=(h|0))}xb[c[b+140>>2]&63](b,e,l,g);Ga(k|0);i=n;return}function Sc(a){a=a|0;var b=0;b=Xp(148)|0;c[b>>2]=a;g[b+4>>2]=+Mc(a);c[b+136>>2]=1;c[b+140>>2]=2;c[b+144>>2]=3;switch(c[b>>2]|0){case 11:{c[b+28>>2]=2;c[b+32>>2]=7;c[b+24>>2]=288;c[b+44>>2]=3;c[b+48>>2]=1;c[b+52>>2]=5;c[b+56>>2]=1;c[b+60>>2]=3;break}case 12:{c[b+28>>2]=2;c[b+32>>2]=9;c[b+24>>2]=296;c[b+44>>2]=4;c[b+48>>2]=2;c[b+52>>2]=6;c[b+56>>2]=2;c[b+60>>2]=4;break}case 13:{c[b+28>>2]=3;c[b+32>>2]=9;c[b+24>>2]=304;c[b+44>>2]=5;c[b+48>>2]=3;c[b+52>>2]=7;c[b+56>>2]=3;c[b+60>>2]=5;break}case 14:{c[b+28>>2]=6;c[b+32>>2]=15;c[b+24>>2]=316;c[b+44>>2]=6;c[b+48>>2]=4;c[b+52>>2]=8;c[b+56>>2]=4;c[b+60>>2]=6;break}default:{Qp(12666,39,1,c[2348]|0)|0;kb(1)}}c[b+8>>2]=0;c[b+16>>2]=0;c[b+20>>2]=0;return b|0}function Tc(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;if(!e){i=0;h=0;l=0}else{r=b+28|0;s=b+24|0;k=c[r>>2]|0;i=0;j=0;h=0;l=0;do{q=d[f+j>>0]|0;n=k;m=k;p=0;k=l;while(1){o=q>>>(7-p|0)&1|k<<1;if(!m){k=n;l=0}else{k=0;do{i=((eb(c[(c[s>>2]|0)+(k<<2)>>2]&o|0)|0)&1|(i&255)<<1)&255;a[g+(h>>>3)>>0]=i;h=h+1|0;k=k+1|0;l=c[r>>2]|0}while(k>>>0>>0);k=l}p=p+1|0;if((p|0)==8){l=o;break}else{n=k;m=l;k=o}}j=j+1|0}while((j|0)!=(e|0))}n=b+32|0;j=c[n>>2]|0;if((j|0)!=1){o=b+28|0;p=b+24|0;k=c[o>>2]|0;m=0;do{l=l<<1;if(!k)k=0;else{j=0;do{i=((eb(c[(c[p>>2]|0)+(j<<2)>>2]&l|0)|0)&1|(i&255)<<1)&255;a[g+(h>>>3)>>0]=i;h=h+1|0;j=j+1|0;k=c[o>>2]|0}while(j>>>0>>0);j=c[n>>2]|0}m=m+1|0}while(m>>>0<(j+-1|0)>>>0)}if(h&7)do{i=(i&255)<<1&255;a[g+(h>>>3)>>0]=i;h=h+1|0}while((h&7|0)!=0);if((h|0)==((Kc(c[b>>2]|0,e)|0)<<3|0))return;else Ha(12706,12627,131,12650)}function Uc(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,k=0,l=0,m=0,n=0;n=i;i=i+16|0;if((i|0)>=(j|0))ba();l=n;m=b+8|0;if((c[m>>2]|0)==(d|0)){d=b+16|0;h=d;g=b+12|0;d=c[d>>2]|0}else{c[m>>2]=d;k=b+12|0;c[k>>2]=Kc(c[b>>2]|0,d)|0;d=b+20|0;g=c[d>>2]|0;if(g|0)qb[c[b+60>>2]&31](g);c[d>>2]=rb[c[b+44>>2]&7](c[m>>2]<<3)|0;h=b+16|0;d=_p(c[h>>2]|0,c[k>>2]<<3)|0;c[h>>2]=d;g=k}k=c[g>>2]|0;dk(e,k,d,k<<3,l);if(c[g>>2]&536870911|0){d=0;do{l=(c[h>>2]|0)+d|0;a[l>>0]=((a[l>>0]|0)!=0)<<31>>31;d=d+1|0}while(d>>>0>2]<<3>>>0)}l=b+20|0;wb[c[b+48>>2]&7](c[l>>2]|0,0)|0;pb[c[b+52>>2]&15](c[l>>2]|0,c[h>>2]|0,(c[b+32>>2]|0)+-1+(c[m>>2]<<3)|0)|0;vb[c[b+56>>2]&7](c[l>>2]|0,f,c[m>>2]<<3,0)|0;i=n;return}function Vc(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;i=b+8|0;if((c[i>>2]|0)==(d|0))d=b+12|0;else{c[i>>2]=d;h=b+12|0;c[h>>2]=Kc(c[b>>2]|0,d)|0;d=b+20|0;g=c[d>>2]|0;if(g|0)qb[c[b+60>>2]&31](g);c[d>>2]=rb[c[b+44>>2]&7](c[i>>2]<<3)|0;d=b+16|0;c[d>>2]=_p(c[d>>2]|0,c[h>>2]<<3)|0;d=h}g=b+16|0;if(c[d>>2]&536870911|0){h=0;do{a[(c[g>>2]|0)+h>>0]=a[e+h>>0]|0;h=h+1|0}while(h>>>0>2]<<3>>>0)}e=b+20|0;wb[c[b+48>>2]&7](c[e>>2]|0,0)|0;pb[c[b+52>>2]&15](c[e>>2]|0,c[g>>2]|0,(c[b+32>>2]|0)+-1+(c[i>>2]<<3)|0)|0;vb[c[b+56>>2]&7](c[e>>2]|0,f,c[i>>2]<<3,0)|0;return}function Wc(a){a=a|0;c[a+28>>2]=2;c[a+32>>2]=7;c[a+24>>2]=288;c[a+44>>2]=3;c[a+48>>2]=1;c[a+52>>2]=5;c[a+56>>2]=1;c[a+60>>2]=3;return}function Xc(a){a=a|0;c[a+28>>2]=2;c[a+32>>2]=9;c[a+24>>2]=296;c[a+44>>2]=4;c[a+48>>2]=2;c[a+52>>2]=6;c[a+56>>2]=2;c[a+60>>2]=4;return}function Yc(a){a=a|0;var b=0;b=c[a+20>>2]|0;if(b|0)qb[c[a+60>>2]&31](b);b=c[a+16>>2]|0;if(!b){Yp(a);return}Yp(b);Yp(a);return}function Zc(a){a=a|0;var b=0;b=Xp(148)|0;c[b>>2]=a;g[b+4>>2]=+Mc(a);c[b+136>>2]=4;c[b+140>>2]=5;c[b+144>>2]=6;do switch(c[b>>2]|0){case 15:{Wc(b);c[b+36>>2]=2;c[b+40>>2]=8928;break}case 16:{Wc(b);c[b+36>>2]=3;c[b+40>>2]=8944;break}case 17:{Wc(b);c[b+36>>2]=4;c[b+40>>2]=8968;break}case 18:{Wc(b);c[b+36>>2]=5;c[b+40>>2]=9e3;break}case 19:{Wc(b);c[b+36>>2]=6;c[b+40>>2]=9040;break}case 20:{Wc(b);c[b+36>>2]=7;c[b+40>>2]=9088;break}case 21:{Xc(b);c[b+36>>2]=2;c[b+40>>2]=9144;break}case 22:{Xc(b);c[b+36>>2]=3;c[b+40>>2]=9160;break}case 23:{Xc(b);c[b+36>>2]=4;c[b+40>>2]=9184;break}case 24:{Xc(b);c[b+36>>2]=5;c[b+40>>2]=9216;break}case 25:{Xc(b);c[b+36>>2]=6;c[b+40>>2]=9256;break}case 26:{Xc(b);c[b+36>>2]=7;c[b+40>>2]=9304;break}default:{Qp(12820,49,1,c[2348]|0)|0;kb(1)}}while(0);c[b+8>>2]=0;c[b+16>>2]=0;c[b+20>>2]=0;return b|0}function _c(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;if(!e){i=0;h=0;l=0;k=0}else{r=b+28|0;s=b+36|0;t=b+40|0;u=b+24|0;l=c[r>>2]|0;i=0;j=0;h=0;m=0;k=0;do{q=d[f+j>>0]|0;n=l;p=0;o=m;while(1){k=q>>>(7-p|0)&1|k<<1;if(!n)n=0;else{m=0;do{n=(_(c[s>>2]|0,m)|0)+o|0;if(c[(c[t>>2]|0)+(n<<2)>>2]|0){i=((eb(c[(c[u>>2]|0)+(m<<2)>>2]&k|0)|0)&1|(i&255)<<1)&255;a[g+(h>>>3)>>0]=i;l=c[r>>2]|0;h=h+1|0}m=m+1|0}while(m>>>0>>0);n=l}m=((o+1|0)>>>0)%((c[s>>2]|0)>>>0)|0;p=p+1|0;if((p|0)==8)break;else o=m}j=j+1|0}while((j|0)!=(e|0));l=m}r=b+32|0;if((c[r>>2]|0)!=1){s=b+28|0;t=b+36|0;p=b+40|0;q=b+24|0;j=c[s>>2]|0;n=j;o=0;while(1){k=k<<1;if(!n){m=j;j=0}else{m=0;do{f=(_(c[t>>2]|0,m)|0)+l|0;if(c[(c[p>>2]|0)+(f<<2)>>2]|0){i=((eb(c[(c[q>>2]|0)+(m<<2)>>2]&k|0)|0)&1|(i&255)<<1)&255;a[g+(h>>>3)>>0]=i;j=c[s>>2]|0;h=h+1|0}m=m+1|0}while(m>>>0>>0);m=j}o=o+1|0;if(o>>>0>=((c[r>>2]|0)+-1|0)>>>0)break;else{n=j;j=m;l=((l+1|0)>>>0)%((c[t>>2]|0)>>>0)|0}}}if(h&7)do{i=(i&255)<<1&255;a[g+(h>>>3)>>0]=i;h=h+1|0}while((h&7|0)!=0);if((h|0)==((Kc(c[b>>2]|0,e)|0)<<3|0))return;else Ha(12706,12761,157,12794)}function $c(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=b+8|0;if((c[s>>2]|0)==(d|0)){h=b+28|0;k=b+32|0}else{c[s>>2]=d;c[b+12>>2]=Kc(c[b>>2]|0,d)|0;d=c[s>>2]|0;k=b+32|0;h=b+28|0;i=_((c[k>>2]|0)+-1+(d<<3)|0,c[h>>2]|0)|0;j=b+20|0;g=c[j>>2]|0;if(g){qb[c[b+60>>2]&31](g);d=c[s>>2]|0}c[j>>2]=rb[c[b+44>>2]&7](d<<3)|0;d=b+16|0;c[d>>2]=_p(c[d>>2]|0,i)|0;d=c[s>>2]|0}g=c[h>>2]|0;p=_((c[k>>2]|0)+-1+(d<<3)|0,g)|0;if(!p)d=b+16|0;else{q=b+36|0;r=b+40|0;d=b+16|0;i=a[e>>0]|0;n=0;l=0;j=0;o=0;while(1){if(!g)g=0;else{g=l;m=0;while(1){l=(_(c[q>>2]|0,m)|0)+o|0;if(c[(c[r>>2]|0)+(l<<2)>>2]|0){a[(c[d>>2]|0)+(m+n)>>0]=((i&255&1<<7-g|0)!=0)<<31>>31;g=g+1|0;if((g|0)==8){j=j+1|0;i=a[e+j>>0]|0;l=0}else l=g}else{a[(c[d>>2]|0)+(m+n)>>0]=127;l=g}m=m+1|0;g=c[h>>2]|0;if(m>>>0>=g>>>0)break;else g=l}}n=g+n|0;if(n>>>0>=p>>>0)break;else o=((o+1|0)>>>0)%((c[q>>2]|0)>>>0)|0}}e=b+20|0;wb[c[b+48>>2]&7](c[e>>2]|0,0)|0;pb[c[b+52>>2]&15](c[e>>2]|0,c[d>>2]|0,(c[k>>2]|0)+-1+(c[s>>2]<<3)|0)|0;vb[c[b+56>>2]&7](c[e>>2]|0,f,c[s>>2]<<3,0)|0;return}function ad(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=b+8|0;if((c[q>>2]|0)==(d|0)){h=b+28|0;k=b+32|0}else{c[q>>2]=d;c[b+12>>2]=Kc(c[b>>2]|0,d)|0;d=c[q>>2]|0;k=b+32|0;h=b+28|0;i=_((c[k>>2]|0)+-1+(d<<3)|0,c[h>>2]|0)|0;j=b+20|0;g=c[j>>2]|0;if(g){qb[c[b+60>>2]&31](g);d=c[q>>2]|0}c[j>>2]=rb[c[b+44>>2]&7](d<<3)|0;d=b+16|0;c[d>>2]=_p(c[d>>2]|0,i)|0;d=c[q>>2]|0}g=c[h>>2]|0;n=_((c[k>>2]|0)+-1+(d<<3)|0,g)|0;if(!n)d=b+16|0;else{o=b+36|0;p=b+40|0;d=b+16|0;l=0;i=0;m=0;while(1){if(!g)g=0;else{g=i;j=0;while(1){i=(_(c[o>>2]|0,j)|0)+m|0;if(!(c[(c[p>>2]|0)+(i<<2)>>2]|0)){a[(c[d>>2]|0)+(j+l)>>0]=127;i=g}else{a[(c[d>>2]|0)+(j+l)>>0]=a[e+g>>0]|0;i=g+1|0}j=j+1|0;g=c[h>>2]|0;if(j>>>0>=g>>>0)break;else g=i}}l=g+l|0;if(l>>>0>=n>>>0)break;else m=((m+1|0)>>>0)%((c[o>>2]|0)>>>0)|0}}e=b+20|0;wb[c[b+48>>2]&7](c[e>>2]|0,0)|0;pb[c[b+52>>2]&15](c[e>>2]|0,c[d>>2]|0,(c[k>>2]|0)+-1+(c[q>>2]<<3)|0)|0;vb[c[b+56>>2]&7](c[e>>2]|0,f,c[q>>2]<<3,0)|0;return}function bd(a){a=a|0;var b=0;b=c[a+20>>2]|0;if(b|0)qb[c[a+60>>2]&31](b);b=c[a+16>>2]|0;if(!b){Yp(a);return}Yp(b);Yp(a);return}function cd(a){a=a|0;var b=0,e=0,f=0,g=0,h=0;if(a>>>0>16777215){Qp(12870,61,1,c[2348]|0)|0;kb(1)}else{f=0;b=0}while(1){e=c[484+(f<<2)>>2]&a;e=(d[39691+(e>>>8&255)>>0]|0)+(d[39691+(e&255)>>0]|0)+(d[39691+(e>>>16&255)>>0]|0)&1|b<<1;f=f+1|0;if((f|0)==12){g=e;break}else b=e}if(((d[39691+(b>>>7&255)>>0]|0)+(d[39691+(g&255)>>0]|0)|0)>>>0<4){h=0;h=h^a;h=h&4095;return h|0}else b=0;while(1){e=c[340+(b<<2)>>2]^g;if(((d[39691+(e>>>8&255)>>0]|0)+(d[39691+(e&255)>>0]|0)|0)>>>0<3){h=7;break}b=b+1|0;if(b>>>0>=12){f=0;b=0;break}}if((h|0)==7){h=e<<12|1<<11-b;h=h^a;h=h&4095;return h|0}while(1){e=c[340+(f<<2)>>2]&g;e=(d[39691+(e>>>8&255)>>0]|0)+(d[39691+(e&255)>>0]|0)+(d[39691+(e>>>16&255)>>0]|0)&1|b<<1;f=f+1|0;if((f|0)==12){f=e;break}else b=e}if(((d[39691+(b>>>7&255)>>0]|0)+(d[39691+(f&255)>>0]|0)|1|0)==3){h=f;h=h^a;h=h&4095;return h|0}else b=0;while(1){e=c[340+(b<<2)>>2]^f;if(((d[39691+(e>>>8&255)>>0]|0)+(d[39691+(e&255)>>0]|0)|0)>>>0<3)break;b=b+1|0;if(b>>>0>=12){b=0;h=13;break}}if((h|0)==13){h=b^a;h=h&4095;return h|0}h=e|1<<23-b;h=h^a;h=h&4095;return h|0}function dd(a){a=a|0;a=Xp(148)|0;c[a>>2]=7;g[a+4>>2]=+Mc(7);c[a+136>>2]=7;c[a+140>>2]=8;c[a+144>>2]=0;return a|0}function ed(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=(e>>>0)%3|0;h=e-s|0;if((s|0)==(e|0))b=0;else{q=d[39691]|0;r=0;b=0;do{n=d[f+(r+1)>>0]|0;m=a[f+(r+2)>>0]|0;i=n>>>4|(d[f+r>>0]|0)<<4;n=n<<8&3840;k=0;l=0;while(1){j=c[388+(k<<2)>>2]&i;j=(d[39691+(j>>>8)>>0]|0)+(d[39691+(j&255)>>0]|0)+q&1|l<<1;k=k+1|0;if((k|0)==24){p=j;o=l;break}else l=j}k=n|m&255;l=0;i=0;while(1){j=c[388+(l<<2)>>2]&k;j=(d[39691+(j>>>8)>>0]|0)+(d[39691+(j&255)>>0]|0)+q&1|i<<1;l=l+1|0;if((l|0)==24)break;else i=j}a[g+b>>0]=o>>>15;a[g+(b|1)>>0]=o>>>7;a[g+(b+2)>>0]=p;a[g+(b+3)>>0]=i>>>15;a[g+(b+4)>>0]=i>>>7;a[g+(b+5)>>0]=j;b=b+6|0;r=r+3|0}while(r>>>0>>0)}if(h>>>0>>0){n=s*3|0;m=b;while(1){k=d[f+h>>0]|0;l=0;i=0;while(1){j=(d[39691+(c[388+(l<<2)>>2]&k)>>0]|0)&1|i<<1;l=l+1|0;if((l|0)==24)break;else i=j}a[g+m>>0]=i>>>15;a[g+(m+1)>>0]=i>>>7;a[g+(m+2)>>0]=j;h=h+1|0;if((h|0)==(e|0))break;else m=m+3|0}h=e;b=b+n|0}if((b|0)!=(Kc(7,e)|0))Ha(12932,12995,326,13023);if((h|0)==(e|0))return;else Ha(19100,12995,327,13023)}function fd(b,c,e,f){b=b|0;c=c|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;i=(c>>>0)%3|0;g=c-i|0;if((i|0)==(c|0))b=0;else{h=0;b=0;do{j=(d[e+(b+4)>>0]|0)<<8|(d[e+(b+3)>>0]|0)<<16|(d[e+(b+5)>>0]|0);k=cd((d[e+(b|1)>>0]|0)<<8|(d[e+b>>0]|0)<<16|(d[e+(b+2)>>0]|0))|0;j=cd(j)|0;a[f+h>>0]=k>>>4;a[f+(h+1)>>0]=j>>>8&15|k<<4;a[f+(h+2)>>0]=j;b=b+6|0;h=h+3|0}while(h>>>0>>0)}if(g>>>0>>0){i=i*3|0;h=b;while(1){a[f+g>>0]=cd((d[e+(h+1)>>0]|0)<<8|(d[e+h>>0]|0)<<16|(d[e+(h+2)>>0]|0))|0;g=g+1|0;if((g|0)==(c|0))break;else h=h+3|0}g=c;b=b+i|0}if((b|0)!=(Kc(7,c)|0))Ha(13044,12995,396,13106);if((g|0)==(c|0))return;else Ha(19100,12995,397,13106)}function gd(a){a=a|0;Yp(a);return}function hd(a){a=a|0;a=Xp(148)|0;c[a>>2]=4;g[a+4>>2]=+Mc(4);c[a+136>>2]=9;c[a+140>>2]=10;c[a+144>>2]=11;return a|0}function id(b,c,e,f){b=b|0;c=c|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;b=Lc(c,4,7)|0;if(!c)return;else{g=0;h=0}while(1){j=a[e+g>>0]|0;i=d[13127+(j&15)>>0]|0;$j(f,b,h,7,d[13127+((j&255)>>>4&255)>>0]|0);$j(f,b,h+7|0,7,i);g=g+1|0;if((g|0)==(c|0))break;else h=h+14|0}return}function jd(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,k=0,l=0,m=0,n=0;n=i;i=i+16|0;if((i|0)>=(j|0))ba();l=n+4|0;m=n;b=Lc(e,4,7)|0;if(!e){i=n;return}else{h=0;k=0}while(1){ak(f,b,k,7,l);ak(f,b,k+7|0,7,m);a[g+h>>0]=d[13143+(c[m>>2]|0)>>0]|0|(d[13143+(c[l>>2]|0)>>0]|0)<<4;h=h+1|0;if((h|0)==(e|0))break;else k=k+14|0}i=n;return}function kd(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;g=Lc(c,4,7)|0;if(!c)b=0;else{b=0;f=0;while(1){h=ld(d+f|0)|0;a[e+b>>0]=(h&255)<<4|(ld(d+(f+7)|0)|0)&255;b=b+1|0;if((b|0)==(c|0))break;else f=f+14|0}b=c*14|0}if((b|0)==(g<<3|0))return;else Ha(13843,13271,193,13299)}function ld(a){a=a|0;var b=0,c=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;i=d[a>>0]|0;o=i^255;r=d[a+1>>0]|0;s=r^255;t=d[a+2>>0]|0;j=t^255;k=d[a+3>>0]|0;l=k^255;m=d[a+4>>0]|0;n=m^255;p=d[a+5>>0]|0;q=p^255;b=d[a+6>>0]|0;c=b^255;f=0;g=0;a=0;while(1){e=d[13127+g>>0]|0;e=(e&32|0?s:r)+(e&64|0?o:i)+(e&16|0?j:t)+(e&8|0?l:k)+(e&4|0?n:m)+(e&2|0?q:p)+(e&1|0?c:b)|0;h=(g|0)==0|e>>>0>>0;a=h?g&255:a;g=g+1|0;if((g|0)==16)break;else f=h?e:f}return a|0}function md(a){a=a|0;Yp(a);return}function nd(a){a=a|0;a=Xp(148)|0;c[a>>2]=5;g[a+4>>2]=+Mc(5);c[a+136>>2]=12;c[a+140>>2]=13;c[a+144>>2]=14;return a|0}function od(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;if(!c)return;else{b=0;f=0}while(1){g=a[d+b>>0]|0;a[e+f>>0]=a[13325+((g&255)>>>4&255)>>0]|0;a[e+(f|1)>>0]=a[13325+(g&15)>>0]|0;b=b+1|0;if((b|0)==(c|0))break;else f=f+2|0}return}function pd(b,c,e,f){b=b|0;c=c|0;e=e|0;f=f|0;var g=0;if(!c)return;else b=0;do{g=b<<1;a[f+b>>0]=(d[13341+(d[e+g>>0]|0)>>0]|0)<<4|(d[13341+(d[e+(g|1)>>0]|0)>>0]|0);b=b+1|0}while((b|0)!=(c|0));return}function qd(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;g=Lc(c,4,8)|0;if(!c)b=0;else{b=0;f=0;while(1){h=rd(d+f|0)|0;a[e+b>>0]=(h&255)<<4|(rd(d+(f|8)|0)|0)&255;b=b+1|0;if((b|0)==(c|0))break;else f=f+16|0}b=c<<4}if((b|0)==(g<<3|0))return;else Ha(13843,13597,181,13625)}function rd(a){a=a|0;var b=0,c=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;i=d[a>>0]|0;o=i^255;t=d[a+1>>0]|0;u=t^255;v=d[a+2>>0]|0;j=v^255;k=d[a+3>>0]|0;l=k^255;m=d[a+4>>0]|0;n=m^255;p=d[a+5>>0]|0;q=p^255;r=d[a+6>>0]|0;s=r^255;b=d[a+7>>0]|0;c=b^255;f=0;g=0;a=0;while(1){e=d[13325+g>>0]|0;e=(e&64|0?u:t)+(e&128|0?o:i)+(e&32|0?j:v)+(e&16|0?l:k)+(e&8|0?n:m)+(e&4|0?q:p)+(e&2|0?s:r)+(e&1|0?c:b)|0;h=(g|0)==0|e>>>0>>0;a=h?g&255:a;g=g+1|0;if((g|0)==16)break;else f=h?e:f}return a|0}function sd(a){a=a|0;Yp(a);return}function td(a){a=a|0;var b=0,e=0;if(a>>>0>4095){Qp(13651,55,1,c[2348]|0)|0;kb(1)}b=a>>>8;b=(d[39947+(b&6)>>0]|0)+(d[39947+(a&102)>>0]|0)<<1&2|(d[39947+(b&10)>>0]|0)+(d[39947+(a&170)>>0]|0)&1|(d[39947+(b&1)>>0]|0)+(d[39947+(a&225)>>0]|0)<<2&4|(d[39947]|0)+(d[39947+(a&31)>>0]|0)<<3&8;if((b+-1|0)>>>0>11){b=a&15;e=a>>>1;e=e&112;b=e|b;a=a>>>2;a=a&128;a=b|a;return a|0}e=1<<12-b^a;a=e&15;b=e>>>1;b=b&112;a=b|a;e=e>>>2;e=e&128;e=a|e;return e|0}function ud(a){a=a|0;a=Xp(148)|0;c[a>>2]=6;g[a+4>>2]=+Mc(6);c[a+136>>2]=15;c[a+140>>2]=16;c[a+144>>2]=17;return a|0}function vd(c,e,f,g){c=c|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;j=e&1;h=e-j|0;if((j|0)==(e|0))c=0;else{i=0;c=0;do{l=b[9828+((d[f+i>>0]|0)<<1)>>1]|0;k=b[9828+((d[f+(i|1)>>0]|0)<<1)>>1]|0;a[g+c>>0]=(l&65535)>>>4;a[g+(c+1)>>0]=(k&65535)>>>8&15|(l&65535)<<4;a[g+(c+2)>>0]=k;c=c+3|0;i=i+2|0}while(i>>>0>>0)}if(j){l=b[9828+((d[f+(e+-1)>>0]|0)<<1)>>1]|0;a[g+c>>0]=(l&65535)>>>4;a[g+(c+1)>>0]=(l&65535)<<4;c=c+2|0}if((c|0)==(Kc(6,e)|0))return;else Ha(13707,13770,226,13799)}function wd(b,c,e,f){b=b|0;c=c|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;i=c&1;h=c-i|0;if((i|0)==(c|0)){g=0;b=0}else{g=0;b=0;do{k=d[e+(b+1)>>0]|0;j=k<<8&3840|(d[e+(b+2)>>0]|0);a[f+g>>0]=td(k>>>4|(d[e+b>>0]|0)<<4)|0;a[f+(g|1)>>0]=td(j)|0;b=b+3|0;g=g+2|0}while(g>>>0>>0)}if(i){a[f+g>>0]=td((d[e+(b+1)>>0]|0)>>>4|(d[e+b>>0]|0)<<4)|0;b=b+2|0}if((b|0)==(Kc(6,c)|0))return;else Ha(13707,13770,280,13821)}function xd(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;g=c&1;h=((c*3|0)>>>1)+g|0;if(!c)b=0;else{b=0;f=0;while(1){a[e+b>>0]=yd(d+f|0)|0;b=b+1|0;if((b|0)==(c|0))break;else f=f+12|0}b=c*12|0}if((b+(g<<2)|0)==(h<<3|0))return;else Ha(13843,13770,326,13862)}function yd(b){b=b|0;var c=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;u=b+1|0;w=b+2|0;y=b+3|0;A=b+4|0;C=b+5|0;c=b+6|0;g=b+7|0;i=b+8|0;k=b+9|0;m=b+10|0;o=b+11|0;r=td(((a[u>>0]|0)<0?1024:0)|((a[b>>0]|0)<0?2048:0)|((a[w>>0]|0)<0?512:0)|((a[y>>0]|0)<0?256:0)|((a[A>>0]|0)<0?128:0)|((a[C>>0]|0)<0?64:0)|((a[c>>0]|0)<0?32:0)|((a[g>>0]|0)<0?16:0)|((a[i>>0]|0)<0?8:0)|((a[k>>0]|0)<0?4:0)|((a[m>>0]|0)<0?2:0)|(d[o>>0]|0)>>>7&255)|0;E=e[9828+(r<<1)>>1]|0;s=d[b>>0]|0;t=s^255;u=d[u>>0]|0;v=u^255;w=d[w>>0]|0;x=w^255;y=d[y>>0]|0;z=y^255;A=d[A>>0]|0;B=A^255;C=d[C>>0]|0;D=C^255;c=d[c>>0]|0;f=c^255;g=d[g>>0]|0;h=g^255;i=d[i>>0]|0;j=i^255;k=d[k>>0]|0;l=k^255;m=d[m>>0]|0;n=m^255;o=d[o>>0]|0;p=o^255;E=(E&1024|0?v:u)+(E&2048|0?t:s)+(E&512|0?x:w)+(E&256|0?z:y)+(E&128|0?B:A)+(E&64|0?D:C)+(E&32|0?f:c)+(E&16|0?h:g)+(E&8|0?j:i)+(E&4|0?l:k)+(E&2|0?n:m)+(E&1|0?p:o)|0;F=0;b=r;while(1){G=d[13889+(b*17|0)+F>>0]|0;q=e[9828+(G<<1)>>1]|0;q=(q&1024|0?v:u)+(q&2048|0?t:s)+(q&512|0?x:w)+(q&256|0?z:y)+(q&128|0?B:A)+(q&64|0?D:C)+(q&32|0?f:c)+(q&16|0?h:g)+(q&8|0?j:i)+(q&4|0?l:k)+(q&2|0?n:m)+(q&1|0?p:o)|0;r=q>>>0>>0;b=r?G:b;F=F+1|0;if((F|0)==17)break;else E=r?q:E}return b|0}function zd(a){a=a|0;Yp(a);return}function Ad(a){a=a|0;a=Xp(148)|0;c[a>>2]=1;g[a+4>>2]=+Mc(1);c[a+136>>2]=18;c[a+140>>2]=19;c[a+144>>2]=0;return a|0}function Bd(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;gq(d|0,c|0,b|0)|0;return}function Cd(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;gq(d|0,c|0,b|0)|0;return}function Dd(a){a=a|0;Yp(a);return}function Ed(a){a=a|0;a=Xp(148)|0;c[a>>2]=2;g[a+4>>2]=+Mc(2);c[a+136>>2]=20;c[a+140>>2]=21;c[a+144>>2]=22;return a|0}function Fd(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;fq(d|0,c|0,b|0)|0;fq(d+b|0,c|0,b|0)|0;fq(d+(b<<1)|0,c|0,b|0)|0;return}function Gd(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;if(!c)return;b=c<<1;f=0;do{g=a[d+(f+c)>>0]|0;h=a[d+(f+b)>>0]|0;a[e+f>>0]=(h|g)&a[d+f>>0]|h&g;f=f+1|0}while((f|0)!=(c|0));return}function Hd(b,c,e,f){b=b|0;c=c|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0;if(!c)return;b=c<<1;l=0;do{g=f+l|0;a[g>>0]=0;i=l<<3;j=l+c<<3;k=l+b<<3;h=0;m=0;do{h=h&255|(((d[e+(m+j)>>0]|0)+(d[e+(m+i)>>0]|0)+(d[e+(m+k)>>0]|0)|0)>>>0>383?1<<7-m:0);a[g>>0]=h;m=m+1|0}while((m|0)!=8);l=l+1|0}while((l|0)!=(c|0));return}function Id(a){a=a|0;Yp(a);return}function Jd(a){a=a|0;a=Xp(148)|0;c[a>>2]=3;g[a+4>>2]=+Mc(3);c[a+136>>2]=23;c[a+140>>2]=24;c[a+144>>2]=25;return a|0}function Kd(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;fq(d|0,c|0,b|0)|0;fq(d+b|0,c|0,b|0)|0;fq(d+(b<<1)|0,c|0,b|0)|0;fq(d+(b*3|0)|0,c|0,b|0)|0;fq(d+(b<<2)|0,c|0,b|0)|0;return}function Ld(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;if(!c)return;b=c<<1;f=c*3|0;g=c<<2;h=0;do{l=a[d+h>>0]|0;m=a[d+(h+c)>>0]|0;j=a[d+(h+b)>>0]|0;k=a[d+(h+f)>>0]|0;i=a[d+(h+g)>>0]|0;o=j&l;n=j&m;a[e+h>>0]=(n|o)&k|i&o|k&l&i|i&n|k&m&i|k&j&i|m&l&(k|j|i);h=h+1|0}while((h|0)!=(c|0));return}function Md(b,c,e,f){b=b|0;c=c|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;if(!c)return;b=c<<1;i=c*3|0;j=c<<2;p=0;do{k=f+p|0;a[k>>0]=0;m=p<<3;n=p+c<<3;o=p+b<<3;g=p+i<<3;h=p+j<<3;l=0;q=0;do{l=l&255|(((d[e+(q+n)>>0]|0)+(d[e+(q+m)>>0]|0)+(d[e+(q+o)>>0]|0)+(d[e+(q+g)>>0]|0)+(d[e+(q+h)>>0]|0)|0)>>>0>639?1<<7-q:0);a[k>>0]=l;q=q+1|0}while((q|0)!=8);p=p+1|0}while((p|0)!=(c|0));return}function Nd(a){a=a|0;Yp(a);return}function Od(a){a=a|0;var b=0;b=Xp(148)|0;c[b>>2]=a;g[b+4>>2]=+Mc(a);c[b+136>>2]=26;c[b+140>>2]=27;c[b+144>>2]=0;if((a|0)==27){c[b+64>>2]=8;c[b+68>>2]=285;c[b+72>>2]=1;c[b+76>>2]=1;c[b+80>>2]=32;c[b+88>>2]=255;c[b+92>>2]=223;c[b+8>>2]=0;c[b+96>>2]=0;c[b+120>>2]=Xp(255)|0;c[b+124>>2]=Xp(1020)|0;c[b+128>>2]=Xp(1020)|0;return b|0}else{Qp(18436,37,1,c[2348]|0)|0;kb(1)}return 0}function Pd(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;if(!b){Qp(18241,49,1,c[2348]|0)|0;kb(1)}Qd(a,b);k=a+104|0;l=a+100|0;b=c[l>>2]|0;if(!b){f=0;b=0}else{m=a+112|0;n=a+120|0;o=a+96|0;j=a+108|0;h=b;g=c[k>>2]|0;i=0;f=0;b=0;do{if((i|0)==(h+-1|0))g=g-(c[m>>2]|0)|0;gq(c[n>>2]|0,d+f|0,g|0)|0;h=c[n>>2]|0;Lm(c[o>>2]|0,h,h+(c[k>>2]|0)|0);gq(e+b|0,c[n>>2]|0,c[j>>2]|0)|0;f=g+f|0;b=(c[j>>2]|0)+b|0;i=i+1|0;h=c[l>>2]|0}while(i>>>0>>0)}if((f|0)!=(c[a+8>>2]|0))Ha(18291,18315,131,18336);if((b|0)==(c[a+12>>2]|0))return;else Ha(18350,18315,132,18336)}function Qd(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,k=0,l=0,m=0;k=i;i=i+16|0;if((i|0)>=(j|0))ba();d=k+8|0;e=k;f=a+8|0;if((c[f>>2]|0)==(b|0)){i=k;return}c[f>>2]=b;l=a+92|0;Vp(d,b,c[l>>2]|0);d=((c[d+4>>2]|0)!=0&1)+(c[d>>2]|0)|0;m=a+100|0;c[m>>2]=d;Vp(e,b,d);d=((c[e+4>>2]|0)!=0&1)+(c[e>>2]|0)|0;c[a+104>>2]=d;g=a+80|0;e=c[g>>2]|0;h=d+e|0;c[a+108>>2]=h;b=c[m>>2]|0;m=_(d,b)|0;c[a+112>>2]=(m>>>0)%((c[f>>2]|0)>>>0)|0;d=(c[l>>2]|0)-d|0;f=a+116|0;c[f>>2]=d;c[a+12>>2]=_(b,h)|0;h=a+96|0;b=c[h>>2]|0;if(b){Im(b);e=c[g>>2]|0;d=c[f>>2]|0}c[h>>2]=Em(c[a+64>>2]|0,c[a+68>>2]|0,c[a+72>>2]|0,c[a+76>>2]|0,e,d)|0;i=k;return}function Rd(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;if(!b){Qp(18241,49,1,c[2348]|0)|0;kb(1)}Qd(a,b);p=a+88|0;eq(c[a+124>>2]|0,0,c[p>>2]|0)|0;o=a+128|0;eq(c[o>>2]|0,0,c[p>>2]|0)|0;p=a+132|0;c[p>>2]=0;j=a+100|0;b=c[j>>2]|0;if(!b){f=0;b=0}else{k=a+112|0;l=a+120|0;m=a+108|0;n=a+96|0;h=b;g=c[a+104>>2]|0;i=0;f=0;b=0;do{if((i|0)==(h+-1|0))g=g-(c[k>>2]|0)|0;gq(c[l>>2]|0,d+f|0,c[m>>2]|0)|0;Om(c[n>>2]|0,c[l>>2]|0,c[o>>2]|0,c[p>>2]|0);gq(e+b|0,c[l>>2]|0,g|0)|0;f=(c[m>>2]|0)+f|0;b=g+b|0;i=i+1|0;h=c[j>>2]|0}while(i>>>0>>0)}if((f|0)!=(c[a+12>>2]|0))Ha(18374,18315,185,18398);if((b|0)==(c[a+8>>2]|0))return;else Ha(18412,18315,186,18398)}function Sd(a){a=a|0;var b=0;b=c[a+96>>2]|0;if(b|0)Im(b);Yp(c[a+120>>2]|0);Yp(c[a+124>>2]|0);Yp(c[a+128>>2]|0);Yp(a);return}function Td(b){b=b|0;var c=0;c=a[b>>0]|0;b=a[b+1>>0]|0;return ((d[39691+(b&a[18485]&255)>>0]|0)+(d[39691+(c&a[18484]&255)>>0]|0)&1|((d[39691+(b&a[18483]&255)>>0]|0)+(d[39691+(c&a[18482]&255)>>0]|0)&1|((d[39691+(b&a[18481]&255)>>0]|0)+(d[39691+(c&a[18480]&255)>>0]|0)&1|((d[39691+(b&a[18479]&255)>>0]|0)+(d[39691+(c&a[18478]&255)>>0]|0)&1|((d[39691+(b&a[18477]&255)>>0]|0)+(d[39691+(c&a[18476]&255)>>0]|0)&1|(d[39691+(b&a[18475]&255)>>0]|0)+(d[39691+(c&a[18474]&255)>>0]|0)<<1&2)<<1&6)<<1&14)<<1&30)<<1&62)&255|0}function Ud(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,k=0,l=0,m=0,n=0;m=i;i=i+16|0;if((i|0)>=(j|0))ba();l=m;a[e>>0]=0;a[e+1>>0]=0;a[e+2>>0]=0;h=d[b>>0]|0;k=a[b+1>>0]|0;f=a[b+2>>0]|0;g=0;b=0;do{n=g<<1;b=((1<<5-g&h|0)!=0&1)+(d[39691+(a[18474+n>>0]&k&255)>>0]|0)+(d[39691+(a[18474+(n|1)>>0]&f&255)>>0]|0)&1|b<<1&510;g=g+1|0}while((g|0)!=6);f=b&255;if(!(a[39691+(b&255)>>0]|0)){n=0;i=m;return n|0}do if(f<<24>>24!=(a[18486]|0))if(f<<24>>24!=(a[18487]|0))if(f<<24>>24!=(a[18488]|0))if(f<<24>>24!=(a[18489]|0))if(f<<24>>24!=(a[18490]|0))if(f<<24>>24!=(a[18491]|0))if(f<<24>>24!=(a[18492]|0))if(f<<24>>24!=(a[18493]|0))if(f<<24>>24!=(a[18494]|0))if(f<<24>>24!=(a[18495]|0))if(f<<24>>24!=(a[18496]|0))if(f<<24>>24!=(a[18497]|0))if(f<<24>>24!=(a[18498]|0))if(f<<24>>24!=(a[18499]|0))if(f<<24>>24!=(a[18500]|0))if(f<<24>>24!=(a[18501]|0))if(f<<24>>24!=(a[18502]|0))if(f<<24>>24==(a[18503]|0))b=17;else{if(f<<24>>24==(a[18504]|0)){b=18;break}if(f<<24>>24==(a[18505]|0)){b=19;break}if(f<<24>>24==(a[18506]|0)){b=20;break}if(f<<24>>24==(a[18507]|0)){b=21;break}else b=2;i=m;return b|0}else b=16;else b=15;else b=14;else b=13;else b=12;else b=11;else b=10;else b=9;else b=8;else b=7;else b=6;else b=5;else b=4;else b=3;else b=2;else b=1;else b=0;while(0);Vp(l,b,8);a[e+(2-(c[l>>2]|0))>>0]=1<>2];n=1;i=m;return n|0}function Vd(a){a=a|0;a=Xp(148)|0;c[a>>2]=8;g[a+4>>2]=+Mc(8);c[a+136>>2]=28;c[a+140>>2]=29;c[a+144>>2]=0;return a|0}function Wd(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,k=0,l=0,m=0;l=i;i=i+16|0;if((i|0)>=(j|0))ba();h=l;k=c&1;g=c-k|0;if((k|0)==(c|0)){f=0;b=0}else{f=0;b=0;do{m=d+f|0;a[e+b>>0]=Td(m)|0;a[e+(b+1)>>0]=a[m>>0]|0;a[e+(b+2)>>0]=a[d+(f|1)>>0]|0;b=b+3|0;f=f+2|0}while(f>>>0>>0)}if(k){m=a[d+f>>0]|0;a[h>>0]=m;a[h+1>>0]=0;a[e+b>>0]=Td(h)|0;a[e+(b+1)>>0]=m;f=f|k;b=k+1+b|0}if((b|0)!=(Kc(8,c)|0))Ha(18508,18572,274,18601);if((f|0)==(c|0)){i=l;return}else Ha(19100,18572,275,18601)}function Xd(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;o=i;i=i+16|0;if((i|0)>=(j|0))ba();l=o+3|0;m=o;n=c&1;g=c-n|0;if((n|0)==(c|0)){f=0;b=0}else{h=l+1|0;k=l+2|0;f=0;b=0;do{q=d+b|0;p=e+f|0;a[l>>0]=0;a[l+1>>0]=0;a[l+2>>0]=0;Ud(q,l)|0;a[p>>0]=a[h>>0]^a[q+1>>0];a[p+1>>0]=a[k>>0]^a[q+2>>0];b=b+3|0;f=f+2|0}while(f>>>0>>0)}if(n){a[m>>0]=a[d+b>>0]|0;q=a[d+(b+1)>>0]|0;a[m+1>>0]=q;a[m+2>>0]=0;a[l>>0]=0;a[l+1>>0]=0;a[l+2>>0]=0;Ud(m,l)|0;a[e+f>>0]=a[l+1>>0]^q;f=f|n;b=n+1+b|0}if((b|0)!=(Kc(8,c)|0))Ha(18508,18572,323,18623);if((f|0)==(c|0)){i=o;return}else Ha(19100,18572,324,18623)}function Yd(a){a=a|0;Yp(a);return}function Zd(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;p=i;i=i+16|0;if((i|0)>=(j|0))ba();n=p;a[e>>0]=0;a[e+1>>0]=0;a[e+2>>0]=0;a[e+3>>0]=0;a[e+4>>0]=0;h=d[b>>0]|0;k=a[b+1>>0]|0;l=a[b+2>>0]|0;m=a[b+3>>0]|0;f=a[b+4>>0]|0;g=0;b=0;do{q=g<<2;b=((1<<6-g&h|0)!=0&1)+(d[39691+(a[18645+q>>0]&k&255)>>0]|0)+(d[39691+(a[18645+(q|1)>>0]&l&255)>>0]|0)+(d[39691+(a[18645+(q|2)>>0]&m&255)>>0]|0)+(d[39691+(a[18645+(q|3)>>0]&f&255)>>0]|0)&1|b<<1&510;g=g+1|0}while((g|0)!=7);f=b&255;if(!(a[39691+(b&255)>>0]|0)){q=0;i=p;return q|0}else b=0;while(1){if(f<<24>>24==(a[18673+b>>0]|0))break;b=b+1|0;if(b>>>0>=39){b=2;o=7;break}}if((o|0)==7){i=p;return b|0}Vp(n,b,8);a[e+(4-(c[n>>2]|0))>>0]=1<>2];q=1;i=p;return q|0}function _d(a){a=a|0;a=Xp(148)|0;c[a>>2]=9;g[a+4>>2]=+Mc(9);c[a+136>>2]=30;c[a+140>>2]=31;c[a+144>>2]=0;return a|0}function $d(b,f,g,h){b=b|0;f=f|0;g=g|0;h=h|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;w=i;i=i+16|0;if((i|0)>=(j|0))ba();t=w;u=w+4|0;v=f&3;s=f-v|0;if((v|0)==(f|0)){k=0;b=0}else{k=0;b=0;do{r=g+k|0;n=a[r>>0]|0;o=a[r+1>>0]|0;p=a[r+2>>0]|0;m=a[r+3>>0]|0;q=0;l=0;do{x=q<<2;l=(d[39691+(a[18645+(x|1)>>0]&o&255)>>0]|0)+(d[39691+(a[18645+x>>0]&n&255)>>0]|0)+(d[39691+(a[18645+(x|2)>>0]&p&255)>>0]|0)+(d[39691+(a[18645+(x|3)>>0]&m&255)>>0]|0)&1|l<<1&510;q=q+1|0}while((q|0)!=7);a[h+b>>0]=l;a[h+(b+1)>>0]=a[r>>0]|0;a[h+(b+2)>>0]=a[g+(k|1)>>0]|0;a[h+(b+3)>>0]=a[g+(k|2)>>0]|0;a[h+(b+4)>>0]=a[g+(k|3)>>0]|0;b=b+5|0;k=k+4|0}while(k>>>0>>0)}if(v){c[t>>2]=0;fq(t|0,g+k|0,f&3|0)|0;s=c[t>>2]|0;n=s&255;o=(s&65535)>>>8&255;q=s>>>16&255;r=s>>>24&255;s=s&255;p=(e[t>>1]|0)>>>8&255;m=0;l=0;do{x=m<<2;l=(d[39691+(a[18645+(x|1)>>0]&o&255)>>0]|0)+(d[39691+(a[18645+x>>0]&n&255)>>0]|0)+(d[39691+(a[18645+(x|2)>>0]&q&255)>>0]|0)+(d[39691+(a[18645+(x|3)>>0]&r&255)>>0]|0)&1|l<<1&510;m=m+1|0}while((m|0)!=7);t=l&255;a[u>>0]=t;x=u+1|0;a[x>>0]=s;a[u+2>>0]=p;a[u+3>>0]=q;a[u+4>>0]=r;a[h+b>>0]=t;fq(h+(b+1)|0,x|0,f&3|0)|0;k=k|v;b=v+1+b|0}if((b|0)!=(Kc(9,f)|0))Ha(18712,18776,296,18805);if((k|0)==(f|0)){i=w;return}else Ha(19100,18776,297,18805)}function ae(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;r=i;i=i+16|0;if((i|0)>=(j|0))ba();n=r+9|0;p=r+4|0;o=r;q=c&3;g=c-q|0;if((q|0)==(c|0)){f=0;b=0}else{h=n+1|0;k=n+2|0;l=n+3|0;m=n+4|0;f=0;b=0;do{t=d+b|0;s=e+f|0;a[n>>0]=0;a[n+1>>0]=0;a[n+2>>0]=0;a[n+3>>0]=0;a[n+4>>0]=0;Zd(t,n)|0;a[s>>0]=a[h>>0]^a[t+1>>0];a[s+1>>0]=a[k>>0]^a[t+2>>0];a[s+2>>0]=a[l>>0]^a[t+3>>0];a[s+3>>0]=a[m>>0]^a[t+4>>0];b=b+5|0;f=f+4|0}while(f>>>0>>0)}if(q){a[p>>0]=a[d+b>>0]|0;m=p+1|0;a[m>>0]=0;a[m+1>>0]=0;a[m+2>>0]=0;a[m+3>>0]=0;fq(m|0,d+(b+1)|0,c&3|0)|0;m=a[m>>0]|0;d=a[p+2>>0]|0;s=a[p+3>>0]|0;t=a[p+4>>0]|0;a[n>>0]=0;a[n+1>>0]=0;a[n+2>>0]=0;a[n+3>>0]=0;a[n+4>>0]=0;Zd(p,n)|0;a[o>>0]=a[n+1>>0]^m;a[o+1>>0]=a[n+2>>0]^d;a[o+2>>0]=a[n+3>>0]^s;a[o+3>>0]=a[n+4>>0]^t;fq(e+f|0,o|0,c&3|0)|0;f=f|q;b=q+1+b|0}if((b|0)!=(Kc(9,c)|0))Ha(18712,18776,349,18827);if((f|0)==(c|0)){i=r;return}else Ha(19100,18776,350,18827)}function be(a){a=a|0;Yp(a);return}function ce(b){b=b|0;var c=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;f=a[b>>0]|0;i=a[b+1>>0]|0;j=a[b+2>>0]|0;k=a[b+3>>0]|0;l=a[b+4>>0]|0;g=a[b+5>>0]|0;h=a[b+6>>0]|0;c=a[b+7>>0]|0;e=0;b=0;do{m=e<<3;b=(d[39691+(i&a[18849+(m|1)>>0]&255)>>0]|0)+(d[39691+(f&a[18849+m>>0]&255)>>0]|0)+(d[39691+(j&a[18849+(m|2)>>0]&255)>>0]|0)+(d[39691+(k&a[18849+(m|3)>>0]&255)>>0]|0)+(d[39691+(l&a[18849+(m|4)>>0]&255)>>0]|0)+(d[39691+(g&a[18849+(m|5)>>0]&255)>>0]|0)+(d[39691+(h&a[18849+(m|6)>>0]&255)>>0]|0)+(d[39691+(c&a[18849+(m|7)>>0]&255)>>0]|0)&1|b<<1&510;e=e+1|0}while((e|0)!=8);return b&255|0}function de(b){b=b|0;var c=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;f=d[b>>0]|0;j=a[b+1>>0]|0;k=a[b+2>>0]|0;l=a[b+3>>0]|0;m=a[b+4>>0]|0;g=a[b+5>>0]|0;h=a[b+6>>0]|0;i=a[b+7>>0]|0;c=a[b+8>>0]|0;e=0;b=0;do{n=e<<3;b=((f&1<<7-e|0)!=0&1)+(d[39691+(j&a[18849+n>>0]&255)>>0]|0)+(d[39691+(k&a[18849+(n|1)>>0]&255)>>0]|0)+(d[39691+(l&a[18849+(n|2)>>0]&255)>>0]|0)+(d[39691+(m&a[18849+(n|3)>>0]&255)>>0]|0)+(d[39691+(g&a[18849+(n|4)>>0]&255)>>0]|0)+(d[39691+(h&a[18849+(n|5)>>0]&255)>>0]|0)+(d[39691+(i&a[18849+(n|6)>>0]&255)>>0]|0)+(d[39691+(c&a[18849+(n|7)>>0]&255)>>0]|0)&1|b<<1&510;e=e+1|0}while((e|0)!=8);return b&255|0}function ee(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=i;i=i+32|0;if((i|0)>=(j|0))ba();g=q;p=q+8|0;e=p;f=e+9|0;do{a[e>>0]=0;e=e+1|0}while((e|0)<(f|0));f=de(b)|0;a:do if(!(a[39691+(f&255)>>0]|0)){g=0;h=0;k=0;l=0;m=0;n=0;o=0;e=0;f=0}else{e=0;while(1){if(f<<24>>24==(a[18913+e>>0]|0))break;e=e+1|0;if(e>>>0>=72){g=0;h=0;k=0;l=0;m=0;n=0;o=0;e=0;f=2;break a}}Vp(g,e,8);a[p+(8-(c[g>>2]|0))>>0]=1<>2];g=a[p+1>>0]|0;h=a[p+2>>0]|0;k=a[p+3>>0]|0;l=a[p+4>>0]|0;m=a[p+5>>0]|0;n=a[p+6>>0]|0;o=a[p+7>>0]|0;e=a[p+8>>0]|0;f=1}while(0);a[d>>0]=g^a[b+1>>0];a[d+1>>0]=h^a[b+2>>0];a[d+2>>0]=k^a[b+3>>0];a[d+3>>0]=l^a[b+4>>0];a[d+4>>0]=m^a[b+5>>0];a[d+5>>0]=n^a[b+6>>0];a[d+6>>0]=o^a[b+7>>0];a[d+7>>0]=e^a[b+8>>0];i=q;return f|0}function fe(a){a=a|0;a=Xp(148)|0;c[a>>2]=10;g[a+4>>2]=+Mc(10);c[a+136>>2]=32;c[a+140>>2]=33;c[a+144>>2]=0;return a|0}function ge(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,k=0,l=0,m=0,n=0,o=0;n=i;i=i+16|0;if((i|0)>=(j|0))ba();k=n;m=d&7;h=d-m|0;if((m|0)==(d|0)){g=0;b=0}else{g=0;b=0;do{o=e+g|0;l=f+b|0;a[l>>0]=ce(o)|0;a[l+1>>0]=a[o>>0]|0;a[l+2>>0]=a[o+1>>0]|0;a[l+3>>0]=a[o+2>>0]|0;a[l+4>>0]=a[o+3>>0]|0;a[l+5>>0]=a[o+4>>0]|0;a[l+6>>0]=a[o+5>>0]|0;a[l+7>>0]=a[o+6>>0]|0;a[l+8>>0]=a[o+7>>0]|0;b=b+9|0;g=g+8|0}while(g>>>0>>0)}if(m){h=k;c[h>>2]=0;c[h+4>>2]=0;fq(k|0,e+g|0,d&7|0)|0;a[f+b>>0]=ce(k)|0;h=b+1|0;k=d&7;l=0;do{a[f+(h+l)>>0]=a[e+(l+g)>>0]|0;l=l+1|0}while((l|0)!=(k|0));g=g|m;b=m+1+b|0}if((b|0)!=(Kc(10,d)|0))Ha(18985,19049,286,19078);if((g|0)==(d|0)){i=n;return}else Ha(19100,19049,287,19078)}function he(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,k=0,l=0,m=0,n=0;m=i;i=i+32|0;if((i|0)>=(j|0))ba();k=m+8|0;h=m;l=b&7;g=b-l|0;if((l|0)==(b|0)){f=0;a=0}else{f=0;a=0;do{ee(d+a|0,e+f|0)|0;a=a+9|0;f=f+8|0}while(f>>>0>>0)}if(l){g=h;c[g>>2]=0;c[g+4>>2]=0;g=b&7;n=g+1|0;eq(k+n|0,0,(n>>>0>8?0:8-g|0)|0)|0;fq(k|0,d+a|0,n|0)|0;ee(k,h)|0;fq(e+f|0,h|0,g|0)|0;f=f|l;a=a+(l+1)|0}if((a|0)!=(Kc(10,b)|0))Ha(18985,19049,338,19118);if((f|0)==(b|0)){i=m;return}else Ha(19100,19049,339,19118)}function ie(a){a=a|0;Yp(a);return}function je(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0.0,k=0,l=0,m=0,n=0;n=i;i=i+16|0;if((i|0)>=(j|0))ba();f=n+8|0;e=n;if(a>>>0<2){m=c[2348]|0;c[e>>2]=19140;Kp(m,20350,e)|0;kb(1)}if(d>>>0>>0){m=c[2348]|0;c[f>>2]=19140;Kp(m,20418,f)|0;kb(1)}m=Xp(20)|0;c[m+12>>2]=a;k=m+4|0;c[k>>2]=d;l=m+8|0;f=0;while(1){e=_(f,a)|0;if(e>>>0>>0)f=f+1|0;else break}c[l>>2]=f;c[k>>2]=e;k=Xp(e<<2)|0;c[m>>2]=k;if(!e){d=0;d=ke(a,k,d)|0;a=m+16|0;c[a>>2]=d;i=n;return m|0}else f=0;do{if(f>>>0>>0)h=+g[b+(f<<2)>>2];else h=0.0;g[k+(f<<2)>>2]=h;f=f+1|0}while(f>>>0>>0);d=ke(a,k,e)|0;a=m+16|0;c[a>>2]=d;i=n;return m|0}function ke(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+16|0;if((i|0)>=(j|0))ba();f=p+8|0;e=p;if(!a){o=c[2348]|0;c[e>>2]=19140;Kp(o,20497,e)|0;kb(1)}if(!d){o=c[2348]|0;c[f>>2]=19140;Kp(o,20569,f)|0;kb(1)}n=Xp(28)|0;m=n+12|0;c[m>>2]=a;c[n+4>>2]=d;o=Xp(a<<2)|0;c[n+20>>2]=o;k=(d>>>0)/(a>>>0)|0;l=i;i=i+((1*(k<<2)|0)+15&-16)|0;if((i|0)>=(j|0))ba();d=k+-1|0;if(!k){e=0;do{c[o+(e<<2)>>2]=yk(l,0)|0;e=e+1|0}while(e>>>0>>0);a=n+8|0;c[a>>2]=k;a=lk(k)|0;b=n+16|0;c[b>>2]=a;b=n+24|0;g[b>>2]=1.0;mk(a);i=p;return n|0}else{h=a;e=0}while(1){f=0;do{c[l+(d-f<<2)>>2]=c[b+((_(h,f)|0)+e<<2)>>2];f=f+1|0}while(k>>>0>f>>>0);c[o+(e<<2)>>2]=yk(l,k)|0;e=e+1|0;if(e>>>0>=a>>>0)break;h=c[m>>2]|0}a=n+8|0;c[a>>2]=k;a=lk(k)|0;b=n+16|0;c[b>>2]=a;b=n+24|0;g[b>>2]=1.0;mk(a);i=p;return n|0}function le(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=+e;f=+f;var g=0,h=0,k=0,l=0,m=0,n=0;m=i;i=i+32|0;if((i|0)>=(j|0))ba();l=m+24|0;k=m+16|0;h=m+8|0;g=m;if(b>>>0<2){n=c[2348]|0;c[g>>2]=19140;Kp(n,20637,g)|0;kb(1)}if(!d){n=c[2348]|0;c[h>>2]=19140;Kp(n,20715,h)|0;kb(1)}if(e<0.0|e>1.0){n=c[2348]|0;c[k>>2]=19140;Kp(n,20792,k)|0;kb(1)}if(f<-1.0|f>1.0){n=c[2348]|0;c[l>>2]=19140;Kp(n,20881,l)|0;kb(1)}else{h=_(b<<1,d)|0|1;k=i;i=i+((1*(h<<2)|0)+15&-16)|0;if((i|0)>=(j|0))ba();Ye(a,b,d,e,f,k);g=i;i=i+((1*(h<<2)|0)+15&-16)|0;if((i|0)>=(j|0))ba();fq(g|0,k|0,(_(d,b)|0)<<3|4|0)|0;n=je(b,g,h)|0;i=m;return n|0}return 0}function me(a){a=a|0;var b=0,d=0,e=0,f=0;b=c[a+16>>2]|0;d=b+12|0;e=b+20|0;if(c[d>>2]|0){f=0;do{zk(c[(c[e>>2]|0)+(f<<2)>>2]|0);f=f+1|0}while(f>>>0<(c[d>>2]|0)>>>0)}Yp(c[e>>2]|0);pk(c[b+16>>2]|0);Yp(b);Yp(c[a>>2]|0);Yp(a);return}function ne(a){a=a|0;var b=0,d=0,e=0;b=a+12|0;d=a+20|0;if(c[b>>2]|0){e=0;do{zk(c[(c[d>>2]|0)+(e<<2)>>2]|0);e=e+1|0}while(e>>>0<(c[b>>2]|0)>>>0)}Yp(c[d>>2]|0);pk(c[a+16>>2]|0);Yp(a);return}function oe(a){a=a|0;mk(c[(c[a+16>>2]|0)+16>>2]|0);return}function pe(a){a=a|0;mk(c[a+16>>2]|0);return}function qe(a,b,d){a=a|0;b=+b;d=d|0;var e=0,f=0,h=0,k=0,l=0,m=0,n=0,o=0;n=i;i=i+16|0;if((i|0)>=(j|0))ba();o=n;m=n+8|0;l=a+16|0;ok(c[(c[l>>2]|0)+16>>2]|0,b);f=a+12|0;if(!(c[f>>2]|0)){i=n;return}a=0;while(1){h=c[l>>2]|0;k=d+(a<<2)|0;e=c[h+12>>2]|0;if(e>>>0<=a>>>0){f=4;break}nk(c[h+16>>2]|0,m);Ak(c[(c[h+20>>2]|0)+(a<<2)>>2]|0,c[m>>2]|0,k);g[k>>2]=+g[h+24>>2]*+g[k>>2];a=a+1|0;if(a>>>0>=(c[f>>2]|0)>>>0){f=6;break}}if((f|0)==4){n=c[2348]|0;c[o>>2]=a;c[o+4>>2]=e;Kp(n,20971,o)|0;kb(1)}else if((f|0)==6){i=n;return}}function re(a,b){a=a|0;b=+b;ok(c[a+16>>2]|0,b);return}function se(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,k=0;k=i;i=i+16|0;if((i|0)>=(j|0))ba();h=k;f=k+8|0;e=c[a+12>>2]|0;if(e>>>0>b>>>0){nk(c[a+16>>2]|0,f);Ak(c[(c[a+20>>2]|0)+(b<<2)>>2]|0,c[f>>2]|0,d);g[d>>2]=+g[a+24>>2]*+g[d>>2];i=k;return}else{k=c[2348]|0;c[h>>2]=b;c[h+4>>2]=e;Kp(k,20971,h)|0;kb(1)}}function te(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var g=0,h=0,k=0,l=0,m=0,n=0;m=i;i=i+32|0;if((i|0)>=(j|0))ba();l=m+24|0;k=m+16|0;h=m+8|0;g=m;if(!b){n=c[2348]|0;c[g>>2]=19140;Kp(n,21040,g)|0;kb(1)}if(d>>>0<2){n=c[2348]|0;c[h>>2]=19140;Kp(n,21121,h)|0;kb(1)}if(!e){n=c[2348]|0;c[k>>2]=19140;Kp(n,21203,k)|0;kb(1)}if(f<0.0|f>1.0){n=c[2348]|0;c[l>>2]=19140;Kp(n,21276,l)|0;kb(1)}else{h=_(_(b<<1,d)|0,e)|0|1;k=i;i=i+((1*(h<<2)|0)+15&-16)|0;if((i|0)>=(j|0))ba();Ye(a,_(d,b)|0,e,f,0.0,k);g=i;i=i+((1*(h<<2)|0)+15&-16)|0;if((i|0)>=(j|0))ba();fq(g|0,k|0,(_(_(e,d)|0,b)|0)<<3|4|0)|0;n=ke(b,g,h)|0;i=m;return n|0}return 0}function ue(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var h=0,k=0,l=0,m=0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0.0;s=i;i=i+32|0;if((i|0)>=(j|0))ba();m=s+24|0;l=s+16|0;k=s+8|0;h=s;if(!b){r=c[2348]|0;c[h>>2]=19140;Kp(r,19145,h)|0;kb(1)}if(d>>>0<2){r=c[2348]|0;c[k>>2]=19140;Kp(r,19227,k)|0;kb(1)}if(!e){r=c[2348]|0;c[l>>2]=19140;Kp(r,19310,l)|0;kb(1)}if(f<0.0|f>1.0){r=c[2348]|0;c[m>>2]=19140;Kp(r,19384,m)|0;kb(1)}o=_(_(b<<1,d)|0,e)|0;r=o|1;p=i;i=i+((1*(r<<2)|0)+15&-16)|0;if((i|0)>=(j|0))ba();Ye(a,_(d,b)|0,e,f,0.0,p);q=i;i=i+((1*(r<<2)|0)+15&-16)|0;if((i|0)>=(j|0))ba();a=p+(o<<2)|0;n=+g[p>>2];d=(_(_(e,d)|0,b)|0)<<1|1;h=p+4|0;k=p+(o+-1<<2)|0;l=q+(o<<2)|0;f=0.0;m=0;do{do if(m)if((m|0)==(o|0)){g[l>>2]=n-+g[k>>2];break}else{g[q+(m<<2)>>2]=+g[p+(m+1<<2)>>2]-+g[p+(m+-1<<2)>>2];break}else g[q>>2]=+g[h>>2]-+g[a>>2];while(0);t=+N(+(+g[p+(m<<2)>>2]*+g[q+(m<<2)>>2]));f=t>f?t:f;m=m+1|0}while((m|0)!=(d|0));h=i;i=i+((1*(r<<2)|0)+15&-16)|0;if((i|0)>=(j|0))ba();k=0;do{g[h+(k<<2)>>2]=+g[q+(k<<2)>>2]*.05999999865889549/f;k=k+1|0}while((k|0)!=(d|0));b=ke(b,h,r)|0;i=s;return b|0}function ve(a,b,d,e,f){a=+a;b=b|0;d=+d;e=+e;f=f|0;var h=0,k=0,l=0,m=0,n=0,o=0.0,p=0,q=0;q=i;i=i+48|0;if((i|0)>=(j|0))ba();l=q+32|0;n=q+24|0;m=q+16|0;k=q+8|0;h=q;if(a<=0.0){p=c[2348]|0;c[h>>2]=19140;Kp(p,19470,h)|0;kb(1)}if(!b){p=c[2348]|0;c[k>>2]=19140;Kp(p,19540,k)|0;kb(1)}if(!f){p=c[2348]|0;c[m>>2]=19140;Kp(p,19613,m)|0;kb(1)}if(d<=0.0|d>=.5){p=c[2348]|0;c[n>>2]=19140;Kp(p,19690,n)|0;kb(1)}if(e<=0.0){p=c[2348]|0;c[l>>2]=19140;Kp(p,19751,l)|0;kb(1)}p=Xp(56)|0;g[p+12>>2]=a;g[p+16>>2]=1.0/a;c[p>>2]=b;g[p+8>>2]=d;g[p+4>>2]=e;c[p+44>>2]=f;l=_(b<<1,f)|0;h=l|1;m=i;i=i+((1*(h<<2)|0)+15&-16)|0;if((i|0)>=(j|0))ba();n=i;i=i+((1*(h<<2)|0)+15&-16)|0;if((i|0)>=(j|0))ba();o=+(f>>>0);Xe(h,d/o,e,0.0,m);k=(_(b,f)|0)<<1|1;a=0.0;h=0;do{a=a+ +g[m+(h<<2)>>2];h=h+1|0}while((h|0)!=(k|0));a=o/a;h=0;do{g[n+(h<<2)>>2]=a*+g[m+(h<<2)>>2];h=h+1|0}while((h|0)!=(k|0));f=ke(f,n,l)|0;c[p+48>>2]=f;mk(c[f+16>>2]|0);c[p+52>>2]=1;f=p+20|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;i=q;return p|0}function we(a){a=a|0;var b=0,d=0,e=0,f=0;b=c[a+48>>2]|0;d=b+12|0;e=b+20|0;if(c[d>>2]|0){f=0;do{zk(c[(c[e>>2]|0)+(f<<2)>>2]|0);f=f+1|0}while(f>>>0<(c[d>>2]|0)>>>0)}Yp(c[e>>2]|0);pk(c[b+16>>2]|0);Yp(b);Yp(a);return}function xe(a,b,d,e,f,h,k){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0.0,G=0.0;E=i;i=i+32|0;if((i|0)>=(j|0))ba();A=E+24|0;C=E+16|0;B=E+8|0;z=E;y=E+28|0;D=a+28|0;if(!h){C=a+44|0;d=0;B=0;c[e>>2]=d;c[k>>2]=B;e=c[D>>2]|0;k=c[C>>2]|0;k=e>>>0>>0;k=k&1;i=E;return k|0}q=a+32|0;r=a+48|0;m=a+44|0;s=a+52|0;t=a+36|0;u=a+20|0;v=a+24|0;w=a+40|0;p=a+16|0;n=0;x=0;a:while(1){l=c[D>>2]|0;b:while(1){if(!l)if(+g[q>>2]==0.0){if((n|0)==(d|0)){l=d;a=x;o=25;break a}ok(c[(c[r>>2]|0)+16>>2]|0,+g[b+(n<<2)>>2]);l=c[D>>2]|0;n=n+1|0}else l=0;a=c[m>>2]|0;if(l>>>0>=a>>>0)do{if((n|0)==(d|0)){l=d;a=x;o=25;break a}g[u>>2]=+g[u>>2]+-1.0;g[v>>2]=+g[v>>2]-+(a>>>0);c[D>>2]=l-a;ok(c[(c[r>>2]|0)+16>>2]|0,+g[b+(n<<2)>>2]);n=n+1|0;l=c[D>>2]|0;a=c[m>>2]|0}while(l>>>0>=a>>>0);switch(c[s>>2]|0){case 0:{l=n;o=16;break b}case 1:break;default:{o=24;break a}}o=c[r>>2]|0;a=c[o+12>>2]|0;if(a>>>0<=l>>>0){o=19;break a}nk(c[o+16>>2]|0,y);Ak(c[(c[o+20>>2]|0)+(l<<2)>>2]|0,c[y>>2]|0,t);g[t>>2]=+g[o+24>>2]*+g[t>>2];a=c[D>>2]|0;l=c[m>>2]|0;if((a|0)!=(l+-1|0)){l=a;o=20;break}c[s>>2]=0;c[D>>2]=l}if((o|0)==16){a=c[r>>2]|0;if(!(c[a+12>>2]|0)){o=17;break}nk(c[a+16>>2]|0,y);Ak(c[c[a+20>>2]>>2]|0,c[y>>2]|0,w);F=+g[a+24>>2]*+g[w>>2];g[w>>2]=F;G=+g[q>>2];g[f+(x<<2)>>2]=(1.0-G)*+g[t>>2]+G*F;F=+g[p>>2]+ +g[u>>2];g[u>>2]=F;F=F*+((c[m>>2]|0)>>>0);g[v>>2]=F;o=~~+M(+F);c[D>>2]=o;g[q>>2]=F-+(o|0);c[s>>2]=1}else if((o|0)==20){o=c[r>>2]|0;a=c[o+12>>2]|0;l=l+1|0;if(a>>>0<=l>>>0){o=21;break}nk(c[o+16>>2]|0,y);Ak(c[(c[o+20>>2]|0)+(l<<2)>>2]|0,c[y>>2]|0,w);G=+g[o+24>>2]*+g[w>>2];g[w>>2]=G;F=+g[q>>2];g[f+(x<<2)>>2]=(1.0-F)*+g[t>>2]+F*G;G=+g[p>>2]+ +g[u>>2];g[u>>2]=G;G=G*+((c[m>>2]|0)>>>0);g[v>>2]=G;l=~~+M(+G);c[D>>2]=l;g[q>>2]=G-+(l|0);l=n}a=x+1|0;if(a>>>0>>0){n=l;x=a}else{o=25;break}}if((o|0)==17){E=c[2348]|0;c[z>>2]=0;c[z+4>>2]=0;Kp(E,20971,z)|0;kb(1)}else if((o|0)==19){E=c[2348]|0;c[B>>2]=l;c[B+4>>2]=a;Kp(E,20971,B)|0;kb(1)}else if((o|0)==21){E=c[2348]|0;c[C>>2]=l;c[C+4>>2]=a;Kp(E,20971,C)|0;kb(1)}else if((o|0)==24){E=c[2348]|0;c[A>>2]=19140;Kp(E,19834,A)|0;kb(1)}else if((o|0)==25){c[e>>2]=l;c[k>>2]=a;e=c[D>>2]|0;k=c[m>>2]|0;k=e>>>0>>0;k=k&1;i=E;return k|0}return 0}function ye(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=i;i=i+16|0;if((i|0)>=(j|0))ba();f=h+8|0;e=h;if(!d){g=c[2348]|0;c[e>>2]=19885;Kp(g,19890,e)|0;kb(1)}if(!a){g=c[2348]|0;c[f>>2]=19885;Kp(g,19957,f)|0;kb(1)}g=Xp(20)|0;c[g+4>>2]=d;c[g+8>>2]=a;e=Xp(d<<2)|0;c[g>>2]=e;f=d+-1|0;a=0;do{c[e+(a<<2)>>2]=c[b+(f-a<<2)>>2];a=a+1|0}while(a>>>0>>0);b=qk(d)|0;c[g+12>>2]=b;c[g+16>>2]=vk(e,d)|0;rk(b);i=h;return g|0}function ze(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=+e;f=+f;var g=0,h=0,k=0,l=0,m=0,n=0;m=i;i=i+32|0;if((i|0)>=(j|0))ba();l=m+24|0;k=m+16|0;h=m+8|0;g=m;if(b>>>0<2){n=c[2348]|0;c[g>>2]=19885;Kp(n,20028,g)|0;kb(1)}if(!d){n=c[2348]|0;c[h>>2]=19885;Kp(n,20106,h)|0;kb(1)}if(e<0.0|e>1.0){n=c[2348]|0;c[k>>2]=19885;Kp(n,20179,k)|0;kb(1)}if(f<-1.0|f>1.0){n=c[2348]|0;c[l>>2]=19885;Kp(n,20264,l)|0;kb(1)}else{h=_(b<<1,d)|0|1;k=i;i=i+((1*(h<<2)|0)+15&-16)|0;if((i|0)>=(j|0))ba();Ye(a,b,d,e,f,k);g=i;i=i+((1*(h<<2)|0)+15&-16)|0;if((i|0)>=(j|0))ba();fq(g|0,k|0,(_(d,b)|0)<<3|4|0)|0;n=ye(b,g,h)|0;i=m;return n|0}return 0}function Ae(a){a=a|0;uk(c[a+12>>2]|0);wk(c[a+16>>2]|0);Yp(c[a>>2]|0);Yp(a);return}function Be(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,k=0,l=0,m=0,n=0,o=0,p=0;n=i;i=i+32|0;if((i|0)>=(j|0))ba();f=n+16|0;m=n+8|0;g=n;h=a+8|0;if(!(c[h>>2]|0)){i=n;return}k=a+12|0;l=g+4|0;a=a+16|0;e=0;do{o=c[k>>2]|0;p=c[b+(e<<3)+4>>2]|0;c[g>>2]=c[b+(e<<3)>>2];c[l>>2]=p;c[f>>2]=c[g>>2];c[f+4>>2]=c[g+4>>2];tk(o,f);if(!e){sk(c[k>>2]|0,m);xk(c[a>>2]|0,c[m>>2]|0,d)}e=e+1|0}while(e>>>0<(c[h>>2]|0)>>>0);i=n;return}function Ce(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0.0,k=0,l=0,m=0,n=0;n=i;i=i+16|0;if((i|0)>=(j|0))ba();f=n+8|0;e=n;if(a>>>0<2){m=c[2348]|0;c[e>>2]=19885;Kp(m,20350,e)|0;kb(1)}if(d>>>0>>0){m=c[2348]|0;c[f>>2]=19885;Kp(m,20418,f)|0;kb(1)}m=Xp(20)|0;c[m+12>>2]=a;k=m+4|0;c[k>>2]=d;l=m+8|0;f=0;while(1){e=_(f,a)|0;if(e>>>0>>0)f=f+1|0;else break}c[l>>2]=f;c[k>>2]=e;k=Xp(e<<2)|0;c[m>>2]=k;if(!e){d=0;d=De(a,k,d)|0;a=m+16|0;c[a>>2]=d;i=n;return m|0}else f=0;do{if(f>>>0>>0)h=+g[b+(f<<2)>>2];else h=0.0;g[k+(f<<2)>>2]=h;f=f+1|0}while(f>>>0>>0);d=De(a,k,e)|0;a=m+16|0;c[a>>2]=d;i=n;return m|0}function De(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+16|0;if((i|0)>=(j|0))ba();f=p+8|0;e=p;if(!a){o=c[2348]|0;c[e>>2]=19885;Kp(o,20497,e)|0;kb(1)}if(!d){o=c[2348]|0;c[f>>2]=19885;Kp(o,20569,f)|0;kb(1)}n=Xp(28)|0;m=n+12|0;c[m>>2]=a;c[n+4>>2]=d;o=Xp(a<<2)|0;c[n+20>>2]=o;k=(d>>>0)/(a>>>0)|0;l=i;i=i+((1*(k<<2)|0)+15&-16)|0;if((i|0)>=(j|0))ba();d=k+-1|0;if(!k){e=0;do{c[o+(e<<2)>>2]=vk(l,0)|0;e=e+1|0}while(e>>>0>>0);a=n+8|0;c[a>>2]=k;a=qk(k)|0;b=n+16|0;c[b>>2]=a;b=n+24|0;g[b>>2]=1.0;rk(a);i=p;return n|0}else{h=a;e=0}while(1){f=0;do{c[l+(d-f<<2)>>2]=c[b+((_(h,f)|0)+e<<2)>>2];f=f+1|0}while(k>>>0>f>>>0);c[o+(e<<2)>>2]=vk(l,k)|0;e=e+1|0;if(e>>>0>=a>>>0)break;h=c[m>>2]|0}a=n+8|0;c[a>>2]=k;a=qk(k)|0;b=n+16|0;c[b>>2]=a;b=n+24|0;g[b>>2]=1.0;rk(a);i=p;return n|0}function Ee(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=+e;f=+f;var g=0,h=0,k=0,l=0,m=0,n=0;m=i;i=i+32|0;if((i|0)>=(j|0))ba();l=m+24|0;k=m+16|0;h=m+8|0;g=m;if(b>>>0<2){n=c[2348]|0;c[g>>2]=19885;Kp(n,20637,g)|0;kb(1)}if(!d){n=c[2348]|0;c[h>>2]=19885;Kp(n,20715,h)|0;kb(1)}if(e<0.0|e>1.0){n=c[2348]|0;c[k>>2]=19885;Kp(n,20792,k)|0;kb(1)}if(f<-1.0|f>1.0){n=c[2348]|0;c[l>>2]=19885;Kp(n,20881,l)|0;kb(1)}else{h=_(b<<1,d)|0|1;k=i;i=i+((1*(h<<2)|0)+15&-16)|0;if((i|0)>=(j|0))ba();Ye(a,b,d,e,f,k);g=i;i=i+((1*(h<<2)|0)+15&-16)|0;if((i|0)>=(j|0))ba();fq(g|0,k|0,(_(d,b)|0)<<3|4|0)|0;n=Ce(b,g,h)|0;i=m;return n|0}return 0}function Fe(a){a=a|0;var b=0,d=0,e=0,f=0;b=c[a+16>>2]|0;d=b+12|0;e=b+20|0;if(c[d>>2]|0){f=0;do{wk(c[(c[e>>2]|0)+(f<<2)>>2]|0);f=f+1|0}while(f>>>0<(c[d>>2]|0)>>>0)}Yp(c[e>>2]|0);uk(c[b+16>>2]|0);Yp(b);Yp(c[a>>2]|0);Yp(a);return}function Ge(a){a=a|0;var b=0,d=0,e=0;b=a+12|0;d=a+20|0;if(c[b>>2]|0){e=0;do{wk(c[(c[d>>2]|0)+(e<<2)>>2]|0);e=e+1|0}while(e>>>0<(c[b>>2]|0)>>>0)}Yp(c[d>>2]|0);uk(c[a+16>>2]|0);Yp(a);return}function He(a){a=a|0;rk(c[(c[a+16>>2]|0)+16>>2]|0);return}function Ie(a){a=a|0;rk(c[a+16>>2]|0);return}function Je(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,k=0,l=0,m=0,n=0,o=0.0,p=0.0;m=i;i=i+32|0;if((i|0)>=(j|0))ba();k=m+16|0;n=m;f=m+8|0;l=a+16|0;e=c[b+4>>2]|0;h=c[(c[l>>2]|0)+16>>2]|0;c[f>>2]=c[b>>2];c[f+4>>2]=e;c[k>>2]=c[f>>2];c[k+4>>2]=c[f+4>>2];tk(h,k);h=a+12|0;if(!(c[h>>2]|0)){i=m;return}a=0;while(1){e=c[l>>2]|0;f=d+(a<<3)|0;b=c[e+12>>2]|0;if(b>>>0<=a>>>0){e=4;break}sk(c[e+16>>2]|0,k);xk(c[(c[e+20>>2]|0)+(a<<2)>>2]|0,c[k>>2]|0,f);p=+g[e+24>>2];e=d+(a<<3)+4|0;o=p*+g[e>>2];g[f>>2]=p*+g[f>>2];g[e>>2]=o;a=a+1|0;if(a>>>0>=(c[h>>2]|0)>>>0){e=6;break}}if((e|0)==4){m=c[2348]|0;c[n>>2]=a;c[n+4>>2]=b;Kp(m,20971,n)|0;kb(1)}else if((e|0)==6){i=m;return}}function Ke(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=i;i=i+16|0;if((i|0)>=(j|0))ba();e=d+8|0;f=d;a=c[a+16>>2]|0;g=c[b+4>>2]|0;c[f>>2]=c[b>>2];c[f+4>>2]=g;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];tk(a,e);i=d;return}function Le(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,k=0,l=0.0,m=0.0;k=i;i=i+16|0;if((i|0)>=(j|0))ba();h=k;f=k+8|0;e=c[a+12>>2]|0;if(e>>>0>b>>>0){sk(c[a+16>>2]|0,f);xk(c[(c[a+20>>2]|0)+(b<<2)>>2]|0,c[f>>2]|0,d);m=+g[a+24>>2];h=d+4|0;l=m*+g[h>>2];g[d>>2]=m*+g[d>>2];g[h>>2]=l;i=k;return}else{k=c[2348]|0;c[h>>2]=b;c[h+4>>2]=e;Kp(k,20971,h)|0;kb(1)}}function Me(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var g=0,h=0,k=0,l=0,m=0,n=0;m=i;i=i+32|0;if((i|0)>=(j|0))ba();l=m+24|0;k=m+16|0;h=m+8|0;g=m;if(!b){n=c[2348]|0;c[g>>2]=19885;Kp(n,21040,g)|0;kb(1)}if(d>>>0<2){n=c[2348]|0;c[h>>2]=19885;Kp(n,21121,h)|0;kb(1)}if(!e){n=c[2348]|0;c[k>>2]=19885;Kp(n,21203,k)|0;kb(1)}if(f<0.0|f>1.0){n=c[2348]|0;c[l>>2]=19885;Kp(n,21276,l)|0;kb(1)}else{h=_(_(b<<1,d)|0,e)|0|1;k=i;i=i+((1*(h<<2)|0)+15&-16)|0;if((i|0)>=(j|0))ba();Ye(a,_(d,b)|0,e,f,0.0,k);g=i;i=i+((1*(h<<2)|0)+15&-16)|0;if((i|0)>=(j|0))ba();fq(g|0,k|0,(_(_(e,d)|0,b)|0)<<3|4|0)|0;n=De(b,g,h)|0;i=m;return n|0}return 0}function Ne(a,b){a=a|0;b=+b;g[a+24>>2]=b;return}function Oe(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0,k=0,l=0,m=0.0,n=0,o=0,p=0,q=0;q=i;i=i+16|0;if((i|0)>=(j|0))ba();h=q+8|0;f=q;if(!b){p=c[2348]|0;c[f>>2]=19885;Kp(p,21361,f)|0;kb(1)}if(!e){p=c[2348]|0;c[h>>2]=19885;Kp(p,21422,h)|0;kb(1)}p=Xp(36)|0;c[p+16>>2]=b;l=p+20|0;c[l>>2]=e;o=e>>>0>b>>>0?e:b;n=p+12|0;c[n>>2]=o;c[p+24>>2]=0;k=p+4|0;c[k>>2]=Xp(e<<2)|0;f=Xp(b<<2)|0;c[p>>2]=f;m=+g[d>>2];h=0;do{g[f+(h<<2)>>2]=+g[a+(h<<2)>>2]/m;h=h+1|0}while(h>>>0>>0);e=c[k>>2]|0;f=c[l>>2]|0;h=0;do{g[e+(h<<2)>>2]=+g[d+(h<<2)>>2]/m;h=h+1|0}while(h>>>0>>0);e=Xp(o<<3)|0;c[p+8>>2]=e;if(!o){i=q;return p|0}f=c[n>>2]|0;h=0;do{g[e+(h<<3)>>2]=0.0;g[e+(h<<3)+4>>2]=0.0;h=h+1|0}while(h>>>0>>0);i=q;return p|0}function Pe(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=+h;var k=0,l=0,m=0,n=0,o=0,p=0;p=i;k=d<<((b|1|0)==3&1);o=k&1;n=(c|0)==0;o=((k-o|0)>>>1)+o|0;k=n?o*3|0:k+1|0;l=i;i=i+((1*(k<<2)|0)+15&-16)|0;if((i|0)>=(j|0))ba();m=i;i=i+((1*(k<<2)|0)+15&-16)|0;if((i|0)>=(j|0))ba();Bf(a,b,c,d,e,f,g,h,l,m);b=i;i=i+((1*(k<<2)|0)+15&-16)|0;if((i|0)>=(j|0))ba();c=i;i=i+((1*(k<<2)|0)+15&-16)|0;if((i|0)>=(j|0))ba();if(k|0){d=k<<2;fq(b|0,l|0,d|0)|0;fq(c|0,m|0,d|0)|0}if(n){o=Qe(b,c,o)|0;i=p;return o|0}else{o=Oe(b,k,c,k)|0;i=p;return o|0}return 0}function Qe(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0;t=i;i=i+32|0;if((i|0)>=(j|0))ba();e=t;r=t+16|0;s=t+4|0;if(!d){q=c[2348]|0;c[e>>2]=19885;Kp(q,21485,e)|0;kb(1)}p=Xp(36)|0;c[p+24>>2]=1;c[p+32>>2]=d;q=Xp(d<<2)|0;c[p+28>>2]=q;c[p+12>>2]=d<<1;e=d*12|0;n=Xp(e)|0;c[p>>2]=n;o=Xp(e)|0;c[p+4>>2]=o;fq(n|0,a|0,e|0)|0;fq(o|0,b|0,e|0)|0;e=s+4|0;b=s+8|0;a=r+4|0;f=r+8|0;k=0;do{l=k*3|0;h=n+(l<<2)|0;l=o+(l<<2)|0;c[r>>2]=c[l>>2];c[r+4>>2]=c[l+4>>2];c[r+8>>2]=c[l+8>>2];c[s>>2]=c[h>>2];c[s+4>>2]=c[h+4>>2];c[s+8>>2]=c[h+8>>2];h=Xp(96)|0;u=+g[r>>2];g[h>>2]=+g[s>>2]/u;g[h+4>>2]=+g[e>>2]/u;g[h+8>>2]=+g[b>>2]/u;g[h+12>>2]=u/u;g[h+16>>2]=+g[a>>2]/u;g[h+20>>2]=+g[f>>2]/u;l=h+24|0;m=l+72|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(m|0));c[q+(k<<2)>>2]=h;k=k+1|0}while(k>>>0>>0);i=t;return p|0}function Re(a){a=a|0;var b=0,d=0,e=0;Yp(c[a>>2]|0);Yp(c[a+4>>2]|0);if((c[a+24>>2]|0)!=1){Yp(c[a+8>>2]|0);Yp(a);return}b=a+32|0;d=a+28|0;if(c[b>>2]|0){e=0;do{Yp(c[(c[d>>2]|0)+(e<<2)>>2]|0);e=e+1|0}while(e>>>0<(c[b>>2]|0)>>>0)}Yp(c[d>>2]|0);Yp(a);return}function Se(a){a=a|0;var b=0,d=0,e=0,f=0;if((c[a+24>>2]|0)==1){f=a+32|0;if(!(c[f>>2]|0))return;a=a+28|0;b=0;do{d=(c[(c[a>>2]|0)+(b<<2)>>2]|0)+24|0;e=d+72|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(e|0));b=b+1|0}while(b>>>0<(c[f>>2]|0)>>>0);return}else{d=a+12|0;if(!(c[d>>2]|0))return;a=a+8|0;b=0;do{f=c[a>>2]|0;g[f+(b<<3)>>2]=0.0;g[f+(b<<3)+4>>2]=0.0;b=b+1|0}while(b>>>0<(c[d>>2]|0)>>>0);return}}function Te(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,h=0,i=0,j=0,l=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0,u=0,v=0,w=0,x=0;l=c[b>>2]|0;j=c[b+4>>2]|0;if(c[a+24>>2]|0){i=a+32|0;if(!(c[i>>2]|0)){h=0;b=0}else{f=(c[k>>2]=j,+g[k>>2]);b=a+28|0;h=0;e=(c[k>>2]=l,+g[k>>2]);do{a=c[(c[b>>2]|0)+(h<<2)>>2]|0;x=a+80|0;u=c[x>>2]|0;w=a+84|0;t=c[w>>2]|0;c[a+88>>2]=u;c[a+92>>2]=t;j=a+72|0;v=c[j>>2]|0;l=a+76|0;o=+g[l>>2];c[x>>2]=v;g[w>>2]=o;p=+g[a+16>>2];s=(c[k>>2]=v,+g[k>>2]);q=+g[a+20>>2];r=(c[k>>2]=u,+g[k>>2]);m=(c[k>>2]=t,+g[k>>2]);e=e-s*p-r*q;q=f-o*p-m*q;g[j>>2]=e;g[l>>2]=q;p=+g[a>>2];n=+g[a+4>>2];f=+g[a+8>>2];e=e*p+s*n+r*f;f=q*p+o*n+m*f;h=h+1|0}while(h>>>0<(c[i>>2]|0)>>>0);h=(g[k>>2]=e,c[k>>2]|0);b=(g[k>>2]=f,c[k>>2]|0)}c[d>>2]=h;c[d+4>>2]=b;return}b=c[a+12>>2]|0;h=b+-1|0;if(h|0){i=a+8|0;while(1){w=b+-2|0;b=c[i>>2]|0;x=c[b+(w<<3)+4>>2]|0;c[b+(h<<3)>>2]=c[b+(w<<3)>>2];c[b+(h<<3)+4>>2]=x;b=h+-1|0;if(!b)break;else{x=h;h=b;b=x}}}f=(c[k>>2]=l,+g[k>>2]);e=(c[k>>2]=j,+g[k>>2]);i=c[a+20>>2]|0;if(i>>>0>1){j=c[a+4>>2]|0;h=a+8|0;b=c[h>>2]|0;l=1;do{s=+g[j+(l<<2)>>2];f=f-s*+g[b+(l<<3)>>2];e=e-s*+g[b+(l<<3)+4>>2];l=l+1|0}while((l|0)!=(i|0))}else{b=a+8|0;h=b;b=c[b>>2]|0}g[b>>2]=f;g[b+4>>2]=e;j=c[a+16>>2]|0;if(!j){f=0.0;e=0.0}else{i=c[a>>2]|0;b=c[h>>2]|0;h=0;f=0.0;e=0.0;do{s=+g[i+(h<<2)>>2];f=f+s*+g[b+(h<<3)>>2];e=e+s*+g[b+(h<<3)+4>>2];h=h+1|0}while((h|0)!=(j|0))}g[d>>2]=f;g[d+4>>2]=e;return}function Ue(a,b){a=a|0;b=+b;return Pe(0,0,0,a,b,0.0,.10000000149011612,60.0)|0}function Ve(a){a=+a;var b=0,c=0,d=0;b=i;i=i+16|0;if((i|0)>=(j|0))ba();d=b+8|0;c=b;g[d>>2]=1.0;g[d+4>>2]=-1.0;g[c>>2]=1.0;g[c+4>>2]=a+-1.0;c=Oe(d,2,c,2)|0;i=b;return c|0}function We(a,b){a=+a;b=b|0;var d=0,e=0.0,f=0.0,g=0.0,k=0.0,l=0,m=0,n=0;n=i;i=i+16|0;if((i|0)>=(j|0))ba();m=n+8|0;d=n;f=a*14.260000228881836;e=+(b>>>0);if(a>.5|a<=0.0){b=c[2348]|0;h[d>>3]=a;Kp(b,21629,d)|0;kb(1)}else{g=.009999999776482582;k=200.0;l=0}while(1){a=(k+g)*.5;if(a<=0.0){b=4;break}b=(a+-7.949999809265137)/f>>0>=20){b=6;break}else{g=b?a:g;k=b?k:a}}if((b|0)==4){n=c[2348]|0;h[m>>3]=a;Kp(n,21566,m)|0;kb(1)}else if((b|0)==6){i=n;return +a}return +(0.0)}function Xe(a,b,d,e,f){a=a|0;b=+b;d=+d;e=+e;f=f|0;var k=0,l=0,m=0.0,n=0.0,o=0,p=0;o=i;i=i+16|0;if((i|0)>=(j|0))ba();l=o+8|0;k=o;if(e<-.5|e>.5){p=c[2348]|0;h[k>>3]=e;Kp(p,21694,k)|0;kb(1)}if(b<0.0|b>.5){p=c[2348]|0;h[l>>3]=b;Kp(p,21763,l)|0;kb(1)}if(!a){Qp(21843,71,1,c[2348]|0)|0;kb(1)}d=+N(+d);if(!(d>50.0))if(d>21.0){n=d+-21.0;n=n*.07885999977588654+ +P(+n,.4000000059604645)*.5842}else n=0.0;else n=(d+-8.699999809265137)*.11020000278949738;m=+((a+-1|0)>>>0)*.5;d=b*2.0;k=0;do{b=+Qh(d*(+(k>>>0)-m+e));g[f+(k<<2)>>2]=b*+Uh(k,a,n,e);k=k+1|0}while((k|0)!=(a|0));i=o;return}function Ye(a,b,d,e,f,k){a=a|0;b=b|0;d=d|0;e=+e;f=+f;k=k|0;var l=0.0,m=0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0.0,t=0,u=0.0,v=0.0,w=0.0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;E=i;i=i+80|0;if((i|0)>=(j|0))ba();A=E+16|0;z=E+8|0;m=E;x=E+56|0;y=E+44|0;B=E+32|0;C=E+20|0;t=_(b<<1,d)|0|1;u=+(b>>>0);v=.5/u;w=e/u;n=w*14.260000228881836;o=+(t>>>0);if(w>.5|w<=0.0){F=c[2348]|0;h[m>>3]=w;Kp(F,21629,m)|0;kb(1)}else{p=.009999999776482582;q=200.0;r=0}while(1){l=(p+q)*.5;if(l<=0.0){D=4;break}m=(l+-7.949999809265137)/n>>0>=20){s=l;break}else{p=m?l:p;q=m?q:l}}if((D|0)==4){F=c[2348]|0;h[z>>3]=l;Kp(F,21566,z)|0;kb(1)}g[x>>2]=0.0;w=w*.5;g[x+4>>2]=v-w;g[x+8>>2]=v;g[x+12>>2]=v;g[x+16>>2]=v+w;g[x+20>>2]=.5;g[y>>2]=u;g[y+4>>2]=u*.5;g[y+8>>2]=0.0;c[B>>2]=c[133];c[B+4>>2]=c[134];c[B+8>>2]=c[135];c[C>>2]=0;c[C+4>>2]=0;c[C+8>>2]=0;do switch(a|0){case 1:{Xe(t,v,s,f,k);i=E;return}case 2:{$e(t,3,x,y,B,C,0,k);i=E;return}case 3:{Cf(b,d,e,f,k);i=E;return}case 4:{mf(b,d,e,f,k);i=E;return}case 5:{of(b,d,e,f,k);i=E;return}case 6:{qf(b,d,e,f,k);i=E;return}case 7:{Hf(b,d,e,f,k);i=E;return}case 8:{Df(b,d,e,f,k);i=E;return}case 9:{If(b,d,e,f,k);i=E;return}case 10:{uf(b,d,e,f,k);i=E;return}case 11:{sf(b,d,e,f,k);i=E;return}case 12:{tf(b,d,e,f,k);i=E;return}case 13:{nf(b,d,e,f,k);i=E;return}case 14:{pf(b,d,e,f,k);i=E;return}case 15:{rf(b,d,e,f,k);i=E;return}default:{F=c[2348]|0;c[A>>2]=a;Kp(F,21915,A)|0;kb(1)}}while(0)}function Ze(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=0,j=0.0,k=0,l=0.0,m=0,n=0;n=_(b<<1,c)|0|1;i=0;f=0.0;do{l=+g[a+(i<<2)>>2];f=f+l*l;i=i+1|0}while((i|0)!=(n|0));l=f;m=c<<1;if(!m){l=0.0;h=0.0;j=+(m>>>0);j=h/j;j=+O(+j);g[d>>2]=j;g[e>>2]=l;return}else{k=1;h=0.0;f=0.0}do{i=_(k,b)|0;i=(i|0)>-1?i:0-i|0;if(i>>>0>>0){c=i;j=0.0;do{j=j+ +g[a+(c<<2)>>2]*+g[a+(c-i<<2)>>2];c=c+1|0}while((c|0)!=(n|0))}else j=0.0;j=+N(+(j/l));f=f+j*j;h=(k|0)==1|j>h?j:h;k=k+1|0}while(k>>>0<=m>>>0);l=+(m>>>0);l=f/l;l=+O(+l);g[d>>2]=l;g[e>>2]=h;return}function _e(a){a=a|0;if(dp(a,21988)|0)if(dp(a,21995)|0)if(dp(a,21998)|0)if(dp(a,22003)|0)if(dp(a,22008)|0)if(dp(a,22014)|0)if(dp(a,22023)|0)if(dp(a,22032)|0)if(dp(a,22040)|0)if(dp(a,22046)|0)if(dp(a,22050)|0)if(dp(a,22057)|0)if(dp(a,22064)|0)if(!(dp(a,22070)|0))a=14;else{a=(dp(a,22077)|0)==0;a=a?15:0}else a=13;else a=12;else a=11;else a=10;else a=9;else a=8;else a=7;else a=6;else a=5;else a=4;else a=3;else a=2;else a=1;return a|0}function $e(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;f=af(a,b,c,d,e,f,g)|0;cf(f,h);gf(f);return}function af(a,b,d,e,f,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0.0,p=0,q=0,r=0,s=0,t=0.0;m=b<<1;if(m){k=1;l=0;do{o=+g[d+(l<<2)>>2];k=o<=.5&o>=0.0&1&k;l=l+1|0}while((l|0)!=(m|0));if(m>>>0>1){o=+g[d>>2];l=1;do{t=o;o=+g[d+(l<<2)>>2];k=o>=t&k;l=l+1|0}while((l|0)!=(m|0))}}else k=1;n=(b|0)==0;if(n)l=1;else{m=0;l=1;do{l=+g[f+(m<<2)>>2]>0.0&l;m=m+1|0}while((m|0)!=(b|0))}if(!k){Qp(22087,40,1,c[2348]|0)|0;kb(1)}if(!l){Qp(22128,61,1,c[2348]|0)|0;kb(1)}if(n){Qp(22190,54,1,c[2348]|0)|0;kb(1)}s=Xp(104)|0;c[s>>2]=a;q=a&1;c[s+4>>2]=q;p=(a-q|0)>>>1;c[s+8>>2]=p;q=p+q|0;p=s+12|0;c[p>>2]=q;c[s+28>>2]=j;c[s+88>>2]=Xp((q<<2)+4|0)|0;q=(q<<3)+8|0;c[s+64>>2]=Xp(q)|0;c[s+68>>2]=Xp(q)|0;c[s+72>>2]=Xp(q)|0;q=s+16|0;c[q>>2]=b;r=s+32|0;c[r>>2]=Xp(b<<4)|0;k=b<<3;n=s+36|0;c[n>>2]=Xp(k)|0;j=s+40|0;c[j>>2]=Xp(k)|0;k=Xp(b<<2)|0;m=s+44|0;c[m>>2]=k;if(!i){c[k>>2]=0;k=c[q>>2]|0;if(k>>>0>1){l=1;do{c[(c[m>>2]|0)+(l<<2)>>2]=0;l=l+1|0;k=c[q>>2]|0}while(l>>>0>>0)}}else{c[k>>2]=c[i>>2];k=c[q>>2]|0;if(k>>>0>1){l=1;do{c[(c[m>>2]|0)+(l<<2)>>2]=c[i+(l<<2)>>2];l=l+1|0;k=c[q>>2]|0}while(l>>>0>>0)}}if(k|0){a=c[r>>2]|0;n=c[n>>2]|0;m=c[j>>2]|0;if(!f){l=0;do{f=l<<1;h[a+(f<<3)>>3]=+g[d+(f<<2)>>2];f=f|1;h[a+(f<<3)>>3]=+g[d+(f<<2)>>2];h[n+(l<<3)>>3]=+g[e+(l<<2)>>2];h[m+(l<<3)>>3]=1.0;l=l+1|0}while(l>>>0>>0)}else{l=0;do{i=l<<1;h[a+(i<<3)>>3]=+g[d+(i<<2)>>2];i=i|1;h[a+(i<<3)>>3]=+g[d+(i<<2)>>2];h[n+(l<<3)>>3]=+g[e+(l<<2)>>2];h[m+(l<<3)>>3]=+g[f+(l<<2)>>2];l=l+1|0}while(l>>>0>>0)}}c[s+24>>2]=20;a=s+20|0;c[a>>2]=0;o=.5/+(((c[p>>2]|0)*20|0)>>>0);n=c[q>>2]|0;if(!n){d=0;f=Xp(d)|0;e=s+48|0;c[e>>2]=f;e=Xp(d)|0;f=s+52|0;c[f>>2]=e;f=Xp(d)|0;e=s+56|0;c[e>>2]=f;d=Xp(d)|0;e=s+60|0;c[e>>2]=d;e=s+96|0;c[e>>2]=0;e=s+100|0;c[e>>2]=0;bf(s);return s|0}l=c[r>>2]|0;k=0;m=0;do{e=m<<1;k=(~~((+h[l+((e|1)<<3)>>3]-+h[l+(e<<3)>>3])/o+1.0)>>>0)+k|0;m=m+1|0}while(m>>>0>>0);c[a>>2]=k;d=k<<3;f=Xp(d)|0;e=s+48|0;c[e>>2]=f;e=Xp(d)|0;f=s+52|0;c[f>>2]=e;f=Xp(d)|0;e=s+56|0;c[e>>2]=f;d=Xp(d)|0;e=s+60|0;c[e>>2]=d;e=s+96|0;c[e>>2]=0;e=s+100|0;c[e>>2]=0;bf(s);return s|0}function bf(a){a=a|0;var b=0,d=0,e=0,f=0,g=0.0,k=0.0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0,x=0.0,y=0,z=0,A=0,B=0,C=0,D=0;D=i;i=i+16|0;if((i|0)>=(j|0))ba();A=D;x=.5/+((_(c[a+12>>2]|0,c[a+24>>2]|0)|0)>>>0);y=a+16|0;a:do if(!(c[y>>2]|0)){B=a+28|0;C=0}else{m=a+32|0;n=a+28|0;o=a+48|0;p=a+96|0;q=a+36|0;r=a+52|0;s=a+44|0;t=a+40|0;u=a+56|0;v=a+100|0;z=0;d=0;b:while(1){l=z<<1;f=c[m>>2]|0;g=+h[f+(l<<3)>>3];w=+h[f+((l|1)<<3)>>3];if((z|0)==0?(c[n>>2]|0)!=0:0)g=g>>0;e=(e|0)==0?1:e;f=0;l=d;while(1){k=g+x*+(f>>>0);h[(c[o>>2]|0)+(l<<3)>>3]=k;b=c[p>>2]|0;if(!b){h[(c[r>>2]|0)+(l<<3)>>3]=+h[(c[q>>2]|0)+(z<<3)>>3];b=c[(c[s>>2]|0)+(z<<2)>>2]|0;switch(b|0){case 0:{k=1.0;break}case 1:{k=+X(+(x*(+(f>>>0)*2.0)));break}case 2:{k=x*(+(f>>>0)*2.700000047683716)+1.0;break}default:break b}h[(c[u>>2]|0)+(l<<3)>>3]=k*+h[(c[t>>2]|0)+(z<<3)>>3]}else sb[b&0](k,c[v>>2]|0,(c[r>>2]|0)+(l<<3)|0,(c[u>>2]|0)+(l<<3)|0)|0;d=l+1|0;f=f+1|0;if(f>>>0>=e>>>0){b=l;break}else l=d}l=c[y>>2]|0;h[(c[o>>2]|0)+(b<<3)>>3]=w;z=z+1|0;if(z>>>0>=l>>>0){B=n;C=d;break a}}z=c[2348]|0;c[A>>2]=b;Kp(z,22245,A)|0;kb(1)}while(0);c[a+20>>2]=C;d=(c[a+4>>2]|0)==0;if(!(c[B>>2]|0)){if((C|0)==0|d^1){i=D;return}e=c[a+48>>2]|0;f=c[a+52>>2]|0;b=c[a+56>>2]|0;d=0;do{a=e+(d<<3)|0;x=+Q(+(+h[a>>3]*3.141592653589793));B=f+(d<<3)|0;h[B>>3]=+h[B>>3]/x;x=+Q(+(+h[a>>3]*3.141592653589793));a=b+(d<<3)|0;h[a>>3]=x*+h[a>>3];d=d+1|0}while(d>>>0>>0);i=D;return}b=(C|0)!=0;if(d){if(!b){i=D;return}e=c[a+48>>2]|0;f=c[a+52>>2]|0;b=c[a+56>>2]|0;d=0;do{a=e+(d<<3)|0;x=+R(+(+h[a>>3]*3.141592653589793));B=f+(d<<3)|0;h[B>>3]=+h[B>>3]/x;x=+R(+(+h[a>>3]*3.141592653589793));a=b+(d<<3)|0;h[a>>3]=x*+h[a>>3];d=d+1|0}while(d>>>0>>0);i=D;return}else{if(!b){i=D;return}e=c[a+48>>2]|0;f=c[a+52>>2]|0;b=c[a+56>>2]|0;d=0;do{a=e+(d<<3)|0;x=+R(+(+h[a>>3]*6.283185307179586));B=f+(d<<3)|0;h[B>>3]=+h[B>>3]/x;x=+R(+(+h[a>>3]*6.283185307179586));a=b+(d<<3)|0;h[a>>3]=x*+h[a>>3];d=d+1|0}while(d>>>0>>0);i=D;return}}function cf(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0.0,i=0.0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0,x=0;v=a+12|0;d=c[v>>2]|0;t=a+20|0;u=a+88|0;if((d|0)!=-1){f=c[u>>2]|0;e=0;do{c[f+(e<<2)>>2]=((_((c[t>>2]|0)+-1|0,e)|0)>>>0)/(d>>>0)|0;e=e+1|0;d=c[v>>2]|0}while(e>>>0<(d+1|0)>>>0)}m=a+92|0;n=a+60|0;o=a+48|0;p=a+64|0;q=a+72|0;r=a+68|0;k=a+56|0;l=a+52|0;s=0;while(1){df(a);if(c[t>>2]|0){d=0;do{i=+Q(+(+h[(c[o>>2]|0)+(d<<3)>>3]*6.283185307179586));i=+Lh(c[p>>2]|0,c[q>>2]|0,c[r>>2]|0,i,(c[v>>2]|0)+1|0);h[(c[n>>2]|0)+(d<<3)>>3]=+h[(c[k>>2]|0)+(d<<3)>>3]*(+h[(c[l>>2]|0)+(d<<3)>>3]-i);d=d+1|0}while(d>>>0<(c[t>>2]|0)>>>0)}ef(a);if(!(c[m>>2]|0)){d=12;break}d=c[v>>2]|0;if((d|0)==-1){i=0.0;g=0.0}else{e=c[u>>2]|0;f=c[n>>2]|0;i=0.0;g=0.0;j=0;while(1){w=+N(+(+h[f+(c[e+(j<<2)>>2]<<3)>>3]));x=(j|0)==0;g=x|wi?w:i;if((j|0)==(d|0))break;else j=j+1|0}}s=s+1|0;if(!(s>>>0<40?!((i-g)/i<1.0000000474974513e-03):0)){d=12;break}}if((d|0)==12){ff(a,b);return}}function df(a){a=a|0;var b=0.0,d=0,e=0.0,f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0.0;k=a+12|0;f=(c[k>>2]|0)+1|0;if(!f){f=0;d=c[a+64>>2]|0}else{g=c[a+88>>2]|0;i=c[a+48>>2]|0;d=c[a+64>>2]|0;j=0;do{h[d+(j<<3)>>3]=+Q(+(+h[i+(c[g+(j<<2)>>2]<<3)>>3]*6.283185307179586));j=j+1|0}while(j>>>0>>0)}g=a+68|0;Kh(d,f,c[g>>2]|0);n=c[k>>2]|0;m=(n|0)==-1;if(m){h[a+80>>3]=r;return}d=c[g>>2]|0;f=c[a+88>>2]|0;g=c[a+52>>2]|0;i=c[a+56>>2]|0;j=n+1|0;k=0;e=0.0;b=0.0;do{o=+h[d+(k<<3)>>3];l=c[f+(k<<2)>>2]|0;e=e+o*+h[g+(l<<3)>>3];b=b+(k&1|0?-1.0:1.0)*(o/+h[i+(l<<3)>>3]);k=k+1|0}while(k>>>0>>0);b=e/b;l=a+80|0;h[l>>3]=b;if(m)return;i=c[a+88>>2]|0;j=c[a+52>>2]|0;k=c[a+56>>2]|0;g=c[a+72>>2]|0;f=n+1|0;d=0;while(1){a=c[i+(d<<2)>>2]|0;h[g+(d<<3)>>3]=+h[j+(a<<3)>>3]-+((d<<1&2^2)+-1|0)*b/+h[k+(a<<3)>>3];d=d+1|0;if(d>>>0>=f>>>0)break;b=+h[l>>3]}return}function ef(a){a=a|0;var b=0,d=0,e=0,f=0,g=0.0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0;r=i;i=i+16|0;if((i|0)>=(j|0))ba();n=r;l=c[a+12>>2]|0;m=(c[a+16>>2]|0)+l<<1;q=i;i=i+((1*(m<<2)|0)+15&-16)|0;if((i|0)>=(j|0))ba();c[q>>2]=0;f=(c[a+20>>2]|0)+-1|0;a:do if(f>>>0>1){d=c[a+60>>2]|0;e=1;b=1;while(1){g=+h[d+(e<<3)>>3];if((g>=0.0?+h[d+(e+-1<<3)>>3]<=g:0)?+h[d+(e+1<<3)>>3]<=g:0)p=9;else if((g<0.0?+h[d+(e+-1<<3)>>3]>=g:0)?+h[d+(e+1<<3)>>3]>=g:0)p=9;if((p|0)==9){p=0;if(b>>>0>=m>>>0)break;c[q+(b<<2)>>2]=e;b=b+1|0}e=e+1|0;if(e>>>0>=f>>>0){k=b;break a}}Ha(22307,22324,711,22350)}else k=1;while(0);if(k>>>0>=m>>>0)Ha(22307,22324,725,22350);d=k+1|0;c[q+(k<<2)>>2]=f;o=l+1|0;if(d>>>0>>0){q=c[2348]|0;c[n>>2]=o;c[n+4>>2]=d;Kp(q,22371,n)|0;c[a+92>>2]=0;i=r;return}if(d>>>0>m>>>0)Ha(22472,22324,742,22350);b=d-l+-1|0;if(b|0){n=c[a+60>>2]|0;m=d;l=b;while(1){b:do if(m>>>0>1){e=c[q>>2]|0;f=e;k=1;b=0;e=+h[n+(e<<3)>>3]>0.0&1;while(1){d=c[q+(k<<2)>>2]|0;g=+h[n+(d<<3)>>3];s=+N(+g);f=s<+N(+(+h[n+(f<<3)>>3]));b=f?k:b;if(!e)if(!(g>=0.0)){b=k;break}else e=1;else if(g<0.0)e=0;else{b=k;break}d=k+1|0;if(d>>>0>=m>>>0){p=29;break b}f=c[q+(b<<2)>>2]|0;k=d}s=+N(+(+h[n+(d<<3)>>3]));k=b+-1|0;f=s<+N(+(+h[n+(c[q+(k<<2)>>2]<<3)>>3]));b=f?b:k}else{b=0;p=29}while(0);if((p|0)==29){p=0;if((l|0)==1){s=+N(+(+h[n+(c[q>>2]<<3)>>3]));b=m+-1|0;k=s<+N(+(+h[n+(c[q+(b<<2)>>2]<<3)>>3]));b=k?0:b}}if(b>>>0>>0)do{k=b;b=b+1|0;c[q+(k<<2)>>2]=c[q+(b<<2)>>2]}while((b|0)!=(m|0));l=l+-1|0;if(!l)break;else m=m+-1|0}}f=a+92|0;c[f>>2]=0;b=a+88|0;if(!o){d=0;b=c[b>>2]|0}else{b=c[b>>2]|0;d=0;e=0;do{d=((c[b+(e<<2)>>2]|0)!=(c[q+(e<<2)>>2]|0)&1)+d|0;c[f>>2]=d;e=e+1|0}while(e>>>0>>0);d=o<<2}gq(b|0,q|0,d|0)|0;i=r;return}function ff(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0,k=0,l=0.0,m=0.0,n=0.0,o=0.0,p=0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;z=i;df(a);x=a+12|0;k=c[x>>2]|0;w=a+4|0;f=c[w>>2]|0;v=k-f|0;e=v+1|0;y=i;i=i+((1*(e<<3)|0)+15&-16)|0;if((i|0)>=(j|0))ba();a:do if(!e)e=c[a+28>>2]|0;else{t=a+64|0;u=a+72|0;r=a+68|0;s=a+28|0;p=k+1-f|0;f=0;while(1){d=+(f>>>0);l=+Q(+(d/+((c[a>>2]|0)>>>0)*6.283185307179586));l=+Lh(c[t>>2]|0,c[u>>2]|0,c[r>>2]|0,l,k+1|0);e=c[s>>2]|0;if((e|0)==0?(c[w>>2]|0)==0:0)d=+Q(+(d*3.141592653589793/+((c[a>>2]|0)>>>0)));else d=1.0;h[y+(f<<3)>>3]=l*d;f=f+1|0;if((f|0)==(p|0))break a;k=c[x>>2]|0}}while(0);if(e|0)switch(c[w>>2]|0){case 1:{Qp(22490,73,1,c[2348]|0)|0;i=z;return}case 0:{Qp(22490,73,1,c[2348]|0)|0;i=z;return}default:{i=z;return}}p=c[a>>2]|0;if(!p){i=z;return}q=+h[y>>3];o=+(v>>>0);m=+((1-(c[w>>2]|0)|0)>>>0)*.5;e=c[x>>2]|0;n=+(p>>>0);if(e>>>0>1)f=0;else{d=q/n;e=0;do{g[b+(e<<2)>>2]=d;e=e+1|0}while(e>>>0

    >>0);i=z;return}while(1){l=(+(f>>>0)-o+m)/n*6.283185307179586;k=1;d=q;do{d=d+ +h[y+(k<<3)>>3]*2.0*+Q(+(l*+(k>>>0)));k=k+1|0}while(k>>>0>>0);g[b+(f<<2)>>2]=d/n;f=f+1|0;if(f>>>0>=p>>>0)break;e=c[x>>2]|0}i=z;return}function gf(a){a=a|0;Yp(c[a+88>>2]|0);Yp(c[a+64>>2]|0);Yp(c[a+68>>2]|0);Yp(c[a+72>>2]|0);Yp(c[a+48>>2]|0);Yp(c[a+52>>2]|0);Yp(c[a+56>>2]|0);Yp(c[a+60>>2]|0);Yp(c[a+32>>2]|0);Yp(c[a+36>>2]|0);Yp(c[a+40>>2]|0);Yp(c[a+44>>2]|0);Yp(a);return}function hf(a,b,d,e,f,h,k){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;h=+h;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0;q=i;if(!d){Qp(22564,58,1,c[2348]|0)|0;kb(1)}if(!e){Qp(22623,58,1,c[2348]|0)|0;kb(1)}if(f<0.0|f>1.0){Qp(22682,55,1,c[2348]|0)|0;kb(1)}p=_(d<<1,e)|0|1;l=i;i=i+((1*(p<<2)|0)+15&-16)|0;if((i|0)>=(j|0))ba();m=i;i=i+((1*(p<<3)|0)+15&-16)|0;if((i|0)>=(j|0))ba();o=i;i=i+((1*(p<<3)|0)+15&-16)|0;if((i|0)>=(j|0))ba();switch(a|0){case 4:{jf(d,e,f,l);break}case 5:{kf(d,e,f,l);break}case 6:{lf(d,e,f,l);break}default:{Qp(22784,65,1,c[2348]|0)|0;kb(1)}}a=_(e,d)|0;n=a<<1|1;if(!b){e=0;do{c[m+(e<<3)>>2]=c[l+(e<<2)>>2];g[m+(e<<3)+4>>2]=0.0;e=e+1|0}while((e|0)!=(n|0))}else{e=0;do{g[m+(e<<3)>>2]=+O(+(+g[l+(e<<2)>>2]));g[m+(e<<3)+4>>2]=0.0;e=e+1|0}while((e|0)!=(n|0))}fl(p,m,o,-1,0);a=a+1|0;h=+(d>>>0);f=+(p>>>0);e=0;do{g[k+(e<<2)>>2]=h*+g[o+((((a+e|0)>>>0)%(p>>>0)|0)<<3)>>2]/f;e=e+1|0}while((e|0)!=(n|0));i=q;return}function jf(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;var e=0.0,f=0.0,h=0.0,i=0.0,j=0.0,k=0.0,l=0.0;h=1.0-c;j=+(a>>>0);k=h*.5/j;l=.5/j;i=c+1.0;j=i*.5/j;e=.6931471824645996/(l*c);f=+((_(a<<1,b)|0|1)>>>0);h=l*h;i=l*i;a=(_(b,a)|0)<<1|1;b=0;do{c=+(b>>>0)/f;c=+N(+(c>.5?c+-1.0:c));do if(!(ck&c>2]=0.0;break}if(c>2]=+X(+(e*(h-c)));break}else{g[d+(b<<2)>>2]=1.0-+X(+(e*(c-i)));break}}else g[d+(b<<2)>>2]=1.0;while(0);b=b+1|0}while((b|0)!=(a|0));return}function kf(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;var e=0.0,f=0.0,h=0.0,i=0.0,j=0.0,k=0.0,l=0.0;h=1.0-c;j=+(a>>>0);k=h*.5/j;l=.5/j;i=c+1.0;j=i*.5/j;e=1.316957950592041/(l*c);f=+((_(a<<1,b)|0|1)>>>0);h=l*h;i=l*i;a=(_(b,a)|0)<<1|1;b=0;do{c=+(b>>>0)/f;c=+N(+(c>.5?c+-1.0:c));do if(!(ck&c>2]=0.0;break}if(c>2]=1.0/+Eo(e*(c-h));break}else{g[d+(b<<2)>>2]=1.0-1.0/+Eo(e*(i-c));break}}else g[d+(b<<2)>>2]=1.0;while(0);b=b+1|0}while((b|0)!=(a|0));return}function lf(a,b,d,e){a=a|0;b=b|0;d=+d;e=e|0;var f=0.0,h=0.0,i=0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0;j=1.0-d;k=+(a>>>0);n=j*.5/k;o=.5/k;h=d+1.0;k=h*.5/k;l=1.0/(o*(d*2.0));m=+((_(a<<1,b)|0|1)>>>0);f=l/(1.316957950592041/(o*d));h=o*h;i=c[2348]|0;j=o*j;a=(_(b,a)|0)<<1|1;b=0;do{d=+(b>>>0)/m;d=+N(+(d>.5?d+-1.0:d));do if(!(dn&d>2]=0.0;break}if(d1.0){Qp(22738,45,1,i)|0;d=0.0}else{d=1.0/d;d=+Y(+(d+ +O(+(d+-1.0))*+O(+(d+1.0))))}g[e+(b<<2)>>2]=1.0-f*d;break}else{d=l*(d-j);if(d<=0.0|d>1.0){Qp(22738,45,1,i)|0;d=0.0}else{d=1.0/d;d=+Y(+(d+ +O(+(d+-1.0))*+O(+(d+1.0))))}g[e+(b<<2)>>2]=f*d;break}}else g[e+(b<<2)>>2]=1.0;while(0);b=b+1|0}while((b|0)!=(a|0));return}function mf(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=+d;e=e|0;hf(4,0,a,b,c,0.0,e);return}function nf(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=+d;e=e|0;hf(4,1,a,b,c,0.0,e);return}function of(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=+d;e=e|0;hf(5,0,a,b,c,0.0,e);return}function pf(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=+d;e=e|0;hf(5,1,a,b,c,0.0,e);return}function qf(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=+d;e=e|0;hf(6,0,a,b,c,0.0,e);return}function rf(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=+d;e=e|0;hf(6,1,a,b,c,0.0,e);return}function sf(a,b,d,e,f){a=a|0;b=b|0;d=+d;e=+e;f=f|0;var h=0.0,i=0.0,j=0.0,k=0.0,l=0;if(!a){Qp(22850,56,1,c[2348]|0)|0;kb(1)}if(!b){Qp(22907,56,1,c[2348]|0)|0;kb(1)}if(d<0.0|d>1.0){Qp(22964,53,1,c[2348]|0)|0;kb(1)}i=+(a>>>0);h=+(b>>>0);d=d*6.283185307179586;b=(_(b,a)|0)<<1|1;a=0;do{j=+(a>>>0)/i-h+e;k=+Ph(d*(j+-.5)*1.2011224031448364);g[f+(a<<2)>>2]=k-+Ph(d*(j+.5)*1.2011224031448364);a=a+1|0}while((a|0)!=(b|0));d=0.0;a=0;do{d=d+ +g[f+(a<<2)>>2];a=a+1|0}while((a|0)!=(b|0));d=3.141592653589793/(d*2.0);a=0;do{l=f+(a<<2)|0;g[l>>2]=d*+g[l>>2];a=a+1|0}while((a|0)!=(b|0));a=0;do{l=f+(a<<2)|0;g[l>>2]=i*+g[l>>2];a=a+1|0}while((a|0)!=(b|0));return}function tf(a,b,d,e,f){a=a|0;b=b|0;d=+d;e=+e;f=f|0;var h=0,k=0.0,l=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0.0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0.0,F=0,G=0;F=i;if(!a){Qp(23018,56,1,c[2348]|0)|0;kb(1)}if(!b){Qp(23075,56,1,c[2348]|0)|0;kb(1)}if(d<0.0|d>1.0){Qp(23132,53,1,c[2348]|0)|0;kb(1)}C=_(a<<1,b)|0|1;h=i;i=i+((1*(C<<2)|0)+15&-16)|0;if((i|0)>=(j|0))ba();D=i;i=i+((1*(C<<2)|0)+15&-16)|0;if((i|0)>=(j|0))ba();sf(a,b,d,0.0,h);n=i;i=i+((1*(C<<2)|0)+15&-16)|0;if((i|0)>=(j|0))ba();o=i;i=i+((1*(C<<2)|0)+15&-16)|0;if((i|0)>=(j|0))ba();p=i;i=i+((1*(C<<3)|0)+15&-16)|0;if((i|0)>=(j|0))ba();q=i;i=i+((1*(C<<3)|0)+15&-16)|0;if((i|0)>=(j|0))ba();r=i;i=i+((1*(C<<3)|0)+15&-16)|0;if((i|0)>=(j|0))ba();B=i;i=i+((1*(C<<3)|0)+15&-16)|0;if((i|0)>=(j|0))ba();w=i;i=i+((1*(C<<3)|0)+15&-16)|0;if((i|0)>=(j|0))ba();x=i;i=i+((1*(C<<3)|0)+15&-16)|0;if((i|0)>=(j|0))ba();y=i;i=i+((1*(C<<3)|0)+15&-16)|0;if((i|0)>=(j|0))ba();z=i;i=i+((1*(C<<3)|0)+15&-16)|0;if((i|0)>=(j|0))ba();Ye(1,a,b,d,0.0,n);E=+(a>>>0);Xe(C,(d*.1+.699999988079071)/E,60.0,0.0,o);v=_(b,a)|0;A=v<<1|1;b=0;do{G=((b+v|0)>>>0)%(C>>>0)|0;c[q+(b<<3)>>2]=c[n+(G<<2)>>2];g[q+(b<<3)+4>>2]=0.0;c[r+(b<<3)>>2]=c[o+(G<<2)>>2];g[r+(b<<3)+4>>2]=0.0;c[p+(b<<3)>>2]=c[h+(G<<2)>>2];g[p+(b<<3)+4>>2]=0.0;b=b+1|0}while((b|0)!=(A|0));fl(C,q,x,1,0);fl(C,r,y,1,0);fl(C,p,w,1,0);t=+g[x>>2];s=+g[y>>2];m=0.0;l=0.0;k=0.0;b=0;while(1){d=+g[w+(b<<3)>>2];if(b){k=d>2];l=e>2];if(e>2];d=e;b=0;while(1){t=(d-m)/e;g[z+(b<<3)>>2]=(+g[x+(b<<3)>>2]-l+1.0000000474974513e-03)/(+g[w+(b<<3)>>2]-k+1.0000000474974513e-03)*t;g[z+(b<<3)+4>>2]=t*0.0;b=b+1|0;if((b|0)==(A|0))break;d=+g[y+(b<<3)>>2]}fl(C,z,B,-1,0);h=v+1|0;e=+((_(C,a)|0)>>>0);b=0;do{g[D+(b<<2)>>2]=+g[B+((((h+b|0)>>>0)%(C>>>0)|0)<<3)>>2]/e;b=b+1|0}while((b|0)!=(A|0));b=0;do{g[f+(b<<2)>>2]=E*(E*+g[D+(b<<2)>>2]);b=b+1|0}while((b|0)!=(A|0));i=F;return}function uf(a,b,d,e,f){a=a|0;b=b|0;d=+d;e=+e;f=f|0;var h=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0.0;v=i;i=i+80|0;if((i|0)>=(j|0))ba();n=v+48|0;o=v+32|0;t=v+20|0;u=v+8|0;p=v+4|0;q=v;if(a>>>0<2){Qp(23186,53,1,c[2348]|0)|0;kb(1)}if(!b){Qp(23240,53,1,c[2348]|0)|0;kb(1)}if(d<0.0|d>1.0){Qp(23294,50,1,c[2348]|0)|0;kb(1)}h=a<<1;m=_(h,b)|0|1;w=1.0/+(h>>>0);e=w;r=d;g[n>>2]=0.0;h=n+4|0;g[h>>2]=e*(1.0-r);g[n+8>>2]=w;g[n+12>>2]=w;g[n+16>>2]=e*(r+1.0);g[n+20>>2]=.5;g[o>>2]=1.0;g[o+4>>2]=.7071067690849304;g[o+8>>2]=0.0;c[t>>2]=c[133];c[t+4>>2]=c[134];c[t+8>>2]=c[135];c[u>>2]=c[136];c[u+4>>2]=c[137];c[u+8>>2]=c[138];k=i;i=i+((1*(m<<2)|0)+15&-16)|0;if((i|0)>=(j|0))ba();$e(m,3,n,o,t,u,0,k);l=m<<2;fq(f|0,k|0,l|0)|0;Ze(k,a,b,q,p);r=+g[q>>2];s=0;do{g[h>>2]=e*(1.0-+(s>>>0)*d/100.0);$e(m,3,n,o,t,u,0,k);Ze(k,a,b,q,p);w=r;r=+g[q>>2];if(r>w)break;fq(f|0,k|0,l|0)|0;s=s+1|0}while(s>>>0<100);k=(_(b,a)|0)<<1|1;e=0.0;h=0;do{w=+g[f+(h<<2)>>2];e=e+w*w;h=h+1|0}while((h|0)!=(k|0));e=+O(+(+(a>>>0)/e));h=0;do{a=f+(h<<2)|0;g[a>>2]=e*+g[a>>2];h=h+1|0}while((h|0)!=(k|0));i=v;return}function vf(b,d,e,f){b=b|0;d=d|0;e=+e;f=f|0;var h=0,k=0,l=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0.0,v=0,w=0.0,x=0,y=0,z=0,A=0,B=0;A=i;if(e<0.0){Qp(23345,53,1,c[2348]|0)|0;kb(1)}z=i;i=i+((1*d|0)+15&-16)|0;if((i|0)>=(j|0))ba();eq(z|0,0,d|0)|0;y=(d|0)==0;if(y){b=0;wf(f,d,b);i=A;return}else{x=0;k=0;h=0}do{p=z+x|0;a:do if((a[p>>0]|0)==0?(v=b+(x<<3)|0,w=+g[b+(x<<3)+4>>2],!(+N(+w)>0]|0)==0):0)?(r=b+(l<<3)|0,s=b+(l<<3)+4|0,t=+g[s>>2],!(+N(+t)>2],+N(+(u-+g[r>>2]))>>0>=d>>>0)break a}B=k+1|0;g[f+(k<<3)>>2]=m;g[f+(k<<3)+4>>2]=w;o=c[o>>2]|0;c[f+(B<<3)>>2]=c[n>>2];c[f+(B<<3)+4>>2]=o;a[p>>0]=1;a[l>>0]=1;k=k+2|0;h=h+1|0}while(0);x=x+1|0}while((x|0)!=(d|0));if(k>>>0>d>>>0)Ha(23399,23407,102,23431);if(y){B=h;wf(f,d,B);i=A;return}n=c[2348]|0;o=0;do{l=z+o|0;do if(!(a[l>>0]|0)){m=+g[b+(o<<3)+4>>2];if(m>e){Qp(23447,61,1,n)|0;break}else{c[f+(k<<3)>>2]=c[b+(o<<3)>>2];g[f+(k<<3)+4>>2]=m;a[l>>0]=1;k=k+1|0;break}}while(0);o=o+1|0}while((o|0)!=(d|0));wf(f,d,h);i=A;return}function wf(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,k=0.0,l=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=i;i=i+48|0;if((i|0)>=(j|0))ba();e=x+32|0;f=x+24|0;h=x+16|0;o=x+8|0;p=x;q=(d|0)==0;if(!q){r=p+4|0;s=o+4|0;t=h+4|0;u=f+4|0;w=0;do{v=w<<1;l=a+(v<<3)|0;n=a+(v<<3)+4|0;m=+g[n>>2];k=+g[l>>2];if(!(m<0.0)){g[h>>2]=k;g[t>>2]=m;c[e>>2]=c[h>>2];c[e+4>>2]=c[h+4>>2];Ko(f,e);k=+g[f>>2];m=+g[u>>2]}g[l>>2]=k;g[n>>2]=m;g[p>>2]=k;g[r>>2]=m;c[e>>2]=c[p>>2];c[e+4>>2]=c[p+4>>2];Ko(o,e);n=c[s>>2]|0;v=v|1;c[a+(v<<3)>>2]=c[o>>2];c[a+(v<<3)+4>>2]=n;w=w+1|0}while((w|0)!=(d|0));if(!q){q=d+-1|0;o=0;do{if(q>>>0>o>>>0){e=d;p=q;while(1){e=e<<1;f=e+-4|0;h=a+(f<<3)|0;k=+g[h>>2];l=p<<1;n=a+(l<<3)|0;m=+g[n>>2];if(k>m){v=a+(f<<3)+4|0;t=c[v>>2]|0;s=a+(l<<3)+4|0;w=c[s>>2]|0;g[h>>2]=m;c[v>>2]=w;g[n>>2]=k;c[s>>2]=t;s=e+-3|0;n=a+(s<<3)|0;t=c[n>>2]|0;s=a+(s<<3)+4|0;v=c[s>>2]|0;w=l|1;u=a+(w<<3)|0;w=a+(w<<3)+4|0;r=c[w>>2]|0;c[n>>2]=c[u>>2];c[s>>2]=r;c[u>>2]=t;c[w>>2]=v}e=p+-1|0;if(e>>>0>o>>>0){w=p;p=e;e=w}else break}}o=o+1|0}while((o|0)!=(d|0))}}e=d<<1;if(e>>>0>=b>>>0){i=x;return}o=b+-1|0;do{if(o>>>0>e>>>0){f=b;n=o;while(1){f=f+-2|0;h=a+(f<<3)|0;k=+g[h>>2];l=a+(n<<3)|0;m=+g[l>>2];if(k>m){v=a+(f<<3)+4|0;w=c[v>>2]|0;d=a+(n<<3)+4|0;u=c[d>>2]|0;g[h>>2]=m;c[v>>2]=u;g[l>>2]=k;c[d>>2]=w}f=n+-1|0;if(f>>>0>e>>>0){d=n;n=f;f=d}else break}}e=e+1|0}while((e|0)!=(b|0));i=x;return}function xf(a,b,c,d,e,f,k,l,m){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;k=k|0;l=l|0;m=m|0;var n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;B=i;i=i+64|0;if((i|0)>=(j|0))ba();x=B+48|0;y=B+32|0;z=B+16|0;A=B;o=+g[e>>2];n=+g[e+4>>2];if(!d){s=o;f=n;k=m+4|0;g[m>>2]=s;g[k>>2]=f;i=B;return}v=x+8|0;w=y+8|0;t=z+8|0;u=A+8|0;e=0;do{if(e>>>0>>0){q=+g[a+(e<<3)>>2]*f;p=+g[a+(e<<3)+4>>2]*f;Zn(x,q+1.0,p,1.0-q,-p);p=+h[v>>3];q=+h[x>>3]}else{p=0.0;q=-1.0}D=k+(e<<3)|0;g[D>>2]=q;C=k+(e<<3)+4|0;g[C>>2]=p;r=+g[c+(e<<3)>>2]*f;s=+g[c+(e<<3)+4>>2]*f;Zn(y,r+1.0,s,1.0-r,-s);s=+h[y>>3];r=+h[w>>3];g[l+(e<<3)>>2]=s;g[l+(e<<3)+4>>2]=r;Zn(z,1.0-s,-r,1.0-+g[D>>2],-+g[C>>2]);r=+h[z>>3];s=+h[t>>3];q=o;p=n;o=q*r-p*s;n=p*r+q*s;if((o!=o|0.0!=0.0)&(n!=n|0.0!=0.0)){$n(A,q,p,r,s);o=+h[A>>3];n=+h[u>>3]}e=e+1|0}while((e|0)!=(d|0));D=m+4|0;g[m>>2]=o;g[D>>2]=n;i=B;return}function yf(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0.0;r=i;i=i+16|0;if((i|0)>=(j|0))ba();p=r;q=i;i=i+((1*(d+1<<3)|0)+15&-16)|0;if((i|0)>=(j|0))ba();Oh(b,d,q);b=0;do{c[h+(b<<2)>>2]=c[q+(d-b<<3)>>2];b=b+1|0}while(b>>>0<=d>>>0);Oh(a,d,q);o=+g[e>>2];n=+g[e+4>>2];b=0;do{e=d-b|0;l=+g[q+(e<<3)>>2];m=+g[q+(e<<3)+4>>2];k=l*o-m*n;s=m*o+l*n;if((k!=k|0.0!=0.0)&(s!=s|0.0!=0.0)){ao(p,l,m,o,n);k=+g[p>>2]}g[f+(b<<2)>>2]=k;b=b+1|0}while(b>>>0<=d>>>0);i=r;return}function zf(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var h=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0.0;C=i;i=i+16|0;if((i|0)>=(j|0))ba();y=C+8|0;z=C;B=i;i=i+((1*(c<<3)|0)+15&-16)|0;if((i|0)>=(j|0))ba();vf(a,c,9.999999974752427e-07,B);A=i;i=i+((1*(c<<3)|0)+15&-16)|0;if((i|0)>=(j|0))ba();vf(b,c,9.999999974752427e-07,A);w=c&1;x=(c-w|0)>>>1;if(!x)a=0;else{u=c>>>1;v=0;do{o=v<<1;k=+g[A+(o<<3)>>2];l=+g[A+(o<<3)+4>>2];b=o|1;D=+g[A+(b<<3)>>2];m=+g[A+(b<<3)+4>>2];n=-D;p=+g[B+(o<<3)>>2];q=+g[B+(o<<3)+4>>2];r=+g[B+(b<<3)>>2];s=+g[B+(b<<3)+4>>2];t=-r;b=v*3|0;g[f+(b<<2)>>2]=1.0;o=b+1|0;g[f+(o<<2)>>2]=n-k;h=k*D-l*m;D=l*D+k*m;if((h!=h|0.0!=0.0)&(D!=D|0.0!=0.0)){ao(y,-k,-l,n,-m);h=+g[y>>2]}a=b+2|0;g[f+(a<<2)>>2]=h;g[e+(b<<2)>>2]=1.0;g[e+(o<<2)>>2]=t-p;h=p*r-q*s;D=q*r+p*s;if((h!=h|0.0!=0.0)&(D!=D|0.0!=0.0)){ao(z,-p,-q,t,-s);h=+g[z>>2]}g[e+(a<<2)>>2]=h;v=v+1|0}while((v|0)!=(u|0));a=x*3|0}if(w|0){z=c+-1|0;t=-+g[A+(z<<3)>>2];D=-+g[B+(z<<3)>>2];g[f+(a<<2)>>2]=1.0;A=a+1|0;g[f+(A<<2)>>2]=t;B=a+2|0;g[f+(B<<2)>>2]=0.0;g[e+(a<<2)>>2]=1.0;g[e+(A<<2)>>2]=D;g[e+(B<<2)>>2]=0.0}f=x+w|0;h=+P(+(+g[d>>2]),+(1.0/+(f>>>0)));if(!f){i=C;return}a=c&1;a=((c-a|0)>>>1)+a|0;b=0;do{c=b*3|0;d=e+(c<<2)|0;g[d>>2]=h*+g[d>>2];d=e+(c+1<<2)|0;g[d>>2]=h*+g[d>>2];c=e+(c+2<<2)|0;g[c>>2]=h*+g[c>>2];b=b+1|0}while((b|0)!=(a|0));i=C;return}function Af(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;h=h|0;var k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0,w=0,x=0,y=0.0,z=0.0,A=0,B=0,C=0.0,D=0.0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0;ma=i;i=i+144|0;if((i|0)>=(j|0))ba();W=ma+128|0;X=ma+120|0;Y=ma+112|0;ea=ma+104|0;fa=ma+96|0;ga=ma+88|0;ha=ma+80|0;ia=ma+72|0;ja=ma+64|0;ka=ma+56|0;la=ma+48|0;Z=ma+40|0;_=ma+32|0;$=ma+24|0;aa=ma+16|0;ca=ma+8|0;da=ma;C=+Q(+(e*6.283185307179586));if(!d){i=ma;return}D=C*C;E=X+4|0;F=Y+4|0;G=fa+4|0;H=ea+4|0;I=ga+4|0;J=ha+4|0;K=ja+4|0;L=ia+4|0;M=ka+4|0;N=la+4|0;O=_+4|0;P=Z+4|0;R=$+4|0;S=aa+4|0;T=da+4|0;U=ca+4|0;V=0;do{w=a+(V<<3)|0;e=+g[w>>2];x=a+(V<<3)+4|0;k=+g[x>>2];r=e+1.0;s=k+0.0;z=C*r;y=C*s;t=D*r;u=D*s;o=r*t-s*u;n=t*s+r*u;v=(o!=o|0.0!=0.0)&(n!=n|0.0!=0.0);if(v){ao(X,t,u,r,s);e=+g[w>>2];k=+g[x>>2];p=+g[X>>2];q=+g[E>>2]}else{p=o;q=n}l=e*4.0-k*0.0;m=e*0.0+k*4.0;if((l!=l|0.0!=0.0)&(m!=m|0.0!=0.0)){ao(Y,4.0,0.0,e,k);k=+g[Y>>2];e=+g[F>>2]}else{k=l;e=m}g[fa>>2]=p-k;g[G>>2]=q-e;c[W>>2]=c[fa>>2];c[W+4>>2]=c[fa+4>>2];zo(ea,W);q=(y+ +g[H>>2])*.5;B=V<<1;g[f+(B<<3)>>2]=(z+ +g[ea>>2])*.5;g[f+(B<<3)+4>>2]=q;if(v){ao(ga,t,u,r,s);o=+g[ga>>2];n=+g[I>>2]}m=+g[w>>2];l=+g[x>>2];k=m*4.0-l*0.0;e=m*0.0+l*4.0;if((k!=k|0.0!=0.0)&(e!=e|0.0!=0.0)){ao(ha,4.0,0.0,m,l);k=+g[ha>>2];e=+g[J>>2]}g[ja>>2]=o-k;g[K>>2]=n-e;c[W>>2]=c[ja>>2];c[W+4>>2]=c[ja+4>>2];zo(ia,W);e=(y-+g[L>>2])*.5;A=B|1;g[f+(A<<3)>>2]=(z-+g[ia>>2])*.5;g[f+(A<<3)+4>>2]=e;w=b+(V<<3)|0;e=+g[w>>2];x=b+(V<<3)+4|0;k=+g[x>>2];r=e+1.0;s=k+0.0;y=C*r;z=C*s;t=D*r;u=D*s;o=r*t-s*u;n=t*s+r*u;v=(o!=o|0.0!=0.0)&(n!=n|0.0!=0.0);if(v){ao(ka,t,u,r,s);e=+g[w>>2];k=+g[x>>2];p=+g[ka>>2];q=+g[M>>2]}else{p=o;q=n}l=e*4.0-k*0.0;m=e*0.0+k*4.0;if((l!=l|0.0!=0.0)&(m!=m|0.0!=0.0)){ao(la,4.0,0.0,e,k);k=+g[la>>2];e=+g[N>>2]}else{k=l;e=m}g[_>>2]=p-k;g[O>>2]=q-e;c[W>>2]=c[_>>2];c[W+4>>2]=c[_+4>>2];zo(Z,W);q=(z+ +g[P>>2])*.5;g[h+(B<<3)>>2]=(y+ +g[Z>>2])*.5;g[h+(B<<3)+4>>2]=q;if(v){ao($,t,u,r,s);o=+g[$>>2];n=+g[R>>2]}m=+g[w>>2];l=+g[x>>2];k=m*4.0-l*0.0;e=m*0.0+l*4.0;if((k!=k|0.0!=0.0)&(e!=e|0.0!=0.0)){ao(aa,4.0,0.0,m,l);k=+g[aa>>2];e=+g[S>>2]}g[da>>2]=o-k;g[T>>2]=n-e;c[W>>2]=c[da>>2];c[W+4>>2]=c[da+4>>2];zo(ca,W);z=(z-+g[U>>2])*.5;g[h+(A<<3)>>2]=(y-+g[ca>>2])*.5;g[h+(A<<3)+4>>2]=z;V=V+1|0}while((V|0)!=(d|0));i=ma;return}function Bf(a,b,d,e,f,h,k,l,m,n){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;h=+h;k=+k;l=+l;m=m|0;n=n|0;var o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;B=i;i=i+48|0;if((i|0)>=(j|0))ba();y=B+40|0;s=B+24|0;x=B+8|0;u=B+32|0;z=B+16|0;A=B;if(!(!(f<=0.0)&!(f>=.5))){Qp(23509,54,1,c[2348]|0)|0;kb(1)}if(h<0.0|h>.5){Qp(23564,54,1,c[2348]|0)|0;kb(1)}if(k<=0.0){Qp(23619,54,1,c[2348]|0)|0;kb(1)}if(l<=0.0){Qp(23674,54,1,c[2348]|0)|0;kb(1)}if(!e){Qp(23729,49,1,c[2348]|0)|0;kb(1)}v=i;i=i+((1*(e<<3)|0)+15&-16)|0;if((i|0)>=(j|0))ba();w=i;i=i+((1*(e<<3)|0)+15&-16)|0;if((i|0)>=(j|0))ba();o=e&1;p=(e-o|0)>>>1;switch(a|0){case 0:{ll(e,w,v,s);r=1.0;q=0;break}case 1:{k=+O(+(+P(10.0,+(k/10.0))+-1.0));if(!o)r=1.0/+O(+(k*k+1.0));else r=1.0;ml(e,k,w,v,s);q=0;break}case 2:{nl(e,+P(10.0,+(-l/20.0)),w,v,s);r=1.0;q=p<<1;break}case 3:{k=+P(10.0,+(-k/20.0));l=+P(10.0,+(-l/20.0));k=+O(+(1.0/(k*k)+-1.0));l=+O(+(1.0/(l*l)+-1.0));if(!o)r=1.0/+O(+(k*k+1.0));else r=1.0;sl(e,k,l,w,v,s);q=p<<1;break}case 4:{il(e,w,v,s);r=1.0;q=0;break}default:{Qp(23779,44,1,c[2348]|0)|0;kb(1)}}o=e<<1;s=i;i=i+((1*(o<<3)|0)+15&-16)|0;if((i|0)>=(j|0))ba();t=i;i=i+((1*(o<<3)|0)+15&-16)|0;if((i|0)>=(j|0))ba();switch(b|0){case 0:{k=+S(+(f*3.141592653589793));break}case 1:{k=f*3.141592653589793;k=-+Q(+k)/+R(+k);break}case 2:{k=f*6.283185307179586;k=(+Q(+k)-+Q(+(h*6.283185307179586)))/+R(+k);break}case 3:{k=f*6.283185307179586;k=+R(+k)/(+Q(+k)-+Q(+(h*6.283185307179586)));break}default:k=0.0}f=+N(+k);g[u>>2]=r;g[u+4>>2]=0.0;c[y>>2]=c[u>>2];c[y+4>>2]=c[u+4>>2];xf(w,q,v,e,y,f,s,t,x);if((b|2|0)==3){a=0;do{w=s+(a<<3)|0;v=s+(a<<3)+4|0;f=-+g[v>>2];g[w>>2]=-+g[w>>2];g[v>>2]=f;v=t+(a<<3)|0;w=t+(a<<3)+4|0;f=-+g[w>>2];g[v>>2]=-+g[v>>2];g[w>>2]=f;a=a+1|0}while((a|0)!=(e|0))}if((b|1|0)==3){a=Wa()|0;p=i;i=i+((1*(o<<3)|0)+15&-16)|0;if((i|0)>=(j|0))ba();q=i;i=i+((1*(o<<3)|0)+15&-16)|0;if((i|0)>=(j|0))ba();Af(s,t,e,h,p,q);e=e<<4;fq(s|0,p|0,e|0)|0;fq(t|0,q|0,e|0)|0;Ga(a|0)}else o=e;p=c[x>>2]|0;a=c[x+4>>2]|0;if((d|0)==1){c[z>>2]=p;c[z+4>>2]=a;c[y>>2]=c[z>>2];c[y+4>>2]=c[z+4>>2];yf(s,t,o,y,m,n);i=B;return}else{c[A>>2]=p;c[A+4>>2]=a;c[y>>2]=c[A>>2];c[y+4>>2]=c[A+4>>2];zf(s,t,o,y,m,n);i=B;return}}function Cf(a,b,d,e,f){a=a|0;b=b|0;d=+d;e=+e;f=f|0;var h=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0;if(!a){Qp(23824,54,1,c[2348]|0)|0;kb(1)}if(!b){Qp(23879,54,1,c[2348]|0)|0;kb(1)}if(d<0.0|d>1.0){Qp(23934,51,1,c[2348]|0)|0;kb(1)}n=+(a>>>0);o=+(b>>>0);m=d;k=d*4.0*d;l=3.141592653589793/(m*2.0);m=m*3.141592653589793;a=(_(b,a)|0)<<1|1;b=0;do{h=(+(b>>>0)+e)/n-o;i=+Qh(h);j=1.0-h*(k*h);if(+N(+j)<1.0000000474974513e-03)h=+R(+l)*d*.5;else h=i*+Q(+(m*h))/j;g[f+(b<<2)>>2]=h;b=b+1|0}while((b|0)!=(a|0));return}function Df(a,b,d,e,f){a=a|0;b=b|0;d=+d;e=+e;f=f|0;var g=0;g=i;i=i+16|0;if((i|0)>=(j|0))ba();if(a>>>0<2){Qp(23986,53,1,c[2348]|0)|0;kb(1)}if(!b){Qp(24040,53,1,c[2348]|0)|0;kb(1)}if(d<=0.0|d>=1.0){Qp(24094,54,1,c[2348]|0)|0;kb(1)}if(e<-1.0|e>1.0){Qp(24149,53,1,c[2348]|0)|0;kb(1)}else{Ef(a,b,d,e,f,g);i=g;return}}function Ef(a,b,d,e,f,h){a=a|0;b=b|0;d=+d;e=+e;f=f|0;h=h|0;var i=0.0,j=0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0;if(!a){Qp(24203,67,1,c[2348]|0)|0;kb(1)}if(!b){Qp(24271,67,1,c[2348]|0)|0;kb(1)}if(d<0.0|d>1.0){Qp(24339,64,1,c[2348]|0)|0;kb(1)}m=+Ff(b,d);l=.20000000298023224;j=0;i=m;n=0.0;while(1){p=m-l;o=m+l;p=!(p<=0.0)?p:.009999999776482582;o=!(o>=1.0)?o:.9900000095367432;s=+Gf(a,b,d,e,p,f);r=+Gf(a,b,d,e,m,f);q=+Gf(a,b,d,e,o,f);w=(j|0)==0|ro){k=i;break}if(j>>>0>3?+N(+(m-k))<9.999999974752427e-07:0){k=i;break}j=j+1|0;if(j>>>0>=14){k=i;break}else l=l*.5}+Gf(a,b,d,e,k,f);b=(_(b,a)|0)<<1|1;i=0.0;j=0;do{v=+g[f+(j<<2)>>2];i=i+v*v;j=j+1|0}while((j|0)!=(b|0));i=+O(+(+(a>>>0)/i));j=0;do{w=f+(j<<2)|0;g[w>>2]=i*+g[w>>2];j=j+1|0}while((j|0)!=(b|0));g[h>>2]=k;return}function Ff(a,b){a=a|0;b=+b;var d=0.0,e=0.0,f=0.0;if(!a){Qp(24404,59,1,c[2348]|0)|0;kb(1)}if(b<0.0|b>1.0){Qp(24464,56,1,c[2348]|0)|0;kb(1)}do switch(a|0){case 1:{d=.7574973106384277;e=.061343029141426086;f=-.08729662746191025;break}case 2:{d=.8115186095237732;e=.07437658309936523;f=-.01427088025957346;break}case 3:{d=.8424953818321228;e=.07684185355901718;f=-.005368790123611689;break}case 4:{d=.8614078164100647;e=.07144126296043396;f=-.005586519837379456;break}case 5:{d=.8745774030685425;e=.0657869428396225;f=-.006504470016807318;break}case 6:{d=.8843879699707031;e=.06074265018105507;f=-.007364050019532442;break}case 7:{d=.8921661972999573;e=.05669236183166504;f=-.007912220433354378;break}case 8:{d=.898749828338623;e=.0536169596016407;f=-.008153010159730911;break}case 9:{d=.9046003222465515;e=.051679521799087524;f=-.008078929968178272;break}case 10:{d=.9103443026542664;e=.05130752921104431;f=-.007461919914931059;break}case 11:{d=.9158767461776733;e=.05180436000227928;f=-.006707109976559877;break}case 12:{d=.921218752861023;e=.0527380108833313;f=-.00588351022452116;break}case 13:{d=.9263819456100464;e=.054007638245821;f=-.00508452020585537;break}case 14:{d=.9312355518341064;e=.05516162887215614;f=-4.3730600737035275e-03;break}case 15:{d=.9356499314308167;e=.0559656098484993;f=-3.8815198931843042e-03;break}case 16:{d=.9397674202919006;e=.056622739881277084;f=-3.4827999770641327e-03;break}case 17:{d=.9435170292854309;e=.0569412000477314;f=-3.1882100738584995e-03;break}case 18:{d=.9455727338790894;e=.05227591097354889;f=-.004006760194897652;break}case 19:{d=.9500161409378052;e=.05681641027331352;f=-3.0062799341976643e-03;break}case 20:{d=.9528170824050903;e=.05637606978416443;f=-.003047900041565299;break}case 21:{d=.9553625583648682;e=.055758800357580185;f=-.00312987994402647;break}case 22:{d=.9575420618057251;e=.05426060035824776;f=-3.8594501093029976e-03;break}default:{d=+Y(+(+(a>>>0)+1.0000000474974513e-03))*.056873+.781388;e=.054260000586509705;f=-.003860000055283308}}while(0);b=+Y(+b);d=d+e*b+b*(f*b);if(d<0.0){b=0.0;return +b}if(!(d>1.0)){b=d;return +b}b=1.0;return +b}function Gf(a,b,d,e,f,h){a=a|0;b=b|0;d=+d;e=+e;f=+f;h=h|0;var k=0,l=0,m=0,n=0,o=0.0;m=i;i=i+16|0;if((i|0)>=(j|0))ba();k=m+4|0;l=m;if(!(f<0.0)){if(f>1.0)Qp(24577,55,1,c[2348]|0)|0}else Qp(24521,55,1,c[2348]|0)|0;n=_(a<<1,b)|0|1;o=+(a>>>0);Xe(n,((1.0-f)*d+1.0)*.5/o,+We(d*f/o,n),e,h);Ze(h,a,b,l,k);i=m;return +(+g[l>>2])}function Hf(a,b,d,e,f){a=a|0;b=b|0;d=+d;e=+e;f=f|0;var h=0.0,i=0.0,j=0;if(a>>>0<2){Qp(24633,54,1,c[2348]|0)|0;kb(1)}if(!b){Qp(24688,54,1,c[2348]|0)|0;kb(1)}if(d<=0.0|d>=1.0){Qp(24743,55,1,c[2348]|0)|0;kb(1)}if(e<-1.0|e>1.0){Qp(24799,54,1,c[2348]|0)|0;kb(1)}i=+(b>>>0);h=+Y(+d);h=+Y(+i)*.067663+.762886+h*.06551499664783478+h*(+Y(+(1.0-+P(+i,-1.600000023841858)*.088))*h);if(h<=0.0|h>=1.0)h=+Ff(b,d);j=_(a<<1,b)|0|1;i=+(a>>>0);Xe(j,((1.0-h)*d+1.0)*.5/i,+We(h*d/i,j),e,f);b=(_(b,a)|0)<<1|1;h=0.0;a=0;do{e=+g[f+(a<<2)>>2];h=h+e*e;a=a+1|0}while((a|0)!=(b|0));h=+O(+(i/h));a=0;do{j=f+(a<<2)|0;g[j>>2]=h*+g[j>>2];a=a+1|0}while((a|0)!=(b|0));return}function If(a,b,d,e,f){a=a|0;b=b|0;d=+d;e=+e;f=f|0;var h=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0;if(!a){Qp(24854,55,1,c[2348]|0)|0;kb(1)}if(!b){Qp(24910,55,1,c[2348]|0)|0;kb(1)}if(d<0.0|d>1.0){Qp(24966,52,1,c[2348]|0)|0;kb(1)}s=+(a>>>0);t=+(b>>>0);l=(d+1.0)*3.141592653589793;p=1.0-d;m=p*3.141592653589793;n=d*4.0;o=n;p=p+o/3.141592653589793;q=d*16.0*d;r=.7853981633974483/d;k=d/1.4142135381698608;a=(_(b,a)|0)<<1|1;b=0;do{d=(+(b>>>0)+e)/s-t;i=d;h=+Q(+(l*i));i=+R(+(m*i));do if(!(+N(+d)<1.0e-05)){j=1.0-d*(q*d);if(j*j<1.0e-05){g[f+(b<<2)>>2]=k*(+R(+r)*1.6366198062896729+ +Q(+r)*.36338022351264954);break}else{g[f+(b<<2)>>2]=o/(j*3.141592653589793)*(h+1.0/(n*d)*i);break}}else g[f+(b<<2)>>2]=p;while(0);b=b+1|0}while((b|0)!=(a|0));return}function Jf(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,i=0.0,j=0,k=0.0,l=0;b=Xp(140)|0;c[b>>2]=2;c[b+4>>2]=7;g[b+8>>2]=.25;c[b+12>>2]=Ee(7,2,7,.25,0.0)|0;d=Xp(512)|0;c[b+64>>2]=d;e=Qj(7,137,1)|0;f=0;do{l=(Tj(e)|0)!=0;j=d+(f<<3)|0;h=d+(f<<3)+4|0;g[j>>2]=l?.7071067690849304:-.7071067690849304;g[h>>2]=0.0;l=(Tj(e)|0)!=0;k=l?.7071067811865476:-.7071067811865476;i=k+ +g[h>>2];g[j>>2]=+g[j>>2]+k*0.0;g[h>>2]=i;f=f+1|0}while((f|0)!=64);Sj(e);l=b+120|0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;c[l+16>>2]=0;c[b+68>>2]=0;c[b+88>>2]=0;c[b+100>>2]=0;c[b+80>>2]=0;c[b+92>>2]=0;c[b+72>>2]=14;l=ph()|0;c[b+108>>2]=l;c[b+104>>2]=64;l=sh(l)|0;c[b+112>>2]=l;c[b+116>>2]=Xp(l<<3)|0;Kf(b,a)|0;Mf(b,0)|0;return b|0}function Kf(a,b){a=a|0;b=b|0;var d=0;if(c[a+128>>2]|0){Qp(25019,81,1,c[2348]|0)|0;a=-1;return a|0}if(!b){Kf(a,556)|0;return 0}if(((c[b>>2]|0)+-1|0)>>>0>5){Qp(25101,63,1,c[2348]|0)|0;kb(1)}if(!(c[b+4>>2]|0)){d=c[2348]|0;Qp(25165,63,1,d)|0;kb(1)}if(!(c[b+8>>2]|0)){d=c[2348]|0;Qp(25165,63,1,d)|0;kb(1)}if(!(c[b+12>>2]|0)){Qp(25229,70,1,c[2348]|0)|0;kb(1)}gq(a+32|0,b|0,16)|0;Lf(a);d=0;return d|0}function Lf(a){a=a|0;var b=0,d=0;d=a+108|0;rh(c[d>>2]|0,c[a+104>>2]|0,c[a+32>>2]|0,c[a+36>>2]|0,c[a+40>>2]|0,c[a+44>>2]|0)|0;d=sh(c[d>>2]|0)|0;c[a+112>>2]=d;b=a+116|0;a=_p(c[b>>2]|0,d<<3)|0;c[b>>2]=a;if(!a){Qp(25300,71,1,c[2348]|0)|0;kb(1)}else return}function Mf(a,b){a=a|0;b=b|0;var d=0;if(c[a+128>>2]|0){Qp(25372,89,1,c[2348]|0)|0;a=-1;return a|0}b=(b|0)==0?572:b;if(((c[b>>2]|0)+-1|0)>>>0>5){Qp(25462,71,1,c[2348]|0)|0;kb(1)}if(!(c[b+4>>2]|0)){d=c[2348]|0;Qp(25534,71,1,d)|0;kb(1)}if(!(c[b+8>>2]|0)){d=c[2348]|0;Qp(25534,71,1,d)|0;kb(1)}if(!(c[b+12>>2]|0)){Qp(25606,78,1,c[2348]|0)|0;kb(1)}gq(a+48|0,b|0,16)|0;Nf(a,c[a+72>>2]|0);d=0;return d|0}function Nf(a,b){a=a|0;b=b|0;var d=0,e=0;if(c[a+128>>2]|0){Qp(25019,81,1,c[2348]|0)|0;return}c[a+72>>2]=b;d=b+6|0;e=a+76|0;c[e>>2]=d;b=a+68|0;c[b>>2]=_p(c[b>>2]|0,d)|0;b=a+80|0;d=c[b>>2]|0;if(d|0)qh(d);d=ph()|0;c[b>>2]=d;rh(d,c[e>>2]|0,c[a+48>>2]|0,c[a+52>>2]|0,c[a+56>>2]|0,c[a+60>>2]|0)|0;e=sh(c[b>>2]|0)|0;b=a+84|0;c[b>>2]=e;d=a+88|0;c[d>>2]=_p(c[d>>2]|0,e<<3)|0;d=a+92|0;e=c[d>>2]|0;if(e|0)Bh(e);e=Ah(c[b>>2]|0,16)|0;c[d>>2]=e;e=Ch(e)|0;c[a+96>>2]=e;a=a+100|0;c[a>>2]=_p(c[a>>2]|0,e<<3)|0;return}function Of(a){a=a|0;a=a+120|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=0;c[a+16>>2]=0;return}function Pf(a){a=a|0;Fe(c[a+12>>2]|0);qh(c[a+80>>2]|0);Bh(c[a+92>>2]|0);qh(c[a+108>>2]|0);Yp(c[a+64>>2]|0);Yp(c[a+68>>2]|0);Yp(c[a+88>>2]|0);Yp(c[a+100>>2]|0);Yp(c[a+116>>2]|0);Yp(a);return}function Qf(a){a=a|0;return c[a+128>>2]|0}function Rf(a){a=a|0;if(!(c[a+128>>2]|0)){Qp(25685,58,1,c[2348]|0)|0;a=0;return a|0}else{a=_((c[a+96>>2]|0)+64+(c[a+112>>2]|0)+(c[a+4>>2]<<1)|0,c[a>>2]|0)|0;return a|0}return 0}function Sf(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;k=b+120|0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0;k=b+104|0;c[k>>2]=g;g=b+68|0;h=c[g>>2]|0;i=b+72|0;j=c[i>>2]|0;if(!e)eq(h|0,0,j|0)|0;else gq(h|0,e|0,j|0)|0;e=c[i>>2]|0;a[(c[g>>2]|0)+e>>0]=102;a[(c[g>>2]|0)+(e+1)>>0]=(c[k>>2]|0)>>>8;a[(c[g>>2]|0)+(e+2)>>0]=c[k>>2];a[(c[g>>2]|0)+(e+3)>>0]=c[b+44>>2];k=e+4|0;a[(c[g>>2]|0)+k>>0]=c[b+32>>2]<<5;k=(c[g>>2]|0)+k|0;a[k>>0]=d[k>>0]|0|c[b+36>>2]&31;a[(c[g>>2]|0)+(e+5)>>0]=c[b+40>>2]&31;e=b+88|0;xh(c[b+80>>2]|0,c[g>>2]|0,c[e>>2]|0);Dh(c[b+92>>2]|0,c[e>>2]|0,c[b+100>>2]|0);Lf(b);xh(c[b+108>>2]|0,f,c[b+116>>2]|0);c[b+128>>2]=1;return}function Tf(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;q=i;i=i+32|0;if((i|0)>=(j|0))ba();f=q+16|0;g=q+8|0;h=q;if(!d){p=a+132|0;p=c[p>>2]|0;i=q;return p|0}k=a+124|0;l=g+4|0;m=a+12|0;n=a+16|0;o=h+4|0;e=c[k>>2]|0;p=0;do{if(!e){Uf(g,a);r=c[l>>2]|0;e=c[m>>2]|0;c[h>>2]=c[g>>2];c[o>>2]=r;c[f>>2]=c[h>>2];c[f+4>>2]=c[h+4>>2];Je(e,f,n);e=c[k>>2]|0}r=c[a+16+(e<<3)+4>>2]|0;c[b+(p<<3)>>2]=c[a+16+(e<<3)>>2];c[b+(p<<3)+4>>2]=r;e=(((c[k>>2]|0)+1|0)>>>0)%((c[a>>2]|0)>>>0)|0;c[k>>2]=e;p=p+1|0}while((p|0)!=(d|0));r=a+132|0;r=c[r>>2]|0;i=q;return r|0} +function yj(a,b){a=a|0;b=b|0;var e=0,f=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0.0,R=0.0;P=i;i=i+464|0;if((i|0)>=(j|0))ba();N=P+456|0;M=P+432|0;J=P+416|0;I=P+400|0;E=P+392|0;H=P+384|0;G=P+368|0;F=P+352|0;D=P+328|0;C=P+304|0;B=P+280|0;A=P+256|0;y=P+232|0;x=P+208|0;w=P+192|0;v=P+184|0;u=P+160|0;t=P+136|0;s=P+112|0;r=P+88|0;q=P+80|0;p=P+72|0;o=P+64|0;n=P+56|0;O=P+48|0;K=P+40|0;k=P+32|0;m=P+24|0;l=P+16|0;f=P+8|0;e=P;if(!(c[a+172>>2]|0)){Qp(37231,86,1,c[2348]|0)|0;i=P;return}L=Ep(b,37318)|0;if(!L){O=c[2348]|0;c[e>>2]=b;Kp(O,37320,e)|0;i=P;return}c[f>>2]=37414;Kp(L,37385,f)|0;Qp(37445,11,1,L)|0;Qp(37457,11,1,L)|0;c[l>>2]=2048;Kp(L,37469,l)|0;c[m>>2]=c[a>>2];Kp(L,37478,m)|0;c[k>>2]=c[a+16>>2];Kp(L,37487,k)|0;z=a+20|0;c[K>>2]=c[z>>2];Kp(L,37502,K)|0;c[O>>2]=c[a+24>>2];Kp(L,37517,O)|0;Qp(37532,16,1,L)|0;if(c[a>>2]|0){e=a+12|0;f=0;do{m=d[(c[e>>2]|0)+f>>0]|0;f=f+1|0;c[n>>2]=f;c[n+4>>2]=m;Kp(L,37549,n)|0}while(f>>>0<(c[a>>2]|0)>>>0)}c[o>>2]=0;Kp(L,37563,o)|0;c[p>>2]=1;Kp(L,37587,p)|0;c[q>>2]=2;Kp(L,37611,q)|0;if(c[a>>2]|0){e=a+64|0;f=a+72|0;k=0;do{q=k;k=k+1|0;p=c[e>>2]|0;Q=+g[p+(q<<3)>>2];R=+g[p+(q<<3)+4>>2];c[r>>2]=k;h[r+8>>3]=Q;h[r+16>>3]=R;Kp(L,37635,r)|0;p=c[f>>2]|0;R=+g[p+(q<<3)>>2];Q=+g[p+(q<<3)+4>>2];c[s>>2]=k;h[s+8>>3]=R;h[s+16>>3]=Q;Kp(L,37665,s)|0}while(k>>>0<(c[a>>2]|0)>>>0)}Qp(37695,16,1,L)|0;sk(c[a+176>>2]|0,O);e=0;do{s=c[O>>2]|0;Q=+g[s+(e<<3)>>2];R=+g[s+(e<<3)+4>>2];e=e+1|0;c[t>>2]=e;h[t+8>>3]=Q;h[t+16>>3]=R;Kp(L,37712,t)|0}while((e|0)!=2048);Qp(37741,8,1,L)|0;Qp(37750,39,1,L)|0;Qp(37790,24,1,L)|0;Qp(37815,30,1,L)|0;Qp(37846,9,1,L)|0;if(c[a>>2]|0){e=a+76|0;f=0;do{t=c[e>>2]|0;Q=+g[t+(f<<3)>>2];R=+g[t+(f<<3)+4>>2];f=f+1|0;c[u>>2]=f;h[u+8>>3]=Q;h[u+16>>3]=R;Kp(L,37856,u)|0}while(f>>>0<(c[a>>2]|0)>>>0)}Qp(37886,2,1,L)|0;c[v>>2]=2048;Kp(L,37889,v)|0;nk(c[a+180>>2]|0,K);e=0;do{R=+g[(c[K>>2]|0)+(e<<2)>>2];e=e+1|0;c[w>>2]=e;h[w+8>>3]=R;Kp(L,37914,w)|0}while((e|0)!=2048);Qp(37939,91,1,L)|0;Qp(38031,33,1,L)|0;Qp(37741,8,1,L)|0;Qp(38065,15,1,L)|0;Qp(38081,21,1,L)|0;Qp(37886,2,1,L)|0;Qp(38103,17,1,L)|0;Qp(38121,17,1,L)|0;if(c[a>>2]|0){e=a+64|0;f=a+72|0;k=0;do{w=k;k=k+1|0;v=c[e>>2]|0;R=+g[v+(w<<3)>>2];Q=+g[v+(w<<3)+4>>2];c[x>>2]=k;h[x+8>>3]=R;h[x+16>>3]=Q;Kp(L,38139,x)|0;v=c[f>>2]|0;Q=+g[v+(w<<3)>>2];R=+g[v+(w<<3)+4>>2];c[y>>2]=k;h[y+8>>3]=Q;h[y+16>>3]=R;Kp(L,38169,y)|0}while(k>>>0<(c[a>>2]|0)>>>0)}Qp(37886,2,1,L)|0;Qp(38199,21,1,L)|0;Qp(38221,21,1,L)|0;Qp(38243,21,1,L)|0;Qp(38265,21,1,L)|0;if(c[a>>2]|0){k=a+84|0;l=a+88|0;e=a+188|0;f=a+92|0;m=0;do{y=m;m=m+1|0;x=c[k>>2]|0;R=+g[x+(y<<3)>>2];Q=+g[x+(y<<3)+4>>2];c[A>>2]=m;h[A+8>>3]=R;h[A+16>>3]=Q;Kp(L,38287,A)|0;x=c[l>>2]|0;Q=+g[x+(y<<3)>>2];R=+g[x+(y<<3)+4>>2];c[B>>2]=m;h[B+8>>3]=Q;h[B+16>>3]=R;Kp(L,38320,B)|0;x=c[e>>2]|0;R=+g[x+(y<<3)>>2];Q=+g[x+(y<<3)+4>>2];c[C>>2]=m;h[C+8>>3]=R;h[C+16>>3]=Q;Kp(L,38353,C)|0;x=c[f>>2]|0;Q=+g[x+(y<<3)>>2];R=+g[x+(y<<3)+4>>2];c[D>>2]=m;h[D+8>>3]=Q;h[D+16>>3]=R;Kp(L,38386,D)|0}while(m>>>0<(c[a>>2]|0)>>>0)}Qp(38419,15,1,L)|0;Qp(37741,8,1,L)|0;Qp(38435,16,1,L)|0;Qp(38452,40,1,L)|0;Qp(38493,48,1,L)|0;Qp(38542,11,1,L)|0;Qp(38554,30,1,L)|0;Qp(38585,33,1,L)|0;Qp(38619,16,1,L)|0;Qp(38636,58,1,L)|0;Qp(38695,48,1,L)|0;Qp(38542,11,1,L)|0;Qp(38554,30,1,L)|0;Qp(38744,35,1,L)|0;Qp(37886,2,1,L)|0;Qp(38780,23,1,L)|0;Qp(38804,23,1,L)|0;if(c[z>>2]|0){e=a+192|0;f=a+196|0;k=0;do{D=k;k=k+1|0;R=+g[(c[e>>2]|0)+(D<<2)>>2];c[F>>2]=k;h[F+8>>3]=R;Kp(L,38828,F)|0;R=+g[(c[f>>2]|0)+(D<<2)>>2];c[G>>2]=k;h[G+8>>3]=R;Kp(L,38847,G)|0}while(k>>>0<(c[z>>2]|0)>>>0)}h[H>>3]=+g[a+200>>2];Kp(L,38866,H)|0;h[E>>3]=+g[a+204>>2];Kp(L,38888,E)|0;Qp(38910,17,1,L)|0;nk(c[a+208>>2]|0,K);e=0;do{R=+g[(c[K>>2]|0)+(e<<2)>>2];e=e+1|0;c[I>>2]=e;h[I+8>>3]=R;Kp(L,38928,I)|0}while((e|0)!=2048);Qp(38947,17,1,L)|0;nk(c[a+212>>2]|0,K);e=0;do{R=+g[(c[K>>2]|0)+(e<<2)>>2];e=e+1|0;c[J>>2]=e;h[J+8>>3]=R;Kp(L,38965,J)|0}while((e|0)!=2048);Qp(37741,8,1,L)|0;Qp(38984,19,1,L)|0;Qp(39004,16,1,L)|0;Qp(39021,24,1,L)|0;Qp(39046,40,1,L)|0;Qp(38542,11,1,L)|0;Qp(39087,32,1,L)|0;Qp(39120,24,1,L)|0;Qp(39145,19,1,L)|0;Qp(39165,16,1,L)|0;Qp(39182,26,1,L)|0;Qp(38542,11,1,L)|0;Qp(39209,31,1,L)|0;Qp(39241,16,1,L)|0;Qp(39258,26,1,L)|0;Qp(38542,11,1,L)|0;Qp(39285,30,1,L)|0;Qp(39316,24,1,L)|0;sk(c[a+184>>2]|0,O);e=0;do{K=c[O>>2]|0;Q=+g[K+(e<<3)>>2];R=+g[K+(e<<3)+4>>2];e=e+1|0;c[M>>2]=e;h[M+8>>3]=Q;h[M+16>>3]=R;Kp(L,39341,M)|0}while((e|0)!=2048);Qp(37741,8,1,L)|0;Qp(39378,45,1,L)|0;Qp(39424,13,1,L)|0;Qp(39438,13,1,L)|0;Qp(39452,23,1,L)|0;Qp(39476,13,1,L)|0;Qp(39490,9,1,L)|0;Hp(L)|0;c[N>>2]=b;Rp(39500,N)|0;i=P;return}function zj(a){a=a|0;var b=0,d=0,e=0,f=0;f=i;i=i+16|0;if((i|0)>=(j|0))ba();e=f;d=Xp(1060)|0;c[d>>2]=a;a=d+12|0;b=0;do{g[a+(b<<2)>>2]=+R(+(+(b>>>0)*6.283185307179586*.00390625));b=b+1|0}while((b|0)!=256);g[d+1052>>2]=.10000000149011612;g[d+1056>>2]=.3162277638912201;a=c[d>>2]|0;switch(a|0){case 0:{c[d+1048>>2]=7;break}case 1:{c[d+1048>>2]=8;break}default:{b=c[2348]|0;c[e>>2]=a;Kp(b,39546,e)|0;kb(1)}}g[d+4>>2]=0.0;g[d+8>>2]=0.0;c[d+1036>>2]=0;g[d+1040>>2]=0.0;g[d+1044>>2]=1.0;i=f;return d|0}function Aj(a){a=a|0;var b=0,d=0;b=~~(+g[a+4>>2]*40.7436637878418+512.0+.5)>>>0;d=b&255;c[a+1036>>2]=d;c[a+1040>>2]=c[a+12+(d<<2)>>2];c[a+1044>>2]=c[a+12+((b+64&255)<<2)>>2];return}function Bj(a){a=a|0;var b=0.0;b=+g[a+4>>2];g[a+1040>>2]=+R(+b);g[a+1044>>2]=+Q(+b);return}function Cj(a,b){a=a|0;b=+b;if(b<0.0){Qp(39588,59,1,c[2348]|0)|0;kb(1)}else{g[a+1052>>2]=b;g[a+1056>>2]=+O(+b);return}}function Dj(a){a=a|0;g[a+4>>2]=0.0;g[a+8>>2]=0.0;c[a+1036>>2]=0;g[a+1040>>2]=0.0;g[a+1044>>2]=1.0;return}function Ej(a){a=a|0;Yp(a);return}function Fj(a,b){a=a|0;b=+b;g[a+8>>2]=b;return}function Gj(a,b){a=a|0;b=+b;a=a+8|0;g[a>>2]=+g[a>>2]+b;return}function Hj(a,b){a=a|0;b=+b;a=a+4|0;g[a>>2]=b;if(b>3.141592653589793){g[a>>2]=b+-6.283185307179586;return}if(!(b<-3.141592653589793))return;g[a>>2]=b+6.283185307179586;return}function Ij(a){a=a|0;var b=0.0,c=0;c=a+4|0;b=+g[a+8>>2]+ +g[c>>2];g[c>>2]=b;if(b>3.141592653589793){g[c>>2]=b+-6.283185307179586;return}if(!(b<-3.141592653589793))return;g[c>>2]=b+6.283185307179586;return}function Jj(a){a=a|0;return +(+g[a+8>>2])}function Kj(a,b){a=a|0;b=+b;var c=0;c=a+8|0;g[c>>2]=+g[c>>2]+ +g[a+1052>>2]*b;c=a+4|0;b=+g[c>>2]+ +g[a+1056>>2]*b;g[c>>2]=b;if(b>3.141592653589793){g[c>>2]=b+-6.283185307179586;return}if(!(b<-3.141592653589793))return;g[c>>2]=b+6.283185307179586;return}function Lj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,h=0.0,k=0.0,l=0.0,m=0,n=0.0,o=0;o=i;i=i+16|0;if((i|0)>=(j|0))ba();m=o;qb[c[a+1048>>2]&31](a);n=+g[b>>2];k=+g[b+4>>2];l=+g[a+1040>>2];e=+g[a+1044>>2]+l*0.0;f=n*e-k*l;h=n*l+k*e;if(!((f!=f|0.0!=0.0)&(h!=h|0.0!=0.0))){l=f;n=h;m=d+4|0;g[d>>2]=l;g[m>>2]=n;i=o;return}ao(m,n,k,e,l);l=+g[m>>2];n=+g[m+4>>2];m=d+4|0;g[d>>2]=l;g[m>>2]=n;i=o;return}function Mj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,h=0.0,k=0.0,l=0.0,m=0,n=0.0,o=0;o=i;i=i+16|0;if((i|0)>=(j|0))ba();m=o;qb[c[a+1048>>2]&31](a);n=+g[b>>2];l=+g[b+4>>2];f=+g[a+1040>>2];e=+g[a+1044>>2]-f*0.0;f=-f;h=n*e-l*f;k=n*f+l*e;if(!((h!=h|0.0!=0.0)&(k!=k|0.0!=0.0))){l=h;n=k;m=d+4|0;g[d>>2]=l;g[m>>2]=n;i=o;return}ao(m,n,l,e,f);l=+g[m>>2];n=+g[m+4>>2];m=d+4|0;g[d>>2]=l;g[m>>2]=n;i=o;return}function Nj(b,c){b=b|0;c=c|0;var e=0,f=0,g=0,h=0;e=c&-4;if(!e)f=0;else{f=c&-4;g=0;do{h=b+g|0;a[h>>0]=(d[h>>0]|0)^180;h=b+(g|1)|0;a[h>>0]=(d[h>>0]|0)^106;h=b+(g|2)|0;a[h>>0]=(d[h>>0]|0)^139;h=b+(g|3)|0;a[h>>0]=(d[h>>0]|0)^197;g=g+4|0}while(g>>>0>>0)}if(f>>>0>>0){h=b+f|0;a[h>>0]=(d[h>>0]|0)^180}e=f|1;if(e>>>0>>0){h=b+e|0;a[h>>0]=(d[h>>0]|0)^106}e=f|2;if(e>>>0>>0){h=b+e|0;a[h>>0]=(d[h>>0]|0)^139}e=f|3;if(e>>>0>=c>>>0)return;h=b+e|0;a[h>>0]=(d[h>>0]|0)^197;return}function Oj(a,b){a=a|0;b=b|0;Nj(a,b);return}function Pj(b,c){b=b|0;c=c|0;var e=0,f=0,g=0,h=0,i=0;if(!c)return;else g=0;a:while(1){switch(g&3|0){case 0:{e=180;h=7;break}case 1:{f=g<<3;e=106;h=8;break}case 2:{e=139;h=7;break}case 3:{e=197;h=7;break}default:{h=6;break a}}if((h|0)==7){h=0;f=g<<3;i=b+f|0;a[i>>0]=(d[i>>0]|0)^255;if(e&64)h=8}if((h|0)==8){i=b+(f|1)|0;a[i>>0]=(d[i>>0]|0)^255}if(e&32|0){i=b+(g<<3|2)|0;a[i>>0]=(d[i>>0]|0)^255}if(e&16|0){i=b+(g<<3|3)|0;a[i>>0]=(d[i>>0]|0)^255}if(e&8|0){i=b+(g<<3|4)|0;a[i>>0]=(d[i>>0]|0)^255}if(e&4|0){i=b+(g<<3|5)|0;a[i>>0]=(d[i>>0]|0)^255}if(e&2|0){i=b+(g<<3|6)|0;a[i>>0]=(d[i>>0]|0)^255}if(e&1|0){i=b+(g<<3|7)|0;a[i>>0]=(d[i>>0]|0)^255}g=g+1|0;if(g>>>0>=c>>>0){h=22;break}}if((h|0)!=6)if((h|0)==22)return}function Qj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;if((a+-2|0)>>>0>13){Qp(39648,42,1,c[2348]|0)|0;kb(1)}g=Xp(24)|0;c[g>>2]=a;c[g+4>>2]=b>>>1;f=g+8|0;c[f>>2]=0;if(!a)b=0;else{b=0;e=0;while(1){b=b<<1|d&1;e=e+1|0;if(e>>>0>=a>>>0)break;else d=d>>>1}c[f>>2]=b}c[g+12>>2]=(1<>2]=b;c[g+20>>2]=0;return g|0}function Rj(a){a=a|0;var b=0;if((a+-2|0)>>>0>13){Qp(39648,42,1,c[2348]|0)|0;kb(1)}else{b=Xp(24)|0;a=7520+(a*24|0)|0;c[b>>2]=c[a>>2];c[b+4>>2]=c[a+4>>2];c[b+8>>2]=c[a+8>>2];c[b+12>>2]=c[a+12>>2];c[b+16>>2]=c[a+16>>2];c[b+20>>2]=c[a+20>>2];return b|0}return 0}function Sj(a){a=a|0;Yp(a);return}function Tj(a){a=a|0;var b=0,d=0;d=a+16|0;b=Wj(c[d>>2]|0,c[a+4>>2]|0)|0;c[a+20>>2]=b;c[d>>2]=(c[d>>2]<<1|b)&c[a+12>>2];return b|0}function Uj(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;if(!b){b=0;return b|0}g=a+16|0;h=a+4|0;i=a+20|0;d=a+12|0;e=c[g>>2]|0;f=0;a=0;do{j=Wj(e,c[h>>2]|0)|0;c[i>>2]=j;e=(c[g>>2]<<1|j)&c[d>>2];c[g>>2]=e;a=j|a<<1;f=f+1|0}while((f|0)!=(b|0));return a|0}function Vj(a){a=a|0;c[a+16>>2]=c[a+8>>2];return}function Wj(a,b){a=a|0;b=b|0;b=b&a;return (d[39947+(b>>>8&255)>>0]|0)+(d[39947+(b&255)>>0]|0)+(d[39947+(b>>>16&255)>>0]|0)+(d[39947+(b>>>24)>>0]|0)&1|0}function Xj(a){a=a|0;return (d[40203+(a&255)>>0]|0)<<8|(d[40203+(a>>>8&255)>>0]|0)|0}function Yj(a){a=a|0;return (d[40203+(a>>>8&255)>>0]|0)<<8|(d[40203+(a&255)>>0]|0)<<16|(d[40203+(a>>>16&255)>>0]|0)|0}function Zj(a){a=a|0;return (d[40203+(a>>>8&255)>>0]|0)<<16|(d[40203+(a&255)>>0]|0)<<24|(d[40203+(a>>>16&255)>>0]|0)<<8|(d[40203+(a>>>24)>>0]|0)|0}function _j(a){a=a|0;var b=0;b=a>>>24;if(!b){b=a>>>16&255;if(!b){b=a>>>8&255;if(!b){b=a&255;if(!b){a=0;return a|0}else a=8}else a=16}else a=24}else a=32;a=a-(c[7904+(b<<2)>>2]|0)|0;return a|0}function $j(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0;if(e<<3>>>0<=f>>>0){Qp(40459,59,1,c[2348]|0)|0;kb(1)}i=f>>>3;if(!(i>>>0>>0&(g|0)!=0))return;f=f-(i<<3)|0;j=i;while(1){k=8-f|0;k=g>>>0>>0?g:k;m=8-k|0;l=g;g=g-k|0;n=255>>>m&255;m=m-f|0;i=b+j|0;a[i>>0]=(d[i>>0]|0)&(n<>>g)<>>0>7;j=(i&1)+j|0;if(!(j>>>0>>0&(l|0)!=(k|0)))break;else f=i?f&7:f}return}function ak(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;if(b<<3>>>0<=e>>>0){Qp(40519,61,1,c[2348]|0)|0;kb(1)}h=e>>>3;if(!(h>>>0>>0&(f|0)!=0)){a=f;b=0;a=b<>2]=a;return}k=f;e=e-(h<<3)|0;f=0;while(1){i=8-e|0;l=k>>>0>>0?k:i;f=255>>>(8-l|0)&255&(d[a+h>>0]|0)>>>(i-l|0)|f<>>0>7;h=(j&1)+h|0;e=k-l|0;if(!(h>>>0>>0&(k|0)!=(l|0)))break;else{k=e;e=j?i&7:i}}l=f<>2]=l;return}function bk(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;n=b<<3;if(!((f|0)!=0&(n|0)!=0))return;if(!e){h=(n|0)!=0;i=0;do{c[g+(i<<2)>>2]=0;i=i+1|0}while(i>>>0>>0&h);return}else{p=0;q=0}do{o=g+(p<<2)|0;h=q>>>3;if(h>>>0>>0){m=e;i=q-(h<<3)|0;l=h;h=0;while(1){j=8-i|0;r=m>>>0>>0?m:j;h=255>>>(8-r|0)&255&(d[a+l>>0]|0)>>>(j-r|0)|h<>>0>7;l=(k&1)+l|0;i=m-r|0;if(!((m|0)!=(r|0)&l>>>0>>0))break;else{m=i;i=k?j&7:j}}}else{i=e;h=0}c[o>>2]=h<>>0>>0&q>>>0>>0);return}function ck(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var k=0,l=0,m=0,n=0,o=0;o=i;i=i+16|0;if((i|0)>=(j|0))ba();m=o;Vp(m,e,8);if((((c[m+4>>2]|0)>0&1)+(c[m>>2]|0)|0)>>>0>g>>>0){Qp(40581,38,1,c[2348]|0)|0;kb(-1)}if(!e){n=0;c[h>>2]=n;i=o;return}else{m=0;g=0}a:while(1){k=0;while(1){k=(d[b+g>>0]|0)&1|k&254;g=g+1|0;if(!(g&7)){l=k;break}if(g>>>0>>0)k=k<<1;else{b=k;k=m;n=8;break a}}k=m+1|0;a[f+m>>0]=l;if(g>>>0>>0)m=k;else{l=g;g=0;break}}if((n|0)==8){l=g;g=b&127}if(!(l&7)){n=k;c[h>>2]=n;i=o;return}a[f+k>>0]=g;n=k+1|0;c[h>>2]=n;i=o;return}function dk(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=d<<3;if(h>>>0>f>>>0){Qp(40620,40,1,c[2348]|0)|0;kb(-1)}if(!d){e=0;c[g>>2]=e;return}else{f=0;i=0}while(1){k=a[b+f>>0]|0;j=k&255;a[e+i>>0]=(k&255)>>>7;a[e+(i|1)>>0]=j>>>6&1;a[e+(i|2)>>0]=j>>>5&1;a[e+(i|3)>>0]=j>>>4&1;a[e+(i|4)>>0]=j>>>3&1;a[e+(i|5)>>0]=j>>>2&1;a[e+(i|6)>>0]=j>>>1&1;a[e+(i|7)>>0]=j&1;f=f+1|0;if((f|0)==(d|0))break;else i=i+8|0}c[g>>2]=h;return}function ek(b,d,e,f,g,h,k){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=i;i=i+32|0;if((i|0)>=(j|0))ba();l=v;u=v+16|0;t=_(e,d)|0;Vp(u,t,g);u=((c[u+4>>2]|0)>0&1)+(c[u>>2]|0)|0;if(u>>>0>h>>>0){s=c[2348]|0;Qp(40661,40,1,s)|0;c[l>>2]=e;c[l+4>>2]=d;c[l+8>>2]=h;c[l+12>>2]=g;Kp(s,40702,l)|0;kb(-1)}if(!t){l=0;h=0;e=0}else{p=d+-1|0;o=g+-1|0;q=0;n=0;l=0;s=0;h=0;m=0;e=0;while(1){if(!s){r=n+1|0;m=a[b+n>>0]|0}else r=n;e=((m&255)>>>(p-s|0)&1|(e&255)<<1)&255;if((h|0)==(o|0)){a[f+l>>0]=e;l=l+1|0;e=0}h=((h+1|0)>>>0)%(g>>>0)|0;q=q+1|0;if((q|0)==(t|0))break;else{n=r;s=((s+1|0)>>>0)%(d>>>0)|0}}}if((l|0)==(u|0)){f=u;c[k>>2]=f;i=v;return}if(h>>>0>>0)do{e=(e&255)<<1&255;h=h+1|0}while((h|0)!=(g|0));a[f+l>>0]=e;f=l+1|0;c[k>>2]=f;i=v;return}function fk(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0.0,h=0.0,k=0.0,l=0.0,m=0.0,n=0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=i;i=i+48|0;if((i|0)>=(j|0))ba();p=A+32|0;q=A+24|0;v=A+16|0;w=A+8|0;z=A;x=b&-4;if(!x)e=0;else{m=+g[c>>2];o=+g[c+4>>2];r=p+4|0;s=q+4|0;t=v+4|0;u=w+4|0;e=b&-4;y=0;do{k=+g[a+(y<<3)>>2];l=+g[a+(y<<3)+4>>2];h=k*m-l*o;f=l*m+k*o;if((h!=h|0.0!=0.0)&(f!=f|0.0!=0.0)){ao(p,k,l,m,o);h=+g[p>>2];f=+g[r>>2]}g[d+(y<<3)>>2]=h;g[d+(y<<3)+4>>2]=f;n=y|1;k=+g[a+(n<<3)>>2];l=+g[a+(n<<3)+4>>2];h=k*m-l*o;f=l*m+k*o;if((h!=h|0.0!=0.0)&(f!=f|0.0!=0.0)){ao(q,k,l,m,o);h=+g[q>>2];f=+g[s>>2]}g[d+(n<<3)>>2]=h;g[d+(n<<3)+4>>2]=f;n=y|2;k=+g[a+(n<<3)>>2];l=+g[a+(n<<3)+4>>2];h=k*m-l*o;f=l*m+k*o;if((h!=h|0.0!=0.0)&(f!=f|0.0!=0.0)){ao(v,k,l,m,o);h=+g[v>>2];f=+g[t>>2]}g[d+(n<<3)>>2]=h;g[d+(n<<3)+4>>2]=f;n=y|3;k=+g[a+(n<<3)>>2];l=+g[a+(n<<3)+4>>2];h=k*m-l*o;f=l*m+k*o;if((h!=h|0.0!=0.0)&(f!=f|0.0!=0.0)){ao(w,k,l,m,o);h=+g[w>>2];f=+g[u>>2]}g[d+(n<<3)>>2]=h;g[d+(n<<3)+4>>2]=f;y=y+4|0}while(y>>>0>>0)}if(e>>>0>=b>>>0){i=A;return}o=+g[c>>2];m=+g[c+4>>2];n=z+4|0;do{l=+g[a+(e<<3)>>2];k=+g[a+(e<<3)+4>>2];h=l*o-k*m;f=k*o+l*m;if((h!=h|0.0!=0.0)&(f!=f|0.0!=0.0)){ao(z,l,k,o,m);h=+g[z>>2];f=+g[n>>2]}g[d+(e<<3)>>2]=h;g[d+(e<<3)+4>>2]=f;e=e+1|0}while((e|0)!=(b|0));i=A;return}function gk(a){a=a|0;var b=0,d=0;b=Xp(12)|0;c[b+4>>2]=a;a=a<<2;d=Xp(a)|0;c[b>>2]=d;c[b+8>>2]=0;eq(d|0,0,a|0)|0;return b|0}function hk(a){a=a|0;c[a+8>>2]=0;eq(c[a>>2]|0,0,c[a+4>>2]<<2|0)|0;return}function ik(a){a=a|0;Yp(c[a>>2]|0);Yp(a);return}function jk(a,b){a=a|0;b=+b;var d=0,e=0;d=a+8|0;e=c[d>>2]|0;g[(c[a>>2]|0)+(e<<2)>>2]=b;c[d>>2]=((e+1|0)>>>0)%((c[a+4>>2]|0)>>>0)|0;return}function kk(a,b){a=a|0;b=b|0;c[b>>2]=c[(c[a>>2]|0)+(c[a+8>>2]<<2)>>2];return}function lk(a){a=a|0;var b=0,d=0,e=0;d=i;i=i+16|0;if((i|0)>=(j|0))ba();b=d;if(!a){d=c[2348]|0;c[b>>2]=40764;Kp(d,40769,b)|0;kb(1)}else{b=Xp(28)|0;c[b+4>>2]=a;e=_j(a)|0;c[b+8>>2]=e;e=1<>2]=e;e=e+-1|0;c[b+16>>2]=e;a=e+a|0;c[b+20>>2]=a;a=a<<2;e=Xp(a)|0;c[b>>2]=e;c[b+24>>2]=0;eq(e|0,0,a|0)|0;i=d;return b|0}return 0}function mk(a){a=a|0;c[a+24>>2]=0;eq(c[a>>2]|0,0,c[a+20>>2]<<2|0)|0;return}function nk(a,b){a=a|0;b=b|0;c[b>>2]=(c[a>>2]|0)+(c[a+24>>2]<<2);return}function ok(a,b){a=a|0;b=+b;var d=0,e=0,f=0;e=a+24|0;d=c[a+16>>2]&(c[e>>2]|0)+1;c[e>>2]=d;if(!d){f=c[a>>2]|0;d=a+4|0;gq(f|0,f+(c[a+12>>2]<<2)|0,(c[d>>2]<<2)+-4|0)|0;f=a;a=d;d=c[e>>2]|0}else{f=a;a=a+4|0}g[(c[f>>2]|0)+(d+-1+(c[a>>2]|0)<<2)>>2]=b;return}function pk(a){a=a|0;Yp(c[a>>2]|0);Yp(a);return}function qk(a){a=a|0;var b=0,d=0,e=0;d=i;i=i+16|0;if((i|0)>=(j|0))ba();b=d;if(!a){d=c[2348]|0;c[b>>2]=40766;Kp(d,40769,b)|0;kb(1)}else{b=Xp(28)|0;c[b+4>>2]=a;e=_j(a)|0;c[b+8>>2]=e;e=1<>2]=e;e=e+-1|0;c[b+16>>2]=e;a=e+a|0;c[b+20>>2]=a;a=a<<3;e=Xp(a)|0;c[b>>2]=e;c[b+24>>2]=0;eq(e|0,0,a|0)|0;i=d;return b|0}return 0}function rk(a){a=a|0;c[a+24>>2]=0;eq(c[a>>2]|0,0,c[a+20>>2]<<3|0)|0;return}function sk(a,b){a=a|0;b=b|0;c[b>>2]=(c[a>>2]|0)+(c[a+24>>2]<<3);return}function tk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;e=a+24|0;d=c[a+16>>2]&(c[e>>2]|0)+1;c[e>>2]=d;if(!d){f=c[a>>2]|0;d=a+4|0;gq(f|0,f+(c[a+12>>2]<<3)|0,(c[d>>2]<<3)+-8|0)|0;f=a;a=d;d=c[e>>2]|0}else{f=a;a=a+4|0}g=c[b+4>>2]|0;e=d+-1+(c[a>>2]|0)|0;f=c[f>>2]|0;c[f+(e<<3)>>2]=c[b>>2];c[f+(e<<3)+4>>2]=g;return}function uk(a){a=a|0;Yp(c[a>>2]|0);Yp(a);return}function vk(a,b){a=a|0;b=b|0;var d=0,e=0;d=Xp(8)|0;c[d+4>>2]=b;b=b<<2;e=Xp(b)|0;c[d>>2]=e;fq(e|0,a|0,b|0)|0;return d|0}function wk(a){a=a|0;Yp(c[a>>2]|0);Yp(a);return}function xk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,h=0,i=0,j=0.0;i=c[a>>2]|0;a=c[a+4>>2]|0;if(!a){f=0.0;e=0.0}else{h=0;f=0.0;e=0.0;do{j=+g[i+(h<<2)>>2];f=f+j*+g[b+(h<<3)>>2];e=e+j*+g[b+(h<<3)+4>>2];h=h+1|0}while((h|0)!=(a|0))}g[d>>2]=f;g[d+4>>2]=e;return}function yk(a,b){a=a|0;b=b|0;var d=0,e=0;d=Xp(8)|0;c[d+4>>2]=b;b=b<<2;e=Xp(b)|0;c[d>>2]=e;fq(e|0,a|0,b|0)|0;return d|0}function zk(a){a=a|0;Yp(c[a>>2]|0);Yp(a);return}function Ak(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,h=0;h=c[a>>2]|0;a=c[a+4>>2]|0;if(!a){e=0.0;g[d>>2]=e;return}else{f=0;e=0.0}do{e=e+ +g[h+(f<<2)>>2]*+g[b+(f<<2)>>2];f=f+1|0}while((f|0)!=(a|0));g[d>>2]=e;return}function Bk(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0,f=0.0,h=0.0,i=0.0,j=0.0;e=b<<1;b=e&-4;if(!b){b=0;c=0.0}else{d=0;c=0.0;do{j=+g[a+(d<<2)>>2];i=+g[a+((d|1)<<2)>>2];h=+g[a+((d|2)<<2)>>2];f=+g[a+((d|3)<<2)>>2];c=c+j*j+i*i+h*h+f*f;d=d+4|0}while(d>>>0>>0)}if(b>>>0>=e>>>0){j=c;return +j}do{j=+g[a+(b<<2)>>2];c=c+j*j;b=b+1|0}while((b|0)!=(e|0));return +c}function Ck(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;g=Xp(36)|0;c[g>>2]=a;f=Kc(e,Kc(d,(Ec(b)|0)+a|0)|0)|0;c[g+4>>2]=f;c[g+8>>2]=b;b=Ec(b)|0;c[g+12>>2]=b;c[g+24>>2]=f;f=f<<3;c[g+28>>2]=Xp(f)|0;c[g+32>>2]=Xp(f)|0;c[g+20>>2]=2;f=Xp(40)|0;c[g+16>>2]=f;b=b+a|0;h=f+8|0;c[h>>2]=d;c[f>>2]=b;a=f+4|0;c[a>>2]=Kc(d,b)|0;c[f+12>>2]=Nc(c[h>>2]|0,0)|0;b=Jl(c[a>>2]|0)|0;c[f+16>>2]=b;if((c[h>>2]|0)==1)Ll(b,0);d=c[a>>2]|0;h=f+28|0;c[h>>2]=e;c[f+20>>2]=d;b=f+24|0;c[b>>2]=Kc(e,d)|0;c[f+32>>2]=Nc(c[h>>2]|0,0)|0;b=Jl(c[b>>2]|0)|0;c[f+36>>2]=b;if((c[h>>2]|0)!=1)return g|0;Ll(b,0);return g|0}function Dk(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;if(!a){a=Ck(b,d,e,f)|0;return a|0}if((((c[a>>2]|0)==(b|0)?(c[a+8>>2]|0)==(d|0):0)?(g=c[a+16>>2]|0,(c[g+8>>2]|0)==(e|0)):0)?(c[g+28>>2]|0)==(f|0):0)return a|0;Ek(a);a=Ck(b,d,e,f)|0;return a|0}function Ek(a){a=a|0;var b=0,d=0,e=0;b=a+20|0;d=a+16|0;if(c[b>>2]|0){e=0;do{Oc(c[(c[d>>2]|0)+(e*20|0)+12>>2]|0);Kl(c[(c[d>>2]|0)+(e*20|0)+16>>2]|0);e=e+1|0}while(e>>>0<(c[b>>2]|0)>>>0)}Yp(c[d>>2]|0);Yp(c[a+28>>2]|0);Yp(c[a+32>>2]|0);Yp(a);return}function Fk(a){a=a|0;return c[a+4>>2]|0}function Gk(a){a=a|0;return c[a+8>>2]|0}function Hk(a){a=a|0;return c[(c[a+16>>2]|0)+8>>2]|0}function Ik(a){a=a|0;return c[(c[a+16>>2]|0)+28>>2]|0}function Jk(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=b+28|0;f=c[i>>2]|0;g=c[b>>2]|0;if(!d)eq(f|0,0,g|0)|0;else gq(f|0,d|0,g|0)|0;g=Fc(c[b+8>>2]|0,c[i>>2]|0,c[b>>2]|0)|0;h=b+12|0;f=c[h>>2]|0;if(!f)f=0;else{d=0;while(1){a[(c[i>>2]|0)+(f+~d+(c[b>>2]|0))>>0]=g;d=d+1|0;f=c[h>>2]|0;if(d>>>0>=f>>>0)break;else g=g>>>8}}Nj(c[i>>2]|0,(c[b>>2]|0)+f|0);f=b+20|0;if(!(c[f>>2]|0)){i=c[i>>2]|0;b=b+4|0;b=c[b>>2]|0;gq(e|0,i|0,b|0)|0;return}g=b+16|0;d=b+32|0;h=0;do{j=c[g>>2]|0;Pc(c[j+(h*20|0)+12>>2]|0,c[j+(h*20|0)>>2]|0,c[i>>2]|0,c[d>>2]|0);Ml(c[(c[g>>2]|0)+(h*20|0)+16>>2]|0,c[d>>2]|0,c[i>>2]|0);h=h+1|0}while(h>>>0<(c[f>>2]|0)>>>0);i=c[i>>2]|0;j=b+4|0;j=c[j>>2]|0;gq(e|0,i|0,j|0)|0;return}function Kk(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;j=a+28|0;gq(c[j>>2]|0,b|0,c[a+4>>2]|0)|0;b=c[a+20>>2]|0;if(b|0){f=a+16|0;g=a+32|0;do{b=b+-1|0;Nl(c[(c[f>>2]|0)+(b*20|0)+16>>2]|0,c[j>>2]|0,c[g>>2]|0);i=c[f>>2]|0;Qc(c[i+(b*20|0)+12>>2]|0,c[i+(b*20|0)>>2]|0,c[g>>2]|0,c[j>>2]|0)}while((b|0)!=0)}h=a+12|0;Oj(c[j>>2]|0,(c[h>>2]|0)+(c[a>>2]|0)|0);h=c[h>>2]|0;if(!h){g=c[j>>2]|0;h=c[a>>2]|0;i=0;gq(e|0,g|0,h|0)|0;h=a+8|0;h=c[h>>2]|0;e=c[j>>2]|0;a=c[a>>2]|0;a=Ic(h,e,a,i)|0;return a|0}f=c[a>>2]|0;g=c[j>>2]|0;i=0;b=0;do{b=d[g+(f+i)>>0]|0|b<<8;i=i+1|0}while(i>>>0>>0);gq(e|0,g|0,f|0)|0;i=a+8|0;i=c[i>>2]|0;e=c[j>>2]|0;a=c[a>>2]|0;a=Ic(i,e,a,b)|0;return a|0}function Lk(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;j=a+28|0;gq(c[j>>2]|0,b|0,c[a+4>>2]<<3|0)|0;i=a+16|0;h=a+32|0;Ol(c[(c[i>>2]|0)+36>>2]|0,c[j>>2]|0,c[h>>2]|0);g=c[i>>2]|0;Rc(c[g+32>>2]|0,c[g+20>>2]|0,c[h>>2]|0,c[j>>2]|0);Nl(c[(c[i>>2]|0)+16>>2]|0,c[j>>2]|0,c[h>>2]|0);i=c[i>>2]|0;Qc(c[i+12>>2]|0,c[i>>2]|0,c[h>>2]|0,c[j>>2]|0);h=a+12|0;Oj(c[j>>2]|0,(c[h>>2]|0)+(c[a>>2]|0)|0);h=c[h>>2]|0;if(!h){g=c[j>>2]|0;h=c[a>>2]|0;i=0;gq(e|0,g|0,h|0)|0;h=a+8|0;h=c[h>>2]|0;e=c[j>>2]|0;a=c[a>>2]|0;a=Ic(h,e,a,i)|0;return a|0}f=c[a>>2]|0;g=c[j>>2]|0;i=0;b=0;do{b=d[g+(f+i)>>0]|0|b<<8;i=i+1|0}while(i>>>0>>0);gq(e|0,g|0,f|0)|0;i=a+8|0;i=c[i>>2]|0;e=c[j>>2]|0;a=c[a>>2]|0;a=Ic(i,e,a,b)|0;return a|0}function Mk(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(gl(a)|0){case 1:{d=Nk(a,b,d,e,f)|0;return d|0}case 2:{d=Pk(a,b,d,e,f)|0;return d|0}case 3:{d=Rk(a,b,d,e,f)|0;return d|0}case 4:{d=Tk(a,b,d,e,f)|0;return d|0}case 5:{d=Vk(a,b,d,e,f)|0;return d|0}default:{Qp(41014,53,1,c[2348]|0)|0;kb(1)}}return 0}function Nk(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;u=i;i=i+32|0;if((i|0)>=(j|0))ba();q=u+24|0;p=u+16|0;r=u+8|0;s=u;t=Xp(72)|0;c[t>>2]=a;c[t+4>>2]=b;c[t+8>>2]=d;c[t+16>>2]=f;e=(e|0)==1?1:-1;c[t+20>>2]=e;d=t+12|0;c[d>>2]=e;c[t+24>>2]=1;c[t+28>>2]=9;f=(_j(a)|0)+-1|0;c[t+40>>2]=f;b=Xp(a<<2)|0;c[t+44>>2]=b;if(!a){f=0;o=0}else{e=0;do{c[b+(e<<2)>>2]=hl(e,f)|0;e=e+1|0}while(e>>>0>>0);f=a<<3;e=c[d>>2]|0;o=c[t>>2]|0}a=Xp(f)|0;c[t+48>>2]=a;k=(e|0)==1?-1.0:1.0;if(!o){i=u;return t|0}l=k*0.0;h=l*2.0-l;m=k*2.0+l*0.0;f=p+4|0;n=+(o>>>0);b=s+4|0;d=r+4|0;if((h!=h|0.0!=0.0)&(m!=m|0.0!=0.0)){e=0;do{ao(p,l,k,2.0,0.0);h=+(e>>>0);m=h*(+g[f>>2]*3.141592653589793)/n;g[s>>2]=h*(+g[p>>2]*3.141592653589793)/n;g[b>>2]=m;c[q>>2]=c[s>>2];c[q+4>>2]=c[s+4>>2];Io(r,q);v=c[d>>2]|0;c[a+(e<<3)>>2]=c[r>>2];c[a+(e<<3)+4>>2]=v;e=e+1|0}while(e>>>0>>0);i=u;return t|0}k=h*3.141592653589793;h=m*3.141592653589793;e=0;do{m=+(e>>>0);g[s>>2]=m*k/n;g[b>>2]=m*h/n;c[q>>2]=c[s>>2];c[q+4>>2]=c[s+4>>2];Io(r,q);v=c[d>>2]|0;c[a+(e<<3)>>2]=c[r>>2];c[a+(e<<3)+4>>2]=v;e=e+1|0}while(e>>>0>>0);i=u;return t|0}function Ok(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;z=i;i=i+16|0;if((i|0)>=(j|0))ba();y=z;d=c[a>>2]&-4;if(!d)b=a+8|0;else{e=a+44|0;f=a+4|0;b=a+8|0;h=0;do{u=c[(c[e>>2]|0)+(h<<2)>>2]|0;w=c[f>>2]|0;t=c[w+(u<<3)+4>>2]|0;x=c[b>>2]|0;c[x+(h<<3)>>2]=c[w+(u<<3)>>2];c[x+(h<<3)+4>>2]=t;x=h|1;t=c[(c[e>>2]|0)+(x<<2)>>2]|0;u=c[f>>2]|0;w=c[u+(t<<3)+4>>2]|0;v=c[b>>2]|0;c[v+(x<<3)>>2]=c[u+(t<<3)>>2];c[v+(x<<3)+4>>2]=w;x=h|2;v=c[(c[e>>2]|0)+(x<<2)>>2]|0;w=c[f>>2]|0;t=c[w+(v<<3)+4>>2]|0;u=c[b>>2]|0;c[u+(x<<3)>>2]=c[w+(v<<3)>>2];c[u+(x<<3)+4>>2]=t;x=h|3;u=c[(c[e>>2]|0)+(x<<2)>>2]|0;t=c[f>>2]|0;v=c[t+(u<<3)+4>>2]|0;w=c[b>>2]|0;c[w+(x<<3)>>2]=c[t+(u<<3)>>2];c[w+(x<<3)+4>>2]=v;h=h+4|0}while(h>>>0>>0)}u=c[b>>2]|0;v=a+40|0;b=c[v>>2]|0;if(!b){i=z;return}t=c[a>>2]|0;w=a+48|0;x=y+4|0;d=t;r=0;s=1;do{q=s;s=s<<1;t=t>>>1;if(q){f=0;h=0;do{e=c[w>>2]|0;o=+g[e+(h<<3)>>2];p=+g[e+(h<<3)+4>>2];h=((h+t|0)>>>0)%(d>>>0)|0;if(f>>>0>>0){e=f;do{d=e+q|0;b=u+(d<<3)|0;m=+g[b>>2];d=u+(d<<3)+4|0;n=+g[d>>2];l=o*m-p*n;k=p*m+o*n;if((l!=l|0.0!=0.0)&(k!=k|0.0!=0.0)){ao(y,m,n,o,p);l=+g[y>>2];k=+g[x>>2]}B=u+(e<<3)|0;A=u+(e<<3)+4|0;n=+g[A>>2]-k;g[b>>2]=+g[B>>2]-l;g[d>>2]=n;n=k+ +g[A>>2];g[B>>2]=l+ +g[B>>2];g[A>>2]=n;e=e+s|0;d=c[a>>2]|0}while(e>>>0>>0)}f=f+1|0}while((f|0)!=(q|0));b=c[v>>2]|0}r=r+1|0}while(r>>>0>>0);i=z;return}function Pk(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0,k=0.0,l=0.0,m=0,n=0.0,o=0.0,p=0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;z=i;i=i+224|0;if((i|0)>=(j|0))ba();v=z+56|0;t=z+16|0;s=z+8|0;p=z;A=z+32|0;u=z+48|0;w=z+40|0;x=z+24|0;y=Xp(72)|0;c[y>>2]=a;c[y+4>>2]=b;c[y+8>>2]=d;c[y+16>>2]=f;r=(e|0)==1;b=r?1:-1;c[y+20>>2]=b;c[y+12>>2]=b;c[y+24>>2]=2;c[y+28>>2]=10;Dl(a,v,A);e=c[A>>2]|0;if(e>>>0<2){A=c[2348]|0;c[p>>2]=a;Kp(A,40834,p)|0;c[s>>2]=a;Kp(A,40884,s)|0;kb(1)}else m=0;while(1){if((c[v+(m<<2)>>2]|0)!=2){e=5;break}m=m+1|0;if(m>>>0>=e>>>0){e=6;break}}if((e|0)==5)if(!m){m=c[v>>2]|0;if(!m){A=c[2348]|0;c[s>>2]=a;Kp(A,40884,s)|0;kb(1)}else h=m}else e=6;if((e|0)==6)if(a&15)if(!(a&7))h=8;else h=(a&3|0)==0?4:2;else h=16;if((a>>>0)%(h>>>0)|0|0){A=c[2348]|0;c[t>>2]=a;c[t+4>>2]=h;Kp(A,40941,t)|0;kb(1)}s=(a>>>0)/(h>>>0)|0;c[y+44>>2]=h;c[y+40>>2]=s;A=(h>>>0>s>>>0?h:s)<<3;t=Xp(A)|0;c[y+52>>2]=t;A=Xp(A)|0;c[y+56>>2]=A;d=a<<3;c[y+48>>2]=Xp(d)|0;c[y+64>>2]=Mk(s,t,A,b,f)|0;c[y+68>>2]=Mk(h,t,A,b,f)|0;d=Xp(d)|0;c[y+60>>2]=d;l=r?-1.0:1.0;if(!a){i=z;return y|0}n=l*0.0;k=n*2.0-n;o=l*2.0+n*0.0;m=u+4|0;q=+(a>>>0);e=x+4|0;b=w+4|0;if((k!=k|0.0!=0.0)&(o!=o|0.0!=0.0)){h=0;do{ao(u,n,l,2.0,0.0);k=+(h>>>0);o=k*(+g[m>>2]*3.141592653589793)/q;g[x>>2]=k*(+g[u>>2]*3.141592653589793)/q;g[e>>2]=o;c[v>>2]=c[x>>2];c[v+4>>2]=c[x+4>>2];Io(w,v);A=c[b>>2]|0;c[d+(h<<3)>>2]=c[w>>2];c[d+(h<<3)+4>>2]=A;h=h+1|0}while(h>>>0>>0);i=z;return y|0}l=k*3.141592653589793;k=o*3.141592653589793;h=0;do{o=+(h>>>0);g[x>>2]=o*l/q;g[e>>2]=o*k/q;c[v>>2]=c[x>>2];c[v+4>>2]=c[x+4>>2];Io(w,v);A=c[b>>2]|0;c[d+(h<<3)>>2]=c[w>>2];c[d+(h<<3)+4>>2]=A;h=h+1|0}while(h>>>0>>0);i=z;return y|0}function Qk(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;x=i;i=i+16|0;if((i|0)>=(j|0))ba();d=x;w=c[a+40>>2]|0;t=c[a+44>>2]|0;u=c[a+52>>2]|0;v=c[a+56>>2]|0;s=c[a+48>>2]|0;e=c[a+60>>2]|0;gq(s|0,c[a+4>>2]|0,c[a>>2]<<3|0)|0;r=(t|0)==0;a:do if(!r){q=a+64|0;f=d+4|0;if(!w){b=0;while(1){h=c[q>>2]|0;qb[c[h+28>>2]&31](h);b=b+1|0;if((b|0)==(t|0))break a}}else h=0;do{b=0;do{z=(_(b,t)|0)+h|0;y=c[s+(z<<3)+4>>2]|0;c[u+(b<<3)>>2]=c[s+(z<<3)>>2];c[u+(b<<3)+4>>2]=y;b=b+1|0}while((b|0)!=(w|0));b=c[q>>2]|0;qb[c[b+28>>2]&31](b);b=0;do{m=+g[v+(b<<3)>>2];n=+g[v+(b<<3)+4>>2];z=_(b,h)|0;o=+g[e+(z<<3)>>2];p=+g[e+(z<<3)+4>>2];l=m*o-n*p;k=n*o+m*p;if((l!=l|0.0!=0.0)&(k!=k|0.0!=0.0)){ao(d,m,n,o,p);l=+g[d>>2];k=+g[f>>2]}z=(_(b,t)|0)+h|0;g[s+(z<<3)>>2]=l;g[s+(z<<3)+4>>2]=k;b=b+1|0}while((b|0)!=(w|0));h=h+1|0}while((h|0)!=(t|0))}while(0);if(!w){i=x;return}h=a+68|0;f=a+8|0;if(r){b=0;do{z=c[h>>2]|0;qb[c[z+28>>2]&31](z);b=b+1|0}while((b|0)!=(w|0));i=x;return}else e=0;do{b=_(e,t)|0;d=0;do{y=d+b|0;z=c[s+(y<<3)+4>>2]|0;c[u+(d<<3)>>2]=c[s+(y<<3)>>2];c[u+(d<<3)+4>>2]=z;d=d+1|0}while((d|0)!=(t|0));b=c[h>>2]|0;qb[c[b+28>>2]&31](b);b=0;do{r=c[v+(b<<3)+4>>2]|0;z=(_(b,w)|0)+e|0;y=c[f>>2]|0;c[y+(z<<3)>>2]=c[v+(b<<3)>>2];c[y+(z<<3)+4>>2]=r;b=b+1|0}while((b|0)!=(t|0));e=e+1|0}while((e|0)!=(w|0));i=x;return}function Rk(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var k=0,l=0,m=0.0,n=0.0,o=0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0,v=0.0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;F=i;i=i+48|0;if((i|0)>=(j|0))ba();A=F+40|0;x=F+32|0;B=F;C=F+24|0;D=F+16|0;E=Xp(72)|0;c[E>>2]=a;c[E+4>>2]=b;c[E+8>>2]=d;c[E+16>>2]=f;y=(e|0)==1?1:-1;c[E+20>>2]=y;l=E+12|0;c[l>>2]=y;c[E+24>>2]=3;c[E+28>>2]=11;y=(a<<3)+-8|0;e=Xp(y)|0;o=E+40|0;u=E+48|0;c[u>>2]=e;y=Xp(y)|0;c[E+52>>2]=y;k=a+-1|0;z=Mk(k,e,y,1,f)|0;c[E+56>>2]=z;c[E+60>>2]=Mk(k,y,e,-1,f)|0;e=El(a)|0;b=Xp((a<<2)+-4|0)|0;c[o>>2]=b;a:do if((a|0)!=1){d=0;do{w=d;d=d+1|0;c[b+(w<<2)>>2]=Fl(e,d,a)|0}while(d>>>0>>0);e=c[E>>2]|0;s=(c[l>>2]|0)==1?-1.0:1.0;if((e|0)!=1){t=s*0.0;m=t*2.0-t;n=s*2.0+t*0.0;d=x+4|0;l=c[o>>2]|0;a=B+8|0;v=+(e>>>0);o=D+4|0;w=C+4|0;k=c[u>>2]|0;f=e+-1|0;if((m!=m|0.0!=0.0)&(n!=n|0.0!=0.0)){b=0;while(1){ao(x,t,s,2.0,0.0);p=+g[x>>2]*3.141592653589793;q=+g[d>>2]*3.141592653589793;r=+((c[l+(b<<2)>>2]|0)>>>0);n=p*r-q*0.0;m=p*0.0+q*r;if((n!=n|0.0!=0.0)&(m!=m|0.0!=0.0)){$n(B,p,q,r,0.0);n=+h[B>>3];m=+h[a>>3]}g[D>>2]=n/v;g[o>>2]=m/v;c[A>>2]=c[D>>2];c[A+4>>2]=c[D+4>>2];Io(C,A);u=c[w>>2]|0;c[k+(b<<3)>>2]=c[C>>2];c[k+(b<<3)+4>>2]=u;b=b+1|0;if(b>>>0>=f>>>0)break a}}t=m*3.141592653589793;q=n*3.141592653589793;r=q*0.0;s=t*0.0;b=0;do{p=+((c[l+(b<<2)>>2]|0)>>>0);n=t*p-r;m=s+q*p;if((n!=n|0.0!=0.0)&(m!=m|0.0!=0.0)){$n(B,t,q,p,0.0);n=+h[B>>3];m=+h[a>>3]}g[D>>2]=n/v;g[o>>2]=m/v;c[A>>2]=c[D>>2];c[A+4>>2]=c[D+4>>2];Io(C,A);x=c[w>>2]|0;c[k+(b<<3)>>2]=c[C>>2];c[k+(b<<3)+4>>2]=x;b=b+1|0}while(b>>>0>>0)}else e=1}else e=1;while(0);qb[c[z+28>>2]&31](z);D=(e<<3)+-8|0;C=Xp(D)|0;c[E+44>>2]=C;fq(C|0,y|0,D|0)|0;i=F;return E|0}function Sk(a){a=a|0;var b=0,d=0,e=0,f=0,h=0.0,k=0.0,l=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0;t=i;i=i+16|0;if((i|0)>=(j|0))ba();r=t;b=(c[a>>2]|0)+-1|0;s=a+40|0;if(b|0){e=a+4|0;f=a+48|0;d=0;do{u=c[(c[s>>2]|0)+(b+~d<<2)>>2]|0;v=c[e>>2]|0;l=c[v+(u<<3)+4>>2]|0;q=c[f>>2]|0;c[q+(d<<3)>>2]=c[v+(u<<3)>>2];c[q+(d<<3)+4>>2]=l;d=d+1|0;b=(c[a>>2]|0)+-1|0}while(b>>>0>d>>>0)}v=c[a+56>>2]|0;qb[c[v+28>>2]&31](v);if((c[a>>2]|0)!=1){b=a+44|0;d=a+52|0;e=r+4|0;q=0;do{l=c[b>>2]|0;m=+g[l+(q<<3)>>2];n=+g[l+(q<<3)+4>>2];l=c[d>>2]|0;f=l+(q<<3)|0;o=+g[f>>2];l=l+(q<<3)+4|0;p=+g[l>>2];k=m*o-n*p;h=n*o+m*p;if((k!=k|0.0!=0.0)&(h!=h|0.0!=0.0)){ao(r,o,p,m,n);k=+g[r>>2];h=+g[e>>2]}g[f>>2]=k;g[l>>2]=h;q=q+1|0}while(q>>>0<((c[a>>2]|0)+-1|0)>>>0)}l=c[a+60>>2]|0;qb[c[l+28>>2]&31](l);l=a+8|0;v=c[l>>2]|0;g[v>>2]=0.0;g[v+4>>2]=0.0;if(c[a>>2]|0){d=a+4|0;e=0;do{u=c[d>>2]|0;v=c[l>>2]|0;b=v+4|0;p=+g[u+(e<<3)+4>>2]+ +g[b>>2];g[v>>2]=+g[u+(e<<3)>>2]+ +g[v>>2];g[b>>2]=p;e=e+1|0;b=c[a>>2]|0}while(e>>>0>>0);b=b+-1|0;if(!b){i=t;return}}else b=-1;e=a+48|0;f=a+4|0;d=0;do{v=c[(c[s>>2]|0)+(d<<2)>>2]|0;q=c[e>>2]|0;o=+(b>>>0);r=c[f>>2]|0;p=+g[q+(d<<3)+4>>2]/o+ +g[r+4>>2];u=c[l>>2]|0;g[u+(v<<3)>>2]=+g[q+(d<<3)>>2]/o+ +g[r>>2];g[u+(v<<3)+4>>2]=p;d=d+1|0;b=(c[a>>2]|0)+-1|0}while(d>>>0>>0);i=t;return}function Tk(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var k=0.0,l=0.0,m=0.0,n=0,o=0,p=0.0,q=0.0,r=0.0,s=0.0,t=0,u=0.0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;G=i;i=i+48|0;if((i|0)>=(j|0))ba();B=G+40|0;z=G+32|0;C=G;D=G+24|0;E=G+16|0;F=Xp(72)|0;c[F>>2]=a;c[F+4>>2]=b;c[F+8>>2]=d;o=F+16|0;c[o>>2]=f;b=(e|0)==1?1:-1;c[F+20>>2]=b;n=F+12|0;c[n>>2]=b;c[F+24>>2]=4;c[F+28>>2]=12;b=El(a)|0;d=Xp((a<<2)+-4|0)|0;A=F+40|0;t=F+44|0;c[t>>2]=d;if((a|0)==1)b=-3;else{e=a+-1|0;f=0;do{y=f;f=f+1|0;c[d+(y<<2)>>2]=Fl(b,f,a)|0}while(f>>>0>>0);b=(a<<1)+-5|0}c[A>>2]=b;d=0;do{b=b>>>1;d=d+1|0}while((b|0)!=0);b=d;w=1<>2]=w;a=w<<3;x=Xp(a)|0;c[F+52>>2]=x;a=Xp(a)|0;y=F+56|0;c[y>>2]=a;d=c[o>>2]|0;v=F+60|0;c[v>>2]=Mk(w,x,a,1,d)|0;c[F+64>>2]=Mk(w,a,x,-1,d)|0;r=(c[n>>2]|0)==1?-1.0:1.0;s=r*0.0;k=s*2.0-s;l=r*2.0+s*0.0;d=z+4|0;a=c[F>>2]|0;o=a+-1|0;e=c[t>>2]|0;f=C+8|0;u=+(a>>>0);a=E+4|0;n=D+4|0;if((k!=k|0.0!=0.0)&(l!=l|0.0!=0.0)){b=0;do{ao(z,s,r,2.0,0.0);m=+g[z>>2]*3.141592653589793;p=+g[d>>2]*3.141592653589793;q=+((c[e+(((b>>>0)%(o>>>0)|0)<<2)>>2]|0)>>>0);l=m*q-p*0.0;k=m*0.0+p*q;if((l!=l|0.0!=0.0)&(k!=k|0.0!=0.0)){$n(C,m,p,q,0.0);l=+h[C>>3];k=+h[f>>3]}g[E>>2]=l/u;g[a>>2]=k/u;c[B>>2]=c[E>>2];c[B+4>>2]=c[E+4>>2];Io(D,B);t=c[n>>2]|0;c[x+(b<<3)>>2]=c[D>>2];c[x+(b<<3)+4>>2]=t;b=b+1|0}while(b>>>0>>0);E=c[v>>2]|0;C=E+28|0;C=c[C>>2]|0;qb[C&31](E);E=c[A>>2]|0;E=E<<3;C=Xp(E)|0;D=F+48|0;c[D>>2]=C;D=c[y>>2]|0;gq(C|0,D|0,E|0)|0;i=G;return F|0}s=k*3.141592653589793;p=l*3.141592653589793;q=p*0.0;r=s*0.0;b=0;do{l=+((c[e+(((b>>>0)%(o>>>0)|0)<<2)>>2]|0)>>>0);m=s*l-q;k=r+p*l;if((m!=m|0.0!=0.0)&(k!=k|0.0!=0.0)){$n(C,s,p,l,0.0);m=+h[C>>3];k=+h[f>>3]}g[E>>2]=m/u;g[a>>2]=k/u;c[B>>2]=c[E>>2];c[B+4>>2]=c[E+4>>2];Io(D,B);z=c[n>>2]|0;c[x+(b<<3)>>2]=c[D>>2];c[x+(b<<3)+4>>2]=z;b=b+1|0}while(b>>>0>>0);E=c[v>>2]|0;C=E+28|0;C=c[C>>2]|0;qb[C&31](E);E=c[A>>2]|0;E=E<<3;C=Xp(E)|0;D=F+48|0;c[D>>2]=C;D=c[y>>2]|0;gq(C|0,D|0,E|0)|0;i=G;return F|0}function Uk(a){a=a|0;var b=0,d=0.0,e=0,f=0,h=0.0,k=0,l=0.0,m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;w=i;i=i+16|0;if((i|0)>=(j|0))ba();p=w;u=c[a+52>>2]|0;q=c[a+56>>2]|0;r=c[a+48>>2]|0;v=c[a+44>>2]|0;s=c[a+40>>2]|0;k=c[v+((c[a>>2]|0)+-2<<2)>>2]|0;t=a+4|0;f=c[t>>2]|0;b=c[f+(k<<3)+4>>2]|0;c[u>>2]=c[f+(k<<3)>>2];c[u+4>>2]=b;b=c[a>>2]|0;k=s+1|0;if((k|0)!=(b|0)){e=0;do{e=e+1|0;g[u+(e<<3)>>2]=0.0;g[u+(e<<3)+4>>2]=0.0;b=c[a>>2]|0}while(e>>>0<(k-b|0)>>>0)}e=b+-1|0;if(e>>>0>1){f=1;do{z=c[v+(e+~f<<2)>>2]|0;A=c[t>>2]|0;y=c[A+(z<<3)+4>>2]|0;x=k+f-b|0;c[u+(x<<3)>>2]=c[A+(z<<3)>>2];c[u+(x<<3)+4>>2]=y;f=f+1|0;b=c[a>>2]|0;e=b+-1|0}while(e>>>0>f>>>0)}A=c[a+60>>2]|0;qb[c[A+28>>2]&31](A);if(s|0){b=p+4|0;k=0;do{l=+g[r+(k<<3)>>2];m=+g[r+(k<<3)+4>>2];e=q+(k<<3)|0;n=+g[e>>2];f=q+(k<<3)+4|0;o=+g[f>>2];h=l*n-m*o;d=m*n+l*o;if((h!=h|0.0!=0.0)&(d!=d|0.0!=0.0)){ao(p,n,o,l,m);h=+g[p>>2];d=+g[b>>2]}g[e>>2]=h;g[f>>2]=d;k=k+1|0}while((k|0)!=(s|0))}f=c[a+64>>2]|0;qb[c[f+28>>2]&31](f);f=a+8|0;A=c[f>>2]|0;g[A>>2]=0.0;g[A+4>>2]=0.0;if(c[a>>2]|0){e=0;do{z=c[t>>2]|0;A=c[f>>2]|0;b=A+4|0;o=+g[z+(e<<3)+4>>2]+ +g[b>>2];g[A>>2]=+g[z+(e<<3)>>2]+ +g[A>>2];g[b>>2]=o;e=e+1|0;b=c[a>>2]|0}while(e>>>0>>0);if((b|0)==1){i=w;return}}d=+(s>>>0);b=0;do{A=c[v+(b<<2)>>2]|0;y=c[t>>2]|0;o=+g[u+(b<<3)+4>>2]/d+ +g[y+4>>2];z=c[f>>2]|0;g[z+(A<<3)>>2]=+g[u+(b<<3)>>2]/d+ +g[y>>2];g[z+(A<<3)+4>>2]=o;b=b+1|0}while(b>>>0<((c[a>>2]|0)+-1|0)>>>0);i=w;return}function Vk(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0.0,k=0.0,l=0.0,m=0,n=0,o=0,p=0.0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0.0,F=0.0;B=i;i=i+32|0;if((i|0)>=(j|0))ba();w=B+24|0;x=B+16|0;y=B+8|0;z=B;A=Xp(72)|0;c[A>>2]=a;c[A+4>>2]=b;c[A+8>>2]=d;c[A+16>>2]=f;b=(e|0)==1;v=b?1:-1;c[A+20>>2]=v;c[A+12>>2]=v;c[A+24>>2]=5;v=A+40|0;c[v>>2]=0;f=A+44|0;c[f>>2]=0;switch(a|0){case 2:{c[A+28>>2]=13;i=B;return A|0}case 3:{c[A+28>>2]=14;i=B;return A|0}case 4:{c[A+28>>2]=15;i=B;return A|0}case 5:{c[A+28>>2]=16;i=B;return A|0}case 6:{c[A+28>>2]=17;i=B;return A|0}case 7:{c[A+28>>2]=18;i=B;return A|0}case 8:{c[A+28>>2]=19;i=B;return A|0}default:{e=A+28|0;if((a|0)==16){c[e>>2]=20;i=B;return A|0}c[e>>2]=21;t=Xp(a<<3)|0;c[v>>2]=t;u=Xp(a<<2)|0;c[f>>2]=u;k=b?-1.0:1.0;if(!a){i=B;return A|0}d=a>>>0>1;l=k*0.0;p=l*2.0-l;q=k*2.0+l*0.0;s=(p!=p|0.0!=0.0)&(q!=q|0.0!=0.0);m=x+4|0;n=z+4|0;o=y+4|0;p=p*3.141592653589793;q=q*3.141592653589793;r=0;do{if(d){e=c[A>>2]|0;h=+(e>>>0);b=c[v>>2]|0;if(s){f=1;do{ao(x,l,k,2.0,0.0);F=+((_(f,r)|0)>>>0);E=F*(+g[m>>2]*3.141592653589793)/h;g[z>>2]=F*(+g[x>>2]*3.141592653589793)/h;g[n>>2]=E;c[w>>2]=c[z>>2];c[w+4>>2]=c[z+4>>2];Io(y,w);D=c[o>>2]|0;C=f+-1|0;c[b+(C<<3)>>2]=c[y>>2];c[b+(C<<3)+4>>2]=D;f=f+1|0}while(f>>>0>>0)}else{f=1;do{F=+((_(f,r)|0)>>>0);g[z>>2]=F*p/h;g[n>>2]=F*q/h;c[w>>2]=c[z>>2];c[w+4>>2]=c[z+4>>2];Io(y,w);C=c[o>>2]|0;D=f+-1|0;c[b+(D<<3)>>2]=c[y>>2];c[b+(D<<3)+4>>2]=C;f=f+1|0}while(f>>>0>>0)}}else e=a;c[u+(r<<2)>>2]=Gl(t,e+-1|0)|0;r=r+1|0}while(r>>>0>>0);i=B;return A|0}}return 0}function Wk(a){a=a|0;var b=0.0,d=0,e=0,f=0;d=a+4|0;f=c[d>>2]|0;b=+g[f+4>>2]+ +g[f+12>>2];a=a+8|0;e=c[a>>2]|0;g[e>>2]=+g[f>>2]+ +g[f+8>>2];g[e+4>>2]=b;d=c[d>>2]|0;b=+g[d+4>>2]-+g[d+12>>2];a=c[a>>2]|0;g[a+8>>2]=+g[d>>2]-+g[d+8>>2];g[a+12>>2]=b;return}function Xk(a){a=a|0;var b=0.0,d=0,e=0,f=0.0,h=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0,p=0,q=0.0,r=0,s=0.0,t=0.0,u=0.0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;C=i;i=i+80|0;if((i|0)>=(j|0))ba();v=C+64|0;e=C+56|0;p=C+48|0;o=C+40|0;r=C+32|0;x=C+24|0;w=C+16|0;y=C+8|0;A=C;z=a+4|0;D=c[z>>2]|0;s=+g[D+4>>2]+ +g[D+12>>2]+ +g[D+20>>2];B=a+8|0;d=c[B>>2]|0;g[d>>2]=+g[D>>2]+ +g[D+8>>2]+ +g[D+16>>2];g[d+4>>2]=s;d=c[z>>2]|0;s=+g[d>>2];t=+g[d+4>>2];b=+g[d+8>>2];f=+g[d+12>>2];h=f*.8660253882408142-b*.5;k=f*-.5-b*.8660253882408142;if((h!=h|0.0!=0.0)&(k!=k|0.0!=0.0)){ao(e,b,f,-.5,-.8660253882408142);h=+g[e>>2];q=+g[e+4>>2];d=c[z>>2]|0}else q=k;n=+g[d+16>>2];m=+g[d+20>>2];g[o>>2]=-.5;g[o+4>>2]=-.8660253882408142;c[v>>2]=c[o>>2];c[v+4>>2]=c[o+4>>2];Ko(p,v);l=+g[p>>2];k=+g[p+4>>2];f=n*l-m*k;b=m*l+n*k;if((f!=f|0.0!=0.0)&(b!=b|0.0!=0.0)){ao(r,n,m,l,k);f=+g[r>>2];b=+g[r+4>>2]}u=s+h+f;s=t+q+b;D=c[z>>2]|0;n=+g[D>>2];q=+g[D+4>>2];l=+g[D+8>>2];m=+g[D+12>>2];g[w>>2]=-.5;g[w+4>>2]=-.8660253882408142;c[v>>2]=c[w>>2];c[v+4>>2]=c[w+4>>2];Ko(x,v);h=+g[x>>2];b=+g[x+4>>2];k=l*h-m*b;f=m*h+l*b;if((k!=k|0.0!=0.0)&(f!=f|0.0!=0.0)){ao(y,l,m,h,b);m=+g[y+4>>2];l=+g[y>>2]}else{m=f;l=k}D=c[z>>2]|0;h=+g[D+16>>2];k=+g[D+20>>2];f=k*.8660253882408142-h*.5;b=k*-.5-h*.8660253882408142;if((f!=f|0.0!=0.0)&(b!=b|0.0!=0.0)){ao(A,h,k,-.5,-.8660253882408142);f=+g[A>>2];b=+g[A+4>>2]}f=n+l+f;b=q+m+b;e=c[B>>2]|0;d=e+8|0;e=e+12|0;if((c[a+12>>2]|0)==1){g[d>>2]=u;g[e>>2]=s;D=c[B>>2]|0;g[D+16>>2]=f;g[D+20>>2]=b;i=C;return}else{g[d>>2]=f;g[e>>2]=b;D=c[B>>2]|0;g[D+16>>2]=u;g[D+20>>2]=s;i=C;return}}function Yk(a){a=a|0;var b=0,d=0.0,e=0.0,f=0,h=0.0,i=0.0,j=0,l=0,m=0,n=0.0,o=0.0,p=0,q=0.0,r=0.0,s=0,t=0,u=0.0,v=0.0,w=0,x=0,y=0,z=0,A=0,B=0;l=c[a+4>>2]|0;p=c[a+8>>2]|0;z=c[l>>2]|0;y=c[l+4>>2]|0;m=p+4|0;c[p>>2]=z;c[m>>2]=y;B=c[l+16>>2]|0;A=c[l+20>>2]|0;f=p+8|0;b=p+12|0;c[f>>2]=B;c[b>>2]=A;x=c[l+8>>2]|0;w=c[l+12>>2]|0;t=p+16|0;s=p+20|0;c[t>>2]=x;c[s>>2]=w;v=+g[l+24>>2];u=+g[l+28>>2];l=p+24|0;j=p+28|0;o=(c[k>>2]=B,+g[k>>2]);r=(c[k>>2]=A,+g[k>>2]);q=(c[k>>2]=z,+g[k>>2]);n=(c[k>>2]=y,+g[k>>2]);i=q-o;e=n-r;g[f>>2]=i;g[b>>2]=e;q=o+q;n=r+n;r=(c[k>>2]=x,+g[k>>2]);o=(c[k>>2]=w,+g[k>>2]);d=r-v;h=o-u;g[l>>2]=d;g[j>>2]=h;r=v+r;o=u+o;g[t>>2]=q-r;g[s>>2]=n-o;g[p>>2]=r+q;g[m>>2]=o+n;h=h-d*0.0;a=(c[a+12>>2]|0)==-1;h=a?-h:h;d=a?d:-d;g[l>>2]=i-h;g[j>>2]=e-d;g[f>>2]=i+h;g[b>>2]=e+d;return}function Zk(a){a=a|0;var b=0.0,d=0.0,e=0.0,f=0.0,h=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0.0,A=0.0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0.0,N=0,O=0.0,P=0,Q=0,R=0.0,S=0,T=0.0,U=0,V=0,W=0,X=0,Y=0.0,Z=0,_=0.0,$=0,aa=0,ca=0,da=0.0,ea=0.0,fa=0,ga=0,ha=0,ia=0;ia=i;i=i+208|0;if((i|0)>=(j|0))ba();v=ia+192|0;p=ia+184|0;q=ia+176|0;s=ia+168|0;r=ia+160|0;u=ia+152|0;t=ia+144|0;x=ia+136|0;w=ia+128|0;y=ia+120|0;B=ia+112|0;C=ia+104|0;D=ia+96|0;E=ia+88|0;F=ia+80|0;G=ia+72|0;H=ia+64|0;I=ia+56|0;J=ia+48|0;K=ia+40|0;L=ia+32|0;U=ia+24|0;X=ia+16|0;aa=ia+8|0;ga=ia;N=c[a+4>>2]|0;ha=c[a+8>>2]|0;P=N+4|0;Q=N+8|0;S=N+12|0;V=N+16|0;W=N+20|0;Z=N+24|0;$=N+28|0;ca=N+32|0;fa=N+36|0;ea=+g[P>>2]+ +g[S>>2]+ +g[W>>2]+ +g[$>>2]+ +g[fa>>2];g[ha>>2]=+g[N>>2]+ +g[Q>>2]+ +g[V>>2]+ +g[Z>>2]+ +g[ca>>2];g[ha+4>>2]=ea;if((c[a+12>>2]|0)==-1){g[q>>2]=.30901700258255005;g[q+4>>2]=-.9510565400123596;c[v>>2]=c[q>>2];c[v+4>>2]=c[q+4>>2];Ko(p,v);da=+g[p>>2];ea=+g[p+4>>2];g[r>>2]=-.80901700258255;g[r+4>>2]=-.5877852439880371;c[v>>2]=c[r>>2];c[v+4>>2]=c[r+4>>2];Ko(s,v);_=+g[s>>2];Y=+g[s+4>>2]}else{da=.30901700258255005;ea=-.9510565400123596;_=-.80901700258255;Y=-.5877852439880371}g[t>>2]=da;g[t+4>>2]=ea;c[v>>2]=c[t>>2];c[v+4>>2]=c[t+4>>2];Ko(u,v);O=+g[u>>2];M=+g[u+4>>2];g[w>>2]=_;g[w+4>>2]=Y;c[v>>2]=c[w>>2];c[v+4>>2]=c[w+4>>2];Ko(x,v);T=+g[x>>2];R=+g[x+4>>2];z=+g[N>>2];A=+g[P>>2];b=+g[Q>>2];d=+g[S>>2];e=da*b-ea*d;f=ea*b+da*d;if((e!=e|0.0!=0.0)&(f!=f|0.0!=0.0)){ao(y,b,d,da,ea);e=+g[y>>2];f=+g[y+4>>2]}d=+g[V>>2];h=+g[W>>2];b=_*d-Y*h;k=Y*d+_*h;if((b!=b|0.0!=0.0)&(k!=k|0.0!=0.0)){ao(B,d,h,_,Y);o=+g[B>>2];k=+g[B+4>>2]}else o=b;b=+g[Z>>2];d=+g[$>>2];h=T*b-R*d;l=R*b+T*d;if((h!=h|0.0!=0.0)&(l!=l|0.0!=0.0)){ao(C,b,d,T,R);h=+g[C>>2];l=+g[C+4>>2]}m=+g[ca>>2];n=+g[fa>>2];d=O*m-M*n;b=M*m+O*n;if((d!=d|0.0!=0.0)&(b!=b|0.0!=0.0)){ao(D,m,n,O,M);d=+g[D>>2];b=+g[D+4>>2]}g[ha+8>>2]=z+e+o+h+d;g[ha+12>>2]=A+f+k+l+b;z=+g[N>>2];A=+g[P>>2];b=+g[Q>>2];d=+g[S>>2];e=_*b-Y*d;f=Y*b+_*d;if((e!=e|0.0!=0.0)&(f!=f|0.0!=0.0)){ao(E,b,d,_,Y);e=+g[E>>2];f=+g[E+4>>2]}b=+g[V>>2];d=+g[W>>2];h=O*b-M*d;k=M*b+O*d;if((h!=h|0.0!=0.0)&(k!=k|0.0!=0.0)){ao(F,b,d,O,M);h=+g[F>>2];k=+g[F+4>>2]}b=+g[Z>>2];d=+g[$>>2];l=da*b-ea*d;m=ea*b+da*d;if((l!=l|0.0!=0.0)&(m!=m|0.0!=0.0)){ao(G,b,d,da,ea);l=+g[G>>2];m=+g[G+4>>2]}n=+g[ca>>2];o=+g[fa>>2];d=T*n-R*o;b=R*n+T*o;if((d!=d|0.0!=0.0)&(b!=b|0.0!=0.0)){ao(H,n,o,T,R);d=+g[H>>2];b=+g[H+4>>2]}g[ha+16>>2]=z+e+h+l+d;g[ha+20>>2]=A+f+k+m+b;z=+g[N>>2];A=+g[P>>2];b=+g[Q>>2];d=+g[S>>2];e=T*b-R*d;f=R*b+T*d;if((e!=e|0.0!=0.0)&(f!=f|0.0!=0.0)){ao(I,b,d,T,R);e=+g[I>>2];f=+g[I+4>>2]}b=+g[V>>2];d=+g[W>>2];h=da*b-ea*d;k=ea*b+da*d;if((h!=h|0.0!=0.0)&(k!=k|0.0!=0.0)){ao(J,b,d,da,ea);h=+g[J>>2];k=+g[J+4>>2]}b=+g[Z>>2];d=+g[$>>2];l=O*b-M*d;m=M*b+O*d;if((l!=l|0.0!=0.0)&(m!=m|0.0!=0.0)){ao(K,b,d,O,M);l=+g[K>>2];m=+g[K+4>>2]}n=+g[ca>>2];o=+g[fa>>2];d=_*n-Y*o;b=Y*n+_*o;if((d!=d|0.0!=0.0)&(b!=b|0.0!=0.0)){ao(L,n,o,_,Y);d=+g[L>>2];b=+g[L+4>>2]}g[ha+24>>2]=z+e+h+l+d;g[ha+28>>2]=A+f+k+m+b;n=+g[N>>2];o=+g[P>>2];e=+g[Q>>2];b=+g[S>>2];d=O*e-M*b;f=M*e+O*b;if((d!=d|0.0!=0.0)&(f!=f|0.0!=0.0)){ao(U,e,b,O,M);m=+g[U>>2];l=+g[U+4>>2]}else{m=d;l=f}e=+g[V>>2];b=+g[W>>2];d=T*e-R*b;f=R*e+T*b;if((d!=d|0.0!=0.0)&(f!=f|0.0!=0.0)){ao(X,e,b,T,R);k=+g[X>>2];h=+g[X+4>>2]}else{k=d;h=f}f=+g[Z>>2];e=+g[$>>2];d=_*f-Y*e;b=Y*f+_*e;if((d!=d|0.0!=0.0)&(b!=b|0.0!=0.0)){ao(aa,f,e,_,Y);d=+g[aa>>2];b=+g[aa+4>>2]}k=n+m+k+d;h=o+l+h+b;f=+g[ca>>2];b=+g[fa>>2];d=da*f-ea*b;e=ea*f+da*b;if(!((d!=d|0.0!=0.0)&(e!=e|0.0!=0.0))){da=d;ea=e;da=k+da;ea=h+ea;ga=ha+32|0;ha=ha+36|0;g[ga>>2]=da;g[ha>>2]=ea;i=ia;return}ao(ga,f,b,da,ea);da=+g[ga>>2];ea=+g[ga+4>>2];da=k+da;ea=h+ea;ga=ha+32|0;ha=ha+36|0;g[ga>>2]=da;g[ha>>2]=ea;i=ia;return}function _k(a){a=a|0;var b=0.0,d=0.0,e=0.0,f=0.0,h=0.0,k=0.0,l=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0.0,J=0.0,K=0,L=0,M=0,N=0,O=0,P=0.0,Q=0.0,R=0,S=0,T=0,U=0.0,V=0.0,W=0,X=0,Y=0,Z=0,_=0,$=0.0,aa=0.0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0;ha=i;i=i+208|0;if((i|0)>=(j|0))ba();n=ha+192|0;o=ha+184|0;p=ha+176|0;w=ha+168|0;q=ha+160|0;r=ha+152|0;s=ha+144|0;v=ha+136|0;t=ha+128|0;x=ha+120|0;y=ha+112|0;z=ha+104|0;A=ha+96|0;B=ha+88|0;C=ha+80|0;D=ha+72|0;E=ha+64|0;F=ha+56|0;G=ha+48|0;H=ha+40|0;K=ha+32|0;R=ha+24|0;W=ha+16|0;ca=ha+8|0;fa=ha;L=c[a+4>>2]|0;ga=c[a+8>>2]|0;M=L+4|0;N=L+8|0;O=L+12|0;S=L+16|0;T=L+20|0;X=L+24|0;Y=L+28|0;Z=L+32|0;_=L+36|0;da=L+40|0;ea=L+44|0;aa=+g[M>>2]+ +g[O>>2]+ +g[T>>2]+ +g[Y>>2]+ +g[_>>2]+ +g[ea>>2];g[ga>>2]=+g[L>>2]+ +g[N>>2]+ +g[S>>2]+ +g[X>>2]+ +g[Z>>2]+ +g[da>>2];g[ga+4>>2]=aa;if((c[a+12>>2]|0)==1){g[p>>2]=.5;g[p+4>>2]=-.8660253882408142;c[n>>2]=c[p>>2];c[n+4>>2]=c[p+4>>2];Ko(o,n);U=-+g[o>>2];V=-+g[o+4>>2];g[q>>2]=.5;g[q+4>>2]=-.8660253882408142;c[n>>2]=c[q>>2];c[n+4>>2]=c[q+4>>2];Ko(w,n);$=.5;aa=-.8660253882408142;Q=-.5;P=.8660253882408142;J=+g[w>>2];I=+g[w+4>>2]}else{g[s>>2]=.5;g[s+4>>2]=-.8660253882408142;c[n>>2]=c[s>>2];c[n+4>>2]=c[s+4>>2];Ko(r,n);$=+g[r>>2];aa=+g[r+4>>2];g[t>>2]=.5;g[t+4>>2]=-.8660253882408142;c[n>>2]=c[t>>2];c[n+4>>2]=c[t+4>>2];Ko(v,n);U=-.5;V=.8660253882408142;Q=-+g[v>>2];P=-+g[v+4>>2];J=.5;I=-.8660253882408142}l=+g[L>>2];u=+g[M>>2];b=+g[N>>2];d=+g[O>>2];e=$*b-aa*d;f=aa*b+$*d;if((e!=e|0.0!=0.0)&(f!=f|0.0!=0.0)){ao(x,b,d,$,aa);e=+g[x>>2];k=+g[x+4>>2]}else k=f;f=+g[S>>2];h=+g[T>>2];d=U*f-V*h;b=V*f+U*h;if((d!=d|0.0!=0.0)&(b!=b|0.0!=0.0)){ao(y,f,h,U,V);d=+g[y>>2];b=+g[y+4>>2]}m=l+e+d-+g[X>>2];l=u+k+b-+g[Y>>2];b=+g[Z>>2];d=+g[_>>2];e=Q*b-P*d;f=P*b+Q*d;if((e!=e|0.0!=0.0)&(f!=f|0.0!=0.0)){ao(z,b,d,Q,P);e=+g[z>>2];f=+g[z+4>>2]}h=+g[da>>2];k=+g[ea>>2];d=J*h-I*k;b=I*h+J*k;if((d!=d|0.0!=0.0)&(b!=b|0.0!=0.0)){ao(A,h,k,J,I);d=+g[A>>2];b=+g[A+4>>2]}g[ga+8>>2]=m+e+d;g[ga+12>>2]=l+f+b;l=+g[L>>2];m=+g[M>>2];b=+g[N>>2];d=+g[O>>2];e=U*b-V*d;f=V*b+U*d;if((e!=e|0.0!=0.0)&(f!=f|0.0!=0.0)){ao(B,b,d,U,V);e=+g[B>>2];f=+g[B+4>>2]}h=+g[S>>2];k=+g[T>>2];d=Q*h-P*k;b=P*h+Q*k;if((d!=d|0.0!=0.0)&(b!=b|0.0!=0.0)){ao(C,h,k,Q,P);d=+g[C>>2];b=+g[C+4>>2]}u=l+e+d+ +g[X>>2];l=m+f+b+ +g[Y>>2];b=+g[Z>>2];d=+g[_>>2];e=U*b-V*d;f=V*b+U*d;if((e!=e|0.0!=0.0)&(f!=f|0.0!=0.0)){ao(D,b,d,U,V);e=+g[D>>2];f=+g[D+4>>2]}h=+g[da>>2];k=+g[ea>>2];d=Q*h-P*k;b=P*h+Q*k;if((d!=d|0.0!=0.0)&(b!=b|0.0!=0.0)){ao(E,h,k,Q,P);d=+g[E>>2];b=+g[E+4>>2]}g[ga+16>>2]=u+e+d;g[ga+20>>2]=l+f+b;l=+g[M>>2]-+g[O>>2]+ +g[T>>2]-+g[Y>>2]+ +g[_>>2]-+g[ea>>2];g[ga+24>>2]=+g[L>>2]-+g[N>>2]+ +g[S>>2]-+g[X>>2]+ +g[Z>>2]-+g[da>>2];g[ga+28>>2]=l;l=+g[L>>2];m=+g[M>>2];b=+g[N>>2];d=+g[O>>2];e=Q*b-P*d;f=P*b+Q*d;if((e!=e|0.0!=0.0)&(f!=f|0.0!=0.0)){ao(F,b,d,Q,P);e=+g[F>>2];f=+g[F+4>>2]}h=+g[S>>2];k=+g[T>>2];d=U*h-V*k;b=V*h+U*k;if((d!=d|0.0!=0.0)&(b!=b|0.0!=0.0)){ao(G,h,k,U,V);d=+g[G>>2];b=+g[G+4>>2]}u=l+e+d+ +g[X>>2];l=m+f+b+ +g[Y>>2];b=+g[Z>>2];d=+g[_>>2];e=Q*b-P*d;f=P*b+Q*d;if((e!=e|0.0!=0.0)&(f!=f|0.0!=0.0)){ao(H,b,d,Q,P);e=+g[H>>2];f=+g[H+4>>2]}h=+g[da>>2];k=+g[ea>>2];d=U*h-V*k;b=V*h+U*k;if((d!=d|0.0!=0.0)&(b!=b|0.0!=0.0)){ao(K,h,k,U,V);d=+g[K>>2];b=+g[K+4>>2]}g[ga+32>>2]=u+e+d;g[ga+36>>2]=l+f+b;l=+g[L>>2];m=+g[M>>2];e=+g[N>>2];b=+g[O>>2];d=J*e-I*b;f=I*e+J*b;if((d!=d|0.0!=0.0)&(f!=f|0.0!=0.0)){ao(R,e,b,J,I);k=+g[R>>2];h=+g[R+4>>2]}else{k=d;h=f}f=+g[S>>2];e=+g[T>>2];d=Q*f-P*e;b=P*f+Q*e;if((d!=d|0.0!=0.0)&(b!=b|0.0!=0.0)){ao(W,f,e,Q,P);d=+g[W>>2];b=+g[W+4>>2]}k=l+k+d-+g[X>>2];h=m+h+b-+g[Y>>2];f=+g[Z>>2];e=+g[_>>2];d=U*f-V*e;b=V*f+U*e;if((d!=d|0.0!=0.0)&(b!=b|0.0!=0.0)){ao(ca,f,e,U,V);d=+g[ca>>2];b=+g[ca+4>>2]}k=k+d;h=h+b;f=+g[da>>2];b=+g[ea>>2];d=$*f-aa*b;e=aa*f+$*b;if(!((d!=d|0.0!=0.0)&(e!=e|0.0!=0.0))){$=d;aa=e;$=k+$;aa=h+aa;fa=ga+40|0;ga=ga+44|0;g[fa>>2]=$;g[ga>>2]=aa;i=ha;return}ao(fa,f,b,$,aa);$=+g[fa>>2];aa=+g[fa+4>>2];$=k+$;aa=h+aa;fa=ga+40|0;ga=ga+44|0;g[fa>>2]=$;g[ga>>2]=aa;i=ha;return}function $k(a){a=a|0;var b=0.0,d=0.0,e=0.0,f=0.0,h=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0.0,H=0.0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0.0,ka=0.0,la=0,ma=0,na=0,oa=0.0,pa=0,qa=0.0,ra=0,sa=0,ta=0,ua=0,va=0.0,wa=0,xa=0.0,ya=0,za=0,Aa=0,Ba=0.0,Ca=0.0,Da=0,Ea=0,Fa=0,Ga=0.0,Ha=0.0,Ia=0,Ja=0,Ka=0,La=0,Ma=0.0,Na=0.0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0;Sa=i;i=i+400|0;if((i|0)>=(j|0))ba();D=Sa+384|0;t=Sa+376|0;u=Sa+368|0;v=Sa+360|0;w=Sa+352|0;y=Sa+344|0;x=Sa+336|0;A=Sa+328|0;z=Sa+320|0;C=Sa+312|0;B=Sa+304|0;F=Sa+296|0;E=Sa+288|0;I=Sa+280|0;J=Sa+272|0;K=Sa+264|0;L=Sa+256|0;M=Sa+248|0;N=Sa+240|0;O=Sa+232|0;P=Sa+224|0;Q=Sa+216|0;R=Sa+208|0;S=Sa+200|0;T=Sa+192|0;U=Sa+184|0;V=Sa+176|0;W=Sa+168|0;X=Sa+160|0;Y=Sa+152|0;Z=Sa+144|0;_=Sa+136|0;$=Sa+128|0;aa=Sa+120|0;ca=Sa+112|0;da=Sa+104|0;ea=Sa+96|0;fa=Sa+88|0;ga=Sa+80|0;ha=Sa+72|0;ia=Sa+64|0;la=Sa+56|0;ma=Sa+48|0;ta=Sa+40|0;ya=Sa+32|0;Da=Sa+24|0;Ia=Sa+16|0;La=Sa+8|0;Qa=Sa;na=c[a+4>>2]|0;Ra=c[a+8>>2]|0;pa=na+4|0;ra=na+8|0;sa=na+12|0;ua=na+16|0;wa=na+20|0;za=na+24|0;Aa=na+28|0;Ea=na+32|0;Fa=na+36|0;Ja=na+40|0;Ka=na+44|0;Oa=na+48|0;Pa=na+52|0;Na=+g[pa>>2]+ +g[sa>>2]+ +g[wa>>2]+ +g[Aa>>2]+ +g[Fa>>2]+ +g[Ka>>2]+ +g[Pa>>2];g[Ra>>2]=+g[na>>2]+ +g[ra>>2]+ +g[ua>>2]+ +g[za>>2]+ +g[Ea>>2]+ +g[Ja>>2]+ +g[Oa>>2];g[Ra+4>>2]=Na;if((c[a+12>>2]|0)==1){Ma=.6234897971153259;Na=-.7818315029144287;Ga=-.22252093255519867;Ha=-.9749279022216797;Ca=-.9009688496589661;Ba=-.4338837265968323}else{g[u>>2]=.6234897971153259;g[u+4>>2]=-.7818315029144287;c[D>>2]=c[u>>2];c[D+4>>2]=c[u+4>>2];Ko(t,D);Ma=+g[t>>2];Na=+g[t+4>>2];g[w>>2]=-.22252093255519867;g[w+4>>2]=-.9749279022216797;c[D>>2]=c[w>>2];c[D+4>>2]=c[w+4>>2];Ko(v,D);Ga=+g[v>>2];Ha=+g[v+4>>2];g[x>>2]=-.9009688496589661;g[x+4>>2]=-.4338837265968323;c[D>>2]=c[x>>2];c[D+4>>2]=c[x+4>>2];Ko(y,D);Ca=+g[y>>2];Ba=+g[y+4>>2]}g[z>>2]=Ca;g[z+4>>2]=Ba;c[D>>2]=c[z>>2];c[D+4>>2]=c[z+4>>2];Ko(A,D);xa=+g[A>>2];va=+g[A+4>>2];g[B>>2]=Ga;g[B+4>>2]=Ha;c[D>>2]=c[B>>2];c[D+4>>2]=c[B+4>>2];Ko(C,D);qa=+g[C>>2];oa=+g[C+4>>2];g[E>>2]=Ma;g[E+4>>2]=Na;c[D>>2]=c[E>>2];c[D+4>>2]=c[E+4>>2];Ko(F,D);ka=+g[F>>2];ja=+g[F+4>>2];G=+g[na>>2];H=+g[pa>>2];b=+g[ra>>2];d=+g[sa>>2];e=Ma*b-Na*d;f=Na*b+Ma*d;if((e!=e|0.0!=0.0)&(f!=f|0.0!=0.0)){ao(I,b,d,Ma,Na);e=+g[I>>2];f=+g[I+4>>2]}b=+g[ua>>2];d=+g[wa>>2];h=Ga*b-Ha*d;k=Ha*b+Ga*d;if((h!=h|0.0!=0.0)&(k!=k|0.0!=0.0)){ao(J,b,d,Ga,Ha);h=+g[J>>2];k=+g[J+4>>2]}b=+g[za>>2];d=+g[Aa>>2];l=Ca*b-Ba*d;m=Ba*b+Ca*d;if((l!=l|0.0!=0.0)&(m!=m|0.0!=0.0)){ao(K,b,d,Ca,Ba);l=+g[K>>2];m=+g[K+4>>2]}b=+g[Ea>>2];d=+g[Fa>>2];n=xa*b-va*d;o=va*b+xa*d;if((n!=n|0.0!=0.0)&(o!=o|0.0!=0.0)){ao(L,b,d,xa,va);n=+g[L>>2];o=+g[L+4>>2]}b=+g[Ja>>2];d=+g[Ka>>2];p=qa*b-oa*d;q=oa*b+qa*d;if((p!=p|0.0!=0.0)&(q!=q|0.0!=0.0)){ao(M,b,d,qa,oa);p=+g[M>>2];q=+g[M+4>>2]}r=+g[Oa>>2];s=+g[Pa>>2];d=ka*r-ja*s;b=ja*r+ka*s;if((d!=d|0.0!=0.0)&(b!=b|0.0!=0.0)){ao(N,r,s,ka,ja);d=+g[N>>2];b=+g[N+4>>2]}g[Ra+8>>2]=G+e+h+l+n+p+d;g[Ra+12>>2]=H+f+k+m+o+q+b;G=+g[na>>2];H=+g[pa>>2];b=+g[ra>>2];d=+g[sa>>2];e=Ga*b-Ha*d;f=Ha*b+Ga*d;if((e!=e|0.0!=0.0)&(f!=f|0.0!=0.0)){ao(O,b,d,Ga,Ha);e=+g[O>>2];f=+g[O+4>>2]}b=+g[ua>>2];d=+g[wa>>2];h=xa*b-va*d;k=va*b+xa*d;if((h!=h|0.0!=0.0)&(k!=k|0.0!=0.0)){ao(P,b,d,xa,va);h=+g[P>>2];k=+g[P+4>>2]}b=+g[za>>2];d=+g[Aa>>2];l=ka*b-ja*d;m=ja*b+ka*d;if((l!=l|0.0!=0.0)&(m!=m|0.0!=0.0)){ao(Q,b,d,ka,ja);l=+g[Q>>2];m=+g[Q+4>>2]}b=+g[Ea>>2];d=+g[Fa>>2];n=Ma*b-Na*d;o=Na*b+Ma*d;if((n!=n|0.0!=0.0)&(o!=o|0.0!=0.0)){ao(R,b,d,Ma,Na);n=+g[R>>2];o=+g[R+4>>2]}b=+g[Ja>>2];d=+g[Ka>>2];p=Ca*b-Ba*d;q=Ba*b+Ca*d;if((p!=p|0.0!=0.0)&(q!=q|0.0!=0.0)){ao(S,b,d,Ca,Ba);p=+g[S>>2];q=+g[S+4>>2]}r=+g[Oa>>2];s=+g[Pa>>2];d=qa*r-oa*s;b=oa*r+qa*s;if((d!=d|0.0!=0.0)&(b!=b|0.0!=0.0)){ao(T,r,s,qa,oa);d=+g[T>>2];b=+g[T+4>>2]}g[Ra+16>>2]=G+e+h+l+n+p+d;g[Ra+20>>2]=H+f+k+m+o+q+b;G=+g[na>>2];H=+g[pa>>2];b=+g[ra>>2];d=+g[sa>>2];e=Ca*b-Ba*d;f=Ba*b+Ca*d;if((e!=e|0.0!=0.0)&(f!=f|0.0!=0.0)){ao(U,b,d,Ca,Ba);e=+g[U>>2];f=+g[U+4>>2]}b=+g[ua>>2];d=+g[wa>>2];h=ka*b-ja*d;k=ja*b+ka*d;if((h!=h|0.0!=0.0)&(k!=k|0.0!=0.0)){ao(V,b,d,ka,ja);h=+g[V>>2];k=+g[V+4>>2]}b=+g[za>>2];d=+g[Aa>>2];l=Ga*b-Ha*d;m=Ha*b+Ga*d;if((l!=l|0.0!=0.0)&(m!=m|0.0!=0.0)){ao(W,b,d,Ga,Ha);l=+g[W>>2];m=+g[W+4>>2]}b=+g[Ea>>2];d=+g[Fa>>2];n=qa*b-oa*d;o=oa*b+qa*d;if((n!=n|0.0!=0.0)&(o!=o|0.0!=0.0)){ao(X,b,d,qa,oa);n=+g[X>>2];o=+g[X+4>>2]}b=+g[Ja>>2];d=+g[Ka>>2];p=Ma*b-Na*d;q=Na*b+Ma*d;if((p!=p|0.0!=0.0)&(q!=q|0.0!=0.0)){ao(Y,b,d,Ma,Na);p=+g[Y>>2];q=+g[Y+4>>2]}r=+g[Oa>>2];s=+g[Pa>>2];d=xa*r-va*s;b=va*r+xa*s;if((d!=d|0.0!=0.0)&(b!=b|0.0!=0.0)){ao(Z,r,s,xa,va);d=+g[Z>>2];b=+g[Z+4>>2]}g[Ra+24>>2]=G+e+h+l+n+p+d;g[Ra+28>>2]=H+f+k+m+o+q+b;G=+g[na>>2];H=+g[pa>>2];b=+g[ra>>2];d=+g[sa>>2];e=xa*b-va*d;f=va*b+xa*d;if((e!=e|0.0!=0.0)&(f!=f|0.0!=0.0)){ao(_,b,d,xa,va);e=+g[_>>2];f=+g[_+4>>2]}b=+g[ua>>2];d=+g[wa>>2];h=Ma*b-Na*d;k=Na*b+Ma*d;if((h!=h|0.0!=0.0)&(k!=k|0.0!=0.0)){ao($,b,d,Ma,Na);h=+g[$>>2];k=+g[$+4>>2]}b=+g[za>>2];d=+g[Aa>>2];l=qa*b-oa*d;m=oa*b+qa*d;if((l!=l|0.0!=0.0)&(m!=m|0.0!=0.0)){ao(aa,b,d,qa,oa);l=+g[aa>>2];m=+g[aa+4>>2]}b=+g[Ea>>2];d=+g[Fa>>2];n=Ga*b-Ha*d;o=Ha*b+Ga*d;if((n!=n|0.0!=0.0)&(o!=o|0.0!=0.0)){ao(ca,b,d,Ga,Ha);n=+g[ca>>2];o=+g[ca+4>>2]}b=+g[Ja>>2];d=+g[Ka>>2];p=ka*b-ja*d;q=ja*b+ka*d;if((p!=p|0.0!=0.0)&(q!=q|0.0!=0.0)){ao(da,b,d,ka,ja);p=+g[da>>2];q=+g[da+4>>2]}r=+g[Oa>>2];s=+g[Pa>>2];d=Ca*r-Ba*s;b=Ba*r+Ca*s;if((d!=d|0.0!=0.0)&(b!=b|0.0!=0.0)){ao(ea,r,s,Ca,Ba);d=+g[ea>>2];b=+g[ea+4>>2]}g[Ra+32>>2]=G+e+h+l+n+p+d;g[Ra+36>>2]=H+f+k+m+o+q+b;G=+g[na>>2];H=+g[pa>>2];b=+g[ra>>2];d=+g[sa>>2];e=qa*b-oa*d;f=oa*b+qa*d;if((e!=e|0.0!=0.0)&(f!=f|0.0!=0.0)){ao(fa,b,d,qa,oa);e=+g[fa>>2];f=+g[fa+4>>2]}b=+g[ua>>2];d=+g[wa>>2];h=Ca*b-Ba*d;k=Ba*b+Ca*d;if((h!=h|0.0!=0.0)&(k!=k|0.0!=0.0)){ao(ga,b,d,Ca,Ba);h=+g[ga>>2];k=+g[ga+4>>2]}b=+g[za>>2];d=+g[Aa>>2];l=Ma*b-Na*d;m=Na*b+Ma*d;if((l!=l|0.0!=0.0)&(m!=m|0.0!=0.0)){ao(ha,b,d,Ma,Na);l=+g[ha>>2];m=+g[ha+4>>2]}b=+g[Ea>>2];d=+g[Fa>>2];n=ka*b-ja*d;o=ja*b+ka*d;if((n!=n|0.0!=0.0)&(o!=o|0.0!=0.0)){ao(ia,b,d,ka,ja);n=+g[ia>>2];o=+g[ia+4>>2]}b=+g[Ja>>2];d=+g[Ka>>2];p=xa*b-va*d;q=va*b+xa*d;if((p!=p|0.0!=0.0)&(q!=q|0.0!=0.0)){ao(la,b,d,xa,va);p=+g[la>>2];q=+g[la+4>>2]}r=+g[Oa>>2];s=+g[Pa>>2];d=Ga*r-Ha*s;b=Ha*r+Ga*s;if((d!=d|0.0!=0.0)&(b!=b|0.0!=0.0)){ao(ma,r,s,Ga,Ha);d=+g[ma>>2];b=+g[ma+4>>2]}g[Ra+40>>2]=G+e+h+l+n+p+d;g[Ra+44>>2]=H+f+k+m+o+q+b;r=+g[na>>2];s=+g[pa>>2];e=+g[ra>>2];b=+g[sa>>2];d=ka*e-ja*b;f=ja*e+ka*b;if((d!=d|0.0!=0.0)&(f!=f|0.0!=0.0)){ao(ta,e,b,ka,ja);q=+g[ta>>2];p=+g[ta+4>>2]}else{q=d;p=f}e=+g[ua>>2];b=+g[wa>>2];d=qa*e-oa*b;f=oa*e+qa*b;if((d!=d|0.0!=0.0)&(f!=f|0.0!=0.0)){ao(ya,e,b,qa,oa);o=+g[ya>>2];n=+g[ya+4>>2]}else{o=d;n=f}e=+g[za>>2];b=+g[Aa>>2];d=xa*e-va*b;f=va*e+xa*b;if((d!=d|0.0!=0.0)&(f!=f|0.0!=0.0)){ao(Da,e,b,xa,va);m=+g[Da>>2];l=+g[Da+4>>2]}else{m=d;l=f}e=+g[Ea>>2];b=+g[Fa>>2];d=Ca*e-Ba*b;f=Ba*e+Ca*b;if((d!=d|0.0!=0.0)&(f!=f|0.0!=0.0)){ao(Ia,e,b,Ca,Ba);k=+g[Ia>>2];h=+g[Ia+4>>2]}else{k=d;h=f}f=+g[Ja>>2];e=+g[Ka>>2];d=Ga*f-Ha*e;b=Ha*f+Ga*e;if((d!=d|0.0!=0.0)&(b!=b|0.0!=0.0)){ao(La,f,e,Ga,Ha);d=+g[La>>2];b=+g[La+4>>2]}k=r+q+o+m+k+d;h=s+p+n+l+h+b;f=+g[Oa>>2];b=+g[Pa>>2];d=Ma*f-Na*b;e=Na*f+Ma*b;if(!((d!=d|0.0!=0.0)&(e!=e|0.0!=0.0))){Ma=d;Na=e;Ma=k+Ma;Na=h+Na;Qa=Ra+48|0;Ra=Ra+52|0;g[Qa>>2]=Ma;g[Ra>>2]=Na;i=Sa;return}ao(Qa,f,b,Ma,Na);Ma=+g[Qa>>2];Na=+g[Qa+4>>2];Ma=k+Ma;Na=h+Na;Qa=Ra+48|0;Ra=Ra+52|0;g[Qa>>2]=Ma;g[Ra>>2]=Na;i=Sa;return}function al(a){a=a|0;var b=0.0,d=0.0,e=0.0,f=0.0,l=0,m=0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0.0,G=0,H=0,I=0.0,J=0.0,K=0.0,L=0.0,M=0.0,N=0.0,O=0.0,P=0.0,Q=0.0,R=0.0,S=0.0,T=0.0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ca=0,da=0,ea=0,fa=0,ga=0;C=i;i=i+64|0;if((i|0)>=(j|0))ba();l=C+48|0;m=C+32|0;w=C+16|0;x=C;A=c[a+4>>2]|0;E=c[a+8>>2]|0;v=(c[a+12>>2]|0)==1;ea=c[A>>2]|0;da=c[A+4>>2]|0;D=E+4|0;c[E>>2]=ea;c[D>>2]=da;ga=c[A+32>>2]|0;fa=c[A+36>>2]|0;a=E+8|0;o=E+12|0;c[a>>2]=ga;c[o>>2]=fa;$=c[A+16>>2]|0;_=c[A+20>>2]|0;p=E+16|0;q=E+20|0;c[p>>2]=$;c[q>>2]=_;ca=c[A+48>>2]|0;aa=c[A+52>>2]|0;y=E+24|0;z=E+28|0;c[y>>2]=ca;c[z>>2]=aa;X=c[A+8>>2]|0;W=c[A+12>>2]|0;H=E+32|0;G=E+36|0;c[H>>2]=X;c[G>>2]=W;Z=c[A+40>>2]|0;Y=c[A+44>>2]|0;r=E+40|0;s=E+44|0;c[r>>2]=Z;c[s>>2]=Y;V=c[A+24>>2]|0;U=c[A+28>>2]|0;t=E+48|0;u=E+52|0;c[t>>2]=V;c[u>>2]=U;T=+g[A+56>>2];S=+g[A+60>>2];A=E+56|0;B=E+60|0;O=(c[k>>2]=ga,+g[k>>2]);P=(c[k>>2]=fa,+g[k>>2]);d=(c[k>>2]=ea,+g[k>>2]);b=(c[k>>2]=da,+g[k>>2]);N=d-O;K=b-P;d=O+d;b=P+b;P=(c[k>>2]=ca,+g[k>>2]);O=(c[k>>2]=aa,+g[k>>2]);R=(c[k>>2]=$,+g[k>>2]);Q=(c[k>>2]=_,+g[k>>2]);L=R-P;M=Q-O;R=P+R;Q=O+Q;O=(c[k>>2]=Z,+g[k>>2]);P=(c[k>>2]=Y,+g[k>>2]);F=(c[k>>2]=X,+g[k>>2]);e=(c[k>>2]=W,+g[k>>2]);J=F-O;n=e-P;F=O+F;e=P+e;P=(c[k>>2]=V,+g[k>>2]);O=(c[k>>2]=U,+g[k>>2]);I=P-T;f=O-S;P=T+P;O=S+O;g[p>>2]=d-R;g[q>>2]=b-Q;d=R+d;b=Q+b;g[t>>2]=F-P;g[u>>2]=e-O;F=P+F;e=O+e;O=L*0.0;M=v?M-O:O-M;L=v?-L:L;g[y>>2]=N-M;g[z>>2]=K-L;g[a>>2]=N+M;g[o>>2]=L+K;K=I*0.0;f=v?f-K:K-f;I=v?-I:I;g[A>>2]=J-f;g[B>>2]=n-I;f=J+f;n=I+n;g[r>>2]=f;g[s>>2]=n;g[H>>2]=d-F;g[G>>2]=b-e;g[E>>2]=F+d;g[D>>2]=e+b;b=f*.7071067811865476;e=n*.7071067811865476;if(v){d=b+e;b=e-b;if((d!=d|0.0!=0.0)&(b!=b|0.0!=0.0)){$n(l,f,n,.7071067811865476,-.7071067811865476);d=+h[l>>3];b=+h[l+8>>3]}}else{d=b-e;b=b+e;if((d!=d|0.0!=0.0)&(b!=b|0.0!=0.0)){$n(m,f,n,.7071067811865476,.7071067811865476);d=+h[m>>3];b=+h[m+8>>3]}}f=b;e=d;T=+g[a>>2];b=+g[o>>2];g[r>>2]=T-e;g[s>>2]=b-f;g[a>>2]=e+T;g[o>>2]=f+b;b=+g[u>>2];f=+g[t>>2];T=f*0.0;b=v?b-T:T-b;f=v?-f:f;T=+g[p>>2];e=+g[q>>2];g[t>>2]=T-b;g[u>>2]=e-f;g[p>>2]=T+b;g[q>>2]=f+e;e=+g[A>>2];f=+g[B>>2];b=e*-.7071067811865476;if(v){T=f*-.7071067811865476;d=b-T;b=b+T;if(!((d!=d|0.0!=0.0)&(b!=b|0.0!=0.0))){Q=d;R=b;S=+g[y>>2];T=+g[z>>2];O=S-Q;P=T-R;g[A>>2]=O;g[B>>2]=P;S=Q+S;T=R+T;g[y>>2]=S;g[z>>2]=T;i=C;return}$n(w,e,f,-.7071067811865476,-.7071067811865476);Q=+h[w>>3];R=+h[w+8>>3];S=+g[y>>2];T=+g[z>>2];O=S-Q;P=T-R;g[A>>2]=O;g[B>>2]=P;S=Q+S;T=R+T;g[y>>2]=S;g[z>>2]=T;i=C;return}else{d=f*.7071067811865476;b=b-d;d=e*.7071067811865476-d;if(!((b!=b|0.0!=0.0)&(d!=d|0.0!=0.0))){Q=b;R=d;S=+g[y>>2];T=+g[z>>2];O=S-Q;P=T-R;g[A>>2]=O;g[B>>2]=P;S=Q+S;T=R+T;g[y>>2]=S;g[z>>2]=T;i=C;return}$n(x,e,f,-.7071067811865476,.7071067811865476);Q=+h[x>>3];R=+h[x+8>>3];S=+g[y>>2];T=+g[z>>2];O=S-Q;P=T-R;g[A>>2]=O;g[B>>2]=P;S=Q+S;T=R+T;g[y>>2]=S;g[z>>2]=T;i=C;return}}function bl(a){a=a|0;var b=0.0,d=0.0,e=0.0,f=0.0,k=0.0,l=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0.0,Ca=0.0,Da=0.0,Ea=0.0,Fa=0.0,Ga=0.0,Ha=0.0,Ia=0.0,Ja=0.0,Ka=0.0,La=0.0,Ma=0.0,Na=0.0;Aa=i;i=i+432|0;if((i|0)>=(j|0))ba();n=Aa+424|0;p=Aa+416|0;r=Aa+408|0;t=Aa+400|0;o=Aa+392|0;q=Aa+384|0;s=Aa+376|0;u=Aa+368|0;w=Aa+304|0;y=Aa+288|0;z=Aa+360|0;B=Aa+352|0;D=Aa+272|0;F=Aa+256|0;v=Aa+240|0;x=Aa+224|0;A=Aa+344|0;C=Aa+336|0;E=Aa+208|0;G=Aa+192|0;L=Aa+176|0;R=Aa+160|0;T=Aa+144|0;Z=Aa+328|0;$=Aa+128|0;ga=Aa+112|0;ia=Aa+96|0;M=Aa+80|0;S=Aa+64|0;U=Aa+48|0;_=Aa+320|0;aa=Aa+32|0;ha=Aa+16|0;ja=Aa;wa=c[a+4>>2]|0;J=c[a+8>>2]|0;K=(c[a+12>>2]|0)==1;xa=c[wa+4>>2]|0;a=J+4|0;c[J>>2]=c[wa>>2];c[a>>2]=xa;xa=c[wa+68>>2]|0;N=J+8|0;O=J+12|0;c[N>>2]=c[wa+64>>2];c[O>>2]=xa;xa=c[wa+36>>2]|0;X=J+16|0;Y=J+20|0;c[X>>2]=c[wa+32>>2];c[Y>>2]=xa;xa=c[wa+100>>2]|0;ea=J+24|0;fa=J+28|0;c[ea>>2]=c[wa+96>>2];c[fa>>2]=xa;xa=c[wa+20>>2]|0;ma=J+32|0;na=J+36|0;c[ma>>2]=c[wa+16>>2];c[na>>2]=xa;xa=c[wa+84>>2]|0;qa=J+40|0;ra=J+44|0;c[qa>>2]=c[wa+80>>2];c[ra>>2]=xa;xa=c[wa+52>>2]|0;ua=J+48|0;va=J+52|0;c[ua>>2]=c[wa+48>>2];c[va>>2]=xa;xa=c[wa+116>>2]|0;ya=J+56|0;za=J+60|0;c[ya>>2]=c[wa+112>>2];c[za>>2]=xa;xa=c[wa+12>>2]|0;H=J+64|0;I=J+68|0;c[H>>2]=c[wa+8>>2];c[I>>2]=xa;xa=c[wa+76>>2]|0;P=J+72|0;Q=J+76|0;c[P>>2]=c[wa+72>>2];c[Q>>2]=xa;xa=c[wa+44>>2]|0;V=J+80|0;W=J+84|0;c[V>>2]=c[wa+40>>2];c[W>>2]=xa;xa=c[wa+108>>2]|0;ca=J+88|0;da=J+92|0;c[ca>>2]=c[wa+104>>2];c[da>>2]=xa;xa=c[wa+28>>2]|0;ka=J+96|0;la=J+100|0;c[ka>>2]=c[wa+24>>2];c[la>>2]=xa;xa=c[wa+92>>2]|0;oa=J+104|0;pa=J+108|0;c[oa>>2]=c[wa+88>>2];c[pa>>2]=xa;xa=c[wa+60>>2]|0;sa=J+112|0;ta=J+116|0;c[sa>>2]=c[wa+56>>2];c[ta>>2]=xa;Na=+g[wa+120>>2];Ma=+g[wa+124>>2];wa=J+120|0;xa=J+124|0;l=+g[N>>2];m=+g[O>>2];Ka=+g[J>>2];Ia=+g[a>>2];g[N>>2]=Ka-l;g[O>>2]=Ia-m;Ka=l+Ka;Ia=m+Ia;m=+g[ea>>2];l=+g[fa>>2];La=+g[X>>2];Ja=+g[Y>>2];g[ea>>2]=La-m;g[fa>>2]=Ja-l;La=m+La;Ja=l+Ja;l=+g[qa>>2];m=+g[ra>>2];Ga=+g[ma>>2];Ea=+g[na>>2];g[qa>>2]=Ga-l;g[ra>>2]=Ea-m;Ga=l+Ga;Ea=m+Ea;m=+g[ya>>2];l=+g[za>>2];Ha=+g[ua>>2];Fa=+g[va>>2];f=Ha-m;e=Fa-l;g[ya>>2]=f;g[za>>2]=e;Ha=m+Ha;Fa=l+Fa;l=+g[P>>2];m=+g[Q>>2];Ca=+g[H>>2];d=+g[I>>2];g[P>>2]=Ca-l;g[Q>>2]=d-m;Ca=l+Ca;d=m+d;m=+g[ca>>2];l=+g[da>>2];Da=+g[V>>2];Ba=+g[W>>2];g[ca>>2]=Da-m;g[da>>2]=Ba-l;Da=m+Da;Ba=l+Ba;l=+g[oa>>2];m=+g[pa>>2];b=+g[ka>>2];k=+g[la>>2];g[oa>>2]=b-l;g[pa>>2]=k-m;b=l+b;k=m+k;m=+g[sa>>2];l=+g[ta>>2];g[wa>>2]=m-Na;g[xa>>2]=l-Ma;m=Na+m;l=Ma+l;g[X>>2]=Ka-La;g[Y>>2]=Ia-Ja;g[J>>2]=La+Ka;g[a>>2]=Ja+Ia;g[ua>>2]=Ga-Ha;g[va>>2]=Ea-Fa;g[ma>>2]=Ha+Ga;g[na>>2]=Fa+Ea;g[V>>2]=Ca-Da;g[W>>2]=d-Ba;g[H>>2]=Da+Ca;g[I>>2]=Ba+d;g[sa>>2]=b-m;g[ta>>2]=k-l;g[ka>>2]=m+b;g[la>>2]=l+k;k=+g[ea>>2];l=+g[fa>>2];b=k*0.0;if(K){d=l-b;b=l*-0.0-k;if((d!=d|0.0!=0.0)&(b!=b|0.0!=0.0)){ao(n,-k,-l,0.0,1.0);d=+g[n>>2];b=+g[n+4>>2];f=+g[ya>>2];e=+g[za>>2]}Ma=+g[N>>2];Na=+g[O>>2];g[ea>>2]=Ma-d;g[fa>>2]=Na-b;g[N>>2]=d+Ma;g[O>>2]=b+Na;d=e-f*0.0;b=e*-0.0-f;if((d!=d|0.0!=0.0)&(b!=b|0.0!=0.0)){ao(p,-f,-e,0.0,1.0);d=+g[p>>2];b=+g[p+4>>2]}f=+g[qa>>2];e=+g[ra>>2];g[ya>>2]=f-d;g[za>>2]=e-b;g[qa>>2]=d+f;g[ra>>2]=b+e;e=+g[ca>>2];f=+g[da>>2];d=f-e*0.0;b=f*-0.0-e;if((d!=d|0.0!=0.0)&(b!=b|0.0!=0.0)){ao(r,-e,-f,0.0,1.0);d=+g[r>>2];b=+g[r+4>>2]}f=+g[P>>2];e=+g[Q>>2];g[ca>>2]=f-d;g[da>>2]=e-b;g[P>>2]=d+f;g[Q>>2]=b+e;d=+g[wa>>2];e=+g[xa>>2];f=e-d*0.0;b=e*-0.0-d;if((f!=f|0.0!=0.0)&(b!=b|0.0!=0.0)){ao(t,-d,-e,0.0,1.0);f=+g[t>>2];b=+g[t+4>>2]}Na=+g[oa>>2];e=+g[pa>>2];g[wa>>2]=Na-f;g[xa>>2]=e-b;e=b+e;f=f+Na}else{d=b-l;b=k+l*0.0;if((d!=d|0.0!=0.0)&(b!=b|0.0!=0.0)){ao(o,k,l,0.0,1.0);d=+g[o>>2];b=+g[o+4>>2];f=+g[ya>>2];e=+g[za>>2]}Ma=+g[N>>2];Na=+g[O>>2];g[ea>>2]=Ma-d;g[fa>>2]=Na-b;g[N>>2]=d+Ma;g[O>>2]=b+Na;d=f*0.0-e;b=f+e*0.0;if((d!=d|0.0!=0.0)&(b!=b|0.0!=0.0)){ao(q,f,e,0.0,1.0);d=+g[q>>2];b=+g[q+4>>2]}f=+g[qa>>2];e=+g[ra>>2];g[ya>>2]=f-d;g[za>>2]=e-b;g[qa>>2]=d+f;g[ra>>2]=b+e;e=+g[ca>>2];f=+g[da>>2];d=e*0.0-f;b=e+f*0.0;if((d!=d|0.0!=0.0)&(b!=b|0.0!=0.0)){ao(s,e,f,0.0,1.0);d=+g[s>>2];b=+g[s+4>>2]}f=+g[P>>2];e=+g[Q>>2];g[ca>>2]=f-d;g[da>>2]=e-b;g[P>>2]=d+f;g[Q>>2]=b+e;d=+g[wa>>2];e=+g[xa>>2];f=d*0.0-e;b=d+e*0.0;if((f!=f|0.0!=0.0)&(b!=b|0.0!=0.0)){ao(u,d,e,0.0,1.0);f=+g[u>>2];b=+g[u+4>>2]}Na=+g[oa>>2];e=+g[pa>>2];g[wa>>2]=Na-f;g[xa>>2]=e-b;e=b+e;f=f+Na}g[oa>>2]=f;g[pa>>2]=e;l=+g[ma>>2];m=+g[na>>2];b=+g[J>>2];k=+g[a>>2];g[ma>>2]=b-l;g[na>>2]=k-m;g[J>>2]=l+b;g[a>>2]=m+k;k=+g[ka>>2];m=+g[la>>2];b=+g[H>>2];l=+g[I>>2];g[ka>>2]=b-k;g[la>>2]=l-m;g[H>>2]=k+b;g[I>>2]=m+l;l=+g[qa>>2];m=+g[ra>>2];b=l*.70710677;k=m*.70710677;if(K){d=b+k;b=k-b;if((d!=d|0.0!=0.0)&(b!=b|0.0!=0.0)){$n(w,l,m,.70710677,-.70710677);d=+h[w>>3];b=+h[w+8>>3];f=+g[oa>>2];e=+g[pa>>2]}Ma=d;Na=b;d=+g[N>>2];b=+g[O>>2];g[qa>>2]=d-Ma;g[ra>>2]=b-Na;g[N>>2]=Ma+d;g[O>>2]=Na+b;b=f*.70710677;Na=e*.70710677;d=b+Na;b=Na-b;if((d!=d|0.0!=0.0)&(b!=b|0.0!=0.0)){$n(y,f,e,.70710677,-.70710677);d=+h[y>>3];b=+h[y+8>>3]}Na=d;f=b;d=+g[P>>2];e=+g[Q>>2];g[oa>>2]=d-Na;g[pa>>2]=e-f;g[P>>2]=Na+d;g[Q>>2]=f+e;e=+g[ua>>2];f=+g[va>>2];d=f-e*0.0;b=f*-0.0-e;if((d!=d|0.0!=0.0)&(b!=b|0.0!=0.0)){ao(z,-e,-f,0.0,1.0);d=+g[z>>2];b=+g[z+4>>2]}f=+g[X>>2];e=+g[Y>>2];g[ua>>2]=f-d;g[va>>2]=e-b;g[X>>2]=d+f;g[Y>>2]=b+e;e=+g[sa>>2];f=+g[ta>>2];d=f-e*0.0;b=f*-0.0-e;if((d!=d|0.0!=0.0)&(b!=b|0.0!=0.0)){ao(B,-e,-f,0.0,1.0);d=+g[B>>2];b=+g[B+4>>2]}f=+g[V>>2];e=+g[W>>2];g[sa>>2]=f-d;g[ta>>2]=e-b;g[V>>2]=d+f;g[W>>2]=b+e;e=+g[ya>>2];f=+g[za>>2];Na=e*-.70710677;b=f*-.70710677;d=Na-b;b=Na+b;if((d!=d|0.0!=0.0)&(b!=b|0.0!=0.0)){$n(D,e,f,-.70710677,-.70710677);d=+h[D>>3];b=+h[D+8>>3]}f=b;Na=+g[ea>>2];e=+g[fa>>2];g[ya>>2]=Na-d;g[za>>2]=e-f;g[ea>>2]=d+Na;g[fa>>2]=f+e;e=+g[wa>>2];f=+g[xa>>2];Na=e*-.70710677;b=f*-.70710677;d=Na-b;b=Na+b;if((d!=d|0.0!=0.0)&(b!=b|0.0!=0.0)){$n(F,e,f,-.70710677,-.70710677);d=+h[F>>3];b=+h[F+8>>3]}Na=d;Ma=b;d=+g[ca>>2];b=+g[da>>2];g[wa>>2]=d-Na;g[xa>>2]=b-Ma;b=Ma+b;d=Na+d}else{d=b-k;b=b+k;if((d!=d|0.0!=0.0)&(b!=b|0.0!=0.0)){$n(v,l,m,.70710677,.70710677);d=+h[v>>3];b=+h[v+8>>3];f=+g[oa>>2];e=+g[pa>>2]}Ma=d;d=+g[N>>2];Na=+g[O>>2];g[qa>>2]=d-Ma;g[ra>>2]=Na-b;g[N>>2]=Ma+d;g[O>>2]=b+Na;Na=f*.70710677;b=e*.70710677;d=Na-b;b=Na+b;if((d!=d|0.0!=0.0)&(b!=b|0.0!=0.0)){$n(x,f,e,.70710677,.70710677);d=+h[x>>3];b=+h[x+8>>3]}Na=d;f=b;d=+g[P>>2];e=+g[Q>>2];g[oa>>2]=d-Na;g[pa>>2]=e-f;g[P>>2]=Na+d;g[Q>>2]=f+e;e=+g[ua>>2];f=+g[va>>2];d=e*0.0-f;b=e+f*0.0;if((d!=d|0.0!=0.0)&(b!=b|0.0!=0.0)){ao(A,e,f,0.0,1.0);d=+g[A>>2];b=+g[A+4>>2]}f=+g[X>>2];e=+g[Y>>2];g[ua>>2]=f-d;g[va>>2]=e-b;g[X>>2]=d+f;g[Y>>2]=b+e;e=+g[sa>>2];f=+g[ta>>2];d=e*0.0-f;b=e+f*0.0;if((d!=d|0.0!=0.0)&(b!=b|0.0!=0.0)){ao(C,e,f,0.0,1.0);d=+g[C>>2];b=+g[C+4>>2]}f=+g[V>>2];e=+g[W>>2];g[sa>>2]=f-d;g[ta>>2]=e-b;g[V>>2]=d+f;g[W>>2]=b+e;e=+g[ya>>2];f=+g[za>>2];b=f*.70710677;d=e*-.70710677-b;b=e*.70710677-b;if((d!=d|0.0!=0.0)&(b!=b|0.0!=0.0)){$n(E,e,f,-.70710677,.70710677);d=+h[E>>3];b=+h[E+8>>3]}f=b;b=+g[ea>>2];e=+g[fa>>2];g[ya>>2]=b-d;g[za>>2]=e-f;g[ea>>2]=d+b;g[fa>>2]=f+e;e=+g[wa>>2];f=+g[xa>>2];b=f*.70710677;d=e*-.70710677-b;b=e*.70710677-b;if((d!=d|0.0!=0.0)&(b!=b|0.0!=0.0)){$n(G,e,f,-.70710677,.70710677);d=+h[G>>3];b=+h[G+8>>3]}Na=d;Ma=b;d=+g[ca>>2];b=+g[da>>2];g[wa>>2]=d-Na;g[xa>>2]=b-Ma;b=Ma+b;d=Na+d}g[ca>>2]=d;g[da>>2]=b;d=+g[H>>2];l=+g[I>>2];b=+g[J>>2];k=+g[a>>2];g[H>>2]=b-d;g[I>>2]=k-l;g[J>>2]=d+b;g[a>>2]=l+k;k=+g[P>>2];l=+g[Q>>2];b=k*.9238795;d=l*.38268346;e=k*.38268346;f=l*.9238795;if(K){d=b+d;b=f-e;if((d!=d|0.0!=0.0)&(b!=b|0.0!=0.0)){$n(L,k,l,.9238795,-.38268346);d=+h[L>>3];b=+h[L+8>>3]}Na=d;f=b;b=+g[N>>2];e=+g[O>>2];g[P>>2]=b-Na;g[Q>>2]=e-f;g[N>>2]=Na+b;g[O>>2]=f+e;e=+g[V>>2];f=+g[W>>2];b=e*.70710677;Na=f*.70710677;d=b+Na;b=Na-b;if((d!=d|0.0!=0.0)&(b!=b|0.0!=0.0)){$n(R,e,f,.70710677,-.70710677);d=+h[R>>3];b=+h[R+8>>3]}Na=d;f=b;d=+g[X>>2];e=+g[Y>>2];g[V>>2]=d-Na;g[W>>2]=e-f;g[X>>2]=Na+d;g[Y>>2]=f+e;e=+g[ca>>2];f=+g[da>>2];d=e*.38268343+f*.9238795;b=f*.38268343-e*.9238795;if((d!=d|0.0!=0.0)&(b!=b|0.0!=0.0)){$n(T,e,f,.38268343,-.9238795);d=+h[T>>3];b=+h[T+8>>3]}Na=d;f=b;d=+g[ea>>2];e=+g[fa>>2];g[ca>>2]=d-Na;g[da>>2]=e-f;g[ea>>2]=Na+d;g[fa>>2]=f+e;e=+g[ka>>2];f=+g[la>>2];d=f-e*0.0;b=f*-0.0-e;if((d!=d|0.0!=0.0)&(b!=b|0.0!=0.0)){ao(Z,-e,-f,0.0,1.0);d=+g[Z>>2];b=+g[Z+4>>2]}f=+g[ma>>2];e=+g[na>>2];g[ka>>2]=f-d;g[la>>2]=e-b;g[ma>>2]=d+f;g[na>>2]=b+e;e=+g[oa>>2];f=+g[pa>>2];d=f*.92387956-e*.3826834;b=f*-.3826834-e*.92387956;if((d!=d|0.0!=0.0)&(b!=b|0.0!=0.0)){$n($,e,f,-.3826834,-.92387956);d=+h[$>>3];b=+h[$+8>>3]}f=b;Na=+g[qa>>2];e=+g[ra>>2];g[oa>>2]=Na-d;g[pa>>2]=e-f;g[qa>>2]=d+Na;g[ra>>2]=f+e;e=+g[sa>>2];f=+g[ta>>2];Na=e*-.70710677;b=f*-.70710677;d=Na-b;b=Na+b;if((d!=d|0.0!=0.0)&(b!=b|0.0!=0.0)){$n(ga,e,f,-.70710677,-.70710677);d=+h[ga>>3];b=+h[ga+8>>3]}Na=d;f=b;d=+g[ua>>2];e=+g[va>>2];g[sa>>2]=d-Na;g[ta>>2]=e-f;g[ua>>2]=Na+d;g[va>>2]=f+e;e=+g[wa>>2];f=+g[xa>>2];d=f*.38268349-e*.9238795;b=f*-.9238795-e*.38268349;if((d!=d|0.0!=0.0)&(b!=b|0.0!=0.0)){$n(ia,e,f,-.9238795,-.38268349);d=+h[ia>>3];b=+h[ia+8>>3]}La=d;Ka=b;Ma=+g[ya>>2];Na=+g[za>>2];g[wa>>2]=Ma-La;g[xa>>2]=Na-Ka;Na=Ka+Na;Ma=La+Ma;g[ya>>2]=Ma;g[za>>2]=Na;i=Aa;return}else{d=b-d;b=e+f;if((d!=d|0.0!=0.0)&(b!=b|0.0!=0.0)){$n(M,k,l,.9238795,.38268346);d=+h[M>>3];b=+h[M+8>>3]}f=b;Na=+g[N>>2];e=+g[O>>2];g[P>>2]=Na-d;g[Q>>2]=e-f;g[N>>2]=d+Na;g[O>>2]=f+e;e=+g[V>>2];f=+g[W>>2];Na=e*.70710677;b=f*.70710677;d=Na-b;b=Na+b;if((d!=d|0.0!=0.0)&(b!=b|0.0!=0.0)){$n(S,e,f,.70710677,.70710677);d=+h[S>>3];b=+h[S+8>>3]}Na=d;f=b;d=+g[X>>2];e=+g[Y>>2];g[V>>2]=d-Na;g[W>>2]=e-f;g[X>>2]=Na+d;g[Y>>2]=f+e;e=+g[ca>>2];f=+g[da>>2];d=e*.38268343-f*.9238795;b=e*.9238795+f*.38268343;if((d!=d|0.0!=0.0)&(b!=b|0.0!=0.0)){$n(U,e,f,.38268343,.9238795);d=+h[U>>3];b=+h[U+8>>3]}Na=d;f=b;d=+g[ea>>2];e=+g[fa>>2];g[ca>>2]=d-Na;g[da>>2]=e-f;g[ea>>2]=Na+d;g[fa>>2]=f+e;e=+g[ka>>2];f=+g[la>>2];d=e*0.0-f;b=e+f*0.0;if((d!=d|0.0!=0.0)&(b!=b|0.0!=0.0)){ao(_,e,f,0.0,1.0);d=+g[_>>2];b=+g[_+4>>2]}f=+g[ma>>2];e=+g[na>>2];g[ka>>2]=f-d;g[la>>2]=e-b;g[ma>>2]=d+f;g[na>>2]=b+e;e=+g[oa>>2];f=+g[pa>>2];d=e*-.3826834-f*.92387956;b=e*.92387956-f*.3826834;if((d!=d|0.0!=0.0)&(b!=b|0.0!=0.0)){$n(aa,e,f,-.3826834,.92387956);d=+h[aa>>3];b=+h[aa+8>>3]}f=b;b=+g[qa>>2];e=+g[ra>>2];g[oa>>2]=b-d;g[pa>>2]=e-f;g[qa>>2]=d+b;g[ra>>2]=f+e;e=+g[sa>>2];f=+g[ta>>2];b=f*.70710677;d=e*-.70710677-b;b=e*.70710677-b;if((d!=d|0.0!=0.0)&(b!=b|0.0!=0.0)){$n(ha,e,f,-.70710677,.70710677);d=+h[ha>>3];b=+h[ha+8>>3]}Na=d;f=b;d=+g[ua>>2];e=+g[va>>2];g[sa>>2]=d-Na;g[ta>>2]=e-f;g[ua>>2]=Na+d;g[va>>2]=f+e;e=+g[wa>>2];f=+g[xa>>2];d=e*-.9238795-f*.38268349;b=e*.38268349-f*.9238795;if((d!=d|0.0!=0.0)&(b!=b|0.0!=0.0)){$n(ja,e,f,-.9238795,.38268349);d=+h[ja>>3];b=+h[ja+8>>3]}La=d;Ka=b;Ma=+g[ya>>2];Na=+g[za>>2];g[wa>>2]=Ma-La;g[xa>>2]=Na-Ka;Na=Ka+Na;Ma=La+Ma;g[ya>>2]=Ma;g[za>>2]=Na;i=Aa;return}}function cl(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,i=0.0,j=0,k=0;d=c[a>>2]|0;if(!d)return;e=a+44|0;f=a+4|0;a=a+8|0;b=0;do{Il(c[(c[e>>2]|0)+(b<<2)>>2]|0,(c[f>>2]|0)+8|0,(c[a>>2]|0)+(b<<3)|0);k=c[f>>2]|0;h=c[a>>2]|0;j=h+(b<<3)|0;h=h+(b<<3)+4|0;i=+g[k+4>>2]+ +g[h>>2];g[j>>2]=+g[k>>2]+ +g[j>>2];g[h>>2]=i;b=b+1|0}while((b|0)!=(d|0));return}function dl(a){a=a|0;var b=0,d=0;switch(c[a+20>>2]|0){case -1:case 1:{switch(c[a+24>>2]|0){case 5:{b=c[a+40>>2]|0;if(b|0)Yp(b);d=a+44|0;b=c[d>>2]|0;if(b|0){if(c[a>>2]|0){Hl(c[b>>2]|0);if((c[a>>2]|0)>>>0>1){b=1;do{Hl(c[(c[d>>2]|0)+(b<<2)>>2]|0);b=b+1|0}while(b>>>0<(c[a>>2]|0)>>>0)}b=c[d>>2]|0}Yp(b)}Yp(a);return}case 1:{Yp(c[a+44>>2]|0);Yp(c[a+48>>2]|0);Yp(a);return}case 2:{dl(c[a+64>>2]|0);dl(c[a+68>>2]|0);Yp(c[a+52>>2]|0);Yp(c[a+56>>2]|0);Yp(c[a+48>>2]|0);Yp(c[a+60>>2]|0);Yp(a);return}case 3:{Yp(c[a+40>>2]|0);Yp(c[a+44>>2]|0);Yp(c[a+48>>2]|0);Yp(c[a+52>>2]|0);dl(c[a+56>>2]|0);dl(c[a+60>>2]|0);Yp(a);return}case 4:{Yp(c[a+44>>2]|0);Yp(c[a+48>>2]|0);Yp(c[a+52>>2]|0);Yp(c[a+56>>2]|0);dl(c[a+60>>2]|0);dl(c[a+64>>2]|0);Yp(a);return}default:{Qp(41068,54,1,c[2348]|0)|0;kb(1)}}break}case 23:case 22:case 21:case 20:case 13:case 12:case 11:case 10:{Yp(a);return}case 31:case 30:return;default:{Qp(41123,52,1,c[2348]|0)|0;kb(1)}}}function el(a){a=a|0;qb[c[a+28>>2]&31](a);return}function fl(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;d=Mk(a,b,d,e,f)|0;qb[c[d+28>>2]&31](d);dl(d);return}function gl(a){a=a|0;if(!a){Qp(41176,58,1,c[2348]|0)|0;a=0;return a|0}if((a|1|0)==17|((a|0)==13|(a>>>0<9|(a|0)==11))){a=5;return a|0}if(((a>>>31)+((a>>>30&1)+((a>>>29&1)+((a>>>28&1)+((a>>>27&1)+((a>>>26&1)+((a>>>25&1)+((a>>>24&1)+((a>>>23&1)+((a>>>22&1)+((a>>>21&1)+((a>>>20&1)+((a>>>19&1)+((a>>>18&1)+((a>>>17&1)+((a>>>16&1)+((a>>>15&1)+((a>>>14&1)+((a>>>13&1)+((a>>>12&1)+((a>>>11&1)+((a>>>10&1)+((a>>>9&1)+((a>>>8&1)+((a>>>7&1)+((a>>>6&1)+((a>>>5&1)+((a>>>4&1)+((a>>>3&1)+((a>>>2&1)+((a>>>1&1)+(a&1)))))))))))))))))))))))))))))))|0)==1){a=2;return a|0}if(!(Cl(a)|0)){a=2;return a|0}a=a+-1|0;a=((a>>>31)+((a>>>30&1)+((a>>>29&1)+((a>>>28&1)+((a>>>27&1)+((a>>>26&1)+((a>>>25&1)+((a>>>24&1)+((a>>>23&1)+((a>>>22&1)+((a>>>21&1)+((a>>>20&1)+((a>>>19&1)+((a>>>18&1)+((a>>>17&1)+((a>>>16&1)+((a>>>15&1)+((a>>>14&1)+((a>>>13&1)+((a>>>12&1)+((a>>>11&1)+((a>>>10&1)+((a>>>9&1)+((a>>>8&1)+((a>>>7&1)+((a>>>6&1)+((a>>>5&1)+((a>>>4&1)+((a>>>3&1)+((a>>>2&1)+((a>>>1&1)+(a&1)))))))))))))))))))))))))))))))|0)==1?3:4;return a|0}function hl(a,b){a=a|0;b=b|0;var c=0,d=0;if(!b){b=0;return b|0}else{c=a;a=0;d=0}while(1){a=a<<1|c&1;d=d+1|0;if((d|0)==(b|0))break;else c=c>>>1}return a|0}function il(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0,h=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0,p=0,q=0,r=0;q=i;i=i+16|0;if((i|0)>=(j|0))ba();p=q;jl(a+1|0,c);e=+O(+(+(((a<<1)+-1|0)>>>0)*.6931471824645996));f=(a|0)==0;if(f){g[d>>2]=1.0;g[d+4>>2]=0.0;i=q;return}else b=0;do{r=c+(b<<3)|0;o=c+(b<<3)+4|0;n=+g[o>>2]/e;g[r>>2]=+g[r>>2]/e;g[o>>2]=n;b=b+1|0}while((b|0)!=(a|0));o=d+4|0;g[d>>2]=1.0;g[o>>2]=0.0;if(f){i=q;return}b=p+4|0;e=1.0;h=0.0;f=0;do{k=+g[c+(f<<3)>>2];l=+g[c+(f<<3)+4>>2];m=k*e-l*h;n=l*e+k*h;if((m!=m|0.0!=0.0)&(n!=n|0.0!=0.0)){ao(p,e,h,k,l);e=+g[p>>2];h=+g[b>>2]}else{e=m;h=n}g[d>>2]=e;g[o>>2]=h;f=f+1|0}while((f|0)!=(a|0));i=q;return}function jl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,k=0,l=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;I=i;i=i+64|0;if((i|0)>=(j|0))ba();E=I+56|0;e=I+48|0;f=I+40|0;v=I+24|0;y=I+16|0;D=I+32|0;F=I+8|0;G=I;z=i;i=i+((1*(a<<3)|0)+15&-16)|0;if((i|0)>=(j|0))ba();A=i;i=i+((1*(a<<3)|0)+15&-16)|0;if((i|0)>=(j|0))ba();H=i;i=i+((1*(a<<3)|0)+15&-16)|0;if((i|0)>=(j|0))ba();a:do if(a>>>0>1){h=A+4|0;k=e+4|0;l=z+4|0;q=v+4|0;r=f+4|0;s=H+4|0;t=y+4|0;B=1;C=1;while(1){u=(B+(C&1)|0)>>>1;w=B&1;d=w+B|0;x=d>>>1;switch(B|0){case 1:{g[A>>2]=-1.0;g[h>>2]=0.0;g[H>>2]=-1.0;g[s>>2]=0.0;break}case 2:{g[A>>2]=-1.0;g[h>>2]=0.0;g[H>>2]=-1.5;g[s>>2]=.8660253882408142;break}default:{p=+g[A>>2];if(!w){n=+g[h>>2];o=p*2.0-n*0.0;m=p*0.0+n*2.0;if((o!=o|0.0!=0.0)&(m!=m|0.0!=0.0)){ao(e,2.0,0.0,p,n);o=+g[e>>2];m=+g[k>>2]}J=c[l>>2]|0;c[v>>2]=c[z>>2];c[q>>2]=J;c[E>>2]=c[v>>2];c[E+4>>2]=c[v+4>>2];Ko(f,E);n=m-+g[r>>2];m=o-+g[f>>2]}else{n=0.0;m=p*2.0-+g[z>>2]}g[H>>2]=m;g[s>>2]=n;if(d>>>0>3){d=1;do{J=d-w|0;o=+g[A+(J<<3)>>2];p=+g[A+(J<<3)+4>>2];n=o*2.0-p*0.0;m=o*0.0+p*2.0;if((n!=n|0.0!=0.0)&(m!=m|0.0!=0.0)){ao(y,2.0,0.0,o,p);n=+g[y>>2];m=+g[t>>2]}J=d+-1|0;p=m-+g[z+(J<<3)+4>>2];g[H+(d<<3)>>2]=n-+g[z+(J<<3)>>2];g[H+(d<<3)+4>>2]=p;d=d+1|0}while(d>>>0>>0)}if(x|0){d=0;do{K=H+(d<<3)|0;J=H+(d<<3)+4|0;kl(B,+g[K>>2],+g[J>>2],E,D);p=+g[D>>2];g[K>>2]=+g[E>>2]+p*0.0;g[J>>2]=p;d=d+1|0}while((d|0)!=(u|0))}}}fq(z|0,A|0,x-w<<3|0)|0;fq(A|0,H|0,x<<3|0)|0;B=B+1|0;if((B|0)==(a|0))break a;else C=C^1}}while(0);d=a&1;e=(a-d|0)>>>1;if(e|0){f=G+4|0;h=F+4|0;k=a>>>1;l=0;do{J=e-l+-1|0;D=c[H+(J<<3)>>2]|0;J=c[H+(J<<3)+4>>2]|0;K=l<<1;c[b+(K<<3)>>2]=D;c[b+(K<<3)+4>>2]=J;c[G>>2]=D;c[f>>2]=J;c[E>>2]=c[G>>2];c[E+4>>2]=c[G+4>>2];Ko(F,E);J=c[h>>2]|0;K=K|1;c[b+(K<<3)>>2]=c[F>>2];c[b+(K<<3)+4>>2]=J;l=l+1|0}while((l|0)!=(k|0))}if(!d){i=I;return}J=c[H+4>>2]|0;K=a+-1|0;c[b+(K<<3)>>2]=c[H>>2];c[b+(K<<3)+4>>2]=J;i=I;return}function kl(a,b,d,e,f){a=a|0;b=+b;d=+d;e=e|0;f=f|0;var h=0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0,p=0.0,q=0.0,r=0.0,s=0.0,t=0;if(a>>>0<2){Qp(41235,53,1,c[2348]|0)|0;kb(1)}t=0;while(1){k=b*b-d*d;n=b*2.0*d;o=2;p=1.0;q=b+1.0;r=0.0;s=d;while(1){l=+(((o<<1)+-1|0)>>>0);m=q*l+k*p-n*r;l=n*p+(k*r+s*l);h=o>>>0>>0;i=h?l:s;j=h?m:q;o=o+1|0;if(o>>>0>a>>>0)break;else{p=h?q:p;q=j;r=h?s:r;s=i}}k=d*i+(m-b*j);i=l-b*i-d*j;j=i*i+k*k;if(j==0.0){h=8;break}b=b+-(l*i+m*k)/j;d=d+-(l*k-m*i)/j;t=t+1|0;if(t>>>0>=50){h=8;break}}if((h|0)==8){g[e>>2]=b;g[f>>2]=d;return}}function ll(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0,k=0.0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0.0;w=i;i=i+48|0;if((i|0)>=(j|0))ba();b=w+32|0;f=w+24|0;h=w+16|0;q=w+8|0;r=w;v=a&1;if((a-v|0)>>>0<2)b=0;else{s=a+-1|0;k=+(a<<1>>>0);l=h+4|0;m=f+4|0;n=r+4|0;o=q+4|0;p=a>>>1;t=0;u=0;while(1){t=t+1|0;z=+((s+(t<<1)|0)>>>0)*3.141592653589793/k;g[h>>2]=z*0.0;g[l>>2]=z;c[b>>2]=c[h>>2];c[b+4>>2]=c[h+4>>2];Io(f,b);y=c[m>>2]|0;x=u|1;c[d+(u<<3)>>2]=c[f>>2];c[d+(u<<3)+4>>2]=y;g[r>>2]=z*-0.0;g[n>>2]=-z;c[b>>2]=c[r>>2];c[b+4>>2]=c[r+4>>2];Io(q,b);y=c[o>>2]|0;c[d+(x<<3)>>2]=c[q>>2];c[d+(x<<3)+4>>2]=y;if((t|0)==(p|0))break;else u=u+2|0}b=p<<1}if(v){g[d+(b<<3)>>2]=-1.0;g[d+(b<<3)+4>>2]=0.0;b=b|1}if((b|0)==(a|0)){g[e>>2]=1.0;g[e+4>>2]=0.0;i=w;return}else Ha(41363,41289,62,41313)}function ml(a,b,c,d,e){a=a|0;b=+b;c=c|0;d=d|0;e=e|0;var f=0,h=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0,v=0.0;s=i;i=i+16|0;if((i|0)>=(j|0))ba();r=s;m=b*b;k=+O(+(1.0/m+1.0));b=1.0/b;l=1.0/+(a>>>0);n=+P(+(b+k),+l);l=+P(+(k-b),+l);b=(n+l)*.5;l=(n-l)*.5;q=a&1;if((a-q|0)>>>0<2)c=0;else{c=a+-1|0;h=+(a<<1>>>0);k=b*0.0;f=a>>>1;o=0;p=0;while(1){o=o+1|0;n=+((c+(o<<1)|0)>>>0)*3.141592653589793/h;v=l*+Q(+n);n=+R(+n);u=k*n;n=b*n;t=p|1;g[d+(p<<3)>>2]=v-u;g[d+(p<<3)+4>>2]=-n;g[d+(t<<3)>>2]=v+u;g[d+(t<<3)+4>>2]=n;if((o|0)==(f|0))break;else p=p+2|0}c=f<<1}f=(q|0)!=0;if(f){g[d+(c<<3)>>2]=-l;g[d+(c<<3)+4>>2]=0.0;c=c|1}if((c|0)!=(a|0))Ha(41363,41326,85,41350);if(f)b=1.0;else b=1.0/+O(+(m+1.0));f=e+4|0;g[e>>2]=b;g[f>>2]=0.0;if(!a){i=s;return}o=r+4|0;h=0.0;c=0;do{k=+g[d+(c<<3)>>2];l=+g[d+(c<<3)+4>>2];m=k*b-l*h;n=l*b+k*h;if((m!=m|0.0!=0.0)&(n!=n|0.0!=0.0)){ao(r,b,h,k,l);b=+g[r>>2];h=+g[o>>2]}else{b=m;h=n}g[e>>2]=b;g[f>>2]=h;c=c+1|0}while((c|0)!=(a|0));i=s;return}function nl(a,b,d,e,f){a=a|0;b=+b;d=d|0;e=e|0;f=f|0;var h=0,l=0.0,m=0,n=0,o=0,p=0,q=0.0,r=0.0,s=0.0,t=0.0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0.0,I=0.0;E=i;i=i+48|0;if((i|0)>=(j|0))ba();v=E+40|0;w=E+32|0;y=E+24|0;z=E+16|0;B=E+8|0;D=E;q=+O(+(1.0/(b*b)+1.0));b=1.0/b;r=+(a>>>0);s=r;r=1.0/r;t=+P(+(b+q),+r);r=+P(+(q-b),+r);b=(t+r)*.5;r=(t-r)*.5;x=a&1;A=(a-x|0)>>>1;C=(A|0)==0;if(C)h=0;else{h=a+-1|0;l=+(a<<1>>>0);q=b*0.0;m=v+4|0;n=w+4|0;o=a>>>1;p=0;u=0;while(1){p=p+1|0;t=+((h+(p<<1)|0)>>>0)*3.141592653589793/l;I=r*+Q(+t);t=+R(+t);H=q*t;t=b*t;_n(v,1.0,0.0,I-H,-t);G=c[m>>2]|0;F=u|1;c[e+(u<<3)>>2]=c[v>>2];c[e+(u<<3)+4>>2]=G;_n(w,1.0,0.0,I+H,t);G=c[n>>2]|0;c[e+(F<<3)>>2]=c[w>>2];c[e+(F<<3)+4>>2]=G;if((p|0)==(o|0))break;else u=u+2|0}h=o<<1}if(x){g[e+(h<<3)>>2]=-1.0/r;g[e+(h<<3)+4>>2]=0.0;h=h|1}if((h|0)!=(a|0))Ha(41363,41369,84,41393);if(C)p=0;else{h=y+4|0;m=z+4|0;n=a>>>1;o=0;p=0;while(1){o=o+1|0;I=+Q(+(+(((o<<1)+-1|0)>>>0)*1.5707963267948966/s));H=I*0.0;_n(y,-1.0,0.0,H,I);F=c[h>>2]|0;G=p|1;c[d+(p<<3)>>2]=c[y>>2];c[d+(p<<3)+4>>2]=F;_n(z,1.0,0.0,H,I);F=c[m>>2]|0;c[d+(G<<3)>>2]=c[z>>2];c[d+(G<<3)+4>>2]=F;if((o|0)==(n|0))break;else p=p+2|0}p=n<<1}if((p|0)!=(A<<1|0))Ha(41406,41369,95,41393);o=f+4|0;g[f>>2]=1.0;g[o>>2]=0.0;if(!a){b=0.0;l=1.0}else{h=B+4|0;l=1.0;b=0.0;m=0;do{q=+g[e+(m<<3)>>2];r=+g[e+(m<<3)+4>>2];s=q*l-r*b;t=r*l+q*b;if((s!=s|0.0!=0.0)&(t!=t|0.0!=0.0)){ao(B,l,b,q,r);l=+g[B>>2];b=+g[h>>2]}else{l=s;b=t}g[f>>2]=l;g[o>>2]=b;m=m+1|0}while((m|0)!=(a|0))}if(C){i=E;return}n=D+4|0;m=0;while(1){_n(D,l,b,+g[d+(m<<3)>>2],+g[d+(m<<3)+4>>2]);G=c[D>>2]|0;h=c[n>>2]|0;c[f>>2]=G;c[o>>2]=h;m=m+1|0;l=(c[k>>2]=G,+g[k>>2]);if(m>>>0>=p>>>0)break;else b=(c[k>>2]=h,+g[k>>2])}i=E;return}function ol(a,b,c,d){a=+a;b=b|0;c=c|0;d=d|0;var e=0.0,f=0,h=0,k=0,l=0,m=0.0,n=0.0,o=0;o=i;n=+O(+(1.0-a*a));if(a>.9999998807907104){m=+Y(+(n*.25));m=n*(n*((-1.0-m)*.25))-m}else{l=Wa()|0;k=i;i=i+((1*(b<<2)|0)+15&-16)|0;if((i|0)>=(j|0))ba();f=(b|0)==0;if(!f){h=0;e=a;do{m=+O(+(1.0-e*e));e=(1.0-m)/(m+1.0);g[k+(h<<2)>>2]=e;h=h+1|0}while((h|0)!=(b|0));if(!f){e=1.5707963705062866;f=0;do{e=e*(+g[k+(f<<2)>>2]+1.0);f=f+1|0}while((f|0)!=(b|0))}else e=1.5707963705062866}else e=1.5707963705062866;Ga(l|0);m=e}if(a<3.9999998989515007e-04){n=+Y(+(a*.25));n=(-1.0-n)*.25*a*a-n;g[c>>2]=m;g[d>>2]=n;i=o;return}l=Wa()|0;k=i;i=i+((1*(b<<2)|0)+15&-16)|0;if((i|0)>=(j|0))ba();f=(b|0)==0;if(!f){h=0;e=n;do{n=+O(+(1.0-e*e));e=(1.0-n)/(n+1.0);g[k+(h<<2)>>2]=e;h=h+1|0}while((h|0)!=(b|0));if(!f){e=1.5707963705062866;f=0;do{e=e*(+g[k+(f<<2)>>2]+1.0);f=f+1|0}while((f|0)!=(b|0))}else e=1.5707963705062866}else e=1.5707963705062866;Ga(l|0);n=e;g[c>>2]=m;g[d>>2]=n;i=o;return}function pl(a,b,d,e){a=a|0;b=b|0;d=+d;e=e|0;var f=0.0,h=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0;s=i;i=i+48|0;if((i|0)>=(j|0))ba();o=s+32|0;p=s+24|0;t=s+16|0;q=s+8|0;r=s;h=+g[b+4>>2]*3.141592653589793*.5;g[t>>2]=+g[b>>2]*3.141592653589793*.5;g[t+4>>2]=h;c[o>>2]=c[t>>2];c[o+4>>2]=c[t+4>>2];Co(p,o);h=+g[p>>2];f=+g[p+4>>2];p=i;i=i+((1*(e<<2)|0)+15&-16)|0;if((i|0)>=(j|0))ba();if(!e){m=h;n=f;t=a+4|0;g[a>>2]=m;g[t>>2]=n;i=s;return}else b=0;do{n=+O(+(1.0-d*d));d=(1.0-n)/(n+1.0);g[p+(b<<2)>>2]=d;b=b+1|0}while((b|0)!=(e|0));if(!e){m=h;n=f;t=a+4|0;g[a>>2]=m;g[t>>2]=n;i=s;return}b=q+4|0;o=r+4|0;do{e=e+-1|0;m=+g[p+(e<<2)>>2];n=m+1.0;l=h*m;m=f*m;k=h*l-f*m;d=f*l+h*m;if((k!=k|0.0!=0.0)&(d!=d|0.0!=0.0)){ao(q,l,m,h,f);k=+g[q>>2];d=+g[b>>2]}_n(r,h*n,f*n,k+1.0,d+0.0);h=+g[r>>2];f=+g[o>>2]}while((e|0)!=0);t=a+4|0;g[a>>2]=h;g[t>>2]=f;i=s;return}function ql(a,b,d,e){a=a|0;b=b|0;d=+d;e=e|0;var f=0.0,h=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0;s=i;i=i+48|0;if((i|0)>=(j|0))ba();o=s+32|0;p=s+24|0;t=s+16|0;q=s+8|0;r=s;h=+g[b+4>>2]*3.141592653589793*.5;g[t>>2]=+g[b>>2]*3.141592653589793*.5;g[t+4>>2]=h;c[o>>2]=c[t>>2];c[o+4>>2]=c[t+4>>2];Lo(p,o);h=+g[p>>2];f=+g[p+4>>2];p=i;i=i+((1*(e<<2)|0)+15&-16)|0;if((i|0)>=(j|0))ba();if(!e){m=h;n=f;t=a+4|0;g[a>>2]=m;g[t>>2]=n;i=s;return}else b=0;do{n=+O(+(1.0-d*d));d=(1.0-n)/(n+1.0);g[p+(b<<2)>>2]=d;b=b+1|0}while((b|0)!=(e|0));if(!e){m=h;n=f;t=a+4|0;g[a>>2]=m;g[t>>2]=n;i=s;return}b=q+4|0;o=r+4|0;do{e=e+-1|0;m=+g[p+(e<<2)>>2];n=m+1.0;l=h*m;m=f*m;k=h*l-f*m;d=f*l+h*m;if((k!=k|0.0!=0.0)&(d!=d|0.0!=0.0)){ao(q,l,m,h,f);k=+g[q>>2];d=+g[b>>2]}_n(r,h*n,f*n,k+1.0,d+0.0);h=+g[r>>2];f=+g[o>>2]}while((e|0)!=0);t=a+4|0;g[a>>2]=h;g[t>>2]=f;i=s;return}function rl(a,b,d,e){a=a|0;b=b|0;d=+d;e=e|0;var f=0.0,h=0.0,k=0,l=0,m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;z=i;i=i+64|0;if((i|0)>=(j|0))ba();w=z+48|0;r=z+40|0;s=z+32|0;t=z+24|0;u=z+16|0;x=z+8|0;y=z;v=i;i=i+((1*(e<<2)|0)+15&-16)|0;if((i|0)>=(j|0))ba();l=(e|0)==0;if(!l){k=0;f=d;do{o=+O(+(1.0-f*f));f=(1.0-o)/(o+1.0);g[v+(k<<2)>>2]=f;k=k+1|0}while((k|0)!=(e|0));h=+g[b>>2];f=+g[b+4>>2];if(!l){k=r+4|0;l=t+4|0;b=s+4|0;p=u+4|0;q=0;do{if(!q)o=d;else o=+g[v+(q+-1<<2)>>2];n=h*f;m=h*h-f*f;n=n+n;if((m!=m|0.0!=0.0)&(n!=n|0.0!=0.0)){ao(r,h,f,h,f);m=+g[r>>2];n=+g[k>>2]}g[t>>2]=1.0-o*(o*m);g[l>>2]=0.0-o*(o*n);c[w>>2]=c[t>>2];c[w+4>>2]=c[t+4>>2];Al(s,w);_n(u,h,f,+g[s>>2]+1.0,+g[b>>2]+0.0);f=+g[v+(q<<2)>>2]+1.0;h=+g[u>>2]*2.0/f;f=+g[p>>2]*2.0/f;q=q+1|0}while((q|0)!=(e|0))}}else{h=+g[b>>2];f=+g[b+4>>2]}g[y>>2]=h;g[y+4>>2]=f;c[w>>2]=c[y>>2];c[w+4>>2]=c[y+4>>2];Bl(x,w);d=+g[x+4>>2]*2.0/3.141592653589793;g[a>>2]=+g[x>>2]*2.0/3.141592653589793;g[a+4>>2]=d;i=z;return}function sl(a,b,d,e,f,h){a=a|0;b=+b;d=+d;e=e|0;f=f|0;h=h|0;var l=0.0,m=0,n=0,o=0,p=0.0,q=0.0,r=0.0,s=0.0,t=0,u=0,v=0.0,w=0,x=0,y=0,z=0,A=0,B=0.0,C=0,D=0.0,E=0,F=0,G=0,H=0,I=0,J=0,K=0.0,L=0,N=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,Y=0,Z=0,_=0,$=0,aa=0,ca=0,da=0;ca=i;i=i+192|0;if((i|0)>=(j|0))ba();W=ca+176|0;A=ca+144|0;z=ca+128|0;t=ca+168|0;u=ca+160|0;x=ca+152|0;C=ca+136|0;E=ca+120|0;G=ca+112|0;H=ca+96|0;I=ca+88|0;J=ca+72|0;N=ca+64|0;L=ca+56|0;Q=ca+48|0;R=ca+40|0;S=ca+32|0;Y=ca+24|0;Z=ca+16|0;_=ca+8|0;aa=ca;d=b/d;Ga(Wa()|0);ol(d,7,ca+104|0,ca+80|0);r=+(a>>>0);ol(d,7,W,A);K=+P(+(+X(+(+g[A>>2]*-3.141592653589793/+g[W>>2]))),+(1.0/r));D=(K*K+1.0+ +P(+K,6.0)+ +P(+K,12.0)+ +P(+K,20.0)+ +P(+K,30.0)+ +P(+K,42.0))/((K+0.0+ +P(+K,4.0)+ +P(+K,9.0)+ +P(+K,16.0)+ +P(+K,25.0)+ +P(+K,36.0))*2.0+1.0);K=D*(D*(+O(+K)*4.0));V=~~+M(+(r*.5))>>>0;T=~~r>>>0&1;F=i;i=i+((1*(V<<2)|0)+15&-16)|0;if((i|0)>=(j|0))ba();U=(V|0)==0;if(!U){m=0;do{g[F+(m<<2)>>2]=((+(m>>>0)+1.0)*2.0+-1.0)/r;m=m+1|0}while((m|0)!=(V|0));w=i;i=i+((1*(V<<3)|0)+15&-16)|0;if((i|0)>=(j|0))ba();if(!U){m=u+4|0;n=t+4|0;o=0;do{c[u>>2]=c[F+(o<<2)>>2];g[m>>2]=0.0;c[W>>2]=c[u>>2];c[W+4>>2]=c[u+4>>2];pl(t,W,K,7);da=c[n>>2]|0;c[w+(o<<3)>>2]=c[t>>2];c[w+(o<<3)+4>>2]=da;o=o+1|0}while((o|0)!=(V|0));m=i;i=i+((1*(V<<3)|0)+15&-16)|0;if((i|0)>=(j|0))ba();if(U)x=m;else{n=x+4|0;o=0;do{_n(x,0.0,.9999999403953552,K*+g[w+(o<<3)>>2],K*+g[w+(o<<3)+4>>2]);da=c[n>>2]|0;c[m+(o<<3)>>2]=c[x>>2];c[m+(o<<3)+4>>2]=da;o=o+1|0}while((o|0)!=(V|0));x=m}}else y=6}else y=6;if((y|0)==6){m=i;i=i+((1*(V<<3)|0)+15&-16)|0;if((i|0)>=(j|0))ba();x=m}g[z>>2]=0.0/b;g[z+4>>2]=1.0/b;c[W>>2]=c[z>>2];c[W+4>>2]=c[z+4>>2];rl(A,W,d,7);q=+g[A+4>>2];p=1.0-+g[A>>2];l=p*-0.0-q;d=q*0.0-p;if((l!=l|0.0!=0.0)&(d!=d|0.0!=0.0)){ao(C,-0.0,-1.0,p,-q);l=+g[C>>2];d=+g[C+4>>2]}D=l/r;B=d/r;w=i;i=i+((1*(V<<3)|0)+15&-16)|0;if((i|0)>=(j|0))ba();l=D*0.0-B;d=D+B*0.0;a:do if(!U){m=E+4|0;o=H+4|0;t=G+4|0;u=I+4|0;if((l!=l|0.0!=0.0)&(d!=d|0.0!=0.0)){n=0;while(1){s=+g[F+(n<<2)>>2];ao(E,0.0,1.0,D,B);r=-+g[m>>2];g[H>>2]=s-+g[E>>2];g[o>>2]=r;c[W>>2]=c[H>>2];c[W+4>>2]=c[H+4>>2];pl(G,W,K,7);r=+g[G>>2];s=+g[t>>2];q=r*0.0-s*.9999999403953552;p=r*.9999999403953552+s*0.0;if((q!=q|0.0!=0.0)&(p!=p|0.0!=0.0)){ao(I,0.0,.9999999403953552,r,s);q=+g[I>>2];p=+g[u>>2]}g[w+(n<<3)>>2]=q;g[w+(n<<3)+4>>2]=p;n=n+1|0;if((n|0)==(V|0))break a}}v=-d;m=0;do{g[H>>2]=+g[F+(m<<2)>>2]-l;g[o>>2]=v;c[W>>2]=c[H>>2];c[W+4>>2]=c[H+4>>2];pl(G,W,K,7);r=+g[G>>2];s=+g[t>>2];q=r*0.0-s*.9999999403953552;p=r*.9999999403953552+s*0.0;if((q!=q|0.0!=0.0)&(p!=p|0.0!=0.0)){ao(I,0.0,.9999999403953552,r,s);q=+g[I>>2];p=+g[u>>2]}g[w+(m<<3)>>2]=q;g[w+(m<<3)+4>>2]=p;m=m+1|0}while((m|0)!=(V|0))}while(0);if((l!=l|0.0!=0.0)&(d!=d|0.0!=0.0)){ao(J,0.0,1.0,D,B);l=+g[J>>2];d=+g[J+4>>2]}g[L>>2]=l;g[L+4>>2]=d;c[W>>2]=c[L>>2];c[W+4>>2]=c[L+4>>2];ql(N,W,K,7);p=+g[N>>2];d=+g[N+4>>2];l=p*0.0-d*.9999999403953552;q=p*.9999999403953552+d*0.0;if((l!=l|0.0!=0.0)&(q!=q|0.0!=0.0)){ao(Q,0.0,.9999999403953552,p,d);l=+g[Q>>2];q=+g[Q+4>>2]}if(U)m=0;else{m=S+4|0;n=R+4|0;o=0;t=0;while(1){N=c[w+(o<<3)>>2]|0;Q=c[w+(o<<3)+4>>2]|0;da=t|1;c[f+(t<<3)>>2]=N;c[f+(t<<3)+4>>2]=Q;c[S>>2]=N;c[m>>2]=Q;c[W>>2]=c[S>>2];c[W+4>>2]=c[S+4>>2];Ko(R,W);Q=c[n>>2]|0;c[f+(da<<3)>>2]=c[R>>2];c[f+(da<<3)+4>>2]=Q;o=o+1|0;if((o|0)==(V|0))break;else t=t+2|0}m=V<<1}u=(T|0)!=0;if(u){g[f+(m<<3)>>2]=l;g[f+(m<<3)+4>>2]=q;m=m|1}if((m|0)!=(a|0))Ha(41413,41419,383,41442);if(U)if(!(V&2147483647))$=0;else Ha(41454,41419,390,41442);else{m=Z+4|0;n=Y+4|0;o=0;t=0;while(1){U=c[x+(o<<3)>>2]|0;$=c[x+(o<<3)+4>>2]|0;da=t|1;c[e+(t<<3)>>2]=U;c[e+(t<<3)+4>>2]=$;c[Z>>2]=U;c[m>>2]=$;c[W>>2]=c[Z>>2];c[W+4>>2]=c[Z+4>>2];Ko(Y,W);$=c[n>>2]|0;c[e+(da<<3)>>2]=c[Y>>2];c[e+(da<<3)+4>>2]=$;o=o+1|0;if((o|0)==(V|0))break;else t=t+2|0}$=V<<1}if(u)d=1.0;else d=1.0/+O(+(b*b+1.0));t=h+4|0;g[h>>2]=d;g[t>>2]=0.0;if(!a)l=0.0;else{n=_+4|0;l=0.0;m=0;do{p=+g[f+(m<<3)>>2];q=+g[f+(m<<3)+4>>2];r=p*d-q*l;s=q*d+p*l;if((r!=r|0.0!=0.0)&(s!=s|0.0!=0.0)){ao(_,d,l,p,q);d=+g[_>>2];l=+g[n>>2]}else{d=r;l=s}g[h>>2]=d;g[t>>2]=l;m=m+1|0}while((m|0)!=(a|0))}if(!$){i=ca;return}o=aa+4|0;n=0;while(1){_n(aa,d,l,+g[e+(n<<3)>>2],+g[e+(n<<3)+4>>2]);da=c[aa>>2]|0;m=c[o>>2]|0;c[h>>2]=da;c[t>>2]=m;n=n+1|0;d=(c[k>>2]=da,+g[k>>2]);if((n|0)==($|0))break;else l=(c[k>>2]=m,+g[k>>2])}i=ca;return}function tl(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,h=0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,O=0;O=i;i=i+64|0;if((i|0)>=(j|0))ba();E=O+48|0;F=O+40|0;G=O+32|0;J=O+24|0;K=O+16|0;L=O+8|0;M=O;if(!b){Qp(41461,62,1,c[2348]|0)|0;kb(1)}if(d<=0.0){Qp(41524,85,1,c[2348]|0)|0;kb(1)}H=Xp(80)|0;I=H+4|0;c[I>>2]=b;g[H+8>>2]=d;o=+(b>>>0);g[H+12>>2]=1.0/o;o=2.5132741603225375/o;D=H+28|0;g[D>>2]=o;B=~~+Z(+(+N(+(e/o))));C=H+24|0;B=B>>>0<2?2:B;c[C>>2]=B;g[H+32>>2]=o*+(B>>>0);B=b<<3;p=Xp(B)|0;c[H>>2]=p;fq(p|0,a|0,B|0)|0;B=H+16|0;c[B>>2]=qk(b)|0;p=H+60|0;c[p>>2]=gk(c[I>>2]|0)|0;a=c[C>>2]|0;f=a<<2;q=H+20|0;c[q>>2]=Xp(f)|0;b=Xp(f)|0;r=H+36|0;c[r>>2]=b;s=H+44|0;c[s>>2]=Xp(f)|0;t=H+48|0;c[t>>2]=Xp(f)|0;c[H+40>>2]=Xp(f)|0;f=c[I>>2]|0;u=i;i=i+((1*(f<<3)|0)+15&-16)|0;if((i|0)>=(j|0))ba();if(!a){L=c[B>>2]|0;rk(L);L=c[p>>2]|0;hk(L);L=c[I>>2]|0;M=H+76|0;c[M>>2]=L;M=H+72|0;c[M>>2]=0;M=H+52|0;c[M>>2]=0;M=H+56|0;c[M>>2]=0;M=H+64|0;g[M>>2]=0.0;M=c[s>>2]|0;L=c[C>>2]|0;L=L<<2;eq(M|0,0,L|0)|0;L=c[t>>2]|0;M=c[C>>2]|0;M=M<<2;eq(L|0,0,M|0)|0;i=O;return H|0}v=G+4|0;w=F+4|0;x=J+4|0;y=L+4|0;z=K+4|0;A=M+4|0;h=f;f=0;while(1){g[b+(f<<2)>>2]=(+(f>>>0)-+((a+-1|0)>>>0)*.5)*+g[D>>2];if(!h)a=0;else{b=0;do{a=c[H>>2]|0;h=c[a+(b<<3)+4>>2]|0;c[G>>2]=c[a+(b<<3)>>2];c[v>>2]=h;c[E>>2]=c[G>>2];c[E+4>>2]=c[G+4>>2];Ko(F,E);n=+g[F>>2];o=+g[w>>2];l=+g[(c[r>>2]|0)+(f<<2)>>2];k=l*-0.0;l=-l;m=+(b>>>0);e=m*k-k;d=m*l+k*0.0;if((e!=e|0.0!=0.0)&(d!=d|0.0!=0.0)){ao(J,k,l,m,0.0);e=+g[J>>2];d=+g[x>>2]}g[L>>2]=e;g[y>>2]=d;c[E>>2]=c[L>>2];c[E+4>>2]=c[L+4>>2];Io(K,E);k=+g[K>>2];l=+g[z>>2];e=n*k-o*l;d=o*k+n*l;if((e!=e|0.0!=0.0)&(d!=d|0.0!=0.0)){ao(M,n,o,k,l);e=+g[M>>2];d=+g[A>>2]}g[u+(b<<3)>>2]=e;g[u+(b<<3)+4>>2]=d;b=b+1|0;a=c[I>>2]|0}while(b>>>0>>0)}a=Gl(u,a)|0;c[(c[q>>2]|0)+(f<<2)>>2]=a;f=f+1|0;a=c[C>>2]|0;if(f>>>0>=a>>>0)break;b=c[r>>2]|0;h=c[I>>2]|0}L=c[B>>2]|0;rk(L);L=c[p>>2]|0;hk(L);L=c[I>>2]|0;M=H+76|0;c[M>>2]=L;M=H+72|0;c[M>>2]=0;M=H+52|0;c[M>>2]=0;M=H+56|0;c[M>>2]=0;M=H+64|0;g[M>>2]=0.0;M=c[s>>2]|0;L=c[C>>2]|0;L=L<<2;eq(M|0,0,L|0)|0;L=c[t>>2]|0;M=c[C>>2]|0;M=M<<2;eq(L|0,0,M|0)|0;i=O;return H|0}function ul(a){a=a|0;var b=0;rk(c[a+16>>2]|0);hk(c[a+60>>2]|0);c[a+76>>2]=c[a+4>>2];c[a+72>>2]=0;c[a+52>>2]=0;c[a+56>>2]=0;g[a+64>>2]=0.0;b=a+24|0;eq(c[a+44>>2]|0,0,c[b>>2]<<2|0)|0;eq(c[a+48>>2]|0,0,c[b>>2]<<2|0)|0;return}function vl(a){a=a|0;var b=0,d=0,e=0;uk(c[a+16>>2]|0);b=a+24|0;d=a+20|0;if(c[b>>2]|0){e=0;do{Hl(c[(c[d>>2]|0)+(e<<2)>>2]|0);e=e+1|0}while(e>>>0<(c[b>>2]|0)>>>0)}Yp(c[d>>2]|0);Yp(c[a+36>>2]|0);Yp(c[a+40>>2]|0);Yp(c[a+44>>2]|0);Yp(c[a+48>>2]|0);ik(c[a+60>>2]|0);Yp(c[a>>2]|0);Yp(a);return}function wl(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0.0,k=0,l=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0.0,E=0.0,F=0.0;C=i;i=i+48|0;if((i|0)>=(j|0))ba();v=C+40|0;x=C+32|0;y=C+16|0;w=C;u=C+24|0;B=C+8|0;k=a+16|0;z=c[k>>2]|0;A=c[b>>2]|0;b=c[b+4>>2]|0;c[u>>2]=A;c[u+4>>2]=b;c[v>>2]=c[u>>2];c[v+4>>2]=c[u+4>>2];tk(z,v);c[B>>2]=A;c[B+4>>2]=b;c[v>>2]=c[B>>2];c[v+4>>2]=c[B+4>>2];xl(a,v);B=a+76|0;b=c[B>>2]|0;if(b|0){c[B>>2]=b+-1;d=0;i=C;return d|0}A=a+44|0;z=a+48|0;t=a+24|0;gq(c[A>>2]|0,c[z>>2]|0,c[t>>2]<<2|0)|0;u=a+40|0;gq(c[z>>2]|0,c[u>>2]|0,c[t>>2]<<2|0)|0;sk(c[k>>2]|0,x);if(!(c[t>>2]|0)){b=a+52|0;q=c[u>>2]|0;p=0}else{k=a+20|0;m=y+4|0;n=w+4|0;o=a+12|0;r=a+68|0;b=a+52|0;s=0;l=0.0;while(1){Il(c[(c[k>>2]|0)+(s<<2)>>2]|0,c[x>>2]|0,y);q=c[m>>2]|0;c[w>>2]=c[y>>2];c[n>>2]=q;c[v>>2]=c[w>>2];c[v+4>>2]=c[w+4>>2];h=+wo(v);h=h*+g[o>>2]/+O(+(+g[r>>2]));q=c[u>>2]|0;g[q+(s<<2)>>2]=h;if(h>l)c[b>>2]=s;else h=l;s=s+1|0;p=c[t>>2]|0;if(s>>>0>=p>>>0)break;else l=h}}k=c[b>>2]|0;l=+g[q+(k<<2)>>2];o=a+72|0;switch(c[o>>2]|0){case 0:{if(!(l>+g[a+8>>2])){d=0;i=C;return d|0}c[a+56>>2]=k;c[o>>2]=1;d=0;i=C;return d|0}case 1:{m=a+56|0;n=c[m>>2]|0;b=c[z>>2]|0;h=+g[b+(n<<2)>>2];if(l>h){c[m>>2]=k;d=0;i=C;return d|0}if((p|0)==1){g[e>>2]=0.0;h=0.0}else{D=+g[(c[A>>2]|0)+(n<<2)>>2];F=+g[((n|0)==0?b+4|0:b+(n+-1<<2)|0)>>2];E=+g[b+(((n|0)==(p+-1|0)?-1:1)+n<<2)>>2];l=+g[q+(n<<2)>>2];h=h*2.0;g[e>>2]=+g[(c[a+36>>2]|0)+(n<<2)>>2]-(E-F)*(+g[a+28>>2]*.5)/(F+E-h);h=(l-D)*.5/(D+l-h);h=h<-.49900001287460327?-.49900001287460327:h;h=h>.49900001287460327?.49900001287460327:h}g[d>>2]=h;g[f>>2]=+O(+(+g[a+68>>2]));c[o>>2]=0;c[B>>2]=(c[a+4>>2]|0)>>>2;d=1;i=C;return d|0}default:{Qp(41610,69,1,c[2348]|0)|0;kb(1)}}return 0}function xl(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0.0,h=0.0,k=0,l=0.0,m=0,n=0,o=0.0,p=0,q=0;n=i;i=i+32|0;if((i|0)>=(j|0))ba();m=n+24|0;p=n+16|0;q=n+8|0;k=n;l=+g[b>>2];e=+g[b+4>>2];g[q>>2]=l;g[q+4>>2]=e;c[m>>2]=c[q>>2];c[m+4>>2]=c[q+4>>2];Ko(p,m);f=+g[p>>2];h=+g[p+4>>2];d=l*f-e*h;o=e*f+l*h;if((d!=d|0.0!=0.0)&(o!=o|0.0!=0.0)){ao(k,l,e,f,h);d=+g[k>>2]}q=a+60|0;kk(c[q>>2]|0,m);jk(c[q>>2]|0,d);q=a+64|0;o=d+ +g[q>>2]-+g[m>>2];o=o<1.1920928955078125e-07?1.1920928955078125e-07:o;g[q>>2]=o;g[a+68>>2]=+g[a+12>>2]*o;i=n;return}function yl(a){a=a|0;if(!a)return;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=0;return}function zl(a){a=a|0;gq(a|0,45180,40)|0;return}function Al(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0.0,h=0.0,l=0,m=0,n=0;d=i;i=i+16|0;if((i|0)>=(j|0))ba();m=d+8|0;n=d;l=c[b>>2]|0;b=c[b+4>>2]|0;c[n>>2]=l;c[n+4>>2]=b;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];f=+wo(m);e=(c[k>>2]=l,+g[k>>2]);h=+O(+((f+e)*.5));e=+O(+((f-e)*.5));b=(c[k>>2]=b,+g[k>>2])>0.0;f=e*0.0;g[a>>2]=h+(b?f:-f);g[a+4>>2]=b?e:-e;i=d;return}function Bl(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0.0,h=0.0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0.0;r=i;i=i+64|0;if((i|0)>=(j|0))ba();m=r+48|0;n=r+8|0;o=r;k=r+40|0;p=r+32|0;l=r+24|0;q=r+16|0;h=+g[b>>2];f=+g[b+4>>2];d=h*f;e=h*h-f*f;d=d+d;b=(e!=e|0.0!=0.0)&(d!=d|0.0!=0.0);if(h>0.0^f>0.0){if(b){ao(l,h,f,h,f);e=+g[l>>2];d=+g[l+4>>2]}s=e+-1.0;g[n>>2]=s;g[n+4>>2]=d;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];e=+wo(m);t=+O(+((s+e)*.5));s=+O(+((e-s)*.5));p=d>0.0;e=s*0.0;e=h-(t+(p?e:-e));f=f-(p?s:-s);g[n>>2]=e;g[n+4>>2]=f;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];h=+Y(+(+wo(m)));g[o>>2]=e;g[o+4>>2]=f;c[m>>2]=c[o>>2];c[m+4>>2]=c[o+4>>2];f=+Bo(m);h=h+f*0.0;e=f-h*0.0;d=f*-0.0-h;if((d!=d|0.0!=0.0)&(e!=e|0.0!=0.0)){ao(q,-0.0,-1.0,h,f);e=+g[q>>2];d=+g[q+4>>2]}g[a>>2]=e;g[a+4>>2]=d;i=r;return}else{if(b){ao(k,h,f,h,f);e=+g[k>>2];d=+g[k+4>>2]}t=e+-1.0;g[n>>2]=t;g[n+4>>2]=d;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];e=+wo(m);s=+O(+((t+e)*.5));t=+O(+((e-t)*.5));q=d>0.0;e=t*0.0;e=h+(s+(q?e:-e));f=f+(q?t:-t);g[n>>2]=e;g[n+4>>2]=f;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];h=+Y(+(+wo(m)));g[o>>2]=e;g[o+4>>2]=f;c[m>>2]=c[o>>2];c[m+4>>2]=c[o+4>>2];f=+Bo(m);h=h+f*0.0;e=f-h*0.0;d=f*-0.0-h;if((d!=d|0.0!=0.0)&(e!=e|0.0!=0.0)){ao(p,-0.0,-1.0,h,f);e=+g[p>>2];d=+g[p+4>>2]}g[a>>2]=e;g[a+4>>2]=d;i=r;return}}function Cl(a){a=a|0;var b=0;a:do if(a>>>0>3){b=2;while(1){if(!((a>>>0)%(b>>>0)|0)){a=0;break a}b=b+1|0;if(b>>>0>=a>>>0){a=1;break}}}else a=1;while(0);return a|0}function Dl(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,k=0,l=0;l=i;i=i+16|0;if((i|0)>=(j|0))ba();k=l;g=a;e=0;do{if(g>>>0<2){f=0;break}else f=2;do{if(!((g>>>0)%(f>>>0)|0)){h=4;break}f=f+1|0}while(f>>>0<=g>>>0);if((h|0)==4){h=0;c[b+(e<<2)>>2]=f;g=(g>>>0)/(f>>>0)|0;e=e+1|0}f=g>>>0>1}while(f&e>>>0<40);if(f&(e|0)==40){l=c[2348]|0;c[k>>2]=a;c[k+4>>2]=40;Kp(l,41680,k)|0;kb(1)}else{c[d>>2]=e;i=l;return}}function El(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,k=0,l=0,m=0,n=0,o=0;o=i;i=i+160|0;if((i|0)>=(j|0))ba();m=o;l=a+-1|0;b=l;e=0;while(1){if(b>>>0<2){h=e;break}else d=2;while(1){if(!((b>>>0)%(d>>>0)|0)){n=4;break}d=d+1|0;if(d>>>0>b>>>0){d=e;break}}if((n|0)==4){n=0;b=(b>>>0)/(d>>>0)|0;c[m+(e<<2)>>2]=d;if(!e)d=1;else d=((c[m+(e+-1<<2)>>2]|0)!=(d|0)&1)+e|0}if(b>>>0>1&d>>>0<40)e=d;else{h=d;break}}if(a>>>0<3|(h|0)==0){n=2;i=o;return n|0}else b=2;while(1){g=0;while(1){f=(l>>>0)/((c[m+(g<<2)>>2]|0)>>>0)|0;if(!f)break;else{d=1;e=0}do{d=((_(d,b)|0)>>>0)%(a>>>0)|0;e=e+1|0}while((e|0)!=(f|0));k=(d|0)==1;g=g+1|0;if(!(g>>>0>>0&(k^1))){n=12;break}}if((n|0)==12?(n=0,!k):0){n=15;break}b=b+1|0;if(b>>>0>=a>>>0){n=15;break}}if((n|0)==15){i=o;return b|0}return 0}function Fl(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;if(!b){e=1;return e|0}else{d=1;e=0}do{d=((_(d,a)|0)>>>0)%(c>>>0)|0;e=e+1|0}while((e|0)!=(b|0));return d|0}function Gl(a,b){a=a|0;b=b|0;var d=0,e=0;d=Xp(8)|0;c[d+4>>2]=b;b=b<<3;e=Xp(b)|0;c[d>>2]=e;fq(e|0,a|0,b|0)|0;return d|0}function Hl(a){a=a|0;Yp(c[a>>2]|0);Yp(a);return}function Il(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,h=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0;t=i;i=i+16|0;if((i|0)>=(j|0))ba();r=t;s=c[a>>2]|0;a=c[a+4>>2]|0;if(!a){n=0.0;o=0.0;b=d+4|0;g[d>>2]=n;g[b>>2]=o;i=t;return}p=r+4|0;q=0;f=0.0;e=0.0;do{n=+g[s+(q<<3)>>2];o=+g[s+(q<<3)+4>>2];l=+g[b+(q<<3)>>2];m=+g[b+(q<<3)+4>>2];h=n*l-o*m;k=o*l+n*m;if((h!=h|0.0!=0.0)&(k!=k|0.0!=0.0)){ao(r,n,o,l,m);h=+g[r>>2];k=+g[p>>2]}f=f+h;e=e+k;q=q+1|0}while((q|0)!=(a|0));b=d+4|0;g[d>>2]=f;g[b>>2]=e;i=t;return}function Jl(a){a=a|0;var b=0,d=0,e=0,f=0;e=Xp(16)|0;c[e>>2]=a;c[e+12>>2]=4;d=(~~+M(+(+O(+(+(a>>>0)))))>>>0)+1|0;c[e+4>>2]=d;f=e+8|0;b=(a>>>0)/(d>>>0)|0;while(1)if((_(d,b)|0)>>>0>a>>>0)break;else b=b+1|0;c[f>>2]=b;return e|0}function Kl(a){a=a|0;Yp(a);return}function Ll(a,b){a=a|0;b=b|0;c[a+12>>2]=b;return}function Ml(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;gq(e|0,d|0,c[b>>2]|0)|0;l=b+12|0;d=c[l>>2]|0;if(!d)return;g=c[b>>2]|0;m=b+4|0;i=c[m>>2]|0;n=b+8|0;j=c[n>>2]|0;k=g>>>1;if(k){d=0;f=0;g=(g>>>0)/3|0;do{do{h=(_(f,j)|0)+g|0;f=f+1|0;if((f|0)==(i|0)){f=0;g=((g+1|0)>>>0)%(j>>>0)|0}}while(h>>>0>=k>>>0);p=e+(h<<1|1)|0;o=a[p>>0]|0;h=e+(d<<1)|0;a[p>>0]=a[h>>0]|0;a[h>>0]=o;d=d+1|0}while((d|0)!=(k|0));d=c[l>>2]|0}if(d>>>0<=1)return;f=c[b>>2]|0;i=c[m>>2]|0;j=(c[n>>2]|0)+2|0;k=f>>>1;if(k){d=0;h=0;g=(f>>>0)/3|0;while(1){f=h;do{h=(_(f,j)|0)+g|0;f=f+1|0;if((f|0)==(i|0)){f=0;g=((g+1|0)>>>0)%(j>>>0)|0}}while(h>>>0>=k>>>0);q=e+(d<<1)|0;o=a[q>>0]|0;p=e+(h<<1|1)|0;h=a[p>>0]|0;a[q>>0]=h&15|o&240;a[p>>0]=h&240|o&15;d=d+1|0;if((d|0)==(k|0))break;else h=f}d=c[l>>2]|0}if(d>>>0<=2)return;f=c[b>>2]|0;i=c[m>>2]|0;j=(c[n>>2]|0)+4|0;k=f>>>1;if(k){d=0;h=0;g=(f>>>0)/3|0;while(1){f=h;do{h=(_(f,j)|0)+g|0;f=f+1|0;if((f|0)==(i|0)){f=0;g=((g+1|0)>>>0)%(j>>>0)|0}}while(h>>>0>=k>>>0);r=e+(d<<1)|0;p=a[r>>0]|0;q=e+(h<<1|1)|0;o=a[q>>0]|0;a[r>>0]=o&85|p&170;a[q>>0]=o&170|p&85;d=d+1|0;if((d|0)==(k|0))break;else h=f}d=c[l>>2]|0}if(d>>>0<=3)return;g=c[b>>2]|0;k=c[m>>2]|0;i=(c[n>>2]|0)+8|0;j=g>>>1;if(!j)return;d=0;f=0;g=(g>>>0)/3|0;do{do{h=(_(f,i)|0)+g|0;f=f+1|0;if((f|0)==(k|0)){f=0;g=((g+1|0)>>>0)%(i>>>0)|0}}while(h>>>0>=j>>>0);o=e+(d<<1)|0;q=a[o>>0]|0;r=e+(h<<1|1)|0;p=a[r>>0]|0;a[o>>0]=p&51|q&204;a[r>>0]=p&204|q&51;d=d+1|0}while((d|0)!=(j|0));return}function Nl(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;gq(e|0,d|0,c[b>>2]|0)|0;o=b+12|0;d=c[o>>2]|0;if(d>>>0>3){f=c[b>>2]|0;j=c[b+4>>2]|0;k=(c[b+8>>2]|0)+8|0;i=f>>>1;if(!i)f=11;else{d=0;h=0;g=(f>>>0)/3|0;while(1){f=h;do{h=(_(f,k)|0)+g|0;f=f+1|0;if((f|0)==(j|0)){f=0;g=((g+1|0)>>>0)%(k>>>0)|0}}while(h>>>0>=i>>>0);t=e+(d<<1)|0;s=a[t>>0]|0;l=e+(h<<1|1)|0;h=a[l>>0]|0;a[t>>0]=h&51|s&204;a[l>>0]=h&204|s&51;d=d+1|0;if((d|0)==(i|0))break;else h=f}d=c[o>>2]|0;f=10}}else f=10;if((f|0)==10)if(d>>>0>2)f=11;else f=19;if((f|0)==11){d=c[b>>2]|0;j=c[b+4>>2]|0;k=(c[b+8>>2]|0)+4|0;l=d>>>1;if(!l)f=20;else{i=0;g=0;f=(d>>>0)/3|0;while(1){d=g;do{h=(_(d,k)|0)+f|0;d=d+1|0;if((d|0)==(j|0)){d=0;f=((f+1|0)>>>0)%(k>>>0)|0}}while(h>>>0>=l>>>0);g=d;u=e+(i<<1)|0;t=a[u>>0]|0;d=e+(h<<1|1)|0;s=a[d>>0]|0;a[u>>0]=s&85|t&170;a[d>>0]=s&170|t&85;d=i+1|0;if((d|0)==(l|0))break;else i=d}d=c[o>>2]|0;f=19}}if((f|0)==19)if(d>>>0>1)f=20;else{m=d;f=28}if((f|0)==20?(n=c[b>>2]|0,p=c[b+4>>2]|0,q=(c[b+8>>2]|0)+2|0,r=n>>>1,r|0):0){d=0;f=0;g=(n>>>0)/3|0;do{do{h=(_(f,q)|0)+g|0;f=f+1|0;if((f|0)==(p|0)){f=0;g=((g+1|0)>>>0)%(q>>>0)|0}}while(h>>>0>=r>>>0);n=e+(d<<1)|0;t=a[n>>0]|0;u=e+(h<<1|1)|0;s=a[u>>0]|0;a[n>>0]=s&15|t&240;a[u>>0]=s&240|t&15;d=d+1|0}while((d|0)!=(r|0));m=c[o>>2]|0;f=28}if((f|0)==28?(m|0)==0:0)return;f=c[b>>2]|0;k=c[b+4>>2]|0;i=c[b+8>>2]|0;j=f>>>1;if(!j)return;d=0;h=0;g=(f>>>0)/3|0;while(1){f=h;do{h=(_(f,i)|0)+g|0;f=f+1|0;if((f|0)==(k|0)){f=0;g=((g+1|0)>>>0)%(i>>>0)|0}}while(h>>>0>=j>>>0);s=e+(h<<1|1)|0;t=a[s>>0]|0;u=e+(d<<1)|0;a[s>>0]=a[u>>0]|0;a[u>>0]=t;d=d+1|0;if((d|0)==(j|0))break;else h=f}return}function Ol(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;gq(f|0,e|0,c[b>>2]<<3|0)|0;p=b+12|0;e=c[p>>2]|0;if(e>>>0>3){g=c[b>>2]|0;l=c[b+4>>2]|0;j=(c[b+8>>2]|0)+8|0;k=g>>>1;if(!k)g=11;else{e=0;i=0;h=(g>>>0)/3|0;while(1){g=i;do{i=(_(g,j)|0)+h|0;g=g+1|0;if((g|0)==(l|0)){g=0;h=((h+1|0)>>>0)%(j>>>0)|0}}while(i>>>0>=k>>>0);t=i<<4;m=e<<4;v=f+(t|10)|0;u=a[v>>0]|0;i=f+(m|2)|0;a[v>>0]=a[i>>0]|0;a[i>>0]=u;i=f+(t|11)|0;u=a[i>>0]|0;v=f+(m|3)|0;a[i>>0]=a[v>>0]|0;a[v>>0]=u;v=f+(t|14)|0;u=a[v>>0]|0;i=f+(m|6)|0;a[v>>0]=a[i>>0]|0;a[i>>0]=u;t=f+(t|15)|0;i=a[t>>0]|0;m=f+(m|7)|0;a[t>>0]=a[m>>0]|0;a[m>>0]=i;e=e+1|0;if((e|0)==(k|0))break;else i=g}e=c[p>>2]|0;g=10}}else g=10;if((g|0)==10)if(e>>>0>2)g=11;else g=19;if((g|0)==11){e=c[b>>2]|0;k=c[b+4>>2]|0;l=(c[b+8>>2]|0)+4|0;m=e>>>1;if(!m)g=20;else{j=0;h=0;g=(e>>>0)/3|0;while(1){e=h;do{i=(_(e,l)|0)+g|0;e=e+1|0;if((e|0)==(k|0)){e=0;g=((g+1|0)>>>0)%(l>>>0)|0}}while(i>>>0>=m>>>0);h=e;u=i<<4;e=j<<4;i=f+(u|9)|0;t=a[i>>0]|0;v=f+(e|1)|0;a[i>>0]=a[v>>0]|0;a[v>>0]=t;v=f+(u|11)|0;t=a[v>>0]|0;i=f+(e|3)|0;a[v>>0]=a[i>>0]|0;a[i>>0]=t;i=f+(u|13)|0;t=a[i>>0]|0;v=f+(e|5)|0;a[i>>0]=a[v>>0]|0;a[v>>0]=t;u=f+(u|15)|0;v=a[u>>0]|0;e=f+(e|7)|0;a[u>>0]=a[e>>0]|0;a[e>>0]=v;e=j+1|0;if((e|0)==(m|0))break;else j=e}e=c[p>>2]|0;g=19}}if((g|0)==19)if(e>>>0>1)g=20;else{n=e;g=28}if((g|0)==20?(o=c[b>>2]|0,s=c[b+4>>2]|0,q=(c[b+8>>2]|0)+2|0,r=o>>>1,r|0):0){e=0;g=0;h=(o>>>0)/3|0;do{do{i=(_(g,q)|0)+h|0;g=g+1|0;if((g|0)==(s|0)){g=0;h=((h+1|0)>>>0)%(q>>>0)|0}}while(i>>>0>=r>>>0);t=i<<4;v=e<<4;n=f+(t|12)|0;o=a[n>>0]|0;u=f+(v|4)|0;a[n>>0]=a[u>>0]|0;a[u>>0]=o;u=f+(t|13)|0;o=a[u>>0]|0;n=f+(v|5)|0;a[u>>0]=a[n>>0]|0;a[n>>0]=o;n=f+(t|14)|0;o=a[n>>0]|0;u=f+(v|6)|0;a[n>>0]=a[u>>0]|0;a[u>>0]=o;t=f+(t|15)|0;u=a[t>>0]|0;v=f+(v|7)|0;a[t>>0]=a[v>>0]|0;a[v>>0]=u;e=e+1|0}while((e|0)!=(r|0));n=c[p>>2]|0;g=28}if((g|0)==28?(n|0)==0:0)return;g=c[b>>2]|0;l=c[b+4>>2]|0;j=c[b+8>>2]|0;k=g>>>1;if(!k)return;e=0;i=0;h=(g>>>0)/3|0;while(1){g=i;do{i=(_(g,j)|0)+h|0;g=g+1|0;if((g|0)==(l|0)){g=0;h=((h+1|0)>>>0)%(j>>>0)|0}}while(i>>>0>=k>>>0);t=f+(i<<4|8)|0;u=t;b=u;b=d[b>>0]|d[b+1>>0]<<8|d[b+2>>0]<<16|d[b+3>>0]<<24;u=u+4|0;u=d[u>>0]|d[u+1>>0]<<8|d[u+2>>0]<<16|d[u+3>>0]<<24;v=f+(e<<4)|0;s=v;q=s;q=d[q>>0]|d[q+1>>0]<<8|d[q+2>>0]<<16|d[q+3>>0]<<24;s=s+4|0;s=d[s>>0]|d[s+1>>0]<<8|d[s+2>>0]<<16|d[s+3>>0]<<24;r=t;a[r>>0]=q;a[r+1>>0]=q>>8;a[r+2>>0]=q>>16;a[r+3>>0]=q>>24;t=t+4|0;a[t>>0]=s;a[t+1>>0]=s>>8;a[t+2>>0]=s>>16;a[t+3>>0]=s>>24;t=v;a[t>>0]=b;a[t+1>>0]=b>>8;a[t+2>>0]=b>>16;a[t+3>>0]=b>>24;v=v+4|0;a[v>>0]=u;a[v+1>>0]=u>>8;a[v+2>>0]=u>>16;a[v+3>>0]=u>>24;e=e+1|0;if((e|0)==(k|0))break;else i=g}return}function Pl(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,k=0;h=i;i=i+96|0;if((i|0)>=(j|0))ba();g=h;f=h+80|0;wm(e,41739);if(!b){Ql(e,0,41748,h+72|0);g=0;i=h;return g|0}c[f>>2]=b;c[f+4>>2]=0;c[g>>2]=7;c[g+4>>2]=f;a[g+8>>0]=0;c[g+16>>2]=0;c[g+20>>2]=0;c[g+24>>2]=1;c[g+28>>2]=0;c[g+36>>2]=0;b=g+40|0;if(Zl(b)|0){g=0;i=h;return g|0}c[g+52>>2]=d;k=g+60|0;c[k>>2]=-1;f=Sl(g,d,e)|0;if((c[k>>2]|0)==256){k=g+64|0;Yl(c[k>>2]|0);c[k>>2]=0;c[k+4>>2]=0}_l(b);k=f;i=h;return k|0}function Ql(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+368|0;if((i|0)>=(j|0))ba();o=p+16|0;m=p+8|0;l=p;h=p+24|0;g=p+200|0;n=p+40|0;if(!b){i=p;return}c[h>>2]=f;Qo(g,160,e,h)|0;a[g+159>>0]=0;do if(d){k=am(d+40|0)|0;e=c[d+24>>2]|0;f=c[d+28>>2]|0;h=c[d+36>>2]|0;if(k|0?a[k>>0]|0:0){if((c[d+44>>2]|0)>>>0>=21)break;c[l>>2]=g;c[l+4>>2]=k;pp(n,160,41764,l)|0;a[n+159>>0]=0;g=n;break}if((c[d+20>>2]|0)!=-2){c[m>>2]=g;pp(n,160,41777,m)|0;a[n+159>>0]=0;g=n}}else{f=-1;e=-1;h=0}while(0);c[o>>2]=g;xm(b,e,f,h,41797,o);i=p;return}function Rl(b){b=b|0;var d=0,e=0;d=b+4|0;e=c[d>>2]|0;b=a[(c[b>>2]|0)+e>>0]|0;if(!(b<<24>>24)){e=-1;return e|0}c[d>>2]=e+1;e=b&255;return e|0}function Sl(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=i;i=i+16|0;if((i|0)>=(j|0))ba();f=h+8|0;e=h;c[a+56>>2]=0;Tl(a,d);a:do if(!(b&4)){switch(c[a+60>>2]|0){case 123:case 91:{g=4;break a}default:{}}Ql(d,a,42071,e);e=0}else g=4;while(0);do if((g|0)==4){e=Wl(a,b,d)|0;if(e){if((b&2|0)==0?(Tl(a,d),c[a+60>>2]|0):0){Ql(d,a,42317,f);d=e+4|0;b=c[d>>2]|0;if((b|0)==-1){e=0;break}g=b+-1|0;c[d>>2]=g;if(g|0){e=0;break}km(e);e=0;break}if(d)c[d+8>>2]=c[a+36>>2]}else e=0}while(0);i=h;return e|0}function Tl(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0;B=i;i=i+112|0;if((i|0)>=(j|0))ba();r=B+104|0;k=B+96|0;g=B+88|0;v=B+80|0;u=B+72|0;x=B+64|0;t=B+56|0;w=B+48|0;n=B+40|0;m=B+32|0;p=B+24|0;o=B+16|0;l=B+8|0;z=B+108|0;q=B;y=b+40|0;$l(y);A=b+60|0;if((c[A>>2]|0)==256){s=b+64|0;Yl(c[s>>2]|0);c[s>>2]=0;c[s+4>>2]=0}a:while(1){f=Ul(b,d)|0;switch(f|0){case 9:case 10:case 13:case 32:break;case -1:{s=5;break a}case -2:{s=6;break a}default:{s=7;break a}}}if((s|0)==5){c[A>>2]=0;i=B;return}else if((s|0)==6){c[A>>2]=-1;i=B;return}else if((s|0)==7){bm(y,f&255)|0;D=f|32;if((f|0)==44|((f|0)==58|((D|0)==125|(D|0)==123))){c[A>>2]=f;i=B;return}if((f|0)==34){q=b+64|0;c[q>>2]=0;c[A>>2]=-1;f=Ul(b,d)|0;if(f>>>0<4294967294)bm(y,f&255)|0;b:while(1){switch(f|0){case 34:{s=41;break b}case -2:break b;case -1:{s=13;break b}default:{}}if(f>>>0<32){e=f;s=15;break}g=Ul(b,d)|0;if(g>>>0<4294967294)bm(y,g&255)|0;if((f|0)!=92){f=g;continue}if((g|0)!=117){if((g|4|0)!=102)switch(g|0){case 34:case 47:case 92:case 110:case 114:case 116:break;default:{s=40;break b}}f=Ul(b,d)|0;if(f>>>0>=4294967294)continue;bm(y,f&255)|0;continue}f=Ul(b,d)|0;if(f>>>0<4294967294)bm(y,f&255)|0;if((f+-48|0)>>>0>=10)switch(f|0){case 65:case 66:case 67:case 68:case 69:case 70:case 97:case 98:case 99:case 100:case 101:case 102:break;default:{s=32;break b}}f=Ul(b,d)|0;if(f>>>0<4294967294)bm(y,f&255)|0;if((f+-48|0)>>>0>=10)switch(f|0){case 65:case 66:case 67:case 68:case 69:case 70:case 97:case 98:case 99:case 100:case 101:case 102:break;default:{s=32;break b}}f=Ul(b,d)|0;if(f>>>0<4294967294)bm(y,f&255)|0;if((f+-48|0)>>>0>=10)switch(f|0){case 65:case 66:case 67:case 68:case 69:case 70:case 97:case 98:case 99:case 100:case 101:case 102:break;default:{s=32;break b}}f=Ul(b,d)|0;if(f>>>0<4294967294)bm(y,f&255)|0;if((f+-48|0)>>>0>=10)switch(f|0){case 65:case 66:case 67:case 68:case 69:case 70:case 97:case 98:case 99:case 100:case 101:case 102:break;default:{s=32;break b}}f=Ul(b,d)|0;if(f>>>0>=4294967294)continue;bm(y,f&255)|0}c:do if((s|0)==13)Ql(d,b,41827,l);else if((s|0)==15){if((e|1|0)!=-1){D=b+36|0;c[D>>2]=(c[D>>2]|0)+-1;if((e|0)!=10){if(fm(e&255)|0){D=b+28|0;c[D>>2]=(c[D>>2]|0)+-1}}else{D=b+24|0;c[D>>2]=(c[D>>2]|0)+-1;c[b+28>>2]=c[b+32>>2]}D=b+16|0;c[D>>2]=(c[D>>2]|0)+-1}cm(y)|0;if((e|0)==10){Ql(d,b,41850,o);break}else{c[p>>2]=e;Ql(d,b,41869,p);break}}else if((s|0)==32)Ql(d,b,41892,m);else if((s|0)==40)Ql(d,b,41892,n);else if((s|0)==41?(e=Xl((c[b+44>>2]|0)+1|0)|0,e|0):0){c[q>>2]=e;g=(am(y)|0)+1|0;f=a[g>>0]|0;d:do if(f<<24>>24!=34){e:while(1){k=g+1|0;do if(f<<24>>24==92){f=a[k>>0]|0;if(f<<24>>24==117){f=Vl(k)|0;if((f|0)<0){e=g;s=47;break e}l=g+6|0;switch(f&-1024|0){case 56320:{e=f;s=57;break e}case 55296:{if((a[l>>0]|0)!=92){e=f;s=56;break e}k=g+7|0;if((a[k>>0]|0)!=117){e=f;s=56;break e}k=Vl(k)|0;if((k|0)<0){e=l;s=52;break e}if((k&-1024|0)!=56320){e=k;s=54;break e}g=g+12|0;f=(f<<10)+-56613888+k|0;break}default:g=l}em(f,e,z)|0;e=e+(c[z>>2]|0)|0;break}else{switch(f<<24>>24|0){case 47:case 92:case 34:{a[e>>0]=f;break}case 98:{a[e>>0]=8;break}case 102:{a[e>>0]=12;break}case 110:{a[e>>0]=10;break}case 114:{a[e>>0]=13;break}case 116:{a[e>>0]=9;break}default:{}}g=g+2|0;e=e+1|0;break}}else{a[e>>0]=f;g=k;e=e+1|0}while(0);f=a[g>>0]|0;if(f<<24>>24==34)break d}if((s|0)==47){c[w>>2]=e;Ql(d,b,41907,w)}else if((s|0)==52){c[t>>2]=e;Ql(d,b,41907,t)}else if((s|0)==54){c[x>>2]=f;c[x+4>>2]=e;Ql(d,b,41937,x)}else if((s|0)==56){c[u>>2]=e;Ql(d,b,41968,u)}else if((s|0)==57){c[v>>2]=e;Ql(d,b,41968,v)}break c}while(0);a[e>>0]=0;c[q+4>>2]=e-(c[q>>2]|0);c[A>>2]=256;i=B;return}while(0);Yl(c[q>>2]|0);c[q>>2]=0;c[q+4>>2]=0;i=B;return}e=(f|0)==45;if(!(e|(f+-48|0)>>>0<10)){if(((f&-33)+-65|0)>>>0>=26){f=b+16|0;e=a[(c[f>>2]|0)+(b+8)>>0]|0;if(e<<24>>24){g=b+36|0;do{bm(y,e)|0;D=(c[f>>2]|0)+1|0;c[f>>2]=D;c[g>>2]=(c[g>>2]|0)+1;e=a[b+8+D>>0]|0}while(e<<24>>24!=0)}c[A>>2]=-1;i=B;return}do{f=Ul(b,d)|0;e=f>>>0<4294967294;if(e)bm(y,f&255)|0}while(((f&-33)+-65|0)>>>0<26);if(e){if((f|1|0)!=-1){D=b+36|0;c[D>>2]=(c[D>>2]|0)+-1;if((f|0)!=10){if(fm(f&255)|0){D=b+28|0;c[D>>2]=(c[D>>2]|0)+-1}}else{D=b+24|0;c[D>>2]=(c[D>>2]|0)+-1;c[b+28>>2]=c[b+32>>2]}D=b+16|0;c[D>>2]=(c[D>>2]|0)+-1}cm(y)|0}e=am(y)|0;if(!(dp(e,42055)|0)){c[A>>2]=259;i=B;return}if(!(dp(e,42060)|0)){c[A>>2]=260;i=B;return}if(!(dp(e,42066)|0)){c[A>>2]=261;i=B;return}else{c[A>>2]=-1;i=B;return}}c[A>>2]=-1;if(e){e=Ul(b,d)|0;if(e>>>0<4294967294){bm(y,e&255)|0;s=87}else s=96}else{e=f;s=87}if((s|0)==87)if((e|0)==48){e=Ul(b,d)|0;if(e>>>0<4294967294)bm(y,e&255)|0;if((e+-48|0)>>>0<10){if((e|1|0)!=-1){D=b+36|0;c[D>>2]=(c[D>>2]|0)+-1;if(fm(e&255)|0){D=b+28|0;c[D>>2]=(c[D>>2]|0)+-1}D=b+16|0;c[D>>2]=(c[D>>2]|0)+-1}cm(y)|0}else s=108}else s=96;f:do if((s|0)==96){if((e+-48|0)>>>0<10)while(1){e=Ul(b,d)|0;if(e>>>0<4294967294)bm(y,e&255)|0;if((e+-48|0)>>>0>=10){s=108;break f}}if(e>>>0<4294967294){if((e|1|0)!=-1){D=b+36|0;c[D>>2]=(c[D>>2]|0)+-1;if((e|0)!=10){if(fm(e&255)|0){D=b+28|0;c[D>>2]=(c[D>>2]|0)+-1}}else{D=b+24|0;c[D>>2]=(c[D>>2]|0)+-1;c[b+28>>2]=c[b+32>>2]}D=b+16|0;c[D>>2]=(c[D>>2]|0)+-1}cm(y)|0}}while(0);g:do if((s|0)==108){h:do if(!(c[b+52>>2]&8)){switch(e|0){case 46:{s=124;break h}case 101:case 69:break h;default:{}}if(e>>>0<4294967294){if((e|1|0)!=-1){D=b+36|0;c[D>>2]=(c[D>>2]|0)+-1;if((e|0)!=10){if(fm(e&255)|0){D=b+28|0;c[D>>2]=(c[D>>2]|0)+-1}}else{D=b+24|0;c[D>>2]=(c[D>>2]|0)+-1;c[b+28>>2]=c[b+32>>2]}D=b+16|0;c[D>>2]=(c[D>>2]|0)+-1}cm(y)|0}e=am(y)|0;D=eo()|0;c[D>>2]=0;e=to(e,z,10)|0;f=C;if((c[D>>2]|0)!=34){c[A>>2]=257;D=b+64|0;c[D>>2]=e;c[D+4>>2]=f;break g}if((f|0)<0){Ql(d,b,41993,g);break g}else{Ql(d,b,42018,k);break g}}else if((e|0)==46)s=124;while(0);i:do if((s|0)==124){e=Ul(b,d)|0;if((e+-48|0)>>>0<10){bm(y,e&255)|0;while(1){e=Ul(b,d)|0;if(e>>>0<4294967294)bm(y,e&255)|0;if((e+-48|0)>>>0>=10)break i}}if((e|1|0)==-1)break g;D=b+36|0;c[D>>2]=(c[D>>2]|0)+-1;if((e|0)!=10){if(fm(e&255)|0){D=b+28|0;c[D>>2]=(c[D>>2]|0)+-1}}else{D=b+24|0;c[D>>2]=(c[D>>2]|0)+-1;c[b+28>>2]=c[b+32>>2]}D=b+16|0;c[D>>2]=(c[D>>2]|0)+-1;break g}while(0);j:do if((e|32|0)==101){e=Ul(b,d)|0;if(e>>>0<4294967294)bm(y,e&255)|0;switch(e|0){case 43:case 45:{e=Ul(b,d)|0;if(e>>>0<4294967294)bm(y,e&255)|0;break}default:{}}if((e+-48|0)>>>0<10)while(1){e=Ul(b,d)|0;if(e>>>0<4294967294)bm(y,e&255)|0;if((e+-48|0)>>>0>=10)break j}if(e>>>0>=4294967294)break g;if((e|1|0)!=-1){D=b+36|0;c[D>>2]=(c[D>>2]|0)+-1;if((e|0)!=10){if(fm(e&255)|0){D=b+28|0;c[D>>2]=(c[D>>2]|0)+-1}}else{D=b+24|0;c[D>>2]=(c[D>>2]|0)+-1;c[b+28>>2]=c[b+32>>2]}D=b+16|0;c[D>>2]=(c[D>>2]|0)+-1}cm(y)|0;break g}while(0);if(e>>>0<4294967294){if((e|1|0)!=-1){D=b+36|0;c[D>>2]=(c[D>>2]|0)+-1;if((e|0)!=10){if(fm(e&255)|0){D=b+28|0;c[D>>2]=(c[D>>2]|0)+-1}}else{D=b+24|0;c[D>>2]=(c[D>>2]|0)+-1;c[b+28>>2]=c[b+32>>2]}D=b+16|0;c[D>>2]=(c[D>>2]|0)+-1}cm(y)|0}if(!(dm(y,q)|0)){c[A>>2]=258;h[b+64>>3]=+h[q>>3];break}else{Ql(d,b,42034,r);break}}while(0);i=B;return}}function Ul(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,k=0,l=0,m=0,n=0,o=0;o=i;i=i+16|0;if((i|0)>=(j|0))ba();n=o;l=b+20|0;e=c[l>>2]|0;if(e|0){b=e;i=o;return b|0}m=b+16|0;e=c[m>>2]|0;do if(!(a[b+8+e>>0]|0)){k=b+4|0;g=rb[c[b>>2]&7](c[k>>2]|0)|0;if((g|0)==-1){c[l>>2]=-1;b=-1;i=o;return b|0}e=g&255;h=b+8|0;a[h>>0]=e;c[m>>2]=0;if((g&-128|0)!=128){a[b+9>>0]=0;e=0;break}e=fm(e)|0;if(e|0){if(e>>>0>1){f=1;do{a[b+8+f>>0]=rb[c[b>>2]&7](c[k>>2]|0)|0;f=f+1|0}while((f|0)!=(e|0))}if(gm(h,e,0)|0){a[b+8+e>>0]=0;e=c[m>>2]|0;break}}c[l>>2]=-2;c[n>>2]=g;Ql(d,b,41800,n);b=-2;i=o;return b|0}while(0);c[m>>2]=e+1;e=a[b+8+e>>0]|0;f=e<<24>>24;n=b+36|0;c[n>>2]=(c[n>>2]|0)+1;if(e<<24>>24==10){n=b+24|0;c[n>>2]=(c[n>>2]|0)+1;n=b+28|0;c[b+32>>2]=c[n>>2];c[n>>2]=0;b=f;i=o;return b|0}if(!(fm(e)|0)){b=f;i=o;return b|0}b=b+28|0;c[b>>2]=(c[b>>2]|0)+1;b=f;i=o;return b|0}function Vl(b){b=b|0;var c=0,d=0,e=0,f=0;c=a[b+1>>0]|0;d=c<<24>>24;do if((c+-48&255)>=10){if((c+-97&255)<26){c=d+-87|0;break}if((c+-65&255)<26){c=d+-55|0;break}else{b=-1;return b|0}}else c=d+-48|0;while(0);d=a[b+2>>0]|0;e=c<<4;c=d<<24>>24;do if((d+-48&255)>=10){if((d+-97&255)<26){c=c+-87|0;break}if((d+-65&255)<26){c=c+-55|0;break}else{b=-1;return b|0}}else c=c+-48|0;while(0);d=a[b+3>>0]|0;f=c+e<<4;c=d<<24>>24;do if((d+-48&255)>=10){if((d+-97&255)<26){c=c+-87|0;break}if((d+-65&255)<26){c=c+-55|0;break}else{b=-1;return b|0}}else c=c+-48|0;while(0);e=a[b+4>>0]|0;d=c+f<<4;c=e<<24>>24;do if((e+-48&255)>=10){if((e+-97&255)<26){c=c+-87|0;break}if((e+-65&255)<26){c=c+-55|0;break}else{b=-1;return b|0}}else c=c+-48|0;while(0);b=c+d|0;return b|0}function Wl(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=i;i=i+80|0;if((i|0)>=(j|0))ba();f=w+72|0;e=w+64|0;m=w+56|0;p=w+48|0;r=w+40|0;n=w+32|0;q=w+24|0;o=w+16|0;l=w+8|0;v=a+56|0;t=(c[v>>2]|0)+1|0;c[v>>2]=t;if(t>>>0>2048){Ql(d,a,42091,w);a=0;i=w;return a|0}s=a+60|0;a:do switch(c[s>>2]|0){case 256:{g=a+64|0;e=c[g>>2]|0;k=g+4|0;f=c[k>>2]|0;if((b&16|0)==0?No(e,0,f)|0:0){Ql(d,a,42121,l);a=0;i=w;return a|0}e=nm(e,f)|0;if(!e){a=0;i=w;return a|0}else{c[g>>2]=0;c[k>>2]=0;break a}}case 257:{e=a+64|0;e=pm(c[e>>2]|0,c[e+4>>2]|0)|0;u=72;break}case 258:{e=rm(+h[a+64>>3])|0;u=72;break}case 259:{e=tm()|0;u=72;break}case 260:{e=um()|0;u=72;break}case 261:{e=vm()|0;u=72;break}case 123:{t=hm()|0;if(!t){a=0;i=w;return a|0}Tl(a,d);b:do switch(c[s>>2]|0){case 125:{e=t;break a}case 256:{l=a+64|0;m=l+4|0;c:do if(b&1){while(1){e=c[l>>2]|0;f=c[m>>2]|0;c[l>>2]=0;c[m>>2]=0;if(!e){e=0;u=74;break}if(No(e,0,f)|0){u=33;break c}if(im(t,e)|0){u=35;break}Tl(a,d);if((c[s>>2]|0)!=58){u=37;break c}Tl(a,d);g=Wl(a,b,d)|0;if(!g){u=39;break c}k=g+4|0;f=c[k>>2]|0;if((f|0)!=-1)c[k>>2]=f+1;if(jm(t,e,g)|0){u=43;break c}f=c[k>>2]|0;if((f|0)!=-1?(u=f+-1|0,c[k>>2]=u,(u|0)==0):0)km(g);Yl(e);Tl(a,d);e=c[s>>2]|0;if((e|0)!=44){u=50;break c}Tl(a,d);if((c[s>>2]|0)!=256){u=30;break b}}if((u|0)==35){Yl(e);Ql(d,a,42226,n);break b}else if((u|0)==74){i=w;return e|0}}else{while(1){e=c[l>>2]|0;f=c[m>>2]|0;c[l>>2]=0;c[m>>2]=0;if(!e){e=0;break}if(No(e,0,f)|0){u=33;break c}Tl(a,d);if((c[s>>2]|0)!=58){u=37;break c}Tl(a,d);g=Wl(a,b,d)|0;if(!g){u=39;break c}k=g+4|0;f=c[k>>2]|0;if((f|0)!=-1)c[k>>2]=f+1;if(jm(t,e,g)|0){u=43;break c}f=c[k>>2]|0;if((f|0)!=-1?(u=f+-1|0,c[k>>2]=u,(u|0)==0):0)km(g);Yl(e);Tl(a,d);e=c[s>>2]|0;if((e|0)!=44){u=50;break c}Tl(a,d);if((c[s>>2]|0)!=256){u=30;break b}}i=w;return e|0}while(0);if((u|0)==33){Yl(e);Ql(d,a,42189,q);break b}else if((u|0)==37){Yl(e);Ql(d,a,42247,r);break b}else if((u|0)==39){Yl(e);break b}else if((u|0)==43){Yl(e);e=g+4|0;f=c[e>>2]|0;if((f|0)==-1)break b;a=f+-1|0;c[e>>2]=a;if(a|0)break b;km(g);break b}else if((u|0)==50){if((e|0)==125){e=t;u=72;break a}Ql(d,a,42260,p);break b}break}default:u=30}while(0);if((u|0)==30)Ql(d,a,42166,o);e=t+4|0;f=c[e>>2]|0;if((f|0)==-1){a=0;i=w;return a|0}a=f+-1|0;c[e>>2]=a;if(a|0){a=0;i=w;return a|0}km(t);a=0;i=w;return a|0}case 91:{l=lm()|0;if(!l){a=0;i=w;return a|0}Tl(a,d);d:do switch(c[s>>2]|0){case 93:{e=l;break a}case 0:{u=66;break}default:while(1){k=Wl(a,b,d)|0;if(!k)break d;g=k+4|0;e=c[g>>2]|0;if((e|0)!=-1)c[g>>2]=e+1;e=(mm(l,k)|0)==0;f=c[g>>2]|0;if((f|0)!=-1?(t=f+-1|0,c[g>>2]=t,(t|0)==0):0)km(k);if(!e)break d;Tl(a,d);switch(c[s>>2]|0){case 93:{e=l;u=72;break a}case 44:break;default:{u=66;break d}}Tl(a,d);if(!(c[s>>2]|0)){u=66;break d}}}while(0);if((u|0)==66)Ql(d,a,42273,m);e=l+4|0;f=c[e>>2]|0;if((f|0)==-1){a=0;i=w;return a|0}a=f+-1|0;c[e>>2]=a;if(a|0){a=0;i=w;return a|0}km(l);a=0;i=w;return a|0}case -1:{Ql(d,a,42286,e);a=0;i=w;return a|0}default:{Ql(d,a,42300,f);a=0;i=w;return a|0}}while(0);if((u|0)==72)if(!e){a=0;i=w;return a|0}c[v>>2]=(c[v>>2]|0)+-1;a=e;i=w;return a|0}function Xl(a){a=a|0;if(!a){a=0;return a|0}a=rb[c[2340]&7](a)|0;return a|0}function Yl(a){a=a|0;if(!a)return;qb[c[2341]&31](a);return}function Zl(b){b=b|0;var d=0;c[b+8>>2]=16;c[b+4>>2]=0;d=Xl(16)|0;c[b>>2]=d;if(!d){b=-1;return b|0}a[d>>0]=0;b=0;return b|0}function _l(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0)Yl(b);c[a+8>>2]=0;c[a+4>>2]=0;c[a>>2]=0;return}function $l(b){b=b|0;c[b+4>>2]=0;a[c[b>>2]>>0]=0;return}function am(a){a=a|0;return c[a>>2]|0}function bm(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=b+8|0;f=c[g>>2]|0;h=b+4|0;e=c[h>>2]|0;do if((f-e|0)>>>0<=1){if((f|0)<0|e>>>0>4294967293){d=-1;return d|0}f=f<<1;e=e+2|0;e=f>>>0>e>>>0?f:e;f=Xl(e)|0;if(!f){d=-1;return d|0}else{fq(f|0,c[b>>2]|0,c[h>>2]|0)|0;Yl(c[b>>2]|0);c[b>>2]=f;c[g>>2]=e;g=b;e=c[h>>2]|0;break}}else{g=b;f=c[b>>2]|0}while(0);a[f+e>>0]=d;d=(c[h>>2]|0)+1|0;c[h>>2]=d;a[(c[g>>2]|0)+d>>0]=0;d=0;return d|0}function cm(b){b=b|0;var d=0,e=0;d=b+4|0;e=c[d>>2]|0;if(!e){b=0;return b|0}e=e+-1|0;c[d>>2]=e;e=(c[b>>2]|0)+e|0;b=a[e>>0]|0;a[e>>0]=0;return b|0}function dm(b,d){b=b|0;d=d|0;var e=0.0,f=0,g=0,k=0,l=0;l=i;i=i+16|0;if((i|0)>=(j|0))ba();k=l;f=a[c[(op()|0)>>2]>>0]|0;if(f<<24>>24!=46?(g=Bp(c[b>>2]|0,46)|0,g|0):0)a[g>>0]=f;g=eo()|0;c[g>>2]=0;e=+Tp(c[b>>2]|0,k);if(e==s|e==-s?(c[g>>2]|0)==34:0){d=-1;i=l;return d|0}h[d>>3]=e;d=0;i=l;return d|0}function em(b,d,e){b=b|0;d=d|0;e=e|0;if((b|0)<0){e=-1;return e|0}if((b|0)<128){a[d>>0]=b;c[e>>2]=1;e=0;return e|0}if((b|0)<2048){a[d>>0]=b>>>6&31|192;a[d+1>>0]=b&63|128;c[e>>2]=2;e=0;return e|0}if((b|0)<65536){a[d>>0]=b>>>12&15|224;a[d+1>>0]=b>>>6&63|128;a[d+2>>0]=b&63|128;c[e>>2]=3;e=0;return e|0}if((b|0)>=1114112){e=-1;return e|0}a[d>>0]=b>>>18&7|240;a[d+1>>0]=b>>>12&63|128;a[d+2>>0]=b>>>6&63|128;a[d+3>>0]=b&63|128;c[e>>2]=4;e=0;return e|0}function fm(a){a=a|0;if(a<<24>>24>-1){a=1;return a|0}if((a&255)<192|(a&-2)<<24>>24==-64){a=0;return a|0}if((a+62&255)<30){a=2;return a|0}if((a&-16)<<24>>24==-32){a=3;return a|0}else return ((a+16&255)<5?4:0)|0;return 0}function gm(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;f=a[b>>0]|0;j=(d|0)==2;a:do if(j){i=1;f=f&31}else switch(d|0){case 3:{i=1;f=f&15;break a}case 4:{i=1;f=f&7;break a}default:{k=0;return k|0}}while(0);do{h=a[b+i>>0]|0;if(h<<24>>24>-1|(h&255)>191){f=0;k=13;break}g=f<<6;f=h&63|g;i=i+1|0}while(i>>>0>>0);if((k|0)==13)return f|0;if(j&(f|0)<128|((f|0)>1114111|(g&-2048|0)==55296)){k=0;return k|0}if((d|0)==3&(f|0)<2048){k=0;return k|0}if((d|0)==4&(f|0)<65536){k=0;return k|0}if(!e){k=1;return k|0}c[e>>2]=f;k=1;return k|0}function hm(){var a=0;a=Xl(40)|0;if(!a){a=0;return a|0}if(!(c[11305]|0))Dm(0);c[a>>2]=0;c[a+4>>2]=1;if(!(ym(a+8|0)|0)){c[a+36>>2]=0;return a|0}else{Yl(a);a=0;return a|0}return 0}function im(a,b){a=a|0;b=b|0;if(!((a|0)!=0&(b|0)!=0)){b=0;return b|0}if(c[a>>2]|0){b=0;return b|0}b=Cm(a+8|0,b)|0;return b|0}function jm(a,b,d){a=a|0;b=b|0;d=d|0;if(!d){d=-1;return d|0}if((a|0)!=0&(b|0)!=0?!((a|0)==(d|0)|(c[a>>2]|0)!=0):0){if(!(Am(a+8|0,b,d)|0)){d=0;return d|0}a=d+4|0;b=c[a>>2]|0;if((b|0)==-1){d=-1;return d|0}b=b+-1|0;c[a>>2]=b;if(b|0){d=-1;return d|0}km(d);d=-1;return d|0}a=d+4|0;b=c[a>>2]|0;if((b|0)==-1){d=-1;return d|0}b=b+-1|0;c[a>>2]=b;if(b|0){d=-1;return d|0}km(d);d=-1;return d|0}function km(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;if(!a)return;switch(c[a>>2]|0){case 0:{zm(a+8|0);Yl(a);return}case 1:{h=a+12|0;b=c[h>>2]|0;i=a+16|0;if(b|0){e=0;do{d=c[(c[i>>2]|0)+(e<<2)>>2]|0;if(((d|0)!=0?(f=d+4|0,g=c[f>>2]|0,(g|0)!=-1):0)?(j=g+-1|0,c[f>>2]=j,(j|0)==0):0){km(d);b=c[h>>2]|0}e=e+1|0}while(e>>>0>>0)}Yl(c[i>>2]|0);Yl(a);return}case 2:{Yl(c[a+8>>2]|0);Yl(a);return}case 3:{Yl(a);return}case 4:{Yl(a);return}default:return}}function lm(){var a=0,b=0;a=Xl(24)|0;if(!a){a=0;return a|0}c[a>>2]=1;c[a+4>>2]=1;c[a+12>>2]=0;c[a+8>>2]=8;b=Xl(32)|0;c[a+16>>2]=b;if(!b){Yl(a);b=0;return b|0}else{c[a+20>>2]=0;b=a;return b|0}return 0}function mm(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;if(!b){b=-1;return b|0}if(a|0?!((a|0)==(b|0)|(c[a>>2]|0)!=1):0){g=a+12|0;h=a+8|0;d=c[h>>2]|0;e=a+16|0;f=c[e>>2]|0;if(((c[g>>2]|0)+1|0)>>>0>d>>>0){k=d+1|0;a=d<<1;a=k>>>0>a>>>0?k:a;d=Xl(a<<2)|0;if(d|0){c[h>>2]=a;c[e>>2]=d;fq(d|0,f|0,c[g>>2]<<2|0)|0;Yl(f);i=c[e>>2]|0;j=10}}else{i=f;j=10}if((j|0)==10?i|0:0){k=c[g>>2]|0;c[i+(k<<2)>>2]=b;c[g>>2]=k+1;k=0;return k|0}a=b+4|0;d=c[a>>2]|0;if((d|0)==-1){k=-1;return k|0}k=d+-1|0;c[a>>2]=k;if(k|0){k=-1;return k|0}km(b);k=-1;return k|0}a=b+4|0;d=c[a>>2]|0;if((d|0)==-1){k=-1;return k|0}k=d+-1|0;c[a>>2]=k;if(k|0){k=-1;return k|0}km(b);k=-1;return k|0}function nm(a,b){a=a|0;b=b|0;var d=0;if(!a){a=0;return a|0}d=Xl(16)|0;if(!d){a=0;return a|0}c[d>>2]=2;c[d+4>>2]=1;c[d+8>>2]=a;c[d+12>>2]=b;a=d;return a|0}function om(a){a=a|0;if((a|0)!=0?(c[a>>2]|0)==2:0)a=c[a+8>>2]|0;else a=0;return a|0}function pm(a,b){a=a|0;b=b|0;var d=0,e=0;d=Xl(16)|0;if(!d){d=0;return d|0}c[d>>2]=3;c[d+4>>2]=1;e=d+8|0;c[e>>2]=a;c[e+4>>2]=b;return d|0}function qm(a){a=a|0;var b=0;if((a|0)!=0?(c[a>>2]|0)==3:0){b=a+8|0;a=c[b+4>>2]|0;b=c[b>>2]|0}else{a=0;b=0}C=a;return b|0}function rm(a){a=+a;var b=0,d=0.0;d=+N(+a);h[k>>3]=d;b=c[k+4>>2]|0;if(b>>>0>2146435071|(b|0)==2146435071&(c[k>>2]|0)>>>0>4294967295){b=0;return b|0}b=Xl(16)|0;if(!b){b=0;return b|0}c[b>>2]=4;c[b+4>>2]=1;h[b+8>>3]=a;return b|0}function sm(a){a=a|0;var b=0.0;if(!a){b=0.0;return +b}switch(c[a>>2]|0){case 3:{a=a+8|0;b=+((c[a>>2]|0)>>>0)+4294967296.0*+(c[a+4>>2]|0);return +b}case 4:{b=+h[a+8>>3];return +b}default:{b=0.0;return +b}}return 0.0}function tm(){return 9368}function um(){return 9376}function vm(){return 9384}function wm(b,d){b=b|0;d=d|0;var e=0,f=0;if(!b)return;a[b+92>>0]=0;c[b>>2]=-1;c[b+4>>2]=-1;c[b+8>>2]=0;if(!d){a[b+12>>0]=0;return}e=np(d)|0;if(e>>>0<80){Lp(b+12|0,d,e+1|0)|0;return}else{f=b+12|0;a[f>>0]=a[42338]|0;a[f+1>>0]=a[42339]|0;a[f+2>>0]=a[42340]|0;Lp(b+15|0,d+(e+-76)|0,77)|0;return}}function xm(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var k=0,l=0;l=i;i=i+16|0;if((i|0)>=(j|0))ba();k=l;c[k>>2]=h;if(!b){i=l;return}h=b+92|0;if(a[h>>0]|0){i=l;return}c[b>>2]=d;c[b+4>>2]=e;c[b+8>>2]=f;Qo(h,160,g,k)|0;a[b+251>>0]=0;i=l;return}function ym(a){a=a|0;var b=0,d=0,e=0,f=0;c[a>>2]=0;b=a+8|0;c[b>>2]=3;d=Xl(64)|0;c[a+4>>2]=d;if(!d){e=-1;return e|0}e=a+12|0;c[a+16>>2]=e;c[e>>2]=e;f=a+20|0;c[a+24>>2]=f;c[f>>2]=f;b=1<>2];a=0;do{c[d+(a<<3)+4>>2]=e;c[d+(a<<3)>>2]=e;a=a+1|0}while(a>>>0>>0);b=0;return b|0}function zm(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;f=a+12|0;b=c[a+16>>2]|0;if((b|0)==(f|0)){a=a+4|0;a=c[a>>2]|0;Yl(a);return}do{e=b;b=c[b+4>>2]|0;d=c[e+20>>2]|0;if((d|0?(h=d+4|0,g=c[h>>2]|0,(g|0)!=-1):0)?(i=g+-1|0,c[h>>2]=i,(i|0)==0):0)km(d);Yl(e)}while((b|0)!=(f|0));i=a+4|0;i=c[i>>2]|0;Yl(i);return}function Am(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;g=a+8|0;e=c[g>>2]|0;if((c[a>>2]|0)>>>0>=1<>>0){e=e+1|0;h=1<>2]|0);c[i>>2]=f;c[g>>2]=e;n=a+12|0;g=0;do{c[f+(g<<3)+4>>2]=n;c[f+(g<<3)>>2]=n;g=g+1|0}while(g>>>0>>0);m=a+16|0;g=c[m>>2]|0;c[m>>2]=n;c[n>>2]=n;if((g|0)!=(n|0)){m=h+-1|0;f=c[i>>2]|0;do{h=g+4|0;l=g;g=c[h>>2]|0;i=c[l+16>>2]&m;j=f+(i<<3)|0;k=c[j>>2]|0;if((k|0)==(n|0)?(o=f+(i<<3)+4|0,(n|0)==(c[o>>2]|0)):0){c[h>>2]=n;c[l>>2]=c[n>>2];c[(c[n>>2]|0)+4>>2]=l;c[n>>2]=l;c[o>>2]=l}else{c[h>>2]=k;c[l>>2]=c[k>>2];c[(c[k>>2]|0)+4>>2]=l;c[k>>2]=l}c[j>>2]=l}while((g|0)!=(n|0))}}else{n=a+12|0;f=c[a+4>>2]|0}g=np(b)|0;g=Bm(b,g,c[11305]|0)|0;j=(1<>2]|0;j=f+(j<<3)+4|0;if(!((e|0)==(n|0)?(n|0)==(c[j>>2]|0):0))p=15;a:do if((p|0)==15){while(1){if((c[e+16>>2]|0)==(g|0)?(dp(e+24|0,b)|0)==0:0)break;if((e|0)==(c[j>>2]|0))break a;e=c[e+4>>2]|0;p=15}if(e|0){e=e+20|0;f=c[e>>2]|0;if((f|0?(q=f+4|0,r=c[q>>2]|0,(r|0)!=-1):0)?(a=r+-1|0,c[q>>2]=a,(a|0)==0):0)km(f);c[e>>2]=d;a=0;return a|0}}while(0);e=np(b)|0;if(e>>>0>4294967270){a=-1;return a|0}i=Xl(e+25|0)|0;if(!i){a=-1;return a|0}c[i+16>>2]=g;Lp(i+24|0,b,e+1|0)|0;c[i+20>>2]=d;e=i+4|0;c[e>>2]=i;c[i>>2]=i;f=i+8|0;g=i+12|0;c[g>>2]=f;c[f>>2]=f;h=c[k>>2]|0;if((h|0)==(n|0)?(n|0)==(c[j>>2]|0):0){c[e>>2]=n;c[i>>2]=c[n>>2];c[(c[a+12>>2]|0)+4>>2]=i;c[n>>2]=i;c[j>>2]=i}else{c[e>>2]=h;c[i>>2]=c[h>>2];c[(c[h>>2]|0)+4>>2]=i;c[h>>2]=i}c[k>>2]=i;d=a+20|0;c[g>>2]=d;c[f>>2]=c[d>>2];c[(c[d>>2]|0)+4>>2]=f;c[d>>2]=f;c[a>>2]=(c[a>>2]|0)+1;a=0;return a|0} +function Bm(a,b,f){a=a|0;b=b|0;f=f|0;var g=0,h=0,i=0,j=0;i=b+-559038737+f|0;f=a;a:do if(f&3)if(!(f&1)){if(b>>>0>12){g=i;h=i;f=i;do{h=((e[a+6>>1]|0)<<16|(e[a+4>>1]|0))+h|0;f=((e[a+10>>1]|0)<<16|(e[a+8>>1]|0))+f|0;g=(f<<4|f>>>28)^((e[a+2>>1]|0)<<16|(e[a>>1]|0))+g-f;f=f+h|0;h=(g<<6|g>>>26)^h-g;g=g+f|0;f=(h<<8|h>>>24)^f-h;h=h+g|0;g=(f<<16|f>>>16)^g-f;f=f+h|0;h=(g<<19|g>>>13)^h-g;g=g+f|0;f=(h<<4|h>>>28)^f-h;h=h+g|0;b=b+-12|0;a=a+12|0}while(b>>>0>12)}else{g=i;h=i;f=i}switch(b|0){case 12:{g=((e[a+2>>1]|0)<<16|(e[a>>1]|0))+g|0;b=((e[a+6>>1]|0)<<16|(e[a+4>>1]|0))+h|0;f=((e[a+10>>1]|0)<<16|(e[a+8>>1]|0))+f|0;break a}case 11:{f=((d[a+10>>0]|0)<<16)+f|0;j=24;break}case 10:{j=24;break}case 9:{f=(d[a+8>>0]|0)+f|0;j=26;break}case 8:{j=26;break}case 7:{b=((d[a+6>>0]|0)<<16)+h|0;j=28;break}case 6:{b=h;j=28;break}case 5:{b=(d[a+4>>0]|0)+h|0;j=30;break}case 4:{b=h;j=30;break}case 3:{g=((d[a+2>>0]|0)<<16)+g|0;j=32;break}case 2:{j=32;break}case 1:{g=(d[a>>0]|0)+g|0;b=h;break a}case 0:{j=f;return j|0}default:{b=h;break a}}if((j|0)==24){g=((e[a+2>>1]|0)<<16|(e[a>>1]|0))+g|0;b=((e[a+6>>1]|0)<<16|(e[a+4>>1]|0))+h|0;f=(e[a+8>>1]|0)+f|0;break}else if((j|0)==26){g=((e[a+2>>1]|0)<<16|(e[a>>1]|0))+g|0;b=((e[a+6>>1]|0)<<16|(e[a+4>>1]|0))+h|0;break}else if((j|0)==28){g=((e[a+2>>1]|0)<<16|(e[a>>1]|0))+g|0;b=(e[a+4>>1]|0)+b|0;break}else if((j|0)==30){g=((e[a+2>>1]|0)<<16|(e[a>>1]|0))+g|0;break}else if((j|0)==32){g=(e[a>>1]|0)+g|0;b=h;break}}else{if(b>>>0>12){g=i;h=i;f=i;do{h=(d[a+4>>0]|0)+h+((d[a+5>>0]|0)<<8)+((d[a+6>>0]|0)<<16)+((d[a+7>>0]|0)<<24)|0;f=(d[a+8>>0]|0)+f+((d[a+9>>0]|0)<<8)+((d[a+10>>0]|0)<<16)+((d[a+11>>0]|0)<<24)|0;g=(f<<4|f>>>28)^(d[a>>0]|0)+g+((d[a+1>>0]|0)<<8)+((d[a+2>>0]|0)<<16)+((d[a+3>>0]|0)<<24)-f;f=f+h|0;h=(g<<6|g>>>26)^h-g;g=g+f|0;f=(h<<8|h>>>24)^f-h;h=h+g|0;g=(f<<16|f>>>16)^g-f;f=f+h|0;h=(g<<19|g>>>13)^h-g;g=g+f|0;f=(h<<4|h>>>28)^f-h;h=h+g|0;b=b+-12|0;a=a+12|0}while(b>>>0>12)}else{g=i;h=i;f=i}switch(b|0){case 12:{f=((d[a+11>>0]|0)<<24)+f|0;j=37;break}case 11:{j=37;break}case 10:{j=38;break}case 9:{j=39;break}case 8:{j=40;break}case 7:{b=h;j=41;break}case 6:{b=h;j=42;break}case 5:{b=h;j=43;break}case 4:{b=h;j=44;break}case 3:{b=h;j=45;break}case 2:{b=h;j=46;break}case 1:{b=h;break}case 0:{j=f;return j|0}default:{b=h;break a}}if((j|0)==37){f=((d[a+10>>0]|0)<<16)+f|0;j=38}if((j|0)==38){f=((d[a+9>>0]|0)<<8)+f|0;j=39}if((j|0)==39){f=(d[a+8>>0]|0)+f|0;j=40}if((j|0)==40){b=((d[a+7>>0]|0)<<24)+h|0;j=41}if((j|0)==41){b=((d[a+6>>0]|0)<<16)+b|0;j=42}if((j|0)==42){b=((d[a+5>>0]|0)<<8)+b|0;j=43}if((j|0)==43){b=(d[a+4>>0]|0)+b|0;j=44}if((j|0)==44){g=((d[a+3>>0]|0)<<24)+g|0;j=45}if((j|0)==45){g=((d[a+2>>0]|0)<<16)+g|0;j=46}if((j|0)==46)g=((d[a+1>>0]|0)<<8)+g|0;g=(d[a>>0]|0)+g|0;break}else{if(b>>>0>12){g=i;h=i;f=i;do{h=(c[a+4>>2]|0)+h|0;f=(c[a+8>>2]|0)+f|0;g=(f<<4|f>>>28)^(c[a>>2]|0)+g-f;f=f+h|0;h=(g<<6|g>>>26)^h-g;g=g+f|0;f=(h<<8|h>>>24)^f-h;h=h+g|0;g=(f<<16|f>>>16)^g-f;f=f+h|0;h=(g<<19|g>>>13)^h-g;g=g+f|0;f=(h<<4|h>>>28)^f-h;h=h+g|0;b=b+-12|0;a=a+12|0}while(b>>>0>12)}else{g=i;h=i;f=i}do switch(b|0){case 12:{g=(c[a>>2]|0)+g|0;b=(c[a+4>>2]|0)+h|0;f=(c[a+8>>2]|0)+f|0;break a}case 11:{g=(c[a>>2]|0)+g|0;b=(c[a+4>>2]|0)+h|0;f=(c[a+8>>2]&16777215)+f|0;break a}case 10:{g=(c[a>>2]|0)+g|0;b=(c[a+4>>2]|0)+h|0;f=(c[a+8>>2]&65535)+f|0;break a}case 9:{g=(c[a>>2]|0)+g|0;b=(c[a+4>>2]|0)+h|0;f=(c[a+8>>2]&255)+f|0;break a}case 8:{g=(c[a>>2]|0)+g|0;b=(c[a+4>>2]|0)+h|0;break a}case 7:{g=(c[a>>2]|0)+g|0;b=(c[a+4>>2]&16777215)+h|0;break a}case 6:{g=(c[a>>2]|0)+g|0;b=(c[a+4>>2]&65535)+h|0;break a}case 5:{g=(c[a>>2]|0)+g|0;b=(c[a+4>>2]&255)+h|0;break a}case 4:{g=(c[a>>2]|0)+g|0;b=h;break a}case 3:{g=(c[a>>2]&16777215)+g|0;b=h;break a}case 2:{g=(c[a>>2]&65535)+g|0;b=h;break a}case 1:{g=(c[a>>2]&255)+g|0;b=h;break a}case 0:{j=f;return j|0}default:{b=h;break a}}while(0)}while(0);i=(f^b)-(b<<14|b>>>18)|0;j=(i^g)-(i<<11|i>>>21)|0;h=(j^b)-(j<<25|j>>>7)|0;i=(h^i)-(h<<16|h>>>16)|0;j=(i^j)-(i<<4|i>>>28)|0;j=(j^h)-(j<<14|j>>>18)|0;j=(j^i)-(j<<24|j>>>8)|0;return j|0}function Cm(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;f=np(b)|0;f=Bm(b,f,c[11305]|0)|0;e=(1<>2])+-1&f;h=c[a+4>>2]|0;d=c[h+(e<<3)>>2]|0;e=h+(e<<3)+4|0;if((d|0)==(a+12|0)?(d|0)==(c[e>>2]|0):0){h=0;return h|0}while(1){if((c[d+16>>2]|0)==(f|0)?(dp(d+24|0,b)|0)==0:0)break;if((d|0)==(c[e>>2]|0)){d=0;g=9;break}d=c[d+4>>2]|0}if((g|0)==9)return d|0;if(!d){h=0;return h|0}h=c[d+20>>2]|0;return h|0}function Dm(b){b=b|0;var e=0,f=0,g=0,h=0;g=i;i=i+16|0;if((i|0)>=(j|0))ba();f=g;e=g+8|0;if(c[11305]|0){i=g;return}h=a[45768]|0;a[45768]=1;if(h<<24>>24){do Ba()|0;while(!(c[11305]|0));i=g;return}if(!b){b=fp(42342,0,f)|0;if((b|0)!=-1?(h=(Wp(b,e,4)|0)==4,ep(b)|0,h):0)b=((d[e+1>>0]|0|(d[e>>0]|0)<<8)<<8|(d[e+2>>0]|0))<<8|(d[e+3>>0]|0);else{hb(f|0,0)|0;b=c[f+4>>2]^c[f>>2];b=b^(Dp()|0)}b=(b|0)==0?1:b}c[11305]=b;i=g;return}function Em(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if((a|0)!=8){a=0;return a|0}a=Xp(28)|0;c[a+20>>2]=g;g=255-g|0;c[a+8>>2]=g;c[a+12>>2]=f;c[a+4>>2]=g-f;c[a>>2]=Fm(b&65535,d&255,e&255,f)|0;c[a+16>>2]=Xp(g)|0;c[a+24>>2]=Xp(f)|0;return a|0}function Fm(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=i;i=i+48|0;if((i|0)>=(j|0))ba();s=t+32|0;r=t+24|0;m=t+16|0;n=t+8|0;o=t;p=Zp(1,156)|0;q=Xp(512)|0;k=Xp(256)|0;a[q>>0]=1;a[k>>0]=0;b=b&65535;g=1;h=1;do{l=g<<1&65534;g=(l>>>0>255?b:0)^l;a[q+h>>0]=g;if(h>>>0<256)a[k+g>>0]=h;h=h+1|0}while((h|0)!=512);g=k;c[p+16>>2]=q;c[p+20>>2]=g;c[p>>2]=255;c[p+8>>2]=f;c[p+4>>2]=255-f;a[p+12>>0]=d;a[p+13>>0]=e;k=Xp(f)|0;c[p+32>>2]=k;l=p+24|0;h=e&255;c[r>>2]=q;c[r+4>>2]=g;if(f|0){b=d&255;g=0;do{a[k+g>>0]=a[q+(((_(g+b|0,h)|0)>>>0)%255|0)>>0]|0;g=g+1|0}while((g|0)!=(f|0))};c[s>>2]=c[r>>2];c[s+4>>2]=c[r+4>>2];Gm(m,s,f,k);r=m;s=c[r+4>>2]|0;f=l;c[f>>2]=c[r>>2];c[f+4>>2]=s;Hm(n,254);f=n;s=c[f+4>>2]|0;r=p+40|0;c[r>>2]=c[f>>2];c[r+4>>2]=s;Hm(o,254);r=o;s=c[r+4>>2]|0;f=p+48|0;c[f>>2]=c[r>>2];c[f+4>>2]=s;i=t;return p|0}function Gm(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;C=i;i=i+16|0;if((i|0)>=(j|0))ba();w=C;x=f+1|0;y=Xp(x)|0;z=y;A=Zp(x,1)|0;c[w>>2]=A;B=Zp(x,1)|0;c[w+8>>2]=B;a[A>>0]=a[g>>0]|0;a[A+1>>0]=1;c[w+4>>2]=1;if(f>>>0<=1){g=A;fq(y|0,g|0,x|0)|0;Yp(A);Yp(B);c[b>>2]=z;b=b+4|0;c[b>>2]=f;i=C;return}v=c[e>>2]|0;q=c[e+4>>2]|0;r=q+1|0;s=A;t=1;u=0;while(1){m=a[g+t>>0]|0;o=u;u=u&1^1;p=t;t=t+1|0;c[w+(u<<3)+4>>2]=t;e=c[w+(u<<3)>>2]|0;o=c[w+(o<<3)+4>>2]|0;eq(e|0,0,p+2|0)|0;n=o>>>0>t>>>0?t:o;k=q+(m&255)|0;if(!(m<<24>>24)){h=0;do h=h+1|0;while(h>>>0<=n>>>0)}else{m=0;do{l=e+m|0;h=a[s+m>>0]|0;if(!(h<<24>>24))h=0;else h=a[v+((d[q+(h&255)>>0]|0)+(d[k>>0]|0))>>0]|0;a[l>>0]=h^a[l>>0];m=m+1|0}while(m>>>0<=n>>>0)}k=o>>>0>p>>>0?p:o;m=0;do{h=m;m=m+1|0;l=e+m|0;h=a[s+h>>0]|0;if(!(h<<24>>24))h=0;else h=a[v+((d[q+(h&255)>>0]|0)+(d[r>>0]|0))>>0]|0;a[l>>0]=h^a[l>>0]}while(m>>>0<=k>>>0);if((t|0)==(f|0))break;else s=e}fq(y|0,e|0,x|0)|0;Yp(A);Yp(B);c[b>>2]=z;b=b+4|0;c[b>>2]=f;i=C;return}function Hm(a,b){a=a|0;b=b|0;c[a>>2]=Xp(b+1|0)|0;c[a+4>>2]=b;return}function Im(a){a=a|0;Jm(c[a>>2]|0);Yp(c[a+16>>2]|0);Yp(c[a+24>>2]|0);Yp(a);return}function Jm(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;h=i;i=i+16|0;if((i|0)>=(j|0))ba();g=h;f=c[b+20>>2]|0;Yp(c[b+16>>2]|0);Yp(f);f=b+24|0;c[g>>2]=c[f>>2];c[g+4>>2]=c[f+4>>2];Km(g);Yp(c[b+32>>2]|0);f=b+40|0;c[g>>2]=c[f>>2];c[g+4>>2]=c[f+4>>2];Km(g);f=b+48|0;c[g>>2]=c[f>>2];c[g+4>>2]=c[f+4>>2];Km(g);if(!(a[b+152>>0]|0)){Yp(b);i=h;return}Yp(c[b+56>>2]|0);Yp(c[b+60>>2]|0);d=b+64|0;c[g>>2]=c[d>>2];c[g+4>>2]=c[d+4>>2];Km(g);d=b+72|0;c[g>>2]=c[d>>2];c[g+4>>2]=c[d+4>>2];Km(g);d=b+80|0;c[g>>2]=c[d>>2];c[g+4>>2]=c[d+4>>2];Km(g);d=b+88|0;c[g>>2]=c[d>>2];c[g+4>>2]=c[d+4>>2];Km(g);Yp(c[b+96>>2]|0);Yp(c[b+100>>2]|0);Yp(c[b+104>>2]|0);d=b+112|0;c[g>>2]=c[d>>2];c[g+4>>2]=c[d+4>>2];Km(g);d=b+120|0;c[g>>2]=c[d>>2];c[g+4>>2]=c[d+4>>2];Km(g);d=b+128|0;c[g>>2]=c[d>>2];c[g+4>>2]=c[d+4>>2];Km(g);d=b+8|0;e=b+36|0;if(c[d>>2]|0){f=0;do{Yp(c[(c[e>>2]|0)+(f<<2)>>2]|0);f=f+1|0}while(f>>>0<(c[d>>2]|0)>>>0)}Yp(c[e>>2]|0);d=b+108|0;e=0;do{Yp(c[(c[d>>2]|0)+(e<<2)>>2]|0);e=e+1|0}while((e|0)!=256);Yp(c[d>>2]|0);f=b+136|0;c[g>>2]=c[f>>2];c[g+4>>2]=c[f+4>>2];Km(g);f=b+144|0;c[g>>2]=c[f>>2];c[g+4>>2]=c[f+4>>2];Km(g);Yp(b);i=h;return}function Km(a){a=a|0;Yp(c[a>>2]|0);return}function Lm(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=a+4|0;f=a+16|0;Mm(c[a>>2]|0,b,c[e>>2]|0,c[f>>2]|0)|0;fq(d|0,(c[f>>2]|0)+(c[e>>2]|0)|0,c[a+12>>2]|0)|0;return}function Mm(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=i;i=i+32|0;if((i|0)>=(j|0))ba();p=s+24|0;o=s+16|0;n=s+8|0;m=s;k=b+4|0;g=c[k>>2]|0;if(g>>>0>>0){b=-1;i=s;return b|0}r=g-e|0;l=(e|0)==0;q=b+44|0;if(!l){g=b+40|0;h=0;do{a[(c[g>>2]|0)+((c[q>>2]|0)-(h+r))>>0]=a[d+h>>0]|0;h=h+1|0}while((h|0)!=(e|0))}h=b+40|0;eq((c[h>>2]|0)+(1-r+(c[q>>2]|0))|0,0,r|0)|0;eq(c[h>>2]|0,0,(c[q>>2]|0)+1-(c[k>>2]|0)|0)|0;g=b+16|0;d=b+24|0;k=b+48|0;c[m>>2]=c[g>>2];c[m+4>>2]=c[g+4>>2];c[n>>2]=c[h>>2];c[n+4>>2]=c[h+4>>2];c[o>>2]=c[d>>2];c[o+4>>2]=c[d+4>>2];c[p>>2]=c[k>>2];c[p+4>>2]=c[k+4>>2];Nm(m,n,o,p);if(!l){g=0;do{a[f+g>>0]=a[(c[h>>2]|0)+((c[q>>2]|0)-(g+r))>>0]|0;g=g+1|0}while((g|0)!=(e|0))}d=b+8|0;g=c[d>>2]|0;if(g|0){h=0;do{r=h;h=h+1|0;a[f+(r+e)>>0]=a[(c[k>>2]|0)+(g-h)>>0]|0;g=c[d>>2]|0}while(h>>>0>>0)}b=c[b>>2]|0;i=s;return b|0}function Nm(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;h=c[e+4>>2]|0;if((c[g+4>>2]|0)>>>0>>0)return;n=c[g>>2]|0;fq(n|0,c[e>>2]|0,h+1|0)|0;if(!h)return;l=c[b+4>>2]|0;m=c[f>>2]|0;j=c[f+4>>2]|0;k=(d[l+(d[m+j>>0]|0)>>0]|0)^255;i=c[b>>2]|0;while(1){if(h>>>0>>0){g=11;break}g=a[n+h>>0]|0;if(g<<24>>24){b=h-j|0;g=k+(d[l+(g&255)>>0]|0)|0;g=(g>>>0>255&1)+g&255;f=0;do{e=a[m+f>>0]|0;if(e<<24>>24){o=n+(b+f)|0;a[o>>0]=a[i+((d[l+(e&255)>>0]|0)+g)>>0]^a[o>>0]}f=f+1|0}while(f>>>0<=j>>>0)}h=h+-1|0;if(!h){g=11;break}}if((g|0)==11)return}function Om(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;if((f|0)>0){h=b+20|0;g=b+24|0;i=0;do{a[(c[g>>2]|0)+i>>0]=(c[e+(i<<2)>>2]|0)-(c[h>>2]|0);i=i+1|0}while((i|0)!=(f|0))}else g=b+24|0;Pm(c[b>>2]|0,d,c[b+8>>2]|0,c[g>>2]|0,f,d)|0;return}function Pm(b,e,f,g,h,k){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0;N=i;i=i+64|0;if((i|0)>=(j|0))ba();I=N+56|0;G=N+48|0;F=N+24|0;x=N+16|0;J=N;u=N+40|0;t=N+32|0;s=N+8|0;if(!h){k=Qm(b,e,f,k)|0;i=N;return k|0}n=c[b>>2]|0;if(n>>>0>>0){k=-1;i=N;return k|0}L=b+8|0;M=c[L>>2]|0;if(M>>>0>>0){k=-1;i=N;return k|0}l=f-M|0;p=n-f|0;if(!(a[b+152>>0]|0))Rm(b);if(f|0){m=b+64|0;o=0;do{K=o;o=o+1|0;a[(c[m>>2]|0)+K>>0]=a[e+(f-o)>>0]|0}while((o|0)!=(f|0))}if((n|0)!=(f|0)){m=b+64|0;n=0;do{a[(c[m>>2]|0)+(n+f)>>0]=0;n=n+1|0}while((n|0)!=(p|0))}m=p^255;K=b+104|0;n=0;do{a[(c[K>>2]|0)+n>>0]=(c[b>>2]|0)+m-(d[g+n>>0]|0);n=n+1|0}while((n|0)!=(h|0));w=b+16|0;E=b+13|0;o=c[K>>2]|0;B=b+96|0;p=c[B>>2]|0;n=c[w>>2]|0;C=b+20|0;e=c[C>>2]|0;g=d[E>>0]|0;q=e+1|0;r=0;do{m=a[n+(((_(d[e+(d[n+(d[o+r>>0]|0)>>0]|0)>>0]|0,g)|0)>>>0)%255|0)>>0]|0;if(!(m<<24>>24))m=0;else m=a[n+((d[q>>0]|0)+255-(d[e+(m&255)>>0]|0)&65535)>>0]|0;a[p+r>>0]=m;r=r+1|0}while((r|0)!=(h|0));q=b+88|0;D=c[B>>2]|0;H=c[w>>2]|0;m=c[C>>2]|0;g=b+92|0;n=c[g>>2]|0;c[F>>2]=c[q>>2];c[F+4>>2]=n;c[x>>2]=H;c[x+4>>2]=m;c[G>>2]=c[x>>2];c[G+4>>2]=c[x+4>>2];c[I>>2]=c[F>>2];c[I+4>>2]=c[F+4>>2];Zm(s,G,h,D,I,b+136|0);D=s;m=c[D+4>>2]|0;H=q;c[H>>2]=c[D>>2];c[H+4>>2]=m;H=b+64|0;m=c[b+36>>2]|0;D=b+56|0;n=c[D>>2]|0;e=c[L>>2]|0;z=c[w>>2]|0;A=c[C>>2]|0;y=c[b+68>>2]|0;c[F>>2]=c[H>>2];c[F+4>>2]=y;c[x>>2]=z;c[x+4>>2]=A;eq(n|0,0,e|0)|0;if(e){o=1;p=0;do{A=c[m+(p<<2)>>2]|0;c[G>>2]=c[x>>2];c[G+4>>2]=c[x+4>>2];c[I>>2]=c[F>>2];c[I+4>>2]=c[F+4>>2];A=Tm(G,I,A)|0;o=o&A<<24>>24==0;a[n+p>>0]=A;p=p+1|0}while((p|0)!=(e|0));if(!o){m=c[D>>2]|0;n=b+60|0;z=c[n>>2]|0;A=c[g>>2]|0;c[J>>2]=c[q>>2];c[J+4>>2]=A;A=(c[L>>2]|0)+-1|0;c[u+4>>2]=A;c[u>>2]=m;c[t+4>>2]=A;c[t>>2]=z;c[x>>2]=c[w>>2];c[x+4>>2]=c[w+4>>2];c[F>>2]=c[J>>2];c[F+4>>2]=c[J+4>>2];c[G>>2]=c[u>>2];c[G+4>>2]=c[u+4>>2];c[I>>2]=c[t>>2];c[I+4>>2]=c[t+4>>2];Xm(x,F,G,I);z=c[L>>2]|0;A=Xp(z)|0;m=c[D>>2]|0;fq(A|0,m|0,z|0)|0;if(z>>>0>h>>>0?(a[m>>0]=a[(c[n>>2]|0)+h>>0]|0,v=h+1|0,v>>>0<(c[L>>2]|0)>>>0):0){m=v;do{a[(c[D>>2]|0)+(m-h)>>0]=a[(c[n>>2]|0)+m>>0]|0;m=m+1|0}while(m>>>0<(c[L>>2]|0)>>>0)}y=b+72|0;z=b+76|0;c[z>>2]=Um(b,h)|0;n=b+80|0;e=0;do{a[(c[n>>2]|0)+e>>0]=a[(c[C>>2]|0)+(d[(c[y>>2]|0)+e>>0]|0)>>0]|0;e=e+1|0;m=c[z>>2]|0}while(e>>>0<=m>>>0);c[b+84>>2]=m;n=c[B>>2]|0;e=c[b+108>>2]|0;o=b+80|0;m=o;o=o+4|0;o=d[o>>0]|d[o+1>>0]<<8|d[o+2>>0]<<16|d[o+3>>0]<<24;p=F;c[p>>2]=d[m>>0]|d[m+1>>0]<<8|d[m+2>>0]<<16|d[m+3>>0]<<24;c[p+4>>2]=o;p=w;m=p;p=p+4|0;p=d[p>>0]|d[p+1>>0]<<8|d[p+2>>0]<<16|d[p+3>>0]<<24;g=x;c[g>>2]=d[m>>0]|d[m+1>>0]<<8|d[m+2>>0]<<16|d[m+3>>0]<<24;c[g+4>>2]=p;g=F+4|0;eq(n+h|0,0,o|0)|0;o=0;p=0;m=h;while(1){v=c[e+(p<<2)>>2]|0;c[G>>2]=c[x>>2];c[G+4>>2]=c[x+4>>2];c[I>>2]=c[F>>2];c[I+4>>2]=c[F+4>>2];if(!((Vm(G,I,v)|0)<<24>>24)){a[n+m>>0]=o;m=m+1|0}p=p+1|0;if((p|0)==256)break;else o=o+1<<16>>16}if((m|0)!=((c[g>>2]|0)+h|0)){k=-1;i=N;return k|0}Hm(J,(c[z>>2]|0)+h|0);c[x>>2]=c[w>>2];c[x+4>>2]=c[w+4>>2];c[F>>2]=c[q>>2];c[F+4>>2]=c[q+4>>2];c[G>>2]=c[y>>2];c[G+4>>2]=c[y+4>>2];c[I>>2]=c[J>>2];c[I+4>>2]=c[J+4>>2];Xm(x,F,G,I);x=y;w=c[x>>2]|0;x=c[x+4>>2]|0;t=J;v=c[t+4>>2]|0;s=y;c[s>>2]=c[t>>2];c[s+4>>2]=v;s=c[B>>2]|0;t=c[K>>2]|0;u=b+16|0;u=d[u>>0]|d[u+1>>0]<<8|d[u+2>>0]<<16|d[u+3>>0]<<24;q=d[C>>0]|d[C+1>>0]<<8|d[C+2>>0]<<16|d[C+3>>0]<<24;if(v|0){r=q+1|0;p=d[E>>0]|0;g=0;do{m=a[s+g>>0]|0;a:do if(m<<24>>24){n=a[u+((d[r>>0]|0)+255-(d[q+(m&255)>>0]|0)&65535)>>0]|0;m=0;o=0;while(1){e=o+1<<16>>16;if((a[u+(((_(d[q+(o&255)>>0]|0,p)|0)>>>0)%255|0)>>0]|0)==n<<24>>24)break;if((e&65535)<256){m=e&65535;o=e}else break a}a[t+g>>0]=a[q+m>>0]|0}while(0);g=g+1|0}while((g|0)!=(v|0))}fq(c[D>>2]|0,A|0,c[L>>2]|0)|0;Wm(b);if(c[z>>2]|0){m=b+100|0;n=0;do{b=(c[H>>2]|0)+(d[(c[K>>2]|0)+n>>0]|0)|0;a[b>>0]=a[(c[m>>2]|0)+n>>0]^a[b>>0];n=n+1|0}while(n>>>0<(c[z>>2]|0)>>>0)}b=y;c[b>>2]=w;c[b+4>>2]=x;if((M|0)!=(f|0)){m=0;do{M=m;m=m+1|0;a[k+M>>0]=a[(c[H>>2]|0)+(f-m)>>0]|0}while((m|0)!=(l|0))}k=l;i=N;return k|0}}if((M|0)==(f|0)){k=l;i=N;return k|0}m=0;do{M=m;m=m+1|0;a[k+M>>0]=a[(c[H>>2]|0)+(f-m)>>0]|0}while((m|0)!=(l|0));i=N;return l|0}function Qm(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=i;i=i+32|0;if((i|0)>=(j|0))ba();t=A+24|0;u=A+16|0;r=A+8|0;s=A;m=c[b>>2]|0;if(m>>>0>>0){g=-1;i=A;return g|0}o=b+8|0;z=c[o>>2]|0;h=f-z|0;if(!(a[b+152>>0]|0))Rm(b);if(f|0){k=b+64|0;l=0;do{y=l;l=l+1|0;a[(c[k>>2]|0)+y>>0]=a[e+(f-l)>>0]|0}while((l|0)!=(f|0))}if((m|0)!=(f|0)){l=b+64|0;k=m-f|0;e=0;do{a[(c[l>>2]|0)+(e+f)>>0]=0;e=e+1|0}while((e|0)!=(k|0))}q=b+16|0;y=b+64|0;m=c[b+36>>2]|0;n=c[b+56>>2]|0;k=c[o>>2]|0;v=c[q>>2]|0;w=b+20|0;x=c[w>>2]|0;p=c[b+68>>2]|0;c[r>>2]=c[y>>2];c[r+4>>2]=p;c[s>>2]=v;c[s+4>>2]=x;eq(n|0,0,k|0)|0;if(k){e=1;l=0;do{x=c[m+(l<<2)>>2]|0;c[u>>2]=c[s>>2];c[u+4>>2]=c[s+4>>2];c[t>>2]=c[r>>2];c[t+4>>2]=c[r+4>>2];x=Tm(u,t,x)|0;e=e&x<<24>>24==0;a[n+l>>0]=x;l=l+1|0}while((l|0)!=(k|0));if(!e){x=b+76|0;c[x>>2]=Um(b,0)|0;e=b+72|0;l=b+80|0;m=0;do{a[(c[l>>2]|0)+m>>0]=a[(c[w>>2]|0)+(d[(c[e>>2]|0)+m>>0]|0)>>0]|0;m=m+1|0;k=c[x>>2]|0}while(m>>>0<=k>>>0);c[b+84>>2]=k;p=b+96|0;m=c[p>>2]|0;n=c[b+108>>2]|0;e=b+80|0;k=e;e=e+4|0;e=d[e>>0]|d[e+1>>0]<<8|d[e+2>>0]<<16|d[e+3>>0]<<24;l=r;c[l>>2]=d[k>>0]|d[k+1>>0]<<8|d[k+2>>0]<<16|d[k+3>>0]<<24;c[l+4>>2]=e;l=q;k=l;l=l+4|0;l=d[l>>0]|d[l+1>>0]<<8|d[l+2>>0]<<16|d[l+3>>0]<<24;o=s;c[o>>2]=d[k>>0]|d[k+1>>0]<<8|d[k+2>>0]<<16|d[k+3>>0]<<24;c[o+4>>2]=l;o=r+4|0;eq(m|0,0,e|0)|0;e=0;l=0;k=0;while(1){v=c[n+(l<<2)>>2]|0;c[u>>2]=c[s>>2];c[u+4>>2]=c[s+4>>2];c[t>>2]=c[r>>2];c[t+4>>2]=c[r+4>>2];if(!((Vm(u,t,v)|0)<<24>>24)){a[m+k>>0]=e;k=k+1|0}l=l+1|0;if((l|0)==256)break;else e=e+1<<16>>16}if((k|0)!=(c[o>>2]|0)){g=-1;i=A;return g|0}u=c[p>>2]|0;v=b+104|0;r=c[v>>2]|0;s=c[x>>2]|0;t=b+16|0;t=d[t>>0]|d[t+1>>0]<<8|d[t+2>>0]<<16|d[t+3>>0]<<24;n=d[w>>0]|d[w+1>>0]<<8|d[w+2>>0]<<16|d[w+3>>0]<<24;if(s|0){o=n+1|0;p=d[b+13>>0]|0;q=0;do{k=a[u+q>>0]|0;a:do if(k<<24>>24){e=a[t+((d[o>>0]|0)+255-(d[n+(k&255)>>0]|0)&65535)>>0]|0;k=0;m=0;while(1){l=m+1<<16>>16;if((a[t+(((_(d[n+(m&255)>>0]|0,p)|0)>>>0)%255|0)>>0]|0)==e<<24>>24)break;if((l&65535)<256){k=l&65535;m=l}else break a}a[r+q>>0]=a[n+k>>0]|0}while(0);q=q+1|0}while((q|0)!=(s|0))}Wm(b);if(c[x>>2]|0){k=b+100|0;e=0;do{b=(c[y>>2]|0)+(d[(c[v>>2]|0)+e>>0]|0)|0;a[b>>0]=a[(c[k>>2]|0)+e>>0]^a[b>>0];e=e+1|0}while(e>>>0<(c[x>>2]|0)>>>0)}if((z|0)==(f|0)){g=h;i=A;return g|0}k=0;do{z=k;k=k+1|0;a[g+z>>0]=a[(c[y>>2]|0)+(f-k)>>0]|0}while((k|0)!=(h|0));i=A;return h|0}}if((z|0)==(f|0)){g=h;i=A;return g|0}k=0;do{z=k;k=k+1|0;a[g+z>>0]=a[(c[y>>2]|0)+(f-k)>>0]|0}while((k|0)!=(h|0));i=A;return h|0}function Rm(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;p=i;i=i+80|0;if((i|0)>=(j|0))ba();l=p+72|0;s=p+64|0;r=p+56|0;q=p+48|0;e=p+40|0;g=p+32|0;h=p+24|0;f=p+16|0;n=p+8|0;o=p;a[b+152>>0]=1;m=b+8|0;d=c[m>>2]|0;c[b+56>>2]=Zp(d,1)|0;c[b+60>>2]=Zp(d<<1,1)|0;Hm(s,(c[b>>2]|0)+-1|0);d=c[s+4>>2]|0;k=b+64|0;c[k>>2]=c[s>>2];c[k+4>>2]=d;Hm(r,c[m>>2]|0);k=c[r+4>>2]|0;d=b+72|0;c[d>>2]=c[r>>2];c[d+4>>2]=k;Hm(q,c[m>>2]|0);d=c[q+4>>2]|0;k=b+80|0;c[k>>2]=c[q>>2];c[k+4>>2]=d;Hm(e,c[m>>2]|0);k=c[e+4>>2]|0;d=b+88|0;c[d>>2]=c[e>>2];c[d+4>>2]=k;d=c[m>>2]|0;c[b+96>>2]=Zp(d<<1,1)|0;c[b+100>>2]=Xp(d)|0;c[b+104>>2]=Xp(d)|0;Hm(g,d);d=c[g+4>>2]|0;k=b+112|0;c[k>>2]=c[g>>2];c[k+4>>2]=d;Hm(h,(c[m>>2]|0)+-1|0);k=c[h+4>>2]|0;d=b+120|0;c[d>>2]=c[h>>2];c[d+4>>2]=k;Hm(f,(c[m>>2]|0)+-1|0);d=c[f+4>>2]|0;k=b+128|0;c[k>>2]=c[f>>2];c[k+4>>2]=d;k=c[m>>2]|0;d=Xp(k<<2)|0;f=b+36|0;c[f>>2]=d;a:do if(!k){k=b+16|0;d=0}else{g=b+16|0;h=b+32|0;e=0;while(1){s=c[b>>2]|0;c[d+(e<<2)>>2]=Xp(s)|0;r=a[(c[h>>2]|0)+e>>0]|0;d=c[(c[f>>2]|0)+(e<<2)>>2]|0;c[l>>2]=c[g>>2];c[l+4>>2]=c[g+4>>2];Sm(l,r,s+-1|0,d);e=e+1|0;d=c[m>>2]|0;if(e>>>0>=d>>>0){k=g;break a}d=c[f>>2]|0}}while(0);f=Xp(1024)|0;h=b+108|0;c[h>>2]=f;g=0;e=0;while(1){c[f+(e<<2)>>2]=Xp(d)|0;s=c[(c[h>>2]|0)+(e<<2)>>2]|0;c[l>>2]=c[k>>2];c[l+4>>2]=c[k+4>>2];Sm(l,g&255,d+-1|0,s);e=e+1|0;if((e|0)==256)break;d=c[m>>2]|0;f=c[h>>2]|0;g=g+1<<16>>16}Hm(n,c[m>>2]|0);s=n;r=c[s+4>>2]|0;q=b+136|0;c[q>>2]=c[s>>2];c[q+4>>2]=r;Hm(o,c[m>>2]|0);q=o;r=c[q+4>>2]|0;s=b+144|0;c[s>>2]=c[q>>2];c[s+4>>2]=r;i=p;return}function Sm(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0;b=c[b+4>>2]|0;h=d[b+(e&255)>>0]|0;if(!(e<<24>>24)){b=0;do{a[g+b>>0]=0;b=b+1|0}while(b>>>0<=f>>>0);return}e=0;b=a[b+1>>0]|0;while(1){a[g+e>>0]=b;b=(b&255)+h|0;e=e+1|0;if(e>>>0>f>>>0)break;else b=(b>>>0>255&1)+b&255}return}function Tm(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;if(!(a[f>>0]|0)){f=a[c[e>>2]>>0]|0;return f|0}k=c[e>>2]|0;i=c[e+4>>2]|0;j=c[b+4>>2]|0;g=c[b>>2]|0;h=0;e=0;do{b=a[k+h>>0]|0;if(b<<24>>24)e=a[g+((d[f+h>>0]|0)+(d[j+(b&255)>>0]|0))>>0]^e;h=h+1|0}while(h>>>0<=i>>>0);return e|0}function Um(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;v=b+72|0;z=b+8|0;eq(c[v>>2]|0,0,(c[z>>2]|0)+1|0)|0;a[c[v>>2]>>0]=1;A=b+76|0;c[A>>2]=0;B=b+112|0;fq(c[B>>2]|0,c[v>>2]|0,(c[z>>2]|0)+1|0)|0;f=c[A>>2]|0;w=b+116|0;c[w>>2]=f;if(f>>>0>=((c[z>>2]|0)-e|0)>>>0){e=f;return e|0}y=b+56|0;s=b+16|0;r=b+20|0;b=f;h=f;p=1;q=f;o=1;g=0;while(1){m=c[y>>2]|0;f=a[m+q>>0]|0;if(!g)l=f;else{n=c[v>>2]|0;l=c[r>>2]|0;k=1;do{i=a[n+k>>0]|0;j=a[m+(q-k)>>0]|0;if(i<<24>>24==0|j<<24>>24==0)i=0;else i=a[(c[s>>2]|0)+((d[l+(j&255)>>0]|0)+(d[l+(i&255)>>0]|0))>>0]|0;f=i^f;k=k+1|0}while(k>>>0<=g>>>0);l=f}do if(!(l<<24>>24)){i=p+1|0;f=o}else{b=(h|0)>-1;if(g<<1>>>0>q>>>0){a:do if(b){k=l&255;l=o&255;if(!(o<<24>>24)){b=h;while(1)if((b|0)>0)b=b+-1|0;else break a}while(1){i=(c[v>>2]|0)+(h+p)|0;j=a[i>>0]|0;f=a[(c[B>>2]|0)+h>>0]|0;b=c[r>>2]|0;if(f<<24>>24!=0?(t=c[s>>2]|0,x=a[t+((d[b+k>>0]|0)+(d[b+(f&255)>>0]|0))>>0]|0,x<<24>>24!=0):0)b=a[t+((d[b+(x&255)>>0]|0)+255-(d[b+l>>0]|0)&65535)>>0]|0;else b=0;a[i>>0]=b^j;if((h|0)>0)h=h+-1|0;else break}}while(0);h=c[w>>2]|0;i=h+p|0;b=c[A>>2]|0;b=i>>>0>b>>>0?i:b;c[A>>2]=b;i=p+1|0;f=o;break}b:do if(b){j=l&255;k=o&255;if(!(o<<24>>24)){b=h;while(1){a[(c[B>>2]|0)+(b+p)>>0]=0;if((b|0)>0)b=b+-1|0;else break b}}while(1){i=c[B>>2]|0;f=a[i+h>>0]|0;b=c[r>>2]|0;if(f<<24>>24!=0?(u=c[s>>2]|0,C=a[u+((d[b+j>>0]|0)+(d[b+(f&255)>>0]|0))>>0]|0,C<<24>>24!=0):0)b=a[u+((d[b+(C&255)>>0]|0)+255-(d[b+k>>0]|0)&65535)>>0]|0;else b=0;a[i+(h+p)>>0]=b;if((h|0)>0)h=h+-1|0;else break}}while(0);b=p+-1|0;if((b|0)>-1){do{a[(c[B>>2]|0)+b>>0]=0;b=b+-1|0}while((b|0)>-1);f=0}else f=0;do{o=(c[v>>2]|0)+f|0;b=a[o>>0]|0;a[o>>0]=a[(c[B>>2]|0)+f>>0]^b;a[(c[B>>2]|0)+f>>0]=b;f=f+1|0;b=(c[w>>2]|0)+p|0}while(f>>>0<=b>>>0);h=c[A>>2]|0;c[A>>2]=b;c[w>>2]=h;i=1;f=l;g=q+1-g|0}while(0);q=q+1|0;if(q>>>0>=((c[z>>2]|0)-e|0)>>>0)break;else{p=i;o=f}}return b|0}function Vm(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;if(!(a[f>>0]|0)){e=a[c[e>>2]>>0]|0;if(!(e<<24>>24)){f=0;return f|0}f=a[(c[b>>2]|0)+(e&255)>>0]|0;return f|0}j=c[e>>2]|0;i=c[e+4>>2]|0;g=c[b>>2]|0;h=0;e=0;do{b=a[j+h>>0]|0;if(b<<24>>24)e=a[g+((d[f+h>>0]|0)+(b&255))>>0]^e;h=h+1|0}while(h>>>0<=i>>>0);return e|0}function Wm(b){b=b|0;var e=0,f=0,g=0,h=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;x=i;i=i+64|0;if((i|0)>=(j|0))ba();o=x+56|0;n=x+48|0;e=x+40|0;r=x+32|0;s=x+24|0;u=x+16|0;t=x+8|0;m=x;g=(c[b+8>>2]|0)+-1|0;k=c[b+56>>2]|0;w=b+120|0;eq(c[w>>2]|0,0,(c[b+124>>2]|0)+1|0)|0;q=b+16|0;v=b+72|0;f=w;y=f;f=f+4|0;f=d[f>>0]|d[f+1>>0]<<8|d[f+2>>0]<<16|d[f+3>>0]<<24;h=s;c[h>>2]=d[y>>0]|d[y+1>>0]<<8|d[y+2>>0]<<16|d[y+3>>0]<<24;c[h+4>>2]=f;c[u>>2]=k;c[u+4>>2]=g;g=v;k=g;g=g+4|0;g=d[g>>0]|d[g+1>>0]<<8|d[g+2>>0]<<16|d[g+3>>0]<<24;h=t;c[h>>2]=d[k>>0]|d[k+1>>0]<<8|d[k+2>>0]<<16|d[k+3>>0]<<24;c[h+4>>2]=g;h=q;g=h;h=h+4|0;h=d[h>>0]|d[h+1>>0]<<8|d[h+2>>0]<<16|d[h+3>>0]<<24;k=m;c[k>>2]=d[g>>0]|d[g+1>>0]<<8|d[g+2>>0]<<16|d[g+3>>0]<<24;c[k+4>>2]=h;c[r>>2]=c[m>>2];c[r+4>>2]=c[m+4>>2];c[e>>2]=c[t>>2];c[e+4>>2]=c[t+4>>2];c[n>>2]=c[u>>2];c[n+4>>2]=c[u+4>>2];c[o>>2]=c[s>>2];c[o+4>>2]=c[s+4>>2];Xm(r,e,n,o);r=b+76|0;s=b+128|0;c[b+132>>2]=(c[r>>2]|0)+-1;c[e>>2]=c[q>>2];c[e+4>>2]=c[q+4>>2];c[n>>2]=c[v>>2];c[n+4>>2]=c[v+4>>2];c[o>>2]=c[s>>2];c[o+4>>2]=c[s+4>>2];Ym(e,n,o);e=c[r>>2]|0;if(!e){i=x;return}t=b+96|0;u=b+12|0;m=b+20|0;v=b+108|0;k=b+100|0;b=e;h=0;do{e=a[(c[t>>2]|0)+h>>0]|0;if(e<<24>>24){f=e&255;e=(_(d[(c[m>>2]|0)+f>>0]|0,(d[u>>0]|0)+-1|0)|0)%255|0;e=a[(c[q>>2]|0)+((e|0)<0?e+255|0:e)>>0]|0;f=c[(c[v>>2]|0)+(f<<2)>>2]|0;c[n>>2]=c[q>>2];c[n+4>>2]=c[q+4>>2];c[o>>2]=c[w>>2];c[o+4>>2]=c[w+4>>2];f=Tm(n,o,f)|0;g=c[(c[v>>2]|0)+((d[(c[t>>2]|0)+h>>0]|0)<<2)>>2]|0;c[n>>2]=c[q>>2];c[n+4>>2]=c[q+4>>2];c[o>>2]=c[s>>2];c[o+4>>2]=c[s+4>>2];g=Tm(n,o,g)|0;b=c[m>>2]|0;if(!(f<<24>>24==0|g<<24>>24==0)?(l=c[q>>2]|0,p=a[l+((d[b+(f&255)>>0]|0)+255-(d[b+(g&255)>>0]|0)&65535)>>0]|0,!(e<<24>>24==0|p<<24>>24==0)):0)b=a[l+((d[b+(p&255)>>0]|0)+(d[b+(e&255)>>0]|0))>>0]|0;else b=0;a[(c[k>>2]|0)+h>>0]=b;b=c[r>>2]|0}h=h+1|0}while(h>>>0>>0);i=x;return}function Xm(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=c[g>>2]|0;o=c[g+4>>2]|0;eq(r|0,0,o+1|0)|0;p=c[e+4>>2]|0;q=c[f+4>>2]|0;n=c[e>>2]|0;l=c[f>>2]|0;m=c[b+4>>2]|0;i=c[b>>2]|0;j=0;do{if(o>>>0>=j>>>0){f=o-j|0;f=q>>>0>f>>>0?f:q;b=n+j|0;k=0;do{h=r+(k+j)|0;g=a[b>>0]|0;e=a[l+k>>0]|0;if(g<<24>>24==0|e<<24>>24==0)g=0;else g=a[i+((d[m+(e&255)>>0]|0)+(d[m+(g&255)>>0]|0))>>0]|0;a[h>>0]=g^a[h>>0];k=k+1|0}while(k>>>0<=f>>>0)}j=j+1|0}while(j>>>0<=p>>>0);return}function Ym(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=c[e>>2]|0;f=c[e+4>>2]|0;eq(g|0,0,f+1|0)|0;b=c[d>>2]|0;e=0;do{d=e;e=e+1|0;a[g+d>>0]=e&1|0?a[b+e>>0]|0:0}while(e>>>0<=f>>>0);return}function Zm(b,e,f,g,h,k){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=i;i=i+16|0;if((i|0)>=(j|0))ba();x=y;u=k;w=c[u>>2]|0;u=c[u+4>>2]|0;t=x;c[t>>2]=w;c[t+4>>2]=u;t=k+8|0;u=c[t+4>>2]|0;v=x+8|0;c[v>>2]=c[t>>2];c[v+4>>2]=u;a[w+1>>0]=1;a[w>>0]=a[g>>0]|0;c[x+4>>2]=1;if(f>>>0<=1){x=c[x>>2]|0;w=c[h>>2]|0;g=f+1|0;fq(w|0,x|0,g|0)|0;g=h+4|0;c[g>>2]=f;f=h;g=f;g=c[g>>2]|0;f=f+4|0;f=c[f>>2]|0;h=b;b=h;c[b>>2]=g;h=h+4|0;c[h>>2]=f;i=y;return}w=c[e>>2]|0;r=c[e+4>>2]|0;s=r+1|0;t=c[x>>2]|0;u=1;v=0;while(1){n=a[g+u>>0]|0;p=v;v=v&1^1;q=u;u=u+1|0;c[x+(v<<3)+4>>2]=u;k=c[x+(v<<3)>>2]|0;p=c[x+(p<<3)+4>>2]|0;eq(k|0,0,q+2|0)|0;o=p>>>0>u>>>0?u:p;l=r+(n&255)|0;if(!(n<<24>>24)){e=0;do e=e+1|0;while(e>>>0<=o>>>0)}else{n=0;do{m=k+n|0;e=a[t+n>>0]|0;if(!(e<<24>>24))e=0;else e=a[w+((d[r+(e&255)>>0]|0)+(d[l>>0]|0))>>0]|0;a[m>>0]=e^a[m>>0];n=n+1|0}while(n>>>0<=o>>>0)}l=p>>>0>q>>>0?q:p;n=0;do{e=n;n=n+1|0;m=k+n|0;e=a[t+e>>0]|0;if(!(e<<24>>24))e=0;else e=a[w+((d[r+(e&255)>>0]|0)+(d[s>>0]|0))>>0]|0;a[m>>0]=e^a[m>>0]}while(n>>>0<=l>>>0);if((u|0)==(f|0))break;else t=k}x=c[h>>2]|0;g=f+1|0;fq(x|0,k|0,g|0)|0;g=h+4|0;c[g>>2]=f;f=h;g=f;g=c[g>>2]|0;f=f+4|0;f=c[f>>2]|0;h=b;b=h;c[b>>2]=g;h=h+4|0;c[h>>2]=f;i=y;return}function _m(a){a=a|0;var b=0,d=0;b=Xp(28)|0;d=((a&7|0)!=0&1)+(a>>>3)|0;c[b+4>>2]=2;c[b+8>>2]=7;a=Xp(d)|0;c[b+12>>2]=a;c[b+16>>2]=d;c[b>>2]=$m(2,7,10340)|0;c[b+20>>2]=a;c[b+24>>2]=a;return b|0}function $m(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;f=Xp(68)|0;if(!(b>>>0<2|d>>>0>32)?(c[f+8>>2]=d,c[f+4>>2]=b,g=1<>2]=g,g=Xp(g<<2)|0,an(b,d,e,g),c[f>>2]=g,c[f+16>>2]=bn(0,0)|0,c[f+20>>2]=cn(0,0)|0,a[f+24>>0]=0,f|0):0){g=f;return g|0}Yp(f);g=0;return g|0}function an(a,b,d,f){a=a|0;b=b|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;i=1<>>0>1?i:1)<<2|0)|0;return}else j=0;do{g=0;h=1;b=0;while(1){k=((eb((e[d+(g<<1)>>1]|0)&j|0)|0)&1|0)!=0;b=(k?h:0)|b;g=g+1|0;if((g|0)==(a|0))break;else h=h<<1}c[f+(j<<2)>>2]=b;j=j+1|0}while(j>>>0>>0);return}function bn(a,b){a=a|0;b=b|0;var d=0;d=Zp(1,20)|0;if(!a)return d|0;c[d+8>>2]=a;c[d+16>>2]=b;return d|0}function cn(b,d){b=b|0;d=d|0;var e=0,f=0;e=Zp(1,20)|0;if(!(a[45769]|0)){f=0;do{a[45770+f>>0]=f<<7|f>>>7|f>>>5&2|f>>>3&4|f>>>1&8|f<<1&16|f<<3&32|f<<5&64;f=f+1|0}while((f|0)!=256);a[45769]=1}if(!b)return e|0;c[e+16>>2]=b;c[e+8>>2]=d;c[e+12>>2]=8;a[e>>0]=a[b>>0]|0;return e|0}function dn(a){a=a|0;Yp(c[a+12>>2]|0);en(c[a>>2]|0);Yp(a);return}function en(a){a=a|0;fn(a);Yp(a);return}function fn(b){b=b|0;var d=0,e=0,f=0;e=i;i=i+32|0;if((i|0)>=(j|0))ba();d=e;Yp(c[b>>2]|0);gn(c[b+16>>2]|0);hn(c[b+20>>2]|0);if(!(a[b+24>>0]|0)){i=e;return}f=b+32|0;c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];c[d+8>>2]=c[f+8>>2];c[d+12>>2]=c[f+12>>2];c[d+16>>2]=c[f+16>>2];c[d+20>>2]=c[f+20>>2];jn(d);kn(c[b+60>>2]|0);ln(c[b+64>>2]|0);Yp(c[b+28>>2]|0);i=e;return}function gn(a){a=a|0;Yp(a);return}function hn(a){a=a|0;Yp(a);return}function jn(a){a=a|0;Yp(c[a>>2]|0);Yp(c[a+4>>2]|0);Yp(c[a+20>>2]|0);return}function kn(a){a=a|0;var b=0,d=0,e=0;b=a+8|0;d=a+20|0;if(c[b>>2]|0){e=0;do{Yp(c[(c[d>>2]|0)+(e<<2)>>2]|0);e=e+1|0}while(e>>>0<(c[b>>2]|0)>>>0)}Yp(c[d>>2]|0);Yp(c[a+32>>2]|0);Yp(a);return}function ln(a){a=a|0;Yp(c[a+4>>2]|0);Yp(c[a+8>>2]|0);Yp(a);return}function mn(a,b){a=a|0;b=b|0;b=c[a+12>>2]|0;c[a+20>>2]=b;c[a+24>>2]=b;return 0}function nn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=a+24|0;i=c[e>>2]|0;g=(c[a+12>>2]|0)+(c[a+16>>2]|0)-i<<3;f=d+1-(c[a+8>>2]|0)|0;h=g>>>0>>0;on(c[a>>2]|0,b,_((h?g-f|0:0)+d|0,c[a+4>>2]|0)|0,i)|0;c[e>>2]=(c[e>>2]|0)+((h?g:f)>>>3);return 0}function on(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if((d>>>0)%((c[a+4>>2]|0)>>>0)|0|0){d=0;return d|0}d=pn(a,d,((d&7|0)!=0&1)+(d>>>3)|0,e,b)|0;return d|0}function pn(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;m=i;i=i+32|0;if((i|0)>=(j|0))ba();h=m;k=b+24|0;l=b+4|0;if(!(a[k>>0]|0)){p=c[l>>2]|0;o=b+8|0;q=c[o>>2]|0;a[k>>0]=1;c[b+28>>2]=Zp(1<>2]|0);c[n>>2]=c[h>>2];c[n+4>>2]=c[h+4>>2];c[n+8>>2]=c[h+8>>2];c[n+12>>2]=c[h+12>>2];c[n+16>>2]=c[h+16>>2];c[n+20>>2]=c[h+20>>2];c[b+56>>2]=0;n=b+12|0;k=b+60|0;c[k>>2]=rn(q*5|0,q*15|0,65535/((p*255|0)>>>0)|0,(c[n>>2]|0)>>>1,1<<(c[o>>2]|0)+-1)|0;h=b+64|0;c[h>>2]=sn(c[n>>2]|0)|0}else{h=b+64|0;k=b+60|0}p=(d>>>0)/((c[l>>2]|0)>>>0)|0;q=b+16|0;tn(c[q>>2]|0,f,e);un(c[h>>2]|0);vn(c[k>>2]|0);wn(b,p,g);An(b,p,g);Hn(b,p,g);In(c[k>>2]|0,c[q>>2]|0);i=m;return e|0}function qn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;i=1<>2]<>2];h=m+(g<<2)|0;f=c[h>>2]|0;if(!f){c[h>>2]=d;c[l+(d<<2)>>2]=g;f=d;d=d+1|0}c[k+(j<<2)>>2]=f;j=j+1|0}while(j>>>0>>0);e=Zp(d,4)|0;Yp(m);c[a>>2]=k;c[a+4>>2]=l;c[a+8>>2]=(1<>2]=b;c[a+16>>2]=d;c[a+20>>2]=e;return}function rn(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;g=Zp(1,44)|0;c[g>>2]=a;c[g+4>>2]=b;a=b+a|0;c[g+8>>2]=a;c[g+12>>2]=e;c[g+16>>2]=f;b=Xp(a<<2)|0;c[g+20>>2]=b;if(!a)a=0;else{f=0;do{c[b+(f<<2)>>2]=Zp(e,1)|0;f=f+1|0}while(f>>>0>>0)}c[g+32>>2]=Xp(a)|0;c[g+36>>2]=d;return g|0}function sn(a){a=a|0;var b=0,d=0;b=Zp(1,24)|0;c[b+12>>2]=a;d=Zp(2,a)|0;c[b+4>>2]=d;a=Zp(2,a)|0;c[b+8>>2]=a;c[b+16>>2]=d;c[b+20>>2]=a;return b|0}function tn(b,d,e){b=b|0;d=d|0;e=e|0;c[b+8>>2]=d;c[b+16>>2]=e;a[b>>0]=0;c[b+4>>2]=0;c[b+12>>2]=0;return}function un(a){a=a|0;var b=0,d=0,e=0;d=a+4|0;e=a+12|0;eq(c[d>>2]|0,0,c[e>>2]<<1|0)|0;b=a+8|0;eq(c[b>>2]|0,0,c[e>>2]<<1|0)|0;c[a>>2]=0;c[a+16>>2]=c[d>>2];c[a+20>>2]=c[b>>2];return}function vn(a){a=a|0;c[a+28>>2]=0;c[a+24>>2]=0;return}function wn(a,f,g){a=a|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;t=a+8|0;if(!((f|0)!=0&(c[t>>2]|0)!=1))return;u=(g|0)!=0;v=a+64|0;w=a+56|0;x=a+4|0;y=a+20|0;z=0;h=0;do{if(!u)h=(xn(c[y>>2]|0,c[x>>2]|0)|0)&255;i=c[v>>2]|0;q=c[i+16>>2]|0;r=c[i+20>>2]|0;p=z;z=z+1|0;s=1<>>1;i=c[(c[a>>2]|0)+(o<<2)>>2]|0;l=c[x>>2]|0;m=g+(_(l,p)|0)|0;if(!(c[w>>2]|0))if(!l)i=0;else{j=i;i=0;k=0;while(1){A=(d[m+k>>0]|0)-(0-(j&1)&255)|0;i=((A|0)<0?0-A|0:A)+(i&65535)|0;k=k+1|0;if((k|0)==(l|0))break;else j=j>>>1}i=i&65535}else i=yn(i,m,l)|0;b[r+(o<<1)>>1]=(e[q+(n<<1)>>1]|0)+(i&65535);o=o+1|0}while(o>>>0>>0);i=c[v>>2]|0}else{j=c[a>>2]|0;k=0;do{A=eb(c[j+(k<<2)>>2]^h|0)|0;b[r+(k<<1)>>1]=(e[q+(k>>>1<<1)>>1]|0)+A;k=k+1|0}while(k>>>0>>0)}zn(i)}while(z>>>0>>0?z>>>0<((c[t>>2]|0)+-1|0)>>>0:0);return}function xn(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;k=b+12|0;g=c[k>>2]|0;j=a[b>>0]|0;if(g>>>0>>0){f=b+4|0;i=(c[f>>2]|0)+1|0;c[f>>2]=i;i=a[(c[b+16>>2]|0)+i>>0]|0;a[b>>0]=i;b=e-g|0;c[k>>2]=8;f=b;h=8;b=(j&255&(1<>2]=j;return (d[45770+((i&255&((1<>>j|b)>>0]|0)>>>(8-e|0)&255|0}function yn(a,b,c){a=a|0;b=b|0;c=c|0;var e=0,f=0,g=0;if(!c){b=0;return b|0}else{e=a;a=0;f=0}while(1){g=(d[b+f>>0]|0)-(e&1|0?255:0)|0;a=(_(g,g)|0)+(a&65535)|0;f=f+1|0;if((f|0)==(c|0))break;else e=e>>>1}g=(a&65535)>>>3;return g|0}function zn(a){a=a|0;var b=0;b=c[a>>2]|0;c[a+16>>2]=c[a+4+(b<<2)>>2];b=b&1^1;c[a>>2]=b;c[a+20>>2]=c[a+4+(b<<2)>>2];return}function An(f,g,h){f=f|0;g=g|0;h=h|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0;M=i;i=i+48|0;if((i|0)>=(j|0))ba();I=M+24|0;L=M;J=f+8|0;H=c[J>>2]|0;k=H+-1|0;K=1<>>0>=(E-H|0)>>>0){i=M;return}F=f+28|0;G=(h|0)==0;H=f+20|0;v=f+4|0;w=f+32|0;x=K<<1;y=f+64|0;z=f+60|0;A=K>>>1;B=K>>>0>>0;C=f+16|0;D=L+20|0;u=f+56|0;do{r=c[F>>2]|0;a:do if(G){g=(xn(c[H>>2]|0,c[v>>2]|0)|0)&255;f=1<>2];l=0;do{b[r+(l<<1)>>1]=eb(l^g|0)|0;l=l+1|0}while(l>>>0>>0)}else{g=c[v>>2]|0;if(c[u>>2]|0){f=0;while(1){b[r+(f<<1)>>1]=yn(f,h+(_(g,k)|0)|0,g)|0;f=f+1|0;g=c[v>>2]|0;if(f>>>0>=1<>>0)break a}}n=h+(_(g,k)|0)|0;o=(g|0)==0;p=1<>0]|0)-(0-(l&1)&255)|0;f=((t|0)<0?0-t|0:t)+(f&65535)|0;m=m+1|0;if((m|0)==(g|0))break;else l=l>>>1}f=f&65535}b[r+(q<<1)>>1]=f;q=q+1|0}while(q>>>0

    >>0)}while(0);c[L>>2]=c[w>>2];c[L+4>>2]=c[w+4>>2];c[L+8>>2]=c[w+8>>2];c[L+12>>2]=c[w+12>>2];c[L+16>>2]=c[w+16>>2];c[L+20>>2]=c[w+20>>2];c[I>>2]=c[w>>2];c[I+4>>2]=c[w+4>>2];c[I+8>>2]=c[w+8>>2];c[I+12>>2]=c[w+12>>2];c[I+16>>2]=c[w+16>>2];c[I+20>>2]=c[w+20>>2];Bn(I,r);f=c[y>>2]|0;g=c[f+16>>2]|0;f=c[f+20>>2]|0;l=Cn(c[z>>2]|0)|0;if(B){m=c[L>>2]|0;n=c[D>>2]|0;p=0;r=K;s=0;while(1){o=p+A|0;q=0;t=0;while(1){R=q+p|0;O=o+q|0;P=c[n+(c[m+(R<<2)>>2]<<2)>>2]|0;Q=c[n+(c[m+(O<<2)>>2]<<2)>>2]|0;R=e[g+(R<<1)>>1]|0;T=R+P|0;O=e[g+(O<<1)>>1]|0;U=O+Q|0;N=t+s|0;S=(T&65535)>>>0>(U&65535)>>>0;b[f+(N<<1)>>1]=S?U:T;a[l+N>>0]=S&1;N=N|1;P=R+(P>>>16)|0;Q=O+(Q>>>16)|0;O=(P&65535)>>>0>(Q&65535)>>>0;b[f+(N<<1)>>1]=O?Q:P;a[l+N>>0]=O&1;q=q+1|0;if((q|0)==4)break;else t=t+2|0}r=r+8|0;if(r>>>0>=x>>>0)break;else{p=p+4|0;s=s+8|0}}}Dn(c[z>>2]|0,f,c[C>>2]|0);zn(c[y>>2]|0);k=k+1|0}while(k>>>0<(E-(c[J>>2]|0)|0)>>>0);i=M;return}function Bn(a,b){a=a|0;b=b|0;var d=0,f=0,g=0,h=0,i=0,j=0;f=c[a+16>>2]|0;if(f>>>0<=1)return;g=c[a+4>>2]|0;h=c[a+8>>2]|0;i=c[a+12>>2]|0;a=c[a+20>>2]|0;d=1;do{j=c[g+(d<<2)>>2]|0;c[a+(d<<2)>>2]=(e[b+(j>>>i<<1)>>1]|0)<<16|(e[b+((h&j)<<1)>>1]|0);d=d+1|0}while(d>>>0>>0);return}function Cn(a){a=a|0;return c[(c[a+20>>2]|0)+(c[a+24>>2]<<2)>>2]|0}function Dn(a,b,c){a=a|0;b=b|0;c=c|0;En(a,b,c,1);return}function En(a,d,f,g){a=a|0;d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;h=a+24|0;m=(c[h>>2]|0)+1|0;o=c[a+8>>2]|0;c[h>>2]=(m|0)==(o|0)?0:m;h=a+40|0;m=(c[h>>2]|0)+1|0;c[h>>2]=m;l=a+28|0;n=(c[l>>2]|0)+1|0;c[l>>2]=n;if((m|0)!=(c[a+36>>2]|0)){if((n|0)!=(o|0))return;i=c[a+12>>2]|0;if(!i)h=0;else{h=0;l=-1;m=0;while(1){j=b[d+(m<<1)>>1]|0;k=(j&65535)<(l&65535);h=k?m:h;m=m+g|0;if(m>>>0>=i>>>0)break;else l=k?j:l}}Fn(a,h,c[a>>2]|0,f);return}c[h>>2]=0;m=c[a+12>>2]|0;if(!m)h=0;else{h=0;k=-1;l=0;while(1){i=b[d+(l<<1)>>1]|0;j=(i&65535)<(k&65535);h=j?l:h;l=l+g|0;if(l>>>0>=m>>>0)break;else k=j?i:k}i=e[d+(h<<1)>>1]|0;j=0;do{g=d+(j<<1)|0;b[g>>1]=(e[g>>1]|0)-i;j=j+1|0}while((j|0)!=(m|0))}if((n|0)!=(o|0))return;Fn(a,h,c[a>>2]|0,f);return}function Fn(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;m=c[b+16>>2]|0;g=c[b+24>>2]|0;n=c[b+8>>2]|0;g=((g|0)==0?n:g)+-1|0;if(!e){j=d;i=g}else{i=c[b+20>>2]|0;h=0;do{d=((a[(c[i+(g<<2)>>2]|0)+d>>0]|0?m:0)|d)>>>1;h=h+1|0;g=((g|0)==0?n:g)+-1|0}while((h|0)!=(e|0));j=d;i=g}l=b+28|0;d=c[l>>2]|0;if(d>>>0<=e>>>0){m=b+32|0;n=0;m=c[m>>2]|0;Gn(f,m,n);f=c[l>>2]|0;f=f-n|0;c[l>>2]=f;return}k=b+20|0;g=b+32|0;d=d-e|0;b=0;while(1){h=a[(c[(c[k>>2]|0)+(i<<2)>>2]|0)+j>>0]|0?m:0;a[(c[g>>2]|0)+b>>0]=(h|0)!=0&1;b=b+1|0;if((b|0)==(d|0))break;else{j=(h|j)>>>1;i=((i|0)==0?n:i)+-1|0}}n=c[g>>2]|0;Gn(f,n,d);f=c[l>>2]|0;f=f-d|0;c[l>>2]=f;return}function Gn(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;e=e+f+-1|0;m=c[b+8>>2]|0;n=b+12|0;j=c[n>>2]|0;o=b+4|0;k=c[o>>2]|0;do if(k){l=8-k|0;l=l>>>0>>0?l:f;g=a[b>>0]|0;if(!l){i=g;h=(g&255)>>>1}else{g=g&255;i=0;do{h=d[e>>0]|0|g&65535;g=h<<1;e=e+-1|0;i=i+1|0}while(i>>>0>>0);i=g&255;h=h&255}g=k+l|0;if((g|0)==8){a[m+j>>0]=h;f=f-l|0;j=j+1|0;break}a[b>>0]=i;b=g;c[o>>2]=b;return}while(0);k=f>>>3;if(k){i=e+(_(k,-8)|0)|0;g=j;h=0;while(1){a[m+g>>0]=(d[e+-1>>0]|0)<<6|(d[e>>0]|0)<<7|(d[e+-2>>0]|0)<<5|(d[e+-3>>0]|0)<<4|(d[e+-4>>0]|0)<<3|(d[e+-5>>0]|0)<<2|(d[e+-6>>0]|0)<<1|(d[e+-7>>0]|0);h=h+1|0;if((h|0)==(k|0))break;else{e=e+-8|0;g=g+1|0}}e=i;j=j+k|0}m=k<<3;i=f-m|0;if((f|0)==(m|0))e=0;else{g=e;e=0;h=0;while(1){e=(d[g>>0]|0|e&65534)<<1;h=h+1|0;if(h>>>0>=i>>>0)break;else g=g+-1|0}e=e&255}a[b>>0]=e;c[n>>2]=j;b=i;c[o>>2]=b;return}function Hn(f,g,h){f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;v=f+8|0;i=c[v>>2]|0;D=1<>>0>=g>>>0)return;E=f+64|0;F=f+60|0;G=f+28|0;H=(h|0)==0;w=f+20|0;x=f+4|0;y=D<<1;z=D>>>1;A=D>>>0>>0;B=f+16|0;C=f+56|0;do{s=c[E>>2]|0;r=c[s+16>>2]|0;s=c[s+20>>2]|0;t=Cn(c[F>>2]|0)|0;u=c[G>>2]|0;a:do if(H){j=(xn(c[w>>2]|0,c[x>>2]|0)|0)&255;k=1<>2];l=0;do{b[u+(l<<1)>>1]=eb(l^j|0)|0;l=l+1|0}while(l>>>0>>0)}else{j=c[x>>2]|0;if(c[C>>2]|0){k=0;while(1){b[u+(k<<1)>>1]=yn(k,h+(_(j,i)|0)|0,j)|0;k=k+1|0;j=c[x>>2]|0;if(k>>>0>=1<>>0)break a}}n=h+(_(j,i)|0)|0;o=(j|0)==0;p=1<>0]|0)-(0-(l&1)&255)|0;k=((I|0)<0?0-I|0:I)+(k&65535)|0;m=m+1|0;if((m|0)==(j|0))break;else l=l>>>1}k=k&65535}b[u+(q<<1)>>1]=k;q=q+1|0}while(q>>>0

    >>0)}while(0);j=c[f>>2]|0;k=1<>2]|0);l=k>>>1;if(A){m=0;n=D;o=0;while(1){p=(e[r+(m<<1)>>1]|0)+(e[u+(c[j+(o<<2)>>2]<<1)>>1]|0)|0;q=(e[r+(m+z<<1)>>1]|0)+(e[u+(c[j+(n<<2)>>2]<<1)>>1]|0)|0;I=(p&65535)>>>0<(q&65535)>>>0;b[s+(o<<1)>>1]=I?p:q;a[t+o>>0]=I&1^1;n=n+k|0;if(n>>>0>=y>>>0)break;else{m=m+l|0;o=o+k|0}}}En(c[F>>2]|0,s,c[B>>2]|0,k);zn(c[E>>2]|0);i=i+1|0}while((i|0)!=(g|0));return}function In(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;j=c[b+16>>2]|0;f=c[b+24>>2]|0;l=c[b+8>>2]|0;m=b+28|0;e=c[m>>2]|0;if(!e){k=b+32|0;l=0;k=c[k>>2]|0;Gn(d,k,l);d=c[m>>2]|0;d=d-l|0;c[m>>2]=d;return}k=b+20|0;b=b+32|0;h=0;i=0;g=((f|0)==0?l:f)+-1|0;while(1){f=a[(c[(c[k>>2]|0)+(g<<2)>>2]|0)+h>>0]|0?j:0;a[(c[b>>2]|0)+i>>0]=(f|0)!=0&1;i=i+1|0;if((i|0)==(e|0))break;else{h=(f|h)>>>1;g=((g|0)==0?l:g)+-1|0}}l=c[b>>2]|0;Gn(d,l,e);d=c[m>>2]|0;d=d-e|0;c[m>>2]=d;return}function Jn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;e=a+20|0;f=c[e>>2]|0;a=(c[a+24>>2]|0)-f<<3;a=a>>>0>>0?a:d;a=((a&7|0)!=0&1)+(a>>>3)|0;fq(b|0,f|0,a|0)|0;c[e>>2]=(c[e>>2]|0)+a;return 0}function Kn(a){a=a|0;var b=0,d=0;b=Xp(28)|0;d=((a&7|0)!=0&1)+(a>>>3)|0;c[b+4>>2]=2;c[b+8>>2]=9;a=Xp(d)|0;c[b+12>>2]=a;c[b+16>>2]=d;c[b>>2]=$m(2,9,10344)|0;c[b+20>>2]=a;c[b+24>>2]=a;return b|0}function Ln(a){a=a|0;Yp(c[a+12>>2]|0);en(c[a>>2]|0);Yp(a);return}function Mn(a,b){a=a|0;b=b|0;b=c[a+12>>2]|0;c[a+20>>2]=b;c[a+24>>2]=b;return 0}function Nn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=a+24|0;i=c[e>>2]|0;g=(c[a+12>>2]|0)+(c[a+16>>2]|0)-i<<3;f=d+1-(c[a+8>>2]|0)|0;h=g>>>0>>0;on(c[a>>2]|0,b,_((h?g-f|0:0)+d|0,c[a+4>>2]|0)|0,i)|0;c[e>>2]=(c[e>>2]|0)+((h?g:f)>>>3);return 0}function On(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;e=a+20|0;f=c[e>>2]|0;a=(c[a+24>>2]|0)-f<<3;a=a>>>0>>0?a:d;a=((a&7|0)!=0&1)+(a>>>3)|0;fq(b|0,f|0,a|0)|0;c[e>>2]=(c[e>>2]|0)+a;return 0}function Pn(a){a=a|0;var b=0,d=0;b=Xp(28)|0;d=((a&7|0)!=0&1)+(a>>>3)|0;c[b+4>>2]=3;c[b+8>>2]=9;a=Xp(d)|0;c[b+12>>2]=a;c[b+16>>2]=d;c[b>>2]=$m(3,9,10348)|0;c[b+20>>2]=a;c[b+24>>2]=a;return b|0}function Qn(a){a=a|0;Yp(c[a+12>>2]|0);en(c[a>>2]|0);Yp(a);return}function Rn(a,b){a=a|0;b=b|0;b=c[a+12>>2]|0;c[a+20>>2]=b;c[a+24>>2]=b;return 0}function Sn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=a+24|0;i=c[e>>2]|0;g=(c[a+12>>2]|0)+(c[a+16>>2]|0)-i<<3;f=d+1-(c[a+8>>2]|0)|0;h=g>>>0>>0;on(c[a>>2]|0,b,_((h?g-f|0:0)+d|0,c[a+4>>2]|0)|0,i)|0;c[e>>2]=(c[e>>2]|0)+((h?g:f)>>>3);return 0}function Tn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;e=a+20|0;f=c[e>>2]|0;a=(c[a+24>>2]|0)-f<<3;a=a>>>0>>0?a:d;a=((a&7|0)!=0&1)+(a>>>3)|0;fq(b|0,f|0,a|0)|0;c[e>>2]=(c[e>>2]|0)+a;return 0}function Un(a){a=a|0;var b=0,d=0;b=Xp(28)|0;d=((a&7|0)!=0&1)+(a>>>3)|0;c[b+4>>2]=6;c[b+8>>2]=15;a=Xp(d)|0;c[b+12>>2]=a;c[b+16>>2]=d;c[b>>2]=$m(6,15,10354)|0;c[b+20>>2]=a;c[b+24>>2]=a;return b|0}function Vn(a){a=a|0;Yp(c[a+12>>2]|0);en(c[a>>2]|0);Yp(a);return}function Wn(a,b){a=a|0;b=b|0;b=c[a+12>>2]|0;c[a+20>>2]=b;c[a+24>>2]=b;return 0}function Xn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=a+24|0;i=c[e>>2]|0;g=(c[a+12>>2]|0)+(c[a+16>>2]|0)-i<<3;f=d+1-(c[a+8>>2]|0)|0;h=g>>>0>>0;on(c[a>>2]|0,b,_((h?g-f|0:0)+d|0,c[a+4>>2]|0)|0,i)|0;c[e>>2]=(c[e>>2]|0)+((h?g:f)>>>3);return 0}function Yn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;e=a+20|0;f=c[e>>2]|0;a=(c[a+24>>2]|0)-f<<3;a=a>>>0>>0?a:d;a=((a&7|0)!=0&1)+(a>>>3)|0;fq(b|0,f|0,a|0)|0;c[e>>2]=(c[e>>2]|0)+a;return 0}function Zn(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;var f=0.0,g=0,i=0.0,j=0.0,k=0,l=0.0,m=0.0,n=0.0;m=+zp(+tp(+N(+d),+N(+e)));n=+N(+m);if(m==m&0.0==0.0&n!=s){g=~~m;k=0-g|0;d=+ip(d,k);l=+ip(e,k)}else{l=e;g=0}i=d*d+l*l;k=0-g|0;f=+ip((d*b+l*c)/i,k);e=+ip((d*c-l*b)/i,k);do if((f!=f|0.0!=0.0)&(e!=e|0.0!=0.0)){if(i==0.0?!((b!=b|0.0!=0.0)&(c!=c|0.0!=0.0)):0){e=+yo(s,d);f=e*b;e=e*c;break}i=+N(+b);g=i==s;j=+N(+c);k=j==s;if((g|k?d==d&0.0==0.0&+N(+d)!=s:0)?l==l&0.0==0.0&+N(+l)!=s:0){e=+yo(g?1.0:0.0,b);c=+yo(k?1.0:0.0,c);f=(d*e+l*c)*s;e=(d*c-l*e)*s;break}if((m>0.0&n==s?b==b&0.0==0.0&i!=s:0)?c==c&0.0==0.0&j!=s:0){k=+N(+d)==s;n=+yo(k?1.0:0.0,d);k=+N(+l)==s;e=+yo(k?1.0:0.0,l);f=(n*b+e*c)*0.0;e=(n*c-e*b)*0.0}}while(0);h[a>>3]=f;h[a+8>>3]=e;return}function _n(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;var f=0.0,h=0,i=0.0,j=0.0,k=0,l=0.0,m=0.0,n=0.0;m=+Ap(+up(+N(+d),+N(+e)));n=+N(+m);if(m==m&0.0==0.0&n!=s){h=~~m;k=0-h|0;d=+wp(d,k);l=+wp(e,k)}else{l=e;h=0}i=d*d+l*l;k=0-h|0;f=+wp((d*b+l*c)/i,k);e=+wp((d*c-l*b)/i,k);do if((f!=f|0.0!=0.0)&(e!=e|0.0!=0.0)){if(i==0.0?!((b!=b|0.0!=0.0)&(c!=c|0.0!=0.0)):0){e=+Ao(s,d);f=e*b;e=e*c;break}i=+N(+b);h=i==s;j=+N(+c);k=j==s;if((h|k?d==d&0.0==0.0&+N(+d)!=s:0)?l==l&0.0==0.0&+N(+l)!=s:0){e=+Ao(+(h&1),b);c=+Ao(+(k&1),c);f=(d*e+l*c)*s;e=(d*c-l*e)*s;break}if((m>0.0&n==s?b==b&0.0==0.0&i!=s:0)?c==c&0.0==0.0&j!=s:0){n=+Ao(+(+N(+d)==s&1),d);e=+Ao(+(+N(+l)==s&1),l);f=(n*b+e*c)*0.0;e=(n*c-e*b)*0.0}}while(0);g[a>>2]=f;g[a+4>>2]=e;return}function $n(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;var f=0,g=0,i=0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0;j=b*d;k=c*e;l=b*e;m=c*d;n=j-k;o=m+l;if(!((n!=n|0.0!=0.0)&(o!=o|0.0!=0.0))){i=a+8|0;h[a>>3]=n;h[i>>3]=o;return}f=+N(+b)==s;g=+N(+c)==s;if(f|g){b=+yo(+(f&1),b);c=+yo(+(g&1),c);if(d!=d|0.0!=0.0)d=+yo(0.0,d);if(e!=e|0.0!=0.0){e=+yo(0.0,e);g=1}else g=1}else g=0;f=+N(+d)==s;i=+N(+e)==s;if(i|f){d=+yo(+(f&1),d);e=+yo(+(i&1),e);if(b!=b|0.0!=0.0)b=+yo(0.0,b);if(c!=c|0.0!=0.0)c=+yo(0.0,c)}else if(!g){i=+N(+j)==s;i=i|+N(+k)==s;i=+N(+l)==s|i;if(!(+N(+m)==s|i)){i=a+8|0;h[a>>3]=n;h[i>>3]=o;return}if(b!=b|0.0!=0.0)b=+yo(0.0,b);if(c!=c|0.0!=0.0)c=+yo(0.0,c);if(d!=d|0.0!=0.0)d=+yo(0.0,d);if(e!=e|0.0!=0.0)e=+yo(0.0,e)}n=(d*b-e*c)*s;o=(d*c+e*b)*s;i=a+8|0;h[a>>3]=n;h[i>>3]=o;return}function ao(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;var f=0,h=0,i=0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0;j=b*d;k=c*e;l=b*e;m=c*d;n=j-k;o=m+l;if(!((n!=n|0.0!=0.0)&(o!=o|0.0!=0.0))){i=a+4|0;g[a>>2]=n;g[i>>2]=o;return}f=+N(+b)==s;h=+N(+c)==s;if(f|h){b=+Ao(+(f&1),b);c=+Ao(+(h&1),c);if(d!=d|0.0!=0.0)d=+Ao(0.0,d);if(e!=e|0.0!=0.0){e=+Ao(0.0,e);h=1}else h=1}else h=0;f=+N(+d)==s;i=+N(+e)==s;if(i|f){d=+Ao(+(f&1),d);e=+Ao(+(i&1),e);if(b!=b|0.0!=0.0)b=+Ao(0.0,b);if(c!=c|0.0!=0.0)c=+Ao(0.0,c)}else if(!h){i=+N(+j)==s;i=i|+N(+k)==s;i=+N(+l)==s|i;if(!(+N(+m)==s|i)){i=a+4|0;g[a>>2]=n;g[i>>2]=o;return}if(b!=b|0.0!=0.0)b=+Ao(0.0,b);if(c!=c|0.0!=0.0)c=+Ao(0.0,c);if(d!=d|0.0!=0.0)d=+Ao(0.0,d);if(e!=e|0.0!=0.0)e=+Ao(0.0,e)}n=(d*b-e*c)*s;o=(d*c+e*b)*s;i=a+4|0;g[a>>2]=n;g[i>>2]=o;return}function bo(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;if((i|0)>=(j|0))ba();d=b;c[d>>2]=c[a+60>>2];a=co(cb(6,d|0)|0)|0;i=b;return a|0}function co(a){a=a|0;if(a>>>0>4294963200){c[(eo()|0)>>2]=0-a;a=-1}return a|0}function eo(){var a=0;if(!(c[11306]|0))a=45268;else a=c[(Qa()|0)+64>>2]|0;return a|0}function fo(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=i;i=i+48|0;if((i|0)>=(j|0))ba();o=r+16|0;n=r;e=r+32|0;p=a+28|0;f=c[p>>2]|0;c[e>>2]=f;q=a+20|0;f=(c[q>>2]|0)-f|0;c[e+4>>2]=f;c[e+8>>2]=b;c[e+12>>2]=d;l=a+60|0;m=a+44|0;b=2;f=f+d|0;while(1){if(!(c[11306]|0)){c[o>>2]=c[l>>2];c[o+4>>2]=e;c[o+8>>2]=b;h=co(mb(146,o|0)|0)|0}else{Ea(22,a|0);c[n>>2]=c[l>>2];c[n+4>>2]=e;c[n+8>>2]=b;h=co(mb(146,n|0)|0)|0;xa(0)}if((f|0)==(h|0)){f=6;break}if((h|0)<0){f=8;break}f=f-h|0;g=c[e+4>>2]|0;if(h>>>0<=g>>>0)if((b|0)==2){c[p>>2]=(c[p>>2]|0)+h;k=g;b=2}else k=g;else{k=c[m>>2]|0;c[p>>2]=k;c[q>>2]=k;k=c[e+12>>2]|0;h=h-g|0;e=e+8|0;b=b+-1|0}c[e>>2]=(c[e>>2]|0)+h;c[e+4>>2]=k-h}if((f|0)==6){o=c[m>>2]|0;c[a+16>>2]=o+(c[a+48>>2]|0);a=o;c[p>>2]=a;c[q>>2]=a}else if((f|0)==8){c[a+16>>2]=0;c[p>>2]=0;c[q>>2]=0;c[a>>2]=c[a>>2]|32;if((b|0)==2)d=0;else d=d-(c[e+4>>2]|0)|0}i=r;return d|0}function go(a){a=a|0;if(!(c[a+68>>2]|0))ho(a);return}function ho(a){a=a|0;return}function io(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=i;i=i+32|0;if((i|0)>=(j|0))ba();g=f;e=f+20|0;c[g>>2]=c[a+60>>2];c[g+4>>2]=0;c[g+8>>2]=b;c[g+12>>2]=e;c[g+16>>2]=d;if((co(ib(140,g|0)|0)|0)<0){c[e>>2]=-1;a=-1}else a=c[e>>2]|0;i=f;return a|0}function jo(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,k=0,l=0,m=0,n=0,o=0;n=i;i=i+48|0;if((i|0)>=(j|0))ba();h=n+16|0;g=n;f=n+32|0;c[f>>2]=d;k=f+4|0;m=b+48|0;o=c[m>>2]|0;c[k>>2]=e-((o|0)!=0&1);l=b+44|0;c[f+8>>2]=c[l>>2];c[f+12>>2]=o;if(!(c[11306]|0)){c[h>>2]=c[b+60>>2];c[h+4>>2]=f;c[h+8>>2]=2;f=co(lb(145,h|0)|0)|0}else{Ea(23,b|0);c[g>>2]=c[b+60>>2];c[g+4>>2]=f;c[g+8>>2]=2;f=co(lb(145,g|0)|0)|0;xa(0)}if((f|0)>=1){k=c[k>>2]|0;if(f>>>0>k>>>0){g=c[l>>2]|0;h=b+4|0;c[h>>2]=g;c[b+8>>2]=g+(f-k);if(!(c[m>>2]|0))f=e;else{c[h>>2]=g+1;a[d+(e+-1)>>0]=a[g>>0]|0;f=e}}}else{c[b>>2]=c[b>>2]|f&48^16;c[b+8>>2]=0;c[b+4>>2]=0}i=n;return f|0}function ko(a){a=a|0;if(!(c[a+68>>2]|0))ho(a);return}function lo(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=i;i=i+80|0;if((i|0)>=(j|0))ba();f=g;c[b+36>>2]=1;if((c[b>>2]&64|0)==0?(c[f>>2]=c[b+60>>2],c[f+4>>2]=21505,c[f+8>>2]=g+12,Xa(54,f|0)|0):0)a[b+75>>0]=-1;f=fo(b,d,e)|0;i=g;return f|0}function mo(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,k=0,l=0;l=i;i=i+112|0;if((i|0)>=(j|0))ba();k=l;c[k>>2]=0;g=k+4|0;c[g>>2]=a;c[k+44>>2]=a;h=k+8|0;c[h>>2]=(a|0)<0?-1:a+2147483647|0;c[k+76>>2]=-1;no(k,0);e=oo(k,d,1,e,f)|0;if(b|0)c[b>>2]=a+((c[g>>2]|0)+(c[k+108>>2]|0)-(c[h>>2]|0));i=l;return e|0}function no(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;c[a+104>>2]=b;d=c[a+8>>2]|0;e=c[a+4>>2]|0;f=d-e|0;c[a+108>>2]=f;if((b|0)!=0&(f|0)>(b|0))c[a+100>>2]=e+b;else c[a+100>>2]=d;return}function oo(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;a:do if(e>>>0>36){c[(eo()|0)>>2]=22;h=0;g=0}else{r=b+4|0;q=b+100|0;do{i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=po(b)|0}while((so(i)|0)!=0);b:do switch(i|0){case 43:case 45:{j=((i|0)==45)<<31>>31;i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0;p=j;break b}else{i=po(b)|0;p=j;break b}}default:p=0}while(0);j=(e|0)==0;do if((e|16|0)==16&(i|0)==48){i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=po(b)|0;if((i|32|0)!=120)if(j){e=8;n=46;break}else{n=32;break}e=c[r>>2]|0;if(e>>>0<(c[q>>2]|0)>>>0){c[r>>2]=e+1;i=d[e>>0]|0}else i=po(b)|0;if((d[42356+i>>0]|0)>15){g=(c[q>>2]|0)==0;if(!g)c[r>>2]=(c[r>>2]|0)+-1;if(!f){no(b,0);h=0;g=0;break a}if(g){h=0;g=0;break a}c[r>>2]=(c[r>>2]|0)+-1;h=0;g=0;break a}else{e=16;n=46}}else{e=j?10:e;if((d[42356+i>>0]|0)>>>0>>0)n=32;else{if(c[q>>2]|0)c[r>>2]=(c[r>>2]|0)+-1;no(b,0);c[(eo()|0)>>2]=22;h=0;g=0;break a}}while(0);if((n|0)==32)if((e|0)==10){e=i+-48|0;if(e>>>0<10){i=0;while(1){j=(i*10|0)+e|0;e=c[r>>2]|0;if(e>>>0<(c[q>>2]|0)>>>0){c[r>>2]=e+1;i=d[e>>0]|0}else i=po(b)|0;e=i+-48|0;if(!(e>>>0<10&j>>>0<429496729)){e=j;break}else i=j}j=0}else{e=0;j=0}f=i+-48|0;if(f>>>0<10){while(1){k=pq(e|0,j|0,10,0)|0;l=C;m=((f|0)<0)<<31>>31;o=~m;if(l>>>0>o>>>0|(l|0)==(o|0)&k>>>0>~f>>>0){k=e;break}e=iq(k|0,l|0,f|0,m|0)|0;j=C;i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=po(b)|0;f=i+-48|0;if(!(f>>>0<10&(j>>>0<429496729|(j|0)==429496729&e>>>0<2576980378))){k=e;break}}if(f>>>0>9){i=k;e=p}else{e=10;n=72}}else{i=e;e=p}}else n=46;c:do if((n|0)==46){if(!(e+-1&e)){n=a[42612+((e*23|0)>>>5&7)>>0]|0;j=a[42356+i>>0]|0;f=j&255;if(f>>>0>>0){i=0;while(1){k=f|i<>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=po(b)|0;j=a[42356+i>>0]|0;f=j&255;if(!(k>>>0<134217728&f>>>0>>0))break;else i=k}f=0}else{f=0;k=0}l=hq(-1,-1,n|0)|0;m=C;if((j&255)>>>0>=e>>>0|(f>>>0>m>>>0|(f|0)==(m|0)&k>>>0>l>>>0)){j=f;n=72;break}else i=f;while(1){k=jq(k|0,i|0,n|0)|0;f=C;k=j&255|k;i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=po(b)|0;j=a[42356+i>>0]|0;if((j&255)>>>0>=e>>>0|(f>>>0>m>>>0|(f|0)==(m|0)&k>>>0>l>>>0)){j=f;n=72;break c}else i=f}}j=a[42356+i>>0]|0;f=j&255;if(f>>>0>>0){i=0;while(1){k=f+(_(i,e)|0)|0;i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=po(b)|0;j=a[42356+i>>0]|0;f=j&255;if(!(k>>>0<119304647&f>>>0>>0))break;else i=k}f=0}else{k=0;f=0}if((j&255)>>>0>>0){n=qq(-1,-1,e|0,0)|0;o=C;m=f;while(1){if(m>>>0>o>>>0|(m|0)==(o|0)&k>>>0>n>>>0){j=m;n=72;break c}f=pq(k|0,m|0,e|0,0)|0;l=C;j=j&255;if(l>>>0>4294967295|(l|0)==-1&f>>>0>~j>>>0){j=m;n=72;break c}k=iq(j|0,0,f|0,l|0)|0;f=C;i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=po(b)|0;j=a[42356+i>>0]|0;if((j&255)>>>0>=e>>>0){j=f;n=72;break}else m=f}}else{j=f;n=72}}while(0);if((n|0)==72)if((d[42356+i>>0]|0)>>>0>>0){do{i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=po(b)|0}while((d[42356+i>>0]|0)>>>0>>0);c[(eo()|0)>>2]=34;j=h;i=g;e=(g&1|0)==0&0==0?p:0}else{i=k;e=p}if(c[q>>2]|0)c[r>>2]=(c[r>>2]|0)+-1;if(!(j>>>0>>0|(j|0)==(h|0)&i>>>0>>0)){if(!((g&1|0)!=0|0!=0|(e|0)!=0)){c[(eo()|0)>>2]=34;g=iq(g|0,h|0,-1,-1)|0;h=C;break}if(j>>>0>h>>>0|(j|0)==(h|0)&i>>>0>g>>>0){c[(eo()|0)>>2]=34;break}}g=((e|0)<0)<<31>>31;g=cq(i^e|0,j^g|0,e|0,g|0)|0;h=C}while(0);C=h;return g|0}function po(b){b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0;f=b+104|0;i=c[f>>2]|0;if((i|0)!=0?(c[b+108>>2]|0)>=(i|0):0)j=4;else{e=qo(b)|0;if((e|0)>=0){f=c[f>>2]|0;i=c[b+8>>2]|0;if(f){h=c[b+4>>2]|0;f=f-(c[b+108>>2]|0)|0;g=i;if((i-h|0)<(f|0))j=9;else c[b+100>>2]=h+(f+-1)}else{g=i;j=9}if((j|0)==9)c[b+100>>2]=i;f=b+4|0;if(!g)f=c[f>>2]|0;else{f=c[f>>2]|0;b=b+108|0;c[b>>2]=g+1-f+(c[b>>2]|0)}f=f+-1|0;if((d[f>>0]|0|0)!=(e|0))a[f>>0]=e}else j=4}if((j|0)==4){c[b+100>>2]=0;e=-1}return e|0}function qo(a){a=a|0;var b=0,e=0;e=i;i=i+16|0;if((i|0)>=(j|0))ba();b=e;if((c[a+8>>2]|0)==0?(ro(a)|0)!=0:0)b=-1;else if((pb[c[a+32>>2]&15](a,b,1)|0)==1)b=d[b>>0]|0;else b=-1;i=e;return b|0}function ro(b){b=b|0;var d=0,e=0;d=b+74|0;e=a[d>>0]|0;a[d>>0]=e+255|e;d=b+20|0;e=b+44|0;if((c[d>>2]|0)>>>0>(c[e>>2]|0)>>>0)pb[c[b+36>>2]&15](b,0,0)|0;c[b+16>>2]=0;c[b+28>>2]=0;c[d>>2]=0;d=c[b>>2]|0;if(d&20)if(!(d&4))d=-1;else{c[b>>2]=d|32;d=-1}else{d=c[e>>2]|0;c[b+8>>2]=d;c[b+4>>2]=d;d=0}return d|0}function so(a){a=a|0;return ((a|0)==32|(a+-9|0)>>>0<5)&1|0}function to(a,b,c){a=a|0;b=b|0;c=c|0;a=mo(a,b,c,0,-2147483648)|0;return a|0}function uo(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,h=0.0,i=0.0,j=0.0;j=+g[b+4>>2];i=+X(+(+g[b>>2]+-162.88958740234375));b=(g[k>>2]=i,c[k>>2]|0);i=(c[k>>2]=b&8388607|2130706432,+g[k>>2]);d=d+-19+(b>>>23)|0;b=(d|0)/2|0;h=(c[k>>2]=(b<<23)+1065353216,+g[k>>2]);f=(c[k>>2]=(d-b<<23)+1065353216,+g[k>>2]);e=+R(+j)*i*h*f;g[a>>2]=+Q(+j)*i*h*f;g[a+4>>2]=e;return}function vo(a,b){a=+a;b=+b;var d=0.0,e=0,f=0,g=0,i=0,j=0,l=0,m=0,n=0.0,o=0.0,p=0.0,q=0.0;a=+N(+a);h[k>>3]=a;m=c[k>>2]|0;g=c[k+4>>2]|0;a=+N(+b);h[k>>3]=a;e=c[k>>2]|0;f=c[k+4>>2]|0;i=g>>>0>>0|(g|0)==(f|0)&m>>>0>>0;l=i?e:m;j=i?f:g;e=i?m:e;f=i?g:f;g=hq(l|0,j|0,52)|0;i=hq(e|0,f|0,52)|0;c[k>>2]=l;c[k+4>>2]=j;a=+h[k>>3];c[k>>2]=e;c[k+4>>2]=f;b=+h[k>>3];do if((i|0)!=2047){if(!((e|0)==0&(f|0)==0|(g|0)==2047)){if((g-i|0)>64){a=a+b;break}if(g>>>0<=1533)if(i>>>0<573){a=a*5260135901548373507240989.0e186;b=b*5260135901548373507240989.0e186;d=1.90109156629516e-211}else d=1.0;else{a=a*1.90109156629516e-211;b=b*1.90109156629516e-211;d=5260135901548373507240989.0e186}o=a*134217729.0;o=o+(a-o);n=a-o;a=a*a;q=b*134217729.0;q=q+(b-q);p=b-q;b=b*b;a=d*+O(+(a+(b+(p*p+(q*q-b+q*2.0*p)+(n*n+(o*o-a+o*2.0*n))))))}}else a=b;while(0);return +a}function wo(a){a=a|0;return +(+xo(+g[a>>2],+g[a+4>>2]))}function xo(a,b){a=+a;b=+b;var d=0.0,e=0,f=0,h=0,i=0;a=+N(+a);h=(g[k>>2]=a,c[k>>2]|0);b=+N(+b);f=(g[k>>2]=b,c[k>>2]|0);i=h>>>0>>0;e=i?f:h;f=i?h:f;b=(c[k>>2]=e,+g[k>>2]);a=(c[k>>2]=f,+g[k>>2]);do if((f|0)!=2139095040){if(e>>>0>2139095039|(f|0)==0|(e-f|0)>>>0>209715199){a=b+a;break}if(e>>>0<=1568669695)if(f>>>0<562036736){a=a*1237940039285380274899124.0e3;b=b*1237940039285380274899124.0e3;d=8.077935669463161e-28}else d=1.0;else{a=a*8.077935669463161e-28;b=b*8.077935669463161e-28;d=1237940039285380274899124.0e3}a=d*+O(+(b*b+a*a))}while(0);return +a}function yo(a,b){a=+a;b=+b;var d=0;h[k>>3]=b;d=c[k+4>>2]|0;b=+N(+a);h[k>>3]=b;d=d&-2147483648|c[k+4>>2];c[k>>2]=c[k>>2];c[k+4>>2]=d;return +(+h[k>>3])}function zo(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0.0,h=0.0;h=+g[b>>2];f=+g[b+4>>2];do if(!(h==0.0&f==0.0)){d=+N(+f);if(((g[k>>2]=d,c[k>>2]|0)|0)==2139095040){g[a>>2]=s;g[a+4>>2]=f;break}e=(g[k>>2]=h,c[k>>2]|0);d=+N(+h);b=(g[k>>2]=d,c[k>>2]|0);if(b>>>0>2139095040){f=f-f;g[a>>2]=h;g[a+4>>2]=f/f;break}if((b|0)==2139095040){d=f-f;if((e|0)<0){d=+N(+d);h=+Ao(h,f);g[a>>2]=d;g[a+4>>2]=h;break}else{f=+Ao(d,f);g[a>>2]=h;g[a+4>>2]=f;break}}else if(!(h>=0.0)){h=+O(+((-h+ +vo(h,f))*.5));d=+N(+f)/(h*2.0);h=+Ao(h,f);g[a>>2]=d;g[a+4>>2]=h;break}else{h=+O(+((h+ +vo(h,f))*.5));g[a>>2]=h;g[a+4>>2]=f/(h*2.0);break}}else{g[a>>2]=0.0;g[a+4>>2]=f}while(0);return}function Ao(a,b){a=+a;b=+b;var d=0;d=(g[k>>2]=b,c[k>>2]|0);b=+N(+a);return +(c[k>>2]=d&-2147483648|(g[k>>2]=b,c[k>>2]|0),+g[k>>2])}function Bo(a){a=a|0;return +(+W(+(+g[a+4>>2]),+(+g[a>>2])))}function Co(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,k=0;d=i;i=i+32|0;if((i|0)>=(j|0))ba();f=d+16|0;e=d+8|0;h=d;k=c[b>>2]|0;g[h>>2]=-+g[b+4>>2];c[h+4>>2]=k;c[f>>2]=c[h>>2];c[f+4>>2]=c[h+4>>2];Do(e,f);b=c[e+4>>2]|0;c[a>>2]=c[e>>2];c[a+4>>2]=b;i=d;return}function Do(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0,h=0,l=0,m=0,n=0,o=0,p=0.0,q=0.0,r=0,s=0,t=0.0;s=i;i=i+32|0;if((i|0)>=(j|0))ba();e=s+16|0;f=s+8|0;h=s;p=+g[b>>2];l=b+4|0;q=+g[l>>2];r=(g[k>>2]=p,c[k>>2]|0);d=+N(+p);m=(g[k>>2]=d,c[k>>2]|0);d=+N(+q);n=(g[k>>2]=d,c[k>>2]|0);o=(m|0)<2139095040;do if(o&(n|0)<2139095040){if(!n){g[a>>2]=+Eo(p);g[a+4>>2]=p*q;break}if((m|0)<1091567616){d=+Eo(p)*+Q(+q);q=+Ho(p)*+R(+q);g[a>>2]=d;g[a+4>>2]=q;break}if((m|0)<1118925336){t=+X(+(+N(+p)))*.5;d=t*+Q(+q);q=+Ao(t,p)*+R(+q);g[a>>2]=d;g[a+4>>2]=q;break}if((m|0)<1128313319){g[h>>2]=+N(+p);g[h+4>>2]=q;c[e>>2]=c[h>>2];c[e+4>>2]=c[h+4>>2];uo(f,e,-1);r=c[f>>2]|0;t=+g[f+4>>2];c[b>>2]=r;g[l>>2]=t;t=t*+Ao(1.0,p);c[a>>2]=r;g[a+4>>2]=t;break}else{p=p*1701411834604692317316873.0e14;t=p*+R(+q);g[a>>2]=p*p*+Q(+q);g[a+4>>2]=t;break}}else{f=(n|0)>2139095039;if((m|0)==0&f){q=q-q;t=+Ao(0.0,p*q);g[a>>2]=q;g[a+4>>2]=t;break}e=(m|0)>2139095039;if(e&(n|0)==0){d=p*p;if(!(r&8388607)){t=q*+Ao(0.0,p);g[a>>2]=d;g[a+4>>2]=t;break}else{t=+Ao(0.0,(p+p)*q);g[a>>2]=d;g[a+4>>2]=t;break}}if(o&f){t=q-q;g[a>>2]=t;g[a+4>>2]=p*t;break}d=p*p;if(!(e&(r&8388607|0)==0)){t=q-q;g[a>>2]=d*t;g[a+4>>2]=(p+p)*t;break}if(f){g[a>>2]=d;g[a+4>>2]=p*(q-q);break}else{t=p*+R(+q);g[a>>2]=d*+Q(+q);g[a+4>>2]=t;break}}while(0);i=s;return}function Eo(a){a=+a;var b=0;a=+N(+a);b=(g[k>>2]=a,c[k>>2]|0);do if(b>>>0<1060205079)if(b>>>0<964689920)a=1.0;else{a=+Fo(a);a=a*a/((a+1.0)*2.0)+1.0}else if(b>>>0<1118925335){a=+X(+a);a=(a+1.0/a)*.5;break}else{a=+Go(a);break}while(0);return +a}function Fo(a){a=+a;var b=0,d=0,e=0.0,f=0.0,h=0.0,i=0,j=0.0;d=(g[k>>2]=a,c[k>>2]|0);h=+N(+a);b=(g[k>>2]=h,c[k>>2]|0);d=d>>>31;do if(b>>>0>1100331075){if(b>>>0<=2139095040)if(!d)if(a>88.7216796875)a=a*1701411834604692317316873.0e14;else i=11;else a=-1.0}else{if(b>>>0<=1051816472)if(b>>>0<855638016)break;else{h=0.0;d=0;i=14;break}if(b>>>0<1065686418)if(!d){e=a+-.6931381225585938;b=1;f=9.05800061445916e-06;i=12;break}else{e=a+.6931381225585938;b=-1;f=-9.05800061445916e-06;i=12;break}else i=11}while(0);if((i|0)==11){b=~~(a*1.4426950216293335+(d|0?-.5:.5));f=+(b|0);e=a-f*.6931381225585938;f=f*9.05800061445916e-06;i=12}if((i|0)==12){h=e-f;a=h;h=e-h-f;d=b;i=14}a:do if((i|0)==14){f=a*.5;e=a*f;j=e*(e*1.5807170420885086e-03+-.03333321213722229)+1.0;f=3.0-f*j;f=e*((j-f)/(6.0-a*f));if(!d){a=a-(a*f-e);break}e=a*(f-h)-h-e;switch(d|0){case -1:{a=(a-e)*.5+-.5;break a}case 1:if(a<-.25){a=(e-(a+.5))*-2.0;break a}else{a=(a-e)*2.0+1.0;break a}default:{f=(c[k>>2]=(d<<23)+1065353216,+g[k>>2]);if(d>>>0>56){a=a-e+1.0;a=((d|0)==128?a*2.0*1701411834604692317316873.0e14:f*a)+-1.0;break a}b=127-d<<23;if((d|0)<23)a=1.0-(c[k>>2]=b,+g[k>>2])+(a-e);else a=a-((c[k>>2]=b,+g[k>>2])+e)+1.0;a=f*a;break a}}}while(0);return +a}function Go(a){a=+a;return +(+X(+(a+-162.88958740234375))*1661534994731144841129758.0e11*1661534994731144841129758.0e11)}function Ho(a){a=+a;var b=0.0,d=0.0,e=0;d=((g[k>>2]=a,c[k>>2]|0)|0)<0?-.5:.5;b=+N(+a);e=(g[k>>2]=b,c[k>>2]|0);do if(e>>>0<1118925335){b=+Fo(b);if(e>>>0>=1065353216){a=d*(b+b/(b+1.0));break}if(e>>>0>=964689920)a=d*(b*2.0-b*b/(b+1.0))}else a=d*2.0*+Go(b);while(0);return +a}function Io(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0,h=0,l=0,m=0,n=0.0,o=0,p=0.0;o=i;i=i+32|0;if((i|0)>=(j|0))ba();h=o+16|0;l=o+8|0;m=o;n=+g[b>>2];d=+g[b+4>>2];p=+N(+d);e=(g[k>>2]=p,c[k>>2]|0);do if(e){f=(g[k>>2]=n,c[k>>2]|0);p=+N(+n);b=(g[k>>2]=p,c[k>>2]|0);if(!b){p=+R(+d);g[a>>2]=+Q(+d);g[a+4>>2]=p;break}if(e>>>0<=2139095039)if((f+-1118925336|0)>>>0<9342557){g[m>>2]=n;g[m+4>>2]=d;c[h>>2]=c[m>>2];c[h+4>>2]=c[m+4>>2];uo(l,h,0);m=c[l+4>>2]|0;c[a>>2]=c[l>>2];c[a+4>>2]=m;break}else{n=+X(+n);p=n*+R(+d);g[a>>2]=n*+Q(+d);g[a+4>>2]=p;break}if((b|0)!=2139095040){p=d-d;g[a>>2]=p;g[a+4>>2]=p;break}if((f|0)<0){g[a>>2]=0.0;g[a+4>>2]=0.0;break}else{g[a>>2]=n;g[a+4>>2]=d-d;break}}else{g[a>>2]=+X(+n);g[a+4>>2]=d}while(0);i=o;return}function Jo(a,b){a=a|0;b=b|0;var c=0.0;c=-+h[b+8>>3];h[a>>3]=+h[b>>3];h[a+8>>3]=c;return}function Ko(a,b){a=a|0;b=b|0;var d=0.0;d=-+g[b+4>>2];c[a>>2]=c[b>>2];g[a+4>>2]=d;return}function Lo(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0,h=0,k=0,l=0;d=i;i=i+32|0;if((i|0)>=(j|0))ba();h=d+16|0;f=d+8|0;k=d;l=c[b>>2]|0;g[k>>2]=-+g[b+4>>2];c[k+4>>2]=l;c[h>>2]=c[k>>2];c[h+4>>2]=c[k+4>>2];Mo(f,h);e=-+g[f>>2];c[a>>2]=c[f+4>>2];g[a+4>>2]=e;i=d;return}function Mo(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,l=0,m=0.0,n=0.0,o=0,p=0,q=0,r=0,t=0.0,u=0.0;r=i;i=i+32|0;if((i|0)>=(j|0))ba();d=r+16|0;e=r+8|0;f=r;m=+g[b>>2];h=b+4|0;n=+g[h>>2];o=(g[k>>2]=m,c[k>>2]|0);t=+N(+m);l=(g[k>>2]=t,c[k>>2]|0);t=+N(+n);p=(g[k>>2]=t,c[k>>2]|0);q=(l|0)<2139095040;do if(q&(p|0)<2139095040){if(!p){g[a>>2]=+Ho(m);g[a+4>>2]=n;break}if((l|0)<1091567616){u=+Ho(m)*+Q(+n);t=+Eo(m)*+R(+n);g[a>>2]=u;g[a+4>>2]=t;break}if((l|0)<1118925336){t=+X(+(+N(+m)))*.5;u=t*+R(+n);g[a>>2]=+Ao(t,m)*+Q(+n);g[a+4>>2]=u;break}if((l|0)<1128313319){g[f>>2]=+N(+m);g[f+4>>2]=n;c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];uo(e,d,-1);p=c[e>>2]|0;q=c[e+4>>2]|0;c[b>>2]=p;c[h>>2]=q;u=(c[k>>2]=p,+g[k>>2]);g[a>>2]=u*+Ao(1.0,m);c[a+4>>2]=q;break}else{t=m*1701411834604692317316873.0e14;u=t*t*+R(+n);g[a>>2]=t*+Q(+n);g[a+4>>2]=u;break}}else{e=(p|0)>2139095039;if((l|0)==0&e){u=n-n;g[a>>2]=+Ao(0.0,m*u);g[a+4>>2]=u;break}d=(l|0)>2139095039;if(d&(p|0)==0)if(!(o&8388607)){g[a>>2]=m;g[a+4>>2]=n;break}else{u=+Ao(0.0,n);g[a>>2]=m;g[a+4>>2]=u;break}if(q&e){u=n-n;g[a>>2]=u;g[a+4>>2]=m*u;break}if(!(d&(o&8388607|0)==0)){u=n-n;g[a>>2]=m*m*u;g[a+4>>2]=(m+m)*u;break}if(e){g[a>>2]=m*m;g[a+4>>2]=m*(n-n);break}else{t=m*+Q(+n);u=+R(+n)*s;g[a>>2]=t;g[a+4>>2]=u;break}}while(0);i=r;return}function No(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=d&255;f=(e|0)!=0;a:do if(f&(b&3|0)!=0){g=d&255;while(1){if((a[b>>0]|0)==g<<24>>24){i=6;break a}b=b+1|0;e=e+-1|0;f=(e|0)!=0;if(!(f&(b&3|0)!=0)){i=5;break}}}else i=5;while(0);if((i|0)==5)if(f)i=6;else e=0;b:do if((i|0)==6){g=d&255;if((a[b>>0]|0)!=g<<24>>24){f=_(h,16843009)|0;c:do if(e>>>0>3)while(1){h=c[b>>2]^f;if((h&-2139062144^-2139062144)&h+-16843009|0)break;b=b+4|0;e=e+-4|0;if(e>>>0<=3){i=11;break c}}else i=11;while(0);if((i|0)==11)if(!e){e=0;break}while(1){if((a[b>>0]|0)==g<<24>>24)break b;b=b+1|0;e=e+-1|0;if(!e){e=0;break}}}}while(0);return (e|0?b:0)|0}function Oo(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=i;i=i+16|0;if((i|0)>=(j|0))ba();f=e;c[f>>2]=d;d=Po(a,b,f)|0;i=e;return d|0}function Po(a,b,c){a=a|0;b=b|0;c=c|0;return Qo(a,2147483647,b,c)|0}function Qo(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,k=0,l=0,m=0,n=0,o=0;o=i;i=i+128|0;if((i|0)>=(j|0))ba();g=o+112|0;n=o;h=n;k=9628;l=h+112|0;do{c[h>>2]=c[k>>2];h=h+4|0;k=k+4|0}while((h|0)<(l|0));if((d+-1|0)>>>0>2147483646)if(!d){d=1;m=4}else{c[(eo()|0)>>2]=75;d=-1}else{g=b;m=4}if((m|0)==4){m=-2-g|0;m=d>>>0>m>>>0?m:d;c[n+48>>2]=m;b=n+20|0;c[b>>2]=g;c[n+44>>2]=g;d=g+m|0;g=n+16|0;c[g>>2]=d;c[n+28>>2]=d;d=So(n,e,f)|0;if(m){e=c[b>>2]|0;a[e+(((e|0)==(c[g>>2]|0))<<31>>31)>>0]=0}}i=o;return d|0}function Ro(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=a+20|0;f=c[e>>2]|0;a=(c[a+16>>2]|0)-f|0;a=a>>>0>d>>>0?d:a;fq(f|0,b|0,a|0)|0;c[e>>2]=(c[e>>2]|0)+a;return d|0}function So(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=i;i=i+224|0;if((i|0)>=(j|0))ba();p=t+120|0;s=t+80|0;r=t;q=t+136|0;f=s;g=f+40|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));c[p>>2]=c[e>>2];if((To(0,d,p,r,s)|0)<0)e=-1;else{if((c[b+76>>2]|0)>-1)n=cp(b)|0;else n=0;e=c[b>>2]|0;o=e&32;if((a[b+74>>0]|0)<1)c[b>>2]=e&-33;e=b+48|0;if(!(c[e>>2]|0)){g=b+44|0;h=c[g>>2]|0;c[g>>2]=q;k=b+28|0;c[k>>2]=q;l=b+20|0;c[l>>2]=q;c[e>>2]=80;m=b+16|0;c[m>>2]=q+80;f=To(b,d,p,r,s)|0;if(h){pb[c[b+36>>2]&15](b,0,0)|0;f=(c[l>>2]|0)==0?-1:f;c[g>>2]=h;c[e>>2]=0;c[m>>2]=0;c[k>>2]=0;c[l>>2]=0}}else f=To(b,d,p,r,s)|0;e=c[b>>2]|0;c[b>>2]=e|o;if(n|0)ho(b);e=(e&32|0)==0?f:-1}i=t;return e|0}function To(e,f,g,l,m){e=e|0;f=f|0;g=g|0;l=l|0;m=m|0;var n=0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0,A=0,B=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,aa=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0;ka=i;i=i+624|0;if((i|0)>=(j|0))ba();fa=ka+24|0;ha=ka+16|0;ga=ka+588|0;ca=ka+576|0;ea=ka;X=ka+536|0;ja=ka+8|0;ia=ka+528|0;N=(e|0)!=0;O=X+40|0;W=O;X=X+39|0;Y=ja+4|0;Z=ga;$=0-Z|0;aa=ca+12|0;ca=ca+11|0;da=aa;P=da-Z|0;Q=-2-Z|0;R=da+2|0;S=fa+288|0;T=ga+9|0;U=T;V=ga+8|0;n=0;p=0;o=0;z=f;a:while(1){do if((n|0)>-1)if((p|0)>(2147483647-n|0)){c[(eo()|0)>>2]=75;n=-1;break}else{n=p+n|0;break}while(0);f=a[z>>0]|0;if(!(f<<24>>24)){M=244;break}else p=z;b:while(1){switch(f<<24>>24){case 37:{f=p;M=9;break b}case 0:{f=p;break b}default:{}}L=p+1|0;f=a[L>>0]|0;p=L}c:do if((M|0)==9)while(1){M=0;if((a[f+1>>0]|0)!=37)break c;p=p+1|0;f=f+2|0;if((a[f>>0]|0)==37)M=9;else break}while(0);x=p-z|0;if(N?(c[e>>2]&32|0)==0:0)Uo(z,x,e)|0;if((p|0)!=(z|0)){p=x;z=f;continue}s=f+1|0;p=a[s>>0]|0;q=(p<<24>>24)+-48|0;if(q>>>0<10){L=(a[f+2>>0]|0)==36;s=L?f+3|0:s;p=a[s>>0]|0;v=L?q:-1;o=L?1:o}else v=-1;f=p<<24>>24;d:do if((f&-32|0)==32){q=0;while(1){if(!(1<>24)+-32|q;s=s+1|0;p=a[s>>0]|0;f=p<<24>>24;if((f&-32|0)!=32){t=q;break}}}else t=0;while(0);do if(p<<24>>24==42){p=s+1|0;f=(a[p>>0]|0)+-48|0;if(f>>>0<10?(a[s+2>>0]|0)==36:0){c[m+(f<<2)>>2]=10;o=1;s=s+3|0;f=c[l+((a[p>>0]|0)+-48<<3)>>2]|0}else{if(o|0){n=-1;break a}if(!N){w=t;o=0;s=p;L=0;break}o=(c[g>>2]|0)+(4-1)&~(4-1);f=c[o>>2]|0;c[g>>2]=o+4;o=0;s=p}if((f|0)<0){w=t|8192;L=0-f|0}else{w=t;L=f}}else{q=(p<<24>>24)+-48|0;if(q>>>0<10){f=s;p=0;do{p=(p*10|0)+q|0;f=f+1|0;q=(a[f>>0]|0)+-48|0}while(q>>>0<10);if((p|0)<0){n=-1;break a}else{w=t;s=f;L=p}}else{w=t;L=0}}while(0);e:do if((a[s>>0]|0)==46){f=s+1|0;p=a[f>>0]|0;if(p<<24>>24!=42){q=(p<<24>>24)+-48|0;if(q>>>0<10)p=0;else{t=0;break}while(1){p=(p*10|0)+q|0;f=f+1|0;q=(a[f>>0]|0)+-48|0;if(q>>>0>=10){t=p;break e}}}f=s+2|0;p=(a[f>>0]|0)+-48|0;if(p>>>0<10?(a[s+3>>0]|0)==36:0){c[m+(p<<2)>>2]=10;t=c[l+((a[f>>0]|0)+-48<<3)>>2]|0;f=s+4|0;break}if(o|0){n=-1;break a}if(N){K=(c[g>>2]|0)+(4-1)&~(4-1);t=c[K>>2]|0;c[g>>2]=K+4}else t=0}else{t=-1;f=s}while(0);u=0;while(1){p=(a[f>>0]|0)+-65|0;if(p>>>0>57){n=-1;break a}q=f+1|0;p=a[42621+(u*58|0)+p>>0]|0;s=p&255;if((s+-1|0)>>>0<8){f=q;u=s}else{K=q;break}}if(!(p<<24>>24)){n=-1;break}q=(v|0)>-1;do if(p<<24>>24==19)if(q){n=-1;break a}else M=52;else{if(q){c[m+(v<<2)>>2]=s;I=l+(v<<3)|0;J=c[I+4>>2]|0;M=ea;c[M>>2]=c[I>>2];c[M+4>>2]=J;M=52;break}if(!N){n=0;break a}Wo(ea,s,g)}while(0);if((M|0)==52?(M=0,!N):0){p=x;z=K;continue}v=a[f>>0]|0;v=(u|0)!=0&(v&15|0)==3?v&-33:v;q=w&-65537;J=(w&8192|0)==0?w:q;f:do switch(v|0){case 110:switch(u|0){case 0:{c[c[ea>>2]>>2]=n;p=x;z=K;continue a}case 1:{c[c[ea>>2]>>2]=n;p=x;z=K;continue a}case 2:{p=c[ea>>2]|0;c[p>>2]=n;c[p+4>>2]=((n|0)<0)<<31>>31;p=x;z=K;continue a}case 3:{b[c[ea>>2]>>1]=n;p=x;z=K;continue a}case 4:{a[c[ea>>2]>>0]=n;p=x;z=K;continue a}case 6:{c[c[ea>>2]>>2]=n;p=x;z=K;continue a}case 7:{p=c[ea>>2]|0;c[p>>2]=n;c[p+4>>2]=((n|0)<0)<<31>>31;p=x;z=K;continue a}default:{p=x;z=K;continue a}}case 112:{u=J|8;t=t>>>0>8?t:8;v=120;M=64;break}case 88:case 120:{u=J;M=64;break}case 111:{q=ea;p=c[q>>2]|0;q=c[q+4>>2]|0;if((p|0)==0&(q|0)==0)f=O;else{f=O;do{f=f+-1|0;a[f>>0]=p&7|48;p=hq(p|0,q|0,3)|0;q=C}while(!((p|0)==0&(q|0)==0))}if(!(J&8)){p=J;u=0;s=43101;M=77}else{u=W-f|0;p=J;t=(t|0)>(u|0)?t:u+1|0;u=0;s=43101;M=77}break}case 105:case 100:{p=ea;f=c[p>>2]|0;p=c[p+4>>2]|0;if((p|0)<0){f=cq(0,0,f|0,p|0)|0;p=C;q=ea;c[q>>2]=f;c[q+4>>2]=p;q=1;s=43101;M=76;break f}if(!(J&2048)){s=J&1;q=s;s=(s|0)==0?43101:43103;M=76}else{q=1;s=43102;M=76}break}case 117:{p=ea;f=c[p>>2]|0;p=c[p+4>>2]|0;q=0;s=43101;M=76;break}case 99:{a[X>>0]=c[ea>>2];f=X;v=1;x=0;w=43101;p=O;break}case 109:{p=Yo(c[(eo()|0)>>2]|0)|0;M=82;break}case 115:{p=c[ea>>2]|0;p=p|0?p:45003;M=82;break}case 67:{c[ja>>2]=c[ea>>2];c[Y>>2]=0;c[ea>>2]=ja;f=ja;t=-1;M=86;break}case 83:{f=c[ea>>2]|0;if(!t){Zo(e,32,L,0,J);f=0;M=97}else M=86;break}case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:{r=+h[ea>>3];c[ha>>2]=0;h[k>>3]=r;if((c[k+4>>2]|0)>=0)if(!(J&2048)){I=J&1;H=I;I=(I|0)==0?45011:45016}else{H=1;I=45013}else{r=-r;H=1;I=45010}h[k>>3]=r;G=c[k+4>>2]&2146435072;do if(G>>>0<2146435072|(G|0)==2146435072&0<0){y=+ap(r,ha)*2.0;p=y!=0.0;if(p)c[ha>>2]=(c[ha>>2]|0)+-1;E=v|32;if((E|0)==97){w=v&32;z=(w|0)==0?I:I+9|0;x=H|2;f=12-t|0;do if(!(t>>>0>11|(f|0)==0)){r=8.0;do{f=f+-1|0;r=r*16.0}while((f|0)!=0);if((a[z>>0]|0)==45){r=-(r+(-y-r));break}else{r=y+r-r;break}}else r=y;while(0);p=c[ha>>2]|0;f=(p|0)<0?0-p|0:p;f=Xo(f,((f|0)<0)<<31>>31,aa)|0;if((f|0)==(aa|0)){a[ca>>0]=48;f=ca}a[f+-1>>0]=(p>>31&2)+43;u=f+-2|0;a[u>>0]=v+15;s=(t|0)<1;q=(J&8|0)==0;p=ga;while(1){I=~~r;f=p+1|0;a[p>>0]=d[43085+I>>0]|w;r=(r-+(I|0))*16.0;do if((f-Z|0)==1){if(q&(s&r==0.0))break;a[f>>0]=46;f=p+2|0}while(0);if(!(r!=0.0))break;else p=f}q=u;t=(t|0)!=0&(Q+f|0)<(t|0)?R+t-q|0:P-q+f|0;s=t+x|0;Zo(e,32,L,s,J);if(!(c[e>>2]&32))Uo(z,x,e)|0;Zo(e,48,L,s,J^65536);p=f-Z|0;if(!(c[e>>2]&32))Uo(ga,p,e)|0;f=da-q|0;Zo(e,48,t-(p+f)|0,0,0);if(!(c[e>>2]&32))Uo(u,f,e)|0;Zo(e,32,L,s,J^8192);f=(s|0)<(L|0)?L:s;break}f=(t|0)<0?6:t;if(p){p=(c[ha>>2]|0)+-28|0;c[ha>>2]=p;r=y*268435456.0}else{r=y;p=c[ha>>2]|0}G=(p|0)<0?fa:S;F=G;p=G;do{D=~~r>>>0;c[p>>2]=D;p=p+4|0;r=(r-+(D>>>0))*1.0e9}while(r!=0.0);q=p;p=c[ha>>2]|0;if((p|0)>0){t=G;while(1){u=(p|0)>29?29:p;s=q+-4|0;do if(s>>>0>>0)s=t;else{p=0;do{D=jq(c[s>>2]|0,0,u|0)|0;D=iq(D|0,C|0,p|0,0)|0;p=C;B=rq(D|0,p|0,1e9,0)|0;c[s>>2]=B;p=qq(D|0,p|0,1e9,0)|0;s=s+-4|0}while(s>>>0>=t>>>0);if(!p){s=t;break}s=t+-4|0;c[s>>2]=p}while(0);while(1){if(q>>>0<=s>>>0)break;p=q+-4|0;if(!(c[p>>2]|0))q=p;else break}p=(c[ha>>2]|0)-u|0;c[ha>>2]=p;if((p|0)>0)t=s;else break}}else s=G;if((p|0)<0){z=((f+25|0)/9|0)+1|0;A=(E|0)==102;w=s;while(1){x=0-p|0;x=(x|0)>9?9:x;do if(w>>>0>>0){p=(1<>>x;s=0;u=w;do{D=c[u>>2]|0;c[u>>2]=(D>>>x)+s;s=_(D&p,t)|0;u=u+4|0}while(u>>>0>>0);p=(c[w>>2]|0)==0?w+4|0:w;if(!s){s=p;break}c[q>>2]=s;s=p;q=q+4|0}else s=(c[w>>2]|0)==0?w+4|0:w;while(0);p=A?G:s;q=(q-p>>2|0)>(z|0)?p+(z<<2)|0:q;p=(c[ha>>2]|0)+x|0;c[ha>>2]=p;if((p|0)>=0){A=s;break}else w=s}}else A=s;do if(A>>>0>>0){p=(F-A>>2)*9|0;t=c[A>>2]|0;if(t>>>0<10)break;else s=10;do{s=s*10|0;p=p+1|0}while(t>>>0>=s>>>0)}else p=0;while(0);B=(E|0)==103;D=(f|0)!=0;s=f-((E|0)!=102?p:0)+((D&B)<<31>>31)|0;if((s|0)<(((q-F>>2)*9|0)+-9|0)){u=s+9216|0;s=G+4+(((u|0)/9|0)+-1024<<2)|0;u=((u|0)%9|0)+1|0;if((u|0)<9){t=10;do{t=t*10|0;u=u+1|0}while((u|0)!=9)}else t=10;x=c[s>>2]|0;z=(x>>>0)%(t>>>0)|0;u=(s+4|0)==(q|0);do if(u&(z|0)==0)t=A;else{y=(((x>>>0)/(t>>>0)|0)&1|0)==0?9007199254740992.0:9007199254740994.0;w=(t|0)/2|0;if(z>>>0>>0)r=.5;else r=u&(z|0)==(w|0)?1.0:1.5;do if(H){if((a[I>>0]|0)!=45)break;y=-y;r=-r}while(0);u=x-z|0;c[s>>2]=u;if(!(y+r!=y)){t=A;break}E=u+t|0;c[s>>2]=E;if(E>>>0>999999999){p=A;while(1){t=s+-4|0;c[s>>2]=0;if(t>>>0

    >>0){p=p+-4|0;c[p>>2]=0}E=(c[t>>2]|0)+1|0;c[t>>2]=E;if(E>>>0>999999999)s=t;else{w=p;s=t;break}}}else w=A;p=(F-w>>2)*9|0;u=c[w>>2]|0;if(u>>>0<10){t=w;break}else t=10;do{t=t*10|0;p=p+1|0}while(u>>>0>=t>>>0);t=w}while(0);E=s+4|0;A=t;q=q>>>0>E>>>0?E:q}x=0-p|0;while(1){if(q>>>0<=A>>>0){z=0;E=q;break}s=q+-4|0;if(!(c[s>>2]|0))q=s;else{z=1;E=q;break}}do if(B){f=(D&1^1)+f|0;if((f|0)>(p|0)&(p|0)>-5){v=v+-1|0;f=f+-1-p|0}else{v=v+-2|0;f=f+-1|0}q=J&8;if(q|0)break;do if(z){q=c[E+-4>>2]|0;if(!q){s=9;break}if(!((q>>>0)%10|0)){t=10;s=0}else{s=0;break}do{t=t*10|0;s=s+1|0}while(!((q>>>0)%(t>>>0)|0|0))}else s=9;while(0);q=((E-F>>2)*9|0)+-9|0;if((v|32|0)==102){q=q-s|0;q=(q|0)<0?0:q;f=(f|0)<(q|0)?f:q;q=0;break}else{q=q+p-s|0;q=(q|0)<0?0:q;f=(f|0)<(q|0)?f:q;q=0;break}}else q=J&8;while(0);w=f|q;t=(w|0)!=0&1;u=(v|32|0)==102;if(u){p=(p|0)>0?p:0;v=0}else{s=(p|0)<0?x:p;s=Xo(s,((s|0)<0)<<31>>31,aa)|0;if((da-s|0)<2)do{s=s+-1|0;a[s>>0]=48}while((da-s|0)<2);a[s+-1>>0]=(p>>31&2)+43;F=s+-2|0;a[F>>0]=v;p=da-F|0;v=F}x=H+1+f+t+p|0;Zo(e,32,L,x,J);if(!(c[e>>2]&32))Uo(I,H,e)|0;Zo(e,48,L,x,J^65536);do if(u){s=A>>>0>G>>>0?G:A;p=s;do{q=Xo(c[p>>2]|0,0,T)|0;do if((p|0)==(s|0)){if((q|0)!=(T|0))break;a[V>>0]=48;q=V}else{if(q>>>0<=ga>>>0)break;eq(ga|0,48,q-Z|0)|0;do q=q+-1|0;while(q>>>0>ga>>>0)}while(0);if(!(c[e>>2]&32))Uo(q,U-q|0,e)|0;p=p+4|0}while(p>>>0<=G>>>0);do if(w|0){if(c[e>>2]&32|0)break;Uo(45054,1,e)|0}while(0);if((f|0)>0&p>>>0>>0){q=p;while(1){p=Xo(c[q>>2]|0,0,T)|0;if(p>>>0>ga>>>0){eq(ga|0,48,p-Z|0)|0;do p=p+-1|0;while(p>>>0>ga>>>0)}if(!(c[e>>2]&32))Uo(p,(f|0)>9?9:f,e)|0;q=q+4|0;p=f+-9|0;if(!((f|0)>9&q>>>0>>0)){f=p;break}else f=p}}Zo(e,48,f+9|0,9,0)}else{u=z?E:A+4|0;if((f|0)>-1){t=(q|0)==0;s=A;do{p=Xo(c[s>>2]|0,0,T)|0;if((p|0)==(T|0)){a[V>>0]=48;p=V}do if((s|0)==(A|0)){q=p+1|0;if(!(c[e>>2]&32))Uo(p,1,e)|0;if(t&(f|0)<1){p=q;break}if(c[e>>2]&32|0){p=q;break}Uo(45054,1,e)|0;p=q}else{if(p>>>0<=ga>>>0)break;eq(ga|0,48,p+$|0)|0;do p=p+-1|0;while(p>>>0>ga>>>0)}while(0);q=U-p|0;if(!(c[e>>2]&32))Uo(p,(f|0)>(q|0)?q:f,e)|0;f=f-q|0;s=s+4|0}while(s>>>0>>0&(f|0)>-1)}Zo(e,48,f+18|0,18,0);if(c[e>>2]&32|0)break;Uo(v,da-v|0,e)|0}while(0);Zo(e,32,L,x,J^8192);f=(x|0)<(L|0)?L:x}else{u=(v&32|0)!=0;t=r!=r|0.0!=0.0;p=t?0:H;s=p+3|0;Zo(e,32,L,s,q);f=c[e>>2]|0;if(!(f&32)){Uo(I,p,e)|0;f=c[e>>2]|0}if(!(f&32))Uo(t?(u?45050:45037):u?45029:45033,3,e)|0;Zo(e,32,L,s,J^8192);f=(s|0)<(L|0)?L:s}while(0);p=f;z=K;continue a}default:{f=z;q=J;v=t;x=0;w=43101;p=O}}while(0);g:do if((M|0)==64){q=ea;p=c[q>>2]|0;q=c[q+4>>2]|0;s=v&32;if(!((p|0)==0&(q|0)==0)){f=O;do{f=f+-1|0;a[f>>0]=d[43085+(p&15)>>0]|s;p=hq(p|0,q|0,4)|0;q=C}while(!((p|0)==0&(q|0)==0));M=ea;if((u&8|0)==0|(c[M>>2]|0)==0&(c[M+4>>2]|0)==0){p=u;u=0;s=43101;M=77}else{p=u;u=2;s=43101+(v>>4)|0;M=77}}else{f=O;p=u;u=0;s=43101;M=77}}else if((M|0)==76){f=Xo(f,p,O)|0;p=J;u=q;M=77}else if((M|0)==82){M=0;J=No(p,0,t)|0;I=(J|0)==0;f=p;v=I?t:J-p|0;x=0;w=43101;p=I?p+t|0:J}else if((M|0)==86){M=0;q=0;p=0;u=f;while(1){s=c[u>>2]|0;if(!s)break;p=_o(ia,s)|0;if((p|0)<0|p>>>0>(t-q|0)>>>0)break;q=p+q|0;if(t>>>0>q>>>0)u=u+4|0;else break}if((p|0)<0){n=-1;break a}Zo(e,32,L,q,J);if(!q){f=0;M=97}else{s=0;while(1){p=c[f>>2]|0;if(!p){f=q;M=97;break g}p=_o(ia,p)|0;s=p+s|0;if((s|0)>(q|0)){f=q;M=97;break g}if(!(c[e>>2]&32))Uo(ia,p,e)|0;if(s>>>0>=q>>>0){f=q;M=97;break}else f=f+4|0}}}while(0);if((M|0)==97){M=0;Zo(e,32,L,f,J^8192);p=(L|0)>(f|0)?L:f;z=K;continue}if((M|0)==77){M=0;q=(t|0)>-1?p&-65537:p;p=ea;p=(c[p>>2]|0)!=0|(c[p+4>>2]|0)!=0;if((t|0)!=0|p){v=(p&1^1)+(W-f)|0;v=(t|0)>(v|0)?t:v;x=u;w=s;p=O}else{f=O;v=0;x=u;w=s;p=O}}u=p-f|0;s=(v|0)<(u|0)?u:v;t=x+s|0;p=(L|0)<(t|0)?t:L;Zo(e,32,p,t,q);if(!(c[e>>2]&32))Uo(w,x,e)|0;Zo(e,48,p,t,q^65536);Zo(e,48,s,u,0);if(!(c[e>>2]&32))Uo(f,u,e)|0;Zo(e,32,p,t,q^8192);z=K}h:do if((M|0)==244)if(!e)if(o){n=1;while(1){o=c[m+(n<<2)>>2]|0;if(!o)break;Wo(l+(n<<3)|0,o,g);n=n+1|0;if((n|0)>=10){n=1;break h}}if((n|0)<10)while(1){if(c[m+(n<<2)>>2]|0){n=-1;break h}n=n+1|0;if((n|0)>=10){n=1;break}}else n=1}else n=0;while(0);i=ka;return n|0}function Uo(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=e+16|0;g=c[f>>2]|0;if(!g)if(!(Vo(e)|0)){g=c[f>>2]|0;h=5}else f=0;else h=5;a:do if((h|0)==5){i=e+20|0;f=c[i>>2]|0;h=f;if((g-f|0)>>>0>>0){f=pb[c[e+36>>2]&15](e,b,d)|0;break}b:do if((a[e+75>>0]|0)>-1){f=d;while(1){if(!f){g=h;f=0;break b}g=f+-1|0;if((a[b+g>>0]|0)==10)break;else f=g}if((pb[c[e+36>>2]&15](e,b,f)|0)>>>0>>0)break a;d=d-f|0;b=b+f|0;g=c[i>>2]|0}else{g=h;f=0}while(0);fq(g|0,b|0,d|0)|0;c[i>>2]=(c[i>>2]|0)+d;f=f+d|0}while(0);return f|0}function Vo(b){b=b|0;var d=0,e=0;d=b+74|0;e=a[d>>0]|0;a[d>>0]=e+255|e;d=c[b>>2]|0;if(!(d&8)){c[b+8>>2]=0;c[b+4>>2]=0;d=c[b+44>>2]|0;c[b+28>>2]=d;c[b+20>>2]=d;c[b+16>>2]=d+(c[b+48>>2]|0);d=0}else{c[b>>2]=d|32;d=-1}return d|0}function Wo(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0;a:do if(b>>>0<=20)do switch(b|0){case 9:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;c[a>>2]=b;break a}case 10:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;e=a;c[e>>2]=b;c[e+4>>2]=((b|0)<0)<<31>>31;break a}case 11:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;e=a;c[e>>2]=b;c[e+4>>2]=0;break a}case 12:{e=(c[d>>2]|0)+(8-1)&~(8-1);b=e;f=c[b>>2]|0;b=c[b+4>>2]|0;c[d>>2]=e+8;e=a;c[e>>2]=f;c[e+4>>2]=b;break a}case 13:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;e=(e&65535)<<16>>16;f=a;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;break a}case 14:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;f=a;c[f>>2]=e&65535;c[f+4>>2]=0;break a}case 15:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;e=(e&255)<<24>>24;f=a;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;break a}case 16:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;f=a;c[f>>2]=e&255;c[f+4>>2]=0;break a}case 17:{f=(c[d>>2]|0)+(8-1)&~(8-1);g=+h[f>>3];c[d>>2]=f+8;h[a>>3]=g;break a}case 18:{f=(c[d>>2]|0)+(8-1)&~(8-1);g=+h[f>>3];c[d>>2]=f+8;h[a>>3]=g;break a}default:break a}while(0);while(0);return}function Xo(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;if(c>>>0>0|(c|0)==0&b>>>0>4294967295)while(1){e=rq(b|0,c|0,10,0)|0;d=d+-1|0;a[d>>0]=e|48;e=qq(b|0,c|0,10,0)|0;if(c>>>0>9|(c|0)==9&b>>>0>4294967295){b=e;c=C}else{b=e;break}}if(b)while(1){d=d+-1|0;a[d>>0]=(b>>>0)%10|0|48;if(b>>>0<10)break;else b=(b>>>0)/10|0}return d|0}function Yo(b){b=b|0;var c=0,e=0;c=0;while(1){if((d[43111+c>>0]|0)==(b|0)){e=2;break}c=c+1|0;if((c|0)==87){c=87;b=43199;e=5;break}}if((e|0)==2)if(!c)b=43199;else{b=43199;e=5}if((e|0)==5)while(1){e=b;while(1){b=e+1|0;if(!(a[e>>0]|0))break;else e=b}c=c+-1|0;if(!c)break;else e=5}return b|0}function Zo(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,k=0;k=i;i=i+256|0;if((i|0)>=(j|0))ba();h=k;do if((d|0)>(e|0)&(f&73728|0)==0){f=d-e|0;eq(h|0,b|0,(f>>>0>256?256:f)|0)|0;b=c[a>>2]|0;g=(b&32|0)==0;if(f>>>0>255){e=d-e|0;do{if(g){Uo(h,256,a)|0;b=c[a>>2]|0}f=f+-256|0;g=(b&32|0)==0}while(f>>>0>255);if(g)f=e&255;else break}else if(!g)break;Uo(h,f,a)|0}while(0);i=k;return}function _o(a,b){a=a|0;b=b|0;if(!a)a=0;else a=$o(a,b,0)|0;return a|0}function $o(b,d,e){b=b|0;d=d|0;e=e|0;do if(b){if(d>>>0<128){a[b>>0]=d;b=1;break}if(d>>>0<2048){a[b>>0]=d>>>6|192;a[b+1>>0]=d&63|128;b=2;break}if(d>>>0<55296|(d&-8192|0)==57344){a[b>>0]=d>>>12|224;a[b+1>>0]=d>>>6&63|128;a[b+2>>0]=d&63|128;b=3;break}if((d+-65536|0)>>>0<1048576){a[b>>0]=d>>>18|240;a[b+1>>0]=d>>>12&63|128;a[b+2>>0]=d>>>6&63|128;a[b+3>>0]=d&63|128;b=4;break}else{c[(eo()|0)>>2]=84;b=-1;break}}else b=1;while(0);return b|0}function ap(a,b){a=+a;b=b|0;return +(+bp(a,b))}function bp(a,b){a=+a;b=b|0;var d=0,e=0,f=0;h[k>>3]=a;d=c[k>>2]|0;e=c[k+4>>2]|0;f=hq(d|0,e|0,52)|0;f=f&2047;switch(f|0){case 0:{if(a!=0.0){a=+bp(a*18446744073709551616.0,b);d=(c[b>>2]|0)+-64|0}else d=0;c[b>>2]=d;break}case 2047:break;default:{c[b>>2]=f+-1022;c[k>>2]=d;c[k+4>>2]=e&-2146435073|1071644672;a=+h[k>>3]}}return +a}function cp(a){a=a|0;return 0}function dp(b,c){b=b|0;c=c|0;var d=0,e=0;e=a[b>>0]|0;d=a[c>>0]|0;if(e<<24>>24==0?1:e<<24>>24!=d<<24>>24)c=e;else{do{b=b+1|0;c=c+1|0;e=a[b>>0]|0;d=a[c>>0]|0}while(!(e<<24>>24==0?1:e<<24>>24!=d<<24>>24));c=e}return (c&255)-(d&255)|0}function ep(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;if((i|0)>=(j|0))ba();d=b;c[d>>2]=a;a=cb(6,d|0)|0;a=co((a|0)==-4?-115:a)|0;i=b;return a|0}function fp(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=i;i=i+32|0;if((i|0)>=(j|0))ba();f=e;g=e+16|0;c[g>>2]=d;h=(c[g>>2]|0)+(4-1)&~(4-1);d=c[h>>2]|0;c[g>>2]=h+4;c[f>>2]=a;c[f+4>>2]=b|32768;c[f+8>>2]=d;d=co(db(5,f|0)|0)|0;i=e;return d|0}function gp(b,e,f){b=b|0;e=e|0;f=f|0;var g=0.0,h=0,k=0.0,l=0,m=0,n=0.0,o=0,p=0,q=0,t=0.0,u=0.0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,O=0.0;M=i;i=i+512|0;if((i|0)>=(j|0))ba();I=M;switch(e|0){case 0:{L=24;K=-149;B=4;break}case 1:{L=53;K=-1074;B=4;break}case 2:{L=53;K=-1074;B=4;break}default:g=0.0}a:do if((B|0)==4){F=b+4|0;E=b+100|0;do{e=c[F>>2]|0;if(e>>>0<(c[E>>2]|0)>>>0){c[F>>2]=e+1;e=d[e>>0]|0}else e=po(b)|0}while((so(e)|0)!=0);b:do switch(e|0){case 43:case 45:{h=1-(((e|0)==45&1)<<1)|0;e=c[F>>2]|0;if(e>>>0<(c[E>>2]|0)>>>0){c[F>>2]=e+1;e=d[e>>0]|0;J=h;break b}else{e=po(b)|0;J=h;break b}}default:J=1}while(0);h=e;e=0;do{if((h|32|0)!=(a[45041+e>>0]|0))break;do if(e>>>0<7){h=c[F>>2]|0;if(h>>>0<(c[E>>2]|0)>>>0){c[F>>2]=h+1;h=d[h>>0]|0;break}else{h=po(b)|0;break}}while(0);e=e+1|0}while(e>>>0<8);c:do switch(e|0){case 8:break;case 3:{B=23;break}default:{l=(f|0)!=0;if(l&e>>>0>3)if((e|0)==8)break c;else{B=23;break c}d:do if(!e){e=0;do{if((h|32|0)!=(a[45050+e>>0]|0))break d;do if(e>>>0<2){h=c[F>>2]|0;if(h>>>0<(c[E>>2]|0)>>>0){c[F>>2]=h+1;h=d[h>>0]|0;break}else{h=po(b)|0;break}}while(0);e=e+1|0}while(e>>>0<3)}while(0);switch(e|0){case 3:{e=c[F>>2]|0;if(e>>>0<(c[E>>2]|0)>>>0){c[F>>2]=e+1;e=d[e>>0]|0}else e=po(b)|0;if((e|0)==40)e=1;else{if(!(c[E>>2]|0)){g=r;break a}c[F>>2]=(c[F>>2]|0)+-1;g=r;break a}while(1){h=c[F>>2]|0;if(h>>>0<(c[E>>2]|0)>>>0){c[F>>2]=h+1;h=d[h>>0]|0}else h=po(b)|0;if(!((h+-48|0)>>>0<10|(h+-65|0)>>>0<26)?!((h|0)==95|(h+-97|0)>>>0<26):0)break;e=e+1|0}if((h|0)==41){g=r;break a}h=(c[E>>2]|0)==0;if(!h)c[F>>2]=(c[F>>2]|0)+-1;if(!l){c[(eo()|0)>>2]=22;no(b,0);g=0.0;break a}if(!e){g=r;break a}while(1){e=e+-1|0;if(!h)c[F>>2]=(c[F>>2]|0)+-1;if(!e){g=r;break a}}}case 0:{do if((h|0)==48){e=c[F>>2]|0;if(e>>>0<(c[E>>2]|0)>>>0){c[F>>2]=e+1;e=d[e>>0]|0}else e=po(b)|0;if((e|32|0)!=120){if(!(c[E>>2]|0)){e=48;break}c[F>>2]=(c[F>>2]|0)+-1;e=48;break}e=c[F>>2]|0;if(e>>>0<(c[E>>2]|0)>>>0){c[F>>2]=e+1;e=d[e>>0]|0;l=0}else{e=po(b)|0;l=0}e:while(1){switch(e|0){case 46:{B=74;break e}case 48:break;default:{z=0;m=0;y=0;h=0;o=l;p=0;x=0;n=1.0;l=0;g=0.0;break e}}e=c[F>>2]|0;if(e>>>0<(c[E>>2]|0)>>>0){c[F>>2]=e+1;e=d[e>>0]|0;l=1;continue}else{e=po(b)|0;l=1;continue}}if((B|0)==74){e=c[F>>2]|0;if(e>>>0<(c[E>>2]|0)>>>0){c[F>>2]=e+1;e=d[e>>0]|0}else e=po(b)|0;if((e|0)==48){l=0;h=0;do{e=c[F>>2]|0;if(e>>>0<(c[E>>2]|0)>>>0){c[F>>2]=e+1;e=d[e>>0]|0}else e=po(b)|0;l=iq(l|0,h|0,-1,-1)|0;h=C}while((e|0)==48);z=0;m=0;y=l;o=1;p=1;x=0;n=1.0;l=0;g=0.0}else{z=0;m=0;y=0;h=0;o=l;p=1;x=0;n=1.0;l=0;g=0.0}}while(1){v=e+-48|0;q=e|32;if(v>>>0>=10){w=(e|0)==46;if(!(w|(q+-97|0)>>>0<6)){q=y;v=z;break}if(w)if(!p){w=m;h=z;v=z;p=1;q=x;k=n}else{q=y;v=z;e=46;break}else B=86}else B=86;if((B|0)==86){B=0;e=(e|0)>57?q+-87|0:v;do if(!((z|0)<0|(z|0)==0&m>>>0<8)){if((z|0)<0|(z|0)==0&m>>>0<14){u=n*.0625;q=x;k=u;g=g+u*+(e|0);break}if((x|0)!=0|(e|0)==0){q=x;k=n}else{q=1;k=n;g=g+n*.5}}else{q=x;k=n;l=e+(l<<4)|0}while(0);m=iq(m|0,z|0,1,0)|0;w=y;v=C;o=1}e=c[F>>2]|0;if(e>>>0<(c[E>>2]|0)>>>0){c[F>>2]=e+1;z=v;y=w;e=d[e>>0]|0;x=q;n=k;continue}else{z=v;y=w;e=po(b)|0;x=q;n=k;continue}}if(!o){e=(c[E>>2]|0)==0;if(!e)c[F>>2]=(c[F>>2]|0)+-1;if(f){if(!e?(A=c[F>>2]|0,c[F>>2]=A+-1,p|0):0)c[F>>2]=A+-2}else no(b,0);g=+(J|0)*0.0;break a}o=(p|0)==0;p=o?m:q;o=o?v:h;if((v|0)<0|(v|0)==0&m>>>0<8){h=v;do{l=l<<4;m=iq(m|0,h|0,1,0)|0;h=C}while((h|0)<0|(h|0)==0&m>>>0<8)}if((e|32|0)==112){h=hp(b,f)|0;e=C;if((h|0)==0&(e|0)==-2147483648){if(!f){no(b,0);g=0.0;break a}if(!(c[E>>2]|0)){h=0;e=0}else{c[F>>2]=(c[F>>2]|0)+-1;h=0;e=0}}}else if(!(c[E>>2]|0)){h=0;e=0}else{c[F>>2]=(c[F>>2]|0)+-1;h=0;e=0}I=jq(p|0,o|0,2)|0;I=iq(I|0,C|0,-32,-1)|0;e=iq(I|0,C|0,h|0,e|0)|0;h=C;if(!l){g=+(J|0)*0.0;break a}if((h|0)>0|(h|0)==0&e>>>0>(0-K|0)>>>0){c[(eo()|0)>>2]=34;g=+(J|0)*1797693134862315708145274.0e284*1797693134862315708145274.0e284;break a}I=K+-106|0;H=((I|0)<0)<<31>>31;if((h|0)<(H|0)|(h|0)==(H|0)&e>>>0>>0){c[(eo()|0)>>2]=34;g=+(J|0)*2.2250738585072014e-308*2.2250738585072014e-308;break a}if((l|0)>-1){do{H=!(g>=.5);I=H&1|l<<1;l=I^1;g=g+(H?g:g+-1.0);e=iq(e|0,h|0,-1,-1)|0;h=C}while((I|0)>-1);m=e;n=g}else{m=e;n=g}e=cq(32,0,K|0,((K|0)<0)<<31>>31|0)|0;e=iq(m|0,h|0,e|0,C|0)|0;K=C;if(0>(K|0)|0==(K|0)&L>>>0>e>>>0)if((e|0)<0){e=0;B=127}else B=125;else{e=L;B=125}if((B|0)==125)if((e|0)<53)B=127;else{h=e;k=+(J|0);g=0.0}if((B|0)==127){g=+(J|0);h=e;k=g;g=+jp(+ip(1.0,84-e|0),g)}L=(l&1|0)==0&(n!=0.0&(h|0)<32);g=k*(L?0.0:n)+(g+k*+(((L&1)+l|0)>>>0))-g;if(!(g!=0.0))c[(eo()|0)>>2]=34;g=+kp(g,m);break a}else e=h;while(0);G=K+L|0;H=0-G|0;l=0;f:while(1){switch(e|0){case 46:{B=138;break f}case 48:break;default:{h=0;q=0;p=0;break f}}e=c[F>>2]|0;if(e>>>0<(c[E>>2]|0)>>>0){c[F>>2]=e+1;e=d[e>>0]|0;l=1;continue}else{e=po(b)|0;l=1;continue}}if((B|0)==138){e=c[F>>2]|0;if(e>>>0<(c[E>>2]|0)>>>0){c[F>>2]=e+1;e=d[e>>0]|0}else e=po(b)|0;if((e|0)==48){h=0;e=0;while(1){h=iq(h|0,e|0,-1,-1)|0;l=C;e=c[F>>2]|0;if(e>>>0<(c[E>>2]|0)>>>0){c[F>>2]=e+1;e=d[e>>0]|0}else e=po(b)|0;if((e|0)==48)e=l;else{q=l;l=1;p=1;break}}}else{h=0;q=0;p=1}}c[I>>2]=0;o=e+-48|0;m=(e|0)==46;g:do if(m|o>>>0<10){D=I+496|0;z=0;w=0;x=m;B=q;v=l;A=p;l=0;m=0;p=0;h:while(1){do if(x)if(!A){h=z;q=w;A=1}else{q=B;e=z;o=w;break h}else{x=iq(z|0,w|0,1,0)|0;w=C;y=(e|0)!=48;if((m|0)>=125){if(!y){q=B;z=x;break}c[D>>2]=c[D>>2]|1;q=B;z=x;break}q=I+(m<<2)|0;if(l)o=e+-48+((c[q>>2]|0)*10|0)|0;c[q>>2]=o;l=l+1|0;o=(l|0)==9;q=B;z=x;v=1;l=o?0:l;m=(o&1)+m|0;p=y?x:p}while(0);e=c[F>>2]|0;if(e>>>0<(c[E>>2]|0)>>>0){c[F>>2]=e+1;e=d[e>>0]|0}else e=po(b)|0;o=e+-48|0;x=(e|0)==46;if(!(x|o>>>0<10)){o=A;B=161;break g}else B=q}v=(v|0)!=0;B=169}else{z=0;w=0;v=l;o=p;l=0;m=0;p=0;B=161}while(0);do if((B|0)==161){D=(o|0)==0;h=D?z:h;q=D?w:q;v=(v|0)!=0;if(!((e|32|0)==101&v))if((e|0)>-1){e=z;o=w;B=169;break}else{e=z;o=w;B=171;break}o=hp(b,f)|0;e=C;if((o|0)==0&(e|0)==-2147483648){if(!f){no(b,0);g=0.0;break}if(!(c[E>>2]|0)){o=0;e=0}else{c[F>>2]=(c[F>>2]|0)+-1;o=0;e=0}}h=iq(o|0,e|0,h|0,q|0)|0;v=z;q=C;o=w;B=173}while(0);if((B|0)==169)if(c[E>>2]|0){c[F>>2]=(c[F>>2]|0)+-1;if(v){v=e;B=173}else B=172}else B=171;if((B|0)==171)if(v){v=e;B=173}else B=172;do if((B|0)==172){c[(eo()|0)>>2]=22;no(b,0);g=0.0}else if((B|0)==173){e=c[I>>2]|0;if(!e){g=+(J|0)*0.0;break}if(((o|0)<0|(o|0)==0&v>>>0<10)&((h|0)==(v|0)&(q|0)==(o|0))?L>>>0>30|(e>>>L|0)==0:0){g=+(J|0)*+(e>>>0);break}b=(K|0)/-2|0;F=((b|0)<0)<<31>>31;if((q|0)>(F|0)|(q|0)==(F|0)&h>>>0>b>>>0){c[(eo()|0)>>2]=34;g=+(J|0)*1797693134862315708145274.0e284*1797693134862315708145274.0e284;break}b=K+-106|0;F=((b|0)<0)<<31>>31;if((q|0)<(F|0)|(q|0)==(F|0)&h>>>0>>0){c[(eo()|0)>>2]=34;g=+(J|0)*2.2250738585072014e-308*2.2250738585072014e-308;break}if(l){if((l|0)<9){o=I+(m<<2)|0;e=c[o>>2]|0;do{e=e*10|0;l=l+1|0}while((l|0)!=9);c[o>>2]=e}m=m+1|0}if((p|0)<9?(p|0)<=(h|0)&(h|0)<18:0){if((h|0)==9){g=+(J|0)*+((c[I>>2]|0)>>>0);break}if((h|0)<9){g=+(J|0)*+((c[I>>2]|0)>>>0)/+(c[9740+(8-h<<2)>>2]|0);break}b=L+27+(_(h,-3)|0)|0;e=c[I>>2]|0;if((b|0)>30|(e>>>b|0)==0){g=+(J|0)*+(e>>>0)*+(c[9740+(h+-10<<2)>>2]|0);break}}e=(h|0)%9|0;if(!e){l=0;e=0}else{v=(h|0)>-1?e:e+9|0;o=c[9740+(8-v<<2)>>2]|0;if(m){p=1e9/(o|0)|0;l=0;e=0;q=0;do{E=I+(q<<2)|0;F=c[E>>2]|0;b=((F>>>0)/(o>>>0)|0)+e|0;c[E>>2]=b;e=_((F>>>0)%(o>>>0)|0,p)|0;b=(q|0)==(l|0)&(b|0)==0;q=q+1|0;h=b?h+-9|0:h;l=b?q&127:l}while((q|0)!=(m|0));if(e){c[I+(m<<2)>>2]=e;m=m+1|0}}else{l=0;m=0}e=0;h=9-v+h|0}i:while(1){w=(h|0)<18;x=(h|0)==18;y=I+(l<<2)|0;do{if(!w){if(!x){z=m;break i}if((c[y>>2]|0)>>>0>=9007199){h=18;z=m;break i}}o=0;p=m+127|0;while(1){v=p&127;q=I+(v<<2)|0;p=jq(c[q>>2]|0,0,29)|0;p=iq(p|0,C|0,o|0,0)|0;o=C;if(o>>>0>0|(o|0)==0&p>>>0>1e9){b=qq(p|0,o|0,1e9,0)|0;p=rq(p|0,o|0,1e9,0)|0;o=b}else o=0;c[q>>2]=p;b=(v|0)==(l|0);m=(v|0)!=(m+127&127|0)|b?m:(p|0)==0?v:m;if(b)break;else p=v+-1|0}e=e+-29|0}while((o|0)==0);l=l+127&127;if((l|0)==(m|0)){b=m+127&127;m=I+((m+126&127)<<2)|0;c[m>>2]=c[m>>2]|c[I+(b<<2)>>2];m=b}c[I+(l<<2)>>2]=o;h=h+9|0}j:while(1){m=z+1&127;y=I+((z+127&127)<<2)|0;while(1){w=(h|0)==18;x=(h|0)>27?9:1;v=w^1;while(1){p=l&127;q=(p|0)==(z|0);do if(!q){o=c[I+(p<<2)>>2]|0;if(o>>>0<9007199){B=219;break}if(o>>>0>9007199)break;o=l+1&127;if((o|0)==(z|0)){B=219;break}o=c[I+(o<<2)>>2]|0;if(o>>>0<254740991){B=219;break}if(!(o>>>0>254740991|v)){h=p;m=z;break j}}else B=219;while(0);if((B|0)==219?(B=0,w):0){B=220;break j}e=e+x|0;if((l|0)==(z|0))l=z;else break}v=(1<>>x;p=l;o=0;q=l;while(1){F=I+(q<<2)|0;b=c[F>>2]|0;l=(b>>>x)+o|0;c[F>>2]=l;o=_(b&v,w)|0;l=(q|0)==(p|0)&(l|0)==0;q=q+1&127;h=l?h+-9|0:h;l=l?q:p;if((q|0)==(z|0))break;else p=l}if(!o)continue;if((m|0)!=(l|0))break;c[y>>2]=c[y>>2]|1}c[I+(z<<2)>>2]=o;z=m}if((B|0)==220)if(q){c[I+(m+-1<<2)>>2]=0;h=z}else{h=p;m=z}g=+((c[I+(h<<2)>>2]|0)>>>0);h=l+1&127;if((h|0)==(m|0)){m=l+2&127;c[I+(m+-1<<2)>>2]=0}u=+(J|0);k=u*(g*1.0e9+ +((c[I+(h<<2)>>2]|0)>>>0));w=e+53|0;q=w-K|0;v=(q|0)<(L|0);h=v&1;p=v?((q|0)<0?0:q):L;if((p|0)<53){O=+jp(+ip(1.0,105-p|0),k);n=+lp(k,+ip(1.0,53-p|0));t=O;g=n;n=O+(k-n)}else{t=0.0;g=0.0;n=k}o=l+2&127;do if((o|0)==(m|0))k=g;else{o=c[I+(o<<2)>>2]|0;do if(o>>>0>=5e8){if(o>>>0>5e8){g=u*.75+g;break}if((l+3&127|0)==(m|0)){g=u*.5+g;break}else{g=u*.75+g;break}}else{if((o|0)==0?(l+3&127|0)==(m|0):0)break;g=u*.25+g}while(0);if((53-p|0)<=1){k=g;break}if(+lp(g,1.0)!=0.0){k=g;break}k=g+1.0}while(0);g=n+k-t;do if((w&2147483647|0)>(-2-G|0)){if(+N(+g)>=9007199254740992.0){h=v&(p|0)==(q|0)?0:h;e=e+1|0;g=g*.5}if((e+50|0)<=(H|0)?!(k!=0.0&(h|0)!=0):0)break;c[(eo()|0)>>2]=34}while(0);g=+kp(g,e)}while(0);break a}default:{if(c[E>>2]|0)c[F>>2]=(c[F>>2]|0)+-1;c[(eo()|0)>>2]=22;no(b,0);g=0.0;break a}}}}while(0);if((B|0)==23){h=(c[E>>2]|0)==0;if(!h)c[F>>2]=(c[F>>2]|0)+-1;if((f|0)!=0&e>>>0>3)do{if(!h)c[F>>2]=(c[F>>2]|0)+-1;e=e+-1|0}while(e>>>0>3)}g=+(J|0)*s}while(0);i=M;return +g}function hp(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=a+4|0;e=c[i>>2]|0;j=a+100|0;if(e>>>0<(c[j>>2]|0)>>>0){c[i>>2]=e+1;e=d[e>>0]|0}else e=po(a)|0;switch(e|0){case 43:case 45:{f=(e|0)==45&1;e=c[i>>2]|0;if(e>>>0<(c[j>>2]|0)>>>0){c[i>>2]=e+1;e=d[e>>0]|0}else e=po(a)|0;if((b|0)!=0&(e+-48|0)>>>0>9?(c[j>>2]|0)!=0:0){c[i>>2]=(c[i>>2]|0)+-1;h=f}else h=f;break}default:h=0}if((e+-48|0)>>>0>9)if(!(c[j>>2]|0)){f=-2147483648;e=0}else{c[i>>2]=(c[i>>2]|0)+-1;f=-2147483648;e=0}else{f=0;do{f=e+-48+(f*10|0)|0;e=c[i>>2]|0;if(e>>>0<(c[j>>2]|0)>>>0){c[i>>2]=e+1;e=d[e>>0]|0}else e=po(a)|0}while((e+-48|0)>>>0<10&(f|0)<214748364);b=((f|0)<0)<<31>>31;if((e+-48|0)>>>0<10){do{b=pq(f|0,b|0,10,0)|0;f=C;e=iq(e|0,((e|0)<0)<<31>>31|0,-48,-1)|0;f=iq(e|0,C|0,b|0,f|0)|0;b=C;e=c[i>>2]|0;if(e>>>0<(c[j>>2]|0)>>>0){c[i>>2]=e+1;e=d[e>>0]|0}else e=po(a)|0}while((e+-48|0)>>>0<10&((b|0)<21474836|(b|0)==21474836&f>>>0<2061584302));g=f}else g=f;if((e+-48|0)>>>0<10)do{e=c[i>>2]|0;if(e>>>0<(c[j>>2]|0)>>>0){c[i>>2]=e+1;e=d[e>>0]|0}else e=po(a)|0}while((e+-48|0)>>>0<10);if(c[j>>2]|0)c[i>>2]=(c[i>>2]|0)+-1;a=(h|0)!=0;e=cq(0,0,g|0,b|0)|0;f=a?C:b;e=a?e:g}C=f;return e|0}function ip(a,b){a=+a;b=b|0;var d=0;if((b|0)>1023){a=a*8988465674311579538646525.0e283;d=b+-1023|0;if((d|0)>1023){d=b+-2046|0;d=(d|0)>1023?1023:d;a=a*8988465674311579538646525.0e283}}else if((b|0)<-1022){a=a*2.2250738585072014e-308;d=b+1022|0;if((d|0)<-1022){d=b+2044|0;d=(d|0)<-1022?-1022:d;a=a*2.2250738585072014e-308}}else d=b;d=jq(d+1023|0,0,52)|0;b=C;c[k>>2]=d;c[k+4>>2]=b;return +(a*+h[k>>3])}function jp(a,b){a=+a;b=+b;return +(+yo(a,b))}function kp(a,b){a=+a;b=b|0;return +(+ip(a,b))}function lp(a,b){a=+a;b=+b;return +(+mp(a,b))}function mp(a,b){a=+a;b=+b;var d=0,e=0,f=0,g=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0.0;h[k>>3]=a;d=c[k>>2]|0;m=c[k+4>>2]|0;h[k>>3]=b;n=c[k>>2]|0;o=c[k+4>>2]|0;e=hq(d|0,m|0,52)|0;e=e&2047;j=hq(n|0,o|0,52)|0;j=j&2047;p=m&-2147483648;i=jq(n|0,o|0,1)|0;l=C;a:do if(!((i|0)==0&(l|0)==0)?(r=+N(+b),h[k>>3]=r,g=c[k+4>>2]|0,!(g>>>0>2146435072|(g|0)==2146435072&(c[k>>2]|0)>>>0>0|(e|0)==2047)):0){f=jq(d|0,m|0,1)|0;g=C;if(!(g>>>0>l>>>0|(g|0)==(l|0)&f>>>0>i>>>0))return +((f|0)==(i|0)&(g|0)==(l|0)?a*0.0:a);if(!e){e=jq(d|0,m|0,12)|0;f=C;if((f|0)>-1|(f|0)==-1&e>>>0>4294967295){g=e;e=0;do{e=e+-1|0;g=jq(g|0,f|0,1)|0;f=C}while((f|0)>-1|(f|0)==-1&g>>>0>4294967295)}else e=0;d=jq(d|0,m|0,1-e|0)|0;f=C}else f=m&1048575|1048576;if(!j){g=jq(n|0,o|0,12)|0;i=C;if((i|0)>-1|(i|0)==-1&g>>>0>4294967295){j=0;do{j=j+-1|0;g=jq(g|0,i|0,1)|0;i=C}while((i|0)>-1|(i|0)==-1&g>>>0>4294967295)}else j=0;n=jq(n|0,o|0,1-j|0)|0;m=C}else m=o&1048575|1048576;l=cq(d|0,f|0,n|0,m|0)|0;i=C;g=(i|0)>-1|(i|0)==-1&l>>>0>4294967295;b:do if((e|0)>(j|0)){while(1){if(g)if((d|0)==(n|0)&(f|0)==(m|0))break;else{d=l;f=i}d=jq(d|0,f|0,1)|0;f=C;e=e+-1|0;l=cq(d|0,f|0,n|0,m|0)|0;i=C;g=(i|0)>-1|(i|0)==-1&l>>>0>4294967295;if((e|0)<=(j|0))break b}b=a*0.0;break a}while(0);if(g)if((d|0)==(n|0)&(f|0)==(m|0)){b=a*0.0;break}else{f=i;d=l}if(f>>>0<1048576|(f|0)==1048576&d>>>0<0)do{d=jq(d|0,f|0,1)|0;f=C;e=e+-1|0}while(f>>>0<1048576|(f|0)==1048576&d>>>0<0);if((e|0)>0){o=iq(d|0,f|0,0,-1048576)|0;d=C;e=jq(e|0,0,52)|0;d=d|C;e=o|e}else{e=hq(d|0,f|0,1-e|0)|0;d=C}c[k>>2]=e;c[k+4>>2]=d|p;b=+h[k>>3]}else q=3;while(0);if((q|0)==3){b=a*b;b=b/b}return +b}function np(b){b=b|0;var d=0,e=0,f=0;f=b;a:do if(!(f&3))e=4;else{d=b;b=f;while(1){if(!(a[d>>0]|0))break a;d=d+1|0;b=d;if(!(b&3)){b=d;e=4;break}}}while(0);if((e|0)==4){while(1){d=c[b>>2]|0;if(!((d&-2139062144^-2139062144)&d+-16843009))b=b+4|0;else break}if((d&255)<<24>>24)do b=b+1|0;while((a[b>>0]|0)!=0)}return b-f|0}function op(){return 9772}function pp(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=i;i=i+16|0;if((i|0)>=(j|0))ba();g=f;c[g>>2]=e;e=Qo(a,b,d,g)|0;i=f;return e|0}function qp(a){a=+a;var b=0,d=0,e=0.0;d=(g[k>>2]=a,c[k>>2]|0)>>>31;e=+N(+a);b=(g[k>>2]=e,c[k>>2]|0);do if(b>>>0<=2139095039)if(b>>>0<1062731776)if(b>>>0<830472192){a=(a*8.0+a*1.0270333290100098)*.125;break}else{e=a*a;a=(e*(e*(e*(-.005770270247012377-e*2.3763017452438362e-05)+-.028481749817728996)+-.32504209876060486)+.12837916612625122)/(e*(e*(e*(e*(1.324947370449081e-04-e*3.9602282413397916e-06)+5.0813062116503716e-03)+.06502225250005722)+.3979172110557556)+1.0)*a+a;break}else{if(b>>>0<1086324736)a=1.0-+rp(b,a);else a=1.0;a=d|0?-a:a;break}else a=1.0/a+ +(1-(d<<1)|0);while(0);return +a}function rp(a,b){a=a|0;b=+b;var d=0.0,e=0.0,f=0.0,h=0.0;e=+N(+b);if(a>>>0<1067450368){b=e+-1.0;b=.15493708848953247-(b*(b*(b*(b*(b*(.03547830507159233-b*.002166375517845154)+-.11089469492435455)+.31834661960601807)+-.3722078800201416)+.41485610604286194)+-2.3621185682713985e-03)/(b*(b*(b*(b*(b*(b*.011984500102698803+.01363708358258009)+.12617121636867523)+.07182865589857101)+.5403979420661926)+.10642088204622269)+1.0)}else{f=1.0/(e*e);if(a>>>0<1077336941){b=f*(f*(f*(f*(f*(f*(6.570249557495117-f*.06042441353201866)+108.63500213623047)+429.0081481933594)+645.3872680664062)+434.5658874511719)+137.6577606201172)+19.65127182006836;d=f*(f*(f*(f*(f*(f*(-81.28743743896484-f*9.814329147338867)+-184.60508728027344)+-162.39666748046875)+-62.37533187866211)+-10.558626174926758)+-.6938585638999939)+-.009864944033324718}else{b=f*(f*(f*(f*(f*(474.5285339355469-f*22.44095230102539)+2553.05029296875)+3199.858154296875)+1536.7296142578125)+325.7925109863281)+30.33806037902832;d=f*(f*(f*(f*(f*(-1025.0950927734375-f*483.5191955566406)+-637.5664672851562)+-160.63638305664062)+-17.75795555114746)+-.7992832660675049)+-.009864943102002144}h=(c[k>>2]=(g[k>>2]=e,c[k>>2]|0)&-8192,+g[k>>2]);b=+X(+(-.5625-h*h))*+X(+((h-e)*(e+h)+d/(f*b+1.0)))/e}return +b}function sp(a){a=+a;var b=0,d=0,e=0;h[k>>3]=a;b=c[k>>2]|0;d=c[k+4>>2]|0;e=hq(b|0,d|0,52)|0;e=e&2047;switch(e|0){case 0:{b=jq(b|0,d|0,12)|0;d=C;if(!((b|0)==0&(d|0)==0))if((d|0)>-1|(d|0)==-1&b>>>0>4294967295){e=b;b=-1023;do{b=b+-1|0;e=jq(e|0,d|0,1)|0;d=C}while((d|0)>-1|(d|0)==-1&e>>>0>4294967295)}else b=-1023;else b=-2147483648;break}case 2047:{b=(b|0)!=0|(d&1048575|0)!=0?-2147483648:2147483647;break}default:b=e+-1023|0}return b|0}function tp(a,b){a=+a;b=+b;var d=0,e=0,f=0,g=0.0,i=0;h[k>>3]=a;d=c[k>>2]|0;e=c[k+4>>2]|0;g=+N(+a);h[k>>3]=g;f=c[k+4>>2]|0;do if(!(f>>>0>2146435072|(f|0)==2146435072&(c[k>>2]|0)>>>0>0)){g=+N(+b);h[k>>3]=g;f=c[k+4>>2]|0;if(!(f>>>0>2146435072|(f|0)==2146435072&(c[k>>2]|0)>>>0>0)){h[k>>3]=b;i=c[k>>2]|0;f=c[k+4>>2]|0;d=hq(d|0,e|0,63)|0;f=hq(i|0,f|0,63)|0;if((d|0)==(f|0)){a=a>2]=a,c[k>>2]|0);e=+N(+a);do if((g[k>>2]=e,c[k>>2]|0)>>>0<=2139095040){e=+N(+b);if((g[k>>2]=e,c[k>>2]|0)>>>0<=2139095040)if(((g[k>>2]=b,c[k>>2]|0)^d|0)<0){a=(d|0)<0?b:a;break}else{a=a>2]=a,c[k>>2]|0);d=b>>>23&255;switch(d|0){case 0:{d=b<<9;if(d)if((d|0)>-1){b=-127;do{b=b+-1|0;d=d<<1}while((d|0)>-1)}else b=-127;else b=-2147483648;break}case 255:{b=b&8388607|0?-2147483648:2147483647;break}default:b=d+-127|0}return b|0}function wp(a,b){a=+a;b=b|0;var d=0;if((b|0)>127){a=a*1701411834604692317316873.0e14;d=b+-127|0;if((d|0)>127){d=b+-254|0;d=(d|0)>127?127:d;a=a*1701411834604692317316873.0e14}}else if((b|0)<-126){a=a*1.1754943508222875e-38;d=b+126|0;if((d|0)<-126){d=b+252|0;d=(d|0)<-126?-126:d;a=a*1.1754943508222875e-38}}else d=b;return +(a*(c[k>>2]=(d<<23)+1065353216,+g[k>>2]))}function xp(a){a=+a;var b=0,d=0,e=0,f=0,g=0.0,i=0.0,j=0.0,l=0.0,m=0.0;h[k>>3]=a;d=c[k>>2]|0;b=c[k+4>>2]|0;e=(b|0)<0;do if(e|b>>>0<1048576){g=+N(+a);h[k>>3]=g;if((c[k>>2]|0)==0&(c[k+4>>2]|0)==0){a=-1.0/(a*a);break}if(e){a=(a-a)/0.0;break}else{h[k>>3]=a*18014398509481984.0;b=c[k+4>>2]|0;e=c[k>>2]|0;d=-1077;f=9;break}}else if(b>>>0<=2146435071)if((d|0)==0&0==0&(b|0)==1072693248)a=0.0;else{e=d;d=-1023;f=9}while(0);if((f|0)==9){f=b+614242|0;c[k>>2]=e;c[k+4>>2]=(f&1048575)+1072079006;j=+h[k>>3]+-1.0;i=j*(j*.5);l=j/(j+2.0);m=l*l;a=m*m;h[k>>3]=j-i;e=c[k+4>>2]|0;c[k>>2]=0;c[k+4>>2]=e;g=+h[k>>3];a=j-g-i+l*(i+(a*(a*(a*.15313837699209373+.22222198432149784)+.3999999999940942)+m*(a*(a*(a*.14798198605116586+.1818357216161805)+.2857142874366239)+.6666666666666735)));m=g*.4342944818781689;i=+(d+(f>>>20)|0);l=i*.30102999566361177;j=l+m;a=j+(m+(l-j)+(a*.4342944818781689+(i*3.694239077158931e-13+(g+a)*2.5082946711645275e-11)))}return +a}function yp(a){a=+a;var b=0,d=0,e=0,f=0.0,h=0.0,i=0.0,j=0.0,l=0.0;b=(g[k>>2]=a,c[k>>2]|0);d=(b|0)<0;do if(b>>>0<8388608|d){f=+N(+a);if(!((g[k>>2]=f,c[k>>2]|0)|0)){a=-1.0/(a*a);break}if(d){a=(a-a)/0.0;break}else{b=(g[k>>2]=a*33554432.0,c[k>>2]|0);d=-152;e=9;break}}else if(b>>>0<=2139095039)if((b|0)==1065353216)a=0.0;else{d=-127;e=9}while(0);if((e|0)==9){e=b+4913933|0;l=(c[k>>2]=(e&8388607)+1060439283,+g[k>>2])+-1.0;j=l/(l+2.0);h=j*j;a=h*h;i=l*(l*.5);f=(c[k>>2]=(g[k>>2]=l-i,c[k>>2]|0)&-4096,+g[k>>2]);a=l-f-i+j*(i+(h*(a*.2849878668785095+.6666666269302368)+a*(a*.24279078841209412+.40000972151756287)));h=+(d+(e>>>23)|0);a=h*.3010292053222656+(f*.434326171875+(a*.434326171875+(h*7.903415166765626e-07-(f+a)*3.168997136526741e-05)))}return +a}function zp(a){a=+a;var b=0;h[k>>3]=a;b=c[k+4>>2]&2146435072;do if(b>>>0<2146435072|(b|0)==2146435072&0<0)if(a==0.0){a=-1.0/(a*a);break}else{a=+(sp(a)|0);break}else a=a*a;while(0);return +a}function Ap(a){a=+a;do if(((g[k>>2]=a,c[k>>2]|0)&2139095040)>>>0<2139095040)if(a==0.0){a=-1.0/(a*a);break}else{a=+(vp(a)|0);break}else a=a*a;while(0);return +a}function Bp(b,c){b=b|0;c=c|0;b=Cp(b,c)|0;return ((a[b>>0]|0)==(c&255)<<24>>24?b:0)|0}function Cp(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=d&255;a:do if(!f)b=b+(np(b)|0)|0;else{if(b&3){e=d&255;do{g=a[b>>0]|0;if(g<<24>>24==0?1:g<<24>>24==e<<24>>24)break a;b=b+1|0}while((b&3|0)!=0)}f=_(f,16843009)|0;e=c[b>>2]|0;b:do if(!((e&-2139062144^-2139062144)&e+-16843009))do{g=e^f;if((g&-2139062144^-2139062144)&g+-16843009|0)break b;b=b+4|0;e=c[b>>2]|0}while(!((e&-2139062144^-2139062144)&e+-16843009|0));while(0);e=d&255;while(1){g=a[b>>0]|0;if(g<<24>>24==0?1:g<<24>>24==e<<24>>24)break;else b=b+1|0}}while(0);return b|0}function Dp(){var a=0,b=0;a=i;i=i+16|0;if((i|0)>=(j|0))ba();b=Fa(20,a|0)|0;i=a;return b|0}function Ep(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=i;i=i+32|0;if((i|0)>=(j|0))ba();f=g+16|0;e=g;if(No(45056,a[d>>0]|0,4)|0){h=Fp(d)|0|32768;c[e>>2]=b;c[e+4>>2]=h;c[e+8>>2]=438;e=co(db(5,e|0)|0)|0;if((e|0)>=0){b=Gp(e,d)|0;if(!b){c[f>>2]=e;cb(6,f|0)|0;b=0}}else b=0}else{c[(eo()|0)>>2]=22;b=0}i=g;return b|0}function Fp(b){b=b|0;var c=0,d=0,e=0;d=(Bp(b,43)|0)==0;c=a[b>>0]|0;d=d?c<<24>>24!=114&1:2;e=(Bp(b,120)|0)==0;d=e?d:d|128;b=(Bp(b,101)|0)==0;b=b?d:d|524288;b=c<<24>>24==114?b:b|64;b=c<<24>>24==119?b|512:b;return (c<<24>>24==97?b|1024:b)|0}function Gp(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+112|0;if((i|0)>=(j|0))ba();o=p+40|0;m=p+24|0;l=p+16|0;g=p;n=p+52|0;f=a[d>>0]|0;if(No(45056,f<<24>>24,4)|0){e=Xp(1144)|0;if(!e)e=0;else{h=e;k=h+112|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(k|0));if(!(Bp(d,43)|0))c[e>>2]=f<<24>>24==114?8:4;if(Bp(d,101)|0){c[g>>2]=b;c[g+4>>2]=2;c[g+8>>2]=1;ya(221,g|0)|0;f=a[d>>0]|0}if(f<<24>>24==97){c[l>>2]=b;c[l+4>>2]=3;f=ya(221,l|0)|0;if(!(f&1024)){c[m>>2]=b;c[m+4>>2]=4;c[m+8>>2]=f|1024;ya(221,m|0)|0}d=c[e>>2]|128;c[e>>2]=d}else d=c[e>>2]|0;c[e+60>>2]=b;c[e+44>>2]=e+120;c[e+48>>2]=1024;f=e+75|0;a[f>>0]=-1;if((d&8|0)==0?(c[o>>2]=b,c[o+4>>2]=21505,c[o+8>>2]=n,(Xa(54,o|0)|0)==0):0)a[f>>0]=10;c[e+32>>2]=9;c[e+36>>2]=1;c[e+40>>2]=2;c[e+12>>2]=2;if(!(c[11307]|0))c[e+76>>2]=-1;ab(45252);f=c[11312]|0;c[e+56>>2]=f;if(f|0)c[f+52>>2]=e;c[11312]=e;Ya(45252)}}else{c[(eo()|0)>>2]=22;e=0}i=p;return e|0}function Hp(a){a=a|0;var b=0,d=0,e=0;e=(c[a>>2]&1|0)!=0;if(!e){ab(45252);d=c[a+52>>2]|0;b=a+56|0;if(d|0)c[d+56>>2]=c[b>>2];b=c[b>>2]|0;if(b|0)c[b+52>>2]=d;if((c[11312]|0)==(a|0))c[11312]=b;Ya(45252)}b=Ip(a)|0;b=rb[c[a+12>>2]&7](a)|0|b;d=c[a+92>>2]|0;if(d|0)Yp(d);if(!e)Yp(a);return b|0}function Ip(a){a=a|0;var b=0,d=0;do if(a){if((c[a+76>>2]|0)<=-1){b=Jp(a)|0;break}d=(cp(a)|0)==0;b=Jp(a)|0;if(!d)ho(a)}else{if(!(c[2406]|0))b=0;else b=Ip(c[2406]|0)|0;ab(45252);a=c[11312]|0;if(a)do{if((c[a+76>>2]|0)>-1)d=cp(a)|0;else d=0;if((c[a+20>>2]|0)>>>0>(c[a+28>>2]|0)>>>0)b=Jp(a)|0|b;if(d|0)ho(a);a=c[a+56>>2]|0}while((a|0)!=0);Ya(45252)}while(0);return b|0}function Jp(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=a+20|0;g=a+28|0;if((c[b>>2]|0)>>>0>(c[g>>2]|0)>>>0?(pb[c[a+36>>2]&15](a,0,0)|0,(c[b>>2]|0)==0):0)b=-1;else{h=a+4|0;d=c[h>>2]|0;e=a+8|0;f=c[e>>2]|0;if(d>>>0>>0)pb[c[a+40>>2]&15](a,d-f|0,1)|0;c[a+16>>2]=0;c[g>>2]=0;c[b>>2]=0;c[e>>2]=0;c[h>>2]=0;b=0}return b|0}function Kp(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=i;i=i+16|0;if((i|0)>=(j|0))ba();f=e;c[f>>2]=d;d=So(a,b,f)|0;i=e;return d|0}function Lp(a,b,c){a=a|0;b=b|0;c=c|0;Mp(a,b,c)|0;return a|0}function Mp(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;g=d;do if(!((g^b)&3)){f=(e|0)!=0;a:do if(f&(g&3|0)!=0)while(1){g=a[d>>0]|0;a[b>>0]=g;if(!(g<<24>>24))break a;e=e+-1|0;d=d+1|0;b=b+1|0;f=(e|0)!=0;if(!(f&(d&3|0)!=0)){h=5;break}}else h=5;while(0);if((h|0)==5)if(!f){e=0;break}if(a[d>>0]|0){b:do if(e>>>0>3)do{f=c[d>>2]|0;if((f&-2139062144^-2139062144)&f+-16843009|0)break b;c[b>>2]=f;e=e+-4|0;d=d+4|0;b=b+4|0}while(e>>>0>3);while(0);h=11}}else h=11;while(0);c:do if((h|0)==11)if(!e)e=0;else while(1){h=a[d>>0]|0;a[b>>0]=h;if(!(h<<24>>24))break c;e=e+-1|0;b=b+1|0;if(!e){e=0;break}else d=d+1|0}while(0);eq(b|0,0,e|0)|0;return b|0}function Np(){var a=0,b=0,d=0;b=45064;b=pq(c[b>>2]|0,c[b+4>>2]|0,1284865837,1481765933)|0;b=iq(b|0,C|0,1,0)|0;a=C;d=45064;c[d>>2]=b;c[d+4>>2]=a;a=hq(b|0,a|0,33)|0;return a|0}function Op(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,k=0,l=0,m=0,n=0;n=i;i=i+16|0;if((i|0)>=(j|0))ba();m=n;l=e&255;a[m>>0]=l;g=b+16|0;h=c[g>>2]|0;if(!h)if(!(Vo(b)|0)){h=c[g>>2]|0;k=4}else f=-1;else k=4;do if((k|0)==4){g=b+20|0;k=c[g>>2]|0;if(k>>>0>>0?(f=e&255,(f|0)!=(a[b+75>>0]|0)):0){c[g>>2]=k+1;a[k>>0]=l;break}if((pb[c[b+36>>2]&15](b,m,1)|0)==1)f=d[m>>0]|0;else f=-1}while(0);i=n;return f|0}function Pp(a,b){a=a|0;b=b|0;return (Qp(a,np(a)|0,1,b)|0)+-1|0}function Qp(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=_(d,b)|0;if((c[e+76>>2]|0)>-1){g=(cp(e)|0)==0;a=Uo(a,f,e)|0;if(!g)ho(e)}else a=Uo(a,f,e)|0;if((a|0)!=(f|0))d=(a>>>0)/(b>>>0)|0;return d|0}function Rp(a,b){a=a|0;b=b|0;var d=0,e=0;d=i;i=i+16|0;if((i|0)>=(j|0))ba();e=d;c[e>>2]=b;b=So(c[2377]|0,a,e)|0;i=d;return b|0}function Sp(b){b=b|0;var d=0,e=0,f=0,g=0;f=c[2377]|0;if((c[f+76>>2]|0)>-1)g=cp(f)|0;else g=0;do if((Pp(b,f)|0)<0)d=1;else{if((a[f+75>>0]|0)!=10?(d=f+20|0,e=c[d>>2]|0,e>>>0<(c[f+16>>2]|0)>>>0):0){c[d>>2]=e+1;a[e>>0]=10;d=0;break}d=(Op(f,10)|0)<0}while(0);if(g|0)ho(f);return d<<31>>31|0}function Tp(a,b){a=a|0;b=b|0;return +(+Up(a,b,1))}function Up(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0,h=0,k=0;k=i;i=i+112|0;if((i|0)>=(j|0))ba();h=k;f=h;g=f+112|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));f=h+4|0;c[f>>2]=a;g=h+8|0;c[g>>2]=-1;c[h+44>>2]=a;c[h+76>>2]=-1;no(h,0);e=+gp(h,d,1);d=(c[f>>2]|0)-(c[g>>2]|0)+(c[h+108>>2]|0)|0;if(b|0)c[b>>2]=d|0?a+d|0:a;i=k;return +e}function Vp(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=(b|0)/(d|0)|0;c[a+4>>2]=(b|0)%(d|0)|0;return}function Wp(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=i;i=i+16|0;if((i|0)>=(j|0))ba();f=e;c[f>>2]=a;c[f+4>>2]=b;c[f+8>>2]=d;a=co(_a(3,f|0)|0)|0;i=e;return a|0} +function Xp(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;do if(a>>>0<245){o=a>>>0<11?16:a+11&-8;a=o>>>3;j=c[11318]|0;b=j>>>a;if(b&3|0){b=(b&1^1)+a|0;d=45312+(b<<1<<2)|0;e=d+8|0;f=c[e>>2]|0;g=f+8|0;h=c[g>>2]|0;do if((d|0)!=(h|0)){if(h>>>0<(c[11322]|0)>>>0)Ca();a=h+12|0;if((c[a>>2]|0)==(f|0)){c[a>>2]=d;c[e>>2]=h;break}else Ca()}else c[11318]=j&~(1<>2]=L|3;L=f+L+4|0;c[L>>2]=c[L>>2]|1;L=g;return L|0}h=c[11320]|0;if(o>>>0>h>>>0){if(b|0){d=2<>>12&16;d=d>>>i;f=d>>>5&8;d=d>>>f;g=d>>>2&4;d=d>>>g;e=d>>>1&2;d=d>>>e;b=d>>>1&1;b=(f|i|g|e|b)+(d>>>b)|0;d=45312+(b<<1<<2)|0;e=d+8|0;g=c[e>>2]|0;i=g+8|0;f=c[i>>2]|0;do if((d|0)!=(f|0)){if(f>>>0<(c[11322]|0)>>>0)Ca();a=f+12|0;if((c[a>>2]|0)==(g|0)){c[a>>2]=d;c[e>>2]=f;k=c[11320]|0;break}else Ca()}else{c[11318]=j&~(1<>2]=o|3;e=g+o|0;c[e+4>>2]=h|1;c[e+h>>2]=h;if(k|0){f=c[11323]|0;b=k>>>3;d=45312+(b<<1<<2)|0;a=c[11318]|0;b=1<>2]|0;if(b>>>0<(c[11322]|0)>>>0)Ca();else{l=a;m=b}}else{c[11318]=a|b;l=d+8|0;m=d}c[l>>2]=f;c[m+12>>2]=f;c[f+8>>2]=m;c[f+12>>2]=d}c[11320]=h;c[11323]=e;L=i;return L|0}a=c[11319]|0;if(a){d=(a&0-a)+-1|0;K=d>>>12&16;d=d>>>K;J=d>>>5&8;d=d>>>J;L=d>>>2&4;d=d>>>L;b=d>>>1&2;d=d>>>b;e=d>>>1&1;e=c[45576+((J|K|L|b|e)+(d>>>e)<<2)>>2]|0;d=(c[e+4>>2]&-8)-o|0;b=e;while(1){a=c[b+16>>2]|0;if(!a){a=c[b+20>>2]|0;if(!a){j=e;break}}b=(c[a+4>>2]&-8)-o|0;L=b>>>0>>0;d=L?b:d;b=a;e=L?a:e}g=c[11322]|0;if(j>>>0>>0)Ca();i=j+o|0;if(j>>>0>=i>>>0)Ca();h=c[j+24>>2]|0;e=c[j+12>>2]|0;do if((e|0)==(j|0)){b=j+20|0;a=c[b>>2]|0;if(!a){b=j+16|0;a=c[b>>2]|0;if(!a){n=0;break}}while(1){e=a+20|0;f=c[e>>2]|0;if(f|0){a=f;b=e;continue}e=a+16|0;f=c[e>>2]|0;if(!f)break;else{a=f;b=e}}if(b>>>0>>0)Ca();else{c[b>>2]=0;n=a;break}}else{f=c[j+8>>2]|0;if(f>>>0>>0)Ca();a=f+12|0;if((c[a>>2]|0)!=(j|0))Ca();b=e+8|0;if((c[b>>2]|0)==(j|0)){c[a>>2]=e;c[b>>2]=f;n=e;break}else Ca()}while(0);do if(h|0){a=c[j+28>>2]|0;b=45576+(a<<2)|0;if((j|0)==(c[b>>2]|0)){c[b>>2]=n;if(!n){c[11319]=c[11319]&~(1<>>0<(c[11322]|0)>>>0)Ca();a=h+16|0;if((c[a>>2]|0)==(j|0))c[a>>2]=n;else c[h+20>>2]=n;if(!n)break}b=c[11322]|0;if(n>>>0>>0)Ca();c[n+24>>2]=h;a=c[j+16>>2]|0;do if(a|0)if(a>>>0>>0)Ca();else{c[n+16>>2]=a;c[a+24>>2]=n;break}while(0);a=c[j+20>>2]|0;if(a|0)if(a>>>0<(c[11322]|0)>>>0)Ca();else{c[n+20>>2]=a;c[a+24>>2]=n;break}}while(0);if(d>>>0<16){L=d+o|0;c[j+4>>2]=L|3;L=j+L+4|0;c[L>>2]=c[L>>2]|1}else{c[j+4>>2]=o|3;c[i+4>>2]=d|1;c[i+d>>2]=d;a=c[11320]|0;if(a|0){f=c[11323]|0;b=a>>>3;e=45312+(b<<1<<2)|0;a=c[11318]|0;b=1<>2]|0;if(b>>>0<(c[11322]|0)>>>0)Ca();else{p=a;q=b}}else{c[11318]=a|b;p=e+8|0;q=e}c[p>>2]=f;c[q+12>>2]=f;c[f+8>>2]=q;c[f+12>>2]=e}c[11320]=d;c[11323]=i}L=j+8|0;return L|0}}}else if(a>>>0<=4294967231){a=a+11|0;o=a&-8;j=c[11319]|0;if(j){d=0-o|0;a=a>>>8;if(a)if(o>>>0>16777215)i=31;else{q=(a+1048320|0)>>>16&8;E=a<>>16&4;E=E<>>16&2;i=14-(p|q|i)+(E<>>15)|0;i=o>>>(i+7|0)&1|i<<1}else i=0;b=c[45576+(i<<2)>>2]|0;a:do if(!b){a=0;b=0;E=86}else{f=d;a=0;g=o<<((i|0)==31?0:25-(i>>>1)|0);h=b;b=0;while(1){e=c[h+4>>2]&-8;d=e-o|0;if(d>>>0>>0)if((e|0)==(o|0)){a=h;b=h;E=90;break a}else b=h;else d=f;e=c[h+20>>2]|0;h=c[h+16+(g>>>31<<2)>>2]|0;a=(e|0)==0|(e|0)==(h|0)?a:e;e=(h|0)==0;if(e){E=86;break}else{f=d;g=g<<(e&1^1)}}}while(0);if((E|0)==86){if((a|0)==0&(b|0)==0){a=2<>>12&16;q=q>>>m;l=q>>>5&8;q=q>>>l;n=q>>>2&4;q=q>>>n;p=q>>>1&2;q=q>>>p;a=q>>>1&1;a=c[45576+((l|m|n|p|a)+(q>>>a)<<2)>>2]|0}if(!a){i=d;j=b}else E=90}if((E|0)==90)while(1){E=0;q=(c[a+4>>2]&-8)-o|0;e=q>>>0>>0;d=e?q:d;b=e?a:b;e=c[a+16>>2]|0;if(e|0){a=e;E=90;continue}a=c[a+20>>2]|0;if(!a){i=d;j=b;break}else E=90}if((j|0)!=0?i>>>0<((c[11320]|0)-o|0)>>>0:0){f=c[11322]|0;if(j>>>0>>0)Ca();h=j+o|0;if(j>>>0>=h>>>0)Ca();g=c[j+24>>2]|0;d=c[j+12>>2]|0;do if((d|0)==(j|0)){b=j+20|0;a=c[b>>2]|0;if(!a){b=j+16|0;a=c[b>>2]|0;if(!a){s=0;break}}while(1){d=a+20|0;e=c[d>>2]|0;if(e|0){a=e;b=d;continue}d=a+16|0;e=c[d>>2]|0;if(!e)break;else{a=e;b=d}}if(b>>>0>>0)Ca();else{c[b>>2]=0;s=a;break}}else{e=c[j+8>>2]|0;if(e>>>0>>0)Ca();a=e+12|0;if((c[a>>2]|0)!=(j|0))Ca();b=d+8|0;if((c[b>>2]|0)==(j|0)){c[a>>2]=d;c[b>>2]=e;s=d;break}else Ca()}while(0);do if(g|0){a=c[j+28>>2]|0;b=45576+(a<<2)|0;if((j|0)==(c[b>>2]|0)){c[b>>2]=s;if(!s){c[11319]=c[11319]&~(1<>>0<(c[11322]|0)>>>0)Ca();a=g+16|0;if((c[a>>2]|0)==(j|0))c[a>>2]=s;else c[g+20>>2]=s;if(!s)break}b=c[11322]|0;if(s>>>0>>0)Ca();c[s+24>>2]=g;a=c[j+16>>2]|0;do if(a|0)if(a>>>0>>0)Ca();else{c[s+16>>2]=a;c[a+24>>2]=s;break}while(0);a=c[j+20>>2]|0;if(a|0)if(a>>>0<(c[11322]|0)>>>0)Ca();else{c[s+20>>2]=a;c[a+24>>2]=s;break}}while(0);do if(i>>>0>=16){c[j+4>>2]=o|3;c[h+4>>2]=i|1;c[h+i>>2]=i;a=i>>>3;if(i>>>0<256){d=45312+(a<<1<<2)|0;b=c[11318]|0;a=1<>2]|0;if(b>>>0<(c[11322]|0)>>>0)Ca();else{u=a;v=b}}else{c[11318]=b|a;u=d+8|0;v=d}c[u>>2]=h;c[v+12>>2]=h;c[h+8>>2]=v;c[h+12>>2]=d;break}a=i>>>8;if(a)if(i>>>0>16777215)d=31;else{K=(a+1048320|0)>>>16&8;L=a<>>16&4;L=L<>>16&2;d=14-(J|K|d)+(L<>>15)|0;d=i>>>(d+7|0)&1|d<<1}else d=0;e=45576+(d<<2)|0;c[h+28>>2]=d;a=h+16|0;c[a+4>>2]=0;c[a>>2]=0;a=c[11319]|0;b=1<>2]=h;c[h+24>>2]=e;c[h+12>>2]=h;c[h+8>>2]=h;break}f=i<<((d|0)==31?0:25-(d>>>1)|0);a=c[e>>2]|0;while(1){if((c[a+4>>2]&-8|0)==(i|0)){d=a;E=148;break}b=a+16+(f>>>31<<2)|0;d=c[b>>2]|0;if(!d){E=145;break}else{f=f<<1;a=d}}if((E|0)==145)if(b>>>0<(c[11322]|0)>>>0)Ca();else{c[b>>2]=h;c[h+24>>2]=a;c[h+12>>2]=h;c[h+8>>2]=h;break}else if((E|0)==148){a=d+8|0;b=c[a>>2]|0;L=c[11322]|0;if(b>>>0>=L>>>0&d>>>0>=L>>>0){c[b+12>>2]=h;c[a>>2]=h;c[h+8>>2]=b;c[h+12>>2]=d;c[h+24>>2]=0;break}else Ca()}}else{L=i+o|0;c[j+4>>2]=L|3;L=j+L+4|0;c[L>>2]=c[L>>2]|1}while(0);L=j+8|0;return L|0}}}else o=-1;while(0);d=c[11320]|0;if(d>>>0>=o>>>0){a=d-o|0;b=c[11323]|0;if(a>>>0>15){L=b+o|0;c[11323]=L;c[11320]=a;c[L+4>>2]=a|1;c[L+a>>2]=a;c[b+4>>2]=o|3}else{c[11320]=0;c[11323]=0;c[b+4>>2]=d|3;L=b+d+4|0;c[L>>2]=c[L>>2]|1}L=b+8|0;return L|0}a=c[11321]|0;if(a>>>0>o>>>0){J=a-o|0;c[11321]=J;L=c[11324]|0;K=L+o|0;c[11324]=K;c[K+4>>2]=J|1;c[L+4>>2]=o|3;L=L+8|0;return L|0}do if(!(c[11436]|0)){a=$a(30)|0;if(!(a+-1&a)){c[11438]=a;c[11437]=a;c[11439]=-1;c[11440]=-1;c[11441]=0;c[11429]=0;c[11436]=(fb(0)|0)&-16^1431655768;break}else Ca()}while(0);h=o+48|0;g=c[11438]|0;i=o+47|0;f=g+i|0;g=0-g|0;j=f&g;if(j>>>0<=o>>>0){L=0;return L|0}a=c[11428]|0;if(a|0?(u=c[11426]|0,v=u+j|0,v>>>0<=u>>>0|v>>>0>a>>>0):0){L=0;return L|0}b:do if(!(c[11429]&4)){a=c[11324]|0;c:do if(a){d=45720;while(1){b=c[d>>2]|0;if(b>>>0<=a>>>0?(r=d+4|0,(b+(c[r>>2]|0)|0)>>>0>a>>>0):0){e=d;d=r;break}d=c[d+8>>2]|0;if(!d){E=173;break c}}a=f-(c[11321]|0)&g;if(a>>>0<2147483647){b=La(a|0)|0;if((b|0)==((c[e>>2]|0)+(c[d>>2]|0)|0)){if((b|0)!=(-1|0)){h=b;f=a;E=193;break b}}else E=183}}else E=173;while(0);do if((E|0)==173?(t=La(0)|0,(t|0)!=(-1|0)):0){a=t;b=c[11437]|0;d=b+-1|0;if(!(d&a))a=j;else a=j-a+(d+a&0-b)|0;b=c[11426]|0;d=b+a|0;if(a>>>0>o>>>0&a>>>0<2147483647){v=c[11428]|0;if(v|0?d>>>0<=b>>>0|d>>>0>v>>>0:0)break;b=La(a|0)|0;if((b|0)==(t|0)){h=t;f=a;E=193;break b}else E=183}}while(0);d:do if((E|0)==183){d=0-a|0;do if(h>>>0>a>>>0&(a>>>0<2147483647&(b|0)!=(-1|0))?(w=c[11438]|0,w=i-a+w&0-w,w>>>0<2147483647):0)if((La(w|0)|0)==(-1|0)){La(d|0)|0;break d}else{a=w+a|0;break}while(0);if((b|0)!=(-1|0)){h=b;f=a;E=193;break b}}while(0);c[11429]=c[11429]|4;E=190}else E=190;while(0);if((((E|0)==190?j>>>0<2147483647:0)?(x=La(j|0)|0,y=La(0)|0,x>>>0>>0&((x|0)!=(-1|0)&(y|0)!=(-1|0))):0)?(z=y-x|0,z>>>0>(o+40|0)>>>0):0){h=x;f=z;E=193}if((E|0)==193){a=(c[11426]|0)+f|0;c[11426]=a;if(a>>>0>(c[11427]|0)>>>0)c[11427]=a;i=c[11324]|0;do if(i){e=45720;do{a=c[e>>2]|0;b=e+4|0;d=c[b>>2]|0;if((h|0)==(a+d|0)){A=a;B=b;C=d;D=e;E=203;break}e=c[e+8>>2]|0}while((e|0)!=0);if(((E|0)==203?(c[D+12>>2]&8|0)==0:0)?i>>>0>>0&i>>>0>=A>>>0:0){c[B>>2]=C+f;L=i+8|0;L=(L&7|0)==0?0:0-L&7;K=i+L|0;L=f-L+(c[11321]|0)|0;c[11324]=K;c[11321]=L;c[K+4>>2]=L|1;c[K+L+4>>2]=40;c[11325]=c[11440];break}a=c[11322]|0;if(h>>>0>>0){c[11322]=h;j=h}else j=a;d=h+f|0;a=45720;while(1){if((c[a>>2]|0)==(d|0)){b=a;E=211;break}a=c[a+8>>2]|0;if(!a){b=45720;break}}if((E|0)==211)if(!(c[a+12>>2]&8)){c[b>>2]=h;l=a+4|0;c[l>>2]=(c[l>>2]|0)+f;l=h+8|0;l=h+((l&7|0)==0?0:0-l&7)|0;a=d+8|0;a=d+((a&7|0)==0?0:0-a&7)|0;k=l+o|0;g=a-l-o|0;c[l+4>>2]=o|3;do if((a|0)!=(i|0)){if((a|0)==(c[11323]|0)){L=(c[11320]|0)+g|0;c[11320]=L;c[11323]=k;c[k+4>>2]=L|1;c[k+L>>2]=L;break}b=c[a+4>>2]|0;if((b&3|0)==1){i=b&-8;f=b>>>3;e:do if(b>>>0>=256){h=c[a+24>>2]|0;e=c[a+12>>2]|0;do if((e|0)==(a|0)){d=a+16|0;e=d+4|0;b=c[e>>2]|0;if(!b){b=c[d>>2]|0;if(!b){J=0;break}}else d=e;while(1){e=b+20|0;f=c[e>>2]|0;if(f|0){b=f;d=e;continue}e=b+16|0;f=c[e>>2]|0;if(!f)break;else{b=f;d=e}}if(d>>>0>>0)Ca();else{c[d>>2]=0;J=b;break}}else{f=c[a+8>>2]|0;if(f>>>0>>0)Ca();b=f+12|0;if((c[b>>2]|0)!=(a|0))Ca();d=e+8|0;if((c[d>>2]|0)==(a|0)){c[b>>2]=e;c[d>>2]=f;J=e;break}else Ca()}while(0);if(!h)break;b=c[a+28>>2]|0;d=45576+(b<<2)|0;do if((a|0)!=(c[d>>2]|0)){if(h>>>0<(c[11322]|0)>>>0)Ca();b=h+16|0;if((c[b>>2]|0)==(a|0))c[b>>2]=J;else c[h+20>>2]=J;if(!J)break e}else{c[d>>2]=J;if(J|0)break;c[11319]=c[11319]&~(1<>>0>>0)Ca();c[J+24>>2]=h;b=a+16|0;d=c[b>>2]|0;do if(d|0)if(d>>>0>>0)Ca();else{c[J+16>>2]=d;c[d+24>>2]=J;break}while(0);b=c[b+4>>2]|0;if(!b)break;if(b>>>0<(c[11322]|0)>>>0)Ca();else{c[J+20>>2]=b;c[b+24>>2]=J;break}}else{d=c[a+8>>2]|0;e=c[a+12>>2]|0;b=45312+(f<<1<<2)|0;do if((d|0)!=(b|0)){if(d>>>0>>0)Ca();if((c[d+12>>2]|0)==(a|0))break;Ca()}while(0);if((e|0)==(d|0)){c[11318]=c[11318]&~(1<>>0>>0)Ca();b=e+8|0;if((c[b>>2]|0)==(a|0)){G=b;break}Ca()}while(0);c[d+12>>2]=e;c[G>>2]=d}while(0);a=a+i|0;g=i+g|0}a=a+4|0;c[a>>2]=c[a>>2]&-2;c[k+4>>2]=g|1;c[k+g>>2]=g;a=g>>>3;if(g>>>0<256){d=45312+(a<<1<<2)|0;b=c[11318]|0;a=1<>2]|0;if(b>>>0>=(c[11322]|0)>>>0){K=a;L=b;break}Ca()}while(0);c[K>>2]=k;c[L+12>>2]=k;c[k+8>>2]=L;c[k+12>>2]=d;break}a=g>>>8;do if(!a)d=0;else{if(g>>>0>16777215){d=31;break}K=(a+1048320|0)>>>16&8;L=a<>>16&4;L=L<>>16&2;d=14-(J|K|d)+(L<>>15)|0;d=g>>>(d+7|0)&1|d<<1}while(0);e=45576+(d<<2)|0;c[k+28>>2]=d;a=k+16|0;c[a+4>>2]=0;c[a>>2]=0;a=c[11319]|0;b=1<>2]=k;c[k+24>>2]=e;c[k+12>>2]=k;c[k+8>>2]=k;break}f=g<<((d|0)==31?0:25-(d>>>1)|0);a=c[e>>2]|0;while(1){if((c[a+4>>2]&-8|0)==(g|0)){d=a;E=281;break}b=a+16+(f>>>31<<2)|0;d=c[b>>2]|0;if(!d){E=278;break}else{f=f<<1;a=d}}if((E|0)==278)if(b>>>0<(c[11322]|0)>>>0)Ca();else{c[b>>2]=k;c[k+24>>2]=a;c[k+12>>2]=k;c[k+8>>2]=k;break}else if((E|0)==281){a=d+8|0;b=c[a>>2]|0;L=c[11322]|0;if(b>>>0>=L>>>0&d>>>0>=L>>>0){c[b+12>>2]=k;c[a>>2]=k;c[k+8>>2]=b;c[k+12>>2]=d;c[k+24>>2]=0;break}else Ca()}}else{L=(c[11321]|0)+g|0;c[11321]=L;c[11324]=k;c[k+4>>2]=L|1}while(0);L=l+8|0;return L|0}else b=45720;while(1){a=c[b>>2]|0;if(a>>>0<=i>>>0?(F=a+(c[b+4>>2]|0)|0,F>>>0>i>>>0):0){b=F;break}b=c[b+8>>2]|0}g=b+-47|0;d=g+8|0;d=g+((d&7|0)==0?0:0-d&7)|0;g=i+16|0;d=d>>>0>>0?i:d;a=d+8|0;e=h+8|0;e=(e&7|0)==0?0:0-e&7;L=h+e|0;e=f+-40-e|0;c[11324]=L;c[11321]=e;c[L+4>>2]=e|1;c[L+e+4>>2]=40;c[11325]=c[11440];e=d+4|0;c[e>>2]=27;c[a>>2]=c[11430];c[a+4>>2]=c[11431];c[a+8>>2]=c[11432];c[a+12>>2]=c[11433];c[11430]=h;c[11431]=f;c[11433]=0;c[11432]=a;a=d+24|0;do{a=a+4|0;c[a>>2]=7}while((a+4|0)>>>0>>0);if((d|0)!=(i|0)){h=d-i|0;c[e>>2]=c[e>>2]&-2;c[i+4>>2]=h|1;c[d>>2]=h;a=h>>>3;if(h>>>0<256){d=45312+(a<<1<<2)|0;b=c[11318]|0;a=1<>2]|0;if(b>>>0<(c[11322]|0)>>>0)Ca();else{H=a;I=b}}else{c[11318]=b|a;H=d+8|0;I=d}c[H>>2]=i;c[I+12>>2]=i;c[i+8>>2]=I;c[i+12>>2]=d;break}a=h>>>8;if(a)if(h>>>0>16777215)d=31;else{K=(a+1048320|0)>>>16&8;L=a<>>16&4;L=L<>>16&2;d=14-(J|K|d)+(L<>>15)|0;d=h>>>(d+7|0)&1|d<<1}else d=0;f=45576+(d<<2)|0;c[i+28>>2]=d;c[i+20>>2]=0;c[g>>2]=0;a=c[11319]|0;b=1<>2]=i;c[i+24>>2]=f;c[i+12>>2]=i;c[i+8>>2]=i;break}e=h<<((d|0)==31?0:25-(d>>>1)|0);a=c[f>>2]|0;while(1){if((c[a+4>>2]&-8|0)==(h|0)){d=a;E=307;break}b=a+16+(e>>>31<<2)|0;d=c[b>>2]|0;if(!d){E=304;break}else{e=e<<1;a=d}}if((E|0)==304)if(b>>>0<(c[11322]|0)>>>0)Ca();else{c[b>>2]=i;c[i+24>>2]=a;c[i+12>>2]=i;c[i+8>>2]=i;break}else if((E|0)==307){a=d+8|0;b=c[a>>2]|0;L=c[11322]|0;if(b>>>0>=L>>>0&d>>>0>=L>>>0){c[b+12>>2]=i;c[a>>2]=i;c[i+8>>2]=b;c[i+12>>2]=d;c[i+24>>2]=0;break}else Ca()}}}else{L=c[11322]|0;if((L|0)==0|h>>>0>>0)c[11322]=h;c[11430]=h;c[11431]=f;c[11433]=0;c[11327]=c[11436];c[11326]=-1;a=0;do{L=45312+(a<<1<<2)|0;c[L+12>>2]=L;c[L+8>>2]=L;a=a+1|0}while((a|0)!=32);L=h+8|0;L=(L&7|0)==0?0:0-L&7;K=h+L|0;L=f+-40-L|0;c[11324]=K;c[11321]=L;c[K+4>>2]=L|1;c[K+L+4>>2]=40;c[11325]=c[11440]}while(0);a=c[11321]|0;if(a>>>0>o>>>0){J=a-o|0;c[11321]=J;L=c[11324]|0;K=L+o|0;c[11324]=K;c[K+4>>2]=J|1;c[L+4>>2]=o|3;L=L+8|0;return L|0}}c[(eo()|0)>>2]=12;L=0;return L|0}function Yp(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;if(!a)return;d=a+-8|0;h=c[11322]|0;if(d>>>0>>0)Ca();a=c[a+-4>>2]|0;b=a&3;if((b|0)==1)Ca();e=a&-8;m=d+e|0;do if(!(a&1)){a=c[d>>2]|0;if(!b)return;k=d+(0-a)|0;j=a+e|0;if(k>>>0>>0)Ca();if((k|0)==(c[11323]|0)){a=m+4|0;b=c[a>>2]|0;if((b&3|0)!=3){q=k;g=j;break}c[11320]=j;c[a>>2]=b&-2;c[k+4>>2]=j|1;c[k+j>>2]=j;return}e=a>>>3;if(a>>>0<256){b=c[k+8>>2]|0;d=c[k+12>>2]|0;a=45312+(e<<1<<2)|0;if((b|0)!=(a|0)){if(b>>>0>>0)Ca();if((c[b+12>>2]|0)!=(k|0))Ca()}if((d|0)==(b|0)){c[11318]=c[11318]&~(1<>>0>>0)Ca();a=d+8|0;if((c[a>>2]|0)==(k|0))f=a;else Ca()}else f=d+8|0;c[b+12>>2]=d;c[f>>2]=b;q=k;g=j;break}f=c[k+24>>2]|0;d=c[k+12>>2]|0;do if((d|0)==(k|0)){b=k+16|0;d=b+4|0;a=c[d>>2]|0;if(!a){a=c[b>>2]|0;if(!a){i=0;break}}else b=d;while(1){d=a+20|0;e=c[d>>2]|0;if(e|0){a=e;b=d;continue}d=a+16|0;e=c[d>>2]|0;if(!e)break;else{a=e;b=d}}if(b>>>0>>0)Ca();else{c[b>>2]=0;i=a;break}}else{e=c[k+8>>2]|0;if(e>>>0>>0)Ca();a=e+12|0;if((c[a>>2]|0)!=(k|0))Ca();b=d+8|0;if((c[b>>2]|0)==(k|0)){c[a>>2]=d;c[b>>2]=e;i=d;break}else Ca()}while(0);if(f){a=c[k+28>>2]|0;b=45576+(a<<2)|0;if((k|0)==(c[b>>2]|0)){c[b>>2]=i;if(!i){c[11319]=c[11319]&~(1<>>0<(c[11322]|0)>>>0)Ca();a=f+16|0;if((c[a>>2]|0)==(k|0))c[a>>2]=i;else c[f+20>>2]=i;if(!i){q=k;g=j;break}}d=c[11322]|0;if(i>>>0>>0)Ca();c[i+24>>2]=f;a=k+16|0;b=c[a>>2]|0;do if(b|0)if(b>>>0>>0)Ca();else{c[i+16>>2]=b;c[b+24>>2]=i;break}while(0);a=c[a+4>>2]|0;if(a)if(a>>>0<(c[11322]|0)>>>0)Ca();else{c[i+20>>2]=a;c[a+24>>2]=i;q=k;g=j;break}else{q=k;g=j}}else{q=k;g=j}}else{q=d;g=e}while(0);if(q>>>0>=m>>>0)Ca();a=m+4|0;b=c[a>>2]|0;if(!(b&1))Ca();if(!(b&2)){if((m|0)==(c[11324]|0)){p=(c[11321]|0)+g|0;c[11321]=p;c[11324]=q;c[q+4>>2]=p|1;if((q|0)!=(c[11323]|0))return;c[11323]=0;c[11320]=0;return}if((m|0)==(c[11323]|0)){p=(c[11320]|0)+g|0;c[11320]=p;c[11323]=q;c[q+4>>2]=p|1;c[q+p>>2]=p;return}g=(b&-8)+g|0;e=b>>>3;do if(b>>>0>=256){f=c[m+24>>2]|0;a=c[m+12>>2]|0;do if((a|0)==(m|0)){b=m+16|0;d=b+4|0;a=c[d>>2]|0;if(!a){a=c[b>>2]|0;if(!a){n=0;break}}else b=d;while(1){d=a+20|0;e=c[d>>2]|0;if(e|0){a=e;b=d;continue}d=a+16|0;e=c[d>>2]|0;if(!e)break;else{a=e;b=d}}if(b>>>0<(c[11322]|0)>>>0)Ca();else{c[b>>2]=0;n=a;break}}else{b=c[m+8>>2]|0;if(b>>>0<(c[11322]|0)>>>0)Ca();d=b+12|0;if((c[d>>2]|0)!=(m|0))Ca();e=a+8|0;if((c[e>>2]|0)==(m|0)){c[d>>2]=a;c[e>>2]=b;n=a;break}else Ca()}while(0);if(f|0){a=c[m+28>>2]|0;b=45576+(a<<2)|0;if((m|0)==(c[b>>2]|0)){c[b>>2]=n;if(!n){c[11319]=c[11319]&~(1<>>0<(c[11322]|0)>>>0)Ca();a=f+16|0;if((c[a>>2]|0)==(m|0))c[a>>2]=n;else c[f+20>>2]=n;if(!n)break}d=c[11322]|0;if(n>>>0>>0)Ca();c[n+24>>2]=f;a=m+16|0;b=c[a>>2]|0;do if(b|0)if(b>>>0>>0)Ca();else{c[n+16>>2]=b;c[b+24>>2]=n;break}while(0);a=c[a+4>>2]|0;if(a|0)if(a>>>0<(c[11322]|0)>>>0)Ca();else{c[n+20>>2]=a;c[a+24>>2]=n;break}}}else{b=c[m+8>>2]|0;d=c[m+12>>2]|0;a=45312+(e<<1<<2)|0;if((b|0)!=(a|0)){if(b>>>0<(c[11322]|0)>>>0)Ca();if((c[b+12>>2]|0)!=(m|0))Ca()}if((d|0)==(b|0)){c[11318]=c[11318]&~(1<>>0<(c[11322]|0)>>>0)Ca();a=d+8|0;if((c[a>>2]|0)==(m|0))l=a;else Ca()}else l=d+8|0;c[b+12>>2]=d;c[l>>2]=b}while(0);c[q+4>>2]=g|1;c[q+g>>2]=g;if((q|0)==(c[11323]|0)){c[11320]=g;return}}else{c[a>>2]=b&-2;c[q+4>>2]=g|1;c[q+g>>2]=g}a=g>>>3;if(g>>>0<256){d=45312+(a<<1<<2)|0;b=c[11318]|0;a=1<>2]|0;if(b>>>0<(c[11322]|0)>>>0)Ca();else{o=a;p=b}}else{c[11318]=b|a;o=d+8|0;p=d}c[o>>2]=q;c[p+12>>2]=q;c[q+8>>2]=p;c[q+12>>2]=d;return}a=g>>>8;if(a)if(g>>>0>16777215)d=31;else{o=(a+1048320|0)>>>16&8;p=a<>>16&4;p=p<>>16&2;d=14-(n|o|d)+(p<>>15)|0;d=g>>>(d+7|0)&1|d<<1}else d=0;e=45576+(d<<2)|0;c[q+28>>2]=d;c[q+20>>2]=0;c[q+16>>2]=0;a=c[11319]|0;b=1<>>1)|0);a=c[e>>2]|0;while(1){if((c[a+4>>2]&-8|0)==(g|0)){d=a;e=130;break}b=a+16+(f>>>31<<2)|0;d=c[b>>2]|0;if(!d){e=127;break}else{f=f<<1;a=d}}if((e|0)==127)if(b>>>0<(c[11322]|0)>>>0)Ca();else{c[b>>2]=q;c[q+24>>2]=a;c[q+12>>2]=q;c[q+8>>2]=q;break}else if((e|0)==130){a=d+8|0;b=c[a>>2]|0;p=c[11322]|0;if(b>>>0>=p>>>0&d>>>0>=p>>>0){c[b+12>>2]=q;c[a>>2]=q;c[q+8>>2]=b;c[q+12>>2]=d;c[q+24>>2]=0;break}else Ca()}}else{c[11319]=a|b;c[e>>2]=q;c[q+24>>2]=e;c[q+12>>2]=q;c[q+8>>2]=q}while(0);q=(c[11326]|0)+-1|0;c[11326]=q;if(!q)a=45728;else return;while(1){a=c[a>>2]|0;if(!a)break;else a=a+8|0}c[11326]=-1;return}function Zp(a,b){a=a|0;b=b|0;var d=0;if(a){d=_(b,a)|0;if((b|a)>>>0>65535)d=((d>>>0)/(a>>>0)|0|0)==(b|0)?d:-1}else d=0;b=Xp(d)|0;if(!b)return b|0;if(!(c[b+-4>>2]&3))return b|0;eq(b|0,0,d|0)|0;return b|0}function _p(a,b){a=a|0;b=b|0;var d=0,e=0;if(!a){a=Xp(b)|0;return a|0}if(b>>>0>4294967231){c[(eo()|0)>>2]=12;a=0;return a|0}d=$p(a+-8|0,b>>>0<11?16:b+11&-8)|0;if(d|0){a=d+8|0;return a|0}d=Xp(b)|0;if(!d){a=0;return a|0}e=c[a+-4>>2]|0;e=(e&-8)-((e&3|0)==0?8:4)|0;fq(d|0,a|0,(e>>>0>>0?e:b)|0)|0;Yp(a);a=d;return a|0}function $p(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;n=a+4|0;o=c[n>>2]|0;d=o&-8;k=a+d|0;i=c[11322]|0;e=o&3;if(!((e|0)!=1&a>>>0>=i>>>0&a>>>0>>0))Ca();f=c[k+4>>2]|0;if(!(f&1))Ca();if(!e){if(b>>>0<256){a=0;return a|0}if(d>>>0>=(b+4|0)>>>0?(d-b|0)>>>0<=c[11438]<<1>>>0:0)return a|0;a=0;return a|0}if(d>>>0>=b>>>0){d=d-b|0;if(d>>>0<=15)return a|0;m=a+b|0;c[n>>2]=o&1|b|2;c[m+4>>2]=d|3;b=m+d+4|0;c[b>>2]=c[b>>2]|1;aq(m,d);return a|0}if((k|0)==(c[11324]|0)){d=(c[11321]|0)+d|0;if(d>>>0<=b>>>0){a=0;return a|0}m=d-b|0;l=a+b|0;c[n>>2]=o&1|b|2;c[l+4>>2]=m|1;c[11324]=l;c[11321]=m;return a|0}if((k|0)==(c[11323]|0)){e=(c[11320]|0)+d|0;if(e>>>0>>0){a=0;return a|0}d=e-b|0;if(d>>>0>15){e=a+b|0;m=e+d|0;c[n>>2]=o&1|b|2;c[e+4>>2]=d|1;c[m>>2]=d;b=m+4|0;c[b>>2]=c[b>>2]&-2}else{c[n>>2]=o&1|e|2;e=a+e+4|0;c[e>>2]=c[e>>2]|1;e=0;d=0}c[11320]=d;c[11323]=e;return a|0}if(f&2|0){a=0;return a|0}l=(f&-8)+d|0;if(l>>>0>>0){a=0;return a|0}m=l-b|0;g=f>>>3;do if(f>>>0>=256){h=c[k+24>>2]|0;f=c[k+12>>2]|0;do if((f|0)==(k|0)){e=k+16|0;f=e+4|0;d=c[f>>2]|0;if(!d){d=c[e>>2]|0;if(!d){j=0;break}}else e=f;while(1){f=d+20|0;g=c[f>>2]|0;if(g|0){d=g;e=f;continue}f=d+16|0;g=c[f>>2]|0;if(!g)break;else{d=g;e=f}}if(e>>>0>>0)Ca();else{c[e>>2]=0;j=d;break}}else{g=c[k+8>>2]|0;if(g>>>0>>0)Ca();d=g+12|0;if((c[d>>2]|0)!=(k|0))Ca();e=f+8|0;if((c[e>>2]|0)==(k|0)){c[d>>2]=f;c[e>>2]=g;j=f;break}else Ca()}while(0);if(h|0){d=c[k+28>>2]|0;e=45576+(d<<2)|0;if((k|0)==(c[e>>2]|0)){c[e>>2]=j;if(!j){c[11319]=c[11319]&~(1<>>0<(c[11322]|0)>>>0)Ca();d=h+16|0;if((c[d>>2]|0)==(k|0))c[d>>2]=j;else c[h+20>>2]=j;if(!j)break}f=c[11322]|0;if(j>>>0>>0)Ca();c[j+24>>2]=h;d=k+16|0;e=c[d>>2]|0;do if(e|0)if(e>>>0>>0)Ca();else{c[j+16>>2]=e;c[e+24>>2]=j;break}while(0);d=c[d+4>>2]|0;if(d|0)if(d>>>0<(c[11322]|0)>>>0)Ca();else{c[j+20>>2]=d;c[d+24>>2]=j;break}}}else{e=c[k+8>>2]|0;f=c[k+12>>2]|0;d=45312+(g<<1<<2)|0;if((e|0)!=(d|0)){if(e>>>0>>0)Ca();if((c[e+12>>2]|0)!=(k|0))Ca()}if((f|0)==(e|0)){c[11318]=c[11318]&~(1<>>0>>0)Ca();d=f+8|0;if((c[d>>2]|0)==(k|0))h=d;else Ca()}else h=f+8|0;c[e+12>>2]=f;c[h>>2]=e}while(0);if(m>>>0<16){c[n>>2]=l|o&1|2;b=a+l+4|0;c[b>>2]=c[b>>2]|1;return a|0}else{l=a+b|0;c[n>>2]=o&1|b|2;c[l+4>>2]=m|3;b=l+m+4|0;c[b>>2]=c[b>>2]|1;aq(l,m);return a|0}return 0}function aq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;o=a+b|0;d=c[a+4>>2]|0;do if(!(d&1)){f=c[a>>2]|0;if(!(d&3))return;l=a+(0-f)|0;k=f+b|0;i=c[11322]|0;if(l>>>0>>0)Ca();if((l|0)==(c[11323]|0)){a=o+4|0;d=c[a>>2]|0;if((d&3|0)!=3){r=l;g=k;break}c[11320]=k;c[a>>2]=d&-2;c[l+4>>2]=k|1;c[l+k>>2]=k;return}e=f>>>3;if(f>>>0<256){a=c[l+8>>2]|0;b=c[l+12>>2]|0;d=45312+(e<<1<<2)|0;if((a|0)!=(d|0)){if(a>>>0>>0)Ca();if((c[a+12>>2]|0)!=(l|0))Ca()}if((b|0)==(a|0)){c[11318]=c[11318]&~(1<>>0>>0)Ca();d=b+8|0;if((c[d>>2]|0)==(l|0))h=d;else Ca()}else h=b+8|0;c[a+12>>2]=b;c[h>>2]=a;r=l;g=k;break}f=c[l+24>>2]|0;b=c[l+12>>2]|0;do if((b|0)==(l|0)){a=l+16|0;b=a+4|0;d=c[b>>2]|0;if(!d){d=c[a>>2]|0;if(!d){j=0;break}}else a=b;while(1){b=d+20|0;e=c[b>>2]|0;if(e|0){d=e;a=b;continue}b=d+16|0;e=c[b>>2]|0;if(!e)break;else{d=e;a=b}}if(a>>>0>>0)Ca();else{c[a>>2]=0;j=d;break}}else{e=c[l+8>>2]|0;if(e>>>0>>0)Ca();d=e+12|0;if((c[d>>2]|0)!=(l|0))Ca();a=b+8|0;if((c[a>>2]|0)==(l|0)){c[d>>2]=b;c[a>>2]=e;j=b;break}else Ca()}while(0);if(f){d=c[l+28>>2]|0;a=45576+(d<<2)|0;if((l|0)==(c[a>>2]|0)){c[a>>2]=j;if(!j){c[11319]=c[11319]&~(1<>>0<(c[11322]|0)>>>0)Ca();d=f+16|0;if((c[d>>2]|0)==(l|0))c[d>>2]=j;else c[f+20>>2]=j;if(!j){r=l;g=k;break}}b=c[11322]|0;if(j>>>0>>0)Ca();c[j+24>>2]=f;d=l+16|0;a=c[d>>2]|0;do if(a|0)if(a>>>0>>0)Ca();else{c[j+16>>2]=a;c[a+24>>2]=j;break}while(0);d=c[d+4>>2]|0;if(d)if(d>>>0<(c[11322]|0)>>>0)Ca();else{c[j+20>>2]=d;c[d+24>>2]=j;r=l;g=k;break}else{r=l;g=k}}else{r=l;g=k}}else{r=a;g=b}while(0);h=c[11322]|0;if(o>>>0>>0)Ca();d=o+4|0;a=c[d>>2]|0;if(!(a&2)){if((o|0)==(c[11324]|0)){q=(c[11321]|0)+g|0;c[11321]=q;c[11324]=r;c[r+4>>2]=q|1;if((r|0)!=(c[11323]|0))return;c[11323]=0;c[11320]=0;return}if((o|0)==(c[11323]|0)){q=(c[11320]|0)+g|0;c[11320]=q;c[11323]=r;c[r+4>>2]=q|1;c[r+q>>2]=q;return}g=(a&-8)+g|0;e=a>>>3;do if(a>>>0>=256){f=c[o+24>>2]|0;b=c[o+12>>2]|0;do if((b|0)==(o|0)){a=o+16|0;b=a+4|0;d=c[b>>2]|0;if(!d){d=c[a>>2]|0;if(!d){n=0;break}}else a=b;while(1){b=d+20|0;e=c[b>>2]|0;if(e|0){d=e;a=b;continue}b=d+16|0;e=c[b>>2]|0;if(!e)break;else{d=e;a=b}}if(a>>>0>>0)Ca();else{c[a>>2]=0;n=d;break}}else{e=c[o+8>>2]|0;if(e>>>0>>0)Ca();d=e+12|0;if((c[d>>2]|0)!=(o|0))Ca();a=b+8|0;if((c[a>>2]|0)==(o|0)){c[d>>2]=b;c[a>>2]=e;n=b;break}else Ca()}while(0);if(f|0){d=c[o+28>>2]|0;a=45576+(d<<2)|0;if((o|0)==(c[a>>2]|0)){c[a>>2]=n;if(!n){c[11319]=c[11319]&~(1<>>0<(c[11322]|0)>>>0)Ca();d=f+16|0;if((c[d>>2]|0)==(o|0))c[d>>2]=n;else c[f+20>>2]=n;if(!n)break}b=c[11322]|0;if(n>>>0>>0)Ca();c[n+24>>2]=f;d=o+16|0;a=c[d>>2]|0;do if(a|0)if(a>>>0>>0)Ca();else{c[n+16>>2]=a;c[a+24>>2]=n;break}while(0);d=c[d+4>>2]|0;if(d|0)if(d>>>0<(c[11322]|0)>>>0)Ca();else{c[n+20>>2]=d;c[d+24>>2]=n;break}}}else{a=c[o+8>>2]|0;b=c[o+12>>2]|0;d=45312+(e<<1<<2)|0;if((a|0)!=(d|0)){if(a>>>0>>0)Ca();if((c[a+12>>2]|0)!=(o|0))Ca()}if((b|0)==(a|0)){c[11318]=c[11318]&~(1<>>0>>0)Ca();d=b+8|0;if((c[d>>2]|0)==(o|0))m=d;else Ca()}else m=b+8|0;c[a+12>>2]=b;c[m>>2]=a}while(0);c[r+4>>2]=g|1;c[r+g>>2]=g;if((r|0)==(c[11323]|0)){c[11320]=g;return}}else{c[d>>2]=a&-2;c[r+4>>2]=g|1;c[r+g>>2]=g}d=g>>>3;if(g>>>0<256){b=45312+(d<<1<<2)|0;a=c[11318]|0;d=1<>2]|0;if(a>>>0<(c[11322]|0)>>>0)Ca();else{p=d;q=a}}else{c[11318]=a|d;p=b+8|0;q=b}c[p>>2]=r;c[q+12>>2]=r;c[r+8>>2]=q;c[r+12>>2]=b;return}d=g>>>8;if(d)if(g>>>0>16777215)b=31;else{p=(d+1048320|0)>>>16&8;q=d<>>16&4;q=q<>>16&2;b=14-(o|p|b)+(q<>>15)|0;b=g>>>(b+7|0)&1|b<<1}else b=0;e=45576+(b<<2)|0;c[r+28>>2]=b;c[r+20>>2]=0;c[r+16>>2]=0;d=c[11319]|0;a=1<>2]=r;c[r+24>>2]=e;c[r+12>>2]=r;c[r+8>>2]=r;return}f=g<<((b|0)==31?0:25-(b>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(g|0)){b=d;e=127;break}a=d+16+(f>>>31<<2)|0;b=c[a>>2]|0;if(!b){e=124;break}else{f=f<<1;d=b}}if((e|0)==124){if(a>>>0<(c[11322]|0)>>>0)Ca();c[a>>2]=r;c[r+24>>2]=d;c[r+12>>2]=r;c[r+8>>2]=r;return}else if((e|0)==127){d=b+8|0;a=c[d>>2]|0;q=c[11322]|0;if(!(a>>>0>=q>>>0&b>>>0>=q>>>0))Ca();c[a+12>>2]=r;c[d>>2]=r;c[r+8>>2]=a;c[r+12>>2]=b;c[r+24>>2]=0;return}}function bq(){}function cq(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;d=b-d-(c>>>0>a>>>0|0)>>>0;return (C=d,a-c>>>0|0)|0}function dq(a){a=+a;return a>=0.0?+M(a+.5):+Z(a-.5)}function eq(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=b+e|0;if((e|0)>=20){d=d&255;h=b&3;i=d|d<<8|d<<16|d<<24;g=f&~3;if(h){h=b+4-h|0;while((b|0)<(h|0)){a[b>>0]=d;b=b+1|0}}while((b|0)<(g|0)){c[b>>2]=i;b=b+4|0}}while((b|0)<(f|0)){a[b>>0]=d;b=b+1|0}return b-e|0}function fq(b,d,e){b=b|0;d=d|0;e=e|0;var f=0;if((e|0)>=4096)return Na(b|0,d|0,e|0)|0;f=b|0;if((b&3)==(d&3)){while(b&3){if(!e)return f|0;a[b>>0]=a[d>>0]|0;b=b+1|0;d=d+1|0;e=e-1|0}while((e|0)>=4){c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0;e=e-4|0}}while((e|0)>0){a[b>>0]=a[d>>0]|0;b=b+1|0;d=d+1|0;e=e-1|0}return f|0}function gq(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;if((c|0)<(b|0)&(b|0)<(c+d|0)){e=b;c=c+d|0;b=b+d|0;while((d|0)>0){b=b-1|0;c=c-1|0;d=d-1|0;a[b>>0]=a[c>>0]|0}b=e}else fq(b,c,d)|0;return b|0}function hq(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){C=b>>>c;return a>>>c|(b&(1<>>c-32|0}function iq(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;c=a+c>>>0;return (C=b+d+(c>>>0>>0|0)>>>0,c|0)|0}function jq(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){C=b<>>32-c;return a<>c;return a>>>c|(b&(1<>c-32|0}function lq(b){b=b|0;var c=0;c=a[m+(b&255)>>0]|0;if((c|0)<8)return c|0;c=a[m+(b>>8&255)>>0]|0;if((c|0)<8)return c+8|0;c=a[m+(b>>16&255)>>0]|0;if((c|0)<8)return c+16|0;return (a[m+(b>>>24)>>0]|0)+24|0}function mq(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;f=a&65535;e=b&65535;c=_(e,f)|0;d=a>>>16;a=(c>>>16)+(_(e,d)|0)|0;e=b>>>16;b=_(e,f)|0;return (C=(a>>>16)+(_(e,d)|0)+(((a&65535)+b|0)>>>16)|0,a+b<<16|c&65535|0)|0}function nq(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=b>>31|((b|0)<0?-1:0)<<1;i=((b|0)<0?-1:0)>>31|((b|0)<0?-1:0)<<1;f=d>>31|((d|0)<0?-1:0)<<1;e=((d|0)<0?-1:0)>>31|((d|0)<0?-1:0)<<1;h=cq(j^a|0,i^b|0,j|0,i|0)|0;g=C;a=f^j;b=e^i;return cq((sq(h,g,cq(f^c|0,e^d|0,f|0,e|0)|0,C,0)|0)^a|0,C^b|0,a|0,b|0)|0}function oq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;f=i;i=i+16|0;j=f|0;h=b>>31|((b|0)<0?-1:0)<<1;g=((b|0)<0?-1:0)>>31|((b|0)<0?-1:0)<<1;l=e>>31|((e|0)<0?-1:0)<<1;k=((e|0)<0?-1:0)>>31|((e|0)<0?-1:0)<<1;a=cq(h^a|0,g^b|0,h|0,g|0)|0;b=C;sq(a,b,cq(l^d|0,k^e|0,l|0,k|0)|0,C,j)|0;e=cq(c[j>>2]^h|0,c[j+4>>2]^g|0,h|0,g|0)|0;d=C;i=f;return (C=d,e)|0}function pq(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=a;f=c;c=mq(e,f)|0;a=C;return (C=(_(b,f)|0)+(_(d,e)|0)+a|a&0,c|0|0)|0}function qq(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return sq(a,b,c,d,0)|0}function rq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=i;i=i+16|0;f=g|0;sq(a,b,d,e,f)|0;i=g;return (C=c[f+4>>2]|0,c[f>>2]|0)|0}function sq(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;l=a;j=b;k=j;h=d;n=e;i=n;if(!k){g=(f|0)!=0;if(!i){if(g){c[f>>2]=(l>>>0)%(h>>>0);c[f+4>>2]=0}n=0;f=(l>>>0)/(h>>>0)>>>0;return (C=n,f)|0}else{if(!g){n=0;f=0;return (C=n,f)|0}c[f>>2]=a|0;c[f+4>>2]=b&0;n=0;f=0;return (C=n,f)|0}}g=(i|0)==0;do if(h){if(!g){g=(aa(i|0)|0)-(aa(k|0)|0)|0;if(g>>>0<=31){m=g+1|0;i=31-g|0;b=g-31>>31;h=m;a=l>>>(m>>>0)&b|k<>>(m>>>0)&b;g=0;i=l<>2]=a|0;c[f+4>>2]=j|b&0;n=0;f=0;return (C=n,f)|0}g=h-1|0;if(g&h|0){i=(aa(h|0)|0)+33-(aa(k|0)|0)|0;p=64-i|0;m=32-i|0;j=m>>31;o=i-32|0;b=o>>31;h=i;a=m-1>>31&k>>>(o>>>0)|(k<>>(i>>>0))&b;b=b&k>>>(i>>>0);g=l<>>(o>>>0))&j|l<>31;break}if(f|0){c[f>>2]=g&l;c[f+4>>2]=0}if((h|0)==1){o=j|b&0;p=a|0|0;return (C=o,p)|0}else{p=lq(h|0)|0;o=k>>>(p>>>0)|0;p=k<<32-p|l>>>(p>>>0)|0;return (C=o,p)|0}}else{if(g){if(f|0){c[f>>2]=(k>>>0)%(h>>>0);c[f+4>>2]=0}o=0;p=(k>>>0)/(h>>>0)>>>0;return (C=o,p)|0}if(!l){if(f|0){c[f>>2]=0;c[f+4>>2]=(k>>>0)%(i>>>0)}o=0;p=(k>>>0)/(i>>>0)>>>0;return (C=o,p)|0}g=i-1|0;if(!(g&i)){if(f|0){c[f>>2]=a|0;c[f+4>>2]=g&k|b&0}o=0;p=k>>>((lq(i|0)|0)>>>0);return (C=o,p)|0}g=(aa(i|0)|0)-(aa(k|0)|0)|0;if(g>>>0<=30){b=g+1|0;i=31-g|0;h=b;a=k<>>(b>>>0);b=k>>>(b>>>0);g=0;i=l<>2]=a|0;c[f+4>>2]=j|b&0;o=0;p=0;return (C=o,p)|0}while(0);if(!h){k=i;j=0;i=0}else{m=d|0|0;l=n|e&0;k=iq(m|0,l|0,-1,-1)|0;d=C;j=i;i=0;do{e=j;j=g>>>31|j<<1;g=i|g<<1;e=a<<1|e>>>31|0;n=a>>>31|b<<1|0;cq(k|0,d|0,e|0,n|0)|0;p=C;o=p>>31|((p|0)<0?-1:0)<<1;i=o&1;a=cq(e|0,n|0,o&m|0,(((p|0)<0?-1:0)>>31|((p|0)<0?-1:0)<<1)&l|0)|0;b=C;h=h-1|0}while((h|0)!=0);k=j;j=0}h=0;if(f|0){c[f>>2]=a;c[f+4>>2]=b}o=(g|0)>>>31|(k|h)<<1|(h<<1|g>>>31)&0|j;p=(g<<1|0>>>31)&-2|i;return (C=o,p)|0}function tq(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;return ob[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0)|0}function uq(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return pb[a&15](b|0,c|0,d|0)|0}function vq(a,b){a=a|0;b=b|0;qb[a&31](b|0)}function wq(a,b){a=a|0;b=b|0;return rb[a&7](b|0)|0}function xq(a,b,c,d,e){a=a|0;b=+b;c=c|0;d=d|0;e=e|0;return sb[a&0](+b,c|0,d|0,e|0)|0}function yq(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;tb[a&31](b|0,c|0,d|0)}function zq(a){a=a|0;ub[a&1]()}function Aq(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return vb[a&7](b|0,c|0,d|0,e|0)|0}function Bq(a,b,c){a=a|0;b=b|0;c=c|0;return wb[a&7](b|0,c|0)|0}function Cq(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;xb[a&63](b|0,c|0,d|0,e|0)}function Dq(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;da(0);return 0}function Eq(a,b,c){a=a|0;b=b|0;c=c|0;ea(1);return 0}function Fq(a){a=a|0;fa(2)}function Gq(a){a=a|0;ga(3);return 0}function Hq(a,b,c,d){a=+a;b=b|0;c=c|0;d=d|0;ha(4);return 0}function Iq(a,b,c){a=a|0;b=b|0;c=c|0;ia(5)}function Jq(){ja(6)}function Kq(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ka(7);return 0}function Lq(a,b){a=a|0;b=b|0;la(8);return 0}function Mq(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ma(9)} + +// EMSCRIPTEN_END_FUNCS +var ob=[Dq,Qb];var pb=[Eq,fo,io,lo,Ro,nn,Nn,Sn,Xn,jo,Eq,Eq,Eq,Eq,Eq,Eq];var qb=[Fq,Yp,bc,dn,Ln,Qn,Vn,Aj,Bj,Ok,Qk,Sk,Uk,Wk,Xk,Yk,Zk,_k,$k,al,bl,cl,go,ko,Fq,Fq,Fq,Fq,Fq,Fq,Fq,Fq];var rb=[Gq,Xp,bo,_m,Kn,Pn,Un,Rl];var sb=[Hq];var tb=[Iq,ji,ki,li,mi,ti,ui,vi,wi,xi,yi,zi,Ai,Bi,Ci,Di,Ei,fi,gi,oi,pi,ri,si,Iq,Iq,Iq,Iq,Iq,Iq,Iq,Iq,Iq];var ub=[Jq,ac];var vb=[Kq,Jn,On,Tn,Yn,Sg,Kq,Kq];var wb=[Lq,mn,Mn,Rn,Wn,Lq,Lq,Lq];var xb=[Mq,Tc,Uc,Vc,_c,$c,ad,ed,fd,id,jd,kd,od,pd,qd,vd,wd,xd,Bd,Cd,Fd,Gd,Hd,Kd,Ld,Md,Pd,Rd,Wd,Xd,$d,ae,ge,he,Mq,Mq,Mq,Mq,Mq,Mq,Mq,Mq,Mq,Mq,Mq,Mq,Mq,Mq,Mq,Mq,Mq,Mq,Mq,Mq,Mq,Mq,Mq,Mq,Mq,Mq,Mq,Mq,Mq,Mq];return{_quiet_encoder_destroy:Xb,_roundf:dq,_quiet_decoder_recv:Mb,_quiet_decoder_checksum_fails:Hb,_quiet_encoder_get_frame_len:Sb,_bitshift64Lshr:hq,_quiet_decoder_destroy:Pb,_bitshift64Shl:jq,_quiet_decoder_create:Ib,_fflush:Ip,_quiet_decoder_profile_str:$b,_memset:eq,_memcpy:fq,_quiet_decoder_consume_stats:Lb,_i64Subtract:cq,_quiet_encoder_clamp_frame_len:Tb,_i64Add:iq,_quiet_decoder_enable_stats:Jb,_quiet_decoder_disable_stats:Kb,_quiet_decoder_consume:Nb,_quiet_encoder_send:Vb,_quiet_encoder_profile_str:Zb,_quiet_encoder_create:Rb,_quiet_encoder_emit:Wb,___errno_location:eo,_free:Yp,_memmove:gq,_malloc:Xp,_quiet_decoder_flush:Ob,runPostSets:bq,stackAlloc:yb,stackSave:zb,stackRestore:Ab,establishStackSpace:Bb,setThrew:Cb,setTempRet0:Fb,getTempRet0:Gb,dynCall_iiiiiiii:tq,dynCall_iiii:uq,dynCall_vi:vq,dynCall_ii:wq,dynCall_idiii:xq,dynCall_viii:yq,dynCall_v:zq,dynCall_iiiii:Aq,dynCall_iii:Bq,dynCall_viiii:Cq}}) + + +// EMSCRIPTEN_END_ASM +(Module.asmGlobalArg,Module.asmLibraryArg,buffer);var real__quiet_encoder_destroy=asm["_quiet_encoder_destroy"];asm["_quiet_encoder_destroy"]=(function(){assert(runtimeInitialized,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)");assert(!runtimeExited,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)");return real__quiet_encoder_destroy.apply(null,arguments)});var real__roundf=asm["_roundf"];asm["_roundf"]=(function(){assert(runtimeInitialized,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)");assert(!runtimeExited,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)");return real__roundf.apply(null,arguments)});var real__quiet_decoder_recv=asm["_quiet_decoder_recv"];asm["_quiet_decoder_recv"]=(function(){assert(runtimeInitialized,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)");assert(!runtimeExited,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)");return real__quiet_decoder_recv.apply(null,arguments)});var real__quiet_decoder_checksum_fails=asm["_quiet_decoder_checksum_fails"];asm["_quiet_decoder_checksum_fails"]=(function(){assert(runtimeInitialized,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)");assert(!runtimeExited,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)");return real__quiet_decoder_checksum_fails.apply(null,arguments)});var real__quiet_encoder_get_frame_len=asm["_quiet_encoder_get_frame_len"];asm["_quiet_encoder_get_frame_len"]=(function(){assert(runtimeInitialized,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)");assert(!runtimeExited,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)");return real__quiet_encoder_get_frame_len.apply(null,arguments)});var real__bitshift64Lshr=asm["_bitshift64Lshr"];asm["_bitshift64Lshr"]=(function(){assert(runtimeInitialized,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)");assert(!runtimeExited,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)");return real__bitshift64Lshr.apply(null,arguments)});var real__quiet_decoder_destroy=asm["_quiet_decoder_destroy"];asm["_quiet_decoder_destroy"]=(function(){assert(runtimeInitialized,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)");assert(!runtimeExited,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)");return real__quiet_decoder_destroy.apply(null,arguments)});var real__bitshift64Shl=asm["_bitshift64Shl"];asm["_bitshift64Shl"]=(function(){assert(runtimeInitialized,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)");assert(!runtimeExited,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)");return real__bitshift64Shl.apply(null,arguments)});var real__quiet_decoder_create=asm["_quiet_decoder_create"];asm["_quiet_decoder_create"]=(function(){assert(runtimeInitialized,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)");assert(!runtimeExited,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)");return real__quiet_decoder_create.apply(null,arguments)});var real__fflush=asm["_fflush"];asm["_fflush"]=(function(){assert(runtimeInitialized,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)");assert(!runtimeExited,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)");return real__fflush.apply(null,arguments)});var real__quiet_decoder_profile_str=asm["_quiet_decoder_profile_str"];asm["_quiet_decoder_profile_str"]=(function(){assert(runtimeInitialized,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)");assert(!runtimeExited,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)");return real__quiet_decoder_profile_str.apply(null,arguments)});var real__quiet_decoder_consume_stats=asm["_quiet_decoder_consume_stats"];asm["_quiet_decoder_consume_stats"]=(function(){assert(runtimeInitialized,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)");assert(!runtimeExited,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)");return real__quiet_decoder_consume_stats.apply(null,arguments)});var real__i64Subtract=asm["_i64Subtract"];asm["_i64Subtract"]=(function(){assert(runtimeInitialized,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)");assert(!runtimeExited,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)");return real__i64Subtract.apply(null,arguments)});var real__quiet_encoder_clamp_frame_len=asm["_quiet_encoder_clamp_frame_len"];asm["_quiet_encoder_clamp_frame_len"]=(function(){assert(runtimeInitialized,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)");assert(!runtimeExited,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)");return real__quiet_encoder_clamp_frame_len.apply(null,arguments)});var real__i64Add=asm["_i64Add"];asm["_i64Add"]=(function(){assert(runtimeInitialized,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)");assert(!runtimeExited,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)");return real__i64Add.apply(null,arguments)});var real__quiet_decoder_enable_stats=asm["_quiet_decoder_enable_stats"];asm["_quiet_decoder_enable_stats"]=(function(){assert(runtimeInitialized,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)");assert(!runtimeExited,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)");return real__quiet_decoder_enable_stats.apply(null,arguments)});var real__quiet_decoder_disable_stats=asm["_quiet_decoder_disable_stats"];asm["_quiet_decoder_disable_stats"]=(function(){assert(runtimeInitialized,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)");assert(!runtimeExited,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)");return real__quiet_decoder_disable_stats.apply(null,arguments)});var real__quiet_decoder_consume=asm["_quiet_decoder_consume"];asm["_quiet_decoder_consume"]=(function(){assert(runtimeInitialized,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)");assert(!runtimeExited,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)");return real__quiet_decoder_consume.apply(null,arguments)});var real__quiet_encoder_send=asm["_quiet_encoder_send"];asm["_quiet_encoder_send"]=(function(){assert(runtimeInitialized,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)");assert(!runtimeExited,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)");return real__quiet_encoder_send.apply(null,arguments)});var real__free=asm["_free"];asm["_free"]=(function(){assert(runtimeInitialized,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)");assert(!runtimeExited,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)");return real__free.apply(null,arguments)});var real__quiet_encoder_create=asm["_quiet_encoder_create"];asm["_quiet_encoder_create"]=(function(){assert(runtimeInitialized,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)");assert(!runtimeExited,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)");return real__quiet_encoder_create.apply(null,arguments)});var real__quiet_encoder_emit=asm["_quiet_encoder_emit"];asm["_quiet_encoder_emit"]=(function(){assert(runtimeInitialized,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)");assert(!runtimeExited,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)");return real__quiet_encoder_emit.apply(null,arguments)});var real____errno_location=asm["___errno_location"];asm["___errno_location"]=(function(){assert(runtimeInitialized,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)");assert(!runtimeExited,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)");return real____errno_location.apply(null,arguments)});var real__quiet_encoder_profile_str=asm["_quiet_encoder_profile_str"];asm["_quiet_encoder_profile_str"]=(function(){assert(runtimeInitialized,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)");assert(!runtimeExited,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)");return real__quiet_encoder_profile_str.apply(null,arguments)});var real__memmove=asm["_memmove"];asm["_memmove"]=(function(){assert(runtimeInitialized,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)");assert(!runtimeExited,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)");return real__memmove.apply(null,arguments)});var real__malloc=asm["_malloc"];asm["_malloc"]=(function(){assert(runtimeInitialized,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)");assert(!runtimeExited,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)");return real__malloc.apply(null,arguments)});var real__quiet_decoder_flush=asm["_quiet_decoder_flush"];asm["_quiet_decoder_flush"]=(function(){assert(runtimeInitialized,"you need to wait for the runtime to be ready (e.g. wait for main() to be called)");assert(!runtimeExited,"the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)");return real__quiet_decoder_flush.apply(null,arguments)});var _quiet_encoder_destroy=Module["_quiet_encoder_destroy"]=asm["_quiet_encoder_destroy"];var _roundf=Module["_roundf"]=asm["_roundf"];var _quiet_decoder_recv=Module["_quiet_decoder_recv"]=asm["_quiet_decoder_recv"];var _quiet_decoder_checksum_fails=Module["_quiet_decoder_checksum_fails"]=asm["_quiet_decoder_checksum_fails"];var _quiet_encoder_get_frame_len=Module["_quiet_encoder_get_frame_len"]=asm["_quiet_encoder_get_frame_len"];var _bitshift64Lshr=Module["_bitshift64Lshr"]=asm["_bitshift64Lshr"];var _quiet_decoder_destroy=Module["_quiet_decoder_destroy"]=asm["_quiet_decoder_destroy"];var _bitshift64Shl=Module["_bitshift64Shl"]=asm["_bitshift64Shl"];var _quiet_decoder_create=Module["_quiet_decoder_create"]=asm["_quiet_decoder_create"];var _fflush=Module["_fflush"]=asm["_fflush"];var _quiet_decoder_profile_str=Module["_quiet_decoder_profile_str"]=asm["_quiet_decoder_profile_str"];var _memset=Module["_memset"]=asm["_memset"];var _memcpy=Module["_memcpy"]=asm["_memcpy"];var _quiet_decoder_consume_stats=Module["_quiet_decoder_consume_stats"]=asm["_quiet_decoder_consume_stats"];var _i64Subtract=Module["_i64Subtract"]=asm["_i64Subtract"];var _quiet_encoder_clamp_frame_len=Module["_quiet_encoder_clamp_frame_len"]=asm["_quiet_encoder_clamp_frame_len"];var _i64Add=Module["_i64Add"]=asm["_i64Add"];var _quiet_decoder_enable_stats=Module["_quiet_decoder_enable_stats"]=asm["_quiet_decoder_enable_stats"];var _quiet_decoder_disable_stats=Module["_quiet_decoder_disable_stats"]=asm["_quiet_decoder_disable_stats"];var _quiet_decoder_consume=Module["_quiet_decoder_consume"]=asm["_quiet_decoder_consume"];var _quiet_encoder_send=Module["_quiet_encoder_send"]=asm["_quiet_encoder_send"];var _free=Module["_free"]=asm["_free"];var _quiet_encoder_create=Module["_quiet_encoder_create"]=asm["_quiet_encoder_create"];var _quiet_encoder_emit=Module["_quiet_encoder_emit"]=asm["_quiet_encoder_emit"];var ___errno_location=Module["___errno_location"]=asm["___errno_location"];var _quiet_encoder_profile_str=Module["_quiet_encoder_profile_str"]=asm["_quiet_encoder_profile_str"];var runPostSets=Module["runPostSets"]=asm["runPostSets"];var _memmove=Module["_memmove"]=asm["_memmove"];var _malloc=Module["_malloc"]=asm["_malloc"];var _quiet_decoder_flush=Module["_quiet_decoder_flush"]=asm["_quiet_decoder_flush"];var dynCall_iiiiiiii=Module["dynCall_iiiiiiii"]=asm["dynCall_iiiiiiii"];var dynCall_iiii=Module["dynCall_iiii"]=asm["dynCall_iiii"];var dynCall_vi=Module["dynCall_vi"]=asm["dynCall_vi"];var dynCall_ii=Module["dynCall_ii"]=asm["dynCall_ii"];var dynCall_idiii=Module["dynCall_idiii"]=asm["dynCall_idiii"];var dynCall_viii=Module["dynCall_viii"]=asm["dynCall_viii"];var dynCall_v=Module["dynCall_v"]=asm["dynCall_v"];var dynCall_iiiii=Module["dynCall_iiiii"]=asm["dynCall_iiiii"];var dynCall_iii=Module["dynCall_iii"]=asm["dynCall_iii"];var dynCall_viiii=Module["dynCall_viiii"]=asm["dynCall_viiii"];Runtime.stackAlloc=asm["stackAlloc"];Runtime.stackSave=asm["stackSave"];Runtime.stackRestore=asm["stackRestore"];Runtime.establishStackSpace=asm["establishStackSpace"];Runtime.setTempRet0=asm["setTempRet0"];Runtime.getTempRet0=asm["getTempRet0"];if(memoryInitializer){if(typeof Module["locateFile"]==="function"){memoryInitializer=Module["locateFile"](memoryInitializer)}else if(Module["memoryInitializerPrefixURL"]){memoryInitializer=Module["memoryInitializerPrefixURL"]+memoryInitializer}if(ENVIRONMENT_IS_NODE||ENVIRONMENT_IS_SHELL){var data=Module["readBinary"](memoryInitializer);HEAPU8.set(data,Runtime.GLOBAL_BASE)}else{addRunDependency("memory initializer");var applyMemoryInitializer=(function(data){if(data.byteLength)data=new Uint8Array(data);for(var i=0;i0){Module.printErr("run() called, but dependencies remain, so not running");return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(ENVIRONMENT_IS_WEB&&preloadStartTime!==null){Module.printErr("pre-main prep time: "+(Date.now()-preloadStartTime)+" ms")}if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout((function(){setTimeout((function(){Module["setStatus"]("")}),1);doRun()}),1)}else{doRun()}}Module["run"]=Module.run=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]){Module.printErr("exit("+status+") implicitly called by end of main(), but noExitRuntime, so not exiting the runtime (you can use emscripten_force_exit, if you want to force a true shutdown)");return}if(Module["noExitRuntime"]){Module.printErr("exit("+status+") called, but noExitRuntime, so halting execution but not exiting the runtime or preventing further async execution (you can use emscripten_force_exit, if you want to force a true shutdown)")}else{ABORT=true;EXITSTATUS=status;STACKTOP=initialStackTop;exitRuntime();if(Module["onExit"])Module["onExit"](status)}if(ENVIRONMENT_IS_NODE){process["exit"](status)}else if(ENVIRONMENT_IS_SHELL&&typeof quit==="function"){quit(status)}throw new ExitStatus(status)}Module["exit"]=Module.exit=exit;var abortDecorators=[];function abort(what){if(what!==undefined){Module.print(what);Module.printErr(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;var extra="";var output="abort("+what+") at "+stackTrace()+extra;if(abortDecorators){abortDecorators.forEach((function(decorator){output=decorator(output,what)}))}throw output}Module["abort"]=Module.abort=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}run() + + + + diff --git a/web/js/quiet/quiet-emscripten.js.mem b/web/js/quiet/quiet-emscripten.js.mem new file mode 100755 index 0000000000000000000000000000000000000000..58eaeb2aa7ea071972a92c1395bb06a7984e15cc GIT binary patch literal 45051 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 literal 0 HcmV?d00001 diff --git a/web/js/quiet/quiet-profiles.json b/web/js/quiet/quiet-profiles.json new file mode 100755 index 00000000..03948c23 --- /dev/null +++ b/web/js/quiet/quiet-profiles.json @@ -0,0 +1,270 @@ +{ + "audible": { + "mod_scheme": "gmsk", + "checksum_scheme": "crc32", + "inner_fec_scheme": "v27", + "outer_fec_scheme": "none", + "frame_length": 100, + "modulation": { + "center_frequency": 4200, + "gain": 0.1 + }, + "interpolation": { + "shape": "kaiser", + "samples_per_symbol": 10, + "symbol_delay": 4, + "excess_bandwidth": 0.35 + }, + "encoder_filters": { + "dc_filter_alpha": 0.01 + }, + "resampler": { + "delay": 13, + "bandwidth": 0.45, + "attenuation": 60, + "filter_bank_size": 64 + } + }, + "audible-7k-channel-0": { + "mod_scheme": "arb16opt", + "checksum_scheme": "crc32", + "inner_fec_scheme": "rs8", + "outer_fec_scheme": "v29", + "frame_length": 600, + "modulation": { + "center_frequency": 9200, + "gain": 0.1 + }, + "interpolation": { + "shape": "kaiser", + "samples_per_symbol": 6, + "symbol_delay": 4, + "excess_bandwidth": 0.31 + }, + "encoder_filters": { + "dc_filter_alpha": 0.01 + }, + "resampler": { + "delay": 13, + "bandwidth": 0.45, + "attenuation": 60, + "filter_bank_size": 64 + }, + "ofdm": { + "num_subcarriers": 48, + "cyclic_prefix_length": 8, + "taper_length": 4, + "left_band": 0, + "right_band": 0 + } + }, + "audible-7k-channel-1": { + "mod_scheme": "arb16opt", + "checksum_scheme": "crc32", + "inner_fec_scheme": "rs8", + "outer_fec_scheme": "v29", + "frame_length": 600, + "modulation": { + "center_frequency": 15500, + "gain": 0.1 + }, + "interpolation": { + "shape": "kaiser", + "samples_per_symbol": 6, + "symbol_delay": 4, + "excess_bandwidth": 0.31 + }, + "encoder_filters": { + "dc_filter_alpha": 0.01 + }, + "resampler": { + "delay": 13, + "bandwidth": 0.45, + "attenuation": 60, + "filter_bank_size": 64 + }, + "ofdm": { + "num_subcarriers": 48, + "cyclic_prefix_length": 8, + "taper_length": 4, + "left_band": 0, + "right_band": 0 + } + }, + "cable-64k": { + "mod_scheme": "qam1024", + "checksum_scheme": "crc32", + "inner_fec_scheme": "v27p23", + "outer_fec_scheme": "rs8", + "frame_length": 7500, + "modulation": { + "center_frequency": 10200, + "gain": 0.09 + }, + "interpolation": { + "shape": "kaiser", + "samples_per_symbol": 2, + "symbol_delay": 4, + "excess_bandwidth": 0.35 + }, + "encoder_filters": { + "dc_filter_alpha": 0.03 + }, + "resampler": { + "delay": 13, + "bandwidth": 0.45, + "attenuation": 60, + "filter_bank_size": 64 + }, + "ofdm": { + "num_subcarriers": 128, + "cyclic_prefix_length": 16, + "taper_length": 8, + "left_band": 6, + "right_band": 12 + } + }, + "hello-world": { + "mod_scheme": "gmsk", + "checksum_scheme": "crc32", + "inner_fec_scheme": "v27", + "outer_fec_scheme": "none", + "frame_length": 25, + "modulation": { + "center_frequency": 4400, + "gain": 0.08 + }, + "interpolation": { + "shape": "kaiser", + "samples_per_symbol": 20, + "symbol_delay": 4, + "excess_bandwidth": 0.38 + }, + "encoder_filters": { + "dc_filter_alpha": 0.01 + }, + "resampler": { + "delay": 13, + "bandwidth": 0.45, + "attenuation": 60, + "filter_bank_size": 64 + } + }, + "ultrasonic": { + "mod_scheme": "gmsk", + "checksum_scheme": "crc32", + "inner_fec_scheme": "v27", + "outer_fec_scheme": "none", + "frame_length": 75, + "modulation": { + "center_frequency": 19000, + "gain": 0.1 + }, + "interpolation": { + "shape": "rrcos", + "samples_per_symbol": 14, + "symbol_delay": 4, + "excess_bandwidth": 0.35 + }, + "encoder_filters": { + "dc_filter_alpha": 0.01 + }, + "resampler": { + "delay": 13, + "bandwidth": 0.45, + "attenuation": 60, + "filter_bank_size": 64 + } + }, + "ultrasonic-3600": { + "ofdm": { + "num_subcarriers": 64, + "cyclic_prefix_length": 20, + "taper_length": 8, + "left_band": 4, + "right_band": 13 + }, + "mod_scheme": "V29", + "checksum_scheme": "crc8", + "inner_fec_scheme": "v27", + "outer_fec_scheme": "none", + "frame_length": 550, + "modulation": { + "center_frequency": 18500, + "gain": 0.1 + }, + "interpolation": { + "shape": "kaiser", + "samples_per_symbol": 7, + "symbol_delay": 4, + "excess_bandwidth": 0.33 + }, + "encoder_filters": { + "dc_filter_alpha": 0.01 + }, + "resampler": { + "delay": 13, + "bandwidth": 0.45, + "attenuation": 60, + "filter_bank_size": 64 + } + }, + "ultrasonic-whisper": { + "mod_scheme": "gmsk", + "checksum_scheme": "crc32", + "inner_fec_scheme": "v27", + "outer_fec_scheme": "none", + "frame_length": 16, + "modulation": { + "center_frequency": 19500, + "gain": 0.1 + }, + "interpolation": { + "shape": "rrcos", + "samples_per_symbol": 30, + "symbol_delay": 4, + "excess_bandwidth": 0.35 + }, + "encoder_filters": { + "dc_filter_alpha": 0.01 + }, + "resampler": { + "delay": 13, + "bandwidth": 0.45, + "attenuation": 60, + "filter_bank_size": 64 + } + }, + "ultrasonic-experimental": { + "mod_scheme": "bpsk", + "checksum_scheme": "crc32", + "inner_fec_scheme": "rs8", + "outer_fec_scheme": "v29", + "frame_length": 100, + "modulation": { + "center_frequency": 19000, + "gain": 0.2 + }, + "interpolation": { + "shape": "kaiser", + "samples_per_symbol": 10, + "symbol_delay": 4, + "excess_bandwidth": 0.31 + }, + "encoder_filters": { + "dc_filter_alpha": 0.01 + }, + "resampler": { + "delay": 13, + "bandwidth": 0.45, + "attenuation": 60, + "filter_bank_size": 64 + }, + "header": { + "checksum_scheme": "crc32", + "inner_fec_scheme": "secded7264", + "outer_fec_scheme": "v29", + "mod_scheme": "bpsk" + } + } +} diff --git a/web/js/quiet/quiet.js b/web/js/quiet/quiet.js new file mode 100755 index 00000000..73b2136f --- /dev/null +++ b/web/js/quiet/quiet.js @@ -0,0 +1,954 @@ +/* Copyright 2016, Brian Armstrong + * quiet.js includes compiled portions from other sources + * - liquid DSP, Copyright (c) 2007-2016 Joseph Gaeddert + * - libjansson, Copyright (c) 2009-2016 Petri Lehtinen + * - emscripten, Copyright (c) 2010-2016 Emscripten authors + */ + +/** @namespace */ +var Quiet = (function() { + // sampleBufferSize is the number of audio samples we'll write per onaudioprocess call + // must be a power of two. we choose the absolute largest permissible value + // we implicitly assume that the browser will play back a written buffer without any gaps + var sampleBufferSize = 16384; + + // initialization flags + var emscriptenInitialized = false; + var profilesFetched = false; + + // profiles is the string content of quiet-profiles.json + var profiles; + + // our local instance of window.AudioContext + var audioCtx; + + // consumer callbacks. these fire once quiet is ready to create transmitter/receiver + var readyCallbacks = []; + var readyErrbacks = []; + var failReason = ""; + + // these are used for receiver only + var gUM; + var audioInput; + var audioInputFailedReason = ""; + var audioInputReadyCallbacks = []; + var audioInputFailedCallbacks = []; + var frameBufferSize = Math.pow(2, 14); + + // anti-gc + var receivers = {}; + var receivers_idx = 0; + + // isReady tells us if we can start creating transmitters and receivers + // we need the emscripten portion to be running and we need our + // async fetch of the profiles to be completed + function isReady() { + return emscriptenInitialized && profilesFetched; + }; + + function isFailed() { + return failReason !== ""; + }; + + // start gets our AudioContext and notifies consumers that quiet can be used + function start() { + var len = readyCallbacks.length; + for (var i = 0; i < len; i++) { + readyCallbacks[i](); + } + }; + + function initAudioContext() { + if (audioCtx === undefined) { + audioCtx = new (window.AudioContext || window.webkitAudioContext)(); + console.log(audioCtx.sampleRate); + } + }; + + function fail(reason) { + failReason = reason; + var len = readyErrbacks.length; + for (var i = 0; i < len; i++) { + readyErrbacks[i](reason); + } + }; + + function checkInitState() { + if (isReady()) { + start(); + } + }; + + function onProfilesFetch(p) { + profiles = p; + profilesFetched = true; + checkInitState(); + }; + + // this is intended to be called only by emscripten + function onEmscriptenInitialized() { + emscriptenInitialized = true; + checkInitState(); + }; + + function setProfilesPrefix(prefix) { + if (profilesFetched) { + return; + } + if (!prefix.endsWith("/")) { + prefix += "/"; + } + var profilesPath = prefix + "quiet-profiles.json"; + + var fetch = new Promise(function(resolve, reject) { + var xhr = new XMLHttpRequest(); + xhr.overrideMimeType("application/json"); + xhr.open("GET", profilesPath, true); + xhr.onload = function() { + if (this.status >= 200 && this.status < 300) { + resolve(this.responseText); + } else { + reject(this.statusText); + } + }; + xhr.onerror = function() { + reject(this.statusText); + }; + xhr.send(); + }); + + fetch.then(function(body) { + onProfilesFetch(body); + }, function(err) { + fail("fetch of quiet-profiles.json failed: " + err); + }); + }; + + function setMemoryInitializerPrefix(prefix) { + Module.memoryInitializerPrefixURL = prefix; + }; + + function setLibfecPrefix(prefix) { + Module.dynamicLibraries = Module.dynamicLibraries || []; + Module.dynamicLibraries.push(prefix + "libfec.js"); + }; + + /** + * Callback to notify user that quiet.js failed to initialize + * + * @callback onError + * @memberof Quiet + * @param {string} reason - error message related to failure + */ + + /** + * Add a callback to be called when Quiet is ready for use, e.g. when transmitters and receivers can be created. + * @function addReadyCallback + * @memberof Quiet + * @param {function} c - The user function which will be called + * @param {onError} [onError] - User errback function + * @example + * addReadyCallback(function() { console.log("ready!"); }); + */ + function addReadyCallback(c, errback) { + if (isReady()) { + c(); + return; + } + readyCallbacks.push(c); + if (errback !== undefined) { + if (isFailed()) { + errback(failReason); + return; + } + readyErrbacks.push(errback); + } + }; + + /** + * Callback to notify user that quiet.js failed to initialize + * + * @callback onError + * @memberof Quiet + * @param {string} reason - error message related to failure + */ + + /** + * Initialize Quiet and set up a callback to be called when Quiet is ready + * @function init + * @memberof Quiet + * @param {object} opts - configuration options + * @param {string} opts.profilesPrefix - path prefix to quiet-profiles.json + * this file configures transmitter and receiver parameters + * @param {string} opts.memoryInitializerPrefix - path prefix to quiet-emscripten.js.mem + * @param {string} [opts.libfecPrefix] - path prefix to libfec.js + * @param {function} [opts.onReady] - Quiet ready callback + * @param {onError} [opts.onError] - User errback function + * @example + * Quiet.init({ + * profilesPrefix: "/", // fetches /quiet-profiles.json + * memoryInitializerPrefix: "/", // fetches /quiet-emscripten.js.mem + * libfecPrefix: "/", // fetches /libfec.js + * onReady: function() { console.log("quiet is ready"); }, + * onError: function(reason) { console.log("quiet failed to start: " + reason); } + * }); + */ + function init(opts) { + if (opts.profilesPrefix !== undefined) { + setProfilesPrefix(opts.profilesPrefix); + } + + if (opts.memoryInitializerPrefix !== undefined) { + setMemoryInitializerPrefix(opts.memoryInitializerPrefix); + } + + if (opts.libfecPrefix !== undefined) { + setLibfecPrefix(opts.libfecPrefix); + } + + if (opts.onReady !== undefined) { + if (opts.onError !== undefined) { + addReadyCallback(opts.onReady, opts.onError); + } else { + addReadyCallback(opts.onReady); + } + } + }; + + + + /** + * Callback for user to provide data to a Quiet transmitter + * @callback transmit + * @memberof Quiet + * @param {ArrayBuffer} payload - bytes which will be encoded and sent to speaker + * @example + * transmit(Quiet.str2ab("Hello, World!")); + */ + + /** + * @typedef Transmitter + * @type object + * @property {transmit} transmit - queue up array buffer and begin transmitting + * @property {function} destroy - immediately stop playback and release all resources + * @property {Number} frameLength - length in bytes of each underlying transmit frame. + * calls to transmit() will automatically slice passed arraybuffer into frames of + * this length or shorter + * @property {function} getAverageEncodeTime - returns average time in ms spent encoding data + * into sound samples over the last 3 runs + */ + + /** + * Create a new transmitter configured by the given profile name. + * @function transmitter + * @memberof Quiet + * @param {object} opts - transmitter params + * @param {string|object} opts.profile - name of profile to use, must be a key in quiet-profiles.json OR an object which contains a single profile + * @param {function} [opts.onFinish] - user callback which will notify user when playback of all data in queue is complete + * if the user calls transmit multiple times before waiting for onFinish, then onFinish will be called only once after + * all of the data has been played out + * @param {function} [opts.onEnqueue] - user callback which will notify user when all data passed + * to transmit() has been written to the transmit queue and has thus entered the transmit + * pipeline. for convenience, quiet.js is designed to hold as much data as you ask it to and + * write it to the libquiet transmit queue over time. this callback is handy because it + * informs the user that all data resides in libquiet, which is useful if you would like + * to stream data to the transmitter. this callback is the appropriate place to stream the + * next chunk. doing so will prevent excess memory bloat while maintaining the maximum + * transmit throughput. if the user calls transmit multiple times before waiting for + * onEnqueue, then onEnqueue will be called only once after all of the data has been + * played out + * @param {boolean} [clampFrame] - Prevent frames from overlapping sample blocks. + * Web Audio collects sound samples in blocks, and the browser ensures that each + * block plays out smoothly and atomically. However, it is possible for playback + * gaps to occur between these blocks due to GC pause or similar conditions. + * This is especially common on mobile. Enabling this flag ensures that data frames do + * not overlap these sample blocks so that no playback gaps will occur within a frame, + * which greatly degrades error performance. Setting this flag to false will increase + * throughput but can significantly increase error rate. Defaults to true. + * @returns {Transmitter} - Transmitter object + * @example + * var tx = transmitter({profile: "robust", onFinish: function () { console.log("transmission complete"); }}); + * tx.transmit(Quiet.str2ab("Hello, World!")); + */ + function transmitter(opts) { + var profile = opts.profile; + var c_profiles, c_profile; + if (typeof profile === 'object') { + c_profiles = Module.intArrayFromString(JSON.stringify({"profile": profile})); + c_profile = Module.intArrayFromString("profile"); + } else { + // get an encoder_options object for our quiet-profiles.json and profile key + c_profiles = Module.intArrayFromString(profiles); + c_profile = Module.intArrayFromString(profile); + } + + initAudioContext(); + var done = opts.onFinish; + + var opt = Module.ccall('quiet_encoder_profile_str', 'pointer', ['array', 'array'], [c_profiles, c_profile]); + + // libquiet internally works at 44.1kHz but the local sound card + // may be a different rate. we inform quiet about that here + var encoder = Module.ccall('quiet_encoder_create', 'pointer', ['pointer', 'number'], [opt, audioCtx.sampleRate]); + + Module.ccall('free', null, ['pointer'], [opt]); + + if (opts.clampFrame === undefined) { + opts.clampFrame = true; + } + + var frame_len; + if (opts.clampFrame) { + // enable close_frame which prevents data frames from overlapping multiple + // sample buffers. this is very convenient if our system is not fast enough + // to feed the sound card without any gaps between subsequent buffers due + // to e.g. gc pause. inform quiet about our sample buffer size here + frame_len = Module.ccall('quiet_encoder_clamp_frame_len', 'number', ['pointer', 'number'], [encoder, sampleBufferSize]); + } else { + frame_len = Module.ccall('quiet_encoder_get_frame_len', 'number', ['pointer'], [encoder]); + } + var samples = Module.ccall('malloc', 'pointer', ['number'], [4 * sampleBufferSize]); + + // yes, this is pointer arithmetic, in javascript :) + var sample_view = Module.HEAPF32.subarray((samples/4), (samples/4) + sampleBufferSize); + + var dummy_osc; + + // we'll start and stop transmitter as needed + // if we have something to send, start it + // if we are done talking, stop it + var running = false; + var transmitter; + + // prevent races with callbacks on destroyed in-flight objects + var destroyed = false; + + var onaudioprocess = function(e) { + var output_l = e.outputBuffer.getChannelData(0); + + if (played === true) { + // we've already played what's in sample_view, and it hasn't been + // rewritten for whatever reason, so just play out silence + for (var i = 0; i < sampleBufferSize; i++) { + output_l[i] = 0; + } + return; + } + + played = true; + + output_l.set(sample_view); + window.setTimeout(writebuf, 0); + }; + + var startTransmitter = function () { + if (destroyed) { + return; + } + if (transmitter === undefined) { + // we have to start transmitter here because mobile safari wants it to be in response to a + // user action + var script_processor = (audioCtx.createScriptProcessor || audioCtx.createJavaScriptNode); + // we want a single input because some implementations will not run a node without some kind of source + // we want two outputs so that we can explicitly silence the right channel and no mixing will occur + transmitter = script_processor.call(audioCtx, sampleBufferSize, 1, 2); + transmitter.onaudioprocess = onaudioprocess; + // put an input node on the graph. some browsers require this to run our script processor + // this oscillator will not actually be used in any way + dummy_osc = audioCtx.createOscillator(); + dummy_osc.type = 'square'; + dummy_osc.frequency.value = 420; + + } + dummy_osc.connect(transmitter); + transmitter.connect(audioCtx.destination); + running = true; + }; + + var stopTransmitter = function () { + if (destroyed) { + return; + } + dummy_osc.disconnect(); + transmitter.disconnect(); + running = false; + }; + + // we are only going to keep one chunk of samples around + // ideally there will be a 1:1 sequence between writebuf and onaudioprocess + // but just in case one gets ahead of the other, this flag will prevent us + // from throwing away a buffer or playing a buffer twice + var played = true; + + // payload is a list of ArrayBuffers, each one frame or smaller in length + var payload = []; + var payloadView = new Uint8Array(payload); + + // unfortunately, we need to flush out the browser's sound sample buffer ourselves + // the way we do this is by writing empty blocks once we're done and *then* we can disconnect + var empties_written = 0; + + // measure some stats about encoding time for user + var last_emit_times = []; + var num_emit_times = 3; + + // writebuf calls _send and _emit on the encoder + // first we push as much payload as will fit into encoder's tx queue + // then we create the next sample block (if played = true) + var writebuf = function() { + if (destroyed) { + return; + } + // fill as much of quiet's transmit queue as possible + var frame_available = false; + var frame_written = false; + while(true) { + var frame = payload.shift(); + if (frame === undefined) { + break; + } + frame_available = true; + var written = Module.ccall('quiet_encoder_send', 'number', ['pointer', 'array', 'number'], [encoder, new Uint8Array(frame), frame.byteLength]); + if (written === -1) { + payload.unshift(frame); + break; + } + frame_written = true; + } + + if (payload.length === 0 && frame_written === true) { + // we wrote at least one frame and emptied out payload, our local (js) tx queue + // this means we have transitioned to having all data in libquiet + // notify user about this if they like + // this is an important transition point because it allows user to control + // memory util without sacrificing throughput as would be the case for waiting + // for onFinish, which is only called after everything has flushed + if (opts.onEnqueue !== undefined) { + window.setTimeout(opts.onEnqueue, 0); + } + } + + if (frame_available === true && running === false) { + startTransmitter(); + } + + // now set the sample block + if (played === false) { + // the existing sample block has yet to be played + // we are done + return; + } + + var before = new Date(); + var written = Module.ccall('quiet_encoder_emit', 'number', ['pointer', 'pointer', 'number'], [encoder, samples, sampleBufferSize]); + var after = new Date(); + + last_emit_times.unshift(after - before); + if (last_emit_times.length > num_emit_times) { + last_emit_times.pop(); + } + + // libquiet notifies us that the payload is finished by + // returning written < number of samples we asked for + if (frame_available === false && written === -1) { + if (empties_written < 3) { + // flush out browser's sound sample buffer before quitting + for (var i = 0; i < sampleBufferSize; i++) { + sample_view[i] = 0; + } + empties_written++; + played = false; + return; + } + // looks like we are done + // user callback + if (done !== undefined) { + done(); + } + if (running === true) { + stopTransmitter(); + } + return; + } + + played = false; + empties_written = 0; + + // in this case, we are sending data, but the whole block isn't full (we're near the end) + if (written < sampleBufferSize) { + // be extra cautious and 0-fill what's left + // (we want the end of transmission to be silence, not potentially loud noise) + for (var i = written; i < sampleBufferSize; i++) { + sample_view[i] = 0; + } + } + + }; + + var transmit = function(buf) { + if (destroyed) { + return; + } + // slice up into frames and push the frames to a list + for (var i = 0; i < buf.byteLength; ) { + var frame = buf.slice(i, i + frame_len); + i += frame.byteLength; + payload.push(frame); + } + // now do an update. this may or may not write samples + writebuf(); + }; + + var destroy = function() { + if (destroyed) { + return; + } + Module.ccall('free', null, ['pointer'], [samples]); + Module.ccall('quiet_encoder_destroy', null, ['pointer'], [encoder]); + if (running === true) { + stopTransmitter(); + } + destroyed = true; + }; + + var getAverageEncodeTime = function() { + if (last_emit_times.length === 0) { + return 0; + } + var total = 0; + for (var i = 0; i < last_emit_times.length; i++) { + total += last_emit_times[i]; + } + return total/(last_emit_times.length); + }; + + return { + transmit: transmit, + destroy: destroy, + frameLength: frame_len, + getAverageEncodeTime: getAverageEncodeTime + }; + }; + + // receiver functions + + function audioInputReady() { + var len = audioInputReadyCallbacks.length; + for (var i = 0; i < len; i++) { + audioInputReadyCallbacks[i](); + } + }; + + function audioInputFailed(reason) { + audioInputFailedReason = reason; + var len = audioInputFailedCallbacks.length; + for (var i = 0; i < len; i++) { + audioInputFailedCallbacks[i](audioInputFailedReason); + } + }; + + function addAudioInputReadyCallback(c, errback) { + if (errback !== undefined) { + if (audioInputFailedReason !== "") { + errback(audioInputFailedReason); + return + } + audioInputFailedCallbacks.push(errback); + } + if (audioInput instanceof MediaStreamAudioSourceNode) { + c(); + return + } + audioInputReadyCallbacks.push(c); + } + + function gUMConstraints() { + if (navigator.webkitGetUserMedia !== undefined) { + return { + audio: { + optional: [ + {googAutoGainControl: false}, + {googAutoGainControl2: false}, + {echoCancellation: false}, + {googEchoCancellation: false}, + {googEchoCancellation2: false}, + {googDAEchoCancellation: false}, + {googNoiseSuppression: false}, + {googNoiseSuppression2: false}, + {googHighpassFilter: false}, + {googTypingNoiseDetection: false}, + {googAudioMirroring: false} + ] + } + }; + } + if (navigator.mozGetUserMedia !== undefined) { + return { + audio: { + echoCancellation: false, + mozAutoGainControl: false, + mozNoiseSuppression: false + } + }; + + } + return { + audio: { + echoCancellation: false + } + }; + }; + + + function createAudioInput() { + audioInput = 0; // prevent others from trying to create + window.setTimeout(function() { + gUM.call(navigator, gUMConstraints(), + function(e) { + audioInput = audioCtx.createMediaStreamSource(e); + + // stash a very permanent reference so this isn't collected + window.quiet_receiver_anti_gc = audioInput; + + audioInputReady(); + }, function(reason) { + audioInputFailed(reason.name); + }); + }, 0); + }; + + /** + * @typedef Receiver + * @type object + * @property {function} destroy - immediately stop sampling microphone and release all resources + * @property {function} getAverageDecodeTime - returns average time in ms spent decoding data + * from sound samples over the last 3 runs + */ + + /** + * @typedef Complex + * @type object + * @property {Number} real - real valued component + * @property {Number} imag - imaginary valued component + */ + + /** + * @typedef ReceiverStats + * @type object + * @property [Array] symbols - received complex symbols + * @property {Number} receivedSignalStrengthIndicator - strength of received signal, in dB + * @property {Number} errorVectorMagnitude - magnitude of error vector between received symbols + * and reference symbols, in dB + */ + + /** + * Callback used by receiver to notify user that new decoder stats were + * generated. These stats provide instrumentation into the decoding process. + * + * @callback onReceiverStatsUpdate + * @memberof Quiet + * @param {Array} stats - Array of stats objects, one per frame detected by decoder + */ + + /** + * Callback used by receiver to notify user that a frame was received but + * failed checksum. Frames that fail checksum are not sent to onReceive. + * + * @callback onReceiveFail + * @memberof Quiet + * @param {number} total - total number of frames failed across lifetime of receiver + */ + + /** + * Callback used by receiver to notify user of errors in creating receiver. + * This is a callback because frequently this will result when the user denies + * permission to use the mic, which happens long after the call to create + * the receiver. + * + * @callback onReceiverCreateFail + * @memberof Quiet + * @param {string} reason - error message related to create fail + */ + + /** + * Callback used by receiver to notify user of data received via microphone/line-in. + * + * @callback onReceive + * @memberof Quiet + * @param {ArrayBuffer} payload - chunk of data received + */ + + /** + * Create a new receiver with the profile specified by profile (should match profile of transmitter). + * @function receiver + * @memberof Quiet + * @param {object} opts - receiver params + * @param {string|object} opts.profile - name of profile to use, must be a key in quiet-profiles.json OR an object which contains a complete profile + * @param {onReceive} opts.onReceive - callback which receiver will call to send user received data + * @param {function} [opts.onCreate] - callback to notify user that receiver has been created and is ready to receive. if the user needs to grant permission to use the microphone, this callback fires after that permission is granted. + * @param {onReceiverCreateFail} [opts.onCreateFail] - callback to notify user that receiver could not be created + * @param {onReceiveFail} [opts.onReceiveFail] - callback to notify user that receiver received corrupted data + * @param {onReceiverStatsUpdate} [opts.onReceiverStatsUpdate] - callback to notify user with new decode stats + * @returns {Receiver} - Receiver object + * @example + * receiver({profile: "robust", onReceive: function(payload) { console.log("received chunk of data: " + Quiet.ab2str(payload)); }}); + */ + function receiver(opts) { + var profile = opts.profile; + var c_profiles, c_profile; + if (typeof profile === 'object') { + c_profiles = Module.intArrayFromString(JSON.stringify({"profile": profile})); + c_profile = Module.intArrayFromString("profile"); + } else { + c_profiles = Module.intArrayFromString(profiles); + c_profile = Module.intArrayFromString(profile); + } + var opt = Module.ccall('quiet_decoder_profile_str', 'pointer', ['array', 'array'], [c_profiles, c_profile]); + + initAudioContext(); + // quiet does not create an audio input when it starts + // getting microphone access requires a permission dialog so only ask for it if we need it + if (gUM === undefined) { + gUM = (navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia); + } + + if (gUM === undefined) { + // we couldn't find a suitable getUserMedia, so fail fast + if (opts.onCreateFail !== undefined) { + opts.onCreateFail("getUserMedia undefined (mic not supported by browser)"); + } + return; + } + + if (audioInput === undefined) { + createAudioInput() + } + + // TODO investigate if this still needs to be placed on window. + // seems this was done to keep it from being collected + var scriptProcessor = audioCtx.createScriptProcessor(16384, 2, 1); + var idx = receivers_idx; + receivers[idx] = scriptProcessor; + receivers_idx++; + + // inform quiet about our local sound card's sample rate so that it can resample to its internal sample rate + var decoder = Module.ccall('quiet_decoder_create', 'pointer', ['pointer', 'number'], [opt, audioCtx.sampleRate]); + + Module.ccall('free', null, ['pointer'], [opt]); + + var samples = Module.ccall('malloc', 'pointer', ['number'], [4 * sampleBufferSize]); + + var frame = Module.ccall('malloc', 'pointer', ['number'], [frameBufferSize]); + + if (opts.onReceiverStatsUpdate !== undefined) { + Module.ccall('quiet_decoder_enable_stats', null, ['pointer'], [decoder]); + } + + var destroyed = false; + + var readbuf = function() { + if (destroyed) { + return; + } + while (true) { + var read = Module.ccall('quiet_decoder_recv', 'number', ['pointer', 'pointer', 'number'], [decoder, frame, frameBufferSize]); + if (read === -1) { + break; + } + // convert from emscripten bytes to js string. more pointer arithmetic. + var frameArray = Module.HEAP8.slice(frame, frame + read); + opts.onReceive(frameArray.buffer); + } + }; + + var lastChecksumFailCount = 0; + var last_consume_times = []; + var num_consume_times = 3; + var consume = function() { + if (destroyed) { + return; + } + var before = new Date(); + Module.ccall('quiet_decoder_consume', 'number', ['pointer', 'pointer', 'number'], [decoder, samples, sampleBufferSize]); + var after = new Date(); + + last_consume_times.unshift(after - before); + if (last_consume_times.length > num_consume_times) { + last_consume_times.pop(); + } + + window.setTimeout(readbuf, 0); + + var currentChecksumFailCount = Module.ccall('quiet_decoder_checksum_fails', 'number', ['pointer'], [decoder]); + if ((opts.onReceiveFail !== undefined) && (currentChecksumFailCount > lastChecksumFailCount)) { + window.setTimeout(function() { opts.onReceiveFail(currentChecksumFailCount); }, 0); + } + lastChecksumFailCount = currentChecksumFailCount; + + if (opts.onReceiverStatsUpdate !== undefined) { + var num_frames_ptr = Module.ccall('malloc', 'pointer', ['number'], [4]); + var frames = Module.ccall('quiet_decoder_consume_stats', 'pointer', ['pointer', 'pointer'], [decoder, num_frames_ptr]); + // time for some more pointer arithmetic + var num_frames = Module.HEAPU32[num_frames_ptr/4]; + Module.ccall('free', null, ['pointer'], [num_frames_ptr]); + + var framesize = 4 + 4 + 4 + 4 + 4; + var stats = []; + + for (var i = 0; i < num_frames; i++) { + var frameStats = {}; + var frame = (frames + i*framesize)/4; + var symbols = Module.HEAPU32[frame]; + var num_symbols = Module.HEAPU32[frame + 1]; + frameStats.errorVectorMagnitude = Module.HEAPF32[frame + 2]; + frameStats.receivedSignalStrengthIndicator = Module.HEAPF32[frame + 3]; + + frameStats.symbols = []; + for (var j = 0; j < num_symbols; j++) { + var symbol = (symbols + 8*j)/4; + frameStats.symbols.push({ + real: Module.HEAPF32[symbol], + imag: Module.HEAPF32[symbol + 1] + }); + } + stats.push(frameStats); + } + opts.onReceiverStatsUpdate(stats); + } + } + + scriptProcessor.onaudioprocess = function(e) { + if (destroyed) { + return; + } + var input = e.inputBuffer.getChannelData(0); + var sample_view = Module.HEAPF32.subarray(samples/4, samples/4 + sampleBufferSize); + sample_view.set(input); + + window.setTimeout(consume, 0); + } + + // if this is the first receiver object created, wait for our input node to be created + addAudioInputReadyCallback(function() { + audioInput.connect(scriptProcessor); + if (opts.onCreate !== undefined) { + window.setTimeout(opts.onCreate, 0); + } + }, opts.onCreateFail); + + // more unused nodes in the graph that some browsers insist on having + var fakeGain = audioCtx.createGain(); + fakeGain.value = 0; + scriptProcessor.connect(fakeGain); + fakeGain.connect(audioCtx.destination); + + var destroy = function() { + if (destroyed) { + return; + } + fakeGain.disconnect(); + scriptProcessor.disconnect(); + Module.ccall('free', null, ['pointer'], [samples]); + Module.ccall('free', null, ['pointer'], [frame]); + Module.ccall('quiet_decoder_destroy', null, ['pointer'], [decoder]); + delete receivers[idx]; + destroyed = true; + }; + + var getAverageDecodeTime = function() { + if (last_consume_times.length === 0) { + return 0; + } + var total = 0; + for (var i = 0; i < last_consume_times.length; i++) { + total += last_consume_times[i]; + } + return total/(last_consume_times.length); + }; + + return { + destroy: destroy, + getAverageDecodeTime: getAverageDecodeTime + } + }; + + /** + * Convert a string to array buffer in UTF8 + * @function str2ab + * @memberof Quiet + * @param {string} s - string to be converted + * @returns {ArrayBuffer} buf - converted arraybuffer + */ + function str2ab(s) { + var s_utf8 = unescape(encodeURIComponent(s)); + var buf = new ArrayBuffer(s_utf8.length); + var bufView = new Uint8Array(buf); + for (var i = 0; i < s_utf8.length; i++) { + bufView[i] = s_utf8.charCodeAt(i); + } + return buf; + }; + + /** + * Convert an array buffer in UTF8 to string + * @function ab2str + * @memberof Quiet + * @param {ArrayBuffer} ab - array buffer to be converted + * @returns {string} s - converted string + */ + function ab2str(ab) { + return decodeURIComponent(escape(String.fromCharCode.apply(null, new Uint8Array(ab)))); + }; + + /** + * Merge 2 ArrayBuffers + * This is a convenience function to assist user receiver functions that + * want to aggregate multiple payloads. + * @function mergeab + * @memberof Quiet + * @param {ArrayBuffer} ab1 - beginning ArrayBuffer + * @param {ArrayBuffer} ab2 - ending ArrayBuffer + * @returns {ArrayBuffer} buf - ab1 merged with ab2 + */ + function mergeab(ab1, ab2) { + var tmp = new Uint8Array(ab1.byteLength + ab2.byteLength); + tmp.set(new Uint8Array(ab1), 0); + tmp.set(new Uint8Array(ab2), ab1.byteLength); + return tmp.buffer; + }; + + /** + * Disconnect quiet.js from its microphone source + * This will disconnect quiet.js's microphone fully from all receivers + * This is useful to cause the browser to stop displaying the microphone icon + * Browser support is limited for disconnecting a single destination, so this + * call will disconnect all receivers. + * It is highly recommended to call this only after destroying any receivers. + * @function disconnect + */ + function disconnect() { + if (audioInput !== undefined) { + audioInput.disconnect(); + audioInput = undefined; + delete window.quiet_receiver_anti_gc; + } + }; + + return { + emscriptenInitialized: onEmscriptenInitialized, + addReadyCallback: addReadyCallback, + init: init, + transmitter: transmitter, + receiver: receiver, + str2ab: str2ab, + ab2str: ab2str, + mergeab: mergeab, + disconnect: disconnect + }; +})(); + +// extend emscripten Module +var Module = { + onRuntimeInitialized: Quiet.emscriptenInitialized, + memoryInitializerPrefixURL: "" +}; diff --git a/web/js/sendinvoice.js b/web/js/sendinvoice.js new file mode 100644 index 00000000..1c026351 --- /dev/null +++ b/web/js/sendinvoice.js @@ -0,0 +1,55 @@ +var TextTransmitter = (function() { + Quiet.init({ + profilesPrefix: "/js/quiet/", + memoryInitializerPrefix: "/js/quiet/", + libfecPrefix: "/js/quiet/" + }); + var btn; + var textbox; + var warningbox; + var transmit; + + function onTransmitFinish() { + textbox.focus(); + btn.addEventListener('click', onClick, false); + btn.disabled = false; + var originalText = btn.innerText; + btn.innerText = btn.getAttribute('data-quiet-sending-text'); + btn.setAttribute('data-quiet-sending-text', originalText); + }; + + function onClick(e) { + e.target.removeEventListener(e.type, arguments.callee); + e.target.disabled = true; + var originalText = e.target.innerText; + e.target.innerText = e.target.getAttribute('data-quiet-sending-text'); + e.target.setAttribute('data-quiet-sending-text', originalText); + var payload = textbox.value; + if (payload === "") { + onTransmitFinish(); + return; + } + transmit.transmit(Quiet.str2ab(payload)); + }; + + function onQuietReady() { + var profilename = document.querySelector('[data-quiet-profile-name]').getAttribute('data-quiet-profile-name'); + transmit = Quiet.transmitter({profile: profilename, onFinish: onTransmitFinish}); + btn.addEventListener('click', onClick, false); + }; + + function onQuietFail(reason) { + console.log("quiet failed to initialize: " + reason); + warningbox.classList.remove("hidden"); + warningbox.textContent = "Sorry, it looks like there was a problem with this example (" + reason + ")"; + }; + + function onDOMLoad() { + btn = document.querySelector('[data-quiet-send-button]'); + textbox = document.querySelector('[data-quiet-text-input]'); + warningbox = document.querySelector('[data-quiet-warning]'); + Quiet.addReadyCallback(onQuietReady, onQuietFail); + }; + + document.addEventListener("DOMContentLoaded", onDOMLoad); +})(); \ No newline at end of file diff --git a/web/robots.txt b/web/robots.txt new file mode 100644 index 00000000..6f27bb66 --- /dev/null +++ b/web/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Disallow: \ No newline at end of file diff --git a/yii b/yii new file mode 100755 index 00000000..83d84370 --- /dev/null +++ b/yii @@ -0,0 +1,31 @@ +#!/usr/bin/env php +safeLoad(); + +defined('YII_DEBUG') or define('YII_DEBUG', getenv('YII_DEBUG')); +defined('YII_ENV') or define('YII_ENV', getenv('YII_ENV')); + + +require(__DIR__ . '/vendor/yiisoft/yii2/Yii.php'); +require(__DIR__ . '/src/LNPay.php'); + +$config = yii\helpers\ArrayHelper::merge( + require(__DIR__ . '/config/main.php'), + require(__DIR__ . '/config/main-local.php'), + require(__DIR__ . '/config/console.php'), + require(__DIR__ . '/config/console-local.php') +); + +$application = new yii\console\Application($config); +$exitCode = $application->run(); +exit($exitCode); diff --git a/yii.bat b/yii.bat new file mode 100644 index 00000000..d516b3a1 --- /dev/null +++ b/yii.bat @@ -0,0 +1,20 @@ +@echo off + +rem ------------------------------------------------------------- +rem Yii command line bootstrap script for Windows. +rem +rem @author Qiang Xue +rem @link http://www.yiiframework.com/ +rem @copyright Copyright (c) 2008 Yii Software LLC +rem @license http://www.yiiframework.com/license/ +rem ------------------------------------------------------------- + +@setlocal + +set YII_PATH=%~dp0 + +if "%PHP_COMMAND%" == "" set PHP_COMMAND=php.exe + +"%PHP_COMMAND%" "%YII_PATH%yii" %* + +@endlocal

    + +

    Namespace: Quiet

    + + + + + +
    + +
    +

    + Quiet +

    + +
    + +
    + + + + + + + + + + + + + + + +

    Methods

    + +
    + +
    +

    <static> ab2str(ab) → {string}

    + + +
    +
    + + +
    + Convert an array buffer in UTF8 to string +
    + + + + + + + +
    Parameters:
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    ab + + +ArrayBuffer + + + + array buffer to be converted
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + + + + + + + +
    + + + + + + + + + + + +
    Returns:
    + + +
    + s - converted string +
    + + + +
    +
    + Type +
    +
    + +string + + +
    +
    + + + + +
    + + + +
    +

    <static> addReadyCallback(c, onError)

    + + +
    +
    + + +
    + Add a callback to be called when Quiet is ready for use, e.g. when transmitters and receivers can be created. +
    + + + + + + + +
    Parameters:
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeArgumentDescription
    c + + +function + + + + + + + + + + The user function which will be called
    onError + + +onError + + + + + + <optional>
    + + + + + +
    User errback function
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + + + + + + + +
    + + + + + + + + + + + + + +
    Example
    + +
    addReadyCallback(function() { console.log("ready!"); });
    + + +
    + + + +
    +

    <static> mergeab(ab1, ab2) → {ArrayBuffer}

    + + +
    +
    + + +
    + Merge 2 ArrayBuffers +This is a convenience function to assist user receiver functions that +want to aggregate multiple payloads. +
    + + + + + + + +
    Parameters:
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    ab1 + + +ArrayBuffer + + + + beginning ArrayBuffer
    ab2 + + +ArrayBuffer + + + + ending ArrayBuffer
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + + + + + + + +
    + + + + + + + + + + + +
    Returns:
    + + +
    + buf - ab1 merged with ab2 +
    + + + +
    +
    + Type +
    +
    + +ArrayBuffer + + +
    +
    + + + + +
    + + + +
    +

    <static> receiver(profile, onReceive, onCreateFail, onReceiveFail)

    + + +
    +
    + + +
    + Create a new receiver with the profile specified by profile (should match profile of transmitter). +
    + + + + + + + +
    Parameters:
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeArgumentDescription
    profile + + +string + + + + + + + + + + name of profile to use, must be a key in quiet-profiles.json
    onReceive + + +onReceive + + + + + + + + + + callback which receiver will call to send user received data
    onCreateFail + + +onReceiverCreateFail + + + + + + <optional>
    + + + + + +
    callback to notify user that receiver could not be created
    onReceiveFail + + +onReceiveFail + + + + + + <optional>
    + + + + + +
    callback to notify user that receiver received corrupted data
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + + + + + + + +
    + + + + + + + + + + + + + +
    Example
    + +
    receiver("robust", function(payload) { console.log("received chunk of data: " + Quiet.ab2str(payload)); });
    + + +
    + + + +
    +

    <static> setLibfecPrefix(prefix)

    + + +
    +
    + + +
    + Set the path prefix of libfec.js. +Although not strictly required, it is highly recommended to include this library. +

    +This function, if used, must be called before quiet-emscripten.js has started loading. +If it is not called first, then emscripten will not load libfec.js. +
    + + + + + + + +
    Parameters:
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    prefix + + +string + + + + The path prefix where emscripten will fetch libfec.js
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + + + + + + + +
    + + + + + + + + + + + + + +
    Example
    + +
    setLibfecPrefix("/");  // fetches /libfec.js
    + + +
    + + + +
    +

    <static> setMemoryInitializerPrefix(prefix)

    + + +
    +
    + + +
    + Set the path prefix of quiet-emscripten.js.mem. +This file is used to initialize the memory state of emscripten. +

    +This function must be called before quiet-emscripten.js has started loading. +If it is not called first, then emscripten will default to a prefix of "". +
    + + + + + + + +
    Parameters:
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    prefix + + +string + + + + The path prefix where emscripten will fetch quiet-emscripten.js.mem
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + + + + + + + +
    + + + + + + + + + + + + + +
    Example
    + +
    setMemoryInitializerPrefix("/");  // fetches /quiet-emscripten.js.mem
    + + +
    + + + +
    +

    <static> setProfilesPrefix(prefix)

    + + +
    +
    + + +
    + Set the path prefix of quiet-profiles.json and do an async fetch of that path. +This file is used to configure transmitter and receiver parameters. +

    +This function must be called before creating a transmitter or receiver. +
    + + + + + + + +
    Parameters:
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    prefix + + +string + + + + The path prefix where Quiet will fetch quiet-profiles.json
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + + + + + + + +
    + + + + + + + + + + + + + +
    Example
    + +
    setProfilesPrefix("/js/");  // fetches /js/quiet-profiles.json
    + + +
    + + + +
    +

    <static> str2ab(s) → {ArrayBuffer}

    + + +
    +
    + + +
    + Convert a string to array buffer in UTF8 +
    + + + + + + + +
    Parameters:
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    s + + +string + + + + string to be converted
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + + + + + + + +
    + + + + + + + + + + + +
    Returns:
    + + +
    + buf - converted arraybuffer +
    + + + +
    +
    + Type +
    +
    + +ArrayBuffer + + +
    +
    + + + + +
    + + + +
    +

    <static> transmitter(profile) → {transmit}

    + + +
    +
    + + +
    + Create a new transmitter configured by the given profile name. +
    + + + + + + + +
    Parameters:
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    profile + + +string + + + + name of profile to use, must be a key in quiet-profiles.json
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + + + + + + + +
    + + + + + + + + + + + +
    Returns:
    + + +
    + transmit - transmit callback which user calls to start transmission +
    + + + +
    +
    + Type +
    +
    + +transmit + + +
    +
    + + + + +
    Example
    + +
    var transmit = transmitter("robust");
    +transmit(Quiet.str2ab("Hello, World!"), function() { console.log("transmission complete"); });
    + + +
    + +
    + + + +

    Type Definitions

    + +
    + +
    +

    onError(reason)

    + + +
    +
    + + +
    + Callback to notify user that quiet.js failed to initialize +
    + + + + + + + +
    Parameters:
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    reason + + +string + + + + error message related to failure
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + + + + + + + +
    + + + + + + + + + + + + + +
    + + + +
    +

    onReceive(payload)

    + + +
    +
    + + +
    + Callback used by receiver to notify user of data received via microphone/line-in. +
    + + + + + + + +
    Parameters:
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    payload + + +ArrayBuffer + + + + chunk of data received
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + + + + + + + +
    + + + + + + + + + + + + + +
    + + + +
    +

    onReceiveFail(total)

    + + +
    +
    + + +
    + Callback used by receiver to notify user that a frame was received but +failed checksum. Frames that fail checksum are not sent to onReceive. +
    + + + + + + + +
    Parameters:
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    total + + +number + + + + total number of frames failed across lifetime of receiver
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + + + + + + + +
    + + + + + + + + + + + + + +
    + + + +
    +

    onReceiverCreateFail(reason)

    + + +
    +
    + + +
    + Callback used by receiver to notify user of errors in creating receiver. +This is a callback because frequently this will result when the user denies +permission to use the mic, which happens long after the call to create +the receiver. +
    + + + + + + + +
    Parameters:
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    reason + + +string + + + + error message related to create fail
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + + + + + + + +
    + + + + + + + + + + + + + +
    + + + +
    +

    onTransmitFinish()

    + + +
    +
    + + +
    + Callback used by transmit to notify user that transmission has finished +
    + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + + + + + + + +
    + + + + + + + + + + + + + +
    + + + +
    +

    transmit(payload, done)

    + + +
    +
    + + +
    + Callback for user to provide data to a Quiet transmitter +

    +This callback may be used multiple times, but the user must wait for the finished callback between subsequent calls. +
    + + + + + + + +
    Parameters:
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeArgumentDescription
    payload + + +ArrayBuffer + + + + + + + + + + bytes which will be encoded and sent to speaker
    done + + +onTransmitFinish + + + + + + <optional>
    + + + + + +
    callback to notify user that transmission has completed
    + + + +
    + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + + + + + + + +
    + + + + + + + + + + + + + +
    Example
    + +
    transmit(Quiet.str2ab("Hello, World!"), function() { console.log("transmission complete"); });
    + + +
    + +
    + + + +
    + +
    + + + + +

  • Wallet Access Keys ','https://docs.lnpay.co',[ + 'class'=>'btn btn-primary', + 'target'=>'_blank', + 'title'=>'Use the API for basic functionality using the permissioned keys below.', + 'data-toggle' => 'tooltip', + 'data-placement' => 'right']);?> +